学过高中物理的人,应该会记得,原子中的电子获得能量之后,将发生能级跃迁,到达更高的能量状态。其实任何工种都是一样的,要跳出自己的水平,到达更高的级别,不是件容易的事,这个跳跃过程总需要一些东西的辅助。诚然,如果要成为一个好人,那么只要做好在幼儿园中学到的一切就足够。如果要成为一个好程序员,所需要的道理也不太多,只不过,当水平不够的时候,永远不能认识到那些朴素道理的重要。而当水平达到的时候,这些道理自然会明白。所以一本帮助程序员进阶的书,很容易落到低手觉得是废话,高手也觉得是废话的悲惨境地。
很多年以前,有人和我推荐过这本《程序员修炼之道》,甚至专门买了一本送到我家。而当年的我,不知道是由于无知,自负,浮躁,或是其他,只草草翻了一下,就下了个”烂书”的定义,扔在书架一角。后来有朋友在我书架上发现,如获至宝,说已经买不到了。我当然乐得送了人情。在我心目中,最好的入门书永远是《代码大全》,那也是对我影响最深的一部书。
过了很多年之后,再来谈这本书,发现很多人的评价比我高的多,自知不妙,赶快找来重读,这才知道错过了什么。在一个滥俗的译名之下,在一个看起来不知所云的目录之后,在一些读起来拗口的句子之中,隐藏的竟然是相当伟大的思想,朴素而真挚,简单而有效。这时候我突然明白,这是一本不逊于《代码大全》的伟大著作,后者一直被我誉为”新手圣经”。
经验这个东西,往往并不能告诉我们什么一定对,但是可以告诉我们什么一定不对。这本书完全是经验凝成,没有大道理,没有新观念。这些朴素的道理就是创造一个合格软件和作一个好程序员所必须了解的。比如 “提示44 不要靠巧合编程”,这句话表达的意思是”不要预设立场”。听起来简单,但是只要随手翻翻你最新写过的一段程序,通常都会发现代码中做了大量的”假设”。书中用一道习题,假设了用户使用命令行环境,假设用户懂英语….都可能导致问题。怕了吧?幸好还有”提示30 你不可能写出完美的软件”,这可不是帮你开脱责任,而是在讲如何控制需求,这正是能顺利完成一个项目的根本前提,可惜事实上往往到了项目失败的时候,人们才想起来需求出了问题。
这本书涉猎的范围相当广,如何设计架构,如何思考问题,如何测试,如何编码,如何处理文档…如果细心琢磨,构建软件的所有主干和细微枝节都有所涉及。和很多人的看法不同,我不认为这是一本可以轻松读完的书。一方面,这本书涉及的内容太多,虽然已经尽量讲述,但所有话题都可以继续引申出无限的内容,如果用心,还可以配合附录中所提到的各种论文和资源继续学习。习题也需要仔细思考。这绝不是一本小说。另一方面,作者用了大量的隐喻,导致读起来有一定难度。开始我认为是翻译质量有问题,不过慢慢发现美国的读者读起来也未必容易。原因还是涉及到的范围过大。我特意模仿这种风格写了本文的第一段。虽然是中文,读起来也不容易吧。
相信以上的两点会阻挡一部分人阅读这本书。我也算是曾经受阻的人之一。 不过,好书并不会随着时间的推移和平台变化而消亡,好书只会成为经典。无论是《人月神话》,还是《代码大全》,都在时间的长河中沉淀下来,传颂至今。这本书,虽然历史只有10年,不过现在再来翻看,不仅毫不落伍,甚至感觉穿透了时间,看到了这些年中不少自己犯过的错误,我相信这也是一本能经的起时间沉淀的书,只不过需要多点耐心。因此,我郑重的写下这篇书评,希望再能读到这本书的人多一点耐心,越过语言的障碍,直入本质,直至跃向更高级别。这个希望,不仅仅是对新手说的,其实也包括我自己。如本书开头所说:注重实效的程序员应该不断学习。我们都应该不断的学习下去。