软件大师Steve McConnell的成名之作很可能是《代码大全》――一本软件构建的实用手册。(McConnell总是以“软件构建”来描述软件开发)。《代码大全》前所未有地影响了我对软件开发的思维方式。我知道内容有些琐碎
对于一个程序员而言,养成良好的编程习惯是职业生涯中一件重要的事,而且越早越好。如果你是学生,或者自学,建议你马上阅读《代码大全》的下列几章:
第7章“高质量子程序”――该章剖析子程序的方方面面,话题涵盖创建子程序的理由、子程序的长度、子程序名等等。
第15章“使用条件语句”――该章论及if和case语句的正确用法。
第16章“控制循环”――该章说明for、while和foreach循环结构的控制方法。
对于老手们,作者则提供了调试、代码调整策略、程序源代码的布局和风格、罕用数据类型(结构、指针和全局数据)和协作构建(用以与其他程序员合作)。
《代码大全》并不面向管理。不过,“管理构建”一章大概足以让管理者从开发人员那里借来《代码大全》看看。为了避免一大堆问题,应要求新手管理者,尤其是没有技术背景的新管理人员读一读“把程序员当人看(Treating Programmers as People)”一节。对于一部而言,批判者似乎是一种常见的角色,《代码大全》并非没有批判者。有人抱怨1993年出版的第一版没有面向对象的编程方法(OOP)。1993年时OOP还是新颖的玩艺儿,所以第一版对此确实没有提及。现在McConnell对《代码大全》加入了“工作类”一章,后者含有创建高质量类的精华建议。这本书完全是OOP的气息。书中数不清的好坏编码示例都用VisualBasic、Java、C++、C#和C重新编写(这里“坏”指的是那些提供编码禁忌的示例)。
另外一些批评者说书“只是对学校东西的老调重弹”,或者“尽是些老掉牙的东西,谁都知道。”这些评论者的确受过良好教育,但并非每个人都知道该如何做。我赞赏McConnell,不仅是因为他把这些知识编纂成册,更归功于他的书包括了要点和自我检查表。
要点和自我检查表穿插于文中,归纳出McConnell认为是重要的地方。正如有经验的飞行员起飞前要做各项检查,软件开发者在发布代码前,可以使用McConnell的自我检查表。即使你不完全赞同作者的观点,该书可能促使你创建自己的开发检查表。
对于广大读者而言,如果你已有第一版的话,是否该买第二版就不太好说了,因为作者认为仍有95%的内容与第一版相关。要想了解更多内容,请查看《代码大全》第二版网页上作者“关于第二版的说明”之内容,也可以看到第二版的目录、前言和第1、5章。
这本书说的是软件开发中常被忽视之处:代码的写法。它并不针对某种特定语言、编程范例或开发方法,也并非讲的是通用标记语言(UML)、设计模式或数据结构,而是编码、低层设计、命名规范等等所有我们花费太多时间,多数开发类图书却闭口不谈的东西。从这个意义上说,Steve McConnell的《代码大全》相当独特,第一版刚被奉若神明,又有了新一版,拓展了原书的内容,巩固了该书的权威地位。
在涵盖代码构建各个方面的同时,这部巨著充满着明智的建议、示例代码、无可辩驳的事实和有力的论据。通过无数新闻报纸和学术研究中的数据,结合争战故事和轶闻,该书下功夫来说服读者,而不是靠强词夺理来做到这一点。McConnell意在帮助读者成为更好的开发人员,但他希望采用劝说而不是说教的办法。这也是该书成为一本优秀书的原因之一。
话题组织成七个不同的部分,从软件构建到伪代码的用法,到变量的命名,再到代码的编排等等。资料的安排很广泛,所以即使变量命名的话题就单独占了有用且有趣的一章。信仰意义之类的话题(如代码编排)也有所提及。
我们可以对本书逐节考察其概要,但这样做对本书尚不能物尽其用。最好是着重于文中的若干关键主题。首当其冲的就是复杂性问题。克服复杂性是卓越开发者追求的重要目标――这就意味着应当写组织精良、易懂易维护的代码;意味着不要写花哨却是维护恶梦的代码。其次是要牢记代码通常看的次数要比写的次数多。因而应确保代码是可读懂的,同理要注意程序结构、命名规范的使用及注释代码等等。有地方,从如何命名子程序到怎样编排代码,还有另一个重要之处是最好的开发者总在不断自我发展和学习。所以要奋力完善自己,对自己做的事有清醒认识,关注业界的动态,不要夜郎自大。变量该如何称谓。
除了技术含量外,该书的撰写质量也值得称道。它是一本巨著,但读起来可不像一本书。该书的思路总是易懂、专注和清晰。它有丰富的用Java、C++和VisualBasic组织的代码示例,但该书的知识并不特定于某些语言、工具或方法。
SteveMcConnell曾说,编程既不完全是艺术,也不完全是科学。归因于其实践过程,它是介于艺术和科学之间的“工艺”。读者自可以从他的书里对他的理念细加体会。
书中的精彩资料太丰富了,以至于难以简单地评述之,可以说这本书比它的第一版还要好。它以C++和Java等现代语言更新了内容,绝对是软件构建方面无与伦比的书籍……阅读此书我还将能学到很多知识,喜爱之情无以言表。