《人月神话》读书笔记

一、写在前面

《人月神话》第一版出版于1975年,至今对软件工程都有很大的价值,应该是程序员书柜里的必藏书籍。作者结合在IBM大型项目的切身实践和教学经验写成此书,并于1995年再次出版,总结了20年前的观点,增加了几个章节。下面就书中主要观点写下笔记和感想。

二、本书主要观点与感想

焦油坑

焦油坑原本描述的场景是恐龙、大象、老虎在焦油(沥青)中挣扎,挣扎越剧烈陷入越深,都没有足够的技巧摆脱束缚。作者把过去几十年的大型系统开发比喻为焦油坑,仅极少数项目满足了目标、预算和进度的要求。问题纠缠在一起,其麻烦程度让人惊讶,很难看清问题的本质。

接下来作者要表达的观点是完成一个程序系统产品远难于个人独立开发、使用的程序

  • 程序:即一个独立运行的程序
  • 程序产品

即把独立程序转变为可被任何人运行的、已经过测试的、有完备文档和可维护的程序。这将是独立程序的3倍工作量

  • 程序系统产品

即把程序产品转变为具有规范的输入输出接口、在功能上能相互协作可交互的程序集合,将组件集成为整个系统。又加了3倍工作量

所以,一个完整的软件系统产品将是一个独立程序9倍的工作量。

系统开发的目标应该是产出真正有用的软件产品。

人月

人月指工作量单位,即人力(人)和时间(月),若3个人花2个月完成项目则工作量为6人月。人月神话意味着人月是具有欺骗性质的,因为它暗示人员数量和时间是可以相互替换的,但实际上人月之间的平衡不是线性关系,5个人2个月完成的项目10个人1个月并不一定能完成。

作者的Brooks准则:向进度落后的软件项目添加人手只会使进度更加落后。因为添加新成员需要沟通、培训的成本,需要考虑重新安排开发人员工作,以及无法逾越的关键路径。向项目添加人力,越早期越安全。

作者进度安排的经验是1/3计划、1/6编码、1/4组件测试是和1/4系统集成测试。

作者在20年后的观点中引用了关于Brooks准则的研究案例,表示向进度落后的软件项目添加人手总会增加项目的成本,但并不一定总会使项目更加落后。这里作者实际强调的是人月之间并非线性关系,人月往往给人一种错觉

现在,当项目有delay风险时往往采取加班的策略,对于添加人力来说,如今的沟通成本小于当时作者所处的环境了,微服务化的今天学习理解成本更小,低耦合和单一职责使得工作协调更为简单。另外,作者也提到了项目排期的经验,这方面我们不仅需要考虑coding还有自测、文档的时间,并再该基础上乘以1.2到1.5,留出buffer,甚至是乘以2,因为难免会遇到某些细节问题或线上问题处理或会议等等。

外科手术队伍

外科手术队伍是由主治医生操刀、其他人员辅助,各司其职,共同完成手术的团队。类似的,开发团队应该以外科手术队伍的方式组建,由一位首席程序员或少数精炼的开发人员进行总体设计和开发,团队中剩余人员进行专业化分工,如测试、工具维护、语言专家等。

这么组织的目的是保证概念上的完整性,又能得到多位人员协助提高总体生产率,还减少了沟通的工作量。

大型软件项目的人员组织将每一部分由一个团队解决,需要将系统进行分解,仅仅需要协调那些少数精炼的开发人员。

概念完整性

概念完整性是系统设计中最重要的考虑因素,反映出一系列连贯的设计思路,每个部分设计的一致性。用户能通过概念完整性感受到易用性,如Macintosh所有应用程序界面的统一。

为了获得完整性,产品结构师扮演了重要角色,结构师是用户的代言人,支持用户的真正利益,从上而下的设计体系结构,把系统分解为子系统,并将体系结构与具体实现分离。(注意,这里说的体系结构与如今的体系结构概念略有不同,后者指系统架构设计,前者更偏重于需求概念。)

如今,软件工程职能专业化分工相当精细了,PM、H5、后端开发、运维、测试、中间件开发等等,具体业务项目相关开发人员主要是前、后端,一般也是会指定一位项目负责人进行总体系统拆分,系统设计的把关。

迭代开发

作者在1995年第二版书中明确提出增量式开发的概念,即“增量开发模型更佳——渐进的精化”。在每个功能基本可运行后,一个接一个的精化或重写每个模块,增量地开发整个系统。

好处是对项目产生激励作用,可以较早的开始用户测试,有效的应对需求变更。

项目交流

巴比伦塔工程失败的原因就是缺乏交流,导致了无法交谈合作、争辩、沮丧和群体猜忌。

团队组织的目标是减少必要的交流和协作。为了减少交流,组织结构包括了人力划分和限定职责范围。

银弹探讨

古代狼人传说中,只有用银质子弹才能制服这些怪兽。作者采用*“银弹”*一词来比喻人们渴望找到可以使软件成本像硬件成本一样迅速降低的尚方宝剑。

“没有银弹”——即作者声明和断定在未来十年内,没有任何技术上或管理上的方法,可以保证软件的生产率有数量级的提高。

软件的根本困难是固有的概念复杂性,无论用什么方法,无论在任何时刻,都必然呈现。

三、其他观点

  • 所有的程序员都是乐观主义者,一个错误的假设是:“一切都将运作良好,每一项任务仅花费它所应该花费的时间”
  • 优秀的专业程序员的生产率是较差的程序员的10倍。
  • 里程碑必须是具体的、特定的和可度量的事件,能进行清晰的定义。
  • 对软件程序产品来说,文档与提供给机器识别的内容同样重要
  • 人就是一切。对于项目的成功而言,项目人员素质、组织和管理是比使用的工具、技术更重要的因素

四、参考书籍

《人月神话——40周年中文纪念版》

转载于:https://my.oschina.net/hebaodan/blog/2006715

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值