The Mythical Man-Month 是一本书的名字,也是软件工程领域传播最广的一句话的来源,向一个已经延期的软件项目增加人手,只会让它更晚。作者 Fred Brooks 是 IBM OS/360 操作系统的项目负责人,这个项目涉及上千人,是他用亲身经验写出来的一本反思录。
这本书 1975 年首版,1995 年二十周年纪念版又加了四章,其中一章叫 "No Silver Bullet",后来独立成了一个和书本身几乎一样出名的概念。
"人月"为什么是个神话
书名里的 "man-month" 指的是"人月",一个人工作一个月的工作量。直觉上很多人觉得这是可以直接换算的,十个人干一个月等于一个人干十个月。Brooks 说这个假设完全不成立。
原因在于软件开发不是一个可以完美拆分的流水线作业。程序之间有依赖,接口要对齐,方案要统一。加进来的人首先要花时间理解项目,理解过程中还要占用老员工的时间来讲解。五十个开发者之间的沟通通道数是 n(n-1)/2,也就是 1225 条。人越多,光协调这件事本身就会吃掉越来越多的精力。
所以结论很简单,人和月不能互换,人月不是一个真实的工作量单位,它是管理者为了做预算而虚构出来的。
这本书怎么来的
Brooks 在 1960 年代中后期负责 IBM System/360 大型机的操作系统开发,也就是 OS/360。这是当时世界上最大、最复杂的软件工程之一。项目经历了严重的延期和预算超支,团队规模从几十人膨胀到上千人,最终交付的系统仍然满是 bug。
这段经历让 Brooks 认识到,大型软件项目的管理问题不是靠"多加人"就能解决的。他把这些教训写成了一本书,1975 年由 Addison-Wesley 出版。书的全名是 The Mythical Man-Month: Essays on Software Engineering,副标题说明了这是"软件工程随笔集",不是教科书。
1995 年的二十周年纪念版新增了四章,其中 "No Silver Bullet" 这一章影响力甚至盖过了书的其余部分。
书里最有名的几个观点
布鲁克斯定律(Brooks's Law) 就是那句核心断言,往延期的项目里加人,只会更晚。这个定律后来在软件行业里被反复验证,无数项目经理在加班之后才明白它是对的。
没有银弹(No Silver Bullet) 认为,没有任何单一的技术或管理手段能在十年内让软件生产力提升一个数量级(十倍)。Brooks 把软件的复杂性分成两类,本质复杂性(essential complexity)是问题本身自带的,偶发复杂性(accidental complexity)是工具和方法不够好带来的。大部分改进只减少了偶发复杂性,真正能带来数量级提升的只有攻克本质复杂性,而这几乎不可能通过某个"银弹"来解决。
第二系统效应(The Second-System Effect) 说的是,一个设计师做第二个系统的时候,往往会把第一个系统里"想加但没来得及加"的功能全部塞进去,结果导致系统臃肿失控。Brooks 的判断很直接,第二个系统是最危险的系统。
概念完整性(Conceptual Integrity) 指的是,一个好用的系统必须有一个统一的、一致的设计思路。Brooks 主张由一位首席架构师或极少数人来拍板系统该有什么功能、不该有什么,哪怕这意味着故意砍掉一些有用的功能。设计和实现应该分离,架构师负责"做什么",程序员负责"怎么做"。
外科手术团队(The Surgical Team) 是 Brooks 提出的团队组织模型。就像手术室里由一位主刀医生做最关键的决策和操作,其他所有人都围绕主刀的方案提供辅助支持。他观察到好的程序员和平庸的程序员之间生产力差距可以高达五到十倍,所以与其组建一群平均水平的开发者,不如让一个顶尖的人主导,其他人配合。
试验系统(The Pilot System) 说的是,设计一个全新系统时,团队无论如何都会先做出一个实际上应该扔掉的版本。这个版本最大的价值不在于交付给用户,而是暴露技术方向,帮助团队重新设计真正要交付的系统。Brooks 劝大家接受这个现实,不要试图把试验系统硬改造成正式产品。
为什么这本书到现在还有人引用
Brooks 自己说过一句话:"人人都在引用它,有些人读过,极少有人照做。"这句话被拿来形容很多经典著作,但他是在说自己的书。
这本书被称为"软件工程的圣经",不是因为里面有什么具体的技术方案,而是因为它提出了一整套关于软件项目管理的直觉和判断。这些判断四十年后仍然适用。敏捷开发、DevOps、微服务这些后来的方法论,本质上都是在试图解决 Brooks 在 1975 年就指出的那些问题。
2006 年,Bill Gates 在接受采访时说这本书是他最推荐的技术管理读物之一。2016 年,Stack Overflow 的年度调查里这本书仍然是程序员最常推荐的书籍前几名。
关联词
- 布鲁克斯定律(Brooks's Law):这本书的核心命题,往延期的项目加人只会更晚。
- 没有银弹(No Silver Bullet):书中独立成章的延伸论述,认为软件生产力不可能通过单一手段获得数量级提升。
- 第二系统效应(The Second-System Effect):设计师做第二个系统时容易过度设计,是最危险的系统。
- 康威定律(Conway's Law):Melvin Conway 在 1967 年提出的观察,系统的架构会反映组织的沟通结构,和布鲁克斯定律方向互补。
- Hofstadter 定律:"做一件事花的时间总是比你预期的长,即使你已经在预期里考虑了 Hofstadter 定律。"和布鲁克斯描述的"一天一天地迟到"异曲同工。
- The Cathedral and the Bazaar:Eric Raymond 关于开源开发模式的经典文章,可以理解为对 Brooks "外科手术团队"模式的一种反叙事。
小结
《人月神话》是一本用失败经验换来的书。Brooks 管了上千人的 OS/360 项目,把过程中踩过的坑全部写了下来。四十年后的今天,软件工程的工具和语言换了好几代,但"人和月不能互换"这个判断仍然是项目经理和开发者的共同常识。这本书之所以能持续被引用,是因为它说出的那些道理朴素到让人不舒服,又真实到没法反驳。