一、书名和作者
《人月神话》——FREDERICK P. BROOKS
二、书籍概览
主要论点和结构
主要论点:
- 软件的复杂性是必要属性,同时这也是软件开发的根本困难。暂时没有技术或者管理上的进展能够独立在软件开发的生产率、可靠性或简洁性上取得数量级的提高。
- 软件开发中人员数量和时间不能相互替换,在软件开发中增加人手并不一定能够缩短项目的工期。向进度落后的项目中增加人手,只会使进度更加落后。
- 讨论软件开发中的管理问题,包括项目规划、进度跟踪、需求管理等方面的挑战。提出了一些管理原则,以帮助项目经理更好地管理软件开发项目。
结构:
- “焦油坑”和“没有银弹”说明软件开发固有的复杂属性。
- “人月神话”分析导致项目进度延误的原因,提出了 Brooks 法则。
- 其余章节主要介绍作者对于软件开发中管理问题的建议。
目标读者和应用场景
软件开发人员、项目负责人、团队领导者、学生和教育者、软件开发公司、研究人员。
三、核心观点与主题
1. 向进度落后的项目中增加人手,只会使进度更加落后
- 软件开发者往往对于开发进度保持着乐观,只考虑每一项任务应该花费的时间,然而现实情况中软件工程包含着许多任务,一切顺利的概率几乎为零,这是导致进度落后的一个原因。
- 用人月作为工作量单位暗示人员数量和时间是可以相互替换的,这是不科学的。软件开发是一项系统工作,人员数量和时间是相互替换忽略了增加人手导致新增的交流培训的成本,很可能反而抵消掉增加人手的作用。因此向进度落后的项目中增加人手,只会使进度更加落后。缺乏合理的时间进度是造成项目滞后的最主要原因。
- 案例:当项目进度落后时,如果冒然加派人手,增加人手导致了新的成本开销例如新人的培训、组织和任务的重新划分以及额外的测试,这些成本很可能抵消掉增加人手带来的作用,最后在循环中陷入灾难。
2. 软件开发没有银弹
- 复杂性是软件的必要属性,软件开发的根本困难是固有的概念复杂性。软件开发包括根本任务——打造由抽象软件实体构成的复杂概念结构以及次要任务——使用编程语言表达这些抽象实体。
- 软件开发中困难的部分是规格化、设计和测试抽象概念上的结构。现代软件系统中存在无法规避的内在特性:复杂度、一致性、可变性和不可见性。
- 没有任何技术或管理上的进展,能够独立地许诺在生产率、可靠性或简洁性上取得数量级的提高。
- 案例:软件开发的银弹需要依靠解决软件开发中的根本困难即软件的复杂性。避免软件开发的复杂性一种方法就是不开发软件,或者最大程度上进行软件重用,但是这些都是针对特定领域问题的解决,实际集成到自身业务时还会附带有抽象概念的复杂性,因此软件开发暂时没有银弹。
3. 软件开发的管理问题
- 在系统设计中,概念完整性是最重要的考虑因素。概念完整性要求设计由少数人员来实现,具体实现上可以仔细地区分设计方法和具体实现或者组建外科手术式的团队。
- 团队中的协作沟通是软件开发的一大成本。项目成功需要交流以及交流的成果——组织。团队组织的目的是减少不必要交流和合作的数量,减少交流的方法是人力划分和限定职责范围,例如组建外科手术式的团队,概念完整性能够减少不必要的交流成本。
- 要有前瞻思维,有意识关注那些系统的特殊危险,根据系统基本理念及目的变更,舍弃一些功能。要意识到软件开发的可变性,认识到变更对软件开发以及维护的影响,以变更为前提设计系统和组织架构。
- 软件文档是软件开发的重要因素。确定的文档才能获得清晰的决策,文档也能作为团队间的交流渠道,最后还能作为评估项目的依据。
- 确切的里程碑有助于软件开发进度的推进。
四、亮点与启发
最有影响的观点或实例
向进度落后的项目中增加人手,只会使进度更加落后。这一观点改变了人们对于项目管理和资源分配的认知,说明了软件开发相比于其它工程项目的不同,软件开发本质上是一项系统工作——错综复杂关系下的一种实践,不能简单地用劳动型项目的经验套用。布鲁克斯法则同时也体现了软件开发中普遍存在的一些问题:
- 假设一切都将运作良好。
- 隐性的暗示人员数量和时间是可以相互替换的。
- 对自己的估算缺乏信心,软件经理通常不会有耐心持续地进行估算这项工作。
- 对进度缺少跟踪和监督。其他工程领域中,经过验证的跟踪技术和常规监督程序,在软件工程中常常被认为是无谓的举动。
- 当意识到进度的偏移时,下意识的反应是增加人力,从而陷入恶性循环。
对个人或专业发展的启示
人月神话告诉我们项目管理的重要性。对项目的管理需要从项目初期就开始准备,同时要采取科学的方法。软件开发的特殊性决定了我们不能直接套用其它项目的经验,需要特定的技能和方法。在团队开发中要注重交流协作,有助于避免不充分交流额外增加的成本。要有前瞻思维,以变更为前提开发软件来应对软件各个方面的变化。在软件开发中人员数量和时间要谨慎分配,不能盲目地增加人力。不要企图通过某个技术或管理方法来获得数量级的提升,而应该实事求是地追求软件生产率的进步。
五、批评与局限性
任何有争议、模糊或过时的信息
- 在“画蛇添足”中提及开发第二个系统造成的灾难,但在“未雨绸缪”中又推荐要为变更计划第二个系统。实际上两个第二个系统强调的方面不同,第一个强调在之前系统上引入了很多新增功能和修饰的后续系统,可能导致画蛇添足,技术已经过时或者增加了额外的成本;第二个强调要有变更的思维,实际上指的还是之前的系统,但是抛弃原先的设计重新进行开发。
- Brooks 在 20 年后认为书中“未雨绸缪”中的实例实际上已经过时,其中暗示了使用瀑布模型,当变更时进行一次性的全部舍弃替换。现在看来应该使用迭代式的开发、增量式开发,保证开发过程中能维护软件的健壮性。
- 在“为什么巴比伦塔会失败”中 Brooks 认为应该保证所有程序员能够了解系统设计和代码,随着面向对象编程的发展,信息隐藏被证明是正确的,更加适合为变更设计的理念。
- 经过后续研究人员的验证,证明了向进度落后的项目中添加人手总会增加项目的成本,但并不一定会使项目更加落后,相比起来在项目早期增加人力造成的负面影响更少。
可能的不足或缺陷
- 书中的观点是在70年代编写的,随着计算机和软件工程的发展,其中的一些观点可能需要调整补充。
- 书中的许多观点和案例是基于大型软件项目的经验。对于小型项目或单个开发者来说,书中的一些原则可能不太适用。
- 书中提供了许多重要的管理和团队协作原则,但它可能缺乏具体的操作指南或方法论,用于实际应用这些原则。读者可能需要额外的资源来深入了解如何在实际项目中执行这些原则。
六、实际应用和拓展
在实际工作/学习中如何应用这些概念
- 使用布鲁克斯法则的观点来进行项目规划。不仅仅考虑增加人力来缩短工程进度,还要注意附带增加的协调和沟通的成本。
- 基于实际的历史数据和经验教训来进行时间和资源的估算,避免过于乐观的估算,以防止项目延期。
对未来研究或实践的建议
- 敏捷开发方法已经在软件开发领域取得了巨大成功,未来的研究可以更深入地探讨这些方法的最佳实践,以及如何更好地将它们应用于不同类型的项目。
- 利用数据分析和机器学习等技术,未来的研究可以帮助开发团队更好地预测项目风险、优化资源分配和改进项目管理决策。
- 研究可以探讨如何在管理和技术之间找到平衡,以确保项目既具有技术创新性,又能够按时、按预算交付。
七、总结与评价
对书籍的整体评价
《人月神话》虽然写于70年代,其中的实例大部分不适用于现在,但书中的观点依然具有广泛的适用性。是软件工程领域的经典,其中提出的重要观点以及对于软件项目管理的建议仍然具有实用性。
书籍的长处和短处
长处:书中提出的观点深刻地解释了软件开发的特性,针对项目管理地建议都来自于自身经验,具有宝贵的参考价值。
短处:随着时代的发展一些观点和实例过时需要调整;对于项目管理方面的建议缺乏具体的方法论,需要自身亲自实践摸索。