标题：CodeCraft编程匠艺:编写卓越的代码
版权信息
书 名: CodeCraft编程匠艺:编写卓越的代码 
作　者：(美国)(Goodliffe.P.)古德利弗
出版社： 电子工业出版社
出版时间： 2008
ISBN: 9787121069802
开本： 16
定价: 79.00 元
编辑推荐
《编程匠艺》中随处可见与编程语言无关、但是与所有开发人员都相关的建议，其内容遍及编程的各个要素，如代码风格、变量命名、错误处理和安全性等。不仅如此，它还触及了一些更广泛的现实世界编程问题，如有效的团队合作、开发过程和文档编写，等等。《CodeCraft编程匠艺--编写卓越的代码》各章末尾均有一个问题和答案部分，这些部分回顾了各章中的一些关键概念，促使你像专家一样思考，从而使这《CodeCraft编程匠艺--编写卓越的代码》成为那些渴望作为团队的一分子、专业并高效地编程的新手们的一本绝佳的参考书。《CodeCraft编程匠艺--编写卓越的代码》将告诉你如何：
●在现实世界困难重重的情况下编写出优秀的代码；
●避免在工作场所出现灾难和人心涣散的情况；
●准确地评估你的能力，并找到提高的途径；
●采取有建设性的态度，并遵从最佳的做法。
第1章善于防守
1.1向优秀的代码前进4
1.2设想：最坏的选择4
1.3什么是防御性编程6
1.4又大又坏的世界8
1.5防御性编程技巧8
1.5.1使用好的编码风格和合理的设计9
1.5.2不要仓促地编写代码9
1.5.3不要相信任何人10
1.5.4编码的目标是清晰，而不是简洁10
1.5.5不要让任何人做他们不该做的修补工作11
1.5.6编译时打开所有警告开关11
1.5.7使用静态分析工具12
1.5.8使用安全的数据结构12
1.5.9检查所有的返回值13
1.5.10审慎地处理内存（和其他宝贵的资源）13
1.5.11在声明位置初始化所有变量14
1.5.12尽可能推迟一些声明变量14
1.5.13使用标准语言工具14
1.5.14使用好的诊断信息日志工具15
1.5.15审慎地进行强制转换15
1.5.16细则15
1.6约束16
1.6.1约束的内容17
1.6.2移除约束18
1.7总结20
1.8另请参见20
1.9思考21
1.9.1深入思考21
1.9.2结合自己22
第2章精心布局
2.1什么是关键24
2.2了解你的读者25
2.3什么是好的样式26
2.4使用括号26
2.4.1K&R括号风格27
2.4.2悬挂式的括号风格27
2.4.3缩进的括号风格29
2.4.4其他的括号风格29
2.5主宰一切的风格30
2.6内部风格（以及在哪里使用它们）31
2.7设立标准33
2.8正义的战争35
2.9总结35
2.10另请参见37
2.11思考37
2.11.1深入思考37
2.11.2结合自己38
第3章名正言顺3.1为什么我们应该恰当地命名呢41
3.2我们对什么进行命名41
3.3名字游戏42
3.3.1描述性42
3.3.2技术上正确42
3.3.3符合语言习惯43
3.3.4恰当43
3.4具体细节44
3.4.1命名变量44
3.4.2命名函数45
3.4.3命名类型46
3.4.4命名名字空间47
3.4.5命名宏48
3.4.6命名文件48
3.5玫瑰不叫玫瑰49
3.5.1保持前后一致50
3.5.2利用上下文51
3.5.3使用对你有利的名称51
3.6总结52
3.7另请参见53
3.8思考53
3.8.1深入思考54
3.8.2结合自己55
第4章不言自明4.1自文档化的代码59
4.2编写自文档化代码的技术61
4.2.1使用好的样式编写简单的代码61
4.2.2选择有意义的名称62
4.2.3分解为原子函数62
4.2.4选择描述性的类型63
4.2.5命名常量63
4.2.6强调重要的代码64
4.2.7分组相关信息64
4.2.8提供文件头64
4.2.9恰当地处理错误65
4.2.10编写有意义的注释65
4.3实用的自文档化方法66
4.3.1文学性编程66
4.3.2文档化工具67
4.4总结69
4.5另请参见70
4.6思考71
4.6.1深入思考71
4.6.2结合自己72
第5章随篇注释5.1什么是代码注释74
5.2注释看上去是什么样的75
5.3多少注释是恰当的75
5.4注释中应该有些什么76
5.4.1解释为什么，而不是怎么样76
5.4.2不要描述代码76
5.4.3不要取代代码76
5.4.4确保注释有用77
5.4.5避免分心78
5.5实践79
5.6从审美的角度看注释80
5.6.1一致性80
5.6.2清晰的块注释80
5.6.3缩进的注释81
5.6.4行尾注释81
5.6.5帮助你阅读代码81
5.6.6选择一种维护成本较低的风格82
5.6.7分隔板82
5.6.8标志83
5.6.9文件头注释83
5.7使用注释84
5.7.1帮助你编写例行程序84
5.7.2错误修正通告85
5.7.3注释过时85
5.7.4维护和空洞无物的注释86
5.8总结86
5.9另请参见87
5.10思考87
5.10.1深入思考88
5.10.2结合自己88
第6章人非圣贤6.1从何而来90
6.2错误报告机制91
6.2.1不报告91
6.2.2返回值92
6.2.3错误状态变量93
6.2.4异常93
6.2.5信号95
6.3检测错误95
6.4处理错误96
6.4.1何时处理错误97
6.4.2可能的反应98
6.4.3代码示例100
6.5使地狱浮现104
6.6管理错误105
6.7总结106
6.8另请参见107
6.9思考107
6.9.1深入思考107
6.9.2结合自己108
目录 代码的神秘生命
第7章欲善其事，先利其器7.1什么是软件工具112
7.2为什么要在意工具114
7.3使工具发挥作用115
7.3.1了解它能做些什么115
7.3.2学习如何驾驭它116
7.3.3了解它适合什么任务116
7.3.4检查它是否可用116
7.3.5找到了解更多信息的途径117
7.3.6查明新版本何时出现117
7.4哪个工具117
7.4.1源代码编辑工具118
7.4.2代码构建工具120
7.4.3调试和调查工具123
7.4.4语言支持工具124
7.4.5其他工具125
7.5总结126
7.6另请参见127
7.7思考128
7.7.1深入思考128
7.7.2结合自己128
第8章测试时代8.1反思现实131
8.2谁、是什么、何时以及为什么132
8.2.1我们为什么要测试132
8.2.2谁来进行测试133
8.2.3测试的内容有些什么133
8.2.4何时进行测试134
8.3测试并不难……135
8.4测试的类型138
8.5选择单元测试用例142
8.6为测试而设计144
8.7看！不要用手！144
8.8面对故障该怎么办145
8.9你能管理它吗146
8.9.1缺陷跟踪系统147
8.9.2bug审查148
8.10总结149
8.11另请参见150
8.12思考150
8.12.1深入思考150
8.12.2结合自己151
第9章寻找缺陷9.1生活的真相154
9.2bug的种类155
9.2.1从远处看155
9.2.2从近处看156
9.2.3从更近处看158
9.3消灭害虫160
9.3.1地下之路161
9.3.2地上之路161
9.4搜寻bug162
9.4.1编译时错误162
9.4.2运行时错误164
9.5如何修正缺陷167
9.6预防169
9.7除蜂剂、驱虫剂、捕蝇纸169
9.7.1调试器169
9.7.2内存访问校验器170
9.7.3系统调用跟踪170
9.7.4内核转储170
9.7.5日志170
9.8总结171
9.9另请参见172
9.10思考173
9.10.1深入思考173
9.10.2结合自己173
第10章代码构建10.1语言障碍176
10.1.1解释型语言177
10.1.2编译型语言178
10.1.3字节编译型语言179
10.2小题大做179
10.3构建软件版本181
10.4怎样才算是一个优秀的构建系统184
10.4.1简洁184
10.4.2一致184
10.4.3可重复和可靠185
10.4.4原子性186
10.4.5能够应付错误187
10.5技术细节187
10.5.1目标的选择187
10.5.2内务处理189
10.5.3依赖关系189
10.5.4自动构建190
10.5.5构建配置191
10.5.6递归地使用make192
10.6请发布我吧192
10.7构建大师是全能的吗194
10.8总结195
10.9另请参见195
10.10思考196
10.10.1深入思考196
10.10.2结合自己196
第11章追求速度11.1优化是什么200
11.2是什么使代码不尽如人意201
11.3为什么不进行优化呢202
备选方案204
11.4为什么要进行优化205
11.5优化的具体细节206
11.5.1证明你需要进行优化206
11.5.2找出运行得最慢的代码207
11.5.3测试代码208
11.5.4优化代码209
11.5.5优化之后209
11.6优化的技术210
11.6.1设计更改210
11.6.2代码更改213
11.7编写高效的代码217
11.8总结219
11.9另请参见219
11.10思考220
11.10.1深入思考220
11.10.2结合自己221
第12章不安全感综合症12.1危险224
12.2敌人226
12.3借口，都是借口228
12.4感到很脆弱229
12.4.1不安全的设计和体系结构229
12.4.2缓冲溢出229
12.4.3嵌入的查询字符串230
12.4.4竞争状况231
12.4.5整数溢出231
12.5防范措施232
12.5.1系统安装技术233
12.5.2软件设计技术234
12.5.3代码实现技术235
12.5.4规程技术236
12.6总结236
12.7另请参见237
12.8思考238
12.8.1深入思考238
12.8.2结合自己238
目录  代码的形成过程
第13章崇尚设计13.1边设计边编程242
13.2我们要设计什么243
13.3为什么这么忙乱244
13.4良好的软件设计245
13.4.1简洁246
13.4.2优雅247
13.4.3模块化247
13.4.4良好的接口248
13.4.5可扩展性251
13.4.6避免重复251
13.4.7可移植性252
13.4.8符合语言习惯252
13.4.9良好地文档化253
13.5如何设计代码253
13.5.1设计方法和过程254
13.5.2设计工具255
13.6总结257
13.7另请参见258
13.8思考258
13.8.1深入思考258
13.8.2结合自己259
第14章软件体系结构14.1什么是软件体系结构262
14.1.1软件蓝图262
14.1.2视图263
14.1.3在何时和何处进行体系结构设计264
14.1.4用体系结构来做什么265
14.1.5关于组件和连接266
14.2什么是良好的体系结构268
14.3体系结构风格269
14.3.1没有体系结构269
14.3.2分层的体系结构270
14.3.3管道和过滤器体系结构271
14.3.4客户端/服务器体系结构271
14.3.5基于组件的体系结构273
14.3.6框架274
14.4总结275
14.5另请参见276
14.6思考276
14.6.1深入思考276
14.6.2结合自己277
第15章改良与革命15.1软件腐烂281
15.2警告信号282
15.3代码是如何成长的284
15.4相信不可能之事286
15.5对此我们可以做些什么287
15.5.1编写新代码287
15.5.2维护现有代码288
15.6总结290
15.7另请参见290
15.8思考291
15.8.1深入思考292
15.8.2结合自己292
目录 一群程序员
第16章代码猴子16.1各种各样的猴子296
16.1.1卖力工作的程序员297
16.1.2代码猴子298
16.1.3权威299
16.1.4半权威300
16.1.5傲慢的天才300
16.1.6牛仔302
16.1.7规划者302
16.1.8老前辈303
16.1.9狂热者304
16.1.10单线条程序员305
16.1.11拖沓者306
16.1.12勉强的团队领导306
16.1.13你307
16.2理想的程序员308
16.3那么该怎么办308
16.4最愚蠢的人309
16.5总结310
16.6另请参见310
16.7行为表格311
16.8思考312
16.8.1深入思考312
16.8.2结合自己312
第17章团结就是力量17.1我们的团队——概览316
17.2团队组织318
17.2.1管理方法318
17.2.2责任划分318
17.2.3组织和代码结构320
17.3团队合作工具320
17.4团队疾病322
17.4.1巴别塔322
17.4.2独裁制324
17.4.3民主制325
17.4.4卫星站327
17.4.5大峡谷329
17.4.6流沙330
17.4.7旅鼠332
17.5良好团队合作的个人技巧和特点333
17.5.1沟通333
17.5.2谦虚334
17.5.3处理冲突334
17.5.4学习和适应能力335
17.5.5了解你的不足之处336
17.6团队合作原则336
17.6.1集体代码所有制336
17.6.2尊重别人的代码337
17.6.3编码准则337
17.6.4定义成功337
17.6.5定义责任338
17.6.6避免倦怠338
17.7团队的生命周期339
17.7.1团队的创建339
17.7.2团队的成长341
17.7.3团队合作342
17.7.4团队结束343
17.8总结345
17.9另请参见346
17.10行为表格347
17.11思考348
17.11.1深入思考348
17.11.2结合自己348
第18章安全措施18.1我们的责任350
18.2源代码控制351
18.2.1修订控制352
18.2.2访问控制353
18.2.3处理代码库354
18.2.4在代码树上创建分支354
18.2.5源代码控制简史356
18.3配置管理356
18.4备份358
18.5发布源代码359
18.6应该将源代码放在哪里360
18.7总结361
18.8另请参见362
18.9思考363
18.9.1深入思考363
18.9.2结合自己363
目录 开发过程的组成部分第一部分
第19章注意细节19.1规范到底是什么368
19.2规范的类型369
19.2.1需求规范371
19.2.2功能规范373
19.2.3系统体系结构规范373
19.2.4用户界面规范374
19.2.5设计规范374
19.2.6测试规范375
19.3规范应当包含哪些内容376
19.4规范编写过程379
19.5我们为什么会不编写规范381
19.6总结383
19.7另请参见383
19.8思考384
19.8.1深入思考384
19.8.2结合自己384
第20章代码审查20.1什么是代码审查386
20.2何时进行审查387
20.2.1是否要进行审查388
20.2.2审查哪些代码389
20.3执行代码审查389
20.3.1代码审查会议390
20.3.2集成审查392
20.4审查你的态度393
20.4.1作者的态度393
20.4.2审查人员的态度394
20.5完美的代码395
20.6代码审查之外396
20.7总结397
20.8另请参见397
20.9清单398
20.10思考399
20.10.1深入思考399
20.10.2结合自己399
第21章时间估计21.1在黑暗中摸索402
21.2为什么估计这么困难？403
21.3压力之下405
21.4实用的估计方法406
21.5计划游戏409
21.6坚持！412
21.7总结415
21.8另请参见415
21.9思考416
21.9.1深入思考416
21.9.2结合自己416
目录  从高处鸟瞰
第22章程序秘方22.1编程风格420
22.1.1结构化编程421
22.1.2面向对象的程序设计422
22.1.3函数式编程423
22.1.4逻辑编程424
22.2烹饪方法：做什么与怎样做424
22.3开发过程425
22.3.1混乱426
22.3.2瀑布模型427
22.2.3SSADM和PRINCE429
22.3.4V模型430
22.3.5原型设计430
22.3.6迭代和增量开发432
22.3.7螺旋模型432
22.3.8敏捷的方法433
22.3.9其他开发过程434
22.4已经够了！435
22.5选择一种过程436
22.6总结437
22.7另请参见438
22.8思考438
22.8.1深入思考438
22.8.2结合自己439
第23章编程领域大观23.1应用程序编程442
23.1.1塑装软件443
23.1.2定制应用程序444
23.2游戏编程445
23.3系统编程446
23.4嵌入式编程447
23.5分布式编程450
23.6网络应用程序编程451
23.7企业编程453
23.8数字编程454
23.9那又怎样455
23.10总结456
23.11另请参见456
23.12思考457
23.12.1深入思考457
23.12.2结合自己457
第24章下一步呢但下一步该做什么呢？460
答案和讨论463
参考书目559
索引564
……