人月神话(二十周年纪念版)(拆解视角:20年自我推翻篇)
Brooks真正在写的不是「软件工程方法论」,是一份「为什么把人当生产单位是一个能要命的会计错觉」——20年后他亲手推翻了自己最有名的口号,这份诚实比任何结论都更值得学。
- 概念完整性是「无需道歉的贵族专制」:宁可省略优秀特性,也不要接受无法整合的系统
- 第二系统效应比第一个项目更危险:OS/360用26字节例程处理本可留给操作员的闰年问题,是过度工程的教科书案例
- Brooks自己承认「为舍弃而计划」是错的:20年后推翻自己1975年的结论,展示了真正的思维成长
核心观点
人月不可换算:加人会同时引爆三种成本
向进度落后的项目里加人手,只会使进度更加落后。新员工需要有经验的人培训,占用了原本的进度时间;原先划分好的任务要重新分解,导致部分已完成的工作报废;沟通成本按对子数量呈平方级增长。三层成本乘性叠加,这是Brooks法则背后真正的机制,不只是一句「加人没用」的结论。
概念完整性是「无需道歉的贵族专制」:少数人主导胜过多数人妥协
概念的完整性要求设计必须由一个人,或非常少数互有默契的人员来实现。1995年二十周年纪念版里Brooks比1975年更坚信这条原则,并把它从软件设计扩展到飞机、防御系统、全球定位系统——宁可牺牲一些优秀但互不整合的设计,也要保住系统的整体一致性。
至于贵族专制统治的问题,必须回答是或者否……这实际上是一种无需任何歉意的贵族专制统治。
— Frederick P. Brooks Jr.第二个系统才是最危险的:第一次的克制在第二次会反弹成过度工程
设计师做第一个系统时因为不确定自己能力而保守,做第二个系统时会把第一次压抑的所有功能全部释放出来。OS/360开发了26字节的常驻日期翻转例程来处理闰年问题,其实这个问题完全可以留给操作员手动完成——这就是第二系统效应的经典案例。
- 把第一版被砍掉的功能全部塞进第二版
- 让同一个人不受约束地设计更大的第二个系统
- 第二版启动前先问「用户真的要吗、不加会死吗」
- 保留至少一个有第二个系统开发经验的架构师把关
没有银弹的论证是结构性的:essential complexity无法被工具消灭
没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。软件的复杂度、一致性、可变性、不可见性是内在于这种概念结构的性质,工具进展只能消除次要困难,无法消除根本困难——这是一个数学论证,不是悲观主义。
Brooks论证任何单一技术/管理进展都无法带来的生产力数量级提升周期
因为essential complexity占比太高,工具只能压缩accidental cost
Brooks自己20年后推翻了自己最有名的口号「为舍弃而计划」
1975年Brooks说「为舍弃而计划,无论如何你一定要这样做」;1995年他公开说「现在我觉得这是错误的」,因为这个结论隐含了瀑布模型的前提,而增量开发已经取代了这个前提。这条自我推翻比任何具体结论都更有教训意义——它证明了顶级专家愿意根据新证据修正自己二十年前公开发表的核心观点。
| 版本 | 立场 |
|---|---|
| 1975年初版 | 第一版必须扔掉重写,为舍弃而计划 |
| 1995年二十周年版 | 现在我觉得这是错误的——隐含了瀑布模型前提 |
免费部分到这里。墙内还有:
本书与另外 4 本书的观点交锋 · 应用篇
金句摘录
「向进度落后的项目中增加人手,只会使进度更加落后。」
「概念完整性是产品质量的核心。」
「没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。」
常见问题
这本书讲了什么?
Brooks真正在写的不是「软件工程方法论」,是一份「为什么把人当生产单位是一个能要命的会计错觉」——20年后他亲手推翻了自己最有名的口号,这份诚实比任何结论都更值得学。
适合谁读?
从核心观点看,适合想搞清楚「人月不可换算:加人会同时引爆三种成本」这类问题的人。
最核心的一个观点是什么?
人月不可换算:加人会同时引爆三种成本