我写代码的这十年——致逝去的青春

序言: 经常在想,当工作10年、15年、20年时,我会是什么样子的?那些我孜孜以求、乐此不疲的东西,我是否应该放弃一些,抽出时间去追求更高的待遇、更好的生活?还是遵循自己的内心哪怕碰南墙也不回头?程序和我的人生会是什么样的关系?虽然对我而言,程序远不是仅仅作为一种谋生手段,但很多深层次的联系我赞时不知怎么言表。只好借用一句:人生入戏,戏如人生;人生如程序,程序如人生。我已深陷其中。趁着休假的空当,写点东西总结同时也是聊以慰藉一下已经逝去的十年程序生涯。
 
又是一年高考季,又是一年毕业季。算起来,自己毕业至今已满8年,作为码农,自然也就写了8年的程序了。若论码农的生涯,在大二暑假那会就已经开始了,如此算来,至今已整整十年了。十年,迎来了自己30周岁的生日,女儿也已满百日。十年前,父亲离世,为了早日自谋独立,那年的暑假选择留在学校里打工,顺便也好好学习编程。那时一边补习C++,一边尝试着做个人主页,趁一次在亲戚家过夜的时候,花了一个通宵申请了一个免费空间并且把个人主页给挂上去了,输入网址浏览成功的那一刻,我获得了极大的满足。有天看到食堂附近的公告栏贴着某老师找人帮忙做个介绍去乌克兰留学的网站,居然没这么想就打电话过去询问了,压根没意识到自己还没入门呢。接下来见面谈,我把我的个人主页打开给对方看了下,他居然真答应了,可能那个时候有个人主页凤毛麟角吧。网站是全静态的,分了三五个栏目,总共有十来个页面。抱着从图书馆借来的一堆介绍开发网页的书,我就一头扎了进去,那个时候寝室没有网络,也就没法谷歌百度,遇问题只能翻书解决。如此一个多月,边学边做,出来的东西却是粗鄙不堪。那老师估计看这样下去实在不行,就说给我500块钱,网站他先拿去再找人美化一下。就这样,我赚到了靠写程序的第一笔钱。差不多够两个月假期的伙食费了。从此一发不可收拾,学校里哪里有看到要做网站就往哪里钻,学院里、科技处、勤工部。。。有asp的,jsp的,有几百一个的,也有几千一个的,那阵子生活还挺滋润,还能补贴我妹一些,赚的钱比我刚参加工作那会多。
 
临近毕业,按说我的程序人生该比别人顺利些,自己也是信心满满,不料事实截然相反。
 
从我踏出校门,参加各种面试开始,我就很不解,为啥面试官们总喜欢问我那些问题:协议、算法、模式UML图、等等,而这些问题跟我平时写程序似乎并无多少关系,我的编程能力可以说完全是自学而来的,虽然自己学的也是计算机专业,但课堂不是我喜欢待的地方,挂科也是偶有发生的事情,理论水平勉强够考试60分。我说,我在大学里做网站为生,写代码无数,曾用jsp仿淘宝(04年,淘宝网还比较简单)做了一个二手货交易网站,被学校的勤工部作为校内交易平台。对面的面试官不屑的说,你连我问的问题都不知道,想必你写的代码也就是堆垃圾罢了。真想抽丫的一嘴巴。越是大公司,越是喜欢问这些问题,不问仿佛就显示不出他们的水平。那时自己不灵光,不知道抱抱佛脚突击下这类问题。 敏于行而讷于言,面试时多会吃亏, 这些年,一只吃这样的亏。如果是现在,我会回答,给我一分钟时间,我google下再告诉你。是的,google知道,但考察一个程序员,是否更应该考察一些不是能简单google出来的东西。能展示出来的那叫招式,内功深厚与否需要对接几招才知道,要过招,出招就必须和对方的套路一致。对方是下三路,你老出上三路,打半天也对不上一招。说到这里,个人觉得考察面试一个人,应尽量不要站在自己的角度,而要站在对方的角度,依据对方擅长的话题展开来,引导他们展示出他们最拿手的东西。圣人用人如木匠用木,取其所长,去其所短,不拘一格,而不是刻意念叨自己人为设定的那几个标准。如果让我面试,我更愿意考察对方的动手能力和解决问题的能力,用代码说话,这应该是程序员间交流的首选法则。
 
寝室里几个爱学习的室友都已经有实习机会在手,而我还在四处面试,大公司一个个错过了,小公司也没几个学好的,多是那一套,偶然一机会,碰到了一个让人耳目一新的面试官,他没有像其他人一样让你做题目,而是详细问起了我简历上写到的一些项目的具体细节,没有不屑,更像是和你在探讨,你是怎么实现的?碰到过什么问题?又是怎么解决的?如果现在再重新写,你会做那些改进?问答间还給提了不少意见。完了,直接说,你要也同意,明天就过来实习。我被吸引了,不是公司,而是面试官,因为我想跟他学习更多的东西,所以我没怎么想就答应了。第二天我来了,可是没过一星期,面试官离职了,看来我的希望又一次要落空了。面试官只大我一两岁,后来去了thoughtworks,现在在腾讯任产品经理,兼职敏捷开发讲师,他的情况是我从网上得知的,如今是新浪微博上加V名人,中文名钱安川,英文名叫Moxie,翻译过国内第一个webwork的教程。虽然彼此交集只是一次面试,但对我影响挺大。
 
实习时,没啥工作任务,就学习各类框架,那时诸如hibernate/spring/webwork等都刚出现不久,小公司接受使用新技术比较快,已经开始用上了。学习方式是自己找资料,做Demo。不用一上来就一头扎具体项目里去,想想实在是幸运。在学校,我用的都是最基础的东西,servlet、jsp、jdbc,不知道框架为何物(还是受限于缺乏网络)。所以没有接触框架前,自己多少做着搭框架的事情,接受了框架,也就很容易猜出来在底层它应该是怎么实现的。实习没有工资,一天7块午饭补贴。
 
毕业后,正式分到了一个项目组打了阵子零工,熟悉了下开发流程、团队协作、代码管理、调试测试等等,能照样画葫芦,也有很多的不知所以然,毕竟每个公司甚至每个项目经理都有很多自己封装好的东西。如此有两个月左右。再后来,我被抽到了一个新成立的项目组里,那时起,我迎来了最突飞猛进的成长,现在的很多编程习惯及能力都是那时养成的。项目经理叫沈超奇,80年,人一点不超奇,很低调,建筑专业毕业,半道入行,自学成才。当时新成立的项目是搭一个框架,以作为后续十几个子项目的基础。初期就三个人,项目经理、我、还有一个和我一起进来的应届生潘同学,开发地点定在酒店里,封闭式,吃喝拉撒全在酒店里,完了就是写代码。三个人是朝夕相处,工作、讨论、学习,日子过的叫人难忘。项目经理负责设计写核心模块代码,我负责普通后台,潘同学做界面,用的技术全是时下最新的,ajax那时概念都刚提出来,我们已经在用了。也正是那个时候,我们见识到了项目经理的能力和精力是如何惊人,每天早上讨论布置好任务,晚上回顾当天完成情况,我们俩做不好的,项目经理自己通宵帮忙修改,进度丝毫不能落下。这对他是个大考验,因为他要取信于公司领导,取信于客户,要让他们相信,我们能行。潘同学一上来就叫项目经理老大老大叫的很热乎,而我开始都直接叫名字,但是随着彼此了解加深,我也心悦诚服的呼其老大了。因为做的是基础框架,很多东西要封装的足够精巧,这样才方便维护和开放接口,所以那阵子充分认识理解了什么叫抽象封装以及一些模式。项目经理起到了带头模范作用。老大说,要以写if else为耻,我们就使劲的使用多态抽象;老大说,类、函数、变量,命名要有意义,我们就坚决不再使用X1、X2这样的命名;老大说,代码要写可读性强,我们就一个Tab一个空格的开始排版、添加注释;老大还说了,我们工作三个月学的胜过别人一年,我们就再怎么累也不觉得了。那时1600一个月,三个月另奖励了一月工资,而我一分钱都没机会花掉,因为没空出去。
 
那年过完年,潘同学为了另外一份三千一月的工作走了,临走还非要拉我去,说这边工资实在太低。我选择留了下来,不为别的,走了对老大不公平,花那么大心血培养了我们,都走了他又成光杆司令了,而我也还有很多东西要跟他学习。看的出来,我的选择老大也很感激。有了搭框架的经验,我们开始新的搭框架旅程,而这一次,规模更大,决心也更大。前后投入了近百万,抽调了全公司的精英力量,项目经历了三期,一期选择在了美丽的千岛湖畔封闭开发,而我的位置就靠近窗口,时值春天,每天码字声里湖光相伴,我又度过了充实而又无比惬意的一个半月时间。一期做了个Demo版本,二期开始边做边推广试用,几个点试用下来,积累了很多的改进意见,照此下去,一切都会慢慢完善起来。但管理层首先失去耐心了,一段时间内投入和产出差距太大,就开始削减投入,抽调走了大半人力去做来钱更快的项目,两年下来,人员走的走,抽的抽,又基本只剩下我和老大两人了。而此时,离完善似乎还是遥遥无期。老大过的不如意,而又婚期在即,杭州看了大半年买不起房和车,一急之下去了武汉老婆家那边买房工作去了。这下我成孤家寡人了。公司给我配备了新人继续做,而我也只能自顾自的修改升级,期间有次实施,连着一个人在客户现场奋战了好几个月,需求、二次开发、部署、测试、切换上线,一条龙服务,把这个拖了两年多的项目给收尾了。如此又坚持了一年,公司的技术总监是不停的换,就是没一个懂行的,老喜欢拉我去做别的,有一次我不干,直接闹翻,我的第一份工作历时4年,也就画上了句号。与其说是闹翻走了,不如说是累了,都是一个人在自学自玩,我又不想做管理,自然想到海阔天空,人挪挪容易活。四年工资从1600变到8000,多少也算是一种肯定。
 
整体来讲,第一份工作,收获有二。一,结识了一个能成为良师益友的项目经理,加速了我的学习进程,使我少走了很多歪路。虽然他一直期望我能步他的后尘,往管理方向转型,可我感觉自己更执着于追求技术上的完善,如此又过去了四年,我的想法还是没变,我的眼里只看得见代码,好看的代码。是否能成为管理者顺势而为,但是技术会是我一生的追求,哪怕以后我不当程序员回家种杨梅了,我也会坐在杨梅树下写我的代码。
 
二,在合适的时期做了合适的事情。四年来我一直在做框架,做产品,这使得我对代码质量的追求越来越高,我不用在众多项目中疲于奔命,而只需静下心来专心做一件事情。四年间,我掌握的技术非常具有完整性,一点不零散,整一系统;四年来写下的代码也成了代码遗产装进了个人的工具箱,成了个人的试验田,至今我还在不遗余力的完善它,在上面尝试新技术,新开发管理方式。同时我也依据后来工作中的经验,回过头来总结以前项目中一些不如人意的地方,比如过于追求功能的大而全,过于追求灵活性,最终在很多不是必要的功能实现上耗费了大量的资源,好钢没有用在刀刃上。
 
工作四年,我的全部家当就俩皮箱,一箱拉回了老家,一箱则在辞职后拉着上了北漂之路,到北京是在六月中旬,那叫一个热,去时一前同事在北京望京一带出差,我去了就直奔他那里先蹭几天酒店住,顺便能有足够时间去找房子租。望京的天灰蒙蒙的,望京的大马路是那么的宽,望京的公交站是那么的远,我一下来就有点感觉来错地方了。北京的夏天和南方截然不同,特别容易渴,一天喝水都要喝去二十块钱。头一个月,主要用在了玩和面试工作上了,背着个书包走遍了北京二环内的所有大街胡同。第二个月和同学在上地合租了间房子,开始上班。这次公司是亚信,面试题跟奥数题一样,我答的不错,工资也按我的要求开了,岗位叫BI,中文名叫商务智能,我就进去了。说真的,我每次找工作都不太好找,这次在北京也是,面试了七八家,响应寥寥,还是因为自己不善于说且不重视复习理论,还有这世界伯乐太少。进亚信一周不到,我就后悔了,这叫劳什子BI哟,这不就是变着花样展示各种报表数据嘛,工期还很紧,三天两头加班,也不管是不是你的任务,你做完了就做别人没做完的,反正永远都有事情做。再加上北京的地铁公交那个挤,各种不爽,一起涌来。百日不到,我就打了退堂鼓南下回杭了。
 
北漂前,想的是行万里路;北漂三月,有苦有累也有收获;北漂后,想明白了自己想要的生活状态。在一条路上走久走远了,偶尔停下来,稍作整顿,或调整下方向,我想这是此次北漂的全部意义。
 
回到杭州,已是国庆长假,回老家歇了几天后,重新开始了找工作,历时20天,这次面试了近10家公司,收到了8份工作,论工资水平,都兴趣不大。但是生活已经很窘迫,还寄居在同学家中。必须的马上工作了,最后面到了百世物流,第一映像不错,公司装修挺整洁,人看上去都挺和善真诚有朝气,面试官宣扬的物流新理念也挺新颖,唯独这工资开的是最低的。考虑再三,再次由着自己的感觉,决心先进去看看。一晃又快四年了。
 
在百世期间,没有了以往作为技术尖兵天马行空写代码的爽快,取而代之的是如履薄冰似的沉稳。这源于项目性质的转换,以前做的是开创性的工作,现在换成守成式的维护加升级。以前是攻,现在是守。我所参与的WMS系统客户日渐增多, 业务流量越来越大,稍有闪失都有可能导致现场作业缓慢、客户大量投诉等不良影响,由不得半点马虎,只能是慎之又慎。开始做了部分重点模块的代码重构工作,代码看了一遍又一遍,迟迟不敢下手,也正是从那时起,开始特别重视写单元测试,代码不动,测试先行;测试就位,代码再跟上。如此有效保证了代码的健壮性。个人自以为,重视并习惯写单元测试是我来百世技术上的最大收获,从此开辟了写高质量代码的新篇章。以后的工作里,我对自己提交的代码拥有了绝对的信心。
 
也许正因为我的谨小慎微,不幸被摊上了另外一项工作,维护WMS生产环境数据库,处理日常的补丁脚本,优化性能,消除各种可能的性能隐患,导业务数据。面对数据库,需要的是比维护代码加倍的细心,代码还有单元测试、人工测试等环节去发现纠正问题,而数据一旦弄错了就极有可能万劫不复。相比写代码,这样的工作稍显乏味。真正的勇士,要敢于直面人生的惨淡。我曾经日复一日的调试某大型报表,几月有余,从中参悟如何写出高效的SQL。也曾不断思索,在数据爆炸性增长的过程中,如何让SQL能始终保持高效。还曾蚂蚁搬家似的一点点迁移归档数据。如今,在大数据概念流行的当下,相信这样的经验会有一天能排上用场。
 
在做好本职工作的同时,这几年里也没忘了写些个人的代码,工作加业余,就像两条腿走路,一个也不能落下。前年幸运的接触到了google code的代码托管功能,极大方便了我维护自己的代码,无论何时何地用什么电脑,只要有网络,我总能方便的检入检出我的代码。去年我又迷上了更便捷快速的github,使用至今。今年我开始努力向界面开发领域进军,力争年内解决掉自己的最后一块短板。我就想做个全能的,可以不用依赖任何人,一个人完成一切自己想要的功能。在讲究团队协作的现在,这有点反其道而行。我自做网站开始,也许我终将以做网站结束。内心深处,我还期盼着做个自由职业者。我不想成为哪个领域的专家,只想写我自己喜欢的代码。
 
生活中,我是一个保守+实用+简单主义者,我的生活追求简单而规律,早起用毛笔默写道德经或古诗古文半个小时,打会篮球,上班下班,哄娃玩,看会书,写点代码,完了睡觉。如果某个阶段自己脱离了生活轨迹,浪费了时间而无所事成,自己会非常厌恶自己。所以对时间,我是个极度吝惜者。我不会修电脑,也懒得去学,老婆常骂我,我不以为然,花那时间我觉得划不来,非得自己动手修了,我google下十有八九能找到别人手把手教授的视频。我只吸收那些能融入到我潜意识里去的东西,成为自己的本能,不会随着时间的流逝而忘却,比如游泳,比如写作的能力而非记住多少美文,比如审美的能力而不是记住美的具体特征。我生活里小心翼翼,杜绝一切意外发生的可能,极少冒险。但我又很相信自己的直觉,认准的事便不再犹豫,出手果断。我的房间、衣柜、书架、桌面、文件夹,总是整理的井井有条,自身却经常胡子邋遢,衣衫褴褛。
 
思索程序和人生,我更倾向把它们看成是一整体,写程序的很多习惯都可以在生活的细节中找到缩影,而有些习惯又反过来影响着我生活的方式。也许正应了那句话,一切上升了都归于哲学。程序的哲学亦是人生的哲学,反之亦然,可不是吗?
 
 

猜你喜欢

转载自infinite.iteye.com/blog/1896379