《代码大全2(纪念版)》简介:
《软件开发》杂志Jolt大奖
大而全,洞悉软件构建精髓
优而先,兼顾行业实践研究
奠定硬核技术领导力的经典
庸常变身卓越的实用性指导
《代码大全2》是著名科技类作家史蒂夫·麦康奈尔的经典著作,是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟时代潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。本书所论述的技术不仅填补了初级与中高级编程技术之间的空白,而且也为程序员提供了一个有关编程技巧的信息来源。
本书的缘起与使命,响应计算机科学与技术委员会的报告,植根于“软件工程参考手册”这个基本的概念,同时兼顾软件质量和研发效能,对已有的高效软件工程实践进行全面收集、萃取、分类和传播(CSTB 1990, McConnell 1997a)。
这本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。无论是什么背景的读者,阅读本书都有助于在更短的时间内、更容易地写出更好、更简洁、更优雅的程序。
《代码大全2(纪念版)》摘录:
设计是一个启发式过程 隐喻是启示而不是算法 典型情况下需求会有多少改动?IBM和其他公司的研究发现,平均水平的项目在开发过程中,需求会有25%的变化(Boehm 1981,Jones 1994,Jones 2000)。在典型的项目中,需求变更导致的返工占到返工总量的75%到85%(Leffingwell 1997,Wiegers 2003)。 注意项目的商业案例:有些需求作为功能特色来看是不错的想法,但是当你评估“增加的商业价值”时就会觉得它是个糟透了的主意。 一个好的项目规划者,应能尽早清楚项目中的主要风险,以使大部分工作能平稳进行。
《代码大全2(纪念版)》目录:
第Ⅰ部分奠定基础
第1章 欢迎来到软件构建的世界 003
第2章 通过隐喻更充分地理解软件开发 009
第3章 谋定而后动:前期准备 023
第4章 关键的构建决策 057
第II部分高质量的代码
第5章 软件构建的设计 069
第6章 可以工作的类 121
第7章 高质量的子程序 157
第8章 防御式编程 187
第9章 伪代码编程过程 215
第Ⅲ部分变量
第10章 变量使用中的常规问题 239
第11章 变量名称的威力 263
第12章 基本数据类型 295
第13章 不常见的数据类型 323
第Ⅳ部分语句
第14章 直线型代码的组织 353
第15章 使用条件语句 361
第16章 控制循环 373
第17章 不常见的控制结构 395
第18章 表驱动法 417
第19章 常规控制问题 437
第Ⅴ部分代码改进
第20章 软件质量概述 469
第21章 协同构建 483
第22章 开发人员测试 503
第23章 调试 541
第24章 重构 569
第25章 代码调优策略 591
第26章 代码调优技术 613
第Ⅵ部分系统化考虑
第27章 程序规模对构建的影响 651
第28章 管理构建 663
第29章 集成 693
第30章 编程工具 715
第Ⅶ部分软件匠艺
第31章 代码的布局和风格 733
第32章 自文档代码 781
第33章 个人性格 821
第34章 关于软件匠艺 837
第35章 更多信息来源 853
详细目录
第Ⅰ部分奠定基础
第1章 欢迎来到软件构建的世界 003
1.1什么是软件构建 003
1.2软件构建为何如此重要 006
1.3如何阅读本书 008
第2章 通过隐喻更充分地
理解软件开发 009
2.1隐喻的重要性 009
2.2如何使用软件隐喻 012
2.3常见的软件隐喻 013
第3章 谋定而后动:前期准备 023
3.1前期准备的重要性 024
3.2确定要开发什么类型的软件 030
3.3定义问题的先决条件 034
3.4需求的先决条件 036
3.5架构的先决条件 041
3.6前期准备所花费的时间 052
第4章 关键的构建决策 057
4.1编程语言的选择 057
4.2编程约定 062
4.3判断个人处于技术浪潮中的哪个阶段 062
4.4选择重要的构建实践 065
第II部分高质量的代码
第5章 软件构建的设计 069
5.1设计挑战 070
5.2关键设计概念 073
5.3设计构建基块:启发式方法 083
5.4设计实践 107
5.5点评各种流行的方法论 115
第6章 可以工作的类 121
6.1类的基础:抽象数据类型(ADT) 122
6.2良好的类接口 129
6.3设计和实现问题 139
6.4创建类的理由 149
6.5语言特定问题 153
6.6超越类:包 153
第7章 高质量的子程序 157
7.1创建子程序的正当理由 160
7.2子程序级别的设计 165
7.3好的子程序名称 169
7.4一个子程序应该有多长 171
7.5如何使用子程序参数 173
7.6函数使用中的特别注意事项 180
7.7宏子程序和内联子程序 182
第8章 防御式编程 187
8.1保护程序,
使其免受无效输入的影响 188
8.2断言 189
8.3错误处理技术 194
8.4异常 198
8.5隔离程序,使之包容
由错误造成的损害 203
8.6调试辅助代码 205
8.7确定在生产代码中
保留多少防御式代码 209
8.8对防御式编程采取防御的姿态 211
第9章 伪代码编程过程 215
9.1类和子程序构建步骤总结 215
9.2面向专家的伪代码 218
9.3使用PPP构建子程序 220
9.4PPP的替代方案 233
第Ⅲ部分变量
第10章 变量使用中的常规问题 239
10.1数据扫盲 240
10.2简化变量声明 241
10.3变量初始化指南 242
10.4作用域 247
10.5持久性 254
10.6绑定时间 255
10.7数据类型和控制结构之间的关系 257
10.8每个变量只有一个用途 258
第11章 变量名称的威力 263
11.1选择好名称的注意事项 263
11.2特定数据类型的命名 269
11.3命名规范的威力 275
11.4非正式的命名规范 276
11.5前缀的标准化 283
11.6创建可读的短名称 286
11.7变量名称避坑指南 289
第12章 基本数据类型 295
12.1一般的数字 296
12.2整型 297
12.3浮点型 299
12.4字符和字符串 302
12.5布尔变量 305
12.6枚举类型 307
12.7具名常量 312
12.8数组 314
12.9创建自定义类型(类型别名) 316
第13章 不常见的数据类型 323
13.1结构体 323
13.2指针 327
13.3全局数据 340
第Ⅳ部分语句
第14章 直线型代码的组织 353
14.1顺序攸关的语句 353
14.2顺序无关的语句 356
第15章 使用条件语句 361
15.1if语句 361
15.2case语句 367
第16章 控制循环 373
16.1选择循环类型 373
16.2控制循环 379
16.3轻松创建循环:由内而外 391
16.4循环和数组的对应关系 393
第17章 不常见的控制结构 395
17.1子程序中的多个返回点 395
17.2递归 397
17.3goto语句 402
17.4众说纷纭,谈谈不常见的控制结构 413
第18章 表驱动法 417
18.1表驱动法使用总则 417
18.2直接访问表 419
18.3索引访问表 431
18.4阶梯访问表 433
18.5表查询的其他示例 436
第19章 常规控制问题 437
19.1布尔表达式 437
19.2复合语句(语句块) 448
19.3空语句 449
19.4驾驭深层嵌套 451
19.5编程基础:结构化编程 460
19.6控制结构与复杂度 462
第Ⅴ部分代码改进
第20章 软件质量概述 469
20.1软件质量的特性 469
20.2改进软件质量的技术 472
20.3质量保证技术的相对效能 475
20.4何时进行质量保证 479
20.5软件质量的普遍原理 479
第21章 协同构建 483
21.1协同开发实践概述 484
21.2结对编程 487
21.3正式审查 489
21.4其他类型的协同开发实践 496
第22章 开发人员测试 503
22.1开发者测试
对软件质量所起的作用 504
22.2开发人员测试的推荐方法 507
22.3一些测试技巧 509
22.4典型错误 522
22.5测试支持工具 528
22.6改进测试 534
22.7维护测试记录 535
第23章 调试 541
23.1调试问题概述 541
23.2发现缺陷 546
23.3修复缺陷 557
23.4调试中的心理因素 560
23.5那些显而易见和
不太明显的调试工具 563
第24章 重构 569
24.1软件演变的类型 570
24.2重构简介 571
24.3特定的重构 577
24.4安全重构 585
24.5重构策略 587
第25章 代码调优策略 591
25.1性能概述 592
25.2代码调优简介 595
25.3各式各样的臃肿和蜜糖 601
25.4度量 607
25.5迭代 608
25.6代码调优方法总结 609
第26章 代码调优技术 613
26.1逻辑 614
26.2循环 619
26.3数据变换 628
26.4表达式 633
26.5子程序 642
26.6用低级语言重新编码 643
26.7改得越多,越不会有大的改观 646
第Ⅵ部分系统化考虑
第27章 程序规模对构建的影响 651
27.1沟通和规模 651
27.2项目规模的范围 652
27.3项目规模对错误的影响 653
27.4项目规模对生产力的影响 655
27.5项目规模对开发活动的影响 656
第28章 管理构建 663
28.1鼓励良好的编码实践 664
28.2配置管理 666
28.3评估构建进度表 673
28.4度量 679
28.5以人为本,善待每一位程序员 683
28.6向上管理 689
第29章 集成 693
29.1集成方法的重要性 693
29.2集成的频率,阶段式还是增量式 695
29.3增量式集成策略 698
29.4每日构建和冒烟测试 707
第30章 编程工具 715
30.1设计工具 716
30.2源代码工具 716
30.3可执行码工具 721
30.4面向工具的环境 726
30.5自己动手写编程工具 726
30.6工具的幻境 728
第Ⅶ部分软件匠艺
第31章 代码的布局和风格 733
31.1基本理论 734
31.2布局技术 741
31.3布局风格 743
31.4控制结构的布局 750
31.5单条语句的布局 757
31.6注释的布局 768
31.7子程序的布局 771
31.8类的布局 772
第32章 自文档代码 781
32.1外部文档 781
32.2编程风格即文档 782
32.3注释,还是不注释 785
32.4高效注释的关键 788
32.5注释的技术 795
32.6IEEE标准 815
第33章 个人性格 821
33.1个人性格与本书主题有关 822
33.2聪明与谦卑 823
33.3好奇心 824
33.4理性诚实 827
33.5沟通与合作 830
33.6创造力与规范 830
33.7懒惰 831
33.8没有想象中那么重要的性格因素 832
33.9习惯 833
第34章 关于软件匠艺 837
34.1征服复杂性 837
34.2优选开发过程 839
34.3编写程序时,先考虑人,
再考虑机器 840
34.4深入语言去编程,
而不是用语言来编程 842
34.5借助于规范来保持专注 843
34.6面向问题域编程 844
34.7 当心落石 846
34.8迭代,迭代,迭代,
重要的事情说三遍 848
34.9警惕编程中的执念 849
试验 851
第35章 更多信息来源 853
35.1与软件构建相关的信息 853
35.2软件构建之外的话题 854
35.3出版物 856
35.4软件开发者的阅读计划 857
35.5加入专业组织 859
参考文献 861
· · · · · ·