【书 名】代码大全(第2版)(英文版)
【作 者】(美)迈克康奈尔 (Steve McConnell) 著
【出版者】电子工业出版社
【索书号】TP311.52/3140
【阅览室】自然阅览室
作者简介
Steve McConnell被公认为软件开发社区中的首要作者和发言人之一。他是Construx Software 公司的首席软件工程师。他所编著的图书包括曾被《Software Development》杂志授予优异产品震撼大奖(Jolt Award for product excellence)的《代码大全》(《Code Complete》)和《快速软件开发》(《Rapid Development》),以及《 软件项目生存指南》(《Software Project Survival Guide》)和《专业软件开发》(《Professional Software Development》)等。
内容简介
本书是著名IT畅销书作者、IEEE Software杂志前主编、具有20年编程与项目管理经验的Steve McConnell十余年前的经典著作的全新演绎。第2版做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论等。这是一本百科全书式的软件构建手册,涵盖了软件构建活动的方方面面,尤其强调提高软件质量的种种实践方法。作者特别注重源代码的可读性,详细讨论了类和函数命名、变量命名、数据类型和控制结构、代码布局等编程的最基本要素,也讨论了防御式编程、表驱动法、协同构建、开发者测试、性能优化等有效开发实践,这些都服务于软件的首要技术使命:管理复杂度。
为了培养程序员编写高质量代码的习惯,书中展示了大量高质量代码示例。此外,本书还归纳总结了来自专家的经验、业界研究及学术成果,列举了大量软件开发领域的真实案例与统计数据。书中所论述的技术不仅填补了初级与高级编程实践之间的空白,而且为程序员们提供了一个有关软件开发技术的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及没有太多编程经验的学生都是大有裨益的。
本书第1版是公认的关于编程的最佳实践指南之一,在过去的十多年间,该书一直在帮助开发人员编写更好的软件。现在,作者将这本经典著作全新演绎,融入了最前沿的实践技术,加入了上百个崭新的代码示例,充分展示了软件构建的艺术性和科学性。McConnell汇集了来自研究机构、学术界以及业界日常实践的主要知识,把最 高效的技术和最重要的原理交织融会为这本既清晰又实用的指南。无论您的经验水平如何,也不管您在怎样的开发环境中工作,也无论项目是大是小,本书都将激发您的思维并帮助您构建高品质的代码。
从本书可以了解到如下这些经久不衰的技术与策略:
做出具有最小复杂度和最大创造性的设计
从协作式的开发中获益
应用防御式编程技术来减少并排查错误
发掘重构或改善代码的机会,并安全可靠地进行代码重构和改善
结合项目的规格合理选用恰当的构建技术
快速而有效地排除问题
尽早地正确解决关键构建问题
分别在项目的早期、中期以及后期加强代码的质量
“《代码大全》第1版在我看来堪称软件工程领域的经典之作一而第2版则更棒!”
——Ralph Johnson,伊利诺伊州立大学:《设计模式》(Design Patterns)作者之一
“无论您是新手还是经验丰富的开发人员,《代码大全》(第2版)都能教会您思考编程的最佳方法。”
——Jeffrey Richter,《Microsoft NET框架程序设计》(Appfied Microsoft.NET Framework Programming)作者
“这本书是讲述软件构建的权威指南一准备孤身前往荒岛的程序员只要带上这本书就足够了。”
——Diomidis Spinellis,《代码阅读方法与实践》(Code Reading:The Open Soume Perspective)作者
“Steve McConnell比任何人都·懂得如何构建软件;我们十分庆幸他能把其所有的深邃见解和实践经验写成这样一本重要而新颖的图书。”
——“Visual Basic之父”Alan Cooper,《软件观念革命》(About Face 2.0)作者
前 言
普通的软件工程实践与最优秀的软件实践差距巨大——多半比其他工程学科中的这种差距都要大。因此,传播优秀实践经验的工具是十分重要的。
—— Fred Brooks
我写这本书的首要目的,就是希望缩小本行业中一般商业实践与大师级人物及专家们之间的知识差距。许多强大的编程技术在被编程领域的大众接触之前,都已在学术论文和期刊里尘封了多年。
虽然近年来前卫的软件开发实践迅速发展,但普通的实践手段并没有太大变化。很多程序的开发仍然是漏洞百出、迟于交付并且超出预算,还有很多根本就无法满足用户的需求。软件业界及学术界的研究人员已经发现了不少行之有效的实践经验,足以解决自20世纪70年代以来编程领域中日益蔓延的大多数问题。可是这些实践经验很少在高度专业化的技术期刊之外对外发表,所以时至今日大多数编程的机构和组织还没能用上这些技术。有研究表明,一项研发成果从其诞生之日起,到进入商业实践阶段,通常要经历5~15年甚至更长的时间(Raghavan and Chand 1989,Rogers 1995,Parnas 1999)。这本手册就是想缩短这一漫长的过程,让那些关键性的研发成果现在就能为更多编程人员所用。
Who Should Read This Book
谁应当阅读本书
本书中所汇集的研究成果和编程经验,将帮助你创建更高质量的软件,使你能更快速地进行开发,遇到的问题更少。本书将帮你弄明白过去为什么会遇到那些问题,并告诉你如何在将来避免它们。这里所描述的编程实践将帮助你掌控更大型的项目,还能在项目的需求发生变动时帮助你成功地维护并修改已经开发出来的软件。
Experienced Programmers
经验丰富的程序员
对于经验丰富的程序员而言,本书正是他们想要的一本翔实、易用的软件开发指南。本书关注的是“构建(construction)”,即整个软件生命周期中最为人熟知的部分;本书把强大的软件开发技术写得让自学的程序员和参加过正规训练的程序员都能读懂。
Technical Leads
技术领导
许多技术领导(或者说是技术带头人)都曾在他们的团队中使用《代码大全(第1版)》来培训经验不足的程序员。当然,本书也可以用来填补你自己的知识缺陷。如果你是一位经验丰富的程序员,你不一定会同意我给出的所有结论(如果不是这样,我倒会觉得奇怪)。但如果你阅读本书并思索其中的每一个问题之后,那么几乎不会有人再能提出什么你未曾思考过的软件构建方面的问题了。
Self-Taught Programmers
自学的程序员
如果你没有受过太多的正规训练,本书正是你的良伴。每年约有50 000个新手进入这一专业领域(BLS 2004, Hecker 2004),但每年却只有35 000个人获得与软件相关的学位(NCES 2002)。从这些数据中我们可以很快得出一个结论——很多程序员并没有接受过软件开发方面的正规教育。在许多新兴的专业人员社群中都可以看到自学的编程人员——工程师、会计师、科学家、教师及小公司的老板们。编写程序是他们工作的一部分,但他们并不一定把自己看作是程序员。无论你在编程方面受过何种程度的教育,本手册都能让你对各种行之有效的编程实践有深入的了解。
Students
学生
与有经验但缺乏正规培训的程序员对应的,是那些刚刚毕业的大学生。新近毕业的学生大多拥有丰富的理论知识,但却缺乏创建产品级的程序(production programs)的实践技术。关于编写优秀代码的实践知识,就像部落里祭祀仪式上的舞蹈一样,只能慢慢地从软件架构师、项目负责人、分析师及更有经验的程序员那里传承下来。更多的时候,这些知识就是程序员个人反复的尝试和犯错后的结晶。本书则是这些缓慢、传统智慧传承方式的一种替代方案,它汇集了以往只能从他人经验中猎取和收集的大量实用的经验技巧和有效的开发策略。对于那些正在从学术环境转向专业环境的学生来说,这是一本必备的读物。
Where Else Can You Find This Information
还能从何处找到这些信息
本书综合整理了来自四面八方的多种软件构建技术。这些技术是软件构建领域长年累月积聚下来的智慧财富,它们不仅分散,而且其中大部分素材常年散落于纸面之外(Hildebrand 1989,McConnell 1997a)。其实,内行的程序员们所用的那些强大有效的编程技术并不神秘。但是这些内行人士面对手头日复一日紧张冲刺的项目,几乎没有谁花些时间和大家分享他们所学到的知识和技能。因此,程序员们可能很难找到
很好的关于编程的信息来源。
而本书所描述的技术则填补了入门图书和高级编程图书之间的空白。当你读过了“Java编程入门”、“高级Java编程”和“超高级Java编程”之后,如果你还想学更多的编程知识,那还能读点什么呢?你可以阅读Intel或Motorola的硬件参考手册,阅读Microsoft Windows或Linux操作系统的函数手册,甚至是去阅读讲另外一门编程语言的书籍——你确实无法在一个缺乏这种详细参考资料的环境中使用语言或者程序。但本书是为数不多的探究编程本质的书籍之一。无论你在何种环境下、用何种语言编写程序,书中某些最有益处的编程技术都能派上用场。其他的书一般都忽略了这些实践知识,而这也正是本书专注于这些知识的原因。
本书中的信息是从许多来源中提炼出来的,如下图所示。想完全获得在本书中看到的这些信息的另外途径只有一条,那就是通读堆积如山的书籍和成百上千本技术期刊,还得再加上大量的实际经验。即便你把这些事情都做到了,本书仍然会对你很有益处,因为它把所有这些资料都集于一处,便于查阅。
Key Benefits of This Handbook
阅读本书的收益
无论你是何种背景,本书都能助你在更短的时间内写出更棒的程序,还不会那么头疼。
全面的软件构建参考 本书讨论了软件构建活动的方方面面,比如说软件的质量,还有编程的思维方式。它还会深入阐述构建活动中的重要细节,如创建一个类的步骤,使用数据和控制结构时的各种事项,还有调试、重构、代码调优的技术与策略等。你无须逐页通读所有主题。本书可以让你很容易就能找到感兴趣的特定话题。
随时备用的核对表 本书包括了大量的核对表(checklist),你可以用它来评估软件架构、设计方法、类和子程序的质量、变量命名、控制结构、代码格式、测试用例,等等。
与时俱进的信息 本书介绍了一些当今最为时兴的技术,其中有许多还未被广泛采用。正因为本书撷取了实践与研究两者的精髓,它所介绍的这些技术将经久不衰,受用多年。
以更广的视角检视软件开发 本书将给你一个机会,让你凌驾于日复一日、忙于救火的混乱场面之上,看看到底什么是可行的,而什么又是不可行的。实践中的程序员们很少有时间去阅读数以百计的书籍与期刊,而本手册萃取了其中的精华。本书所汇集的理论研究与实践经验将活跃你的思维,激励你对自己项目的思考,使你的行动更有策略,避免反复陷入完全一样的战斗。
绝不注水 有些软件书籍,其中精髓部分的净重也就1克,却注入了重达10克的水分。本书则会公平地探讨每项技术的优劣。关于你自己项目的特定需求,你了解得要比任何人都清楚。因此本书仅是给你公正客观的信息,让你能够具体情况具体分析,做出正确的决策。
有关概念适用于大多数常见的语言 本书中介绍的技术能让你可以更好地利用你的编程语言,无论是C++、C#、Java、Visual Basic,还是其他类似语言。
丰富的代码示例 本书中收集了近500个用于展现优劣代码之差异的示例。之所以给出这么多示例也是出于个人的偏好。因为从示例中我最能学到东西,我想其他程序员也该可以通过这种方式学得更好吧。
这些示例是用了多种不同的语言所写成的,因为学习并掌握不止一门语言通常是专业程序员职业生涯中的分水岭。一旦一名程序员意识到编程原则是超越特定语言语法的东西时,通往能够实质地改善编程质量并提高工作效率的知识的大门也就向他敞开了。
为了避免以多种语言写成的例子成为读者的负担,我会尽量避免使用各语言中那些深奥的特性——除非当时就是需要探讨它。为了弄懂一个代码片段要表达的问题,你无须完全理解所有的细枝末节。如果你集中关注示例所展示的问题,那么无论它是用什么语言写成的,你都能读懂。为让你更容易理解这些示例,我还给其中的关键部分加了注解。
引用其他信息来源 本书汇集了为数众多关于软件构建方面的可用信息,但这并不算完。在本书所有的章节中,“更多资源(Additional Resources)”一节都会介绍其他一些书籍和文章,你希望进一步深入了解感兴趣的话题时可以阅读它们。
配套网站 在本书的配套网站cc2e.com上会提供更新的核对表、参考书目、杂志文章、网页链接等内容。要访问《代码大全(第2版)》中的相关信息,请如本段文字左侧所示,在浏览器中输入“cc2e.com/”,后跟一个四位阿拉伯数字即可。这样的网址参考链接在本书中会有很多。
Why This Handbook Was Written
为什么要写这本手册
在软件工程界,人们都清楚地认识到,应该把软件开发中行之有效的实践知识归纳、编撰成一本开发手册。计算机科学与技术委员会(Computer Science and Technology Board)的一份报告指出,要想大幅提高软件开发的质量和工作效率,需要把已知的行之有效的软件开发实践知识归纳、统一并广为传播(CSTB 1990, McConnell 1997a)。该委员会还指出,传播这些知识的策略应建立在软件工程手册这个概念的基础之上。