作者:Frederick Brooks
"人月是危险的带有欺骗性的神话,因为它暗示人员数量和时间是可以相互替换的。" ——即在某些任务中,不要以为1个人花10个月才能完成的任务(10人月),换成10个人就能在1个月完成;
本书每章都是独立的短文,书中的第18章:《人月神话》的观点:是与非?对前面每章的观点做了总结;
核心观点:
- 人月有时无法替换,增加人手只会更糟
- 外科手术队伍(10人):外科医生、管理员+秘书、编辑+秘书、副手、程序职员、工具维护人员、测试人员、语言专家;
外科医生是超级程序员,亲自负责设计、编码、技术文档、测试,其它全是打下手的,类似外科手术;
好处就是系统是一个人或者最多两个人思考的产物,达到概念一致性;而当规模大到需要200人时,只需要组织每个团队的超级程序员沟通——仅20人,大大降低沟通成本和提高效率;
这种组合也基于一个“事实”,超级程序员的效率是菜鸟的10倍; - 贵族专制:为了获得概念完整性,设计必须由一个人或者具有共识的小型团队来完成;
- 画蛇添足:设计第二个系统是最危险的,往往会过分设计;
- 文档出于精确性,需要形式化定义,出于理解性,需要记叙性定义;但只能选其中一种作为标准,另一种为辅助;
- 项目工作手册:不是一篇独立的文档,是对项目必须产生的一系列文档进行组织的一种结构,项目所有文档都必须是该结构的一部分,每个团队成员都应该能看到;
组织架构:每个子项目具有两个领导角色——产品负责人、技术主管或结构师;- 产品负责人(项目管理):组建团队、划分工作、制定进度表、争取资源、建立内部沟通和报告方式、确保进度实现
- 技术主管(纯技术):系统设计、提出技术解决方案
- 时间估算:工作量是规模的幂函数
- 控制程序空间规模;
- 通过关键文档进行项目管理;
- 新的概念和技术不断涌现,必须计划构建一个实验性系统然后抛弃它,不要将原型直接丢给客户;
- 个性化的工具妨碍沟通,开发和维护公共的通用编程工具效率更高;
- 通过剔除bug的设计、构件单元调试、系统集成调试来保证系统可运行;
- 警惕慢性进度偏离;
使用PERT或关键路径判断关键偏离 - 文档可防止记忆衰退导致失去对程序的了解;
不同的用户需要不同的文档;
自文档化(self-documenting)的程序,即将文档整合到源程序中;