神话般的人月计划中仍适用多少?

38

这本书是在分时系统、过程式编程和软件工程经验少了约30年的年代编写的。随着现有库、更高级的语言、IDE、以及互联网上可用的文档和示例等事物的改进,这本书还有多少内容仍然适用?

虽然我相信将新成员加入项目可能会最初放慢项目的速度,但我认为像单元测试、关注点分离和其他形式的自动化和设计改进可以让团队的新成员变得比书中假设的更快地变得有生产力,前提是项目具有良好的设计文档和流程。

我没有在大型项目或大型团队中的经验,因此我很想听听那些有这样经验的人的想法。 编辑: 我想知道新的沟通工具(如Wikis、即时消息和互联网)是否减少了沟通时间。根据大家的回答,我认为任何沟通效率的提高都被增加的复杂性所抵消了。


在我看来,假设有良好的设计文档和流程是一个相当大的假设。你所说的大型项目或团队是什么意思?如果项目需要一两年时间,那么它算大吗?还是你更希望花近十年的时间才能算大? - JB King
1
还要记得,自那时起,一般的复杂度也同样增长了许多... - Lucero
5
如果你购买了周年纪念版,它应该包含一章名为“重新点燃无银弹”的内容,在其中布鲁克斯回顾了他在25年后对“无银弹”宣言的看法。 - Schwern
它实际上是关于时分系统之前的时代编写的 - OS/360是一个批处理操作系统。 - dkretz
1
在编程中经常提到时间共享。 - Jared
15个回答

61

这篇文章写于30年前,但至今依旧真实。因为它根本上讲述了在同一项目上工作的人之间的沟通,而过去30年的进步并没有从根本上改变这一点。

当然,在这30年里我们学到了很多东西,但我们的工具和理解力的所有改进都是渐进式的,符合布鲁克斯所预言的“没有银弹”的原则。


11
大约四年前我读过这本书,一开始持怀疑态度。因为这是一本关于40年前构建的操作系统,并且是由比我父亲还要年长的人写的有关信息技术的书,所以我不认为它对今天依然具有参考价值。但事实上,我惊讶地发现书中很多内容都适用于我日常工作。IT图书很少能够精准地指导技巧而非语言,而这本书做得非常完美。现在看来,这本书依然非常值得一读! - SqlRyan
2
他谈到的另一个部分是,没有银弹能够克服这个问题。 - LanceSc
我意识到大部分内容都与沟通有关。我在想像Wiki的电子邮件和即时通讯这样的工具是否减少了沟通需求,使得沟通更快捷、更省时间。但似乎任何速度的提升都被增加的复杂性所平衡,从而导致了更多的沟通。 - Jared
维基、电子邮件和即时通讯只是取代了其他形式的交流方式;总体上并没有减少交流。 - daf
Brooks讨论了一些在当时非常先进的沟通技巧。然而,改善沟通技巧只能带来有限的改善。这有点类似于在O(n!)算法中进行O(n)改进。 - David Thornley

46

这不是在问孙子兵法是否仍适用于现代战争,因为我们有现代装备吗?


6
+1任何提到《孙子兵法》的参考都很棒。 - willcodejavaforfood
2
我刚刚写的是,就像牛顿理论在量子力学出现后仍然具有重要意义。 - Schwern
我一直认为飞行最终淘汰了《孙子兵法》。 - Joshua
4
我认为孙子兵法学院已经被流动作战所取代了... - Mark Nold

19

这本书仍然有东西可以告诉我们,我个人经历了团队规模增大带来的沟通问题。你应该知道单元测试、关注点分离等并不是新概念。

然而,有些东西并没有经受住时间的考验。我不认为在代码中编写ASCII流程图是一个好主意,而且建议采用“外科手术团队”方法的人已经尝试过几次(最著名的是微软的Charles Simony),发现效果并不太好。


3
布鲁克斯后来表示,他最大的错误在于推荐开发人员尽可能了解他人代码的内部结构,而不是强制执行边界。我仍然认为这本书在教授如何编写软件方面是必不可少的。 - David Thornley
这本书有一些不必要的宗教内容,读起来有点困难。请参见 https://www.amazon.ca/gp/customer-reviews/R2M9G9ZKMFCWI9/ref=cm_cr_getr_d_rvw_ttl?ie=UTF8&ASIN=0201835959 - nhooyr
你有关于Simonyi手术方法试验的参考资料吗? - thang

10

这个观点并不是认为“大型团队不起作用”,而是“将人/资金投入问题并不是答案”。例如单元测试、关注点分离等,它们并不只是在解决问题时增加人力。这些方法使你可以通过在正确的位置谨慎地添加更多人来加速。事实上,您提出的观点支持该书的理念。


Brooks谈到了需要大型团队的必要性,指出在像小团队这样的情况下,没有任何合理的时间完成OS/360。 - David Thornley

9
著名的布鲁克斯著作《没有银弹》和《人月神话》分别阐述了程序语言和项目管理中的基本限制。尽管《人月神话》中一些章节过于侧重于当时的技术,但其余章节至今仍然与当时一样相关。
在《人月神话》中,布鲁克斯遵循“概述问题”、“展示错误的开始”和“提出自己的解决方案”的技巧。一些评论家指出他的解决方案可能已经过时,但他对大型项目固有问题的简明描述使得这本书值得一读。
他反复强调的一个主题是通信开销作为大型团队的限制因素。作为一个思维实验,考虑互联网作为程序员的通信媒介以及对大型开源项目的催化作用。
个人而言,我会为“手艺的乐趣”部分读这本书。我从未阅读过如此优雅地描述编程最佳感受的内容。(如果您好奇,它在第7页,并可在amazon.com的“查看内页”功能中查看)

6
我认为像“没有银弹”这样的东西今天仍然适用,就像几十年前一样,特别是当我们看到越来越多的年轻人进入行业并认为x语言/技术是最新和最伟大的杀手级应用程序,所有其他技术都会因此而死亡时。
当然,对Ada或共享计算机的引用已经过时了,但是意外困难和本质困难、购买与构建、代码本质上是复杂的因为我们不重复部分以及所有其他理论主题仍然完全准确和相关。
TMMM之所以相关的另一个论点是,它实际上并不是关于软件本身,而是关于程序员如何完成工作的方式。从这个角度来看,它很难变得过时。

5
我记得的有两点:一是“版本2”仍然适用,二是“增加人员不一定更快”。Spolsky用自己的方式讨论了“版本2”。我不记得他是否特别链接到MMM,但概念非常相似。与MMM被发现时相比,通信变得更加高效了,但我认为这是成比例的。使软件生产准备就绪需要比MMM撰写时更多的工作。有人说计算机科学中的一切都是在1960年代发现的,之后的一切都是衍生的。

3

将TMM视为一本书,概述了软件工程中的一个问题,也许是“问题”,即不是技术,而是人!你提到的所有改进都源于这个核心认识。它们都旨在解决布鲁克斯所阐述的问题。我相信肯特·贝克(Kent Beck)、沃德·坎宁安(Ward Cunningham)、阿利斯特·科克伯恩(Alister Cockburn)和马丁·福勒(Martin Fowler)都读过这本书,并深刻领会了其中的精髓,然后开始打造他们的银弹。


3

我认为这是任何想要理解软件开发过程的人都必须阅读的书籍之一。


2
过去40年里,对开发人员的需求迅速增长,这种需求不会停止。由于聪明人(如乔尔所说的“聪明并能做事”)在人口中的比例通常保持不变,每年教育越来越多的开发人员意味着开发人员的平均智商正在降低。
40年前,成为开发人员的是半神;20年前,这是聪明人的工作,而现在当我看着我的母校的年轻计算机科学专业学生时,他们似乎在招收所有知道什么是计算机的人。
这并不意味着灾难即将来临 - 西方世界继续从新兴市场或第三世界国家引进聪明人(或外包工作)。新的开发工具使开发优秀应用程序更容易。这些因素似乎相互抵消,使MM-M永恒真理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接