《人月神话》读书笔记(简略版)

 

计算机史上,推荐最多的两本书《代码大全》《人月神话》

第一章 焦油坑

从程序到编程系统产品是9倍的关系

编程有苦也有乐

乐:创造事物,不断学习

苦:人们通常希望项目快结束的时候收敛的快一点,但结果是越到最后,收敛越慢。

第二章 人月神话(人月:一个人干一个月,三个人干四个月就是12个人月)

人月是一个危险的带有欺骗性的神话,人员和时间的关系不一定是人越短,项目完成时间越少。除非是完全可分解任务,人与人之间不用沟通。有时候盲目增加人员只会适得其反。

进度安排中,系统测试阶段往往容易安排错误,不确定性太大。编码阶段最容易估算时间

软件进度安排经验:1/3 计划,1/6编码,1/4构件测试和早期系统测试,1/4系统测试。测试占一半时间,这是实际中经常做不到的。

Brooks法则:向进度落后的项目中增加人手,只会让项目更落后。     应该及时修改进度安排和减少项目任务

缺乏合理的进度安排是导致项目滞后最主要的原因

所有编程人员都是乐观主义

第三章 外科手术队伍(小型队伍 10个人)

传统队伍:工作划分,每个人负责一个部分

外科手术队伍:外科医生和副手了解所有的设计和全部的代码

传统队伍:大家平等,出现分歧的时候不好找到最好的解决办法

外科手术队伍:有上下级关系,分歧可由外科医生来判断

另外,剩余的人职能专业化分工

大型队伍时,要有系统架构师,要能清晰的划分体系结构设计和实现之间的界限,并专注于体系结构

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

体系结构设计:完整和详细的用户接口说明

贵族专制好,由智力精英完成创造性工作,其他人做齿轮(齿轮的描述其实不对,程序的实现也是创造性工作),这样有助于概念完整性。但上面的人不用要求下面的人如何做

在体系结构队伍设计时,实现人员干什么?如果让实现人员参与计划设计阶段,并不会加快速度,并且质量更加低劣。所以大型项目可以分阶段,在说明编写好之后再调入实现人员

功能和理解上的复杂程度的比值才是系统设计的最终标准,而不是丰富的功能。

第五章 画蛇添足

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

结构师如何成功地影响实现: 牢记是开发人员承担创造性和发明性的实现责任,所以结构师只能建议,而不能支配

时刻准备着为所指定的说明建议一种实现的方法,同样准备接受其他任何能达到目标的方法

对上述的建议保持低调和不公开

准备放弃坚持所作的修改意见

第二个系统是人们所设计的最危险的系统,因为往往画蛇添足

第六章 贯彻执行

即使是大型的项目,设计结果也应该由一到两个人来完成

规格说明作者应该追求的精确程度:在仔细定义规定什么的同时,定义未规定什么。

项目经理最好的朋友就是他每天要面对的对手——独立的产品测试机构/小组

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

因为缺乏交流,交流和组织和软件技术一样重要

要有项目工作手册,并及时更新

第八章 胸有成竹

仅仅通过对编码部分的估计,然后应用任务其他部分的相应系数,是无法得到对整个任务的估计的。

构建独立小型程序的数据不适用于编程系统产品。

工作量是规模的幂函数(不是成正比,规模越大,需要的工作量呈幂函数增加)

对常用的编程语句而言,生产率似乎是固定的。这个固定的生产率包括了编程中需要的注释,并可能存在错误的情况。

使用适当的高级语言,编程的生产效率可以提高5倍。

第九章 削足适履

培养开发人员从系统整体出发、面向用户的态度是软件编程管理人员最重要的职能。

第十章 提纲挈领

对于计算机硬件开发项目,关键文档是:目标、手册、进度、预算、价格

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

第十一章 未雨绸缪

在软件开发的过程中,往往第一个系统存在的问题挺多,它可能太慢、太大,而且难以使用,或者三者兼而有之。要将诶绝所有的问题,除了重新开始以外,没有其他的办法。系统的丢弃和重新设计可以一步完成,也可以一块块地实现。这是所有大型系统开发必须完成的步骤。

为舍弃而计划,无论如何,你一定要这样做。

变化是与生俱来的,不是不合时宜和令人生厌的异常情况。

用户的实际需要和用户感觉会随着程序的构建、测试和使用而变化。

软件产品易于掌握的特性和不可见性,导致它的构建人员面临永恒的需求变更。

抛弃原型概念本身就是对事实的接受——随着学习的过程更改设计。

对于一个广泛使用的程序,其维护总成本通常是开发成本的40%或更多。

程序维护中的一个基本问题是——缺陷修复总会以固定(20%~50%)的几率引入新的bug。整个过程是前进两步,后退一步。

系统软件开发是减少混乱度(减少熵)的过程,所以他本身是处于亚稳态的。

软件维护是提高混乱度(增加熵)的过程,即使是最熟练的软件维护工作们也只是放缓了系统退化到非稳态的进程。

第十二章 干将莫邪

在某些应用上,批处理系统绝不会被交互式系统所取代。

调试是系统编程中很慢和较困难的部分,而漫长的调试周转时间是调试的祸根。

第十三章 整体部分

自上而下设计比较好

第十四章 祸起萧墙

重大灾害是比较容易处理的,它往往和重大的压力、彻底的重组、新技术的出现有关,整个项目组通常可以应付自如。 但是一天一天的进度落后是难以识别、不容易防范和难以弥补的。

进度表上的每一件事被称为“里程碑”,它们都有一个一个日期。里程碑的选择只有一个原则,那就是里程碑必须是具体的、特定的、可度量的事件,能够进行清晰定义。

第十五章 另外一面

自文档化的程序:将文档整合到源程序,这对正确维护是直接有力的推动,保证编程用户能方便、及时地得到文档资料。

将文档的负担降到最小的三个方法 :

第一是借助那些出于语言的要求而必须存在的语句,来附加尽可能多的“文档”信息。

第二是尽可能地使用空格和一致的格式提高程序的可读性,表现从属和嵌套关系。

第三,以段落注释的形式,向程序中插入必要的记叙性文字。

程序流程图用处不大,即使要,也不用按标准来,不用太详细

发布了59 篇原创文章 · 获赞 46 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/sinat_41852207/article/details/88254183