随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论,很多程序员在工作5-10年以后,都会开始思考5年、10年甚至更久以后的自己,会是怎样一种生活工作状态,在互联网技术不断革新的强压力下,很多程序员越来越迷茫。此文是一位前辈级的老程序员在十年IT行业中的回顾与反思,希望能对广大程序员有所启发。
2004年是我大学毕业满10年的日子,也是我投身it技术的第10年。10年对于一个人来说是比较长的一个阶段,10年之后,同期大学毕业的同学情况差异之大,让人叹息命运之变幻莫测。
从1994到2003,不知不觉之间,我已在计算机技术的世界里沉浸了十年。有位哲人说过:如果一个人能用十年的时间专心致志地研究一门学问,或学习一门手艺,或从事一个职业,他一定能成为这个领域的专家。我天资平庸,但哲人的话是有道理的。我用十年的时间先成为了一名合格的程序员,再成为了一个重点大学计算机专业的大学教师。十年磨一剑,蓦然回首,年华如水,青春如歌!
我父母都是城市中的平民,家境仅能解决温饱,我想我可能代表了中国社会的一大类青年,我的经历与体会可能会对许多条件并不好的年青程序员有所启示:只要努力,天资差与环境不好都是可以克服的。因为我不是牛人,所以我不能教你如何成为牛人,我只是尽量真实地写下我的经历与感触,写一个平凡人的努力过程。我为我是一个软件开发者而自豪,为我从事的教书育人的事业而自豪,并愿意为中国落后的软件业尽己菲薄之力,为此,我人生无悔!
我的人生经历:
曲折的实践之路
1.希特勒地堡与cih病毒
1999年4月,我来到北京参加研究生复试。复试完了之后就不回去了,我拿着一张光盘,里面刻着我用vb和authorware3.5编的一个cool 3d的教学软件,到处参加招聘会,开始了在北京的打工生涯。
说句实话,我心中真是一点底也没有。北京人才济济,我一个三流大学的毕业生,又不是计算机专业的,有人要我吗?
我在北京无依无靠,没有任何一个亲戚在北京,住成了大问题。北京这地方,钱太不经花,生活费用太高,我四处寻找便宜的地方住。后来,我在北京化工大学对面的招待所中租了个床位,每晚20元,地下室。这个招待所的地下室非常大,每天回去的时候,都要走过长曲曲折折的通道,加上那昏黄的灯泡,每次我都有走进了希特勒地堡的感觉。地下室里潮湿阴暗,不见天日。地下室里人员很杂,什么人都有,永远没有一种安全的感觉,所幸的是我也是个穷光蛋,光脚的还怕穿鞋的?别人能呆我也能呆,唯一让我担心的是钱,没钱,在北京连流落街头都不够格,立马被收容去昌平筛沙。呵呵,我没这种经历,这是当时住一块的一个外地要考北京中医药大学的博士生说的(我俩居然住到了一个屋里,大家都没钱,只能挤地下室,只是他老兄晚上打呼,我可真受了不少罪)。
日子一天天过去,袋里的钱一天天少了,但工作还是没着落,心中越来越慌,除去学费,来京时父母给我2000元,大哥资助我的1000元就是我当时的全部资金(3000元在北京能呆多久?!)。我当时订了个计划,留下500元保底,打死都不能动,要靠它作路费回家的。我当时说,一定得找到一家公司,再少的钱都干,只要有口饭吃,有张床让我睡我就满足了。
那时,我带去了我的作品去西单附近一家公司面试,公司项目经理要看,于是我给他们演示,很奇怪,程序一打开就死机,一连两台电脑都一样,末了,两台电脑都启动不起来了。用瑞星一查,cih病毒——那天正是4月26日!于是,cih破坏了电脑主板的同时,也无情地摧毁了我的就业机会。还算老板可怜我,没要我赔。其实我当时快到山穷水尽的地步了,真要我出钱,我可能连家都回不了啦。
总算天无绝人之路,在我数着最后还剩余600元钱的时候,终于有一家公司要我了,做中小学教育软件,月薪1600。干了两星期,又给我在公司的仓库挪开货物,搭了个床位,我就在那住下了,庆幸再也不用到“希特勒地堡”里当冲锋队员了。每天下班后,我就睡在林立的大纸箱之中。我干得非常努力,第一个月工资开出来,扣掉个人所得税,我拿了1500多元。
金钱带给我的激动就是在那段时间,温饱问题解决之后,金钱对我的诱惑就再没有了,哪怕让我一个月赚一万,给套房子给我,也不可能再给我带来幸福的感觉了,钱是重要的,但不能成为它的奴隶,家中不需要我负担,我一个人有吃有喝,干着我喜欢的工作,足矣!
我大学毕业后在社会上挣扎求生,得到的大都是冷眼与蔑视,社会终于认可了我的价值,我不是一个只知道吃饭的废物!
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年时,一个清华的本科学生,做程序员可以拿到一个月12000元的工资,一个北大的算机系研究生,一毕业就到外企,一个月一万多收入,每年发16个月工资!干了两年就开了自己的公司。我看到了一个北方交大的本科生作品,在半年的业余时间里,用delphi写了十几万行代码,他甚至在代码中嵌入汇编,自行编写数据存取引擎读写foxpro,速度超快!软件中有一个计算公式解析模块,他用编译原理理论居然做了一个小型的公式解析器,就象c++编译器检查c++程序一样,不仅可以判断是否公式正确,而且给出的出错信息还相当准确!其基本功之扎实,水平之高让我望尘莫及!
中国优秀的人才真还是不少的!在精英集聚的北京,面对着博大精深的软件科学,我深感自身的渺小。但我毕竟是靠自己奋斗出来的,我并不自卑,这世界需要牛人,同样需要大批合格的劳动者,我成为不了牛人,但我作一名程序员是合格的。时间过得飞快,一年半根本就不算时间,马上就要毕业了,学习的成绩如何,要到社会上去竞争了,让社会考场来决定你是否及格。
毕业求职
98级的研究生是it业最后辉煌的回光反照。当时,各大公司都发了疯似的要人,像华为,当时是来者不拒。计算机专业的研究生是一抢而光,本科生也供不应求。2001年毕业的我的师兄师姐们,平均每个人手头都至少有两三个offer,谈的工资没有低于每月6000的,许多人去了外企,工资在8000~10000每月的也有。真是毕业生的黄金时间。
但好景不常在,911事件我看来好象成了分水岭,911之后,整个it业急刹车,就业形势急转直下,各大公司都在消化去年吃得过饱的胃口,我形容是大家都吃坏了胃,再也不可能有我师兄师姐们的风光了。虽然时间相隔仅大半年。
从10月开始,11月和12月,我几乎是在招聘会与公共汽车上渡过的,北京东南西北地去面试,上午在上地,下午可能就要跑到朝阳区,疲于奔命。
在找工作过程中,我良好的心理素质与丰富的编程经验起到了很大的作用,并没有遇到很大的困难,就先后有几家公司表示要我。
其中我想说的有两家公司。一家是台湾公司,应该说他们做得是不错的,但我非常反感他们那种自认为高于大陆人的那种优越感,而且待遇也不高。面试之后,回来感觉很不好。当台湾是民进党上台主政,我就称之为“民进党”看不起“”(虽然我不是党员,但我们都是中国人,都希望中国能强大,让她的人民能挺直腰杆)。
另一家是个很不错的民族软件企业,想要我,其老总专门找我去面谈了一次,希望我能到他的公司工作。这位老总白手起家,能在五六年的时间内由几个人发展到300多人,当时,是中国这个领域软件市场占有率最高的公司,我非常佩服,他为人也很好,并表示可以给我每月比其他研究生多加1000元工资,而且希望锻炼一两年之后我能够带领一个团队来开发产品,并负担我毕业所需交纳的各种费用。在就业不景气的2002年,对我一个30岁的技术水平有限的老程序员如此看重,真叫我感动。虽然我最后还是没去,但我仍然对这个公司充满了好感。一个软件企业最重要的是什么?是对人的尊重,没有这点,可以断定,这个公司长不大。
我为什么没去软件公司?放弃有可能在几年之后年薪突破10万的收入?是因为我已有了更想做的事,我想当老师!
我自己是从自学的路上走过来的,其中的艰辛历历在目,无人指点,我走了多少弯路?中国还有多少是象我这样的年轻人无人指点的?我幸运能爬出来了,因为我至少还能有饭吃,比我条件更差的,比如农村的孩子,可能就被生活的压力所淹没了。我个人的力量很微弱,技术也有限,但我自认为至少是一名合格的程序员,如果能培养出一大批达到我的水平的学生,他们毕业后成为合格的程序员,中国软件的根基就会更扎实,如果更能有一批远远超过我水平的学生出来,中国软件就有希望了。软件是什么?软件以人为本!
人生追求什么?金钱?我很缺钱,但不可能把金钱作为我的目标,我希望我能够成为一个对社会有所贡献的人,能够获得心灵的充实,于是,我选择了留校。
我是一个小人物,才低学浅,但我真的认为高校计算机教育存在严重的问题。我在打工期间的开发经历,以及阅读国外相关资料的时候,发现学校中教的和社会上用的差得太远!都已经是什么时代了,许多大学还设立foxpro课程,难道就不能直接用现代主流的数据库oracle,sql server,哪怕是access也好,来讲授数据库知识?还有所谓的计算机等级考试,呵呵,过了三级学生的我见过不少,但他们真正对软件,对计算机又理解多少?拿c++来说,我讲过c++课,许多的国内教材对c++语法下了大功夫,却对体现了c++精华的stl只字不提,对代码背后所体现的软件开发思想与方法更是视而不见,我用c++也编过不少程序了,说句实话,我用到的特性不到c++的三分之一!于是就出现了这种怪现象,许多学生考试可以拿八九十分,给他一个简单的实际问题他却不知如何下手!
回想我做软件的体会,我发现所有的知识都是一个完整的体系,根本就无法区分哪些知识是本科的,哪些知识是研究生课程。于是,一种想法产生了,我主讲程序语言类的课程,那我就直接以真实的软件开发过程为主线,实践中需要什么我就讲什么。讲c++/,我就抛开了指定的教材,c++我讲了stl,我讲了ooad,两者我都讲了用rose进行双向工程,引导学生去学uml,一开始就用uml去描述自己开发的程序,何必浪费大量的时间去学结构化的编程方法?
我现在简直成了面向对象技术的布道者,我下学期即将开设ooad基础选修课,从实际项目中抽取典型的案例,讲uml,讲rose,讲设计模式,讲软件体系结构,例子代码横跨c++/和.net下的开发语言(c#和vb.net),这对于我一个技术水平有限公司的董事长而言,实在有点不自量力,我鼻子上才插上几根葱,就想装大象?
2002年下半年,我和一个朋友去了北京郊区的一家杂志社,看到的情形让我震惊:在信息产业最发达的北京,这家杂志社还用人工查对杂志订单和款单,看着那按省来登记的几大本厚厚的客户登记本,工作人员需要手工来在其中查找相应的信息。这样的工作效率,这样的行业信息化水平!北京如此,全国又如何?
于是,我开始了期刊发行系统的开发,这完全是自发的,没有任何资金投入,只有一种热情在支撑。我开始选择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,引用多线程提高运行效率,优化系统结构,就可以提供给用户试用了。市场如何,难说难测。
在开发过程中,我再次感到巨大的挑战,不光是技术上的,更是管理上的。人才是我最头痛的问题,没有一流的人才,哪来一流的产品?我们找不到足够水平的程序员一起合作(牛人哪屑于做这样一个小儿科的产品?)我们要走的路还很长。也许我们开发的产品是失败的,但我从来就没指望能用这赚钱,我只是尽一个软件开发者的责任而己,成败已不重要!人生不尝试,怎能体现人活着的价值?
人生年华如水,时光无情。在过去的岁月中,我尽了自己的力,回顾往事,我可以说:过去的事只有遗憾,却没有后悔。如果给我再一次选择职业的机会,我还会再次选择软件!再过10年,我也许会再次写一篇人生的十年回顾,到那时中国的软件会如何?中国软件的明天靠你我这些普通人去扎扎实实地去工作来支撑!少发些牢骚,多做些实事,中国软件才会有光辉的明天。你我共勉!
本页共51段,6822个字符,19377 Byte(字节)