中文名: 代码大全(第二版)
英文名: CODE COMPLETE, Second Edition
版本: PDF
发行日期: 2006年03月01日
地区: 大陆
对白语言: 普通话
简介:
【原出版社】 Microsoft Press
【作者】 (美)Steve McConnell
【译者】 金戈 汤凌 陈硕 张菲
【出版社】 电子工业出版社
【书号】 7-121-02298-2
【开本】 16开
【页码】 960
【出版日期】 2006-3-1
【版次】 2-3
基本内容:
代码大全(第二版)是著名IT畅销书作者 Steve McConnell十一年前的经典著作的全新演绎:第二版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。本书中所论述的技术不仅填补了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论你是什么背景,阅读本书都会让你在更短的时间内、更容易地写出更好的程序。
代码大全是我早在好几年前便已经阅读过的好书。这几年来我不知买过多少书籍,也清理过许多因为书房再也放不下的书籍,但是代码大全这本书始终占据着我书架上重要的位置而不曾移开过,因为好书是经得起时光考验的。
Borland公司大中华首席技术官(CTO) 李维
在众多的编程类书籍中,如果只让我挑一本书来阅读,那我一定选择《代码大全》,因为它是最不可或缺的。
《C++ Primer中文版(第三版)》译者 潘爱民
书籍目录:
第1章 欢迎进入软件构建的世界 3
1.1 什么是软件构建 3
1.2 软件构建为何如此重要 6
1.3 如何阅读本书 8
关键点 8
第2章 用隐喻来更充分地理解软件开发 9
2.1 隐喻的重要性 9
2.2 如何使用软件隐喻 11
2.3 常见的软件隐喻 13
软件中的书法:写作代码 13
软件的耕作法:培植
系统 14
软件的牡蛎养殖观点:系统生长 15
软件构建:建造软件 16
应用软件技术:智慧工具箱 20
组合各个隐喻 20
更多资源 20
关键点 21
第3章 三思而后行:前期准备 23
3.1 前期准备的重要性 24
前期准备适用于现代软件项目吗 25
准备不周全的诱因 25
关于开始构建之前要做前期准备的绝对有力且简明的论据 27
3.2 辨明你所从事的软件的类型 31
迭代开发法对前期准备的影响 33
在序列式开发法和迭代式开发法之间做出选择 35
3.3 问题定义的先决条件 36
3.4 需求的先决条件 38
为什么要有正式的需求 38
稳定需求的神话 39
在构建期间处理需求变更 40
3.5 架构的先决条件 43
架构的典型组成部分 45
3.6 花费在前期准备上的时间长度 55
更多资源 56
关键点 59
第4章 关键的“构建”决策 61
4.1 选择编程语言 61
语言描述 63
4.2 编程约定 66
4.3 你在技术浪潮中的位置 66
“深入一种语言去编程”的例子 68
4.4 选择主要的构建实践方法 69
关键点 70
第5章 软件构建中的设计 73
5.1 设计中的挑战 74
设计是一个险恶的问题 74
设计是个了无章法的过程(即使它能得出清爽的成果) 75
设计就是确定取舍和调整顺序的过程 76
设计受到诸多限制 76
设计是不确定的 76
设计是一个启发式过程 76
设计是自然而然形成的 76
5.2 关键的设计概念 77
软件的首要技术任务:管理复杂度 77
理想的设计特征 80
设计的层次 82
5.3 设计构造块:启发式方法 87
寻找现实世界中的对象 87
形成一致的抽象 89
封装实现细节 90
当继承能简化设计时就继承 91
隐藏秘密(信息隐藏) 92
找出容易改变的区域 97
保持松散耦合 100
查阅常用的设计模式 103
其他的启发式方法 105
关于设计启发的总结***** 108
使用启发式方法的原则 109
5.4 设计实践 110
迭代 110
分而治之 111
自上而下和自下而上的设计方法 111
建立试验性原型 114
合作设计 115
要做多少设计才够? 115
记录你的设计成果 117
5.5 对流行的设计方法的评论 118
更多资源 119
软件设计,一般性问题 119
软件设计理论 120
设计模式 120
广义的设计 121
标准 122
关键点 122
第6章 可以工作的类 125
6.1 类的基础:抽象数据类型 126
需要用到ADT的例子 126
使用ADT的益处 127
更多的ADT示例 129
在非面向对象环境中用ADT处理多份数据实例 131
ADT和类 133
6.2 良好的类接口 133
好的抽象 133
良好的封装 139
6.3 有关设计和实现的问题 143
包含(“有一个……”的关系) 143
继承(“是一个……”关系) 144
成员函数和数据成员 150
构造函数 151
6.4 创建类的原因 152
应该避免的类 155
总结:创建类的理由 155
与具体编程语言相关的问题 156
6.6 超越类:包 156
更多资源 159
关键点 160
第7章 高质量的子程序 161
7.1 创建子程序的正当理由 164
似乎过于简单而没必要写成子程序的操作 166
总结:创建子程序的理由 167
7.2 在子程序层上设计 168
7.3 好的子程序名字 171
7.4 子程序可以写多长 173
7.5 如何使用子程序参数 174
7.6 使用函数时要特别考虑的问题 181
什么时候使用函数,什么时候使用过程 181
设置函数的返回值 182
7.7 宏子程序和内联子程序 182
宏子程序在使用上的限制 184
内联子程序 184
关键点 186
第8章 防范式编程 187
8.1 保护程序免遭无效输入数据的破坏 188
8.2 断言 189
建立自己的断言机制 191
使用断言的指导建议 191
8.3 错误处理技术 194
健壮性与正确性 197
高层次设计对错误处理方式的影响 197
8.4 异常 198
8.5 隔离程序以免遭由错误造成的损害 203
隔离区与断言的关系 205
8.6 辅助调试代码 205
不要自动地把产品版本的限制强加于开发版本之上 205
尽早引入辅助调试的手段 206
采用冒进式编程 206
计划移除调试辅助代码 206
8.7 确定在产品代码中该保留多少防范式代码 209
8.8 防范式编程时保持防范 210
其他资源 212
关键点 213
第9章 伪代码编程过程 215
9.1 创建类和子程序的步骤概述 216
创建一个类的步骤 216
创建子程序的步骤 217
9.2 伪代码 218
9.3 通过伪代码编程过程创建子程序 220
设计子程序 225
编写子程序 225
检查代码 230
收尾工作 232
根据需要重复上述步骤 232
9.4 伪代码编程过程之外的其他方案 232
关键点 234
第10章 使用变量的一般事项 237
10.1 数据认知 238
数据认知测试 238
有关数据类型的其他资源 239
10.2 轻松掌握变量定义 239
隐式声明 239
10.3 变量初始化原则 240
10.4 作用域 244
使变量引用局部化 245
尽可能缩短变量的“存活”时间 246
减小作用域的一般原则 249
有关缩小变量作用域的说明 250
10.5 持续性 251
10.6 绑定时间 252
10.7 数据类型和控制结构之间的关系 254
10.8 为变量指定单一用途 255
关键点 258
第11章 变量名的力量 259
11.1 选择好变量名的注意事项 259
最重要的命名注意事项 260
以问题为导向 261
最适当的名字长度 262
变量名字的效果范围 262
变量名字中的计算值限定词 263
变量名字中的常用反义词 264
11.2 为特定类型的数据命名 264
为循环索引命名 265
为状态变量命名 266
为临时变量命名 267
为布尔变量命名 268
为枚举类型命名 269
为常量命名 270
11.3 命名规则的力量 270
为什么要有规则? 270
何时采用命名规则 271
正式程度 271
11.4 非正式命名规则 272
语言无关规则的指导原则 272
语言相关规则的指导原则 275
混合语言编程的注意事项 276
命名规则示例 276
11.5 标准前缀 279
用户自定义类型缩写 279
语义前缀 280
标准前缀的优点 281
11.6 创建具备可读性的短名称 282
一般的缩写指导原则 282
语音缩写 282
有关缩写的评论 282
11.7 应该避免的名称 285
关键点 289
第12章 基本数据类型 291
12.1 使用数的普遍规则 292
12.2 整数 293
12.3 浮点数 295
12.4 字符和字符串 297
C中的字符串 299
12.5 布尔变量 301
12.6 枚举类型 303
如果你的语言里没有枚举类型 307
12.7 命名常量 307
12.8 数组 310
12.9 创建你自己的类型(类型别名) 311
为什么创建自己的类型的示例是用Pascal和Ada写的? 314
创建自定义数据类型的指导原则 315
关键点 318
第13章 不常见的数据类型 319
13.1 结构 319
13.2 指针 323
用来理解指针的例子 323
使用指针的一般技巧 325
C++指针 332
C指针 334
13.3 全局数据 335
与全局数据有关的常见问题 335
使用全局数据的理由 338
只有万不得已时才使用全局数据 339
用访问子程序来取代全局数据 339
如何降低使用全局数据的风险 342
其他资源 343
关键点 344
第14章 组织直线型代码 347
14.1 必须有明确顺序的语句 347
14.2 顺序无关的语句 351
使代码易于自上而下的阅读 351
把相关的语句组织在一起 352
关键点 353
第15章 使用条件语句 355
15.1 if语句 355
简单if-then语句 355
if-then-else语句串 358
15.2 case语句 361
为case选择最有效的排序 361
使用case语句的提示 361
关键点 366
第16章 控制循环 367
16.1 选择循环的种类 367
什么时候使用while循环 368
什么时候用带退出的循环 369
何时使用for循环 372
何时使用foreach循环 372
16.2 循环控制 373
进入循环 373
处理好循环体 375
退出循环 377
检查端点 381
使用循环变量 382
循环应该有多长 385
16.3 轻松创建循环由内而外 385
16.4 循环和数组的关系 387
关键点 389
第17章 不常见的控制结构 391
17.1 子程序中的多个返回 392
17.2 递归 393
递归的例子 394
使用递归的技巧 396
17.3 goto 398
反对goto的论点 398
支持goto的观点 399
关于goto的虚假辩论 400
错误处理和goto 401
goto和在else子句中的共享代码 406
goto使用原则总结 407
17.4 对不常见控制结构的看法 408
其他资源 408
关键点 410
第18章 表
驱动方法 411
18.1 表驱动方法使用总则 411
使用表驱动方法的两个问题 412
18.2 直接访问表 413
示例:一个月中的天数(Days-in-Month) 413
示例:保险费率 415
例子:灵活的消息格式(Flexible-Message-Format) 416
构造查询键值 423
18.3 索引表访问(Indexed Access Tables) 425
18.4 阶梯访问表 426
18.5 表查询的其他示例 429
关键点 430
第19章 一般控制问题 431
19.1 布尔表达式 431
用true和false做布尔判断 431
简化复杂的表达式 433
编写肯定形式的布尔表达式 435
用括号使布尔表达式更清晰 437
理解布尔表达式是如何求值的 438
按照数轴的顺序编写数值表达式 440
与0比较的指导原则 441
布尔表达式的常见问题 442
19.2 复合语句(块) 443
19.3 空语句 444
19.4 驯服危险的深层嵌套 445
对减少嵌套层次的技术的总结 453
19.5 编程基础:结构化编程 454
结构化编程的三个组成部分 454
19.6 控制结构与复杂度 456
复杂度的重要性 457
降低复杂度的一般原则 457
其它类型的复杂度 459
关键点 460
第20章 软件质量概述 463
20.1 软件质量的特性 463
20.2 改善软件质量的技术 466
开发过程 467
设置目标 468
20.3 不同质量保障技术的相对效能 469
缺陷检测率 469
找出缺陷的成本 472
修正缺陷的成本 472
20.4 什么时候进行质量保证工作 473
20.5 软件质量的普遍原理 474
推荐读物 476
相关标准 477
关键点 477
第21章 协同构造 479
21.1 协同开发实践概要 480
协同构造是其他质量保证技术的补充 480
协同构造有利于传授公司文化以及编程专业知识 482
集体所有权适用于所有形式的协同构造 482
在构造前后都应保持协作 483
21.2 结对编程 483
成功运用结对编程的关键 483
结对编程的好处 484
21.3 正式检查 485
你期望检查能够带来什么结果 485
检查中的人员角色 486
检查的一般步骤 487
检查中的自尊心 490
检查和代码大全 490
检查总结 491
21.4 其他类型的协同开发实践 492
走查 492
代码阅读 494
大型演示 495
协同构造技术的比较 495
参考资料 496
结对编程 496
检查 496
相关标准 497
关键点 497
第22章 开发者测试 499
22.1 开发者测试在软件质量中的角色 500
构造中测试 502
22.2 推荐的开发者测试方法 503
先测试还是后测试 503
开发者测试的局限性 504
22.3 测试技巧锦囊 505
不完整的测试 505
结构化的基础测试 505
数据流测试 509
等价类划分 512
猜测错误 513
边界值分析 513
几类坏数据 514
几类好数据 515
采用容易手工检查的测试用例 516
22.4 典型错误 517
哪些类包含最多的错误? 517
错误的分类 518
不完善的构造过程引发错误所占的比例 520
你期望能发现多少错误 521
测试本身的错误 522
22.5 测试支持工具 523
为测试各个类构造脚手架 523
Diff工具 524
测试数据生成器 524
覆盖率监视器 526
数据记录器/日志记录器 526
符号调试工具 526
系统乾扰器 527
错误数据库 527
22.6 改善测试过程 528
有计划的测试 528
重新测试(回归测试) 528
自动化测试 528
22.7 保留测试记录 529
个人测试记录 530
推荐读物 530
测试 530
测试脚手架 531
测试优先的开发 531
相关标准 532
关键点 533
第23章 调 试 535
23.1 调试概述 535
调试在软件质量中所扮演的角色 536
调试效率的巨大差异 536
让你有所收获的缺陷 537
一种效率低下的调试方法 539
23.2 寻找缺陷 540
科学的调试方法 540
寻找缺陷的一些小建议 544
语法错误 549
23.3 修正缺陷 550
23.4 调试中的心理因素 554
心理取向如何导致调试时的盲目 554
“心理距离”在调试中的作用 556
23.5 调试工具明显的和不那么明显的 557
源代码比较工具 556
编译器的警告消息 557
扩展的语法和逻辑检查 557
执行性能分析器 557
测试框架 558
调试器 558
其它资源 561
关键点 562
第24章 重构 563
24.1 软件进化的类型 564
软件进化的哲学 564
24.2 重构简介 565
重构的理由 565
拒绝重构的理由 571
24.3 特定的重构 571
数据级的重构 571
语句级的重构 572
子程序级重构 573
类实现的重构 574
类接口的重构 575
系统级重构 576
24.4
安全的重构 579
不宜重构的情况 582
24.5 重构策略 582
推荐读物 585
关键点 585
第25章 代码调整策略 587
25.1 性能概述 588
质量特性和性能 588
性能和代码调整 588
25.2 代码调整简介 591
Pareto法则 592
一些无稽之谈 593
何时调整代码 596
编译器优化 596
25.3 蜜糖和哥斯拉 597
常见的低效率之源 598
常见操作的相对效率 601
25.4 性能测量 603
性能测量应当精确 604
25.5 反复调整 605
25.6 代码调整方法总结 606
推荐读物 606
算法和数据类型 607
关键点 608
第26章 代码调整方法 609
26.1 逻辑 610
在知道答案后停止判断 610
按照出现频率来调整判断顺序 612
相似逻辑结构之间的性能比较 614
用查找表替代复杂表达式 614
使用惰性求值 615
26.2 循环 616
将判断外提(Unswitching) 616
合并循环 617
unrolling展开 618
尽可能减少再循环内部做的工作 620
哨兵值 621
把最忙的循环放在最内层 623
削减强度 623
26.3 数据变换 624
使用整型数而不是浮点数 625
数组维度尽可能少 625
尽可能减少数组引用 626
使用辅助索引 627
使用缓存机制 628
26.4 表达式 630
利用代数恒等式 630
削弱运算强度 630
编译时初始化 632
小心系统函数 633
使用正确的常量类型 635
预先算出结果 635
删除公共子表达式 638
26.5 子程序 639
将函数重写为内联 639
26.6 用低级语言重写代码 640
26.7 变得越多,事情反而更没变 643
推荐读物 644
关键点 645
第27章 程序规模对“构筑”的影响 649
27.1 交流和规模 650
27.2 项目规模的范围 651
27.3 项目规模对错误的影响 651
27.4 项目规模对生产率的影响 653
27.5 项目规模对开发活动的影响 654
活动比例和项目规模 654
程序、产品、系统和系统产品 656
方法论和规模 657
额外资源 658
关键点 659
第28章 管理“构筑” 649
28.1 鼓励良好的编码实践 661
设定标准的考虑事项 662
鼓励良好的编码实践的技术 662
本书的角色 664
28.2 配置管理 664
什么是配置管理? 664
需求变更和设计变更 666
软件代码变更 667
工具版本 668
机器配置 668
备份计划 669
有关配置管理的额外资源 670
28.3 评估“构筑”进度表 671
评估的方法 671
评估“构筑”的工作量 673
对进度的影响 674
评估与控制 675
如果你落后了该怎么办 675
有关软件评估的额外资源 677
28.4 度量 677
有关软件度量的额外资源 679
28.5 把程序员当人看 680
程序员们怎样花费时间? 681
性能差异与质量差异 681
信仰问题 683
物理环境 684
有关“把程序员当人看”的额外资源 685
28.6 管理你的管理者 686
有关管理构造的额外资源 687
相关标准 687
关键点 688
第29章 集成 689
29.1 集成方式的重要性 689
29.2 集成频率阶段式集成还是增量集成 691
阶段式集成 691
增量集成 692
增量集成的益处 693
29.3 增量集成的策略 694
自顶向下集成 694
自底向上集成 697
三明治集成 698
风险导向的集成 699
功能导向的集成 700
T-型集成 701
集成方法小结 702
29.4 Daily Build与冒烟测试 702
哪种项目能用daily build过程? 706
持续集成 706
额外资源 707
关键点 708
第30章 编程工具 709
30.1 设计工具 710
30.2 源代码工具 710
编辑 710
分析代码质量 713
重构源代码 714
Version Control 715
数据词典 715
30.3 可执行码工具 716
产生目标码 716
除错 719
测试 719
代码微调 720
30.4 工具导向的环境 720
30.5 打造你自己的编程工具 721
项目特有的工具 721
脚本 722
30.6 工具幻境 722
额外资源 724
关键点 725
第31章 布局与风格 729
31.1 基本原则 730
布局的极端情况 730
格式化的基本原理 732
人和计算机对程序的解读 732
好布局有什么用? 733
把布局作为一种信仰 735
良好布局的目标 735
31.2 布局技术 736
空白区 736
括号 738
31.3 布局风格 738
纯块结构 738
模仿纯块结构 740
使用begin - end对(大括号)指定块边界 742
行尾布局 743
哪种风格最优? 745
31.4 控制结构的布局 745
格式化控制结构块的要点 746
其他考虑 747
31.5 单条语句的布局 753
语句长度 753
用空格使语句显得清楚 753
格式化后续行 754
每行仅写一条语句 758
数据声明的布局 761
31.6 注释的布局 763
31.7 子程序的布局 766
31.8 类的布局 768
类接口的布局 768
类实现的布局 768
文件和程序布局 771
更多资源 774
关键点 775
第32章 自说明代码 777
32.1 外部文档 777
32.2 编程风格作文档 778
32.3 注释或不注释 781
32.4 高效注释之关键 785
注释种类 786
高效注释 788
最佳注释量 792
32.5 注释技术 792
注释单行 792
注释代码段 795
注释数据声明 802
注释控制结构 804
注释子程序 805
注释类、文件和程序 809
32.6 IEEE标准 813
软件质量保证标准 813
更多资源 815
关键点 817
第33章 个人性格 819
33.1 个人性格是否和本书话题无关 820
33.2 聪明和谦虚 821
33.3 求知欲 822
33.4 诚实 826
33.5 交流与合作 828
33.6 创造力和纪律 829
33.7 偷懒 830
33.8 不像你想象中那样起作用的性格 830
矜持 831
经验 831
编程狂人 832
33.9 习惯 833
更多资源 834
关键点 835
第34章 软件开发艺术的有关问题 837
34.1 克服复杂性 837
34.2 精选编程过程 839
34.3 为人写程序,其次才是为机器 841
34.4 以所用语言编程,但思路不受其约束 843
34.5 借助规范集中注意力 844
34.6 基于问题域编程 845
将程序划分为不同层次的抽象 845
34.7 “当心落石” 848
34.8 反复,再反复 850
34.9 不要顽固不化 851
判断 851
折中主义 851
试验 852
关键点 853
第35章 何处有更多信息 837
35.1 关于软件创建的信息 858
35.2 创建之外的话题 861
综述资料 861
软件工程综览 863
其他注释过的参考书目 864
35.3 期刊 866
初级程序员杂志 866
高级程序员杂志 866
专题出版物 869
35.4 软件开发者的读书计划 870
入门级 870
熟练级 872
精通级 874
35.5 参加专业组织 875
申明:已通过安全检测
杀毒软件: McAfee VirusScan Enterprise
版本: 8.5.0i
病毒库时间:2006-12-19
常驻: DonkeyServer No. 2
开源时间: 24小时在线
《代码大全(第二版)》(CODE COMPLETE, Second Edition)PDF评论