《疯狂的程序员》读书笔记
1、最后到头来整本书学完了也就一锅粥糊里糊涂知道里面有些啥东西而已。这章确实把他弄的很头痛,以至于很长一段时间,问他在干啥,都说:“在研究寻址方式。”他不爱用“学习”这个词,爱用“研究”。因为很多东西他觉得他都是自己在学,没人教他,自己学,就叫“研究”。绝影想认真研究,不能搞成一锅粥,他想:先放一放吧。这一放就放了一学期。
2、有一天,他在一期《黑客防线》上看到一句话,就现在来看,这句话改变了他的一生。
上面是这样写的:程序员是值得尊敬的,程序员的双手是魔术师的双手。他们把枯燥无味的代码变成了丰富多彩的软件……绝影忽然感觉很震撼。
他还是想做程序员。为什么?不是因为这个职业是天底下最伟大的职业。你想,当你爱好着某件事情并且去做的时候,你心里当然会非常舒坦。但如果这事情是你的工作,你不得不面对BOSS的面孔,不得不在规定时间内完把它完成,又不得不用做这件事来换取你明天吃早饭的钱,打车的钱,喝咖啡的钱的时候,你当然会感觉很累。所以有时候兴趣固然重要,兴趣能给你动力去做一件事,但最重要的却是热情,热情能给你动力去一直做这一件事。
在中国,人多少都要受十几年的教育,最后归根结底,十几年的教育也许就教会了你那么一两句话。对绝影来说,有三句话:一、把自己的东西分一半给小朋友。这是幼儿园老师告诉他的;二、实事求是。这是高中哲学老师告诉他的;三、程序员是值得尊敬的,程序员的双手是魔术师的双手。他们把枯燥无味的代码变成了丰富多彩的软件。这是《黑客防线》上写的。
3、又是寻址方式
他赶紧翻到寻址那章。原来如此!寻址方式原来就是寻找数据的方法。比如要除法,被除数在哪里,除数在哪里,商放哪里,余数放哪里,要么在寄存器要么在内存。就这么简单个道理,不如就叫“数据寻找方法”那让人一看就明白,多直观。非要叫个大家都不熟悉的“寻址”。就算叫“寻址”,也完全可以在旁边加以解释,或者写上句:“XXXX寻址方式类似于C语言中的数组。”在C语言指针那一节中加上句:“指针实际反映了CPU的XXXX寻址方式。”
可中国的教材就是这样,好像搞汇编的人和搞C语言的人有仇,大家各自为政,我专门出书讲汇编,可不能便宜了那些搞C语言的,更不能在书里给他们打免费广告。最后的结果就是:寻址是汇编中最难的,指针是C语言中最难的;学汇编不懂寻址,学C语言不懂指针。害的是真正来学习的人。明白了这个道理,绝影觉得寻址那些东西就不过尔尔,什么寄存器寻址,就当寄存器是个指针,里面放地址;什么基址变址,就相当于数组,放个首地址,加几就相当于访问后面几个字节。
绝影自己心中有套理论,他没有跟土匪他们说,因为以他们现在的智商,他们无法理解。你知道程序是啥玩艺吗?程序是给谁用的?他们肯定说:“程序当然是给人用的咯,用来解决问题嘛!”其实程序真正是拿给计算机用的。你写程序给计算机看,就得照他的想法去写,多跟它交流。计算机这东西,说它怎么怎么好,运算速度快,但毕竟它不像人那样有智商,说起来就是白痴,你跟它交流久了,也慢慢变得像白痴。
4、程序员泡妞的技术其实和写程序差不多。比如你拿到一个题目上手就去写,那多半要糟糕。也许就在还有几行代码就要完了的时候你忽然发现写不动了,这样写根本写得不到结果;或者你忽然发现走了冤枉路,用这个方法写了二三百行代码,但是C标准库里本来就已经给你提供了这个函数,直接调用就完事。所以泡妞和写程序一样,要有计划,有设计,甚至要去写文档,画流程图。当然随着你自己的水平不一样,泡妞的技术也不一样,刚才那种方法是程序员的方法,如果你是BOSS了,你就可以直接端杯咖啡过去说:“小姐,可以请你喝一杯吗?”然后随便侃几句就要她的电话,一定要会讲话,多讲话,记住美女永远喜欢开朗的人这正如她们比起QQ游戏的代码来说更喜欢QQ游戏本身。
两年多下来,这种写程序的思想已经深深地印在绝影脑中,所以虽然当他第一眼看到这个女孩的时候他就觉得去追她,但是他不急,先计划。
所以程序员不管是做程序还是做事,都应该有这种习惯:一个问题要尽量在做之前就把所有的结果想出来,分别对每种结果进行分析,找到较好的应对措施再去做。这样,整个问题都尽量在你的控制中,不至于做出“Out of control”的事情。一件事,如果你决定去做,就要尽力让它在你的控制中。
5、有了女朋友,日子自然开始滋润起来,绝影更加用功去学习黑客技术。他深深地懂得一个道理:天下几乎所有的男人都会有自己的老婆,但不是所有的男人都能拥有自己的事业。要有事业,一定要花比找老婆更多的时间和心血。
6、所以到这里他果断作出一个决定:不再研究黑客。人的精力是有限的,与其这样去多方面横向发展,不如找一两样自己擅长又喜欢的科目往纵深发展。这两种发展方式都是很有前途的。
他决定把汇编作为自己的发展目标,理由有三:
一、自己有很好的汇编基础,至少在这所学校里,他是最好的。说Bill.Gates很成功,为啥?别人不知道他知道,Bill.Gates的Basic语言相当好,他自己说过:“在Basic上,我敢于挑战任何人,也敢于接受任何人的挑战。”所以绝影经常跟土匪他们说:“在汇编上,我敢于挑战任何人,也敢于接受任何人的挑战。”
二、这学期他学了单片机原理,他深刻地体会到汇编的好处:比如大家都去开发一款新出来的芯片,用C语言的人要先找到C编译器,往往花几百美元买一个,当然也有可能会有gcc移植过来的,但那要等这芯片已经多出好几年了才有好心人做这样的事情,然后还要去买资料,不然你从哪里去查找这款芯片的C语言编译器提供的库函数?用汇编就不一样,一本包含指令集的开发手册,一个汇编器就完事。开发手册和汇编器是每个芯片厂商都免费提供的,他要不提供这些,就没人能给他开发程序,他的芯片就卖不出去。
三、通过对黑客技术的学习,他很羡慕那些能搞软件破解的人,不是“破解”,是“逆向工程”,如果有机会,他当然也想去搞这个。对大多数人来说,知道别人在想什么是很有意思的;同样地,对于大多数程序员来说,知道别人程序在想什么也是很有意思的。他知道,要想搞“逆向工程”就必须学习汇编。
7、现在网络上不是流行《双截棍.程序员版》吗?里面有句话:一个写得好的库函数,一用好多年,拷贝好带身边。这本书,在以后几年里,绝影确实一用好多年,随时带身边。
8、别以为他在学校汇编很牛B,随便一上网才发现高手多的是,人家写的文章他看都看不懂,于是疯狂加群,加汇编群,加C语言群。
9、说“鱼和熊掌不能兼得”就是说你想要老婆对你好,对你百依百顺,你就要花时间在老婆身上,要陪她逛街,陪她散步,陪她去买菜。所以像绝影这样天天把所有时间花在电脑上的,要指望老婆对你好,只有一跳路:你有很多钱,并且都给她。但是他没钱,所以燕儿肯定要跟他谈判。
最后绝影对燕儿说:“好吧好吧,以后每天晚上我尽量跟你一起睡觉。”他把“尽量”这两个字说得特别重,那样能让人感觉他是下了很大的决心而且只能是“尽量”,不能保存100%,由此可见要他陪着一起睡觉对他来说是下了很大的决心,对她来说是很大的荣幸。
到这一步,别以为绝影就没办法了。所以说女人有时候很笨,比如老公有外遇,别以为你控制了他的手机控制了他的经济就万无一失,其实他办法多的很。没手机,就在办公室打;工资被没收,就偷偷藏奖金,或者只缴2/3,说剩下的因为迟到给罚款了。其实有时候女人越是看得紧反而越不好。他以前从来不偷偷在办公室打电话不偷偷藏奖金,都是让你给逼出来的。
绝影当然每天晚上都“尽量”跟燕儿一起睡觉。他在床上翻来覆去不睡着,不是睡不着,是不睡着。等到燕儿睡着了,就偷偷溜下床,灯也不开,继续坐电脑面前。
这时候他想起大一在寝室熄了灯坐电脑面前练盲打“abcdefg……”,那时候果然没白练要不现在怎能应付不点灯的情况。
这样的日子过了好几个月,也一直相安无事。绝影继续研究32位汇编语言,在这几个月中,他还是出了两个成果:一、用汇编做了个计高档算器,所谓高档,就是至少能计算1024位的大数;二、在网上搜索到一个叫KmdKit的包,可以用汇编来开发内核模式驱动程序,他很想学下写驱动,于是把KmdKit帮助文档全部下载下来,可惜全是英文,于是他开始尝试把它翻译成中文。本来他想让燕儿帮他翻译,毕竟燕儿是英语专业的,奈何专业英语对她来说还是太难,老是把“driver”翻译成“司机”把“register”翻译成“注册人”,还不如他自己翻译。这样折腾了半个于,总算翻译完了,水平确实不敢恭维,也就是鲁迅先生说的“硬译”。正得意的时候忽然发现罗云彬他们几个也已经翻译完都挂主页上了。两个一对比,绝影还是觉得自己翻译还是可以了,以后他经常跟别人说:“KmdKit那个文档,我以前也翻译过,不比罗云彬他们的差。”
10、绝影说:“ASP我不会,什么ASP啊,Java啊,做网页之类的这些我都不会,一点都不会。所以以后有这样的消息就不用去关注了。”
几次过后,燕儿跟绝影生气了。她问:“学ASP难吗?”
绝影说:“不难,很简单,两个月就好了。那玩艺很高层的。”
“那你为什么不学呢?你天天坐在电脑面前写程序,学了这么久了也写了这么久了。可是你写的程序有什么用呢?有人买吗?还不如去学ASP呢。”
那时候的确是这样,很多公司刚开始有了网络的意识,开始做公司网页,论坛啊,社区啊应运而生,整个IT届确实很需要做ASP,做Java的程序员。但是绝影不会盲目跟风,他觉得走汇编这条道理也是经过深思熟虑了的。他跟燕儿说:“我学的汇编,这是很地层和基础性的东西,是学的很慢,但高层的东西老是会变,比如ASP,一下升级到ASP.NET好多东西就又要学。汇编就不一样了,基础性的东西,除非微软把操作系统都全换了,把API全换了,否则永远都不用怎么变的。”
11、燕儿听不懂这些,她反而更讨厌他,她觉得她这是在为自己找借口。
绝影深信自己是对的,他相信有一天他会很快乐的用汇编工作,并且他的工作能带给他不菲的收入。但是他不能给燕儿说,人有时候就是这样明明知道事情肯定是这样,但是不能跟别人说,成果出来了你跟别人说,那是你的成功,成果没出来你就跟别人说,那是你狂想,反而被别人笑话。
12、早就梦想着,有一天,一个BOSS级的人问他:“你会些什么?”
他从容不迫地答到:“语言主要是汇编、C、C++、VFP,32位汇编是强项,另外对密码学加密算法,驱动开发和逆向工程有一定的研究。”
其实密码学加密算法和逆向工程这两样是拿来忽悠人的,要问他知不知道?当然知道,不仅是他知道,就是稍微看过点书,上过看雪论坛的人都知道。要问他懂不懂?懂个屁!不过说实话除非是研究院级别和杀毒软件公司,还有几家公司能搞加密解密和逆向工程?有几家公司敢搞加密解密和逆向工程?
13、“那你有什么实际项目经验没有?”
这个问题也正中他下怀,他感觉这一切就像电视台记者采访人一样。记者采访人之前,先跟他说:“一会我会问你这个这个问题,你要这样这样答……,来我们先演练一遍……”
于是他胸有成竹地说:“当然有,大一时我用VFP开发了Windows下的通讯录,大二和小组用16位汇编开发了计算机串口通信软件,大三用32位汇编语言独立开发了一个高档计算器,至少能完成1024位大数运算。”
“那你会用C++ Builder吗?”
这下绝影惊出一身冷汉,C++ Builder?网上看过介绍,不过是英文版的,他英文本来就菜,你想仅仅完成KmdKit帮助的“硬译”工作他就逢人变吹嘘自己英语好,他的英语水平能好到哪去?用他自己的话来说,他说得最好的一句英语就是:“My English is very proo.”
正因为是英文版的,他看了一眼就丢了,用他自己的话来说:“学这东西,我光花在学英语上的时间都够我大学念到毕业了。他本来想跟那人说没用过,没想到一开口却说:“用过,但不是很熟。”
“这样阿?我们这个CASE要求是用C++ Builder来开发。”
听那口气,绝影想要不补救怕要失去这次机会,赶紧补充:“我VC++用的很好,C++ Builder嘛,我觉得解释执行的东西不太好,效率太低,所以不经常用。”
14、东西交给老杨,老杨说:“这也太另类了。”
绝影问:“不行吗?”
“倒不是不行,就是太另类了,反正我们是应用,又不是考算法,这办法很好。”
所以写程序有时候就是很有意思。比如你搞数学的,一就是一二就是二绝不可能出来三,但程序就不一样,方法自由,很多时候解决一个问题的方法直接反应出这个程序员的性格和思想。
老杨收好绝影的代码说:“下次来你就正式开工了,你回去可以先研究一下,这就是下面那机器的图,你要做个VCL组件,把这个机器的图放在窗体上像下面的机器一样可以左右运动,运动的速度和最大距离可以调整,把属性都给Publish出来。”
绝影想这玩艺还不容易,还用花那么多时间,拿回去我一天就给搞出来。
15、绝影恭恭敬敬收好书,老杨说:“今天你帮我把几个函数做完,函数的原型我都写好了,功能很简单,主要就是一些字符串处理,要求写在注释中,你看看就明白了,不明白的来问我。”
16、想虽然这样想,不过看起来周总还是一脸真诚,绝影还是很客气地对他说:“VC++接触过,但是用得不多,不过我学起来很快的。学校里面一边都是用TurboC或者TurboC++,这两样用得比较多。”
“行,那数据结构算法怎么样呢?”
“这个我们在学校学过了,我还行。关键是我对驱动开发啊、逆向工程啊、数字图像处理啊这些有些研究,我觉得这才是我的强项。”
“OK,你可以现场用VC++做两道题让我看看吗?用VC++有问题吗?”
“当然没问题。”绝影这样说的时候心里有点虚。VC++这个微软出的东西很有名气,绝影自然有所接触,但他还真没用VC++像模像样地做出过东西。你想天天用32位汇编根本没啥好的IDE,大部分都是用ml、link在汇编链接,搞成了习惯,最后明明放着好好的VC++的IDE不用偏偏要用cl去编译C/C++程序。要换成IDE了,反而还不会用了。
周总让小李给绝影安排了一台电脑,他觉得这台电脑好破,起码连机箱的盖子都少了一边,穷得都没钱穿衣服了当然是很破的电脑。小李帮他打开面试题的文件夹,题目有两道:一道指针的填空题,第二道很变态:限时1分钟用冒泡排序法排序10个数字。
指针的填空到是很简单,反正你记住几个原则:一、处始化;二、注意空指针和野指针。基本上学校考试题啊,面试题啊的考点就这些。不过绝影还是花了一些时间,首先是来熟悉VC++的环境,怎样建立New Project,编译在哪,链接在哪,点什么才能运行。他又不会用VC++来调试,那时候他用32位汇编对他来说基本上就是没办法调试,最多用个MessageBox输出结果来看看,要输出数据还得用wsprintf格式化一下,而且格式字串又没办法弄成局部变量,所以那样的开发实际上和瞎猫逮老鼠没啥区别,你就得不停地希望这次遇到的老鼠是只死老鼠。
排序可难倒了绝影,不过限时基本没用,做完了指针的题花半小时来检查,其实就在心中想排序的事情。以前数据结构和算法肯定是学过冒泡排序的,奈何那时候什么冒泡排序法,快速排序法,插入排序法,希尔排序法确实学得太多,名字都记不住。他也搞不清楚到底哪个该怎样排,鳖了半个小时干脆自己写了个排序法,好歹还是把结果给排了出来。
交给周总,绝影心里惴惴不安。他运行了一下指针的程序,没问题。看看排序结果,也没问题,便说:“嗯。排序我不具体看了,反正是两个For循环嵌套,应该没问题。做还是做出来了,可以先到公司来实习。”
17、先看MFC,MFC这个东西绝影倒是知道,其实只能算是了解,不就是Microsoft Foundation Classes――微软基础类库么。具体是什么他不知道,总之一个东西你只要知道他的全称是什么至少能给别人留下非常专业的印象,你问小周:“你知道MFC全称是什么吗?”他还不一定答得上来。
18、很多时候程序员中的前辈讲一个人学写程序有没有前途,总说:“学程序,不光要能吃苦能用功,还得看有没有‘sence’,没sence的人就是再怎么学再怎么给他讲效果都不好。”
本来绝影挺相信这话,毕竟是前辈说的,他总想自己应该算有sence的吧,至少很多人都还是夸他智商高聪明。要换成另外一个人听了这样的夸奖肯定高兴得不得了。但绝影不这样,别人越夸他聪明他越反感。
初中的时候有一个星期五班长对大家说:“明天是星期六大家去放松一下我组织大家一起去看场电影吧。”绝影没去,他回家一个人背政治,就在家里踱步从客厅这头踱到那头一边踱一边背政治。星期一政治考试他考了94分全班最高分。于是同学们开始夸奖他:“哟,真是太聪明了,看几遍就能背了,就能考94分,智商高就是不一样。”
绝影觉得他们那样说简直是对自己的侮辱。凭良心说我背书的时候你们干啥去了?看电影去了。我考到94分你们就说我智商高聪明来为自己没考好找借口,同时把我的刻苦用功给我全部抹杀掉。
其实“sence”这个东西也是这样。
有时候想学个东西比如KmdKit开发驱动程序吧,学了好几天都没啥进展,头脑里全是调用API,想凭着经验去套用驱动程序,结果帮助文档是看完了可自己头脑里还是一点印象都有甚至连Kernel Mode Driver是啥东西都还不清楚。
又说用VC++,MFC,本来知道这东西是有用以后工作阿开发的肯定要用,还是去看了一两天,觉得还是没一点头绪,想算了还是放弃了也许自己真的是没有“sence”。
所以“sence”就像跟你捉迷藏,开始你以为肯定找不到他了或者他根本就没在你这里,等到你急着要用的时候它突然又不知道从哪里一下蹦了出来,让你突然欣喜若狂。
绝影也是这样,没想到这几天突然“sence”出来,他看MFC如有神助两三天时间居然看出点门道。不过这东西还真不是一般人能看的,比如土匪,这学期都学了C++了,你跟他说“微软基础类库”他还是照样理解成“微软基础内裤”。这样理解也就算了,可他还一脸虔诚地问绝影:“你说微软没事了搞内裤做啥阿?他们不是搞软件开发的么?”
19、这次周总的语气显得有些焦急,绝影预料都有什么重要的事情发生。他说:“小绝啊,那个KIPACS的BUG你现在能不能抽点时间加紧修一修。明天我们就要去为一家医院安装,时间很紧啊。”
周总说的KIPACS是公司一个软件产品,以前一直是小周在做,虽然名字叫PACS,后来绝影才发现,这个软件产品其实还算不上真正意义上的PACS。小周一直拿它当宝贝似的,还记得前不久刚刚把视频卡模块加进去的时候他一个人在那兴奋得不得了,还让公司好几个员工都来拍张照片留念。绝影也拍了一张,比摄像头效果好得多,因为视频采集卡是9bits的。
“本来以为没什么问题了,今天下午我在公司测试了一下,发现还有好几个BUG,现在再去把小周找来肯定是来不急了,你先看一看,我把源代码和BUG列表已经Email给你了。”
绝影觉得这事情来得太突然,自己在公司现在最大的成就莫过于用MFC做了一个注册表读写的Demo,现在突然要他来修改一个商业化产品的BUG他实在没什么底气。他说:“KIPACS代码我看过,但从来没往里面写过代码,不知道行不行。”
“你就试试吧,能改多少改多少。”
“好的,我去看一下,改完了我给你电话。”
显然周总也处于十分被动的局面,明天就要给别人医院安装,现在都已经是下午六点,公司原来负责这个CASE的程序员又不在,他也只好死马当活马医了。
事情来得紧急,绝影也顾不得吃饭,他给燕儿打了个电话,说:“晚上公司有事,要写点程序,我刚跑了1000米,及格了,反正现在也吃不下饭,你先一个人去吃饭吧。”
周总的邮件里面列了5条KIPACS的BUG,绝影看了一下问题都不大,他这才第一次认认真真地看KIPACS的代码。虽然老早之前小周就把KIPACS的代码发给他,当时也就是让他看看,没啥其他要求,所以他也没压力,看了几眼觉得代码又复杂,结构混乱,各个cpp文件中都随处定义的全局变量,没用匈牙利命名法,注释也很不完整,才看了几眼就感觉头都大了,所以他也没怎么认真去看。
这次不一样,你要真刀真枪去修改BUG,于是从APP类开始,顺着程序流程往下看。以前绝影的思想中基本没有“类”这个概念,所以看MFC的工程就看得累,一个一个cpp地文件去寻找实现这个功能的函数在哪里。后来周总交他一个法子:别去看那文件列表,直接把类视图展开,从APP开始,从类成员函数中去寻找,特别注意那些OnXXX函数,一般就是处理消息的。
时间一点一点过去,绝影修完一个BUG就在那BUG列表文档相关的项目上打个钩,修改一会又去看看那个文档,刚才打的钩还在,打钩的越来越多,没钩的越来越少,看一看觉得还是很有成就感,又埋头继续看代码,有时候一边看一边骂,骂谁?骂小周。代码得这么混乱,根本没想过给后人留点方便。所以要是以后自己写代码,就一定好好写,写规范,写好注释,免得别人骂我。
不知不觉就到了11点,绝影在骂人和成就感交替的心情中终于把所有BUG都修改完。他仔细地在BUG列表的文档中每条BUG后面打上括号,写上“已修正,X年X月X日,绝影”,然后把KIPACS工程打开,从头到尾把自己修改过的代码旁边打上注释:changed by Hamber, yyyy-mm-dd。
20、每次加班了燕儿就说他笨,说人家加班都有钱拿的,国家规定每天上班不得超过多少多少小时。这时候绝影就把他这套理论讲给燕儿听,讲来讲去燕儿还是不明白,每次仍旧说他笨。
像绝影这样的好员工周总自然也十分喜欢,用他的理论就是绝影这样的人写程序是很有“Sense”的,说不会VC++,不会MFC,结果一学就会,说没看过代码不会写程序,结果一看就会,一改就成功,特别是那次让他修KIPACS的BUG解了燃眉之急,所以没过多久,他又故伎重演,他对绝影说:“小绝阿,明天你恐怕要把学校的事情放一放跟我一起去出趟差。”
对于“Sense”这个概念当然是老总的看法,你要是真听进去了,飘飘然觉得自己真的在写程序上有“Sense”那你就完了。你以为自己有“Sense”比别人聪明比别人学得快,于是你就放慢了学习的脚步。本来回家还要看三个小时的代码结果你去打了三个小时游戏,第二天去了公司当然就什么也不知道。这就是看三个小时代码和打三个小时游戏的区别,也是有没有“Sense”的区别。看了,你就有,没看,你就没有。
20、 “也不怕给你说,说了你也不懂,我在KIREGIS里面用了多现成技术!前台那个登记的地方不断往数据库写数据,X光这边由要实时同步,那就必须过几秒钟刷新一次数据,前两天用的单线程,数据一多就把界面刷死,现在可好了,管他有多少数据,就在后台慢慢收,比如你BOSS Jue一个劲地在那写代码,我这在这里一边写代码一边聊QQ,两边都不误。”
绝影听他这么一说大吃一惊,想BOSS Liu的技术现在是不容小觑,说多线程自己早就听说过,理论上也会做,但一直没有机会应用到实践中,所以都是纸上谈兵,没想到BOSS Liu居然能活学活用,起码这一次他算输给BOSS Liu了,要是他那时候就知道触发器这东西,肯定能够在他面前成功体现出自己的水平――毕竟,就算用多线程做,那也是“程序查询”方式,比起“中断方式”来说起码落后了十年。仔细再回想一下罗云彬书上的多线程那章,总算想起点什么,于是对BOSS Liu说:“多线程这东西,搞得不好还是不要搞。那线程同步你做了吗?”
BOSS Liu仔细回想了一下,线程同步,好像听说过,不过到底是什么还不知道。但是总不能面子上过不去,于是打着哈哈说:“用啥同步?这个CASE这么小,把高档东西全部用上去还缺乏稳定性呢!我这个昨天晚上开着机跑了两个小说,万无一失。”
21、绝影说是小事,回到公司又看了半天都还是没搞明白,问题就出在调窗上,这个调窗原理说简单点其实就是把图像的一些属性调整一下然后重新绘制到DC上,小幅度地调整都没有问题,就是大幅度长时间调整最后显示图像的部分都会黑掉。先他以为是对WM_PAINT消息的处理有问题,这个就比较麻烦,系统经常要发送WM_PAINT这个消息,在里面下个断点或者加个MessageBox就一直要不停地弹出。搞了半天还是找不出个所以然。你想要是真是对这个消息处理出现了问题,那应该一早调窗就有问题才对。
调试了几次,绝影发现系统变得越来越慢,打开任务管理器,乖乖,KIPACS居然占用了300多M内存。要知道KIPACS刚启动时不过只占用了17M内存。看样子像是内存泄漏。这样想,他继续调窗,调一下发现内存涨上去可又没降下来,果然是调窗的时候发生了内存泄漏。
知道了原因解决起来就要快得多,原来是GetDC获取DC后没有使用ReleaseDC把它释放,这部分在WM_PAINT消息中,WM_PAINT消息又频繁发送,所以那内存泄漏起来真是要命得很。
加上ReleaseDC,KIPACS终于可以流畅地调窗,看看任务管理器,内存占用基本稳定在20M。
搞完这个BUG,绝影看看时间,已经是晚上9点多,公司的人早不知道什么时候都走光了。这次的事情还是给绝影留下了深刻的教训以至于在很常一段时间,别人问他:“影头,你看看我这程序,怎么老是出问题阿?”他都会跟别人说:“先看看是不是有内存泄漏。”
问题解决了,等到第二天周总来到公司,绝影便轻描淡写地对周总说:“昨天那个KIPACS需要重启的问题我已经解决了,是个小问题,内存泄漏。”
22、周总对绝影反映的问题还是比较关心,他说:“内存泄漏这个问题是广泛存在的阿,这种问题又最不好调试。我给你介绍个软件吧,BoundsCheck,专门测试内存泄漏。”
在以前,绝影绝对不会去关心别人介绍的什么软件,首先那软件是别人介绍的,自己又不熟悉,软件好不好阿,怎么用阿都要自己去摸索,特别是这个BoundsCheck一听就知道是个英文版的软件,还要拿金山词霸去翻译菜单或者网上到处去找汉化版,本来以为用这个软件能极大地提高劳动生产率,结果反而花在学习上的时间都远远超过了它提高的劳动生产率,这叫“磨刀误了砍柴工”。
可这次绝影还是比较慎重,昨天虽然把问题解决了但实在把自己搞得太痛苦,也幸亏昨天开了任务管理器发现了问题,要不说不定把代码跟踪到太平洋还不知道问题在哪里。
去网上下个BoundsCheck6 for VC,原来是大名鼎鼎的Numega公司出的,想能出SoftICE这样的软件的公司出的东西还能有假吗?就比如今天微软宣布出了一个新的操作系统,那还不成为各大网站的头条新闻。所以不仅是衣服,就是软件也有个品牌效应。
那天在公司又调研了一整天,绝影第一次知道了“纯化测试”这个词。以后每次周总说:“OK,明天我们进行Purification。”绝影就跟大家翻译道:“好,明天我们进行纯化测试,没装BoundsCheck的把BoundsCheck装上,不会用的找我。”
23、他说调窗的时候内存泄漏,差点把他害死,那天晚上他加班加到晚上九点,饭也没吃,好歹给搞了出来,周总都还不知道。要是换成BOSS Liu,还不一定能做出来,这项目多半就给挂了。
他说那数据库备份,本来当初就应该做,周总硬是说不做。现在想来还是周总老谋深算。要是真给他们做了,今天他们也不会打电话过来孙子一样求公司。想起自己在大学的时候,老师说他们以前给别人公司搞电话交换机,搞好了把钱收了里面留个后门,保修期一到马上拨过电话过去,那交换机就不工作了,别人公司急得不行让他们去修。修,当然行,过了保修期,得付钱。周总他们虽然还没有这么恶毒,但终归可以在维护这方面卡他医院一下。他们态度好,就送一点,他们态度不好,就紧一点,反正我已经收了,你吃屎的还得听咱拉屎的话。
正当绝影、BOSS Liu、张厂长三人悠载悠载地过着小日子的时候,有一天,周总把绝影叫到办公室,严肃地说:“小绝啊,我很少批评你,可这次你犯了个严重的错误!”
听周总这么说,绝影吓了一跳,不光他吓了一跳,BOSS Liu和张厂长也吓了一跳。周总毫不留情地说:“你看看你写的代码,这个备份工具里面,你居然一次性把SQL数据库里的数据全部读出来放到内存,再写到Access数据库中,为什么要这样,为什么不读一条写一条?”
一听不是清算作风的事情,绝影又带着庆幸地送了一口气,就像当初打开门,原来公安局是来了解杀人焚尸的事情,跟非法同居完全不沾边,自己一下从犯罪嫌疑人变成证人,其中的成就感不言而喻。
再说周总问的这个问题绝影也早就想到过,于是胸有成竹地说:“这个问题我当初也想到了,考虑到读一条写一条可能太浪费时间,还不如一次性读到内存中,那样肯定要快得多。”
听绝影这么说,周总慢条斯理地说:“小绝啊,这就是你经验不足了。你在公司里测试有多少数据?就一百多条,一百多条数据能测出什么?要是数据有几万十几万呢?你全部读到内存中,内存根本不够,操作系统只好频繁地使用交换文件,这样速度不但不会提高,反而会慢很多,你自己看看,你系统每次用久了后是不是慢得很?那就是因为用的时间长了,内存占用多了,系统使用交换文件,最后慢得不得了。”
绝影一边听周总说,一边注意他的表情,仿佛还带了点洋洋得意的神色。虽然传说中周总写程序还是很牛B的,但绝影从来没见过他写的代码,对这个传说还是持了点保留意见。没想到这次分析问题周总还是讲得头头是道,这个问题,没点经验的人还真发现不了。于是他唯唯诺诺地说:“有道理有道理。是我没考虑周到。”
“既然这样,那就赶紧改吧,别等问题暴露出来才来忙,我们要防患于未然。你赶紧改,我在旁边看着,改好了重新送过去。”
周总说完,泡了杯茶,端了根板凳坐在绝影旁边。
绝影突然觉得不自在起来。大家在公司各忙各的,就算实在没事可做也要装出很忙:打开一个Workspace,选中一个内容比较丰富的cpp文件不断把滚动条拖来拖去,特别是周总出来,就故意用手托住脑袋,做出痛苦的冥思苦想状。在这种状况下,绝影能够很容易“偷偷地”把程序写出来。现在周总坐到旁边看着他,他反而不知道程序该怎么写了。
所以有时候写程序就像放屁。放屁这个事情毕竟是件不雅的事,所以大部分人还是要偷偷地放。比如几十个人挤在公交车里,冷不丁谁偷偷放个屁,于是大家一边捂着鼻子一边互相指责:“你放的,你放的。”而真正放屁的人看到这情况,为掩人耳目,也充当起南郭先生,不断说:“谁放的?谁放的?”在这种情况下,屁很容易就放出来了。要是真正让你在大庭广众众目睽睽之下来放屁,怕就算你吃下两斤豌豆也放不出也不敢放出一个来,最要命的是肚子咕咕姑不断叫,就是不敢放。
最后绝影终于还是把程序憋了出来。周总满意地点点头,说:“这还差不多,这还差不多。”
23、听他这么说,陈董点点头,说:“既然让你去做,就要给你权利,我和周总商量了,先让你做技术主管,之后凡是新招聘进来的程序员,都由你负责,包括现在的小张,呆会我会把这个事情告诉他。”
听到这个决定,绝影心中异常兴奋,好几年之后,绝影和BOSS Liu混成了老油条,总有以前的小弟打电话来报告他们:“影哥,刘哥,我现在在公司升职了,做了XXXX。”他们总会马上问:“加薪了吗?”
“没加。”
“没加说个P啊。这个世界,薪水才是王道,那个什么什么职位公司多的是,只要老板高兴,今天给你一个明天给你一个,甚至随便一个跑销售的推销员,名片上都印的‘业务经理’。小伙子啊,你还高兴呢!太没经验了啊!”
不过当时毕竟还是绝影第一次升职,所以他还是像小弟一样高兴得不亦乐乎。出了办公室,他马上给燕儿打了个电话。
原以为燕儿也会为他高兴,没料到燕儿也只是很平静似乎不经意地问了句:“加薪了吗?”
一句话又说到绝影的硬伤,他只好支支吾吾地说:“薪水嘛,按理应该是在年底才加薪的。今年应该会加吧。”
24、其实DAP这个项目说起来难度也不大,那DcmImage也就是搞个CDCMIMAGE类,把DCMTK的函数封装一下从DLL中导出来。对绝影来说,也无非就是把惯用的DEF的EXPORTS换成__declspec(dllexport),唯一的难点就是这DCMTK,函数多,看起来复杂。如果是微软,财大气粗,就一个MSDN也至少得写出好几十G,什么目录、索引、搜索、书签功能一应俱全,你说这光打字就得多少人?好在这么做多多少少也能让人看出点门道,那DCMTK帮助文档看起来却更像Word文档,看得他头都大了。
周总说:“别看文档,看Demo!”
可里面的Demo也完全是外国程序员的风格:管他屁点大个功能,都写得异常复杂,C++里面管他函数摸版、抽象类、重载、throw/tray/catch,能用上的全给他用上,仿佛他的目的就是不让你看懂。
如果只是写个DcmImage.dll倒也罢了,绝影自认为自己不是微软里的牛人,一次性就成功,总得写个exe来测试。于是自己这模块一来二去便花了一个多月。写到这里,绝影惭愧起来,原以为那KIPACS自己耍得头头是道,DAP还不是个程序,能难到哪去,真正写起来,才发现自己实在自不量力,按照现在的评估,别说三个月,就半年都还有点危险。
25、既然IceDump不会用,就用笨一点的办法,直接拿纸把前面的代码抄上,地址、机器码、汇编代码注释什么的都一字不落地抄下来再慢慢分析。
第一天做了些准备工作,第二天绝影开始认真的破解,本来作为一个程序员,在他身上是很难找到纸笔的,甚至久而久之很多汉字都只会用电脑打不会用笔写了。但是那一天,绝影却整整写了十六张A4打印纸的代码。张厂长在一旁有点不服气,说:“上次我打印个资料,才用六张纸,都领了个周总的口头警告,怎么你一会去拿一会去拿他都不说你啊?”
“我这是工作嘛。你以为我要是有废纸会去拿打印纸?废纸早让我做演算用完了。”
下班的时候张厂长叫绝影一起走,说是去泸州面馆吃面,绝影想了想说:“你自己去吃吧,现在正是关键位置,我要好好跟一下。”
“吃了饭拿回家再跟吧,现在肚子饿,一不小心就跟飞了,那损失就大了。”
“不行不行,家里电脑还是不要装SoftICE,不稳定。”
绝影说这些的时候头也没回,张厂长有点失望,不过想想也算了,他这种情况,多半是走火入魔了,现在不要说自己,就算燕儿肯定也喊不动他。
人都走完了,绝影干脆关了公司的门,十几张打印纸的代码铺在面前,眉目也有了点,毕竟那几年水平只有那样,再加上又是国外的软件,国外软件特别是成熟的大型商业软件在反逆向工程上一直都做得很菜这是公认了的。这跟国内形成了鲜明对比。在国内,随便一个“无敌剪贴板”之类的芝麻大点的软件都壳加了一层又一层,加了壳又压缩,压缩了又加壳,什么Anti-Debug,Anti-DAsm,虚拟机,花指令,密码学加密算法凡是能沾边的能用上的都用上,用不上的创造条件也要用上。比起他们,那X-posure的序列号算法确实算得上有失水准,字符有效性的判断都很简单,要么是0-9的数字,要么是“-”,关键的算法又全部写在一个函数中,找到这个函数基本上等于大功告成。
说起来也容易,但真的找到还是费了他不少心血。SoftICE用起来实在太复杂,现在搞破解的前辈教育晚辈一般都说:“SoftICE用过吗?我们那几年,只有SoftICE用,你那OllyDBG又如何?毕竟是三环调试器,你用着是方便,可是毕竟是三环啊,对付你的办法多得很,什么检测调试寄存器,什么Hook调试API,什么浮点指令漏洞,哪像我们那时候SoftICE基本横扫天下。所以啊,工具多了,人就懒了,要学真技术,还是要在Kernel上多下点工夫啊。”
所有位置找到,绝影开始琢磨这个注册机,想明天到了公司,周总问:“小绝啊,工作进展如何啊?序列号找到了吗?”他就大大咧咧拿出这个注册机说:“还行吧,注册机也写出来了,你用用看行不行吧。”这样,周总肯定又要对他刮目相看,肯定又要拍拍他的肩说:“小绝啊,从来没让我们失望过!”
其它什么难的,就是那个关键函数,虽然汇编代码不是很复杂,但这明显是高级语言写的,那些数据的计算要还原成C语言代码还是麻烦,想起网上一篇文章,好像就是介绍直接用Windows优化大师的反汇编代码写注册机,给了点思路,不如就直接用汇编语言来写注册机得了。
26、其实你要知道,什么是程序员,能为一两千块工资天天在公司加班加点回家还继续干到两三点甚至通宵的程序员,他们根本就不在乎挣多少钱。程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远是技术,哪怕我现在身上只有两毛前,只要有志同道合的人跟我聊技术,我一样敢跟他从C++聊到ASM,从API钩子聊到inline hook,从Ring3聊到Ring0。聊完了,今天晚上吃什么?吃什么并不重要,重要的是如何才能获取Kernel基址。
燕儿见绝影垂头丧气坐在那,心又一下软下来,于是从包里那出一大叠人民币,递到绝影面前,换了轻柔的口气说:“我外婆给了我一万块钱。我想买房子。”
看看眼前一大叠人民币,绝影想起第一次领到一千块工资的时候自己那兴奋的心情,现在这里有十个那么多,绝影却反而心里一酸。
上次燕儿就说了想买房子,绝影拿了一大套理由来教育他,其实他心里最清楚,你以为他真有那么高尚,你以为他真不想买房子,那是因为没钱。所以钱这个东西真是害人啊,有钱也害人,没钱更害人。燕儿从学校就跟着他,虽说她也不是什么沉鱼落雁,但在同学们眼中起码也算小美女一个,自己当初什么也没有,全凭一张嘴把她哄到手,几年下来,自己还是什么也没有,还得让燕儿跟自己一起奋斗,起码自己连她想要的东西都不能给她,要是自己有钱,大大方方地手一挥:“房子嘛,要哪套,给你钱,你自己看好买了就是。”有自己的房子,多少还能给她一点安全感。
27、虽然绝影知道燕儿不会庸俗到一定要他拿钱买房子,但绝影还是开始计划这事。男人嘛,你可以不在任何时候把你女朋友放在最重要的位置,但一定要在她最需要你的时候给她依靠。奈何自己家里条件也如资本主义世界经济一般不景气,几万块钱绝影都不好意思开口要,不因为是怕家里人嫌少,是因为太多了。终于鼓起勇气开了口,结果还是给碰了一鼻子灰回来。
所以以前在学校的时候,同学们开口闭口第一句话便是:“小时候家里穷。”那时候说说都是开玩笑的语气,大家都是穷学生,一个月还不都是三五百块钱生活费,你要说家里穷,真能穷到哪里,大家都不知道。
等到要买房子了,才发现家里确实穷,不仅小时候家里穷,现在家里也穷。其实本来家家都是不穷的,生活虽说不上小康至少早也解决了温饱,上一代人琐碎的小日子还是过得有滋有味。等到绝影这一代了,买房子这个大山一压下来,于是家家又变得穷起来。
29、他忽然想起以前在公司处理的那些BUG,那时候处理起来总不以为然,或者因为BUG太小而对公司隐瞒不报。千里之堤溃于蚁穴啊,一个个小小的BUG最终毁掉了这个大CASE。
30、后面的列表用上分页查询,管你数据有几千条几万条,都只先查30条出来,运行起来异常流畅。本来这EB都慢得不能用了,也就说差不多已经死了,现在经过这么两下小的改动居然又活了过来,而且还生龙活虎,看来程序的优化还是门很大的学问啊,而且这优化又和汇编上指令的优化不一样,这不是什么逻辑上的优化,只是流程上的优化。
以前BOSS Liu跟绝影比技术,动不动就比什么二叉树查找啊,内存池啊,这也正是绝影的弱项啊,每到这个时候,绝影总是拿出他的杀手锏:“什么二叉树三叉树的,我懂不起。我只知道我写的是汇编代码,你做个乘法,我改成移位指令,你定义个__int64,我用MMX指令,你还能跟我比速度?什么内存池,我也不懂,我就在内核里面全部用NonPagedPool,看你访问还能有我快?”现在他总算是有点明白,原来站的层次高一点,看问题的视觉也不一样,优化效果也不一样,那就不只是节约了那么几个时钟周期,差距是几十倍几百倍啊!
31、这就是中国的现实啊。在中国,做技术的人不能说不多,技术也不能说比国外差得十万八千里,可中国的软件还是发展不上去,中国做技术的人还始终还活在尴尬中。为什么?也许有一天,技术真正和商业利益分开了,中国的软件就有希望了,中国的程序员也就有希望了。
绝影这样想完,也算了,现实就是如此,谋事在人成是在天。EB做到这里,自己也算对得起自己。这事情算告一段落,CASE算是真正Close掉,自己终于算是解放出来,也终于可以回去好好陪陪燕儿了。
32、说到写代码的风格,江湖上大底有两派,一派认为写代码就如同下象棋,写之前一定要深思熟虑,成竹在胸,写的时候要正襟危坐,规规矩矩,总之一句话,代码就要写得规范,格式要比毕业论文还标准,措词要比红头文件还严谨。BOSS Liu大概就属于这一派,而且他还不仅仅只满足于属于这一派,更热衷把他的思想强加到别人头上,所以总是对新人说:“看看你写的代码,我说了好多次了,注意缩近,注意缩近,还有匈牙利命名,你看你写得一团乱糟糟的,还让不让人看?”
而另一派认为代码就如同美女的裙子,既然是裙子,当然要越短越好,要不你还不如就穿长袍。虽说代码写在电脑上,又浪费不了多少纸张,但写得短小,毕竟能节省不少打字的时间,而且根据上面BUG的理论,说不定还能减少一些BUG。当然,超短裙也不是一般女人都敢穿的,你要是身长五尺腰围五尺,腰上就像套个救生圈,那就奉劝你不要穿了――不但穿不出性感,反而还被别人笑话,说一句“东施效颦”还算客气的了。所以这一派的人不算多,但大部分在程序上都对自己特别有信心。绝影大概就属于这一派,而且他还不仅仅只满足于属于这一派,更希望把这一派发扬光大,要是全世界的美女都穿超短裙,绝影就笑死了。所以他总是对新人说:“你看看你写的代码,就这么个简单的逻辑判断还switch/case,我说了多少次了,要精简要精简,你看我来给你压缩一半。”
每当这时候,BOSS Liu就一本正经地对绝影说:“我说BOSS阿,你面试了那么多人,每次都先问人家:‘有多少行代码经验阿?’经验当然是要越多越好,但真写起代码来,又尽让人家往‘迷你裙’里写,你这不是自相矛盾吗?”
绝影也一本正经地回答道:“你不懂,多少行代码,那是给面试的人看的,‘迷你裙’,是给自己看的,自己看的东西,当然要好!”
33、C风格的接口确实很好,不管什么语言都能很好的调用,但C++接口就不一样,要是别人换成了VB,或者ASP,那怎么办?
可是BOSS Liu说得振振有词:“你自己的CASE,你可以很清楚的知道你不会在里面用汇编,也不会用VB,更不会用ASP,既然如此,为什么还要舍近求远呢?难道你还指望着有第三方来为你的CASE开发插件?”
这一次,绝影也尝试着把接口都设计成C++的,等BOSS Liu来了,把这个拿出来给他看,看他还有什么话说。
这样做,就不得不接触虚基类,虚函数这些他非常不擅长的抽象的东西。有时候,只是为了跟BOSS Lu竞争而舍近求远,不知道是不是一种得不偿失。几年以后,BOSS Liu提起这件事,他说:“BOSS上次的设计,还是非常好的,看不出来,你对C++还是有研究的。”
绝影摇摇头说:“你错了,一个设计最失败的就是缺少想像力。那个CASE正因为用了我不熟悉的技术,失去了发挥想像力的空间,可惜啊。”
34、他们走在一所大学的校园里,学生们带着不一样的心情和不一样的目的三三两两从他们身边走过。校园,曾经是这样熟悉,现在又这样陌生。他对周总说:“周总,你用我已经快三年了,以你的看法,我会成为一个成功的人吗?”
周总不知道绝影为什么会问这样的问题,他说:“就技术来说,你会成功的,而且会很成功。你和别人不同,当你追求起技术起来,在你身上有很多别人没有的东西,这些东西,注定你会在技术上达到很多人达不到的高度。”
“可是我不只说技术。毕业快三年了,我渐渐感到很多东西很现实。就算我能把技术做得很好,你说,我能够挣很多钱吗?会有自己的车吗?”
绝影这样说的时候,想起来以前和陈董去成都见钟工,看到他那辆本田车,从那时候起他就认为,一个成功的男人都应该拥有属于自己的车。
话题渐渐沉重起来,周总也深沉地说:“你是块做技术的料。可是你刚才说的赚钱,其实赚钱还需要很多技术上的东西,很多时候决定一个人能不能赚到大钱并不在他的技术。以后你会怎么发展我说不准,但是就现在来看,如果你一直在公司发展下去,你会有你自己的车的。”
绝影也沉默了一会,想起了BOSS Liu,几年来,他和BOSS Liu一直在比,一直在技术上暗暗较劲,于是他停住了脚步,很认真地对周总说:“那周总,你觉得我和小刘比呢?我觉得我技术不比他差,他离开了公司,我留在了公司,你觉得我会比他发展好吗?”
周总也停住脚步,认真地说:“小刘,小刘和你又不一样,他属于激情创业型的人,也许有一天你开着QQ,他会开着奔驰接你去北京饭店,但是更大的可能,你开着QQ,他什么也没有。”
34、开发和市场就是这样不协调。现在很多人,看了市场流行的软件或者行业软件,大都会鄙夷地说:“就这么个软件,居然会这么畅销。这东西我也能做,认真一点,还会比它做得好。”
你当然能比它做得好,问题是,做出来了,你能像它一样进入市场吗?
所以在陈董来看,一个CASE,只要能够卖出去,能够通过验收,在商业上讲它就是成功的。效果都是一样,与其花大力气去做得非常精制比如节约点时间尽量过关。时间就是金钱呐,有了时间,这个CASE做完,我还能再接一个CASE。
可绝影想的又和他不一样。什么是“商业价值”?他懂不起。在他看来,一个产品卖出去一份和卖出去一万份没什么差别。哪怕只卖出去一份,客户对它的评价是好的,那么就是100%的成功,同样的,即使卖出去一万份,却没有一个客户来肯定它,这就是100%的失败。
所以在这个问题上,绝影是当仁不让。
35、但四年下来,技术追求到了一些,爱好也能够满足,肯定也从老板客户同行那里得到了不少,可悲的是,自己现在最缺的,却是一直以来不以为然的钱。人要吃饭,要有住的地方,还希望能给燕儿买新衣服,特别喜欢看到她买回一件新衣服后在屋里对着镜子不停比划,或者从衣柜翻出各种各样的其它衣服来搭配,最后终于觉得满意了,突然跳到自己面前说:“怎么样?漂不漂亮?”那种感觉,很幸福,这是和完成了一个大CASE后完全不同的幸福。完成了CASE,那是成就感,让燕儿开心,那是满足感。
可是,这一切,都要钱。为了追求“幸福”,不得不打破自己的梦想,回到现实中来,回到自己一直鄙视的庸俗中来。*说得好:贫穷不是社会主义!难道程序员注定一辈子都要清贫吗?
36、绝影回过头来,认真地看着她:“你喜欢写程序吗?”
“当然喜欢。”
“喜欢就够了。如果你仅仅是想养活自己,我会建议你去做一些其他的工作,适合女性的工作。以前我也面试过很多人,第一个问题我都问:你喜欢写程序吗?干这个工作和别的不一样,很大程度上在于你的兴趣。你对技术感兴趣,你才会抛开奖金阿工资阿这些东西,你才会不惜一切代价和时间去钻研它,解决它,你才不会在工作和工资上感到不平衡,这样,你才会很快进步起来。”
小朱不说话,绝影继续说:“当然,你是女娃娃阿,我知道的写程序的女娃娃不多,但是都是很厉害的角色。也许就是这样,男人嘛,还是不够细腻,粗枝大叶,女娃娃心就比较细了,这刚好弥补了男性的不足,所以她们写的程序,往往给人眼前一亮的感觉。”
“可是,很多同学说写程序是不适合女生搞的,这很累,就像你一样,如果一辈子干这个,其他不说了,就是身体都受不了,她们说干这行是吃青春饭的。特别我是女生。”
绝影有点激动:“谁说这是吃青春饭的?这是因为他们不了解,他们认为写程序就是写代码。你今天在公司写代码,但是慢慢你会知道,写程序并不是一辈子都只是写代码。随着你技术的进步,你会慢慢发现,你应该去追求更高的东西,比如软件设计,比如自己创业。我感觉IT这一行是相当广博的,不管你是男的女的,不管你技术是初级中级还是高级,你都能在这行中找到你自己合适的位置,如果你真的用了心了,它带给你的,会是一生的回报。”
34、和燕儿分手后,绝影竟大方地给自己无限期地放了个长假。所以人就是这样,绝影想:早知如此,当初跟燕儿在一起的时候就该给自己放个长假,好好陪陪她,说不定也不会搞到这一步。以前是因为在公司,现在出来了,还能到哪给自己找理由?
不过话又说回来,以前跟燕儿在一起的时候,自己是节约得连电影都舍不得看,虽然现在带宽上1下4了,而且有BT这样的好东西,但每次下了电影,还是宝贝得像儿子似的,深深地藏到硬盘的某个目录,等哪天燕儿也有空了,心情好了,两个人一起看。
所以从某种意义上说,电影好不好看,并不是电影本身好不好看,而是跟谁看。
这一次,绝影不仅是大方,甚至是奢侈――竟然开着BT下电影,下完了就看,看完了继续等下,下,一定要下DVD的,看,一定要一个人静静地看。
大爷也知道绝影心里难受,虽然他觉得他很堕落,也只能任凭他堕落,他知道,这个时候,除了燕儿,谁也不能让他振作起来。哪怕是现在比尔盖茨突然邀请他一起共进午餐,还承诺把微软让给他一半,甚至让他来当这个首席软件架构师,他都不一定愿意卖出这门槛。
这样的生活,一直持续到土匪的到来。
说实话,要不是土匪已经坐到他面前,他都快要忘记他了,那年毕业,土匪托关系去了成都电信,真是无限风光啊,从那一天,他就想,他们不再是一个世界的了,所以一直以来他们都没有再联系。
跟土匪见面前,绝影特别打扮了一下,洗了个澡,换了套衣服,出去理了个发,把几周没刮的胡子刮掉,然后努力做出一副轻松的样子。
他知道土匪,以前在学校就老打击他,在他面前,一定要坚强,要若无其事,不能让他笑话。
两年多了,土匪还是老样子,头发显然是经过精心梳理的,一身西装领带加闪闪发光的皮鞋,和学校不同的是,腋下多了一个公文包。
绝影是对土匪报着戒心,没想到土匪第一局话,便让冰雪融化了。土匪拉着他的手,语重心长地说:“听说你们分了,专门请了三天假过来看你。”
这下绝影有点不知所措,而且非常不好意思,连忙说:“哪里哪里,你忙你的就是,我自己会处理。”
“你放屁,你是什么样的人我还不知道?大二的时候为了个肖潇――才谈了两周朋友,就整得要死要活的,堕落了整整一年,这次的事情,还不把你废了!”土匪一说话,就像以前一样,立刻撕下了他的斯文。
“哪有你说的那么严重,大二的时候是因为打游戏才堕落的。”
“还不是失恋才打游戏。”
顿了顿,土匪又说:“你原谅我说话就这么直。”
绝影默默地点点头:“我知道,我知道了。”
“你知道个屁。我这次过来,就是告诉你,大家都是兄弟,平时就不说了,关键时刻才是兄弟发威的时候,这次你落了难,所以我专门请了三天假过来。”
土匪这么说,绝影突然觉得好感动,以前在学校的时候大家虽然称兄道弟,但是说到底,心眼里还是鄙视土匪:没有文化,不学无术,特别爱打击自己。学习上要打击自己,写程序也要打击自己,泡个妞也要打击自己,就连长相,有时候都要打击自己。现在跟燕儿刚分手,身边又没有一个朋友,说实话,真是自己最困难的时候,没想到在这个时候想到自己的居然还是土匪,他还专门请了三天假过来。
这样想,他也诚恳地对土匪说:“既然如此,为啥以前在学校老打击我?”
“不打击你行吗?不打击你能进步吗?不打击你能有今天的成就吗?”
“你打击了,我今天还是没啥成就啊。”
“你看我打击王江没有?打击超薄没有?都没打击?为啥?因为我觉得你才是最有前途的。你太小看我了,哈哈。”
末尾,土匪还专门“哈哈”笑了两声,那笑声是刻意加上去的,就像电影里周星驰的笑,仿佛是故意在卖弄自己的才华。
绝影这人最大的缺点就是听不得表扬,听土匪这么说,沉重的心情一下又稍微高昂了起来:“嗯,看来还是你最有眼光。”
“那是当然。我跟你说,像你这样的人,根本不应该在一棵树上吊死,要死也得多吊几棵树,这还是保守的。依你的实力,应该达到就算把所有树吊垮都吊不死的境界。”土匪见绝影来了兴致,琢磨自己的战术不错,于是进一步深入下去。
绝影是越听越来劲,等他讲到这里,似乎全然忘记了失恋,用BOSS Liu的话来说,是喝酒喝到“放开”了。于是他也就忘乎所以道:“那是当然,哎,别人笑我忒疯癫,我笑别人看不穿;不见五陵豪杰墓,无花无酒锄做田。”
绝影正在兴头上,土匪又不失时机泼了他一盆冷水:“哎,说实话,我都以为你们要结婚了。”
此话一出,绝影顿时也泄了气:“别提了别提了。”
“其实你们干啥不好,非要分手。在学校就一起呆了那么多年,听说你们又买了房子,你们是分手,但是搞起来,跟离婚一样麻烦。对了,房子呢?给她了。”
“卖了,钱一人一半分了。有什么办法?她回不了头了。”
“那也是,没办法,女人心啊。哎。你以前不是老跟我讲三国吗?你不是讲为啥关羽张飞武功那么高,都死心塌地跟刘备?我告诉你,因为刘备懂一个道理:老婆如衣服,兄弟如手足,衣服断尚可续,手足断安可续?所以,说实话,在你最困难的时候,兄弟才是最可靠的,兄弟才永远不会抛弃你。”
听土匪说出这话,绝影心里涌出一万个滋味,现在,他只有默默地点点头。
“还有,你的心思我还不懂啊,你就是怕燕儿跟你分手了,这世界上就没人要你了,所以你才要死死抓住她。”
这话正说到绝影心里,他吃惊地问:“你怎么知道?”
“我怎么不知道?我早就知道了。其实你呢,虽然说长得也不咋样,但还是有点像梁朝伟,有点特点,你想想鸡哥那包子脸都能把班花泡到手,而且据说还快结婚了,你还怕啥?你自己以前不是都老说你自己吗,什么才学又高,品貌又好,天低下女人多得很,不急,急就坏事。”
“我知道天低下女人多的很,问题是如何才能追到手?”
“八个字:东拉西扯,欲擒故纵。”
“何解?”
“所谓东拉西扯,就是你约会的时候随便什么只要你擅长的,都拿出来讲,现在的MM,都喜欢开朗健谈的,哪怕你满肚子墨水你不倒出来,就等于零。但是讲话啊,你又要注意了,千万不要MM说:这咖啡味道不错。你就马上凑上去道:原来小姐对咖啡还有研究啊,你知道吗,咖啡分为一二三四五。或者MM一说:这音乐不太适合我。你又马上接道:没想到小姐在音乐上还很有天赋,你知道吗,音乐包括五四三二一。这些都土得要死,只能去骗70后的姐姐了。你就跟她讲你擅长的。你懂什么最多?”
“程序。”
“放屁。你不是很懂历史吗?你不是自诩文章写得好吗?你不是天天把鲁迅挂在嘴边吗?就讲这些,讲她不懂的,又有点高雅的,这样,她以为你什么都全懂了。程序那东西千万不能讲,你晓得MM嘛,逻辑思维肯定跟不上的,容易睡觉。至于欲擒故纵,这个不用我解释了,反正最先肯定是要放的,如果她根本对你不感冒,早点放早点好,免得陷入泥潭不能自拔,要是她对你有意思,也放,放了,她自然回来找你。”
听了土匪这翻理论,绝影对他刮目相看,在学校的时候,就觉得土匪只能用些土得不能再土的办法追MM,动不动就是看电影啊,补习功课啊,这些都是电影里才用的,根本没技术含量。没想到才毕业两年多,他竟然有了如此进步,忙问:“那你呢?女朋友呢?”
“还没有。”
“追过吗?”
“嗯……也还没追过。”
“那你不是忽悠我啊?”
“那有什么?我还不会下蛋呢,但是我煎鸡蛋的水平比母鸡高得多!”
整个下午,两人都侃侃而谈,绝影感觉很久没有这么开心了,原来即使没有女朋友,没有电脑,没有电影,自己也能如此开心,生活啊,比自己想像中丰富得多。
最后,土匪站起身来,拍着绝影的肩膀,说:“记住,你是我认为最有前途的,别让我失望,也别让王江他们失望。”
这一刻,绝影的脑海中,突然浮现出陈董的身影,他也是这样拍着绝影的肩膀,说:“小绝啊,你从来没让我们失望过。”
他突然间明白,为什么自己会一直萎靡不振,在今天之前,他一直以为燕儿就是他的一切,他一直以来辛辛苦苦加班加点地工作是为了什么?为了跟燕儿结婚,为了让她过上幸福的生活。燕儿,就是他整个精神支柱。现在呢?燕儿不在了,这棵支柱没有了,他必须再找一颗支柱,而且要一棵强有力的支柱,才能让他有力量继续奋斗下去。这就是他一直苦苦寻找的东西。而今天,土匪让他知道:在很多人眼中,他是个很有前途的人,他要达朋友、兄弟、家人希望他达到的高度,甚至超过这个高度。这,也足以成为他强大的精神支柱。
回到屋子,大爷还坐在电脑前,绝影说:“OK,可以了,外挂,咱们什么时候开工?”
大爷很吃惊地看着他:“你,你,现在能做吗?”
“当然,我不写程序我吃什么?”
“不急不急,你要是心情不好再休息几天。”
“太阳都快落山了,时间是不等人的。”