2007年11月15日

我的编程之路(第二版)

作者 非鱼

第一次接触电脑是在高二的时候了,95年学校新进了一批高科技的电脑,放在实验教学楼的最顶上,跟我们学英语的高级语音教学实验室挨着,环境一流,我们学生只能站在楼下看看那个窗帘紧闭的房子而已。96年轮到我们开了计算机课,比学费多出了一百块钱(学费总共才600块),还是一个学期,轮流上机,每周只有一节课,一周在教室讲课本,一周到机房去实践。这时候才知道偏远地区的学生想学好东西是多么不容易啊。

第一次进了机房,看着这些保养的崭新的486机器,屏幕的大小已经记不清了,估计是14的,卧式机箱,5’软驱,心情激动的跟什么是的。可惜机器不够,三个人用一台机器,一堂课只有45分钟,所以每个人只有15分钟的上机时间,这就是我们的100块钱一学期换来的代价。看着那两个新来的大学生老师,心里有着无比的崇敬,原来,高手就是这样的。

有一天,看着那个女老师拿着一打黑片扔到垃圾筒里,(5’软盘),跑去捡了一张回来研究,发现好像跟磁带的样子差不多,想了很多办法也没办法看出上面印的东西,只好作罢。有一次上课,大家按照课本上的东西把一段QB代码输入到计算机里面,开始奏乐。很简单的曲子,却很奇妙。我们来来回回按了几个键,结果,别人的机器放一遍就停了,我们的这台可以一直重复的放,引得旁边的同学投来了羡慕的眼神。后来,发现了一个严重的问题,我们的机器无论如何也停不下来了,一直放一直放的。后来叫来了老师,他按下了机箱上的一个东西,就重新开始启动了。

但是,真正对计算机的亲密接触却是在随后一个学期的游戏生涯中开始的。有一天,同桌告诉我,县城里开了一家游戏厅,是电脑游戏,不是我们原来玩的街机,非常好玩,于是带我去见识见识。那个小屋里只有四五台机器。我们进去的时候,三个人在最里面的一台上不知道在研究什么东西。同桌让他帮我们开一台机器,3块钱一个小时,不便宜,但是还能承受。开机之后,他直接就帮我们进了游戏,红警95。如此复杂的游戏我还是第一次接触到,不过同桌似乎已经玩过很多次了,耐心的教我各种兵种以及作战规则。很快,一个下午过去了,我的红警也打的有模有样了。于是,后来,我们就经常光临这家小店,成了它为数不多的顾客中的常客。

这样的日子经历了两个多月,这家店突然消失了,不知道为什么。以后,也就渐渐淡忘了这一段日子。后来,直到上了大学,才重新回到计算机的面前。

高考结束之后,选择志愿,因为我喜欢物理,所以选理科是当然的,经过几番抉择,最终定下了南开大学的计算机系。结果,天不遂人愿,谁也没有想到那年的分数会那么高,南开落选了,最后,听天由命的,把生命寄托在上海财经大学上。这个我的高中老师谁也没有听说过的学校,为我的前半段人生划上了一个不完美的分号。

进了大学以后,看到自己的统计专业的课程安排,知道这个学校全部都是文科,我的理科梦算是完了。不过我们的第一个学期就开设了计算机课,计算机机基础一,也就是操作系统和办公自动化之类的课程。学校有四个机房,200台机器,算是让我开了眼界了。

第一节课,首先按照老师的要求,开机,进了dos,打出一个命令,win32,回车,进了windows界面。这个命令我记了四五遍才记住,不过跟我原来打游戏的时候的界面比起来,可是差的远了,黑白的不说,字也都怪怪的。这就是经典的win32中文版了。随后学了word和excel的6.0版,还有那个老的资源管理器的基本操作。我总觉得老师讲的太慢,因此,上课的时候总是玩那几个小游戏,下了课再自己补。

一个学期过去了,计算机考试只有72分,很低的一个分数,还不如我的高等数学(我是数学课代表)。下一次计算机课要等到大二的下学期了,也就是中间一年的时间都没有计算机课了。

但是,就在大一下学期刚刚开学的那几天里,也就是99年伊始,我在来学校售书的小书摊上,忍痛花了16块钱买了带领我走进计算机领域的第一本计算机教材――网页制作入门教程。我都不知道我怎么会买这样的书,网络这个词前所未见,现不要说学了。但是,这本薄薄的简易教材却是我真正的启蒙老师。教材一开始讲了各种各样的网络协议,看的我一蒙一蒙的,云里雾里。什么WEB,WWW,HTTP,FTP,NEWS,GOPHER,FINGER,BBS,我实在是没有办法想像这样的世界。不过后面一半内容是讲网页制作的,对于把一个简单的文本文件,变成丰富多彩的页面,倒是真正引起了我的兴趣。我来到学校机房,按照书上的内容一个字母一个字母的打进去,保存成HTML文件,然后双击打开。它没有按照书上讲的用Netscape打开,而是用的Word。但是,仍然显示出了一个红色的方框,把原本杂乱的文字放进了四个表格之中。真的好激动啊。

补充一句,我们自己进机房,开机一般就进win95了,没有人会再去用那个奇怪的win32的。而且,我们的二号机房,机器是最先进的,MMX133,32M内存,用的是win98的操作系统,比95好用多了,却是经常死机,不知道为什么。

最后,HTML语言这一关算是过了,知道网络是个什么东西了,但是却没有见识过那个被称为丰富多彩的世界。学校里还没有上网,外面倒是有两个网吧,不过,从来没有同学进去过。于是,再去看别的书。从网页制作,看到网络协议,再看到程序设计,经过了半年的时间。因为是文科学校,图书馆里没什么计算机的新书,最新的也是落后两年的,居然还有85年出版的关于计算机的书,只有一个书架,不是太多。借书的时候要填借书卡,写上名字。后来,我发现,这一面书架上,几乎所有的90年以后的看上去比较新的书,借书卡上都有了我的名字。

我的头脑中关于计算机的世界空前的纷杂而糟乱,各种各样的知识充斥其中,没有条理,没有头绪。有一天,我突然特别想去看看真正的网络是什么样的,于是带了一张软盘,来到外面的网吧,问了一下价钱,18块钱一个小时,我的天!不过我还是坐下来了,打开IE,熟练的打入那个梦想了多少次的网址,www.yahoo.com。速度还可以,网页显示出来了,然后呢?不知道。网络的世界原来比我的思维更加混乱。这一个小时实在是没有干什么,自己都没想起来这一个小时做了什么,看到了什么。最后的结局非常可爱,当我把软盘放进那个软驱口的时候,它叭的一声掉进了机箱,原来它们的机器没有装软驱,说是怕感染病毒。没有办法,这张软盘造价不低,一定要拿回来。管理员拉长着脸帮我打开了机箱,拿出了软盘,我赶紧结帐走人。花了22块钱,算是第一次上网的滋味吧。

大一第二个学期要结束的时候,班里的同学突然兴起来了考级,也就是计算机的上海市中级考试。很多人跑到复旦大学报了他们的中银培训,600块,我没有报,但是最后考试报名的时候我却很想去试试,看看我到底知道多少东西。错过了报名考试的时间,但是没有关系,功夫不怕有心人,终于在快要期末考试的时候,被我在学校新开的杂志阅览室里的一本旧杂志上找到了中级报名考试的总部,也就是电大的地址,而且上面写明,可以补报。于是,马上骑车飞奔而去,还好,不是太远,就在同济大学对门的那条小路里面。

期末考试以后有10天时间复习,我也没怎么看书,其实这次留下来的主要目的,是为了我追求的那个女孩,她就是报了辅导班的人之一。只是想和她多呆一段时间而已。不过并没有什么进展,很快,考完试就回家了。

开学一回到学校,赶紧想办法查成绩,花了2块钱打声讯电话,查出来了,只有27分。这个玩笑开大了吧。我从此再也不向人提及我的这次不用辅导班自己去考试的尝试了。

后来,突然的,学校机房的网络开通了,可以上网了,而且很便宜!于是,我去机房的时间明显多过了去教室的时间。只不过,学校的网络速度真的是很慢。开始的时候,下载一些杂志上看到的新的软件,能够保持在0.2K每秒的速度,我就已经很满意了,关键就是总是断线。大家没有看错,只有0.2K。后来找啊找啊,找到了第一个支持断点续传的软件,GetRight,现在似乎已经销声匿迹了。当时用这个软件,发现断掉以后不必重新开始,着实开心了一阵子,而且发现,用它刚刚连上去的时候,可以达到0.5K,后来是逐渐变小的,于是,就不断的点挂断,重新连接,直到下载完为止。机房每天开三个时段,上午,下午和晚上各四个小时,中间各有半小时的休息,是必须退场的,而且老师会检查机器是否关好。有时候,为了下载一个东西,我早上进场,马上开始下载,到中午出去的时候还差一些,于是,离开机房去买点饼干,直接再回来排队进下午场,因为我的机器是不关的,只是显示器关了而已,再加上一个下午的时间,想下载的东西也就下完了。说也奇怪,那些机器都破成那样了,但是硬盘却是非常非常的安静,一点动静都没有。就这样,我经常每天在那个14’的球面显示器面前呆上8个小时,倒也不会头晕,慢慢的就习惯了吧。

这样的网速,对于一般的网络应用,都是不太够用的,但是对于校园网的BBS,却相当合适。那时候也没有专用的BBS软件,就用win98自带的Telnet。虽然会有半个汉字的乱码问题,但是这都是可以解决的。而且,后来习惯了在BBS上找人聊天。我用的最多的不是清华和交大的BBS,而是安徽大学的,因为它注册不用认证,即时生效,而且很长一段时间不去,也不会被删帐号。而且,有一些中科大的人也会在这个BBS上出现。那时候,还曾经将自己的几篇小文章发表在上面,经常去看看有没有引起别人的注意,可惜,似乎被淹没了。

99年底2000年初的时候,网络大潮来到了。学校里的计算机协会倒也有本事,经常请各个网站的CEO来学校里演讲,其实就是做宣传,每次还都有些小礼物送,我每场必到。结果,也认识了不少大网站的头头们。包括Sohu和后来成为一家的Chinaren,还有我的信箱的东家,Etang,还有辉煌一时的Elong,Yahoo,梦想家,我家里至今还留有三个Chinaren的鼠标垫,就是那时候拿的。Elong的会员卡也有一张,只是它的定位有问题,学生不会去它的那些连锁商店和宾馆的,所以,失败极了。倒是Chinaren的定位准确之极,可惜,血不够流的,没有撑到我们这第一批客户毕业,就倒下去了。在梦想家网站的那次讲座上,主讲的三四个年轻人迟到了半个多小时,主持人只好自己向观众提问,发奖品,也就是免费上网的赠券,这一次让我大出风头,让在场的观众都认识,原来这里有个知识这么丰富的年轻人的存在。包括那几个年轻的主讲草草的做完了那个令我失望之极的演讲之后提问的几个问题,像榕树下的网址、中文yahoo的网址等等,也都被我捡来了。(因为这两个网站都是刚刚改了网址)。

呜,前面废话说的太多了。真正让我走上编程之路,还是考上海市中级。经过第一次惨痛的教训,2000年的暑假,我再次报了名,不过这时候的我,已经有些底气了。但是当时这场考试里面,对我来说最难的问题,就是批处理的编写。相反的,Foxpro的编程我倒是觉得轻松的很。也正是因为这几章foxpro的学习,才让我领悟到什么叫做编程,也是在那个时候,就早早的学会了SQL语言和复杂的查询设计,为以后学习VB打下了基础。最后的考试结果也是预料之中的,批处理因为一个引号的处理不当,20分全丢,加上基础知识里面丢了一点分数,只保住了及格,没有拿到优秀。

考过了中级之后,就开始准备考国家二级了,于是开始学C语言。可能也是因为有前面那些杂乱的知识垫底,学起来似乎很顺利,姐姐把她的C语言教材给我寄了过来,还有一套二级的考试软盘。这本谭浩强的书我连看了两遍,认为C语言已经会了。于是,去看别人是怎么编程的。打开电脑报和电脑爱好者,终于明白了一个事实,windows98下面用的那些软件,根本不是TC能够编出来的。在高级语言之中,学校的机器里装了VC, VB, foxpro for windows,而我最终选择VB,是因为在图书馆里,VB的书比较多,也比较新,也比较容易看的懂。

这个时期是我学习的黄金时期,几乎是C,VB和java同时进行。但是java最终还是没有学会什么东西,因为没有实践,而且书的质量参差不齐。有一本看实例学java,上面的代码很简单,但是说明却很酷,比如在网页上做动态文字什么的。我几乎抄下了整本书的代码,但是总觉得那个好像是HTML的语法,不像什么java。后来才搞懂,这本破书只列出了在网页中引用applet的代码,却没有把applet本身的代码放上去。外借室,阅览室和杂志阅览室里,所有的电脑教材,电脑杂志,全部看过了一遍,而且抄下来很多很多内容。不过这个时候的学校机房实在是太紧张了,排队排一个小时才能排到位置,去了晚了这一场就不会有空的桌子了。大家都在抱怨为什么学校不增加一些机器,但是学校似乎听不到。还是那些破机器,还是那个破网络。

轻松拿下二级以后,(其实也不轻松,二级的上机考试的时候,那些机器不知道怎么回事,不能调试,一调试TC就报溢出,所以完全是凭想像一次完成,没有调试就全部交卷了,结果最后一个40分的大题思路有错误,丢了,还好前面的两个题保住了整整60分,及格算完。)开始准备过三级。研究了一下中国现行的计算机考试,把三级和程序员考试同时报了名。因为这时候,97级的一个师兄已经拿下了程序员证书,看上去似乎很酷,所以我也就报了。在三级考A还是考B的问题上犹豫了很长时间,最后决定考A,因为B还是考C语言的,没什么挑战,而且姐姐告诉我考A的通过率会高一些。

后来才知道这个决定是多么的不明智,让我轻松的丢掉了一张有力的证书。汇编太烦了,而且更烦的是基础知识里面那些硬件知识,头都大了。最后考试的时候,笔试没有通过,上机的那个汇编题目倒是顺利解决了。后来的程序员考试准备不足,因为是暑假后考试,暑假回家两个月都没有看书,回来就在10月份考试,眼看就来及了。这时候却得到一个好消息,因为什么原因来着,(好像是会计员考试)程序员考试推迟一个月到11月中旬。于是,这一个月成了最紧张的时刻。

国内的这些考试,虽然没有太多实用价值,但是无论二级,三级还是程序员,它对软件知识的宽度要求还是比较高的,所有的网络、多媒体全部都有涉及到,对于增加新手的知识面是有相当的好处的。考试的时候,发现考场里有一半的位置是空着的。题目很难,因为都是编程的题目,却是笔试,没有办法上机调试,错了都不知道是怎么错的,所以要格外小心。一天5个小时的考试,感觉真是过瘾,从来没有做过这么难的题目。后来经过漫长的等待,终于拿到了成绩,又经过了漫长的等待,终于拿到了证书。拿到证书已经是第二年7月份了,是下一次考试报名的时间了,真够慢的。

2000年的秋天,我用助学贷款买了第一台属于自己的电脑。是台二手机,因为我研究了市场行情以后,觉得这个价钱买新机器性能肯定不会好。这个让我心里流血的价钱换来的是一台让我满意的机器,也让我多年积累的知识有地方发泄。不过事实是,自从我买了电脑以后,学习的速度就大不如前了。用纸和笔来学习,效率和速度都远远大于用电脑和键盘。不过终于可以尝试做自己的软件了,因为在机房里实践是不太现实的,编程本身就是一个相当漫长的过程。

对于编程语言,我还是选择了VB,这个时候经常在计算机书店里看到Delphi编程的书,但是Delphi长什么模样却从来没有见过,也没有听说过。之所以放弃网页编程,而选择桌面编程,可能也是跟自己的急功近利有关吧。第一个让我四处炫耀的成品软件,是以有声有色里面的一个网页里面的小花样改过来的。一串心形的图案跟随在鼠标下面,完全符合动力学原理,跟着鼠标摆来摆去。在网页里面实现的话,只要用层就可以把图案画在鼠标下面了,而且网页也有获取鼠标移动的事件,但是要想放到桌面上,这两个问题就变得很困难了。于是我采用了变相的方法简单的解决了这两个问题,带来的问题是系统资源消耗比较厉害。在我的366上,CPU占用经常超过60%。但是软件放出去以后,很快就有人给我写信,称赞这个软件的创意,还有几个国外的朋友写信来,但是,可能是我的etang信箱只能收,却发不回他们的信箱,因此,很多信都没有回过。这个软件后来也没有怎么更新,源代码也在一次低格中丢掉了。希望以后有机会再完善它吧。

真正从编程中受益是一个同学在火车上认识了一个做生意的,说有一套数据库软件坏掉了,想找人重新做一个,因为原来那个是拿的别人的。于是同学把我介绍给他,这时候我还没有做过什么像样的东西。不过见面之后谈了一下,觉得他的程序算法倒是没什么难度(是个非法的东西,就不细说了),于是接了下来。后面的一个星期时间,看完了四本厚达800页以上的VB和数据库的书籍,终于有了些眉目。经过近一个月的努力,搞定了这个软件,还花了些心思在软件的保密上,不过最终经过波折拿到报酬也就罢了。在这个过程中,还了解到了软件开发和客户需求之间的一些关系。

关于编程,我觉得很多东西是相通的,有了C和VB的基础,学什么语言都不是太难,唯有C++,有一个领域我始终没有涉及,那就是STL。我觉得我在编程方面的长处就是可以在最短的时间里找出一个问题的解决办法,虽然可能是最笨的办法,但是,无疑,开发人员的效率会非常高。执行效率,现在已经不是关键问题了。因为我不会去做单片机的开发。

后来终于在一次偶然的机会下,买到了Delphi5的盘,认识了这个闻名已久的编程软件。说真的,很快我就被它吸引了,于是决定攻下它。在三个月的时间里,我在大富翁论坛混出了3000多分,靠转贴别人的答案,也积累了相当的经验,并做出来在别人的基础上改编的大富翁离线阅读器,有着相当多的技巧在里面,而且,主要在界面上下了些功夫。因为这个软件,也认识了几个朋友。但是,Delphi的升级速度却让我跟不上,5、6、7的升级换代太快了一些,而且造成了很多代码和第三方控件的兼容性问题,这给它自己带来了伤害,现在,8的版本也快要出来了,比起微软4年不升级的VS6来,它可是花心的多了。

但毕业的时候找工作遇到了不小的问题,因为我并非计算机专业,也不属于“及其相关专业”,加上美国911事件对全球经济的影响,就业形势相当不乐观。前期参加招聘会投的简历都是IT方面或者程序设计方面的,估算大概有差不多50份了,没有一个回音,连个面试的机会也没有。最后到了4月份的时候,最终去了青岛啤酒的市场部,以为这次要回归自己的专业了。但是对程序的喜爱之心是不会变的,后来在财务部做的时候好好的研究了一下用友的财务系统,直接分析其数据库结构,然后在Excel里面写了程序直接从数据库里读取数据做成每月的汇总报表。

后来在第二家公司本来也是以统计的名义进去的,但是实际上这个公司没有任何统计的业务,似乎只是为了某个规定(要运营什么部门必须有一个统计人员之类的),慢慢的,我就变成了这个20人左右的公司的专职网管,那时候没有管理过这么大型的网络,而且公司原本的网络结构相当简单,就是使用共享模式,导致文件服务器、网络和打印机都经常的出问题,后来经过近两个月的改造,全部升级成域模式,并且使用了ISA作为网关,实现了老总要求的复杂的上网监管。

直到毕业整整一年之后,一个朋友介绍我认识了一个小老板,属于给人打工烦了自己创业的那种,现在新接了一个单子自己忙不过来,需要给一个公司的MRP系统做报表开发,于是我义无反顾的跳槽过去。对于这个MRP的复杂的后台我并没有做深入的研究,如果客户提示要一个什么样的报表(通常是财务部),我的老板就会告诉我这些数据在哪几个表里,然后我就用Access写个窗口程序(通常只有一个按钮),用户点一下按钮,就可以自动取出所有的数据生成一个Excel报表,客户只要打开这个文件打印出来就OK了。

这时候的工作非常简单,所以开始有时间多研究一些别的东西,两年的时间,程序的世界已经发生了很大的变化,PHP这时候已经成为了网络编程的主角,远远超越了ASP,而asp.net此时还未成气候。正好老板说想要一个内部的管理系统,给另一个做外包的客户用,让用户通过这个系统提出问题,我们在解决以后直接记录问题和解决方案。这样时间一长,所有的内容就可以形成一个丰富的知识库,以后这套知识库就可以克隆到任何一家公司,随便招两个新手就可以依照这套知识库维护好一个公司的日常问题。于是,为了写这个系统,我开始学习PHP。

首先跑到浦东图书馆办了张卡,借到了一本《PHP4编程宝典》,这本黄皮书宝典系列是相当经典的PHP教材,由浅入深,思路清晰。那段时间老板对我的上班时间没有什么要求,有时候每周只要到客户那里去两三天,其它时间就自己呆在家里,一切由我自己安排。这种吸取知识的感觉已经很久没有过了,没日没夜的看,一个星期看完,一个星期复习了一遍,基本用法和关键要素已经记住了,然后就开始动手写程序。

因为只有我一个人,HTML的前台页面也是由我全部负责,而我并没有一星半点的美术细胞,所以只能随便找个模板来套用一下。用了大概一个星期的时间,一套典型的PHP+Mysql的简易CMS系统出炉了。然后还用Delphi写了个小程序把老板以前用Email来保留的那些知识点全部导入进了数据库。

随着知识面的拓展,开始接触到更多高级的技术,很快,开始了第二版的改进工作。界面全部用XML+XSLT的方式输出,无论是美观度、执行效率还是修改效率都高了很多。这段时间经常在夜里一两点解决了某个技术难题或者完成了阶段性成果之后写封Mail向老板汇报一下,把老板感动的一塌糊涂。

随后的三年时间里,真正用PHP做的商业项目只有一个,其它的大部分时间我都算是一个简单的客户关系管理系统,虽然简单,却是完全按照客户的需求订制的,管理几个销售人员手中的联系人信息、产品报价信息和询价记录。当时我的PHP技术还不够成熟,可用的控件也没有现在这么多,因此这套系统只负责显示数据,而输入部分则是使用了Access通过ODBC链接数据库的形式,用Access的窗体功能来完成录入。虽然现在回头来看这个解决方案是相当丑陋的,承诺给他们的改版后来也因为种种原因而没有兑现,但是用户一直到现在都还在使用这套系统,已经用了三年多的时间,并且效果良好。

某一年春节回家之前,为了打发火车上的时间,来到计算机书店买本书看。我买书的习惯是先看目录,如果目录内容足够吸引我就开始看内容,如果能让我坚持看半个小时,那么就说明这本书非常值得一读了。这一次,买到了《敏捷软件开发:原则、模式与实践》这本书。后来在回家的火车上,12个小时时间看完了一半的内容,越看越激动,相见恨晚啊。首先敏捷编程的概念和开发模式就让我大开眼戒,而本书的后半部分对设计的讲解,远远超出了以前任何一本书所能做到的水平。

直到我毕业后快四年的时候,原来的老板已经去了一个新的集团公司发展,而我留在在原来负责维护的公司里(如果我们都走了交接就变得相当困难),这时候他帮我推荐了一个职位,他的新公司准备扩充自己的网络部门,要跟上互联网的这股潮流,准备招一个技术人员开发一套新的网站。后来跑过去聊了一下,发现他们已经确定了使用asp.net的技术(这时候asp.net已经相当普及了),并且准备在DotNetNuke的基础上进行改造。虽然他们对我本人各方面还比较满意,但是这时候我的确还是有点心虚,因为我还没有真正的学过asp.net。(三年前看过一本《asp.net高级编程》,已经忘的差不多了。)

最后才知道整个项目是外包给交大一个四人团队来开发的,我只是负责内应,因此轻松了很多,也有了更多的时间做技术准备。又是一段充实而快乐的时光,两个月的时间,研究了DotNetNuke,NHibernate,DotLucene,Javascript,网页的拖放布局等等,甚至为了跟美工更好的合作,设计了一套新的模板方式(使用正则实现了变量,循环,判断等,但是后来发现效率很成问题)。而这个开发团队的人却比较排斥我,甚至连CVS的权限也不告诉,完全把我排除在项目之外。

两个月的开发期限结束的时候,项目进度只有一半,因为他们都不是全职做这件事,都有自己的工作,看样子再过一个月他们也未必能完成,而我在最终拿到他们的代码之后,对他们的代码质量也不敢恭维。虽然理念很好,测试驱动开发,但是所有的功能都在一个完整的Dll里面,而且经常会出现整个Dll项目无法编译的问题。于是,我自动请缨,承诺再给我两个月时间,由我来完成这个项目。公司最终在没有选择余地的情况下,不得不信任我。

紧张忙碌的两个月,我和美工两个人几乎每天都在公司做到晚上11点,而且两个月没有休息一天,两个月以后,项目准时上线了。

就这样,我成了公司里的技术主管。

去年年底的时候,我们几个人决定做个自己的小网站试试,在选择编程语言的时候又颇费了一些心思。这时候Ruby on Rails如日中天,到处都是赞美之声,而在比较和学习ROR的过程中,又认识了Python语言下一个类似的框架Django,是选择一门新的语言来用,还是选择自己本就熟悉的PHP呢?PHP这时候也已经有了几个支持ORM的WEB开发框架,但是看起来代码都比较丑陋,远没有Ruby和Python的对象那么干净整洁。最后在一篇老外的文章里看到了一个三种框架操作Mysql数据库的性能比较,比较过程比较简单,但是性能出乎意料,ROR比PHP快一倍,Django比ROR快一倍。因为这篇文章,加上对两种语言各用了一个星期左右的时间学了一下,最终选择了Django。(还有一个重要的原因,ROR的服务器也是用Ruby开发的,使用上需要同时启动几个服务器进程,在前台使用负载均衡的方式分散压力,这是个让人非常不放心的解决方案,远不如apache+mod_python让人放心。)

学Python的过程是快乐的,Python的语言简洁优美,只用缩进来表示逻辑分隔,而它的特有变量类型和语法可以把其它语言里面的许多行代码变成一行。Django这个框架隐藏了所有的数据库操作,开发人员只需要关心自己的类和事件逻辑就可以了。学了短短的一个星期,就开始边学边动手,不到一个月的时间,理财易就上线了,其高效程度远非PHP可比。ROR最令人瞩目的是它的系统架构,自动为你创建好所有的目录结构,自动完成单元测试,自动的URL分发,半自动的代码生成,方便的数据库Schema执行,学习的过程是充满惊奇和快乐的。

《程序员修炼之道》这本书(原名The Pragmatic Programmer)里面讲到了程序员学习的几种方式,或者说几种必备的要素,很值得借鉴,其中就包括每个月看一本新书,每年学一种新的语言。新的语言能够让你看到更广阔的世界,即便你仍然使用以前顺手的工具去开发,但是你可以学习并使用新的语言中有用的成分,更高效的完成你的工作。

编程之路是崎岖坎坷的,但是一路走来,一步一个脚印,虽然走的艰难,但是也不乏精彩。回想起来,最初的时候看的那些乱七八糟的电脑书和杂志,看似没用,却大大的丰富了自己的知识面,当知识丰富到一定程度,自己就会融会贯通,变得井井有条。这时候的你,就像打通了仁督二脉的张无忌,学乾坤大挪移,也比其它人快百倍。

最后的建议:基础很重要,如果已经学过C语言,那么应该已经掌握了过程式编程的核心,还有算法的基础,如果已经学过C++或Java,那么应该已经掌握了面向对象编程的根本,如果已经学过PHP,那么应该已经掌握了WEB编程的精华,从Java转向C#应该是平滑的,从PHP转向ASP.Net也一样。如果做不到,说明你前面学过的东西也没有学好,或者说没有学好最主要的东西。