一个“老”程序员的个人回顾
有一次出差途中,幸遇一位程序员。初观其貌,约30有余,姑且称其为“老”程序员。这位老兄初看不善言辞,但同他侃起他软件开发的经历时,其人滔滔不绝。我虽非干这个行当的,但据我的社会经验他绝不是在夸夸其谈,借机吹嘘自己。所以照其原话一字不差,摘录下来,供有兴趣的人们读一读解闷:
“从1989年进入大学开始,到而今攻读博士学位已经有12年有余。虽然我的专业一直都是软件,但并非一进入这个专业便可以算作从事了这个专业。假如认为大学期间幼稚有余,从硕士真正算是进入了软件开发领域,至今也有9年之多。然而,这些年来我都作了些什么呢?
计算机领域的发展之快令人目不暇接,自不待言。九十年代初期,国内仍然是DOS盛行的时代。那时,我在试图分析这个实在不能称之为操作系统的小系统。经常为能够随意控制DOS而洋洋自得。先学习BASIC,然后是PASCAL、汇编、C等语言。也曾经对BIOS系统中的二进制码的进行过一些分析。有时狂妄地想,只要是能够形式化的东西,都可以用软件表达出来。而且把一个整个的PC都为我所用也绝非难事。
这时,我又接触到了实实在在的计算机网络。说是网络,其实多数人指的不过是局域网。更有甚者,那时NOVEL网实际上就是局域网的代名词。如果你在那时的计算机书店看到一本讲计算机网络工程和编程方面的书,不管书名里有没有NOVEL这几个字母,十有八九就是讲NOVEL网的。此时,我便忙于学习和研究NOVEL网的通信原理。学习NETBIOS、IPX/SPX等协议,学会了在局域网上如何进行点对点以及广播通信。还为自己写了一个在局域网上进行聊天的工具而沾沾自喜。另外,大约是在九十年代初期,有很多人认为网络编程就是SOCKET编程,私下认为实在是误解。
然而,细想起来,那些日子都在忙于学习语言和用最低级的工具反汇编系统的代码。对于网络,也一下子陷进了使用具体协议的编程细节。对整个软件系统的大局方面并无瑕顾及。一句话,整日是在代码中摸爬滚打,完全没有时间对计算机系统的大局方面进行任何的考虑和思索。
进入WINDOWS时代后,虽然也对WIN3.1在心里以及行动上进行过讽刺与抵制,然而由于外界需求以及陆续推出的WIN95/NT,还有对技术的狂热,又开始投身于WINDOWS系统的分析与开发。这时,又学习了SDK、VC、VB以及DELPHI。经常为自己能在一两个星期内迅速掌握DELPHI这样的工具高兴不已。也为自己用DELPHI在几个月的时间里开发出了一个类似于DELPHI的某领域内的开发工具而兴奋。
这时,我也早已认识到开发语言的相似性以及工具性。各种语言只不过是有一些独特的语法以及关键字组成。再进一步,采用各种语言的开发工具也不过只是提供了各自的一些函数库/类库。学习起来并非难事。所以,这时(大约为1995年)我也停止了购买单纯讲解如何使用某种语言或开发工具(如VB、VC等)的书。
接触UNIX系统是在上班之后的事情了。UNIX系统的命令行设计之精致和X WINDOW的巧妙结构使我感叹不已。然而由于工作和兴趣的关系,以及WINDOWS系统之普及性,使我又很快的离开了阳春白雪的UNIX。即使如此,我总是幻想着为UNIX开发一套类似于DELPHI/VB的工具。然而由于各种原因始终未能付诸实施,而今已有类似产品,使我心痛不已,有点自己的孩子却由别人带了的那种‘大胆的’酸楚。
大约是95年,JAVA横空出世。这种不能简单地称之为编程语言的语言,使我爱不释手。由于它的简单性、可移植性以及健壮性和迎合了当时INTERNET的发展,便又使我投身其中。幸好我没有仅仅关心其语法的细节,从那种在语法上带了若干多余修饰的‘近乎煽情’一般的C++转向‘娇小秀气’的Java,使得我有余兴考虑到底什么是面向对象的风范这个问题了。
面向对象的思想我是从1993年便开始接触到的。然而,直到今日我仍不能宣称自己掌握了它的精髓。广义而言,使用面向对象的语言设计与开发并不一定进行的就是面向对象的设计与开发;再大胆地进一步讲,使用非面向对象的语言设计与开发并非一定就不是进行的面向对象的设计与开发。不客气地讲,目前面向对象的开发者大多数情况下只是把数据和函数简单地以类为单位组织起来而起。我是直到接触了设计模式,才真正领略了面向对象风范的初步轮廓。
新技术、新系统和新语言层出不穷,极度编程(XP)、重构(Refactoring)、设计模式、反模式(AntiPatterns)、分析模式、UML、RUP、中间件、RMI、 J2EE、.NET 、Linux、WinCE、WinXP、Java、C#(有些看似很新,其实只不过同大众尤其是没有INTERNET时的国人信息来源不畅有关);就是一些老的但至今仍流行不衰的系统和技术如CORBA、TCP/IP、面向对象等我们也不能不提。
虽然在跟进新技术方面,我做的不算太差,然而仔细想想,为什么我没有推出有力的作品呢?另外,好像我太强调个人问题了。所以必须补充一点的是,现如今人力资源炒作的’团队精神’。这种炒作使得人们有一种误解,认为国人从来没有考虑过人与人合作方面的问题。其实,我们的祖先早已留下‘一个和尚挑水吃,两个和尚抬水吃,三个和尚没水吃’的经典评论。他们也考虑了这个合作问题。私下认为,‘团队精神’绝非仅仅是能力问题,而在很大程度上是个人品问题。再说远一点,先前有一本叫做《谁动了。。。》的洋书不幸畅销,又让国人忘了祖先早已留下的至理名言‘亡羊补牢’、‘未雨绸缪’等寓言故事和成语的存在性。
回到技术正题:除了狂热地跟进新技术,作为一个软件从业人员的我们还需要做些什么呢?这是任何一个意欲长期从事这个技术的人必须思索的一个大问题。我虽然也回答不了这个问题,但我的经历告诉我,不能再在代码里摸爬滚打了!当然,我不是指不编程了。而是要时刻记住从更高的角度审视自己的代码。同时,应该不断地分析成功系统的体系结构,如JDK、MFC、VCL等。”
稍微沉闷了片刻,他颇有点怀才不遇地说:
“哎,现如今的社会说是需要有推销自己的能力,其实他们说的是还要有点卖弄自己的本事。不过这也是我的一家之言。我也不知道怎么回事,至今也没有碰到合适的机会。虽然现在软件业不景气,面试倒是也有一两回。但不知为什么,都没有下文。”
正如我的经验判断,其人不善言辞。但还是颇有几分内秀,所以我和他交换了联系方法。正当我要鼓励他几句时,我们已经到达了目的地,大家一阵匆忙地打点行装,便在拥挤中各奔前程了。真希望他能得到好的机会,尽早发挥自己的才能。