代码大全(第2版)英文版
  • 推荐0
  • 收藏4
  • 浏览996

代码大全(第2版)英文版

(美)Steve McConnell(史蒂夫·迈克康奈尔) (作者)  无 (译者) 刘芸 (责任编辑)

  • 丛  书:原味精品书系
  • 书  号:978-7-121-27315-5
  • 出版日期:2016-04-06
  • 页  数:952
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 原书名: Code Complete: A Practical Handbook of Software Construction,2E
  • 原书号:0735619670
  • 维护人:刘佳禾
本书是著名IT畅销书作者、IEEESoware杂志前主编、具有20年编程与项目管理经验的SteveMcConnell十余年前的经典著作的全新演绎。第2版做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论等。这是一本百科全书式的软件构建手册,涵盖了软件构建活动的方方面面,尤其强调提高软件质量的种种实践方法。作者特别注重源代码的可读性,详细讨论了类和函数命名、变量命名、数据类型和控制结构、代码布局等编程的最基本要素,也讨论了防御式编程、表驱动法、协同构建、开发者测试、性能优化等有效开发实践,这些都服务于软件的首要技术使命:管理复杂度。
为了培养程序员编写高质量代码的习惯,书中展示了大量高质量代码示例。此外,本书还归纳总结了来自专家的经验、业界研究及学术成果,列举了大量软件开发领域的真实案例与统计数据。书中所论述的技术不仅填补了初级与高级编程实践之间的空白,而且为程序员们提供了一个有关软件开发技术的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及没有太多编程经验的学生都是大有裨益的。
第2版两届Software Jolt Award震撼大奖得主 经典中的经典。仍然是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节
前 言
普通的软件工程实践与最优秀的软件实践差距巨大——多半比其他工程学科中的这种差距都要大。因此,传播优秀实践经验的工具是十分重要的。
—— 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)。该委员会还指出,传播这些知识的策略应建立在软件工程手册这个概念的基础之上。
The Topic of Construction Has Been Neglected
软件构建的话题常被忽视
曾几何时,软件开发和编写代码被认为是同一件事情。但随着软件开发周期中的各个活动被人们逐渐认识,该领域中一些最棒的头头脑脑们就开始花更多时间去分析和争论诸如项目管理方法、需求、设计、测试等问题了。在这场学习研究新兴领域的浪潮中,代码构建这个与软件开发骨肉相连的环节反而被忽视了。
关于软件构建的讨论之所以步履蹒跚,也是因为有人认为,如果将构建活动视作软件开发中的一项特定活动,就暗示着也必须把它视作其中的一个特定阶段。然而实际上,软件开发中的各项活动和各个阶段无须以特定的关系一一对应起来;而且无论其他的软件活动是分阶段(phase)进行,还是迭代式(iteration)进行,或者以某种其他方式进行,都不妨碍我们探讨“构建活动”。
Construction Is Important
构建活动是重要的
构建活动被学者和作者所忽略的另一个原因是源于一个错误的观念,他们认为与其他软件开发活动相比,构建是一个相对机械化的过程,并没有太多可改进的机会。然而事实并非如此。
“代码构建”一般占据了小型项目65%的工作量,而在中型项目上也达到了50%。同时,“构建”也要为小型项目中75%的错误负责,在中到大型项目上这一比例为50%~75%。任何一个要为50%~75%的错误负责的活动环节显然都是应该加以改善的。(第27章中对这些统计数据有更多详细的探讨。)
也有一些评论家指出,虽然构建阶段发生的错误在所有错误中占有很大的比例,但修正这些错误的代价往往比“修正那些由于需求和架构所导致的错误”要低很多,这也就暗示着构建活动因此不那么重要。诚然,修正由构建活动所导致的错误的代价比较低这一说法是正确的,但它也引起了误导——因为如果不修正这些错误,代价反而会高得令人难以置信。研究人员发现,软件中一些代价最为昂贵的错误,其罪魁祸首常常是一些小范围的代码错误,其代价甚至可以飙至上亿美元的程度(Weinberg 1983,SEN 1990)。可以用较低代价修正的错误,并不意味着这些错误的修正不重要。
人们忽视构建活动的另一种原因则颇具讽刺意味——就因为它是软件开发中唯一一项肯定能完成的活动。对于需求,人们可以自以为是而不去潜心分析;对于架构,人们可以偷工减料而不去精心设计;对于测试,人们可以短斤少两甚至跳过不做,而不去整体计划并付诸实施。但只要写出来的是程序,总归要进行构建活动,这也说明,只要改进软件构建这一环节,就一定对软件开发实践有好处。
No Comparable Book Is Available
没有可媲美的同类书籍
既然看到构建活动有着如此清晰的重要性,我曾相信,当我构思此书时已有人写过关于有效的软件构建实践的书籍了。对这样一本介绍如何有效地进行编程的书籍的需求是显而易见的,但是我却只找到很少几本关于软件构建这一题材的书,而且那些书也仅仅是涉及这个话题的一部分罢了。有些书写于15年前,还是和一些深奥的语言——如ALGOL、PL/I、Ratfor及Smalltalk等——紧密相关的。有些则是出自并不实际编写产品代码的教授之手。教授们写出来的技术内容对于学生们的项目而言还行得通,但他们通常不知道如何在完整规模的开发环境中施展这些技术;还有些书是为了宣传作者最新钟情的某种方法论,却忽略了那些被时间反复证明是行之有效的成熟实践技术的巨大宝库。
简而言之,我没有找到哪怕是一本试图归纳总结来自专家经验、业界研究及学术成果的实践编程技术的书籍。关于这个话题的讨论要能和现今的编程语言、面向对象编程技术及前沿的开发实践紧密结合。很明显需要有人写出一本这样的书出来,而他必须了解当今的理论发展水平,同时也编写过足够多的能反映实践状况的产品级代码。我把本书构思成关于代码构建活动的完整探讨——一个程序员给其他的程序员写的书。

Author Note
作者注
欢迎你对本书中所探讨的话题进行质询,如果你整理了勘误报告,或其他相关的内容,请发邮件与我联系,我的邮箱是stevemmc@construx.com,也可以访问我的网站:www.SteveMcConnell.com。
Bellevue, Washington
Memorial Day, 2004

Microsoft Learning Technical Support
Every effort has been made to ensure the accuracy of this book. Microsoft Press provides corrections for books through the World Wide Web at the following address:
http://www.microsoft.com/learning/support/
To connect directly to the Microsoft Knowledge Base and enter a query regarding a question or issue that you may have, go to:
http://www.microsoft.com/learning/support/search.asp
If you have comments, questions, or ideas regarding this book, please send them to Microsoft Press using either of the following methods:
Postal Mail:
Microsoft Press
Attn: Code Complete 2E Editor
One Microsoft Way
Redmond, WA 98052-6399
E-mail:
mspinput@microsoft.com


Acknowledgments
鸣 谢

从来没有哪本书是完全由一个人写出来的(至少我的书都是如此)。《代码大全(第2版)》更是许多人智慧的结晶。
我想感谢对本书提出重要意见的人:Hákon ágústsson、Scott Ambler、Will Barns、William D.Bartholomew、Lars Bergstrom、Ian Brockbank、Bruce Butler、Jay Cincotta、Alan Cooper、Bob Corrick、Al Corwin、Jerry Deville、Jon Eaves、Edward Estrada、Steve Gouldstone、Owain Griffiths、Matthew Harris、Michael Howard、Andy Hunt、Kevin Hutchison、Rob Jasper、Stephen Jenkins、Ralph Johnson及其在伊利诺伊斯大学的软件架构研究组、Marek Konopka、Jeff Langr、Andy Lester、Mitica Manu、Steve Mattingly、Gareth McCaughan、Robert McGovern、Scott Meyers、Gareth Morgan、Matt Peloquin、Bryan Pflug、Jeffrey Richter、Steve Rinn、Doug Rosenberg、Brian St.Pierre、Diomidis Spinellis、Matt Stephens、Dave Thomas、Andy Thomas-Cramer、John Vlissides、Pavel Vozenilek、Denny Williford、Jack Woolley和Dee Zsombor。
几百名读者为第1版发来了意见,对第2版给出评论的读者就更多了。感谢大家花时间以各种方式交换阅读本书的心得。
特别要感谢审定最终稿件的Construx软件公司同仁:Jason Hills、Bradey Honsinger、Abdul Nizar、Tom Reed和Pamela Perrott。虽然知道稿件之前有过许多次的仔细检查,你们仍然进行了彻底地审阅,认真程度着实令我吃惊。还要感谢Bradey、Jason和Pamela为cc2e.com网站付出的辛劳。
和本书的责任编辑Devon Musgrave共同工作,是一件尤为愉快的事。我曾和许多了不起的编辑在其他项目上合作过,Devon更是少有的负责和容易相处。谢谢你,Devon!谢谢Linda Engleman,是你支持着第2版的出版。没有你就没有《代码大全(第2版)》。还要谢谢Microsoft出版社的其他员工,包括Robin Van Steenburgh、Elden Nelson、Carl Diltz、Joel Panchot、Patricia Masserman、Bill Myers、Sandi Resnick、Barbara Norfleet、James Kramer和Prescott Klassen。
我想向Microsoft出版社的下列员工致意,感谢你们为《代码大全》第1版的出版付出的汗水:Alice Smith、Arlene Myers、Barbara Runyan、Carol Luke、Connie Little、Dean Holmes、Eric Stroo、Erin O‘Connor、Jeannie McGivern、Jeff Carey、Jennifer Harris、Jennifer Vick、Judith Bloch、Katherine Erickson、Kim Eggleston、Lisa Sandburg、Lisa Theobald、Margarite Hargrave、Mike Halvorson、Pat Forgette、Peggy Herman、Ruth Pettis、Sally Brunsman、Shawn Peck、Steve Murray、Wallis Bolz和Zaafar Hasnain。

感谢以下审阅者,感谢你们为第1版做出了突出贡献:Al Corwin、Bill Kiestler、Brian Daugherty、Dave Moore、Greg Hitchcock、Hank Meuret、Jack Woolley、Joey Wyrick、Margot Page、Mike Klein、Mike Zevenbergen、Pat Forman、Peter Pathe、Robert L.Glass、Tammy Forman、Tony Pisculli和Wayne Beardsley。特别要感谢Tony Garland,谢谢你详尽的评论:12年后再来回顾,我越发感激Tony那几千条评论是多么地难得。

目录

目录

前言
致谢
核对清单
表目录
图目录
Part I Laying the Foundation
1 Welcome to Software Construction
1.1 What Is Software Construction?
1.2 Why Is Software Construction Important?
1.3 How to Read This Book
2 Metaphors for a Richer Understanding of Software Development
2.1 The Importance of Metaphors
2.2 How to Use Software Metaphors
2.3 Common Software Metaphors
3 Measure Twice, Cut Once: Upstream Prerequisites
3.1 Importance of Prerequisites
3.2 Determine the Kind of Software You’re Working On
3.3 Problem-Definition Prerequisite
3.4 Requirements Prerequisite
3.5 Architecture Prerequisite
3.6 Amount of Time to Spend on Upstream Prerequisites
4 Key Construction Decisions
4.1 Choice of Programming Language
4.2 Programming Conventions
4.3 Your Location on the Technology Wave
4.4 Selection of Major Construction Practices
Part II Creating High-Quality Code
5 Design in Construction
5.1 Design Challenges
5.2 Key Design Concepts
5.3 Design Building Blocks: Heuristics
5.4 Design Practices
5.5 Comments on Popular Methodologies
6 Working Classes
6.1 Class Foundations: Abstract Data Types (ADTs)
6.2 Good Class Interfaces
6.3 Design and Implementation Issues
6.4 Reasons to Create a Class
6.5 Language-Specific Issues
6.6 Beyond Classes: Packages
7 High-Quality Routines
7.1 Valid Reasons to Create a Routine
7.2 Design at the Routine Level
7.3 Good Routine Names
7.4 How Long Can a Routine Be?
7.5 How to Use Routine Parameters
7.6 Special Considerations in the Use of Functions
7.7 Macro Routines and Inline Routines
8 Defensive Programming
8.1 Protecting Your Program from Invalid Inputs
8.2 Assertions
8.3 Error-Handling Techniques
8.4 Exceptions
8.5 Barricade Your Program to Contain the Damage Caused by Errors
8.6 Debugging Aids
8.7 Determining How Much Defensive Programming to Leave in Production Code
8.8 Being Defensive About Defensive Programming
9 The Pseudocode Programming Process
9.1 Summary of Steps in Building Classes and Routines
9.2 Pseudocode for Pros
9.3 Constructing Routines by Using the PPP
9.4 Alternatives to the PPP
Part III Variables
10 General Issues in Using Variables
10.1 Data Literacy
10.2 Making Variable Declarations Easy
10.3 Guidelines for Initializing Variables
10.4 Scope
10.5 Persistence
10.6 Binding Time
10.7 Relationship Between Data Types and Control Structures
10.8 Using Each Variable for Exactly One Purpose
11 The Power of Variable Names
11.1 Considerations in Choosing Good Names
11.2 Naming Specific Types of Data
11.3 The Power of Naming Conventions
11.4 Informal Naming Conventions
11.5 Standardized Prefixes
11.6 Creating Short Names That Are Readable
11.7 Kinds of Names to Avoid
12 Fundamental Data Types
12.1 Numbers in General
12.2 Integers
12.3 Floating-Point Numbers
12.4 Characters and Strings
12.5 Boolean Variables
12.6 Enumerated Types
12.7 Named Constants
12.8 Arrays
12.9 Creating Your Own Types (Type Aliasing)
13 Unusual Data Types
13.1 Structures
13.2 Pointers
13.3 Global Data
Part IV Statements
14 Organizing Straight-Line Code
14.1 Statements That Must Be in a Specific Order
14.2 Statements Whose Order Doesn’t Matter
15 Using Conditionals
15.1 if Statements
15.2 case Statements
16 Controlling Loops
16.1 Selecting the Kind of Loop
16.2 Controlling the Loop
16.3 Creating Loops Easily—From the Inside Out
16.4 Correspondence Between Loops and Arrays
17 Unusual Control Structures
17.1 Multiple Returns from a Routine
17.2 Recursion
17.3 goto
17.4 Perspective on Unusual Control Structures
18 Table-Driven Methods
18.1 General Considerations in Using Table-Driven Methods
18.2 Direct Access Tables
18.3 Indexed Access Tables
18.4 Stair-Step Access Tables
18.5 Other Examples of Table Lookups
19 General Control Issues
19.1 Boolean Expressions
19.2 Compound Statements (Blocks)
19.3 Null Statements
19.4 Taming Dangerously Deep Nesting
19.5 A Programming Foundation: Structured Programming
19.6 Control Structures and Complexity
Part V Code Improvements
20 The Software-Quality Landscape
20.1 Characteristics of Software Quality
20.2 Techniques for Improving Software Quality
20.3 Relative Effectiveness of Quality Techniques
20.4 When to Do Quality Assurance
20.5 The General Principle of Software Quality
21 Collaborative Construction
21.1 Overview of Collaborative Development Practices
21.2 Pair Programming
21.3 Formal Inspections
21.4 Other Kinds of Collaborative Development Practices
22 Developer Testing
22.1 Role of Developer Testing in Software Quality
22.2 Recommended Approach to Developer Testing
22.3 Bag of Testing Tricks
22.4 Typical Errors
22.5 Test-Support Tools
22.6 Improving Your Testing
22.7 Keeping Test Records
23 Debugging
23.1 Overview of Debugging Issues
23.2 Finding a Defect
23.3 Fixing a Defect
23.4 Psychological Considerations in Debugging
23.5 Debugging Tools—Obvious and Not-So-Obvious
24 Refactoring
24.1 Kinds of Software Evolution
24.2 Introduction to Refactoring
24.3 Specific Refactorings
24.4 Refactoring Safely
24.5 Refactoring Strategies
25 Code-Tuning Strategies
25.1 Performance Overview
25.2 Introduction to Code Tuning
25.3 Kinds of Fat and Molasses
25.4 Measurement
25.5 Iteration
25.6 Summary of the Approach to Code Tuning
26 Code-Tuning Techniques
26.1 Logic
26.2 Loops
26.3 Data Transformations
26.4 Expressions
26.5 Routines
26.6 Recoding in a Low-Level Language
26.7 The More Things Change, the More They Stay the Same
Part VI System Considerations
27 How Program Size Affects Construction
27.1 Communication and Size
27.2 Range of Project Sizes
27.3 Effect of Project Size on Errors
27.4 Effect of Project Size on Productivity
27.5 Effect of Project Size on Development Activities
28 Managing Construction
28.1 Encouraging Good Coding
28.2 Configuration Management
28.3 Estimating a Construction Schedule
28.4 Measurement
28.5 Treating Programmers as People
28.6 Managing Your Manager
29 Integration
29.1 Importance of the Integration Approach
29.2 Integration Frequency—Phased or Incremental?
29.3 Incremental Integration Strategies
29.4 Daily Build and Smoke Test
30 Programming Tools
30.1 Design Tools
30.2 Source-Code Tools
30.3 Executable-Code Tools
30.4 Tool-Oriented Environments
30.5 Building Your Own Programming Tools
30.6 Tool Fantasyland
Part VII Software Craftsmanship
31 Layout and Style
31.1 Layout Fundamentals
31.2 Layout Techniques
31.3 Layout Styles
31.4 Laying Out Control Structures
31.5 Laying Out Individual Statements
31.6 Laying Out Comments
31.7 Laying Out Routines
31.8 Laying Out Classes
32 Self-Documenting Code
32.1 External Documentation
32.2 Programming Style as Documentation
32.3 To Comment or Not to Comment
32.4 Keys to Effective Comments
32.5 Commenting Techniques
32.6 IEEE Standards
33 Personal Character
33.1 Isn’t Personal Character Off the Topic?
33.2 Intelligence and Humility
33.3 Curiosity
33.4 Intellectual Honesty
33.5 Communication and Cooperation
33.6 Creativity and Discipline
33.7 Laziness
33.8 Characteristics That Don’t Matter As Much As You Might Think
33.9 Habits
34 Themes in Software Craftsmanship
34.1 Conquer Complexity
34.2 Pick Your Process
34.3 Write Programs for People First, Computers Second
34.4 Program into Your Language, Not in It
34.5 Focus Your Attention with the Help of Conventions
34.6 Program in Terms of the Problem Domain
34.7 Watch for Falling Rocks
34.8 Iterate, Repeatedly, Again and Again
34.9 Thou Shalt Rend Software and Religion Asunder
35 Where to Find More Information
35.1 Information About Software Construction
35.2 Topics Beyond Construction
35.3 Periodicals
35.4 A Software Developer’s Reading Plan
35.5 Joining a Professional Organization
Bibliography
Index

读者评论

同系列书

  • Clean Architecture:软件架构与设计匠艺(英文版)

    Robert C. Martin (作者) Robert C. Martin(罗伯特·C·马丁) (译者)

    马丁的简介代码不仅仅是提供选项。在半个世纪的软件环境中,每一种可以想象的类型,马丁告诉你做出什么选择,以及为什么它们对你的成功至关重要。正如你所渴望的,这本书中...

     
  • Effective Java(第2版)英文版

    (美)Joshua Bloch(约书亚·布洛赫) (作者) 无 (译者)

    本书通过78个有效案例,旨在帮助读者深入理解Java,以写出更加清楚、健壮、可重复使用的代码。书中每个章节均包含小论文,针对Java平台和杰出的代码样例,提供了...

    ¥65.00
  • C11编程导论英文版

    (美)Paul Deitel(保罗·戴特尔),(美) Harvey Deitel(哈维·戴特尔) (作者) (译者)

    本书沿用了Deitel特色的“程序实况解说”,深入探讨了C语言和C标准库。通过完整的语法着色、代码高亮、代码演练和程序输出,全面地介绍了测试程序的概念。本书汇集...

    ¥89.00
  • Effective Javascript:编写高质量JavaScript代码的68个有效方法 英文版

    (美)David Herman(大卫·赫尔曼) (作者) 无 (译者)

    本书由资深 JavaScript 技术专家 David Herman 所著。书中基于 JavaScript 标准的新版本前所未有地阐明了 JavaScript ...

    ¥65.00
  • Effective Python:编写高质量Python代码的59个有效方法 英文版

    (美)Brett Slatkin(布雷特·斯拉特金) (作者) 无 (译者)

    本书不是要讲述 Python 的基础编程,而是要帮你掌握 Python 独特的优势和魅力。书中总结了 59个 Python 编程的优秀实践、贴士和捷径,并用真实...

    ¥65.00

相关图书

Python一行流:像专家一样写代码

Christian Mayer (作者) 苏丹 (译者)

本书专注于从初学迈向进阶的Python编码技术:如何像专家一样写出优雅、准确、简洁高效的Python 单行代码;阅读任意一行Python 代码时,如何系统性地对...

¥89.00

剑指Offer(专项强化版):数据结构与算法名企面试题精讲

何海涛 (作者)

本书全面、系统地总结了在准备程序员面试过程中必备的数据结构与算法。本书首先详细讨论整数、数组、链表、字符串、哈希表、栈、队列、二叉树、堆和前缀树等常用的数据结构...

¥89.00

C++服务器开发精髓

张远龙 (作者)

本书从操作系统原理角度讲解进行C++服务器开发所需掌握的技术栈。全书总计9章,第1~2章讲解C++ 11/14/17新标准中的常用特性、新增类库,以及C++开发...

 

PHP编程(第4版)

Rasmus Lerdorf(拉斯马斯·勒多夫), Kevin Tatroe(凯文·塔特罗), Peter MacIntyre(彼得·麦金太尔) (作者) 卢涛 (译者)

PHP是一种被广泛使用的Web编程语言,它简单易用,而且与时俱进,不断进化,提升性能。本书基于PHP 7.4,深入介绍 PHP编程技术,涵盖了 PHP 所有基本...

¥109.00

深入理解Spring Cloud与实战

方剑 (作者)

本书共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibaba和 Netflix组件,并且剖析S...

¥106.00

基于Kotlin的Spring Boot微服务实战

袁康 (作者)

本书介绍了Kotlin在Spring Boot微服务开发中的实践,并使用Kotlin作为开发语言,介绍了函数式编程思想、Kotlin的语法、Kotlin在常用中...

¥69.30