结束语 · 令人向往、激动人心和充满乐趣的 50 年
写完十九章之后,这一节只有两页半。作者没有再讲方法论,而是回到了自己 13 岁那年的一个下午。
这一节讲了什么
他记得 1944 年 8 月 7 日读到哈佛 Mark I 型计算机研制成功的报道时那种"向往和开心"的感觉——那时他十三岁。他顺手把当时的角色分清了:Mark I 是电子机械学上的奇迹,Aiken 是它的结构设计师,IBM 的工程师 Clair Lake、Benjamin Durfee 和 Francis Hamilton 是它的实现设计师。这个区分放在全书的末尾不是偶然:体系结构与实现分离,是这本书从头讲到尾的一件事。
另一件让他同样向往的事,是读到 Vannevar Bush 在 1945 年 4 月发表的《诚如所思》(As We May Think)——那篇文章建议把大量知识组织成超文本式的网络,让人可以顺着链接漫游。他把这条线索与自己在第 19 章讲的"个人计算机带来了全新的创造性活动介质"接了起来。
1952 年,他在 IBM 纽约恩迪科特拿到一份暑期工作,第一次在 IBM 604 上真正编程,也了解了 IBM 701(第一台存储程序计算机)的正式指令集;从哈佛的 Aiken 和 Iverson 名下毕业之后,职业梦想变成了现实。他在这里写下了一句很难不被打动的话:"感谢上帝,让我成为为数不多的那些开开心心地做着自己喜欢的工作的人之一。"
接着是一段技术史的白描:从真空管到晶体管再到集成电路;他用来工作的第一台计算机是 IBM 7030 Stretch——1961 到 1964 年世界上运算最快的机器,一共卖出九台;而他写这一章时用的 Macintosh PowerBook,“不但快,还有大容量内存和大容量硬盘,而且便宜了 1000 倍(如果按定值美元来算,便宜了 5000 倍)"。他依次经历了计算机革命、电子计算机革命、小型计算机革命和微型计算机革命——每一次都带来计算机数量的剧增。
最后一段讲的是知识本身。五十年代中期他刚毕业时,能看完当时所有的期刊和会议报告,掌握所有潮流动向;而写这段话时,他只能对层出不穷的学科分支说"再见”,对自己关注的东西越来越难以全部掌握。他的结论是全书最轻的一句话,也是最重的一句:
兴趣太多,令人兴奋的学习、研究和思考的机会也太多——多么不可思议的矛盾啊!这个神奇的时代远远没有结束,它依然在飞速发展。更多的乐趣,尽在将来。
我从这本书带走什么
第 18 章里作者把 1975 年版的论断逐条抽出来打分,并说了一句我印象很深的话:清晰和错误都比模糊不清好得多。系列结束,我也按同样的格式给自己留一份清单——标明哪些我确认,哪些我存疑。
我确认的
| 论断 | 理由 |
|---|---|
| 人月不可互换:沟通成本随人数按 n(n-1)/2 增长,加人往往延长进度 | 算术上成立,与我的协作经验一致 |
| 概念完整性是产品质量的核心,它只能来自少数人的一致决策 | 我自己每次返工,几乎都能追到"结构性分歧"而非"功能缺失" |
| 第一个系统多半不合用,计划里应当包含丢弃 | 与增量开发、快速原型的实践互相印证 |
| 缺陷修复会以相当高的概率引入新缺陷,回归测试不能省 | 与我的调试经验完全吻合 |
| 里程碑必须具体到无法自欺 | 模糊的里程碑会让我对自己撒谎,这是最廉价的自欺 |
| 工作的非技术时间占比极高(当年数据是一半) | 与我的实际感受一致,且我此前从未把它计入预算 |
| 文档应当并进源程序,信息的唯一来源才是不漂移的来源 | 这个站点的做法已经验证 |
| 人的素质与组织,比工具与方法更决定成败 | 工具提高下限,人决定上限 |
| 真正的进展来自逐步积累,不会来自单点突破 | 十年、二十年过去,作者的预言没有失效 |
我存疑的
| 存疑点 | 我的保留 |
|---|---|
| 复杂度是纯粹的根本困难,任何时代用任何方法都存在 | 部分复杂度其实是组织失误的投影,因此可被消除,作者自己也承认这一点 |
| 第二个系统必然最危险 | 在高频迭代的环境里,“第二系统效应"可能被稀释,也可能以每次重写的形式反复出现 |
| 图形化表达对软件设计价值有限 | 数据流、状态机、时序图在工程沟通中确实有效,这是作者持续的盲区 |
| 语音会成为表达动词的方法 | 几十年过去并未发生,说明交互范式的预测远比工程管理难 |
| 程序验证不必苛求 | 今天的形式化方法与类型系统在关键系统里承担了实实在在的工作 |
| 十五条规则式的清单可以照搬 | 我更需要其中的判断标准,而不是清单本身 |
这个系列本身
按最初定下的读法,这本书是逐章读完的:先做一遍检视阅读,再一章一篇地写,每篇都先复述作者的论证,再下自己的判断,最后接到手上的工作上。二十篇写完,我最大的收获反而不是任何单条结论,而是作者示范的一件事:他能在二十年之后回头给自己逐条打分,并且明确写出"Parnas 是正确的,我是错误的”。
这本书出版时讲的是 1960 年代的机器和项目,但它讨论的问题——概念由谁决定、沟通成本如何增长、变更如何被引入、质量由谁背书——没有一条随着技术进步而消失。倒是那些依赖当时资源约束的判断(内存多贵、机时多稀缺、语言有多少选择),几乎全都过期了。这个对比本身就是一条判据:判断一个技术结论值不值得记住,就看它依赖的是人的特性,还是当时的资源条件。
至于"没有银弹"这个结论,我读完这二十篇之后的理解比之前更具体了:它不是让人放弃改进,而是让人放弃对单点突破的期待,把精力放回可控的逐步积累上。作者在最后一段说的"更多的乐趣,尽在将来",我认为正是这个意思——不是等技术来救,而是承认这项工作本身就是这样,然后继续做下去。