第1章 引言 1
1.1 计算机出了什么问题? 3
1.2 程序究竟是什么? 5
第2章 缺失的科学 9
2.1 程序员也是设计师 12
2.2 软件设计的科学 13
2.3 为什么不存在软件设计科学 15
第3章 软件设计的推动力 19
第4章 未来 27
4.1 软件设计的方程式 29
4.1.1 价值 30
4.1.2 成本 31
4.1.3 维护 32
4.1.4 完整的方程式 33
4.1.5 化简方程式 33
4.1.6 你需要什么,不需要什么 34
4.2 设计的质量 36
4.3 不可预测的结果 37
第5章 变化 41
5.1 真实世界中程序的变化 43
5.2 软件设计的三大误区 46
5.2.1 缩写不必要的代码 46
5.2.2 代码难以修改 48
5.2.3 过分追求通用 51
5.3 渐进式开发及设计 53
第6章 缺陷与设计 55
6.1 如果这不是问题 57
6.2 避免重复 59
第7章 简洁 61
7.1 简洁与软件设计方程式 65
7.2 简洁是相对的 65
7.3 简洁到什么程度? 67
7.4 保持一致 69
7.5 可读性 71
7.5.1 命名 72
7.5.2 注释 73
7.6 简洁离不开设计 74
第8章 复杂性 77
8.1 复杂性与软件的用途 81
8.2 糟糕的技术 83
8.2.1 生存潜力 83
8.2.2 互通性 84
8.2.3 对品质的重视 84
8.2.4 其他原因 85
8.3 复杂性及错误的解决方案 85
8.4 复杂问题 86
8.5 应对复杂性 87
8.5.1 把某个部分变简单 89
8.5.2 不可解决的复杂性 90
8.6 推倒重来 90
第9章 测试 93
附录A 软件设计的规则 97
附录B 事实、规则、条例、定义 101