Skip to content

《人月神话》读书笔记:五十年前的坑,今天还在踩

2024 年初读《人月神话》时随手截下的九张书评与原文段落,当时只存了图没写字。这次整理补上框架和自己的理解。Brooks 写这本书是 1975 年,但里面描述的项目灾难,和今天办公室里发生的几乎一模一样。

一、焦油坑:为什么写个"能跑的程序"只是开始

Brooks 开篇把大型系统开发比作焦油坑——很多强壮的猛兽在里面挣扎得越猛,陷得越深。

焦油坑与编程系统产品

这一节最重要的概念是"程序"到"编程系统产品"的成本放大:

三倍成本的两次相乘

  • 一个程序(program):自己写完自己能跑;
  • 变成编程产品(programming product):要通用化、要测试、要文档——成本 ×3;
  • 变成编程系统(programming system):要定义接口、和其他组件集成——成本 ×3;
  • 两者叠加,编程系统产品的成本是独立程序的 9 倍

这就是为什么"我周末就能写出个 demo"和"做成能交付的产品"之间隔着巨大鸿沟。Brooks 给出的工期分配也反直觉:1/3 计划、1/6 编码、1/4 组件测试、1/4 系统测试——真正敲代码只占六分之一。

二、人月神话本身:人和月不可互换

书名要批判的核心谬误:用"人月"衡量工作量,隐含了"人和月可以互换"的假设。

乐观主义与人月

Brooks 拆掉这个假设用了两个比喻,我印象极深:

  • 生孩子需要九个月,不管派多少个母亲——有些任务有内在的顺序性约束,无法分解;
  • 厨师烤鸡:客人再急,火候到不了就是到不了,强行加大火只会烤糊。

而程序员的乐观主义又火上浇油:我们总假设"这次不会出 bug",把排期建立在一切顺利的前提上。

突击没有效果,加人反而延期

于是有了 Brooks 定律:向进度落后的项目增加人手,只会让它更落后——新人需要培训、沟通路径按 n(n-1)/2 增长、任务要重新切分,这三项开销吃掉的比新人产出的多。

作者亲历:不到10%的项目能准时

这张截图里书评作者的亲历统计让人苦笑:靠加人赶工的项目,能准时交付的不到 10%。

三、未雨绸缪:减熵还是增熵

减熵与增熵

软件维护是一个增熵过程:每修一个缺陷都有概率引入新缺陷,系统一步步走向无序。对抗它的办法不是更拼命地修,而是在前期设计上"减熵"——概念完整性、清晰的接口、舍得扔掉第一个原型(plan to throw one away)。

Brooks 关于文档的建议

文档也是减熵工具。Brooks 建议的不是"写更多文档",而是维护少数几份关键文档(目标、规格、进度、预算),让它们成为团队共享的"唯一事实"。

四、外科手术团队:不是人人平等,而是一人操刀

外科手术团队

针对"加人无效"的建设性方案:像外科手术团队一样组织开发——一名主刀(首席程序员)负责全部核心设计与编码,其余人(副手、语言专家、工具匠、测试员、文档员)各司其职为他服务。沟通路径从网状坍缩为星状,概念完整性由一个大脑保证。

今天的"技术负责人 + 支撑团队"模式、开源项目的 BDFL 模式,本质都是它的变体。

五、善于交流:巴别塔的失败不在技术

沟通失效案例

巴别塔什么都不缺——人力、材料、时间、技术,缺的是沟通。这张截图里书评作者举的例子很接地气:需求在 QQ 群里传了三手之后,做出来的东西和最初想要的完全是两回事。大型项目的失败原因排行榜上,沟通失效永远高于技术难题。

六、我的整体感受

  1. 这本书最大的价值不是给答案,而是给了一套否决错误直觉的理由:直觉说加人能提速、直觉说排期可以压缩、直觉说文档是负担——Brooks 用数据和案例逐一否决。
  2. "没有银弹"(书的后记部分)在 AI 编程工具爆发的今天格外值得重读:工具消灭的是偶然复杂度,而软件的本质复杂度(需求本身的复杂性)不会因为代码写得快就消失。
  3. 九倍成本模型是我向非技术同事解释"为什么 demo 到上线还要这么久"时最好用的武器。

截图来源:2024 年阅读时保存的书评与原文摘录,仅作个人学习备忘。