《人月神话》(The Mythical Man-Month)是软件工程领域的经典著作,由 Fred Brooks 在 1975 年撰写。尽管成书较早,但其核心思想对现代软件开发仍具有深远影响。

人月神话

作者认为将工作量简单等同于“人×月”是一种不切实际的神话故事, 这也是这本书的名字的由来. 一个经典的例子是一个女人需要九个月生一个孩子, 但九个女人无法在一个月内生出一个孩子. 人和月在软件开发过程中是不可替换的. 如果项目已经延期, 通过增加人手来期望减少延期时间只会导致进一步的延期. 软件开发是高度协作和沟通密集型的任务,增加人员会引入额外的沟通成本、培训时间和协调难度,反而可能导致进度进一步延迟。

软件系统的复杂性源于大量相互关联的细节,这种复杂性无法完全消除,只能通过设计进行控制。团队规模扩大时,成员间的沟通路径会指数级增长(公式:n(n-1)/2),导致效率下降。因此,小团队往往更高效

时间分配的经验法则

作者认为, 对于一个项目的开发, 可以按照如下的比例分配时间

1
1/3 计划 + 1/6 编码 + 1/4 构建测试 + 1/4 系统测试

本书的背景是复杂系统的开发, 因此需要预留相当大比例的时间用于测试, 否则几乎必定出现在项目临近上线前发现过多问题, 导致项目延期. 甚至由于前期的计划和编码环节可以基本符合预期的执行, 因此直到测试阶段, 整个项目才”突然地”延期.

对于一个称不上复杂的常规需求开发, 时间分配又应该是多少才是合理的? 有多少需求是常规的, 又有多少需求是设计系统的?

概念完整性

一个系统的设计必须由少数人(或一人)主导,保持一致的架构和简洁的逻辑。避免因多人设计导致功能冗余或矛盾,强调“统一愿景”的重要性。

分离架构设计师角色与实现者角色

第一个版本的系统往往存在根本性缺陷,应被视为“可抛弃的原型”。真正的系统应基于原型的经验重新设计。这一思想后来演变为敏捷开发中的迭代开发持续改进理念。

理想情况本应如此, 但实际过程中, 迭代开发会产生更多时间消耗, 产品与项目经理未必认可这种改造. 在第一版的设计中往往难以预料后续的使用会向那种方向发展.

开发者在设计第二个系统时,容易过度追求功能完备性,导致系统臃肿复杂。通过架构约束和代码审查,避免过度设计。

没有银弹

不存在某种单一技术或方法(如新编程语言、工具或流程)能“革命性”地大幅提升软件开发效率。软件开发的本质困难(如需求复杂性、沟通问题、测试验证等)属于根本性难题(Essential Complexity),而非可通过技术解决的次要难题(Accidental Complexity)。

在作者写书的年代还没有强大的AI编程能力, 但在现在, 似乎可以看到一点AI编程的曙光. 如果AI编程真的可以解决一切技术上的问题, 变更需求只需要说一句话, 那么在实际做一个需求的过程中, 还有多少是根本性难题? 考虑到未来的发展, AI是否又真的可以达到这种程度的开发能力? 对于这种AI的开发是否又是一个根本性难题?

阅读总结

原本我以为<<人月神话>>是一本非常厚重的涉及许多内容的书. 但实际上, 这本书的内容并不算多, 用不了几个小时就可以把整本书完整的阅读一遍. 而且作为计算机领域的经典书籍, 其中提到的一些容易解决的问题, 在这几十年的发展过程中已经逐步解决(例如与程序结合的文档). 其中谈及的敏捷开发和快速迭代, 项目的结构划分等思想现在也可以算是普遍采用了.

相较于具体的技术细节, 本书也许在提供思考契机方面的价值更大, 也算是印证了”没有银弹”这句宣言吧.

扩展阅读

以下是一些读者针对本书的阅读笔记和个人感受. 目前还没有更资深的程序员/项目经理对此发表自己的观点.

最后更新: 2025年05月05日 17:37

版权声明:本文为原创文章,转载请注明出处

原始链接: https://lizec.top/2025/04/06/%E4%BA%BA%E6%9C%88%E7%A5%9E%E8%AF%9D%E9%98%85%E8%AF%BB%E7%AC%94%E8%AE%B0/