rabbit-obsidian/Clippings/人月神话 - 维基百科,自由的百科全书.md

99 lines
19 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "人月神话 - 维基百科,自由的百科全书"
source: "https://zh.wikipedia.org/wiki/%E4%BA%BA%E6%9C%88%E7%A5%9E%E8%AF%9D"
author:
- "[[维基媒体项目贡献者]]"
published: 2004-10-04
created: 2024-12-17
description:
tags:
- "clippings"
---
[[ba62bd22c24765e9145d1ebe00d59e01_MD5.pdf|Open: 人月神话(40周年中文纪念版) (〔美〕弗雷德里克·布鲁克斯著;汪颖译) (Z-Library).pdf]]
![[ba62bd22c24765e9145d1ebe00d59e01_MD5.pdf]]
[[aac7f6444795b0ddffaea1df56b6cf8d_MD5.pdf|Open: 人月神话-中文版.pdf]]
![[aac7f6444795b0ddffaea1df56b6cf8d_MD5.pdf]]
<table><tbody><tr><th colspan="2">人月神话:软件项目管理之道</th></tr><tr><td colspan="2"><span><a href="https://zh.wikipedia.org/wiki/File:Mythical_man-month_(book_cover).jpg"><img src="https://upload.wikimedia.org/wikipedia/zh/f/fd/Mythical_man-month_%28book_cover%29.jpg" width="100" height="137"></a></span></td></tr><tr><th scope="row">原名</th><td>The Mythical Man-Month: Essays on Software Engineering</td></tr><tr><th scope="row">作者</th><td><a href="https://zh.wikipedia.org/wiki/%E4%BD%9B%E7%91%9E%E5%BE%B7%C2%B7%E5%B8%83%E9%AD%AF%E5%85%8B%E6%96%AF">佛瑞德·布鲁克斯</a></td></tr><tr><th scope="row">译者</th><td>钱一一<span><sup><a href="https://zh.wikipedia.org/wiki/#cite_note-1"><span>[</span>注 1<span>]</span></a></sup></span></td></tr><tr><th scope="row">语言</th><td><a href="https://zh.wikipedia.org/wiki/%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87">繁体中文</a></td></tr><tr><th scope="row">主题</th><td><a href="https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B">软件工程</a><a href="https://zh.wikipedia.org/wiki/%E5%B0%88%E6%A1%88%E7%AE%A1%E7%90%86">项目管理</a></td></tr><tr><th colspan="2">发行信息</th></tr><tr><th scope="row">出版机构</th><td>经济新潮社</td></tr><tr><th scope="row">出版时间</th><td>1975, 1995</td></tr><tr><th scope="row">出版地点</th><td><a href="https://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD">美国</a></td></tr><tr><th scope="row">中译本出版日期</th><td>2004年4月4日</td></tr><tr><th scope="row">页数</th><td>424页</td></tr><tr><th colspan="2">系列作品</th></tr><tr><th scope="row">前作</th><td><a href="https://zh.wikipedia.org/wiki/%E6%B2%A1%E6%9C%89%E9%93%B6%E5%BC%B9">没有银弹</a></td></tr><tr><th scope="row">续作</th><td><a href="https://zh.wikipedia.org/wiki/%E6%B2%A1%E6%9C%89%E9%93%B6%E5%BC%B9">没有银弹</a></td></tr><tr><th colspan="2"><a href="https://zh.wikipedia.org/wiki/%E6%AC%8A%E5%A8%81%E6%8E%A7%E5%88%B6">规范控制</a></th></tr><tr><th scope="row"><span><a href="https://zh.wikipedia.org/wiki/%E5%9B%BD%E9%99%85%E6%A0%87%E5%87%86%E4%B9%A6%E5%8F%B7">ISBN</a></span></th><td><span><a href="https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/9867889185">9867889185</a></span></td></tr><tr><th scope="row"><span><a href="https://zh.wikipedia.org/wiki/OCLC"><abbr>OCLC</abbr></a></span></th><td><a href="https://www.worldcat.org/oclc/1201368">1201368</a></td></tr><tr><th scope="row"><a href="https://zh.wikipedia.org/wiki/%E6%9D%9C%E5%A8%81%E5%8D%81%E8%BF%9B%E5%88%B6%E5%9B%BE%E4%B9%A6%E5%88%86%E7%B1%BB%E6%B3%95">杜威分类法</a></th><td>001.6/425</td></tr><tr><th scope="row"><span><a href="https://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E5%9B%BD%E4%BC%9A%E5%9B%BE%E4%B9%A6%E9%A6%86%E5%9B%BE%E4%B9%A6%E5%88%86%E7%B1%BB%E6%B3%95">LC分类法</a></span></th><td>QA76.6 .B75</td></tr></tbody></table>
《**人月神话:软件项目管理之道**》(英语:*The Mythical Man-Month: Essays on Software Engineering*是由美国软件工程师暨IBM [System/360](https://zh.wikipedia.org/wiki/System/360 "System/360")系统之父[佛瑞德·布鲁克斯](https://zh.wikipedia.org/wiki/%E4%BD%9B%E7%91%9E%E5%BE%B7%C2%B7%E5%B8%83%E9%AD%AF%E5%85%8B%E6%96%AF "佛瑞德·布鲁克斯")Fred Brooks所著文集全书讲解[软件工程](https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B "软件工程")、[项目管理](https://zh.wikipedia.org/wiki/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86 "项目管理")相关课题,被誉为软件领域的[圣经](https://zh.wikipedia.org/wiki/%E8%81%96%E7%B6%93 "圣经"),内容源于作者布鲁克斯在[IBM](https://zh.wikipedia.org/wiki/IBM "IBM")公司[System/360](https://zh.wikipedia.org/wiki/IBM_System/360 "IBM System/360")家族和[OS/360](https://zh.wikipedia.org/w/index.php?title=OS/360&action=edit&redlink=1 "OS/360页面不存在")中的项目管理经验。该书于1975年首次发行[ISBN 978-0-201-00650-6](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/9780201006506)并于1995年重新发行纪念版[ISBN 978-0-201-83595-3](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/9780201835953)[^3],其中新增了对《[没有银弹](https://zh.wikipedia.org/wiki/%E6%B2%A1%E6%9C%89%E9%93%B6%E5%BC%B9 "没有银弹")》一文的评论和回应与4个额外的新章节。
跟只为私人使用而单独写出来的组件程序相比做出软件系统产品programming systems product所要付出的代价将是九倍以上。估计[产品化](https://zh.wikipedia.org/wiki/%E5%95%86%E5%93%81%E5%8C%96 "商品化")productizing的代价是三倍若要对组件从事设计、集成、测试进而凝聚成为一个系统则代价也是三倍而且这方面的成本计算基本是独立的。
<table><tbody><tr><td></td><td>史前时期最骇人的景象,莫过于一群巨兽在焦油坑里做垂死前的挣扎。不妨闭上眼睛想像一下,你看到了一群恐龙、长毛象、剑齿虎正在奋力挣脱焦油的束缚,但越挣扎,焦油就缠得越紧,就算他再强壮、再厉害,最后,都难逃灭顶的命运。过去十年间,大型系统的软件开发工作就像是掉进了焦油坑里……</td><td></td></tr><tr><td colspan="3"><cite>——<a href="https://zh.wikipedia.org/wiki/%E4%BD%9B%E7%91%9E%E5%BE%B7%C2%B7%E5%B8%83%E9%AD%AF%E5%85%8B%E6%96%AF">佛瑞德·布鲁克斯</a><sup><a href="https://zh.wikipedia.org/wiki/#cite_note-4"><span>[</span>2<span>]</span></a></sup></cite></td></tr></tbody></table>
[软件开发](https://zh.wikipedia.org/wiki/%E8%BB%9F%E4%BB%B6%E9%96%8B%E7%99%BC "软件开发")的另一个难题,是从单一[程序](https://zh.wikipedia.org/wiki/%E7%A8%8B%E5%BC%8F "程序")到软件系统过程中,所造成复杂度的快速上升,期间并需要包含不同的活动与技能,使得软件开发必须面对多样性的挑战。布鲁克斯最早认识到设计程序、开发[软件](https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94 "软件")的差别,他以程序与[系统](https://zh.wikipedia.org/wiki/%E7%B3%BB%E7%B5%B1 "系统")、[产品](https://zh.wikipedia.org/wiki/%E7%94%A2%E5%93%81 "产品")的差异解释两者之间的不同并以3×3的复杂度加以说明。[^5]
**人月神话**(英语:**The mythical man-month**这部分讲述人力和时间并不呈现线性关系。指出以大量人员和较短的时间并不能缩短软件的开发进度。一窝蜂的作业方式无助于软件生产且会制造麻烦产生出更差的软件。向进度落后的项目追加人力只会使进度更加落后。因为新进的人员需要时间了解整个项目而增加额外的沟通消耗。当有N个人必须在这群人之中进行沟通时无阶级关系当N增加其输出M将抵消其效益甚至倒退最后几天所完成的进度远不如刚开始几天所完成的进度。像是发现了许多错误
- 团队交流公式: ${\displaystyle n(n-1)/2}$
- 示例50个开发人员就要 ${\displaystyle 50(50-1)/2=1225}$ 个沟通管道
用“人月”来衡量工作规模的大小是危险的,也是一个容易遭到误解的[迷思](https://zh.wikipedia.org/wiki/%E8%BF%B7%E6%80%9D "迷思"),使用人月的前提必须是在人力和工时可以互换的情况之下:当一份工作因具有连续性的限制而不可切分时,就算投入再多的人力,也不会对时程有所影响,生小孩就是需要九个月,你叫多少个妈一起生都一样,软件工程就是像这样的工作,因为它必须[调试](https://zh.wikipedia.org/wiki/%E9%99%A4%E9%8C%AF "调试"),而调试本身就具有连续性的本质。
**人月**(英语:**man-month**)指的是“一个人要花几个月”才能完成软件开发的单位,通常用来评估一件软件项目的大小。[^6]以成本会计cost accounting为基础的时程预估技术使我们误把工作量和项目进度混为一谈**人月是个危险并很容易就遭到误解的迷思myth因为它假设人力和工时可以互换**。
在一个时程已经落后的软件项目中增加人手,只会让它更加落后[^7]。根据Brooks法则增加人员到一个已经延误的项目里等于是火上加油。除非你可以把工作区分让新进人员可在不影响他人工作的状况下有所贡献。
把工作切分给更多人做将造成额外的沟通communication代价——训练和相互的交流intercommunication。欲增加软件项目的人手总共必须付出的代价可分为三方面工作重新切分本身所造成的混乱与额外工作量、新进人员的训练、新增加的相互交流。
在接受相同的训练、同样都是两年资历的情况下,优秀专业程序员的生产力要比差劲的程序员好上十倍。短小精悍团队是最棒的——尽可能用最少的人。两人团队,其中一人当领导者,这通常是最佳的用人方式。以短小精悍团队开发真正大的系统就太慢了。绝大多数大型软件系统的经验显示,使用一堆人蛮干的方式最耗成本、最慢、最没有效率,做出来的系统在概念上也最不完整。
以一位首席程序员为主、类似于[外科手术](https://zh.wikipedia.org/wiki/%E5%A4%96%E7%A7%91%E6%89%8B%E8%A1%93 "外科手术")团队的[组织](https://zh.wikipedia.org/wiki/%E7%BB%84%E7%BB%87_\(%E7%A4%BE%E4%BC%9A%E5%AD%A6\) "组织 (社会学)")提供了一个良方,既可因少数人的决策而兼顾到产品的整体性,又可因多数人的合作与大幅沟通减少而得到全部人的[生产力](https://zh.wikipedia.org/wiki/%E7%94%9F%E4%BA%A7%E5%8A%9B "生产力")。
- 在系统设计时保有概念整体性conceptual integrity是最重要的原则。
- 功能概念复杂度比(这个比值是为了量测使用便利性,对简单和困难的运用都很有效)才是系统设计的最终测试标准。功能多,不见得是好事。
- 要达成概念整体性,设计必须出自于一个人的想法,或是极少数人的一致决定。
- 对大型软件项目(小项目也一样)来说,将架构设计独立于实现之外是获取概念整体性强而有利的方法。
- 如果系统必须保有概念上的整体性,那么就必须有人来控制这些概念,这就是需要[专制](https://zh.wikipedia.org/wiki/%E5%B0%88%E5%88%B6 "专制")的原因,无庸置疑。
- 许多[软件架构](https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E6%9E%B6%E6%A7%8B "软件架构")、实现、实现的工作都是可以同时进行的。(不论硬件或软件设计,都可以同时进行)
第二系统效应英语The second-system effect就一个人所做过的设计而言第二个系统是最危险的系统一般来说都倾向于过度设计。
当他做第三或之后的系统时之前的经验会互相印证以确认出这类系统的一般性特色而系统彼此之间的不同处也会帮助他辨别出属于特殊和非通用的部分。除了做些功能上的修饰之外第二系统效应还有另外一项特征那就是倾向于将之前已熟悉的技术发挥到淋漓尽致但却没有留意到这项技术早就跟目前项目的基本系统假设有冲突而不再适用OS/360有好多这样的例子。[Windows NT](https://zh.wikipedia.org/wiki/Windows_NT "Windows NT")则似乎是1990年代的示例
对大部分[OS/360](https://zh.wikipedia.org/wiki/IBM_System/360 "IBM System/360")的设计人员来说它也是个第二系统设计成员分别来自1410-7010[磁盘](https://zh.wikipedia.org/wiki/%E7%A3%81%E7%A2%9F "磁盘")操作系统、Stretch[操作系统](https://zh.wikipedia.org/wiki/%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1 "操作系统")、Project Mercury即时系统、给7090用的IBSYS操作系统等等几乎没有人拥有两个上述系统的发展经验所以OS/360可称得上是一个最佳的第二系统效应示例。
手册或书面规格是不可或缺的工具,虽然光靠它是不够的。手册载明的是产品的[外部](https://zh.wikipedia.org/wiki/%E5%A4%96%E9%83%A8 "外部")external规格用来描述并制定出用户从外观上将或看到的所有细节撰写手册便是架构设计师的主要工作。当用户和实现人员的反应不断地显示出设计上难以使用或实现之处手册就会堕入重新准备、修改的轮回之中。为了造福实现人员将修改的程度予以量化quantize是很重要的——在时程上应该要有载明日期的版本信息。
失败的软件项目经常发生在开发者与用户间对需求认知的误解。开发者抱怨用户说不清楚需求,而用户抱怨开发者误解他们的意思。布鲁克斯认为“[软件开发](https://zh.wikipedia.org/wiki/%E8%BB%9F%E4%BB%B6%E9%96%8B%E7%99%BC "软件开发")最困难的单一项目,是精确地决定要建造什么。”[^8]
- 初版[^9]
- 20周年纪念版[^10]
增修内容:
1. 将[初版](https://zh.wikipedia.org/wiki/%E5%88%9D%E7%89%88 "初版")中所主张的所有论断整理出一个简洁的摘要,包括了原书的主要理念:就人力配置的比例而言,大型软件项目所面临的是跟小型项目完全不同的管理问题,这引申出产品的概念整体性是其中的关键,而达成概念整体性虽然困难,但却是可能办到的。
2. 作者[佛瑞德·布鲁克斯](https://zh.wikipedia.org/wiki/%E4%BD%9B%E7%91%9E%E5%BE%B7%C2%B7%E5%B8%83%E9%AD%AF%E5%85%8B%E6%96%AF "佛瑞德·布鲁克斯")对他当初所提出的这些论断,在经过一个世代之后所做的观察。
3. 转载布鲁克斯1986年发表于IEEE《Computer》的论文《[没有银弹](https://zh.wikipedia.org/wiki/%E6%B2%A1%E6%9C%89%E9%93%B6%E5%BC%B9 "没有银弹")》。
4. 布鲁克斯对于他1986年的论断“十年内不会有任何银弹”所做的回应。
- [反面模式](https://zh.wikipedia.org/wiki/%E5%8F%8D%E9%9D%A2%E6%A8%A1%E5%BC%8F "反面模式")
- [代码重构](https://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E9%87%8D%E6%9E%84 "代码重构")
- 《[没有银弹](https://zh.wikipedia.org/wiki/%E6%B2%A1%E6%9C%89%E9%93%B6%E5%BC%B9 "没有银弹")》
- [Peopleware: Productive Projects and Teams](https://zh.wikipedia.org/w/index.php?title=Peopleware:_Productive_Projects_and_Teams&action=edit&redlink=1 "Peopleware: Productive Projects and Teams页面不存在")
[^人月神話:軟體專案管理之道-2]: Frederick P. Brooks, Jr. [人月神話:軟體專案管理之道](https://web.archive.org/web/20131108125438/http://www.cite.com.tw/product_info.php?products_id=7900). 由钱一一翻译. 经济新潮社 "year = 2004年. \[2011-04-12\]. [ISBN 9867889185](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/9867889185 "Special:网络书源/9867889185"). [原始内容](http://www.cite.com.tw/product_info.php?products_id=7900)存档于2013-11-08 (中文(台湾)).
[^4]: 该书导读软件人生之何似本书作者Frederick Brooks对于他自己的软件项目经历所做的描述
[^5]: 郑炳强. 軟體工程從實務出發Software Engineering: A Perspective from Practices. 智胜文化事业有限公司. 2008年. [ISBN 978-957-729-659-7](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/978-957-729-659-7 "Special:网络书源/978-957-729-659-7") (中文(台湾)).
[^6]: 该书〔推荐序二〕科技再怎么变,人还是人
[^9]: —. [The Mythical Man-Month](https://archive.org/details/mythicalmanmonth00broo). Addison-Wesley. 1975. [ISBN 0-201-00650-2](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/0-201-00650-2 "Special:网络书源/0-201-00650-2"). (英文)
[^10]: —. Chap. 17. 'No Silver Bullet' Refired. The Mythical Man Month Anniversary Edition with four new chapters (Addison-Wesley). 1995. [ISBN 0-201-83595-9](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/0-201-83595-9 "Special:网络书源/0-201-83595-9"). (英文)
书籍
- Frederick P. Brooks, Jr. [人月神話:軟體專案管理之道](https://web.archive.org/web/20131108125438/http://www.cite.com.tw/product_info.php?products_id=7900). 由钱一一翻译. 经济新潮社. 2004年 \[2011-04-12\]. [ISBN 9867889185](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/9867889185 "Special:网络书源/9867889185"). [原始内容](http://www.cite.com.tw/product_info.php?products_id=7900)存档于2013-11-08 (中文(台湾)).
![](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikiquote-logo.svg/34px-Wikiquote-logo.svg.png)
- (繁体中文) [人月神话软件项目管理之道20周年纪念版](https://web.archive.org/web/20110407062914/http://www.books.com.tw/exep/prod/booksfile.php?item=0010254508)
- (简体中文) [人月神话32周年中文纪念版](http://findbook.tw/book/9787302155676/basic) [页面存档备份](https://web.archive.org/web/20200221125910/http),存于[互联网档案馆](https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E6%A1%A3%E6%A1%88%E9%A6%86 "互联网档案馆")
- (英文) [The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959) [页面存档备份](https://web.archive.org/web/20210122163146/http),存于[互联网档案馆](https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E6%A1%A3%E6%A1%88%E9%A6%86 "互联网档案馆")
- (英文) [Frederick P. Brooks, Jr.个人主页](http://www.cs.unc.edu/~brooks/) [页面存档备份](https://web.archive.org/web/20061224050731/http),存于[互联网档案馆](https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E6%A1%A3%E6%A1%88%E9%A6%86 "互联网档案馆")
- (英文) [Preface to 20th Anniversary Edition, as found on Safari.Informit.com](http://safari.informit.com/0201835959/pref03#X2ludGVybmFsX1RvYz94bWxpZD0wMjAxODM1OTU5L3ByZWYwMg==) [页面存档备份](https://web.archive.org/web/20081208190922/http),存于[互联网档案馆](https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E6%A1%A3%E6%A1%88%E9%A6%86 "互联网档案馆")
- (英文) [Organization and Team Patterns](https://web.archive.org/web/20080702042450/http://www.dfpug.de/loseblattsammlung/online/workshop/design_patterns/sonstiges.htm)