周杰伦有一首歌叫做《牛仔很忙》,蠢爸爸小星也有一首歌叫做《业务员很忙》,我既不是牛仔也不是业务员,但我从事的工作也很忙,我是一个程序员。扪心自问,似乎近几年都没有完整看完一本书的经历了。俗话说:读书,要先把书读厚。像《代码大全》这样“重”量级的计算机读物,900多页的个头,我的天啊!如果想把它放在书包里作为“口袋书”,以方便随时随地拿出来阅读,的确是个愚蠢的做法;但如果放在公司的话,我又担心它会沦为午休时候的枕头……(扯远了 -_-#)。
在前言之前,还有若干页中外读者对该书的赞誉。在众多的赞誉中,我留意到曝光率最高的,是n多带“最”字的词汇,如“对我影响最深的”,“我见过的最好的”,“最易懂的”……,其中Richard Mateosian的赞誉是我觉得最具有“煽动性”的:
Richard Mateosian:假如你期望成为专业程序员,这将是你投资35美元能得到的最好回报。不要只是看看这个书评,赶快冲出去买一本回来!McConnell声称此书意在拉近业界大师的知识与一般商业实践之间的距离……令人称奇的是他做到了。
中文版的屁股后面写着本书的定价是:98.00元,由此可以看出中文版的售价是要比英文版低的,为此我应该感恩于我身处的社会大环境。“不要只是看看这个书评”这句话无形之中使我感到汗颜,由于受到开篇一些煽情文字的影响而一时冲动出手买下某书,入手后尘封于书柜或者不知去向的故事我也记不清在自己身上重演过几遍 了,可见在书籍编排中采用这种排兵布阵的确是有效的,印象中似乎本土的出版商们都比较喜欢来这一手,英文原版好像没搞这种玩意儿,也有可能是第二版的关系吧。但无论如何,希望在后面的日子里,我能够坚持把《代码大全》看完,并且不会有“见面不如闻名”的感觉。
以我目前对《代码大全》的理解程度,贸然对其作出评价绝对是一种可耻的行为,所以在前言部分我只打算做一下流水账记录,针对书上的叙述谈谈自己想法。
在过去的五六年间,自己刚好也经历了从学生(Student)到自学的程序员(Self-Taught Programmer),再到成为开发团队中经验丰富的程序员(Expreienced Programmer),再到现在的技术领导(Technical Leads),这么一个过程,感慨之余,我不得不遗憾地承认这一路走来的经历,正好应验了书中所说的:
虽然近年来前卫的软件开发实践迅速发展,但普通的实践手段并没有太大变化。很多程序的开发仍然是漏洞百出、迟于交付并且超出预算还有很多根本就无法满足用户的需求。
就在前一阵子,测试的同事才刚刚和我分享过项目测试过程中的一些数据:目前测试团队已经针对产品设计了两万条左右的测试用例,而已发现的Bug累计也是两万多个。身为开发者中的一员,我只能抱歉地承认这组数据所暴露的问题是相当令人尴尬的,因为任何人都可以拿着这个来挑战我:“你们的测试人员平均每写一条用例就能发现一个产品的Bug?!你们的开发人员怎么这么烂啊?”看来我目前的处境与Who Should Read This Book(谁应当阅读本书)中所描述内容是相当对口的。
另外书中还谈到:
其实,内行的程序员们所用的那些强大有效的编程技术并不神秘。但是这些内行人士面对手头日复一日紧张冲刺的项目,几乎没有谁花时间和大家分享他们所学到的知识和技能。
这一点也相当能引起我的共鸣。结合我的亲身体会再补充一点,那就是“招式花哨而内力不足”。几年下来,各种项目开发过程中的疑难杂症,妙方偏方的确是知道了不少,但这些工作上(包括做一份需求,解决一个Bug,参加一次讲座,阅读一篇技术文章之后)的所得,往往具有随机性,是杂乱的。对于有志成为技术领导(Technical Leads)的人来说,想完全依靠这种层面的积累来达到技术影响力的大幅度提升,其实是不现实的。在这个阶段,修炼内力显然要比学习招式更为重要,这里所说的修炼内力也就是书中所说的对知识的提炼。
在此我要特别声明一点:以上文字纯属个人愚见和借题发挥,未必是作者的本意。谦虚和幽默乃中华民族的传统美德,也是优秀程序员必备的两种素质,这些从人的说话谈吐就可见一斑。在前言当中,软件行业大师级人物的语言风格也给我留下了比较深刻的印象,且看以下几处文字:
- 想完全获得在本书中看到的这些信息的另外途径只有一条,那就是通读堆积如山的书籍和成百上千本技术期刊,还得再加上大量的实际经验。即便你把这些事情都做到了,本书仍然会对你很有益处,因为它把所有这些资料都集于一处,便于查阅。
- 无论你是何种背景,本书都能助你在更短的时间内写出更棒的程序,还不会那么头疼。
- 正因为本书撷取了实践与研究两者的精髓,它所介绍的这些技术将经久不衰,受用多年。
这些文字把《代码大全》“捧”到了一个非常高的位置上去,同时也把读者对该书的期望带到了一个“小小的高潮”,乍看起来还有点“黄婆卖瓜,自卖自夸”的嫌疑,不过现在下判断还为时尚早,是否真如所言还有待在后面的阅读过程中慢慢验证。最后再摘抄几处个人颇为认同的有趣观点,与大家分享:
- 有些软件书籍,其中精髓部分的净重也就1克,却注入了重达10克的水分。
- 从示例中我最能学到东西,我想其他程序员也该可以通过这种方式学得更好吧。
- 学习并掌握不止一门语言通常是专业程序员职业生涯的分水岭。一旦一名程序员意识到编程原则是超越特定语法的东西时,通往能够实质地改善编程质量并提高工作效率的知识的大门也就向他敞开了。
另外文中对于软件构建的话题常被忽视(The Topic of Construction Has Been Neglected)的论述也是比较深刻的,由于在正文第1章也有谈到构建的概念问题,个人认为这个话题属于后话,此处暂时不表。
最后引用作者的话对《代码大全》进行一句话的概括,并以此作结,那就是:
我把本书构思成关于代码构建活动的完整探讨——一个程序员给其他程序员写的书。