免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 4777|回复: 11
收起左侧

我看程序员

[复制链接]

7658

主题

1160

铜板

2299

好友

技术员

为地信喝彩!

积分
106249
QQ
发表于 2010-5-28 11:21 | 显示全部楼层 |阅读模式
114_4812_7ef665e81547697.jpg

朋友请我写篇文章,谈谈如何编程。我非功成名就之高人,自己那点儿经验拿出来会被人笑话的。但是看到周围很多师弟师妹正在走我以前走过的错路,使我不得不斗胆说几句,只望大家在程序员的道路上一帆风顺就好。

程序员——一个毁誉参半的称谓。想当初曾经被视作英雄,众人景仰。而如今,却被许多人瞧不起,客气的说他们是“高技术工人”,不客气的就直接称其为“牛”了。图灵奖获得者,Edsgar Dijkstra在他的《卑微的电脑程序员》一文中说:"对我来说,电脑程序员是个尊称,但对其他一些人来说,电脑程序员确是不懂他自己在干什么,而是只会依指令行事之徒,一些只知道分析、追求语言特性的人。”看来,许多人曲解了“程序员”这个名词的涵义。那什么样的人才是真正的程序员呢?我斗胆给程序员分为四类,请大家对号入座。

一、高中生程序员

这里丝毫没有贬低高中生的意思。在美国,有大量的高中生从事程序员的职业,他们的工作就是编码、编码、再编码。很可悲,目前中国的大学生基本都是做这样的工作,甚至某些硕士、博士也是如此。

这一类型的程序员认为语言是最重要的。他们认真地学习语言的语法和函数库。他们不停地学习语言,以为只要掌握的语言多、新,就能有竞争力,有好的工作。他们确实很厉害,VC、VB、Delphi、PB、Java、ASP、PHP等等都能拿来就用。但是,正因为他们,编程才被称为“牛都可以干的事”。

在正规的公司,高中生程序员整日都在添表格——工程师程序员把软件划分模块,甚至详细定义好了每一个函数,高中生们就是向这些函数里添加代码,如同添表格一样。很多时候,高中生甚至不知道他做的项目是什么,只知道这个函数的功能是什么。

在国内,如此正规的软件公司很少,大多数还处于作坊式的开发模式,所以,高中生程序员还是很吃香的。几个人一商量就开干,没有完整的计划,不考虑维护性、重用性,注释懒得写,文档更不提。这样,项目非常依赖这几个人,自然他们的日子过得很好。他们最头疼的事情是后期维护,每当要加碱功能、改bug的时候,他们就会发现自己已经看不懂自己写的代码了。

软件工程正在逐步实行,公司越来越正规,高中生程序员也就越来越难做了。年轻时,他们或许可以打拼一番,但是30、40岁之后,当他们对新语言、新技术的接受能力已比不过年轻的程序员时,他们也就退出了竞争行列。

当“软件集成电路”的梦想变为现实,当各种可重用控件、组件、类库都已经具备,那时就不再需要高中生程序员了。

二、黑客程序员

黑客决不是那些到处黑机器搞破坏的人,他们是一群痴迷于技术的人。

他们从不循规蹈矩,不信奉任何规则、定理,总是从常人不可想象的角度去思考、编程、使用工具。这样做的结果,或者发现系统漏洞,或者发现更高效、巧妙的方法。他们从不满足于使用别人封装的接口、定制的框架,总是要刨根问底,对技术的钻研直至底层。

他们中间,高学历者并不多,多的是热血青年。对他们来说,当黑客程序员决不是职业,而是爱好。当一个人对自己所作的事充满兴趣时,他肯定能作出非凡的成果。这就是他们成功的根本原因。

黑客是推动技术进步的最重要力量之一。

三、工程师程序员

他们是企业的中坚,属于管理阶层。人们送给他们美称——软件工程师,但他们仍喜欢说自己是程序员,因为他们中的大多数是从高中生程序员成长起来的。

“软件工程”是他们的法宝,在这套理论导引下,他们领导者整个软件的开发过程。他们知道什么样的软件是拥有市场的,知道用户需要什么样的软件,知道该让谁来编代码、谁来测试,使整个团队协调一致。他们设计出了一个个可重用的模块,让公司的开发工作越来越高效。他们设计出的系统都是可维护的,能够方便地做各种修改、扩充。总之,他们是为高中生程序员做表格的人。

他们也懂技术,不过他们更注重的是技术的思想而不是末节的使用。比如当Java出现的时候,他并不是去学Java的语法、函数库,而是看各种介绍Java的文章,听别人的评论,领会Java的功能和思想,思考怎样利用Java的特性。

随着软件业的发展,必须抛弃作坊式的手段,实施基于团队的科学的管理和开发过程。所以对工程师的需求越来越大,然而现在合格的、富有经验的工程师却很少。

四、科学家程序员

有些科学家在设计出算法后,将它交给别人在计算机上实现。另一些科学家在设计的同时便考虑到可实现性,并能利用计算机的特性增强算法,更可贵的是他们饶有兴致地自己编程实现算法。后一种科学家便是科学家程序员。

他们具有深厚的理论水平,带动着计算机领域中各个学科的前进。
地质啷http://weibo.com/943569550

143

主题

5万

铜板

129

好友

钻石会员

将军

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
8111

斑竹勋章地信元老活跃勋章宣传勋章精华勋章灌水勋章贡献勋章

发表于 2010-5-28 13:59 | 显示全部楼层
你就一个字“牛逼”!文采相当不错啊!干地质可惜了![s:201]
该会员没有填写今日想说内容.

6

主题

1万

铜板

51

好友

地信贵宾

有乱想的时间 做点实际的!!

Rank: 13Rank: 13Rank: 13Rank: 13

积分
1569
发表于 2010-5-28 14:14 | 显示全部楼层
哎呦 不错啊 蛮厉害的呵呵呵 以前也觉得 考二级 三级  自学java  html 看看《黑客x档案》 大众软硬件。。。。最后问我得到了什么资格。。我想不是用几张纸来衡量 因为这个学习的过程也同样改变了思维的方式 所谓触类旁通嘛 楼主很积极上进 加油哦~~~看好你[s:201]
该会员没有填写今日想说内容.

214

主题

6587

铜板

151

好友

版主

考试快到了..&

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
5766

斑竹勋章优秀斑主地信元老宣传勋章灌水勋章

发表于 2010-5-28 14:29 | 显示全部楼层
二级过了啊 恭喜 恭喜 [s:196]

29

主题

3万

铜板

80

好友

版主

技术白痴

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
5253

斑竹勋章宣传勋章

发表于 2010-5-28 14:37 | 显示全部楼层

回 楼主(jxgxlzy) 的帖子

楼主 注意保护好你的隐私 不要把身份证号都泄露了
该会员没有填写今日想说内容.

130

主题

2万

铜板

754

好友

版主

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
17552

宣传勋章优秀斑主地信元老灌水勋章活跃勋章贡献勋章

QQ
发表于 2010-5-28 15:34 | 显示全部楼层

回 楼主(jxgxlzy) 的帖子

楼主的文章写的有一定的深度。计算机等级考试、计算机水平考试等等,考了的人感觉如何,拿到证了就牛了??就拿软考说吧:考个软件工程师简单,当个软件工程师难!!
读万卷书,不如行万里路;行万里路,不如阅人无数!
                                           【点击此处Q我】

7658

主题

1160

铜板

2299

好友

技术员

为地信喝彩!

积分
106249
QQ
 楼主| 发表于 2010-5-29 13:23 | 显示全部楼层

我看程序员——程序员应具备的素质!

序员是一种技术工作,在IT的发展中有相当重要的地位,从底层硬件通讯协议的建立,到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层上各种数据营销平台的搭建,程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大的贡献。

   中国有很多精于编码的人,但是中国软件行业,尤其是网络应用开发方面误区很大,很难形成有规模的软件开发力量和产品能力,不但比美国差距甚远,和印度相比也是颇有不如。这些问题不是在于中国程序员的智商和工作努力状况,也不是在于国家和民间对开发的投入程度,而是很大程度上,有一些对技术,对程序开发,对项目设计方面的思想误区,这些误区,导致了软件行业的产品化能力不足,缺乏规模化和大型复用系统研发能力,可以说,改变认识误区,是解决软件行业小作坊模式和个体英雄模式所带来的局限性的重要工作。

   中国有很多小朋友,他们18,9岁或21,2岁,通过自学也写了不少代码,他们有的代码写的很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错误的认识和观点左右,缺乏对系统,对程序的整体理解能力,这些人,一个网上的朋友说得很好,他们实际上只是一些Codingfans,压根没有资格称为程序员,但是据我所知,不少小网络公司的CTO就是这样的codingfans,拿着吓人的工资,做着吓人的项目,项目的结局通常也很吓人。

程序员基本素质:

   作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。

   1:团队精神和协作能力
 
   把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。

   2:文档习惯

   说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。
? ?
   3:规范化,标准化的代码编写习惯
??
   作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。有些codingfans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可想象的。
? ?
   4:需求理解能力

   程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。
? ?
   5:复用性,模块化思维能力
??
   经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。
? ?
   复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。
? ?
   一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力。
? ?
   6:测试习惯
??
   作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。
? ?
   测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的需求理解能力。
? ?
   7:学习和总结的能力
??
   程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。
??
   善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但是学习也要找对目标,一些小codingfans们,他们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了jsp,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握了多少所谓的新语言,永远不会有质的提高。
? ?
   善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。
? ?
   一个不具备成长性的程序员,即便眼前看是个高手,建议也不要选用,因为他落伍的时候马上就到了。
? ?
   具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一种意识上的问题。
? ?
   那么作为高级程序员,以至于系统分析员,也就是对于一个程序项目的设计者而言,除了应该具备上述全部素质之外,还需要具备以下素质:
? ?
   第一,需求分析能力
??
   对于程序员而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者,他们不但要理解客户需求,更多时候还要自行制定一些需求,为什么这么说呢?
??
   一般而言,进行研发任务,也许是客户提出需求,也许是市场和营销部门提出的需求,这时候对于研发部门,他们看到的不是一个完整的需求,通常而言,该需求仅仅是一些功能上的要求,或者更正规些,可能获得一个完整的用户视图;但是这都不够,因为客户由于非技术因素多一些,他们可能很难提出完整和清晰,或者说专业性的性能需求,但是对于项目组织者和规划者,他必须能够清醒认识到这些需求的存在并在完成需求分析报告的时候适当的提出,同时要完整和清晰的体现在设计说明书里面,以便于程序员编码时不会失去这些准则。
??
   程序设计者必须正确理解用户需求所处的环境,并针对性做出需求的分析,举例而言,同样一个软件通过ASP租用方式发布和通过License方式发布,性能需求可能就是有区别的,前者强调的是更好的支撑能力和稳定性,而后者则可能更强调在各种平台下的普适性和安装使用的简捷性。
? ?
   第二,项目设计方法和流程处理能力
??
   程序设计者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计方法,比如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的整体设计。设计方法上选择不当,就会耽误研发周期,浪费研发资源,甚至影响研发效果。
??
   一个程序设计者还需要把很多功夫用在流程图的设计和处理上,他需要做数据流图以确立数据词典;他需要加工逻辑流图以形成整体的系统处理流程。一个流程有问题的系统,就算代码多漂亮,每个模块多精致,也不会成为一个好的系统。当然,做好流程分析并选择好项目设计方法,都需要在需求分析能力上具有足够的把握。
? ?
   第三,复用设计和模块化分解能力
??
   这个似乎又是老调重谈,前面基本素质上不是已经说明了这个问题吗?
??
   作为一个从事模块任务的程序员,他需要对他所面对的特定功能模块的复用性进行考虑,而作为一个系统分析人员,他要面对的问题复杂的多,需要对整体系统按照一种模块化的分析能力分解为很多可复用的功能模块和函数,并针对每一模块形成一个独立的设计需求。举个例子,好比是汽车生产,最早每辆汽车都是独立安装的,每个部件都是量身定做的,但是后来不一样了,机器化大生产了,一个汽车厂开始通过流水线来生产汽车,独立部件开始具有一定的复用性,在后来标准化成为大趋势,不同型号,品牌甚至不同厂商的汽车部件也可以进行方便的换装和升级,这时候,汽车生产的效率达到最大化。软件工程也是同样的道理,一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随意换装的,比如微软的许多桌面软件,在很多操作模块(如打开文件,保存文件等等)都是复用的同一套功能模块,而这些接口又通过一些类库提供给了桌面应用程序开发者方便挂接,这就是复用化的模块设计明显的一个佐证。
? ?
   将一个大型的,错综复杂的应用系统分解成一些相对独立的,具有高度复用性的,并能仅仅依靠几个参数完成数据联系的模块组合,是作为高级程序员和系统分析员一项最重要的工作,合适的项目设计方法,清晰的流程图,是实现这一目标的重要保证。
? ?
   第四,整体项目评估能力
??
   作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。评估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界。在西方一些软件系统设计的带头人都是很年长的,比如4,50岁,甚至更老,他们在编码方面已经远远不如年轻人那样活络,但是就项目评估而言,他们几十年的经验积累就是最重要和宝贵的财富。中国缺这么一代程序员,主要还不是缺那种年纪的程序员,而是那种年纪的程序员基本上都是研究单位作出来的,都不是从专业的产品化软件研发作出来的,他们没有能积累那种产品化研发的经验,这也是没有办法的事情。

   第五,团队组织管理能力
??
   完成一个项目工程,需要团队的齐心协力,作为项目设计者或研发的主管人,就应当有能力最大化发挥团队的整体力量,技术管理由于其专业性质,不大同于一般的人事管理,因为这里面设计了一些技术性的指标和因素。
? ?
   首先是工作的量化,没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。
? ?
   其次是对团队协作模式的调整,一般而言,程序开发的协作通常分为小组进行,小组有主程序员方式的,也有民主方式的,根据程序员之间的能力水平差距,以及根据项目研发的需求,选择合适的组队方式,并能将责权和成员的工作任务紧密结合,这样才能最大发挥组队的效率。
??
   一个代码水平高的人,未必能成为一个合格的项目研发主管,这方面的能力欠缺往往是容易被忽视的。
? ?
   综上可以看到,作为一个主管研发的负责人,一个项目设计者,所需要具备的素质和能力并不是程序代码编写的能力,当然一般情况下,一个程序员通过不断的总结提高达到了这种素质的时候,他所具有的代码编写能力也已经相当不简单了,但是请注意这里面的因果关系,一个高水平的项目设计者通常已经是代码编写相当优秀的人了,但是并不是一个代码相当优秀的程序员就可以胜任项目设计的工作,这里面存在的也不是智商和课本的问题,还是在于一个程序员在积累经验,逐步提升的时候没有意识到应当思考哪方面的东西,没有有意识的就项目的组织和复用设计进行揣摩,没有经常性的文档习惯和总结习惯,不改变这些,我们的合格的项目设计者还是非常欠缺。
? ?
   最后补充一点东西,一个软件项目研发的设计流程是怎样的呢?以通常标准的设计方法为例。
? ?
   第一个步骤是市场调研,技术和市场要结合才能体现最大价值。
? ?
   第二个步骤是需求分析,这个阶段需要出三样东西,用户视图,数据词典和用户操作手册。用户视图是该软件用户(包括终端用户和管理用户)所能看到的页面样式,这里面包含了很多操作方面的流程和条件。数据词典是指明数据逻辑关系并加以整理的东东,完成了数据词典,数据库的设计就完成了一半多。用户操作手册是指明了操作流程的说明书。请注意,用户操作流程和用户视图是由需求决定的,因此应该在软件设计之前完成,完成这些,就为程序研发提供了约束和准绳,很遗憾太多公司都不是这样做的,因果颠倒,顺序不分,开发工作和实际需求往往因此产生隔阂脱节的现象。
??
   需求分析,除了以上工作,笔者以为作为项目设计者应当完整的做出项目的性能需求说明书,因为往往性能需求只有懂技术的人才可能理解,这就需要技术专家和需求方(客户或公司市场部门)能够有真正的沟通和了解。
??
   第三个步骤是概要设计,将系统功能模块初步划分,并给出合理的研发流程和资源要求。作为快速原型设计方法,完成概要设计就可以进入编码阶段了,通常采用这种方法是因为涉及的研发任务属于新领域,技术主管人员一上来无法给出明确的详细设计说明书,但是并不是说详细设计说明书不重要,事实上快速原型法在完成原型代码后,根据评测结果和经验教训的总结,还要重新进行详细设计的步骤。
??
   第四个步骤是详细设计,这是考验技术专家设计思维的重要关卡,详细设计说明书应当把具体的模块以最‘干净’的方式(黑箱结构)提供给编码者,使得系统整体模块化达到最大;一份好的详细设计说明书,可以使编码的复杂性减低到最低,实际上,严格的讲详细设计说明书应当把每个函数的每个参数的定义都精精细细的提供出来,从需求分析到概要设计到完成详细设计说明书,一个软件项目就应当说完成了一半了。换言之,一个大型软件系统在完成了一半的时候,其实还没有开始一行代码工作。那些把作软件的程序员简单理解为写代码的,就从根子上犯了错误了。
? ?
   第五个步骤是编码,在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都出现过。编码时的相互沟通和应急的解决手段都是相当重要的,对于程序员而言,bug永远存在,你必须永远面对这个问题,大名鼎鼎的微软,可曾有连续三个月不发补丁的时候吗?从来没有!
? ?
   第六个步骤是测试
??
   测试有很多种:按照测试执行方,可以分为内部测试和外部测试;按照测试范围,可以分为模块测试和整体联调;按照测试条件,可以分为正常操作情况测试和异常情况测试;按照测试的输入范围,可以分为全覆盖测试和抽样测试。以上都很好理解,不再解释。
? ?
   总之,测试同样是项目研发中一个相当重要的步骤,对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会又不可预料的问题存在。完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算告一段落,当然日后少不了升级,修补等等工作,只要不是想通过一锤子买卖骗钱,就要不停的跟踪软件的运营状况并持续修补升级,知道这个软件被彻底淘汰为止。
地质啷http://weibo.com/943569550

7658

主题

1160

铜板

2299

好友

技术员

为地信喝彩!

积分
106249
QQ
 楼主| 发表于 2010-5-29 13:59 | 显示全部楼层

一个老程序员的十年生涯

今年是我大学毕业满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年,我的一个高中同学杨考上了湖南大学计算机系研究生,请客吃酸菜鱼火锅。在大家喝酒时,杨提了一个问题:请大家说出一个自己最想达到的目标。我的桂中同学大多数都是上的全国重点大学,此时毕业三年了,大家都对社会对生活有了自己的认识,于是就有了各种不同的答案,我当时的回答是:“我希望能有一天开发出一个好的软件,让许许多多的人都能用上它。”,这个目标我到现在都没达到。但当时大家是给我热烈地鼓励。杨饭后跟我说,你既然那么喜欢计算机,为什么不考研呢?对啊,我为什么不去试试呢?当天晚上我躺在床上,没怎么想就确定了要考研的想法。当时却怎么也没想到,考研之路成了另一条折磨人的不归路。对我一生的影响深远……
  这就是我早期的学习生涯,深深地体现出中国的时代特色。这段时间我的生活是困苦的,心情是苦闷的,但学习热情却是无以伦比的。现在我一个人拥有两台奔四电脑,随时可上互联网获取丰富的资源,反而在技术上难有寸进了。越来越觉得古语说得好:
  艰难困苦,玉汝于成!
? ? 这是生活的真理!

? ? 第一次考研的失败
  决定考研之后,我就去买了相关资料,取出尘封己久差点当废纸卖掉的大学课本,又开始了学生生涯。
  考哪儿的大学?是我首先要考虑的问题。
? ? 当时还有另一个高中同学也准备考研,也是计算机,他报了广西师范大学的研究生。
? ? 父母则劝我也考广西师大或我的母校广西大学的研究生,说那好考得多,也可以托人走走关系。但我这人很犟,我在西大混了4年,什么也没学到,我还去那儿干什么?我想起了高中时的梦想,决定直接考北京的高校。当然,北大清华是想都不敢想的,社会上工作几年,我毕竟清楚自己几斤几两,但北京几十所高校,难道一所也不行?我不能再听父母的话了,我要走自己的路,自己的命运自己负责,于是我坚持要考北京的学校。
? ? 知道这件事的朋友都对我表示惊奇,工作了4年,学校里的知识都忘得差不多了,还想直接考北京的学校,难度之大,相信不少人都认为我成功的希望很渺茫。事实证明,他们的看法是对的,但不全对,因为世上本就没有绝对的事情。
  这时,我还在一家私营公司里打工,于是,白天上班,晚上就挑灯夜战,每晚不到12点不休息。
经过半年的复习,我参加了1997年元月的全国研究生入学考试,成绩出来,我专业课没问题,但数学才得了44分,毫无疑问,名落孙山。
? ? 这是一个打击,但对我并没有太大的影响。
? ? 这时,我小时住在隔壁的阿姨来到桂林,她说她女儿(我小时的玩伴,也姓杨)去年就考研了,但也同样没过,她原先在北京服装学院读本科,毕业分回广西柳州一个国企里,工作一年之后考研,没考上之后,她就把工作给辞了,专门跑到北京同学家中复习一年。97年考研她成功了。
得知这个消息,对我是个很大的鼓励。我想,她一个比我小的女孩都能成功,我为什么不行?我想办法与她联系上了,在后来的考研岁月中,她给了我极大的帮助,帮我买资料,帮我问成绩,写信给我,鼓励我坚持下去……
? ? 受人滴水之恩,当涌泉以报。
? ? 世上的人大都只会“锦上添花”,但只有“雪中送炭”才是最宝贵的。她就是我的“雪中送炭”人,她研究生毕业后嫁到青岛去了,断了音讯,但我心中永远记住了她的帮助。我决定,从今往后,如果我有能力帮助别人的,就一定要帮助人。这世界充满了太多不好的东西,我应该努力往其中添一点好的东西,哪怕显得多么微不足道
? ? “土包子”的北京之行
  中关村印象
? ? 刚好,1997年我大哥在北京中央美院进修美术,我决定明年继续考研,于是辞去了在一家私营电脑公司的工作,于6月底来到了北京,住进了大哥的宿舍中。6月到7月,我在北航学计算机维修,7月参加陈文灯老师的考研班,一直呆到9月中旬,我才回到桂林。
  中央美院当时搬到了北京西北角的西八间房,我和大哥一起住在学生宿舍中。认识了不少来自全国各地的搞美术的大哥同学,我很喜欢和他们这些搞艺术的人在一起,看他们色彩斑斓,形象逼真的油画,和设计精巧的一些手工作品,是一种美的体验。与我们工科人相比,他们是另一种思维方式。
  7月份,大哥要回桂林了。在回桂林前,我帮他和他的同学们去中关村电子市场一口气买了三台电脑,当时最红火的电子市场是中关村电子市场,就是现在北大太平洋电脑商场所在的地方。那时电子市场里熙熙攘攘,如此的红火,是我在广西所从未见到的也从未想到的。在大街上随处可见抱着台打印机,拎着个扫描仪的人,把电脑配件当成白菜一样卖,这就是我对闻名全国的“中关村电子一条街”的最初印象。
  我到了中关村,见到了那些我非常熟悉的公司:北大方正,金山WPS,江民科技……,见到了北京书堆积如山的书店,感叹这里真是一个知识的海洋,觉得亲身感受到了中国IT业的脉博。
大哥回去后,我一个人留在北京,骑着辆破自行车逛了中国最有名的大学:北大和清华,北大风景如画的未名湖上处处荷叶飘香,清华平平展展的草坪展示一种平实坦荡的心胸。一墙之隔,校园内外,就是两种不同气氛,无名无状,却让我这个二十多岁没出过广西的土包子感受深刻。
“疯狂”的考研班
  我参加的是暑期文登学校的考研班。中央财经大学那栋破败不堪的学四楼里,住满了来自全国各地的学生,和我住在一起的,一个是湖北的,一个是东北的,一个四川的,为了同一个目的,大家从天南地北聚到了一起,我当时真感到了一种“家”的感觉,原来这世界有这么多同路人,我不过是中国十几万考生中一名不起眼的“老生”罢了,但还不算是“范进”。
? ? 考研班的日子是“疯狂学习”的日子。
? ? 记得我们需要到北方交通大学的大礼堂去听人大老师索爱群的政治课,一千多人的大礼堂被挤得满满的,连过道上都坐了人。在老师的讲台前堆满了各式各样的录音机,足有一百多部,来自全国各地的莘荠学子拿着一瓶矿泉水,在北京最热的7月,挥汗如雨地在记笔记!这段日子,我用去了7个笔记本!这种气氛,我以前在广西是从未见过的。我本来以为我已经够努力勤奋的了,到北京考研班一看,根本就不算什么。
  陈文灯老师教的数学给我留下了最为深刻的印象,他上课不用讲稿,所有的例题全都记在他的脑里,随手就可以写出来,丝毫不差,还总结出一整套解题方法,让我大开眼界。我是见着了,原来一个人对本职工作可以精熟到这种地步!后面我还会谈到另一位老教授对职业可贵可敬的敬业精神,不敬业,就不是一个合格的劳动者。
? ? 我一直呆到身上没钱了才离开北京。这三个月花完了我工作几年的所有积蓄,却对我的影响是巨大的,中国什么地方最适合学习?最适合学计算机?在我看来,只有北京!
? ? 我下定决心,一定要到北京来学习计算机技术。
? ? 差点跳楼的致命打击
? ? 9月中旬我回到了桂林,开始准备第二年的考研。
? ? 但生活是不讲情面的,我想当然地认为经过了北京名师的指点,我去年就是数学没过,今年应该没问题了,但事实并不如此。
? ? 1998年的数学试题,突然有了一次很大的变动,这次数学考试特别难,题量还特别大,全国及格率仅7%,平均分为30多分。我现在将这次考试试题称之为“变态”的题目,出题的那帮呆在空调房里的教授们挖空心思出出来的题目,可把我给害惨了。我自认为心理素质够强了,但因为这场考试关系命运太大,在考场上我的手都是抖的,几乎晕倒,一道道的大题空在那儿做不出来,都象是在不断地讥笑我不自量力,又象是一张张面无血色的血盆大口,一张口就把我给吞下去了,连骨头渣子都不吐。
考完数学,我就知道我今年没戏了。原来一个考场有几十位考生,考完数学之后只剩下不到三分之一的人。我坚持着把后面的课目考完。在那种明知无望但仅凭一种信念支撑着要坚持到底的时刻,我真不知道当时是怎么挨完后面的专业课考试的。
? ? 3月,成绩下来了,我的数学成绩让我差点去跳漓江了---13分!我从小学习勤奋努力,从没拿过这么低的分数。真是破纪录!当时真是灰心到了极点,准备放弃考研,到广东打工,找个地方浪迹天涯,自生自灭去,实在没脸在家呆了。
? ? 这个时候,我大哥劝住了我:你都考了两次了,我看来你就是数学差,其它课你都过线了,专业课还都是80多分,为什么不继续努力?集中精力把数学搞好就可以了。你现在放弃,就前功尽弃!
我这人笨,从小学东西就慢,这是一大弱点。但上天是公平的,他给你一个弱点的同时,也一定提供了让你克服这个弱点的方法。
? ? 我笨,但我好强,但我勤奋,但我坚持,人一之,我十之,笨鸟先飞,古已有之,古人可以做到,我为什么就不能做到?这事就这么收场?我不服,不甘心!于是,我下定决心再拼一次。
我现在没有工作,也不想再去找工作了,住在家中,就与堆积如山的书干上了。在关键时刻,年迈的父母无条件地支持了我,他们默默地承担了一切,让我有饭吃,给我一个安静的环境,让我去实现我的梦想。
? ? 我深深感受到父母的爱是多么的无条件!我一个二十五六的大小伙子,呆在家中吃闲饭,还让父母为我的前途操心,那种心灵的煎熬,现在想起来都有种想哭的感觉。男儿有泪不轻弹,只因未到伤心处!在此,我要深情地对我的父母说:儿子绝不会忘记你们的恩情,唯望两老保重身体,一定要等到看到我过上好日子的时光。
? ? 反思,走自己的路!
? ? 考研失败,我反复想,为什么我听了陈文灯传授的做题秘诀,反而考得更差了?别人为什么用陈老师的方法考出了好成绩?看来,每个人的具体情况不同,不存在可以让人暴长功力的“武林密笈”,从这件事中我学到,决不能迷信权威,迷信理论。后来我对许多现象与潮流如CMM热,设计模式,软件工程等理论都持有不同的看法,认为把西方的东西原样照搬是行不通的,不经过自己的大脑独立地思索,不经过实践的检验,不要相信任何东西!
? ? 从98年到99年1月,我断绝了一切外部联系,把自己关在了家中。我父母的工作单位是一个疗养院,全院加起来也就一两百号人,后山就是一个森林公园,空气清新,林木繁茂,大院里还有一个小山(是真山,不是假山,桂林的这样象竹笋似的山多了),山上修了个亭子,平时少有人来,真是一个闭门修行的好地方。
? ? 我每天到小山亭子上去学英语,背政治,桂林四季长青,我周围是青山绿竹,微风一过,树叶沙沙做响,我就在这里学起了战国时的苏秦。从春学到夏,再从夏学到冬,苦苦学了一年,这一年里,使我的心志得到了极大的锻炼,困难更加难以击倒我。后来我境况转好,生活中很多人觉得受不了的挫折,在我看来都不过是小菜一碟罢了。
? ? 桂林多奇山,秀美苍翠,风景四季如画。每当我学累的时候,总是看着这美丽的风景,赞叹祖国江山如画,感触人生之渺小,命运之无常!
? ? 大哥从北京带回了一台电脑,奔腾166,4.2G的昆腾大脚硬盘,当时不错的配置,把它送给了我用。我渴望了多久的东西终于到手了,我终于可以无限制地使用计算机了!我把电脑放在床前,伴它入眠。
我有时半夜会突然惊醒,想着目前的困境,浑身会出一身冷汗。电脑沉默不语,在一旁安静地陪着我。我看着那蓝幽幽的屏幕,心情非常复杂。
? ? 有了电脑也难过,我得抑制住自己强烈地想探索软件技术的欲望,强制自己把主要精力放在考研上。
整个考研英语大纲有5300多个单词,为了背下它们,我用VB编了一个背单词的小软件,每次可以分别显示中文或英文,并可以区分哪些单词没记住,下次复习。所有单词我都是用键盘一个字母一个字母地敲入的,每天早上一起床,先对着电脑背它半个小时。到考研结束,我一看,数据库中已有了两千多个单词。
? ? 这一年以来,我真是玩命,什么考研理论我都不信了,我就托人买了国家教委出的几本考试分析,就专门研究考研试题,我要找出适合我自己的方法来。
? ? 考研数学考试分析500多页的书,被我翻来覆去地将历年考试试题做了三遍。党的十五大报告我至少背了一百多遍,我称之为背“语录”,真称得上是“倒背如流”,考政治时我把大段大段的十五大报告文字抄上去,居然得了75分!
? ? 发黄的本科高等数学和概率与数理统计,以及蓝色封皮的线性代数课本,都被我翻得不成样子。我觉得我就是基础太差,在这种基础之上,讲什么做题方法都是空中楼阁,一定要抓住“三基”(基本知识,基本方法与基本原理)。但我不得不悲哀地指出,我这些努力并未使我的数学能力有所提高,数学并不是这样学的,数学思维绝不是这样培养的。怎样学数学?得去问华罗庚与陈景润等数学大师!我至今数学还是不行。也希望有这方面经验的人能够教我,让我补上数学这一课。
? ? 生活总算给了我一次微笑。1999年考研,我数学得了60分,终于迈进了大学的门槛,可以打起背包上北京了。
? ? 我这人比较笨,不善于找到达到目标的最佳路线,但凭着牛劲钻下去,硬给我钻出了一条路。这条路能走通还带有一些侥幸的色彩,大家想必比我聪明得多,一定能找到更好的路,用更经济更聪明的办法达到目的,这是一种大智慧,是我所没有的。
? ? 这段经历对我个人的思想品质的影响是深远的。为什么这么说?为了考政治,我深入全面地了解了中国近现代史,我去盗版碟市场买了不少存有历史资料的光盘,从多方面来看中国历史,凡电视中有关历史的节目,我必看。我在这里尤其想说的是一个巨著——《毛泽东选集》!经历过文革的每个家庭,哪家没有毛选?我家就有不止一套。毛泽东选集一到四卷,发黄的书被我在这段时间通读了一遍。其中的经典文章更是被我看了一遍又一遍,赶上金庸的《射雕英雄传》了。越读越觉得毛泽东之人真是数百年才出一人的大牛人,他的《湖南农****动考察报告》、《论持久战》等著作,其中体现出来的深刻洞察力与对中国国情的深入把握,其博大的心胸,为国为民的精神真叫我震撼!***最终夺了天下,实在是中国社会的必然,当时她集中了多少中国最出色最优秀的人才,再加上毛泽东这种不世出的大牛人领导,老蒋真与他不是一个水准的,想与****逐鹿中原,必败无疑!我成了毛泽东的崇拜者,但绝不是盲从者。
? ? 说起来大家可能不信,我从毛选中得到了许多精神上的营养,更加乐观了。毛选,真是中国人巨大的精神财富!近年来有不少愤青指着毛泽东晚年的失误全盘否定毛泽东,在我看来真是狂妄无知,他们有几个真正了解毛泽东?有几个真正客观地看过毛选?有几个有资格对毛泽东做出评价? 把他们放回毛泽东生存的那个民族危亡的时代,他们还会有这么多屁放?!说不定最先当****的就是他们。呵呵,不好意思,说粗话了。
? ? 闲话少说,回到正题。
? ? 回顾这段经历,我只能说是“具有中国特色的考研之路”。我感叹,中国的考试就是扼杀人性的东西,高考与考研尤其如此。我要是用这种精力去学计算机,一年半的时间,还有什么技术学不到手?但我没办法,现实逼着我去考这种我并不想考的试。中国考试之难我看全世界也不多见,我想,每年全国还有那么多的学生要参加这种考试,大量的人力物力与年青人的精力和时间都耗费在考试上了,而考试的内容与实际脱离那么远,真的有助于人才的脱颖而出?我看反倒是形成了一种应试教育,扼杀了年青人本来所具有的创造性,中国现在为什么出不了大师级的人物,应该反思中国的教育制度。

下篇 曲折的实践之路
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年!
? ? 我找到工作后向家里写过一封长信,信中讲了我对父母平时不好意思说的很多心里话,当时,我父亲说,母亲接到信都哭了。 我刚拿到工资,马上打了个电话回家里告诉母亲,以缓解他们的焦虑,毕竟儿行千里母担心啊!父母有退休金,一再表示不需要我赡养,而我再这样不要脸下去,我还是人吗?我就是从那时候开始,下定决心,从今往后,再不向家中要一分钱!今后三年读书和生活的费用我一定要用自己的劳动来获
  金钱带给我的激动就是在那段时间,温饱问题解决之后,金钱对我的诱惑就再没有了,哪怕让我一个月赚一万,给套房子给我,也不可能再给我带来幸福的感觉了,钱是重要的,但不能成为它的奴隶,家中不需要我负担,我一个人有吃有喝,干着我喜欢的工作,足矣!
  我在那公司一直干到九月学校开学为止。我走的那一天,公司居然还开了个欢送宴会,老板封了5的封包给我。我真是感动。我大学毕业后在社会上挣扎求生,得到的大都是冷眼与蔑视,社会终于认可了我的价值,我不是一个只知道吃饭的废物!
  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项目。给我真正震撼的是《设计模式》这本书,看了才知道,原来好软件是这么设计出来的!在此,我强烈推荐所有有一定编程经验的程序员一定要看这本书!
  一边学习理论,一边可没忘记我没经济来源,于是又四处打工,接一些小项目与小模块来赚些生活费,国内一家横跨家电与软件的著名公司是我打工期间去过的最大的公司。但无论什么公司,都给我一种感觉——烂!公司中充满了对员工的剥削与不尊重,对软件开发这一事物的错误认识,管理混乱。
  我没机会去外企,技术水平不到,别人不要我 L,但我所见到的软件公司,我敢说没一家能做出世界一流的软件!
  我上的研究生课程也让我失望,整个就是本科教育的再版。经过高考与考研两次重大考试,我对考试已是深恶痛绝,但读研期间仍要考试,而且是闭卷!我就不知道我去背那些条文对我的研究与学习有何帮助?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++/Java,我就抛开了指定的教材,C++我讲了STL,Java我讲了OOAD,两者我都讲了用Rose进行双向工程,引导学生去学UML,一开始就用UML去描述自己开发的程序,何必浪费大量的时间去学结构化的编程方法?
  我现在简直成了面向对象技术的布道者,我下学期即将开设OOAD基础选修课,从实际项目中抽取典型的案例,讲UML,讲Rose,讲设计模式,讲软件体系结构,例子代码横跨C++/Java和.net下的开发语言(C#和VB.net),这对于我一个技术水平有限公司的董事长而言,实在有点不自量力,我鼻子上才插上几根葱,就想装大象?但我想,如果我能成功地激发出哪怕1%的学生的兴趣,能引导他们走向我认为是正确的方向,能启发他们思考,能直接面向真实的软件开发活动而不是学校的考试,就是我的成绩。我现在正在看引进的原版书籍---《设计模式解析》,时时击节赞叹!《设计模式》经典但难懂难用,而《解析》一书的两位作者既有丰富的从业经验,又对OOAD进行了深入的思索,真知灼见时时展露于书中,我现在刚看了这本书的80%,基本上可以用一个成语来描述这部书:深入浅出!
  要做到深入浅出谈何容易!只有同时具备技术专家与文学作家素质的人才能做到!
  反观我们国内的大量教材,还有大量的垃圾论文(包括硕士,博士的,本科的就算了,我看绝大部分根本不能称之为论文),全都是“浅入深出”,作者自己都未必明白,就东拼西凑,摆出个样子吓人。本来完全可以用大白话三言两语讲清楚让人明白的道理,有人专门要绕一大圈,专挑用高深的数学公式来表达,唯恐别人容易理解,显得他水平不高!呵呵,什么东西一沾上“数学”,立马身价百倍。我就听过一个北师大的一个在读博士说过:如果一篇博士论文中没有一个数学公式,根本就不算是博士论文。这句话对不对,大家可以多思索。我数学不好,没资格讨论数学,我的直觉:数学是工具,但如果为了发表论文等目的而故弄玄虚,为数学而数学,是不合道理的。中国的学术水平与现状,大家都心知肚明,不用我废话了。
  现在每年都毕业大批的计算机专业学生,可其中真正具备扎实根基的可以很快胜任工作的我看只有5%(95%的学生不要扁我,不同意就当我在说胡话,我很瘦的,一扁就没了J)。多年以来,我国高校计算机教育是按照计算机科学研究者来培养的,可事实上,有多少学生能从事计算机方面研究的能力?我看应分流,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年的时候,我也许会再次写一篇人生的十年回顾,到那时中国的软件会如何?中国软件的明天靠你我这些普通人去扎扎实实地去工作来支撑!少发些牢骚,多做些实事,中国软件才会有光辉的明天。你我共勉!
地质啷http://weibo.com/943569550

7658

主题

1160

铜板

2299

好友

技术员

为地信喝彩!

积分
106249
QQ
 楼主| 发表于 2010-5-29 13:59 | 显示全部楼层

一个老程序员的心里话说到人的心坎

诸位,咱当电子工程师也是十余年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强!

[1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手! 
  
[2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!   

[3]不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,美国***,一律如此!   

[4]多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!

[5]知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!! 

[6]抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!   

[7]逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,脸皮太薄,心不够黑,教条式思维。。。这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好--尽管你可能技术不错!   

[8]工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!   

[9]要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...   

[10]该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!
地质啷http://weibo.com/943569550

0

主题

807

铜板

12

好友

工程师

Run before you can walk

Rank: 7Rank: 7Rank: 7

积分
468
QQ
发表于 2010-7-17 17:25 | 显示全部楼层
好样的,加油~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表