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 曾经感叹,很多人会引用这本书,真正按它的建议做事的人却很少。这句话也说明了它的难点,读懂沟通成本不难,愿意据此调整项目组织和设计责任更难。

这本书常被称为"软件工程的圣经"。它没有提供一套可以照抄的技术方案,留下来的价值在于对项目规模、沟通成本和设计责任的判断。今天的工具和流程已经改变,这些判断仍然可以用来解释项目为什么会延期,以及为什么加人有时会让问题更复杂。

关联词

  • 布鲁克斯定律(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 项目时形成的判断。软件工程的工具和语言换了好几代,"人和月不能互换"仍然是理解延期项目的一个有用入口。这本书持续被引用,也因为它把项目里的沟通、设计和进度问题写得足够具体。

参考资料