首页 > 其他分享 >人月神话阅读笔记01

人月神话阅读笔记01

时间:2024-06-19 17:59:39浏览次数:24  
标签:章节 01 神话 笔记 交流 作者 文档 完整性

人月神话阅读笔记01

本书以“焦油坑”一章开篇,这一得名于自然界的产物,远古时代困住了无数的洪荒巨兽。而作为人类历史以来,甚至未来都会是最复杂的一项工作——大型软件开发,自诞生以来似乎也被"焦油坑"所困扰,顺利走出来的寥寥无几,绝大多数都在其中苦苦挣扎,表面上看起来没有任何一个单独的问题会导致困难,每个问题都能获得解决;但是当它们纠缠和积累在一起的时候,团队的行动就会变得越来越慢。随着时间的推移最后慢慢陷入绝望最终导致项目无疾而终。

但同时作者也在本章中也总结了编程的乐趣——创造全新的事物,并且该事物对他人是有用的;而且在创造的过程中你需要不断地进行学习,从而获得持续学习的乐趣等等。这些快乐不仅满足了我们内心深处进行创建的渴望,而且还唤醒每个人内心的情感。

任何事物带来快乐的同时,不可避免有着随之而来的苦恼,于编程而言——追求完美;由他人设定目标,提供资源和信息,寻找琐碎的BUG等等。

2.2 人月神话

本书所包含的十几个章节标题中,被单独拿出来作为书名,意义自然不同一般。项目延期之后,人们的第一反应就是堆人,但往往会导致更严重的滞后,而本章节作者就用一系列的数据和严谨的推论告诉读者这种条件反射只会火上浇油。人和月的互换只能是一个神话,就像“一个孕妇怀胎十月,十个孕妇怀胎一月就能生孩子”。

作者在本章节中以其丰富的经验对进度安排给出指导建议:

1/3 计划

1/6 编码

1/4 构件测试和早期系统测试

1/4 系统测试,所有构件已完成

2.3 概念完整性

最好的团队组成应该是类似外科手术队伍结构——领头羊只能有一个,其他人辅助它来完成任务。没有高低贵贱,只是分工不同。这样我们能够获得减少沟通,提交生产效率等等诸多好处,而且最重要的是我们将获得概念的完整性。

将设计交由一个人或者非常少数忽悠默契的人来完成才能保证概念的完整性,而将体系结构,设计实现和物理实现相分离则是获得概念完整性的强有力方法,这一点契合了我们现在已经作为常识的“关注点分离”理念。

在本话题的相关章节中最让笔者印象深刻的是作者在第四章开篇序言中就以建筑业举例——建筑大师需要:

首尾融会贯通其前辈建筑师的成果

同时完全掌握他们那个时代的建筑技术

最后还要能够恰如其分地运用这些技术,避免轻浮地炫耀,并绝不花哨。

以上三点,笔者觉得不仅仅适用于建筑行业,在任何行业的有志之人都需要谨记这三条法则,才能创造出杰出之作。那些喊着创新,革命的,借用郭德纲的一句话——"拿着痰桶炒菜,你打算自己享用吗?"

2.4 巴比伦塔的失败

作者将巴比伦塔失败的原因之一归结于缺乏交流,缺乏组织。而我们能从中得来的教训之一在大型软件开发,要无比重视交流的重要性。本书初版之后四十余年的现在,人们所发明的很多技术和规范很大程度上都是为了加强“交流”,减少不必要的交流,增加交流的效率——团队组织的目的是减少所需的交流和合作的数量。制定规范也是。

正如作者直接在文中以文字形式表达的“交流和交流的结果——组织,是成功的关键”。但我们要谨记交流和组织的技能需要锻炼,相关经验的积累和能力的提高同软件技术本身一样重要,不要因为一时的失败而放弃,也不要因为成绩而固步自封。

对于交流,文档这一工具起着非常大的作用,例如项目经理的基本职责是使每个人都向着相同的方法前进,所以其主要职责是沟通,而不是做决定。因此他需要大量的文档来极大减轻他的负担 。

2.5 未雨绸缪

人们总是希望一切的事情都尽在掌握之中,所以总是试图在制定完美计划之后一路顺风顺水地执行下去。但是软件维护是一个提高混乱度(增加熵)的过程,所以出现前进两步,后退一步;甚至前进一步,后退一步都是很正常的。而且随着维护的深入,会发现用在修复原有设计上瑕疵的工作量越来越少,而早期维护活动本身所引起的漏洞的修复工作越来越多。正如大思想家斯宾塞·约翰逊曾经说过“唯一不变的是变化本身”,我们要为变更设计系统,为变更计划组织架构。

2.6 整体部分

在设计的过程中,我们要做到自上而下的设计,在设计的每个步骤中,尽可能地使用级别较高的表达方法来表示概念和隐藏细节,直到必要的时候再进一步的细化。文中的这段话让笔者想起SICP中教授们试图传达给学生们的一个屠龙之术——“推迟做出决定的时机,因为只有尽可能地退出做出决定的时机,你之后的行为才不会被当下做出的决定所影响,所阻碍”。而且细节的抑制使得结构上的缺陷更加容易识别。

作者在本章中还详细给出了控制变更的最佳实践——阶段化,定期变更。

直到下一次定期发布前都使用快速补丁。

而在当前的发布中,其将已经通过测试并进行了文档化的修补措施整合到系统平台中。

另外作者还给出了系统集成测试阶段的最佳实践——一次添加一个构件。我们总是倾向于将所有的构件全部组合到一起再测试,但是,请拒绝诱惑。正如《重构》里说的,我们要遏制住心魔,小步前进!

2.7 祸起萧墙

进度落后往往并不是因为大灾难,而通常只是因为那些仅仅会导致延迟半天到一天的事件的堆积最终致使整个进度延期一年。

对于里程碑的确立,必须是具体的,特定的,可度量的事情,能够清晰定义。不能清晰定义的里程碑是难以处理的负担。

关键路径技术是衡量是否延期的重要方法,每个人都要尽量让自己的工作远离关键路径。

老板要克制住越庖代俎做决定的心魔,那样才能得到真实的项目状态报告。这里让笔者联想到家庭教育,家长总是希望孩子能说出自己的心里话,但是孩子说出后又横加指责,不问孩子的意见而横加干预,最后又去责怪孩子什么话都憋在心里不说出来。

2.8 另外一面

试图维护不同文件之间的同步关系,是一件非常费力不讨好的事情。

对于程序而言,"合并文档"才是比较好的解决方案,而且最好做到自文档化。感觉这些应该是类似代码里的注释,以及诸如Swagger等等。

2.9 没有银弹

这涉及到软件工程中的根本和次要问题。复杂性,一致性,可变性以及不可变性这四个根本特性决定了软件开发中很难出现银弹。而且作者甚至觉得人们对银弹的追求,有点类似于古往今来对炼金术的追求。

但作者同时指出面向对象这一颗铜弹有前途——强制的模块化和清晰的接口等等可以极大增加效率。

3. 二十年的《人月神话》

1995年左右,在《人月神话》20周年纪念版本中,作者对过去20年来读者非常关心的几个问题进行了详细的叙述——“哪些在当时就是错误的?哪些是已经过时的?而哪些是软件工程领域中新近出现的?”

正如本章开头所说,《人月神话》是关于人与团队的书,所以时至今日,过去了四十余年,书中的内容依然毫无过时的迹象。不过作者依然对书中的观点进行了详细的梳理,先是列举出依然适用的观点——诸如:

软件研发过程中概念完整性的核心地位(诸如MAC的界面上的概念一致性,即使第三方应用也有着非常相似的界面,这对用户来说是非常棒的体验);

体系结构和设计实现,物理实现相分离(感觉非常类似于现在被视为尝试的"关注点分离"原则)等等。

之后作者也大方地承认在诸如信息隐藏方面的错误判断。真的是让人感概大师的胸襟。

不过最让笔者动容的是作者在章节末尾表达出来的旺盛好奇心,以及面对新知识时候的欣喜,真的是让人敬佩不已。

标签:章节,01,神话,笔记,交流,作者,文档,完整性
From: https://www.cnblogs.com/baizhuoran/p/18256888

相关文章

  • 人月神话阅读笔记02
    人月神话这本书究竟谈了什么?我大概按CMMI的项目管理,工程和支持过程三个维度。按人,方法工具技术和流程三要素进行了一下梳理。书里面这几个方面的内容全部涉及到了。在项目管理方面可以看到项目估算,组织结构和人员角色安排,团队建设和沟通,历史数据积累和建模,软件开发方法论,风险和问......
  • 《梦断代码》阅读笔记01
    读《梦断代码》有一定时间了,读了将近一半的内容对这本本书也有了初步的了解,开始选择读书的时候看到这本书的名字然我想起了一部经典的电影叫做《魂断蓝桥》于是我便毫不犹豫的选择了这本书,看之前我先看了一下书评网上的评价都还不错,也知道了这本书主要讲的是Chandler漫长而痛苦的......
  • 梦断代码阅读笔记02
    梦断代码阅读笔记02「梦断代码」中对软件工程所面临的种种困难与艰难的描述,即便再过5年读也许都不过时。因为正如原作者所说,书中描写的是一队人马并肩扛起代码大石,虽历经磨难仍欲将其推上山顶的故事,而正是这种故事成就着今天全世界亿万台服务器和PC机上运行的各种软件,成就着人类......
  • 梦断代码阅读笔记03
    梦断代码阅读笔记03刚开始读这本书的时候,我是抱着一种读故事的方式去读的,但是慢慢读的过程中,就会发现,这并不是一本故事书,在通过每一个小故事的讲述中,讲述了软件开发的历史,每一次大变革的经验,在这次的读书过程中,我对书中的内容作了如下摘要:1、布鲁克斯法则:往已延误的项目中补......
  • java笔记
    第二章:Java基本数据类型Java具有八种基本数据类型,用于存储简单的数值、字符和布尔值。这些类型分为数值类型、字符类型和布尔类型。1.数值类型byte:8位有符号整数,范围:-128到127。byteb=100;short:16位有符号整数,范围:-32768到32767。shorts=10000;int:32......
  • 01《构建之法》阅读笔记_1
    《构建之法》第一章介绍了软件工程的概念、理论、知识点以及软件工程与计算机科学的关系。具体来说,这一章让我了解了以下几个概念:源代码管理、配置管理、质量保证、软件测试、需求分析、程序理解、软件维护和服务运营,这些概念共同构成了软件的生命周期。此外,我还读到“将软件与程......
  • 02《构建之法》阅读笔记_2
    内容总结:单元测试  单元测试是一个合格的软件必备的流程,就像运动员在比赛之前的热身,活动身体的每一块肌肉,检查它是否处于紧绷状态,确保比赛时的完全发挥。 那么一个好的单元测试的标准是什么?1.单元测试应该在最基本的功能上/参数上验证程序的正确性一个软件的基本功能是用......
  • 03《构建之法》阅读笔记_3
    软件领域可以分为两个方面:一方面是技艺创新的大爆发;另一方面是坚持不懈的工程工作,包括软件的改善、维护和测试等,这一方面占了90%-95%的比例。——瓦茨·汉弗雷/软件工程的奠基人之一 对于我们做软件的人来说,我觉得写代码的能力固然重要,但是项目开发中用到的项目管理和项目......
  • 05构建之法阅读笔记
    第6章敏捷流程——6.5敏捷的故事这一小节提到了几种比较出名的敏捷开发方法论,如FDD、Scrum、XP、TDD。前三者在书中都有专门的介绍,但TDD,久闻其大名,到底是何许妙招?TDD(TestDrivenDevelopment),即测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编......
  • 06构建之法阅读笔记
    第11章软件设计与实现——11.2开发阶段的日常管理——11.2.2每日构建这一小节中提到了每日构建的重要性,那么,什么是每日构建?软件开发是一种集体活动,其中必然面临各成员间的协调、统一问题。银行每天都要对各网点进行清算结账,软件开发也是一样的,必须找到一种方......