点题我很荣幸能够代表《代码大全》第2版的全体译者、审阅者作序。在这篇序中,我想先来说说这本书的名字。一本书的名字理应是全书的点睛之笔。然而,当《代码大全》一书的第1版在1993年被学苑出版社引入国内并译为中文版本的时候,“Code Complete”被译为了“代码大全”——这实在是一个有趣的错误。Code Complete到底是什么意思?我们不妨对比其他一些常见的说法:Mission Complete——“任务完成”(游戏中常见);Download Complete——“下载完成”(浏览器中常见)……那么,Code Complete不就是“编码完成”的意思吗?据我了解,在一些现代软件工程中,“Code Complete”确实就是整个软件开发过程中的一个重要的里程碑(milestone),就如同大家可能更为熟悉的Beta、Final、Release Candidate(RC)以及Release-To-Manufacture(RTM)一样。在开发一个软件的过程中,到达这个里程碑就意味着,用于实现软件规格中所有功能的代码都已经编写完成了。当然,这里所谓的“完成”还只是在比较局部的颗粒度上而言。在这一里程碑之后,还需要进行系统级的代码集成与测试才能达到“产品完成”的程度。用更通俗的话说,如果你是在建造一座大厦,“Code Complete”就相当于大厦封顶——虽然还不能立即入住,但该有的部件都有了;如果你是在烹饪一道大餐,“Code Complete”就相当于入盘、上桌之前的时刻,此时所有的主料、辅料都已备妥——但厨师还没来得及亲自品品味道并最终完成这道作品;如果你是乔迁新居,“Code Complete”时就相当于装修完毕了、家具买齐了,但一切还没有最终摆好的时候。回到软件行业的环境中来说,在软件工程到达“Code Complete”这一里程碑之前的主要工作内容应该就是逐层地完成每一个部件——从一个个变量、一条条语句聚成一个个子程序、一个个类,再到一个个包、一个个子系统……让所有这些部件把软件规格中定义的所有功能特性加以实现。这,才是《Code Complete》一书的主题所在——教会你为了到达“编码完成”这一重要里程碑所必需的所有软件构建技术。正是这样一本完整而实用的编码技术手册,在十余年之间影响了一代程序员,帮助他们用更少的时间写出更好的代码,也因此两度荣获《软件开发杂志》的震撼大奖(Jolt Award),成为了软件业经典图书中的代表。本书把软件构建过程中的方方面面讲解得淋漓尽致,尤其是细微之处,更能够窥见作者深厚的编码功力和丰富的编码经验。从内容上讲,全书确实是关于软件构建技术的“大全”之作。如此说来,当初这么一个简单的主谓结构短语被误译为“代码大全”之后,却也被大多数业内人士所接受、认可甚至广为流传,还是有一定道理的。当然了,在现代的集成开发环境(IDE)中,“Code Complete”还有另外一个意思,就是“补全代码”——一种根据代码的上下文自动把不完整的代码补充为完整的功能。如果有些人把这个意思认定为本书主题,那就实在是谬误至极了。比如这个网站:http://www.cocw.net/mit/Chemical-Engineering/10-34Numerical-Methods-Applied-to-Chemical-EngineeringFall2001/¬RelatedResources/事实上,“代码大全”这四个字从它在十多年前被确定下来之时,就注定要和这本书一起成为经典的代名词,甚至成为一个品牌。鉴于“代码大全”的大名早已深深印在一代程序员的心中,最终我们决定在本书的第2版中继续沿用这一“恰如其分”的错误,也借此向原书第1版各位译者、修订者们的辛勤劳动表示我们的敬意。