全部写作
WRITING
写作 · 读书

《人月神话》读书笔记

《人月神话》这本书很早就听说过,是软件工程领域的经典,前阵在朋友圈看到该书的分享,契机就来了,赶紧把它加到了书单里并置顶。 这本书读完的感受是专业性很强,有些计算机的概念我读着也云里雾里, 最让我震惊

约 7 分钟

《人月神话》这本书很早就听说过,是软件工程领域的经典,前阵在朋友圈看到该书的分享,契机就来了,赶紧把它加到了书单里并置顶。 这本书读完的感受是专业性很强,有些计算机的概念我读着也云里雾里, 最让我震惊的是,书中所提理念,真的能切切实实地指导我现在的开发工作,而这些理念是作者1975年提出的,距今已有50年之久,期间计算机技术如坐了火箭一样快速发展,从只有一小波人能操作的大型机,到可以走进千家万户的台式机,再从互联网到移动互联网,可以说是世界迎来了翻天覆地的变化,但本书仍能流传不衰,是实实在在的经典,非常值得拜读。 书名“人月神话”,起初我也不知道啥意思,一本技术书,起名竟像玄幻小说,看了书后,知道了“人月”指的是项目开发工作的计量单位,即一个人一个月所能完成的工作量,这时再结合自己的软件开发经历,面对“人月神话”这几个字不免会心一笑。 作者认为用人月作为衡量一项工作的规模是一个危险且带有欺骗性的神话,它暗示着人员数量和时间可以互换,书中就据此引出了软件项目开发的特殊性,并给出了具体解决方案。 而作者是一位充满浪漫主义色彩的程序员,不仅书名起得很有新意,章节名和每章节前引用的相关谚语也令人回味无穷,下面将介绍一下这位作者以及书籍中令我惊叹的内容。 作者弗雷德里克・布鲁克斯,被认为是“IBM 360系统之父”,担任了IBM 360系统的项目经理。IBM 360系统在计算机史上具有重要里程碑意义,深刻影响了我们现在熟知的电脑操作系统的演化,系统研发投入超过了50亿美元,而美国政府用于研发原子弹的“曼哈顿计划”投资为25亿,足以可见其重要地位。凭借该项目,布鲁克斯与同事荣获1985年的美国国家技术奖,之后他进入大学任教,因其在计算机体系结构、操作系统、软件工程等领域做出的开创性贡献,于1999年获得了图灵奖(计算机科学界的最高荣誉,被誉为“计算机界的诺贝尔奖”)。

编程的乐趣 阅读的一大快乐就是找到共识,作者对编程乐趣的描述简直说到了每一位程序员的心坎里。 首先这是一种创建事物的纯粹快乐,如同小孩玩泥巴一样,是上帝创造世界的折射,一种呈现在每片独特、崭新的树叶或雪花上的喜悦。 其次,快乐来自开发对他人有用的东西,内心深处我们都是期望对他人有所帮助的,能实现一个功能满足用户的需求就是快乐的事情。 第三是编程的过程就像组装精密仪器,将相互啮合的零部件组合在一起,看到它们精妙地运行,得到预先所希望的结果,仿佛看到艺术品一样。 第四是学习的快乐,编程是不断解决问题的过程,该过程能从中学到很多新的事物,有理论上的也有实践上的。 最后,乐趣还来自于工作在如此易于驾驭的介质上,与音乐、绘画、建筑等相比,程序员的创作能够快速的获得结果以及快速地调整,这种方便快捷与及时反馈令人着迷。 当然烦恼肯定也是有的,作者也有所描述,总之对于大多从业人员来说乐趣是远大于苦恼的。

人月不可互换 向进度落后的项目中增加人手,意味着额外的培训与沟通成本,往往只会使进度更加落后,项目的时间依赖于顺序上的限制,用一个形象的比喻就是无论多少位母亲,也无法在一个月里孕育出生命。 当然,对于软件开发事无绝对,后来有团队进行实验验证该准则,得出的结论是”向进度落后的项目中添加人手总会增加项目的成本,但并不一定会使项目更加落后。“如果要加人手,尽量就在项目早期确认下来,比后期加人安全。

合理的时间安排 造成进度落后的最主要原因是缺乏合理的时间安排,作者根据多年的经验法则建议是: 1/3计划 1/6编码 1/4构件测试和早期系统测试 1/4系统测试,所有的构件已完成 编码时间仅为六分之一,足以可见设计规划与测试对于软件项目的重要性。

为什么要有正式的文档 1、书面记录决策是必要的,只有记录下来,分歧才会明朗,矛盾才会突出。 2、文档能作为同其他人的沟通渠道。 3、项目经理的文档可以作为数据基础和检查列表,通过文档可以清楚了解项目状态,以及需要改进的地方。 企业中文档建设的好坏,对员工工作体验、工作效率影响极大,我亲身经历的反例就是有的同事在会议或IM聊天中确认的信息不及时更新至文档中,导致后续看文档的人获取到错误信息,以及工具说明文档写得不完善或已过时。写好文档确实不是一件简单的事情,但重视文档的态度应该是企业内部需要大力推崇的。

自文档化 作者提出了一种把文档整合到源代码的理念,即自文档化,首先是保证了编程用户能方便、即时地得到文档资料,其次是代码的更新与文档的更新能更好的同步。 这对我启发很大,代码的版本控制工具非常好用,可以很好地追溯和对比历史版本,而大部分文档工具在这方面偏弱,直接将文档与代码整合在一起,感觉是个不错的选择,我将尝试一下。

关键的工作是产品定义 Bell实验室安全监控系统项目的V.A.Vyssotsky提出,“关键的工作是产品定义。许许多多的失败完全源于那些产品未精确定义的地方。” 产品的概念完整性在使它易于使用的同时,也使开发更容易进行以及bug更不容易产生。 好的产品定义包括:

  • 细致的功能定义
  • 详细的规格说明
  • 规范化的功能描述以及实施方案 产品定义决定了产品上限,对于整个项目是重中之重。

没有银弹 我看的是1996年出版的二十周年纪念版,额外多了篇作者在1986年IFIPS会议上的论文《没有银弹:软件工程的根本和次要问题》,预言十年内没有任何编程技巧能够给软件的生产率、可靠性、易用性带来数量级上的提高,该论文激起很多剧烈讨论,作者在纪念版中做了一些回应说明。 银弹是指民间传说中唯一能杀死人狼的神奇武器,在软件工程领域,它象征着人们幻想中的、能够一举解决软件开发所有核心困难的单一技术或方法。 软件领域确实有一些带来显著效率提升的技术,如高级语言、分时操作系统、集成开发环境等,但它们解决的主要是次要问题,即实现上的困难,而软件开发的本质困难是其概念上的复杂性、一致性、可变性、不可见性,即设计上的困难。 如今有许多强大的工具如AI,但目前它们顶多是强大的动力外骨骼,还不是可以替代人脑的银弹。 所以不要想着一劳永逸,重视软件开发的本质问题,学会与“狼人”共舞。

挂一漏万,《人月神话》还有很多精华没有提到,感觉处处都是金句,有很多概念我还没搞懂,尽可能地描述了我的理解与感受,希望你能喜欢,感兴趣请阅读原书,这是一本值得仔细研读,常读常新的软件开发神话。