编程十年 (4):步入编程殿堂

本文地址:http://www.cnblogs.com/AndersLiu/archive/2011/04/22/programming10years-04.html

作者:Anders Liu

1998年,上高中。因为迷恋电子制作而“玩物丧志”,从市重点降入区重点高中。按说这个结局会让我老爸对我玩电子制作这件事深恶痛绝,但没想到的是,假期开始的时候,我老爸甩手就给了我200块钱,让我随便买零件,随便折腾。这原是欲擒故纵之计——200块钱还没花掉一半,我就知道了自己原来不是玩硬件的料。于是放弃。

就这样,高中的第一个学期基本上没有接触过任何计算机或是电子方面的东西,主要的业余活动就是打篮球。不过到了1999年,高一的下半学期,我惊喜地发现竟然有计算机课程,而且每周2节——一节理论、一节上机实验。但是这门课是没有教材的——就靠老师讲。

结果没想到的是,这门课并不只是浅浅地讲解计算机的入门知识和使用方法,而是讲解编程的。更牛逼的是,第一节理论课里老师就讲完了所有基础知识并且开始介绍编程——QBasic编程。不过第一次实验课并没有学习写程序,只是熟悉键位,顺便练习一下上次课讲的一些基本DOS命令。

因为在初中的时候已经记熟了键位,而且摸过计算机,所以当别的同学还趴在键盘上从浩瀚的按键中寻找A、B、C时,我已经搞明白老师讲过的所有DOS命令了。这让我的虚荣心和成就感得到了极大的满足,也鼓励着我之后的计算机学习。当然,“幸运”的是,高中同学竟然没有人家里有计算机,初中时也没接触过计算机,这也许就是塞翁失马的道理吧,虽然从市重点“掉到”区重点,但自己的相对水平却提高了。

虽然到了90年代末期,图形界面已经成为主流,但学校配备的计算机还是很老旧的486电脑,安装的是DOS操作系统。记得实验室里电脑的机箱上还有个“Turbo”按钮,旁边还有LED数码管显示着CPU的主频,平时是75MHz,按下Turbo按钮后则会显示90MHz。

不过应该感谢这些老旧的电脑,如果一开始就给我个花花绿绿的Windows,我真不知道自己是不是还能坐下来踏踏实实地写程序。

由于在第一个学期期末的时候已经知道下学期的课程,所以在假期里我打算做些准备。恰好快到春节,妈妈带我去大姨姥爷家串亲戚,回来的路上我拉着妈妈去逛附近的花市新华书店——以买教参为由,她当然无法拒绝。结果,却只抱了一本QBasic的书回来,搞得妈妈很是诧异,小心翼翼地问我“这个书上课有用么”。而我则理直气壮地回答“当然有用,下学期要开这门课了”。

回来之后,自然就是抱着这本书啃了。这本书真的是不错,虽然装帧很简陋,不像什么经典著作,但是内容很充实。这本书并不是只介绍QBasic的关键字和语法,而是花了不少篇幅介绍了结构化程序设计,我就是通过这本书前面的几章知道并且理解了顺序结构、选择(分支)结构和循环结构。而且,这本书还介绍了流程图的画法,而我在一开始学习写程序时,还真的一本正经地在纸上画流程图呢。

当时家里并没有计算机,于是我专门找了一个小横格本,拿铅笔在上面画流程图、抄写程序。然后,等到上机的时候,我就会带着这个小本,照着敲进去测试。这种特殊的情况对我来说利弊参半,不好的一方面是,我必须忍耐一周的时间才能检验这些程序的正确性;不过,好的一方面是,这给我留下了充足的时间去改进程序,而且打下了比较坚实的手写程序的功底,能够熟练掌握语法而不依赖编译器的检查。

就这样,一个学期过去刚一半,我就基本上掌握了QBasic的语法和结构化程序设计的思路。而我买的那本书,内容还不是一般的充实,在最后几章,还介绍了QBasic的图形编程。而我说什么也不相信,在DOS这种字符界面下,竟然能绘制图形——虽然当时Windows已经流行起来,但我还没有见过呢。于是我抄了几个书上的例子,等到实验课时带到机房试了一下,果然可以!

于是在接下来的一周里,我开始专门研究QBasic里的绘图函数,然后编写了我人生中第一个程序——绘制机器人。之前学习基本的语法,都是要么抄例子,要么做习题,并没有自己的想法。而这一次,例子和习题已经不能满足我的兴致了,我腿儿硬了,要自己走了。我在前面提到过,我认为能够把自己的想法写成程序就叫“编程”了,所以我认为从这时起,我已经会编程了。

其实这个程序非常简陋,就是用矩形和椭圆形拼凑成一个劣质的机器人形状,整个程序就是一个顺序结构,依次画出各个形状就是了。不过,编这个程序的过程还是很麻烦的,首先得在纸上按比例画出屏幕边界和机器人,然后就是计算每个关键点的坐标。由于没有机器做实验,所以图不能画得太潦草,大致比例还是要准确一些的。

当然,这样简单的程序是不足为奇的,所以我很快又写出了改进版本——动态绘制机器人。就是,先从屏幕上方落下两只脚,然后落下两条腿,然后是身体、胳膊和头。这次终于不完全是顺序结构了,循环也用上了。

后来还写过一个无聊的程序,随机循环在屏幕上画圈,而且是死循环。然后把程序发给同学,搞恶作剧。

不过,不管是粗糙的机器人,还是无聊的恶作剧,都足够我在班里吸引众多眼球了,虚荣心再次膨胀。但很快这种爽歪歪的日子就结束了——快到期末了,计算机课结课了。

  • 回到《老刘连载:编程十年》
  • 上一篇《初识计算机》
  • 下一篇《站在网络边缘,却陷入信息孤岛》

转载于:https://www.cnblogs.com/AndersLiu/archive/2011/04/22/programming10years-04.html

编程十年 (4):步入编程殿堂相关推荐

  1. 作为一名新晋码农,以下是我个人的工作心得,希望能帮到刚步入编程殿堂和使用vue-cli和ant-design-vue UI组件库的童鞋们

    作为一名新晋码农,以下是我个人的工作心得,希望能帮到刚步入编程殿堂和使用vue-cli和ant-design-vue UI组件库的童鞋们 之前需求总结: 12.29错误总结: 12.30日总结: 12 ...

  2. QT开发(五十)——QT串口编程基础

    QT开发(五十)--QT串口编程基础 一.QtSerialPort简介 1.串口通信基础 目前使用最广泛的串口为DB9接口,适用于较近距离的通信.一般小于10米.DB9接口有9个针脚. 串口通信的主要 ...

  3. 编程十年的十种武学境界

    首先非常感谢大家这么多阅读量,评论和推荐.针对大家评论中的问题,在这里做一下统一回复.首先对于要我介绍程序媛的女朋友问题.我周围有一些没结婚的程序媛.她们对男孩子的物质要求都不高.但是女孩子生性浪漫, ...

  4. 编程十年 (2):前传2——哪有这么牛逼的游戏机?

    编程十年 (2):前传2--哪有这么牛逼的游戏机? 本文地址:http://www.cnblogs.com/AndersLiu/archive/2011/04/19/programming10year ...

  5. 游戏编程十年总结(下)(转)

    游戏编程十年总结(下)(转) 一.总结 一句话总结:看完作者的文章,我的感悟是:不到顶尖,终成废土,而且我要是不居安思危,不能够明确自己的处境和社会的竞争,必挂无疑. 这样的故事,真的需要多看. 作者 ...

  6. Python编程基础:第三十九节 面向对象编程Object Oriented Programming

    第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...

  7. [转]Teach Yourself Programming in Ten Years——用十年教会自己编程

    作者:Peter Norvig 译者:刘海粟 本文原文为:http://norvig.com/21-days.html 该翻译文档的PDF版可以在这里获得:http://download.csdn.n ...

  8. 程序员父亲的遗产——编程十诫

    我的父亲在和我彻谈编程两个星期之后就去世了. 那个时候我22岁,一个刚刚完成美学学士毕业设计的大四学生.而我的父亲62岁,比大多数我同龄人的父亲都要老.早在60年代,他就已经在田纳西理工大学开始编程了 ...

  9. 程序员父亲的遗产——编程十诫 转载

    我的父亲在和我彻谈编程两个星期之后就去世了. 那个时候我22岁,一个刚刚完成美学学士毕业设计的大四学生.而我的父亲62岁,比大多数我同龄人的父亲都要老.早在60年代,他就已经在田纳西理工大学开始编程了 ...

最新文章

  1. 为什么UI线程中创建Handler可以不传Looper?
  2. Android成长日记-使用ViewFlipper实现屏幕切换动画效果
  3. [转载]Office Visio快捷键
  4. SBO系统中销售订单日志的跟踪统计思路分析
  5. QT的QPlaceContent类的使用
  6. Django从理论到实战(part52)--登录、注销及登录限制
  7. 使用云效Codeup10分钟紧急修复Apache Log4j2漏洞
  8. 使用Lucene索引和检索POI数据
  9. 非功能性需求_非接触式喷射自动点胶机的优势在哪儿?
  10. Python线性代数扩展库numpy.linalg中几个常用函数
  11. 如何让地面不起灰_地面不平能铺地板吗?木地板不平怎么修复
  12. 解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。
  13. NGINX优化之路(一)
  14. 应用机器学习(七):随机森林
  15. 针式打印机套打+lodop
  16. 万能五笔输入法弹窗_万能五笔输入法广告屏蔽的方法
  17. 费解的开关 (蓝桥杯倒计时12天)
  18. 关于substance painter 导出贴图到maya步骤
  19. 六、总线(一)总线概述
  20. C++内存管理方式——new/delete

热门文章

  1. 二维数组的查找,刷题成功——剑指Offer
  2. solaris下常见文件压缩/解压方式简单小结—待续中
  3. Swagger UI 与SpringMVC的整合 II
  4. 成长型公司的存储架构
  5. Cambridge center for social innovation
  6. ai入门视频,亲测有效
  7. apple的photo实际上是一个dashboard
  8. linux nohup screen注解
  9. ubuntu编译并调试OpenJDK8源码实践
  10. 毁掉云计算项目的三个“好办法”