《人月神话》小结


弗雷德·布鲁克斯 (Fred Brooks) 在《人月神话》的伟大之处在于,它围绕着在任何专业软件开发过程中除了代码之外的所有事物的重要性。
应该成为每一位管理工程师的管理者的圣经。

《人月神话》认为,由于沟通的复杂性增加,向已晚的软件项目添加人力会使项目变得更晚。强调小型熟练团队、清晰沟通、计划避免延误以及高质量软件迭代开发的重要性。

作者布鲁克斯引入了“布鲁克斯定律”的概念,并强调了设计中概念完整性的重要性。他还讨论了软件评估的挑战、质量和时间之间的权衡,以及软件开发中迭代的价值。

布鲁克斯定律:
“向已晚的软件项目添加人力会让项目变得更晚。”


这一违背直觉的原则基于几个关键的观察和原因:

  1. 磨合时间:团队新成员需要时间来提高工作效率。他们需要了解项目、代码库、使用的工具以及团队的工作方式。由于现有团队成员把时间花在培训新人上,而不是花在项目工作上,因此这段时间会大大降低整体进度。
  2. 沟通开销:随着项目人员的增加,沟通的复杂性也会成倍增加。每个新团队成员都会增加额外的沟通渠道,使协调和信息共享变得更加复杂和耗时。
  3. 分工:一项任务在多人分工中的有效程度是有限的。有些任务由于具有连续性,根本无法进行分工,而对于那些可以分工的任务,分工本身就会带来额外的工作,例如不同部分的整合和测试。您可能听说过布鲁克斯著名的比喻,即希望 9 名妇女在一个月内生产出一个婴儿。(在你说出来之前,我并没有注意到,在 "神话男人月 "的世界里,男人在工作,而女人在生孩子。嘿,那可是 20 世纪 70 年代。你看过《火星生活》吧?)
  4. 收益递减:由于上述因素,团队规模扩大到一定程度后,每个员工的生产率就会开始下降。这可能会导致一种情况,即增加人手实际上会降低整体生产率。

布鲁克斯定律强调了在软件开发过程中谨慎管理团队和项目的重要性。它表明,向问题投入更多资源,尤其是在时间有限的情况下,并不总是最佳解决方案,而且往往会使问题更加严重。相反,布鲁克斯主张进行更好的规划、清晰的沟通并制定切实可行的时间表,以避免项目延期的陷阱。

软件估算
布鲁克斯强调了准确估算软件项目所需时间和资源的内在困难。他指出,乐观的假设、未能考虑到所有必要的任务(如集成和测试)以及编程等创造性工作的不可预测性往往会导致估算不足。Brooks 建议采用更现实的估算方法,同时考虑到其中的不确定性和复杂性。

质量与时间
本书讨论了软件质量与开发时间之间的权衡。布鲁克斯认为,急于赶工期往往会导致软件质量大打折扣。他强调,不能为了追求速度而牺牲质量,因为质量不高会导致更严重的问题和延误,如增加维护成本和系统故障。他主张采取一种平衡的方法,分配足够的时间来确保高质量的成果。

迭代的价值
布鲁克斯提倡迭代开发的概念,这是他对当时流行模式的重大转变。他认为,软件开发应分阶段进行,每个阶段都应建立在前一个阶段的基础上。通过这种方法,可以不断进行测试、反馈和改进,从而开发出更强大、设计更合理的最终产品。迭代开发有助于在开发过程中尽早发现并解决问题,从而降低整体风险,提高软件质量。

设计概念的完整性
这一原则强调了设计方法连贯一致的重要性,确保软件的所有组件都能很好地协同工作,并遵循一个中心概念。要实现概念的完整性,通常需要一个强有力的指导,如首席架构师,以确保项目的所有方面都符合总体设计理念。这种方法可以使软件更易于理解、使用和维护,因为它避免了混合或相互冲突的设计所带来的复杂性和混乱。

网友观点:
创造性工作仍然受益于领导力,而如果没有领导力,软件就会在架构一致性方面陷入困境。
架构领导力的价值存在争议,一些人认为它集中了太多的权力,而另一些人则认为软件需要指导项目缺乏单一的指导。
编写最多代码的人往往会获得最大的权力,从而留下设计不佳的架构。