《人月神话》读书笔记
-
软件工程面对的就是一个焦油坑。
- 缺乏合理的时间进度是造成项目滞后的最主要原因。某些任务无法在不损害结果的情况下加速。作者的经验是1/3计划、1/6编码、1/4构建测试、1/4系统测试。
- 优秀程序员和普通程序员效率之间的差异非常大,小型精干的队伍是最好的,类似于外科手术队伍的团队架构既能获得由少数头脑产生的产品完整性,又能得到多位协助人员的总体生产效率,还彻底地减少了沟通的工作量。
- 无论项目大小,将设计方法、体系结构方面的工作与具体的实现相分离是获得概念完整性的强有力的方法。体系结构(architecture)、设计实现(implementation)、物理实现(realization)的许多工作可以并发进行。
- “第二个系统”常常会设计过度。
- 出于精确性的考虑,我们需要形式化的设计定义,同样也需要叙述性说明来加深理解。
- 巴比伦塔项目(通天塔)的失败是因为缺乏交流,以及交流的结果--组织。所以“交流”和项目手册是必不可少的,同时需要注意的是不是每个人都需要了解每一件事,封装和接口是开发人员专注目标和减少复杂性有效的方法。每个项目需要有两个领导角色--产品负责人、技术主管(架构师),两种角色的可以任意组合:产品负责人和技术主管是同一个人,产品负责人作为总指挥,技术主管辅助,技术主管作为总指挥产品负责人辅助。
- 仅仅通过编码部分的估计,然后乘以任务其他部分的相对系数,是无法得出对整个项目工作的精确估计的。程序开发的工作量呈程序规模的指数增长。
- 精炼、充分和快速的程序,不仅仅是技巧上的提高,更多的是新型算法上的突破;而算法上的突破常常来自于数据或者表的重新表达。
- 推进软件项目,要首先明确:目标、用户手册、内部文档、进度安排、预算、组织机构图和工作空间分配。
- 开发人员交付的是用户满意程度,而不仅仅是实际的产品。软件产品抑郁掌握的特性和不可见性,导致了它的开发人员面临着永恒的需求变更。
- 使用牛X的工具。
- 整体设计要一致,详细设计要精确定义。
- 把控关键进度,仔细区分状态报告、毫不惊慌地接受报告、绝不越俎代庖将能鼓励诚实的汇报,必须有评审的机制。
- 文档能在整个生命周期对克服懒惰和进度的压力起促进激励作用,团队的领导者应该正确地展示如何有效和经济地编制文档。最小化文档负担的3个关键思路,名称和声明见名知意、规范从属和嵌套关系,提高程序可读性、关键注释
- 没有银弹。狼人是西方恐怖民间传说妖怪中最可怕的存在,因为它们可以完全出乎意料地从熟悉的面孔变成可怕的怪物,而银弹可以消灭它们。软件工程具有狼人特性,常常看似简单明了的东西,却有可能变成一个落后进度、超出预算、存在大量缺陷的怪物,所以人们迫切需要“银弹”。
- 定义用户群:
- 他们是谁
- 他们需要什么
- 他们认为自己需要什么
- 他们想要的是什么
- 抛弃瀑布模型,拥抱增量开发