《人月神话》阅读笔记

这是一本讨论软件工程的书。特别是在讨论项目的进度与人手的平衡关系上,打破了传统的人月的神话。而且,持续深入的讨论了如何让项目的设计保持完整性、如何保证项目的进度等软件工程领域常见的问题。虽然时间已经比较长,但仍是一本非常经典的图书。

第一章 焦油坑 The Tar Pit

这一章讲述了系统开发这个职业的乐趣和苦恼。做为一名开发人员,这种乐趣每个人都体会到过。包括:

  1. 创建事物的纯粹快乐;
  2. 开发对他人有用的东西的快乐;
  3. 将相互啮合的零部件组装在一起的快乐;
  4. 持续学习的快乐;
  5. 在容易驾驭的介质上工作的快乐。

同样,也充满了苦恼:

  1. 来自于追求完美的苦恼;
  2. 由他人设定目标、供给资源和提供信息的苦恼;
  3. 寻找Bug的苦恼;
  4. 即将完工的产品面临过时危险的苦恼。

编程(或者说系统开发)就像是一个焦油坑,我们在里面找到乐趣,却难以摆脱挣扎的痛苦。学习编程最困难的部分,是将做事的方式向追求完美的方向调整。

第二章 人月神话

这一章主要讲述了将「人月」做为估计和进度安排中使用的工作量单位的不足之处,揭示了软件项目经常滞后的根本原因,「缺乏合理的进度安排是造成项目滞后的最主要原因,它比其他所有因素加起来的影响还要大」。

人数和时间的互换仅仅适用于以下情况:某个任务可以分解给参与人员,并且他们之间不需要相互的交流。

向落后的项目中增加人手,只会使进度更加落后。

第三章 外科手术队伍

作者的一个观点,需要协作沟通的人员数量影响着开发成本,因为成本的主要组成部分是互相的沟通和交流,以及更正沟通不当所引起的不良结果(系统调试)。

对于效率和概念的完整性来说,最好由少数干练的人员来设计和开发,而对于大型系统,则需要大量的人手,以使产品能在时间上满足要求。

由 Harlan Mills 提出的外科手术队伍式的人员构成:首席程序员、副手、项目管理员、编辑、秘书、程序职员。

第四章 贵族专制、民主政治和系统设计

概念完整性是系统设计中最重要的考虑因素。

为了获得概念完整性,设计必须由一个人或具有共识的小型团队来完成。

如果要得到系统概念上的完整性,就必须有人控制这些概念。这实际上是一种无需任何歉意的贵族专制系统。

第五章 画蛇添足

尽早交流和持续沟通能使结构师有较好的成本意识,使开发人员获得对设计的信心,并且不会混淆各自的责任分工。

第六章 贯彻执行

第七章 为什么巴比伦塔会失败

巴比伦塔项目的失败是因为缺乏交流以及交流的结果-组织。

项目工作手册「不是独立的一篇文档,它是对项目必须产生的一系列文档进行组织的一种结构」。

Pernas强烈地认为使每个人看到每件事的目标是完全错误的;各个部分应该被封装,从而没有人需要或者被允许看到其他部分的内部结构,只需要了解接口。

两种角色的任意组合都可以是非常有效的:

  • 产品负责人和技术主管是同一个人;
  • 产品负责人作为总指挥,技术主管充当其左右手;
  • 技术主管作为总指挥,产品负责人充当其左右手;

第八章 胸有成竹

仅仅通过对编码部分时间的估计,然后乘以任务其他部分的相对系数,是无法得出对整项工作的精确估计的。

第九章 削足适履

第十章 提纲挈领

对于软件项目,关键文档是:目标、用户手册、内部文档、进度、预算、组织机构图和工作空间分配。

即使是小型项目,项目经理也应该在项目早期对上述的一系列文档进行规范化。

第十一章 未雨绸缪

所有修改都倾向于破坏系统的结构,增加了系统的混乱程度(熵)。即使是最熟练的软件维护工作,也只是延缓了系统退化到不可修复的混乱状态的进程,以致必须要重新进行设计。

参考资料:
1、《人月神话》Frederick P.Brooks.Jr.
2、外科手术队伍的瓶颈

cocowool

A FULL STACK DREAMER!