[转]老程序员十年生涯黯然总结
作者:cmscn 日期:2006-12-14
今年是我大学毕业满10年的日子,也是我投身it技术的第10年。一直想能对过去的经历做些回顾与反思,以更好地走向未来,但总没有笔。刚好csdn举办“讲述程序员的故事”征文,这件事成了一个引子,我终于趁着暑期有时间,敲了一天键盘,便有了这篇人生自述。
10年对于一个人来说是比较长的一个阶段,10年之后,同期大学毕业的同学情况差异之大,让人叹息命运之变幻莫测。
我在此记录下了我的生活足迹,由于时间较长,有些事记得不太清了,但我是尽量真实的记录当时的情况,有兴趣看我这篇长文的人请把我看成是一个在你我中间一块生活,一起喜怒哀乐,一起努力的平凡人,相信我们之间会有很多跨越时空的情感交流。
好,就说到此吧。
序
从1994到2003,不知不觉之间,我已在计算机技术的世界里沉浸了十年。有位哲人说过:如果一个人能用十年的时间专心致志地研究一门学问,或学习一门手艺,或从事一个职业,他一定能成为这个领域的专家。我天资平庸,但哲人的话是有道理的。我用十年的时间先成为了一名合格的程序员,再成为了一个重点大学计算机专业的大学教师。十年磨一剑,蓦然回首,年华如水,青春如歌!
我父母都是城市中的平民,家境仅能解决温饱,我想我可能代表了中国社会的一大类青年,我的经历与体会可能会对许多条件并不好的年青程序员有所启示:只要努力,天资差与环境不好都是可以克服的。因为我不是牛人,所以我不能教你如何成为牛人,我只是尽量真实地写下我的经历与感触,写一个平凡人的努力过程。我为我是一个软件开发者而自豪,为我从事的教书育人的事业而自豪,并愿意为中国落后的软件业尽己菲薄之力,为此,我人生无悔!
我想分为三部分讲述我的人生经历:上篇:学习人生:主要是我学习计算机技术的经历与感触,时间跨度大约是从1994~1996年;中篇:艰难人生:主要是我流迹社会,失业一年半,三次考研的痛苦经历;时间跨度大约是从1997~1999年;下篇:实践人生:主要是我的技术实践经历:在公司打工,开发软件,毕业求职与教书生涯,时间跨度是1999~2003。
一 计算机是什么东西?
我是七十年代初在中国出生的那一代人,等我们长大开始读书时,文革已经结束,相对于我们的兄长,从我们这一代开始,以后出生的孩子都能受到较为正规的教育,这是我们幸运的地方。
也就是我们上小学的时候,七十年代末,以美国为技术资源中心的计算机技术开始在全球范围内迅猛发展,这时正是世界性的“软件危机”极为严重的时候,计算机技术各方面都在酝酿着新的突破,而此时比尔盖茨也正在准备构建他的明日微软帝国。
七十年代末与八十年代初,在我们的生活中,看不到一点计算机技术的影子,刚刚改革开放的中国,99%以上的人连“计算机”这个词恐怕都没听说过,中国游离于信息技术大门之外。
在“振兴中华”成为时代主旋律的八十年代,整个中国真的是呈现出一种勃勃的生机,这是一个民族在经历百年耻辱,十年挫折之后的再起步,象一些老歌---《金梭与银梭》,《在希望的田野上》等,就是当时青年的一种积极向上的精神风貌的体现。这种环境下,对于正在成长中的我们这一批少年,在潜意识中有极为深刻的影响,我们认为爱国与振兴中华是天经地义的事,并且成为了努力学习的主要动力(呵呵,现在的一些“愤青”---愤怒青年一定会说我们当时被“洗脑”了,也许真的是吧,这种信念确实会给人以极大的动力,我看不出有什么不好,至少我不会有现在这一批青年所经历的非常迷茫的感觉)。
1986年我考上了桂林市重点高中---桂林中学,在那儿,我第一次见到了电脑。
1.中学的计算机兴趣班
1987年我在桂林中学读高二,桂中是重点高中,条件较好,当时学校课外安排了两个班:无线电班和计算机班,我上的是计算机班,当时用的微机是apple ii,用basic编程。记得当时中国也开发了一种同档次的计算机,叫做中华学习机,要在中小学中大力推广,但apple ii后来发展成了著名的mac系列,并拥有了自己的操作系统,而中国的中华学习机,还有后来的小霸王等电脑学习机,都无疾而终了。
学校安排上机,有同学不知从哪找来了一些有趣的basic程序,什么“比翼双飞”,“飞机空战”等等,都是一些非常简单的小游戏,当时他抄了厚厚一本,一上机就敲一些到计算机中运行,而我是一点也不会,只有站在一边看的份。
那时会计算机的人很少,老师讲的我又不明白,考试的时候也不知道怎么过的。呵呵,后来我读研打工时,在网上看到洛阳一个高中生用vb编的一个“电子书童”程序,水平之高,我当时真是没法比。
1989年六四动乱,广西高考名额一下减了7000多,竞争激烈,十几人里才能取一个,由于压力过大,我高考前夕失眠,第二天考语文,120分的试卷当时只考了68分,因而与重点高校无缘。本想复读,但父母怕我来年考不上,一定要让我读广西大学,我万分不情愿地顺从了父母的意愿,去了我不喜欢的学校,读了我不喜欢的专业。男怕入错行,我在大学毕业后重新开始学我喜欢的专业,足足用了五六年的时间才转过来,真正成为一名合格的劳动者,走了一条长长的弯路,所以,父母的决定对缺乏经验与决断力的孩子而言,真的是非常重要。
现在想起来,父母当时没错,我也没错,那都是在时代与社会环境下的自然选择。
2.失败的四年本科与工作初期
作为六四之后第一批进入大学的本科生,我们学习了两年的“六四风波的反思”,四年里我是个老老实实的好学生,但四年除了玩命过了六级,什么也没学会。
记得大学第一节课就是basic语言,呵呵,也根本没学会,但我看来注定了要与basic难解难分了,后面的实践篇中我会讲我用basic开发的事。
大学里我学的专业是电力系统自动化,学过微机原理与fortran,上机时还用的是古老的主机加终端方式的计算机(叫做l/f机),我上机时真是一塌糊涂,因为这门课我从没学进去,也从没学懂过。有同学很厉害的,会用电脑打印出许多漂亮的图片(当然现在看起来很粗糙,针式打印机打的),我那时就称这些人为牛人了。
呵呵,我如果没记错的话,做超级解霸的梁肇新也是广西大学的,但不是我们系,记得我当时就已听到有关几个计算机牛人的事,估计其中就有他吧,如果我记错了,梁肇新先生请指正。在本科期间,我对电脑是神秘多于兴趣。这也说明我成为不了牛人与大师,天资有限。后来,我发现一个普遍的规律,如果能成为计算机方面的牛人与大师,请去翻翻他们的传记,绝大多数在本科期间就已展露出他们的才华。而我们现在的中国高校,这么多的本科生都在为考试、考研、考托、考g而奔忙,这种填鸭式的应试教育体制,扼杀了太多学生的创造性。结果是一个学生在大学里读得越认真,就受到的错误影响越大,我是用好几年的时间反思才得出这个结论的。所以,中国高校十几年数以几十万计的本科生中出不了可编写linux内核的杰出人才,一点也不奇怪。
1993年我毕业了,用我总结的一段话来说,是:
一张白纸进来,一脑浆糊出去。
毕业后我分到了一所号称是“中港合资”的生产蓄电池的公司,呵呵,刚刚工作的日子让我这个单纯的大学生被生活好好的教训了一下,许多无法以前想象的社会现象让我目瞪口呆,年轻气盛导致穿了小鞋,还只能忍气吞声。吃了生活的一个闷棍,我才明白,我除了有张文凭,什么都不是!
当时,我感到最郁闷的是我在公司里什么都不会做,一个电机烧坏了我楞不知如何下手修,公司老总办公室里的灯不亮了,学电的大学生我花了半小时楞不知原因在哪!我学的东西没一样能用的。开始我还以为是因为我在学校里没认真学,但后来问了很多同学,90%以上的都有同感,我现在终于认识到这不单是我个人的错,我自认为在学校中是很努力的,从未偷懒过,但如果90%以上的学生所学不能服务社会,这种教育体制一定存在问题。
四年里,我的电脑知识与技能=0!
现在看起来,我浪费了宝贵的四年光阴!但当时的环境与认识水平,也只能如此了,没有当初的浪费,怎有后来的珍惜?这是人生必经的一个阶段。
二 漫长的理论学习时期
1.从电脑培训班开始
我毕业后的第一个工作单位是一个非常差的企业,我在那儿见识了几乎所有中国差的企业的弊端:人浮于事,拉帮结派,暗箭伤人,损公肥私……。可以想见,在这样的企业工作,人是多么的颓废。我在无聊之中过了大半年的时间。1994年4月的一天我去桂林新华书店买书,看到桂林电子工业学院老师举办一个电脑培训班,教打字、排版、常用dos命令等电脑使用基础,反正也没事,不如上个班学点东西吧。不曾想就是这样一个培训班,却根本影响了我的人生之路。
我清楚地记得当我第一次上机时,连电脑开关在哪都找不到,老师拿着一张五寸软盘,插入软驱,打开电源,在一阵“吱吱”的声音之后,屏幕上开始有英文字符出现,然后,教师在键盘上敲入几个键,电脑沉默一会,突然在屏幕上跳出一个小人,出现一行字:快快乐乐学电脑,还传出了音乐。我当时真是惊呆了,电脑怎么还会唱歌?现在想起来,那个软件其实是台湾松岗系列教学软件,而我一个大学本科生,在毕业之后居然对电脑无知到这个地步,我真不知道是该哭还是该笑……!
俗语说:“一见钟情”。我是相信这种事的,因为就是这第一次上机,让我产生了搜索这一神秘世界的强烈兴趣,从此就再难与电脑分开了。
当时,有两位电子学院的老师:尹老师和陈老师。他们给我们讲dos,讲汉字输入,讲他们如何修改天汇汉字系统使它能在一张软盘上运行,讲打字排版……,一个月之后,我不满足,又学了一个月。
在上培训班的时间里,我向老师要来了桂林电子工业学院计算机应用专业本科四年的培养方案,回到家中,列出了所有本科课程,再根据书上的先修课程介绍,绘制了一张巨大的课程树,从树根开始,决定一本本地啃,从头开始学计算机技术。计算机科学的学习有较强的系列性,想一步到位很可能会学不懂,但循序渐进又无法跟上技术发展的速度,这是一个非常突出的问题。我现在想起来,觉得好的学习方式是:学理论打基础,在实践中逐步理解理论,多思多悟,就会发现层出不穷的新技术中有许多一直不变的东西存在。把握这种东西,就可以以不变应万变。这种“不变”的东西是什么?就是软件开发的基本原理与理论,基本思想与方法!在我对面向对象理论进行了较深入的学习与把握之后,我学.net只用了三个月的时间就可以独立设计一个完整的全面向对象软件架构,并且用vb.net与c#混合语言把它给做出来了。对于j2ee,我同样有这种自信,也用三个月的时间,一定可以开发与设计基于j2ee平台的软件,因为它们背后的计算机技术基础是一致的,完全可以触类旁通。
尹老师和陈老师可能不知道,他们开的一个也许是为了经济效益的培训班,最后居然培育出了一个计算机硕士!所以,作为一名教师,其责任真的是非常重大的,可能会影响学生的一辈子,我感激他们!
2.漫长而艰辛的学习之路
我当时每月只有一百多元的工资收入,把大半收入都用到买书上去了。电子工业学院门旁的那个科技书店,以及桂林科技书店,成为了我最常去“站读”的地方。我买了数据结构、操作系统、微机原理、ibmpc汇编程序设计,c程序设计……这些教材,就按照预定的计划开始学了。
我当时也说不清楚为什么要学这些东西,决不象现在学生学什么东西都有很强的功利性:学英语为了出国,学电脑为了好找工作。当时根本就没有想过今后如何如何,就是对计算机技术本身的兴趣推动我去学习的。
当时计算机书还不象现在这样扑天盖地,我几乎看完了我能弄到的每一本计算机书,看了一些书,就特别想有地方上机,能练一练。但我一个月一百多元收入,一台电脑怎么也得几千元,要五六年不吃不喝才攒够钱,父母都是普通百姓,家境仅能温饱,拥有一台电脑真成了我最大的美梦。
为了有机会上机,我这个脸皮极薄的人也会什么都顾不上了,带着一盒保存着各种软件的软盘,厚着脸皮到处找可能的地方上机。在这个时候,电子工业学院又一次帮了我,他们的机房管理得并不严,我就冒充是他们的学生去买机票上机。后来去得多了,那儿的老师都熟悉我这张脸了,但搞笑的是,居然没一人知道我是哪个班的!
当时电子学院用的局域网操作系统是novell,我在那儿学会了使用许多最基础的软件,现在仍然如数家珍:cpav,turbo pascal 5.5,ucdos,tway(天慧汉字系统),masm,turboc2.0,还有鼎鼎大名的norton公司的磁盘医生ndd,pctools,borland公司的最牛的常驻内存的软件sidekick,……
在电子学院机房,我还玩了经典游戏:决战中国海,冒险岛,战斧,三国……。
学校网络里软件很多,但其中所染的病毒也五花八门。我记忆深刻的是第一次遇见dir ii病毒时,那种感觉决不是害怕,而是欣喜,呵呵,我见到病毒什么样的啦!由于dos内核是开放的,所以那时开发一个病毒程序相对容易,大家又都喜欢用软盘拷来拷去,结果毒源泛滥,病毒的猖獗使得杀毒软件有了巨大的市场,现在大名鼎鼎的江民kv系列,就是在那时开始占据中国防毒市场,同时还有部的kill等竞争对手,瑞星,金山等都是后来者。
那时,我白天在公司上班,就盼望着晚上的上机,每次上机我都有详细的计划,因为机时宝贵,所以份外珍惜。
为了上机时能多敲些程序,我一咬牙,向妈妈要了两百元,买了一台电脑学习机,回家苦练英文指法与五笔输入,每天对着家里那台14寸的电视机屏幕,敲击至少键盘2小时以上。练得手腕酸疼,但终于达到了运指如飞盲打的程度。学五笔,背字根“目具上止卜虎皮,……”,足足花了一星期才背下来,并把每个字根与手指对应起来,后来看报纸都不自觉地将汉字给拆得七零八落,再也看不到是一个完整的汉字啦,当时好象练到了每分钟可打60多个字,后来我居然靠着这弹指神功当了一阵打字员混饭吃!呵呵,练好了指法,一上机,确实效率倍增,两小时能敲入并运行调试的程序比以前花三小时敲的还多。
94,95年是我条件最差,但学习劲头最足的两年时期,外在环境的恶劣,却反而造就了我高昂的学习兴趣,那种痴迷,我想热恋也不过如此了,可能因为我太喜欢计算机了,所以爱情与我无缘,这也是无可奈何的事。 :-(
我特别想说说我学习计算机技术书籍的感觉。如果你真的喜欢一门学科,那在啃一本本专业书籍时,就决不会觉得它厚,而只嫌它不够厚。对比我在本科学《电磁学》、《自控原理》之类枯燥无味的课程的感觉,那种课程脱离实际,从纸上到纸上,学生根本无法真正掌握。而学计算机课程《c程序设计》、《数据结构》、《操作系统》等课程的感觉真是天壤之别,原来本科学的东西是越学越糊涂,而我在学习计算机科学的过程中自己就感到慢慢地将所有的知识串成了一条线,脑中有一棵知识树在成长,这不是形容词,是真的感受。我学dos命令,学了很久不明其道理,是在一天早上醒来时灵感一来,突然理解了文件与树的概念,于是,就真正把握了dos命令的内涵,开始对copy,format,move……这些英文单词游刃有余了。有段时间,我甚至能感觉得到我的知识在与日俱增!如果那时能有相对稳定的客观条件:比如有一台随时可用的计算机,那我一定学得更快更好。不过话又说回来,条件好的时候,人又容易为安逸所累,进步反而慢。还是那句老话:业精于勤荒于嬉。现在的许多学生就是物质条件太好了,反而不懂得珍惜。
后来我看了金庸先生的《射雕英雄传》,郭靖成了我最喜欢的人物,不是因为他有黄蓉的爱,而是他那种坚忍不拔的毅力,以平凡之资终登绝顶!金庸先生真是妙笔!此小说我不知看了多少遍。
最值得怀念的就是我学编程的岁月,我学c语言用的是谭浩强的《c程序设计》,当时谭老师在电视上同时讲c程序设计,我每天必看,把书上的每道例题与习题全部做了一遍,并写出了每次上机的安排。我每次都先在纸上把程序写出来,然后上机时争分夺秒地在计算机中调试运行,并根据运行结果思索为什么会运行不正常,在哪儿出错了,如何更正,上机完后还有总结。就是这样,我把谭浩强的《c程序设计》一书中的所有例题和习题全部敲到计算机中运行了一遍,打下了c语言扎实的基础。谭老师的书和课,的确影响了中国多少名程序员!
我学了c语言之后,就开始想做点东西了。我用了一个月的时间,用c编写了一个中文下拉菜单的程序,从ucdos中的字库中提取汉字点阵,然后在图形模式下“画”出汉字来,使程序能脱离汉字系统的支持直接显示汉字。整个程序应该有一两千行代码吧,全部是自己寻找资料,一行行敲进去的。后来,我又编了读取wps文件的程序(当时dos下打字排版是求伯君的wps一统天下,word当时在哪里我不知道呢!《电脑报》介绍过的求伯君,鲍岳桥等作为第一代中国杰出程序员代表,是我当时崇拜的偶像),我还编写了一个绘制简单图形的小程序,从编程调试的过程中,我得到了程序员基本功的最初训练。我当初没人教,遇见各种困难只能自己解决,为找出一个bug,晚上睡觉做梦都在编程,而现在的一些大学生,程序通不过,马上问老师,甚至有学生把程序发到我的邮箱,叫我帮他调程序!有的计算机专业学生,学了四年,四年敲过的代码总数恐怕不超过2千行!
的确,我当时的水平很低,现在的本科生比我当时强太多了,但至少有一点他们中的许多人不如我,他们不如我勤奋,也不具备我的毅力,我觉得这是现在这批八十年代出生的大学生最缺的东西。
我用一年半的时间基本自学完了计算机专业的主干课程(除了《编译原理》,我实在看不懂),1995年我参加了初级程序员考试,结果上下午成绩加起来有90多分。但96,97我两次参加程序员级考试,虽然我已有不少编程实践,但仍然通不过,现在看起来,这反映出一个事实:我理论基础实在太差,天资也并不高。直到现在,我仍然痛感我的计算机基础理论不好,使我难以成为一名计算机科学家,而只能成为一名不错的软件工程师。
从95年开始,我的生活开始加速下降,我所在的公司由于被一群我现在称之为驻虫与流氓的人给弄得不成样子,每月连100多元的工资都无法保证,我只得离开了公司,把档案往人才交流中心一放,就开始了我四年的社会漂浮生活……。
在这四年中,我干了不下四五种工作:当过推销员,当过打字员,当过培训老师,修过电脑,从事售后服务,甚至摆过地摊……,一切的一切,很简单,就为了能有口饭吃。生活是严厉的,不讲情面的,我唯一的爱好就是闲下来就拿起我的计算机书来看。当时我大哥说过:你学这些东西有什么用?能靠它当饭吃?不要惊奇这种观点,在我们那信息闭塞的地方,当时有谁能想到计算机技术会有如此大的改变社会的能力?我之所以不懈学习,纯粹是为了解脱精神上的困惑,在技术的海洋中忘却生活的烦恼。我后来有一句名言:何以解忧,唯有电脑。别人当作一句笑话,但却是我当时的真实写照。
万事都有两面,事情坏到极处,就会向好转化。又是一个很偶然的事,改变了我的人生轨迹。
1996年,我的一个高中同学杨考上了湖南大学计算机系研究生,请客吃酸菜鱼火锅。在大家喝酒时,杨提了一个问题:请大家说出一个自己最想达到的目标。我的桂中同学大多数都是上的全国重点大学,此时毕业三年了,大家都对社会对生活有了自己的认识,于是就有了各种不同的答案,我当时的回答是:“我希望能有一天开发出一个好的软件,让许许多多的人都能用上它。”,这个目标我到现在都没达到。但当时大家是给我热烈地鼓励。杨饭后跟我说,你既然那么喜欢计算机,为什么不考研呢?对啊,我为什么不去试试呢?当天晚上我躺在床上,没怎么想就确定了要考研的想法。当时却怎么也没想到,考研之路成了另一条折磨人的不归路。对我一生的影响深远……
这就是我早期的学习生涯,深深地体现出中国的时代特色。这段时间我的生活是困苦的,心情是苦闷的,但学习热情却是无以伦比的。现在我一个人拥有两台奔四电脑,随时可上互联网获取丰富的资源,反而在技术上难有寸进了。越来越觉得古语说得好:
艰难困苦,玉汝于成!
这是生活的真理!
实践人生
-------一个普通it人的十年回顾(下)
下篇 曲折的实践之路
1.希特勒地堡与cih病毒
99年4月,我来到北京参加研究生复试。复试完了之后就不回去了,我拿着一张光盘,里面刻着我用vb和authorware3.5编的一个cool 3d的教学软件,到处参加招聘会,开始了在北京的打工生涯。
说句实话,我心中真是一点底也没有。北京人才济济,我一个三流大学的毕业生,又不是计算机专业的,有人要我吗?
我在北京无依无靠,没有任何一个亲戚在北京,住成了大问题。北京这地方,钱太不经花,生活费用太高,我四处寻找便宜的地方住。后来,我在北京化工大学对面的招待所中租了个床位,每晚20元,地下室。这个招待所的地下室非常大,每天回去的时候,都要走过长长的曲曲折折的通道,加上那昏黄的灯泡,每次我都有走进了希特勒地堡的感觉。地下室里潮湿阴暗,不见天日。地下室里人员很杂,什么人都有,永远没有一种安全的感觉,所幸的是我也是个穷光蛋,光脚的还怕穿鞋的?别人能呆我也能呆,唯一让我担心的是钱,没钱,在北京连流落街头都不够格,立马被收容去昌平筛沙。呵呵,我没这种经历,这是当时住一块的一个外地要考北京中医药大学的博士生说的(我俩居然住到了一个屋里,大家都没钱,只能挤地下室,只是他老兄晚上打呼,我可真受了不少罪)。
日子一天天过去,袋里的钱一天天少了,但工作还是没着落,心中越来越慌,除去学费,来京时父母给我2000元,大哥资助我的1000元就是我当时的全部资金(3000元在北京能呆多久?!)。我当时订了个计划,留下500元保底,打死都不能动,要靠它作路费回家的。我当时说,一定得找到一家公司,再少的钱都干,只要有口饭吃,有张床让我睡我就满足了。
我一共应聘了四五家公司,最具传奇色彩的是到西单附近一家公司的应聘经历。那时,我带去了我的作品,公司项目经理要看,于是我给他们演示,很奇怪,程序一打开就死机,一连两台电脑都一样,末了,两台电脑都启动不起来了。用瑞星一查,cih病毒——那天正是4月26日!于是,cih破坏了电脑主板的同时,也无情地摧毁了我的就业机会。还算老板可怜我,没要我赔。其实我当时快到山穷水尽的地步了,真要我出钱,我可能连家都回不了啦。陈盈豪(cih病毒的作者),你小子这么的聪明做什么不行,偏要去做病毒,害人害已,弄得我连个饭碗也找不到,晚上回“希特勒地堡”,把这小子骂了无数次!
总算天无绝人之路,在我数着最后还剩余600元钱的时候,终于有一家公司要我了,做中小学教育软件,月薪1600。干了两星期,又给我在公司的仓库挪开货物,搭了个床位,我就在那住下了,庆幸再也不用到“希特勒地堡”里当冲锋队员了。每天下班后,我就睡在林立的大纸箱之中,如果来个地震,呵呵,我就埋在纸箱中了,休想爬得出来!
我干得非常努力,第一个月工资开出来,扣掉个人所得税,我拿了1500多元。你们不知道我拿到第一笔工资的感觉!这钱在很多人眼里简直不算钱,但对于一个没工作近两年,工作也一个月收入不到200的穷小子而言,就象陈佩斯小品中所演的:“我王老五活了一辈子,还从没见过这么多钱啊!”。好笑吗?我一点也不觉得好笑。我只是心酸,我到了28岁才可以用自己的知识与技能养活自己,再不用依靠父母和兄长的资助,才真正完全用自己的力量在社会上站起来,一个没有经济自立能力的人,只能是个不成熟的人,一个躺在父母身上的人,不是一个真正的男子汉!我当这样的孬种当了28年!
我找到工作后向家里写过一封长信,信中讲了我对父母平时不好意思说的很多心里话,当时,我父亲说,母亲接到信都哭了。 我刚拿到工资,马上打了个电话回家里告诉母亲,以缓解他们的焦虑,毕竟儿行千里母担心啊!父母有退休金,一再表示不需要我赡养,而我再这样不要脸下去,我还是人吗?我就是从那时候开始,下定决心,从今往后,再不向家中要一分钱!今后三年读书和生活的费用我一定要用自己的劳动来获取。
金钱带给我的激动就是在那段时间,温饱问题解决之后,金钱对我的诱惑就再没有了,哪怕让我一个月赚一万,给套房子给我,也不可能再给我带来幸福的感觉了,钱是重要的,但不能成为它的奴隶,家中不需要我负担,我一个人有吃有喝,干着我喜欢的工作,足矣!
我在那公司一直干到九月学校开学为止。我走的那一天,公司居然还开了个欢送宴会,老板封了500元的封包给我。我真是感动。我大学毕业后在社会上挣扎求生,得到的大都是冷眼与蔑视,社会终于认可了我的价值,我不是一个只知道吃饭的废物!
1999年9月9日上午9点,在这个最多9字的时刻,我到学校报道来了,放下行李,我坐在分配给我的床上,心中终于踏实下来。
现在,我在北京终于有一张属于我的床了,一张真正属于我的床了,终于有个地方可以让我安稳地睡觉了。没有这段经历,我怎么体验到“安居乐业”这一个词的真实含义!个人如此,国家要做到,中国要做到,更难!
编程生涯
2.编程生涯
读研两年半的时间,我四处打工,这两年半我至少在七八家公司做过,编了十几万行代码,为自己赚了一台电脑,两部手机(丢了一部),还有读研期间的所有费用,实现了我的目标:没向家里要一分钱。
我水平不高,但在打工过程中,发现许多中国软件公司的水平更菜!
2000年暑假,我参加一个商品软件的开发,搬到了北大燕北园的一个宿舍,在那儿搞封闭式开发。在这个项目采用vb6开发,主力程序员除我之处,还有一个华北电力大学的研究生。大家都没开发商品软件的经验,没经过正式的设计,就匆忙编码了。我曾经想采用分层的系统架构,但遭到另一位程序员的反对,争吵没有结果,老板也不能做决定,结果各行其是。现在看起来,那时真是太菜了,任何一本软件工程书都会指出这种做法是不对的。
我们直接就热火朝天的干了起来,那位华北电力大学的老兄,真让我佩服,他可以在一个sub过程中写上2000行代码!我觉得奇怪,为何他能写这么多的代码?一看,顿时我晕倒,他居然将每个控件的left,top,width等属性都用代码来设定!想想这样的程序,调试时光单步执行就需要按多少次f8键!
我们在电脑旁边搭了个行军床,每天都是干到早上6点才睡,12点吃中饭,然后又是一个通宵。当时整个工程只有一个类模块,被我用于封装访问数据库的ado数据引擎,这是整个工程中唯一一处用到了最简单的面向对象技术的地方,然后,我写了近十个bas公用模块,每个模块代码规模都有一两千行,还有十几个窗体,每个窗体中都塞满了事件驱动的vb代码,整个软件应该有10万行代码,我一个人在此期间至少就写了3万多行vb代码。程序的主处理流程我甚至用ado与dao写了两套!
现在想起来,我们当时根本就不知道面向对象为何物,更不理解许多对软件开发至关重要的理论,就凭着一种热情。在这段痛苦的开发经历中,我不仅精熟了vb,而且从中学到了很多。现在再开发同样功能的东西。我至少可以砍掉2/3的代码。怎么学都不如从失败中学得多。
后来我总结vb程序员的三个境界:
(1)所有代码都只放在窗体文件中的,属于菜鸟级,他们只会从面板上拖控件,设置属性,然后再给事件编码
(2)工程中有bas模块的,属于中间级,他们已意识到有大量的代码是重复出现的,应该将其抽取出来作为公用模块
(3)工程中有cls模块的,属于高手,他们已掌握了面向对象的思想,并能应用这种思想来解决实际问题
正是这次开发经历,促使我反思:到底如何开发软件?我个人可以用vb完成各种各样的功能,为什么凑在一起就会那么困难?更正一个bug为何那么难?为什么一个看似简单的软件,要拖半年的时间还看不到结束的日子?
九月,研究生要开题,我自拟了个课题:软件体系结构设计。我决心弄明白,好软件到底是怎么做出来的。
我放下了vb,开始研究c++,原来学过vc,但没学会,就直接从c++ builder入手。borland公司的vcl类库让我大为叹服,很快就迷上了它,为此连带学了delphi,并参与了一个delphi项目。给我真正震撼的是《设计模式》这本书,看了才知道,原来好软件是这么设计出来的!在此,我强烈推荐所有有一定编程经验的程序员一定要看这本书!
一边学习理论,一边可没忘记我没经济来源,于是又四处打工,接一些小项目与小模块来赚些生活费,国内一家横跨家电与软件的著名公司是我打工期间去过的最大的公司。但无论什么公司,都给我一种感觉——烂!公司中充满了对员工的剥削与不尊重,对软件开发这一事物的错误认识,管理混乱。
我没机会去外企,技术水平不到,别人不要我 ,但我所见到的软件公司,我敢说没一家能做出世界一流的软件!
我上的研究生课程也让我失望,整个就是本科教育的再版。经过高考与考研两次重大考试,我对考试已是深恶痛绝,但读研期间仍要考试,而且是闭卷!我就不知道我去背那些条文对我的研究与学习有何帮助?2000年7月当我考完最后一门,终于大松一口气,我终于摆脱了考试的压迫,可以在剩余的一年半中真正搜索我渴望已久的软件技术了。这年,我29岁。
悲哀吗?一个中国的程序员要到29岁才可以真正自由地学习想学的东西!
我开始研究面向对象理论,看了大量的书,每天都在实验室学习到深夜12点,天天上网,csdn成了我最常去的网站。
随着我对软件技术的了解越多,就越深刻地感到国内与国外技术水平的差异是如此的巨大,巨大得甚至有让人绝望的感觉。同时,在北京这个中国软件人才最集中的地方,我也见到了许多牛人,一个清华的本科学生,做程序员可以拿到一个月12000元的工资,一个北大的计算机系研究生,一毕业就到外企,一个月一万多收入,每年发16个月工资!干了两年就开了自己的公司。我看到了一个北方交大的本科生作品,在半年的业余时间里,用delphi写了十几万行代码,他甚至在代码中嵌入汇编,自行编写数据存取引擎读写foxpro,速度超快!软件中有一个计算公式解析模块,他用编译原理理论居然做了一个小型的公式解析器,就象c++编译器检查c++程序一样,不仅可以判断是否公式正确,而且给出的出错信息还相当准确!其基本功之扎实,水平之高让我望尘莫及!中国优秀的人才真还是不少的!在精英集聚的北京,面对着博大精深的软件科学,我深感自身的渺小。
但我毕竟是靠自己奋斗出来的,我并不自卑,这世界需要牛人,同样需要大批合格的劳动者,我成为不了牛人,但我作一名程序员是合格的。
时间过得飞快,一年半根本就不算时间,马上就要毕业了,学习的成绩如何,要到社会上去竞争了,让社会考场来决定你是否及格。
3.毕业求职
98级的研究生是it业最后辉煌的回光反照。当时,各大公司都发了疯似的要人,象华为,当时是来者不拒。计算机专业的研究生是一抢而光,本科生也供不应求。2001年毕业的我的师兄师姐们,平均每个人手头都至少有两三个offer,谈的工资没有低于每月6000的,许多人去了外企,工资在8000~10000每月的也有。真是毕业生的黄金时间。
但好景不常在,911事件我看来好象成了分水岭,911之后,整个it业急刹车,就业形势急转直下,各大公司都在消化去年吃得过饱的胃口,我形容是大家都吃坏了胃,再也不可能有我师兄师姐们的风光了。虽然时间相隔仅大半年。
从10月开始,11月和12月,我几乎是在招聘会与公共汽车上渡过的,北京东南西北地去面试,上午在上地,下午可能就要跑到朝阳区,疲于奔命。
在找工作过程中,我良好的心理素质与丰富的编程经验起到了很大的作用,并没有遇到很大的困难,就先后有几家公司表示要我。
其中我想说的有两家公司。
一家是台湾公司,应该说他们做得是不错的,但我非常反感他们那种自认为高于大陆人的那种优越感,而且待遇也不高。面试之后,回来感觉很不好。当时台湾是民进党上台主政,我就称之为“民进党”看不起“”(虽然我不是党员,但我们都是中国人,都希望中国能强大,让她的人民能挺直腰杆)。
我想:我们大陆确实是不如台湾发达,难怪别人看不起我们,这世界势利得很,社会如此,国家亦然。但我中华960万平方公里的国土,13亿人口,难道要依靠一个小小的岛屿来撑门面?难道除了台湾公司,我就无处可去了?虽然改变不了什么,但我决定绝不去台资和日资的公司工作(日本人我更不喜欢,但我认为他们做事实在优秀,我们一定要向日本人学习)!在这种公司呆着,不爽!同时,我们的确也得争气些,这世界只尊重强者。
另一家是个很不错的民族软件企业,想要我,其老总专门找我去面谈了一次,希望我能到他的公司工作。这位老总白手起家,能在五六年的时间内由几个人发展到300多人,当时,是中国这个领域软件市场占有率最高的公司,我非常佩服,他为人也很好,并表示可以给我每月比其他研究生多加1000元工资,而且希望锻炼一两年之后我能够带领一个团队来开发产品,并负担我毕业所需交纳的各种费用。在就业不景气的2002年,对我一个30岁的技术水平有限的老程序员如此看重,真叫我感动。虽然我最后还是没去,但我仍然对这个公司充满了好感。一个软件企业最重要的是什么?是对人的尊重,没有这点,可以断定,这个公司长不大。
我为什么没去软件公司?放弃有可能在几年之后年薪突破10万的收入?是因为我已有了更想做的事,我想当老师!
我自己是从自学的路上走过来的,其中的艰辛历历在目,无人指点,我走了多少弯路?中国还有多少是象我这样的年轻人无人指点的?我幸运能爬出来了,因为我至少还能有饭吃,比我条件更差的,比如农村的孩子,可能就被生活的压力所淹没了。我个人的力量很微弱,技术也有限,但我自认为至少是一名合格的程序员,如果能培养出一大批达到我的水平的学生,他们毕业后成为合格的程序员,中国软件的根基就会更扎实,如果更能有一批远远超过我水平的学生出来,中国软件就有希望了。软件是什么?软件以人为本!
人生追求什么?金钱?我很缺钱,但不可能把金钱作为我的目标,我希望我能够成为一个对社会有所贡献的人,能够获得心灵的充实,于是,我选择了留校。
对教育的反思与教书生涯
4.对教育的反思与教书生涯
2002年下半年,我参加了北京高校青年教师岗前培训。一位杜教授的两堂课让我印象深刻,其中两句话让我深深震动:
第一句话:我是一个教书匠,教书匠好啊,好就好在“匠心独运”!
第二句话:做什么工作都要达到变魔术的境界!
是的,作为一名教师,就必须起到一个传声筒与放大器的作用,将人类最聪明的人探索世界所得到的知识予以拓宽发展,以便让更多的人能够掌握这些知识并进而应用于实践,从而推动人类的不断进步。
作为一名计算机专业的教师,就要努力把先进的计算机技术以尽可能高的效率传授给广大的学生,引导他们直接面对真实的软件世界,而不是向他们硬灌各种各样的理论知识,强迫他们去死记硬背以应付考试。
我是一个小人物,才低学浅,但我真的认为高校计算机教育存在严重的问题。我在打工期间的开发经历,以及阅读国外相关资料的时候,发现学校中教的和社会上用的差得太远!都已经是什么时代了,许多大学还设立foxpro课程,难道就不能直接用现代主流的数据库如oracle,sql server,哪怕是access也好,来讲授数据库知识?还有所谓的计算机等级考试,呵呵,过了三级学生的我见过不少,但他们真正对软件,对计算机又理解多少?
在中国甚至于升职称也要考计算机,我看了一本职称计算机考试教材,里面几乎原样照搬计算机原理课程中的相关章节,弄得我给搞艺术的大嫂讲了一个小时的二进制与八进制、十六进制的转换方法,她还是弄不太清。我都泄气了,对啊,他们搞艺术的,有必要去分清二进制的10与十进制的2有何分别吗?他们八辈子也用不上。但是考试用得上,呵呵,又是中国特色。
拿c++来说,我讲过c++课,许多的国内教材对c++语法下了大功夫,却对体现了c++精华的stl只字不提,对代码背后所体现的软件开发思想与方法更是视而不见,我用c++也编过不少程序了,说句实话,我用到的特性不到c++的三分之一!于是就出现了这种怪现象,许多学生考试可以拿八九十分,给他一个简单的实际问题他却不知如何下手!
还有uml,现在好象很火的样子,我们读研时就开了这门课,讲句实话,当时这门课我就没听懂,可后来我尝试着用c++用面向对象的方法来编程序,然后,由代码倒推回uml类图,一下子就明白了,原来uml只不过是一种描述面向对象系统的符号罢了,如果学生没进行过真正的oop,那就是为了学uml而学uml,根本就本末倒置。
还有软件工程,我的感觉,一个人如果没写过一万行以上的程序,他看软件工程书就同看政治书差不多,每句都对,呵呵,就不知道为什么对。我完成了那个几万行的vb程序之后,再回过头看看理论,真是句句是真理!每个理论背后都是大量实践经验的总结。
回想我做软件的体会,我发现所有的知识都是一个完整的体系,根本就无法区分哪些知识是本科的,哪些知识是研究生课程。于是,一种想法产生了,我主讲程序语言类的课程,那我就直接以真实的软件开发过程为主线,实践中需要什么我就讲什么。讲c++/,我就抛开了指定的教材,c++我讲了stl,我讲了ooad,两者我都讲了用rose进行双向工程,引导学生去学uml,一开始就用uml去描述自己开发的程序,何必浪费大量的时间去学结构化的编程方法?
我现在简直成了面向对象技术的布道者,我下学期即将开设ooad基础选修课,从实际项目中抽取典型的案例,讲uml,讲rose,讲设计模式,讲软件体系结构,例子代码横跨c++/和.net下的开发语言(c#和vb.net),这对于我一个技术水平有限公司的董事长而言,实在有点不自量力,我鼻子上才插上几根葱,就想装大象?但我想,如果我能成功地激发出哪怕1%的学生的兴趣,能引导他们走向我认为是正确的方向,能启发他们思考,能直接面向真实的软件开发活动而不是学校的考试,就是我的成绩。我现在正在看引进的原版书籍---《设计模式解析》,时时击节赞叹!《设计模式》经典但难懂难用,而《解析》一书的两位作者既有丰富的从业经验,又对ooad进行了深入的思索,真知灼见时时展露于书中,我现在刚看了这本书的80%,基本上可以用一个成语来描述这部书:深入浅出!
要做到深入浅出谈何容易!只有同时具备技术专家与文学作家素质的人才能做到!
反观我们国内的大量教材,还有大量的垃圾论文(包括硕士,博士的,本科的就算了,我看绝大部分根本不能称之为论文),全都是“浅入深出”,作者自己都未必明白,就东拼西凑,摆出个样子吓人。本来完全可以用大白话三言两语讲清楚让人明白的道理,有人专门要绕一大圈,专挑用高深的数学公式来表达,唯恐别人容易理解,显得他水平不高!呵呵,什么东西一沾上“数学”,立马身价百倍。我就听过一个北师大的一个在读博士说过:如果一篇博士论文中没有一个数学公式,根本就不算是博士论文。这句话对不对,大家可以多思索。我数学不好,没资格讨论数学,我的直觉:数学是工具,但如果为了发表论文等目的而故弄玄虚,为数学而数学,是不合道理的。中国的学术水平与现状,大家都心知肚明,不用我废话了。
现在每年都毕业大批的计算机专业学生,可其中真正具备扎实根基的可以很快胜任工作的我看只有5%(95%的学生不要扁我,不同意就当我在说胡话,我很瘦的,一扁就没了)。多年以来,我国高校计算机教育是按照计算机科学研究者来培养的,可事实上,有多少学生能从事计算机方面研究的能力?我看应分流,80%的学生按工程师方向来培养,20%的学生按研究者方向来培养,而且应大幅减少必修课的数量,计算机领域太深太广,样样都想教给学生,反而成了夹生饭,一个想从事硬件设计的学生和一个想从事软件开发的学生,能给他们一样的饭吃吗?学校应提供各种条件和资源去引导学生,激发学生的创造性与主动探索性,让他们去尝试,去发现自己的长处,最终找到最适合自己的发展方向。不这样做,中国软件后继乏人,没希望。
实践第一
5.实践第一
2002年下半年,我和一个朋友去了北京郊区的一家杂志社,看到的情形让我震惊:在信息产业最发达的北京,这家杂志社还用人工查对杂志订单和款单,看着那按省来登记的几大本厚厚的客户登记本,工作人员需要手工来在其中查找相应的信息。这样的工作效率,这样的行业信息化水平!北京如此,全国又如何?
从这件事上,我看到了中国软件业的另一方面。一方面我们没有核心技术,另一方面,已有的技术又根本没推广没用好。追踪世界先进水平,对于我等这种水平的人来说,确实勉为其难,但将已有的技术用于解决实际问题,却是我们可以做的。如果中国各行各业都真正能通过进行信息化而提高生产效益,那中国不就从根本上强大起来了吗(象印度,it一枝独秀,其他行业没有起色,我称之为跛足的国家,绝不能成为世界强国)?在扎实的社会基础之上,软件业不就有了更大的市场与发展潜力?中国许多行业的信息化水平非常低,而且中国地域广大,发展非常不平衡,有些地方信息化水平甚至为0!努力推动行业信息化,是我们这一代软件开发者的责任!而追赶国外先进水平,恐怕就不是一代两代程序员可以达到目标的,需要长期的努力。作为一名软件开发者,只能脚踏实地,哪怕你只做一个小小的mis产品,也要尽力把它做好来。
于是,我开始了期刊发行系统的开发,这完全是自发的,没有任何资金投入,只有一种热情在支撑。我开始选择c++ builder开发,做了几个月,完成了第一个版本,但我发现,我找不到足够水平的c++程序员进行合作开发,而且整个一个exe文件,在体系结构设计上虽采用了分层分块的设计方案,但却是源代码级别的,要拆分成com组件难度太大,不是一个人能完成的,于是中途流产。
2003年3月,我开始系统地学习.net,我吃惊地发现,我原来想在c++中实现的许多功能,比如对象串行化为xml,在.net中已有现成的类可用,.net更把oo的功用发挥到了极致,它的混合语言开发,它的反射机制,它的新的自识别的软件组件,以及强大好用的开发环境vs.net,都让我惊叹微软对开发者遇到的困难的深入把握,相比用c++开发,至少可以提高1/3的开发效率。于是一个新的想法产生了,我要把以前的产品用.net重写,利用.net强大的组件模型,将设计模式理论推广应用到组件级别,通过xml和反射机制建立一套可动态装配的软件生产流水线,实现象dell直销pc那样的软件动态装配直销。只要建立好灵活可不断重构的系统架构,配以对业务领域的深入分析,逐步建立功能强大的业务组件仓库,就可以实现软件系统的动态装配。说干就干,我用vb,net重写了原先用c++编写的系统,将原先的一个exe变为十几个dll,而且这些dll还会随着发展而不断地分裂,也有可能重新组合,利用refractoring(重构)不断进化,最终形成一整套完备的行业软件组件库。做软件关键因素是变化,只有适应变化的系统才是有生命力的。
我用两个月的时间大体上弄清了.net平台下的主要类库,然后又用两个月的时间再次重新实现了期刊发行系统的c++版本的全部功能,到8月份我写这篇文章之时,第一个产品里程碑已经完成。同样的,除了需求是由另一个合作者去搜集的之外,几乎又是全部由我一个人包揽了所有的系统设计及编码工作!
毫无疑问,我自觉得新系统要比老系统可维护性强得多,真正实现了彻底的全组件化系统开发,计划再有一个月的界面美化,改正bug,引用多线程提高运行效率,优化系统结构,就可以提供给用户试用了。市场如何,难说难测。
在开发过程中,我再次感到巨大的挑战,不光是技术上的,更是管理上的。人才是我最头痛的问题,没有一流的人才,哪来一流的产品?我们找不到足够水平的程序员一起合作(牛人哪屑于做这样一个小儿科的产品?)我们要走的路还很长。也许我们开发的产品是失败的,但我从来就没指望能用这赚钱,我只是尽一个软件开发者的责任而己,成败已不重要!人生不尝试,怎能体现人活着的价值?
结束语 永无止境的软件之路
1.辛酸与苦辣
做软件开发很苦的,技术进步如此神速,每个软件开发者都得不断地学习以跟上发展的步伐。有时我常想,何苦呢?我现在在大学中混,怎么样不能混下去?为什么要做这些吃力不讨好的事?我投了十年的时间去学习电脑,却最终发现自己不过中人之资,离顶峰远之又远。古语云:三十而立。我今年32了,仍是孤身一人,看看周围的同学,他们的小孩都差不多上小学了!许多都有了自己的房子和车子,而我到现在才开始申报中级职称,还挤在集体宿舍中,望着北京高昂的房价而叹息。现在社会越来越功利了,看着象我这样的穷光蛋,看着由于长期面对电脑缺少锻炼而瘦弱的身躯,又有哪个女孩愿意嫁过来受苦?
软件人的生活很苦,压力很大,我认为是拿青春赌明天。就是在这种恶劣的开发环境中,还有许多业外人士指手划脚说程序员如何如何,还有太多的公司只顾压榨程序员的劳动,缺乏对程序员基本的尊重,怎不叫人寒心?
“三十而衰”,这句本不应该流行的话居然成了中国软件人员的流行语。中国程序员的悲哀!
2.无止境的追求
人类已进入信息时代,计算机技术几乎每隔半年就有一次大的变化,我现在又面临着这样的抉择:今后的路如何走?
北大的教师聘任制度的改革一石激起千层浪,说明了中国高校的改革势在必行。我是欢迎这种变化的,虽然到时我可能会下岗。但人生中总会遇到各种各样的挑战,只要你不倒下爬不起来,就有希望。
我想我必须再次让自己有个提升,要从小事做起,但做小事则绝不能成为最终的目标,也许,不远的将来,我会走出国门,到世界软件技术最发达的地区去汲取丰富的养份。今后的路怎么走,我还在摸索之中。
3.人生无悔
人生年华如水,时光无情。在过去的岁月中,我尽了自己的力,回顾往事,我可以说:过去的事只有遗憾,却没有后悔。如果给我再一次选择职业的机会,我还会再次选择软件!
再过10年,到2013年的时候,我也许会再次写一篇人生的十年回顾,到那时中国的软件会如何?中国软件的明天靠你我这些普通人去扎扎实实地去工作来支撑!少发些牢骚,多做些实事,中国软件才会有光辉的明天。你我共勉!
--------------------------------------一个老程序员的心理话
完成于 2003-8-3 北京
2003-8-3中午14:33,在我
评论: 8 | 引用: 0 | 查看次数: 1781
发表评论