您的位置:知识库 »

我的五年程序人生

作者: RicCC  来源: 博客园  发布时间: 2008-09-04 21:40  阅读: 6048 次  推荐: 2   原文链接   [收藏]  

     忘记清华北大,我开始从书店搬回这样那样计算机的书。大学一开始也有计算机基础课,就是讲讲Windows,Word怎么用之类的,我对这些没多大兴趣。 计算机的技术方面太多,图书数不胜数,一到书店,准被五花八门的书,各种各样不理解的技术弄的眼花缭乱。那时对计算机可以说一窍不通,没有什么人可以求教 指导,不知道该学些什么。


    最开始看的是谭浩强的《C语言程序设计》,这本书很不错,我一个什么都不懂的人也看懂了C语言,虽然还是有很多概念半懂不懂的,比如指针之类。后来的物理 课跟计算机结合比较多,书上有非常多的C语言程序,很多的东西都要求我们在计算机上用图形去模拟,需要上机实验做出来。比如简谐振动,到后来是模糊控制论 里的一些东西,例如书上的一个示例,将数据用模糊函数整合到一副蒙娜丽莎的图像里面,通过模糊函数可以将数据再还原,而蒙娜丽莎的图像和原图相比,只是多 了一些躁点。这样使得对TC2.0的编译、调试、图形界面开发有了一个全面一点的认识。


    学完C语言,感觉计算机硬件、原理方面太多东西不懂,因此开始看计算机体系结构,看汇编。清华大学出版社的《80x86汇编语言程序设计》,黑色封面厚厚 的一本,在黑灯瞎火的摸索中,通过这本书我把汇编搞懂了。当然一开始怎么也想不透各种各样的寄存器是做什么用怎么工作,代码段、数据段、各种各样的中断调 用是在做什么,保护模式编程是怎么回事,硬着头皮往下看,一遍又一遍的翻到前面去琢磨理解,不停的写代码测试验证,最终对汇编、计算机工作原理有了个正确 的认识。看到Win32汇编部分实在看不下去了,因为又涉及了Windows各种各样API的调用,多任务切换下寄存器现场保护等等。

 

    后来看了Windows FAT16磁盘结构,反汇编研究磁盘引导区,自己写了个读写软盘的程序替换系统中断,居然还能正确的按照FAT16格式读写软盘,很有成就感的样子,因为 整个软盘每个字节的读写都在自己控制之下。再后来反汇编研究DOS系统引导区,追踪DOS的启动引导代码,研究DOS工作原理,对这个简单的操作系统加深 了理解。


    最后大学的毕业设计课题,选的Motorola的单片机编程。我负责写Boot Loader,也就是单片机启动之后执行的一段初始化程序,一方面需要初始化整个单片机运行环境,另一方面需要监听一个通讯端口,随时准备从PC接收程序 代码,进行Flash擦写。写这个最难的地方是Motorola的单片机指令集不是标准的x86汇编指令,单片机结构很多都是Motorola特有的,需 要知道怎么用,只能查文档,而文档全是英文的。象我英语那么差,只有头痛的份,慢慢的啃。还记得独特的地方,是它的Flash为128K,由4个 Flash存储器组成,必须每32K进行切换控制。另外一个有意思的地方,是它的网络通讯,一个非常简单又完整的网络通讯协议:S协议,还清楚的记得S0 表示开始发包,S9表示结束发包,S1、S2等是中间具体数据包。


    写汇编有很多有意思的地方,例如一个最底层简单而又完整的操作系统很容易就呈现在你面前,例如整个计算机是如何运作你可以彻底弄清楚,例如很容易你就进入 到反编译黑客的世界,面对各种代码优化技巧,常常让你有豁然开朗的感觉。工作后遇到了聪明的Dick,最喜欢研究反编译、脱壳、解密,还做出过不少的成 果,他的汇编功底其实不如我,虽然老是在一起讨论汇编、加壳加密技术,但我那时的兴趣已经不在这个方向。


    汇编研究到Win32环境后,对Windows的兴趣使我开始研究Windows编程。Petzold的《Windows Programming》,绝对的经典。这一次无异于又开始了一个新的汇编历程,不过针对的是Windows的环境而已。我饱偿着自学过程中的一切苦恼, 例如没有指导,没有交流,每接触到一个新的概念,只能自己瞎琢磨。印象最深的是暑假不回家,火热的7,8月校园里面空空荡荡,蚊子掉到地上都可以听到,一 个人呆在教学楼里静静的看。Windows窗体类、消息循环回调函数、各种API、结构等等,总有无数不懂的地方,想不明白时就望着窗外刺眼的阳光,常常 走神,想到很多其他的东西。如今回想,这些场景还历历在目,可以清晰的感受当时的环境心情。仍然是学汇编时的老方法,硬着头皮往下看,反复的翻到前面去对 照思考那些没有理解的概念。我的那些计算机书,封面都是用透明胶严严包起来,为了防止反复翻来翻去弄骤了。看着在Windows下,出现主界面,每一个显 示每一个事件都任我摆布,非常兴奋,感觉自己快要掌握世界的真理了。


    自己有了兴趣想写点东西,于是开始写五子棋。那时候没多少机会上网,没有参考任何五子棋方面的资料,就是用自己想的方法,也是最原始的算法去写,一个数组 记录棋盘走子情况,一个大的链表存储各种形式分析用的元数据结构。人机对战算法有点笨,进攻性差,基本处于防守状态。后来一直思考如何让电脑更聪明,想把 它写完美,不过面临毕业的其它事情,被搁置起来了。


    Windows编程看到MDI,发现太繁琐,觉得做这样的事情不应当用Windows C折腾了,因此开始看David Kruglinski的《Inside Visual C++》4th Edition,也是经典之作。VC只是看了个大概,Template、MFC仅仅处于了解的程度,就没怎么继续下去了,将我的五子棋搬到MFC下面实现 过,也只是简单的使用MFC画画窗体,管管消息循环。


    临近大学毕业,是忙一些形式工作了。我知道自己不是计算机专业,为了找工作几个计算机方面证书是必不可少的。先是考3级,我考的A,偏硬件方面的,因为这 个拿手。3级证书相当顺利的到手。接下来是高级程序员,这一次有点犯难了,考中程自己把握很大,而高程没底,据我们那种学校的消息,高程非常难考,而当我 打算考程序员时,是我大学期间的最后一次程序员考试机会了。我选择了高程。数据结构、编译原理两本书被吃透了,计算机体系结构、软件工程等都系统的看、复 习一遍。大学毕业的前夕,我领到了高程证书。


    整个大学期间成绩一塌糊涂,毕业的时候不够拿学位证,后来系里发慈悲酌情考虑,我还是拿到了学位证。在这个满世界研究生博士的年代,我连个大学生也是不够格的。


    毕业的时候,包括现在,回顾大学4年,烟酒游戏里面沉醉过,愤懑与理性之间迷茫过,有失去,有付出,有收货,有被认可。正如高中,如果再多个一年半载的努 力,我会出身清华;大学里如果再多个三五成投入,我也能成为大家眼中的超级强人。但人生总会有那么些遗憾,不然怎会见得完美。我得感恩仁慈的上帝,让我在 荒野、险恶、举步唯艰的幽暗森林里没有迷失方向。

2
0

热门文章

    最新文章

      最新新闻

        热门新闻