RootNest 书库
图文精讲 工程编程

人月神话

The Mythical Man-Month

Frederick P. Brooks 5 条核心观点 约 5 分钟读完

Brooks法则说给落后项目加人会让它更慢——但真正的洞察不止于此:他证明「人月」是个致命的会计错觉,人和月在概念性创造活动里根本不可互换。

读完你会得到 · 约 5 分钟

  • 加人不是不能加,是不能在晚期加:新人ramp-up成本+任务重分成本+沟通成本呈n(n-1)/2爆炸式叠加
  • 第二个系统才是最危险的系统:第一个项目谨慎保守,第二个项目信心爆棚容易过度工程
  • 没有银弹的论证是结构性的:复杂度/一致性/可变性/不可见性是软件的本质属性,工具只能压缩次要成本

核心观点

01

9个女人不能在1个月内生出孩子:人月是致命的会计错觉

12个人月的活可以12人1月做,也可以4人3月做——这个换算假设本身就是错的。人和月在软件这种概念性创造活动里根本不可互换,因为沟通成本、任务分解成本、学习曲线都不是线性可加的。

无论多少个母亲,孕育一个生命都需要十个月。

— Frederick P. Brooks Jr.
02

给落后项目加人只会让它更落后:三层成本同时叠加

新员工需要有经验的员工培训,这本身就占用了老员工的时间;已划分好的工作要重新分解,部分已完成的工作会被浪费;沟通成本按n(n-1)/2增长——三个人的沟通量是两个人的三倍,四个人是六倍。这三层成本乘性叠加,越到项目后期加人越是灾难。

新人加入需要老员工培训(ramp-up成本)任务重新切分(已完成工作部分作废)沟通链路按n(n-1)/2增长项目进度不增反降
03

第二个系统才是最危险的,不是第一个

程序员做第一个项目时谨慎保守,因为不确定自己的能力边界;做第二个项目时信心爆棚,把第一次被压抑的所有想法全部塞进去。OS/360用26字节的常驻例程去处理一个本可以留给操作员手动解决的闰年问题,就是典型的过度工程案例。

✕ Don't
  • 把v1里所有被压抑的功能想法全部塞进v2
  • 让同一个人无约束地设计第二个大系统
✓ Do
  • v2启动前设一个功能上限,超出部分推到v3验证
  • 让至少两个有经验的架构师互相制衡
04

没有银弹:软件的复杂度是本质属性,工具只能压缩次要成本

任何技术或管理进展都不可能在十年内让生产力提升一个数量级。复杂度、一致性、可变性、不可见性是软件与生俱来的性质,工具改进只能减少「敲键盘、查文档」这类次要成本,无法消灭「我到底想要什么系统」这类本质困难。

成本类型定义能否被工具消灭
次要复杂度敲代码/查文档/写样板可以——IDE/AI辅助能压缩
本质复杂度系统需求本身的复杂性不能——需要人类持续思考
05

概念完整性比正确性更重要:一致的烂方案胜过不一致的好方案

宁可省略一些不规则的改进特性,也不要接受无法整合的系统,即便那些设计各自都很出色。概念完整性要求设计必须由一个人或极少数有默契的人主导,这是一种「无需道歉的贵族专制」——多头设计会让系统迅速失去内在一致性。

概念的完整性要求设计必须由一个人,或者非常少数互有默契的人员来实现。

— Frederick P. Brooks Jr.
🔒

免费部分到这里。墙内还有:

本书与另外 4 本书的观点交锋 · 应用篇

金句摘录

「Adding manpower to a late software project makes it later.」

— Frederick P. Brooks Jr.

「Plan to throw one away; you will, anyhow.」

— Frederick P. Brooks Jr.

「There is no silver bullet.」

— Frederick P. Brooks Jr.

常见问题

这本书讲了什么?

Brooks法则说给落后项目加人会让它更慢——但真正的洞察不止于此:他证明「人月」是个致命的会计错觉,人和月在概念性创造活动里根本不可互换。

适合谁读?

从核心观点看,适合想搞清楚「9个女人不能在1个月内生出孩子:人月是致命的会计错觉」这类问题的人。

最核心的一个观点是什么?

9个女人不能在1个月内生出孩子:人月是致命的会计错觉