中学——程序之初
中学时候还谈不上软件开发,只是凭兴趣编制一些小程序,偶尔也编几个稍大一点的程序。有两件事情特别值得一提:
(1)当时我们只用BAISC,它有一种很特别的程序叫“一行程序”,也就是说,在一行内完成一个程序。因为BASIC语句一行只能容纳254个字符,而且一行内不许使用跳转与判断语句,所以一行程序不能完成很复杂的功能,但是有些有一定规律但又不很规则的图案打印或者计算任务可以由一行程序来完成。这是一种很好的游戏活动,非常适合于中学生的智力开发和锻炼。不知道现在是否还有类似这种形式的活动。
(2)中学期间我编过几个规模稍大一些的软件, BASIC代码行达到几千行(当时的16位机器内存加起来只有64K,用户程序可用内存不超过30K)。有意思的是,我在程序中还调用了我自己写的一段汇编,这段汇编直接操作图形显示缓冲区,实现图形的快速移动。AppleII机器使用6502处理器,当时也没有学过任何微机和操作系统知识,我记得那时一直不明白寄存器的概念,但是居然也能写出可以运行的汇编代码来,现在想来有点不可思议。不过从这件事情上,我也想到,我们经常听到有关青少年计算机奇迹的事情都是有可能的。他们可以自己编写代码制造病毒,可以攻击网络系统。青少年的想象力很丰富,潜力很大。
中学期间,虽然没有象样的成绩,而且还直接影响了我的功课,但是在计算机方面所做的许多工作使我非常充实。不过,因为计算机的神秘性对我已经不再存在,所以我上大学还是选择了我当时非常钟情的数学——免试进入南开大学数学系。
大学——兴趣
我在大学期间,花在计算机方面的精力要比数学方面多得多,在二年级时候,我有幸进入了南开计算机系模式识别实验室从事软件方面的工作。当时有一台286机器可供我使用,良好的工作条件使我有机会打下扎实的基础。
(1)学习汇编语言。汇编语言在当时很盛行,我写了不少的汇编程序,连界面(下拉菜单)都用汇编来写,对于10h中断和21h中断中常用的功能非常熟,不需要查参考书就可以写出功能调用来。当时我在对一块图像卡编程时需要访问扩展内存(地址0xa00000),所以我研究了286保护模式的编程技术,主要阅读15h中断的汇编代码,最终解决了保护模式的切换和编程问题。保护模式与实模式的切换在今天已经意义不大,但当时来讲,由于DOS是实模式下运行的操作系统,保护模式往往是可望而不可及的。
(2)PASCAL语言。PASCAL语言作为一种结构化编程语言,加上 Turbo Pascal友好的集成开发环境,当时确实风靡一时。对于我来说,汇编语言再加上Turbo Pascal开发环境,确实是无往而不利。 PASCAL语言具有很好的可读性,加上Turbo Pascal实现了单元(unit)管理功能,是学生最为喜欢的编程语言。我使用的 Turbo Pascal{zg}版本为5.0。据说到6.0已经成了面向对象的Pascal语言了。
大学时代我主要靠自学的手段学习计算机软件知识,而且几乎没有与别人交流的机会。但是南开很好的学习上机条件使我在DOS操作系统、汇编语言、PASCAL语言以及80286保护模式编程这些方面得到了很大的提高,我很怀念那段时光,那是我学习生涯中最美好的一个阶段。当我临近毕业的时候,Turbo C 2.0逐渐传播开来,我开始从 Turbo Pascal转向Turbo C。
研究生——狂学
虽然我在大学期间已经很了解清华了,但真正让我认识清华还是在自动化系读研究生这一段疯狂的学习和工作之中。大学期间扎实的基础足以让我应付任何一个编程难题,而且我又很快转到Turbo C上来,有了这些工具,作为清华的学生,干点课余之事就很正常了。
我当时在一家数据工程公司兼职,该公司云集了清华计算机系一群高手,我跟他们在一起,真是受益匪浅。这些高手们每个人都有独挡一面之才华,对于汇编和C 语言都非常精通。由于DOS操作系统的简单性和开放性,在DOS平台上我们几乎可以完成任何一件事情,再底层的难题我们都有办法解决,我想那个时代的每一个高手都会有这样的经历和体会。这几年我和这些朋友们失去了联系,不知道他们现在怎么样,我想他们都会很不错。
群体的作用对我帮助很大,而且我在软件方面的知识面也逐渐开阔起来。在商业公司这样的环境中,我接触到了许多其他的编程技术,如FoxBase、汉字处理、简单的网络编程等,有些技术在当时非常新,比如多媒体编程,包括声卡、视频卡、触摸屏等编程技术。
很快Borland C++ 3.1流行开来,这是DOS平台上{zyx}的开发工具。Borland C++的集成开发环境加上相关的一些辅助工具,如 Turbo Debugger等,是一个功能很强大的软件开发工具。从C语言到C++语言是一个很自然的迁移过程,尽管当时很多人在使用BC,但他们往往不涉及到面向对象编程,而我则很快领会了面向对象的思想,建立了一套自己的界面工具类库。我这一套界面工具类库很小,参照Turbo Vision的思想,模仿Windows 3.1的风格(当然功能上差远了),大约只有2000多行代码,而且支持汉字的显示。尽管规模很小,但也包括消息机制,下拉菜单、窗口、对话框、按钮、编辑框等界面元素,在随后的毕业论文工作中我用到了这套工具,然后弃之不用了,因为我又转向Windows编程了,倒是我几个同学用这套工具做了些程序。
研究生期间是我对计算机开发技术最有热情的一段时间,而且学习的效果也很好。清华大学的风气比较注重实用,在技术的选择上比较超前,群体气氛又好,这是我学习最见成效的一段时间。当然,我并没有因为这些事情而耽误我的论文工作,这两者是相辅相成的。我想清华现在的学生会做得更好、学得更好吧。
职业生涯——致远
从清华毕业我来到了一墙之隔的北大,在北大计算机研究所,我开始了计算机软件开发的职业生涯。尽管我以前一直没有把计算机当作自己的本职专业,但事实上我一直偏向于软件开发。最终我还是选择了职业软件开发工作。我在北大计算机研究所的软件开发经历可以分为两个阶段:
(一)1994年到1997年
这一段时间我精力集中在应用开发上。职业开发人员与学生一个很大的区别是,你对技术、平台和工具的选择必须符合应用开发的需要,不能像学生那样随心所欲。我在这三年的开发过程中,基本上仅局限于Windows平台、Visual C++以及MFC。幸好我的工作面比较宽,涉及到系统的多个方面,所以我对Visual C++以及MFC的使用比较全面,三年工作下来之后,我对于Windows应用开发已经非常明白了。
由于我们使用VC和 MFC比较早,当时基本上没有资料,我一直鼓励其他人去读一读VC自带的一本“开发者指南”,这本书包含在VC的联机帮助中,据说是 Inside Visual C++的前身,从内容上看是有可能的。当时我没有看过其他的书,平时碰到问题往往通过MFC的源码、VC的例子程序以及联机帮助来解决。现在学习VC和MFC要方便多了,书店里这方面的书琳琅满目,而且身边往往高手如云。尽管我从MFC的源码中学到了很多东西,但这是在没有办法的情况下而为之,我不太赞成研究源码,除非是为了学习的目的。
(二)1997年到1999年
由于健康的原因,我被迫从开发人员的岗位上撤了下来,从97年下半年开始,我不再从事直接的开发工作,改做技术支持工作,是对开发人员的技术支持,不是最终用户的技术支持。这是我程序生涯中最暗淡的日子,但我还是努力让自己吸取营养,来填充自己对知识的渴望和需求。 这段时间,我考虑的焦点问题是如何把软件做得更好,具体来说,就是组件化程序设计,进一步具体化,我研究COM,并设法把COM技术应用到其他的开发组中,为其他人提供这方面的技术支持。我的工作做得不是很成功,COM的应用不是那么直截了当的,这在当时的条件下是很难克服的。
我有必要再次强调群体的好处,北大计算机研究所内部高手如云,大家都是同事关系,所以交流起来比较方便,在这样的环境下,技术上的长进可以快得多。我又一次得益于环境的优势。 从学校环境来讲,我从南开到清华再到北大,尽管三个学校的校园都很优美,南开有新开湖和马蹄湖,清华有水木和荷塘,北大有未名湖和博雅塔。但是在我的职业程序生涯中,未名湖给了我很多启迪,当我从事开发工作或者写作时,我经常在夜晚到未名湖畔散步,从她幽静而深沉的气息中汲取灵感。
结束语
我是一名普通的程序员,在软件开发队伍中算一名老兵了,以上所介绍的经历是我十几年的路,走的路很长,但是没有值得一提的成绩。也许我的介绍中有一些偏颇之处,请大家不必挑刺,因为这只是我的一点感受,真实的感受,它所反映的仅仅是一个侧面。