Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【笔记】《人月神话》——"没有银弹"与 后记

【笔记】《人月神话》——"没有银弹"与 后记

作者头像
ZifengHuang
发布于 2020-07-29 08:12:58
发布于 2020-07-29 08:12:58
2.6K0
举报
文章被收录于专栏:未竟东方白未竟东方白

这是最近看《人月神话》时中途记录的一些笔记,书终于看完了,还不错,这篇是书最后几章(16-19章)的笔记和自己的一些想法。

这篇作为最后一篇是最短的,主要是作者写完书后的总结

没有银弹

  1. 软件开发的根本任务是打造构成抽象软件实体的复杂概念,次要任务是用编程语言表达这些抽象实体,在空间与时间限制内将其映射为机器语言
  2. 民间传说中,最可怕的怪物是人狼,对付人狼的方法是银弹
  3. 由于开发难度的不断增大,一定要仔细进行市场调研,进行快速原型开发快速迭代,不断更新产品,不断培养新生代的杰出概念设计人员
  4. 软件开发难度不断增大的根本问题是概念结构不可避免的复杂性,而让人感到有解决问题的幻想的原因是计算机硬件无与伦比的发展速度
  5. 计算机软件实体可能比人类创造的其他任何实体都要复杂,而这个复杂度是不可改变的根本属性,因为这正是软件开发所追求的本质
  6. 而这个复杂性是所有开发成员都要一致面对的,水平的差别与复杂度的一致造成了开发的苦难
  7. 软件再由于易于更改的特性面临了无尽的变更压力
  8. 再加上软件本身结构的不可见性和无法可视化的属性,一切对软件逻辑的可视化手段都是徒劳,严重阻碍了成员间的沟通,构成了难度的叠加
  9. 尽管软件开发的根本困难无法解决,软件开发的很多次要困难在硬件的发展中不断得到解决:高级语言的流行,分时思路的应用,统一编程环境的推广
  10. 面向对象,更好的编程语言,人工智能,专家系统,可能成为更接近银弹的事物,这些技术的目标是让具体应用的复杂度与程序本身相分离
  11. 自动编程是不现实的,因为所谓的自动编程时,提给计算机的“目标”,常常就是问题的解决方法,也就是新的编程方法而已
  12. 图形化编程不现实,就如同流程图是不必要的一样
  13. 可视化程序不现实,因为即使使用流程图显示了逻辑,仍然有大量交叉引用,嵌套等复杂的情况,要么不显示要么杂乱无章
  14. 完美的程序验证不存在,因为很多缺陷是有条件的,不是必然发生,甚至是无法预见的
  15. 对环境和工具的开发有很大意义
  16. 硬件的提升并非银弹,就如同之前50年的发展意义,根本的复杂性无法解决
  17. 构建软件的最可能的彻底解决方案是不去开发任何软件,意思是通过购买已经制作好的软件进行少量自定义来符合需要,如Excel
  18. 计算机硬件与软件成本的比率在不断降低,昂贵的定制软件越来越成为负担,通用软件越来越流行
  19. 客户并不知道自己需要什么,所以快速可用的原型开发和然后与客户讨论并快速迭代才是必要
  20. 原型的作用是对重要的界面进行模拟演示,然后增量开发
  21. 增量开发的做法对士气有很大提升,但同时需要更好的概念设计和自上而下的开发
  22. 良好的设计需要完善的设计方法,卓越的设计需要天才般的设计人员,培养好的设计人员非常关键
  23. 产品的最终特色依赖于设计人员
  24. 培育好的设计人员的方法如下:

再论没有银弹

  1. 软件开发的必要部分是概念结构,次要部分是实现过程
  2. 目前来说,次要部分已经下降到工作的一半以下了
  3. 重用和交互的构件开发是解决根本问题的一种办法
  4. 软件的复杂性是最严重的内在困难,不可避免,最好通过在更高级别开发软件,使用已有的大构件拼接来简化这个部分
  5. 开发时需要注意做好层次化方便重用和增量化使系统能持续运行
  6. “没有银弹”的论述是合理的消极想法
  7. 软件的质量是开发的追求,系统的开发方法不是为了加速而是为了解决质量问题
  8. 当软件销量达到一定程度时,支配性问题就是质量,性能,维护成本
  9. 工具需要注意好人的使用方便,而不是专业性,易于定制有很大吸引力
  10. 开发时要有意识地使用更大的构件来创建
  11. 面向对象在整个开发周期中都需要运用,投入很大,但是收益在后续维护中才会体现,所以很多人不喜欢,但是这是非常有用的
  12. 当用户决定寻找构件比自己编写更加昂贵时用户会考虑重新开发
  13. 重用的模块常常是通用功能,所以很多构件无法重用,这是限制
  14. 可用的产品化的构件成本是单独开发的三倍,所以少见
  15. 随着高级语言越来越丰富和复杂,软件重用会面临越来越复杂的选择,越来越大的词汇量
  16. 类比于记忆单词,制作构件时要制作一些例子方便创造上下文记忆,且将功能(词义)详尽的构件放在一起
  17. 随着时代的发展(距离“没有银弹”发布已经过去10年),我们越来越可以关注于纯粹的概念设计了,但是银弹仍不存在,我们仍然应该关注于解决次要问题而非寻找通式

人月神话的是与非

  1. 这是对之前部分的总结,如果没有时间通读全书的话,专注看这一章节即可
  2. 软件系统可能是人类创造中最复杂的事物
  3. 在很长一段时间中,软件工程的焦油坑仍然会使人们举步维艰,无法自拔

二十年后的人月神话

  1. 《人月神话》是关于人与团队的书,所以是淘汰缓慢的
  2. 书关注的是如何在很多人共同工作时保持概念的完整性
  3. 架构师就像电影的导演,管理经理则是制片人
  4. 概念的完整性是产品质量的核心,架构师是迈向完整性的重要一步
  5. 开发第二个系统的后果是盲目的无用功能和错误的用户频率猜测
  6. 开发前需要定义好用户群:他们是谁,他们认为自己需要什么,他们实际需要什么,他们想要的是什么
  7. 架构师应该猜测一系列用户需求的频率来确认目标和分清主次
  8. 通过类别已有物来获得概念的完整性是很重要且有用的,例如图形界面的设计就极好地类比了现实世界
  9. 架构师的最大困难是如何平衡用户功能与易用性,理想解决方法是把易用功能和专业功能一起提供
  10. 传统的瀑布模型是错误的,因为它假定了开发的一次性和无需回退,且将测试放于末尾容易造成无法补救的性能问题和错误
  11. 实际应该用增量开发模型,从核心循环开始逐步增加,时刻保证产品的可用可运行
  12. 每个加入的功能都需要先经过测试,加入后应该有整体测试,应很早开始用户测试并按照预算开发
  13. 变化较小的决策应该放在产品树的根部
  14. 增量时软件应不断重建,一周一次甚至一天一次
  15. OO的封装隐藏思路是唯一提升软件设计水平的途径(存疑,接下来看设计模式)
  16. alpha版本(第一个版本)的里程碑最优时间应是估计工作量(人月)的立方根
  17. 无论安排多少人手几乎没有什么项目能提早25%的进度
  18. 建议在开发后期加入新的开发人月,此时他们会专注于完善已有功能而非改变
  19. 人员的素质,组织和管理是项目成功的关键
  20. 开发中途不要破坏团队的完整性
  21. 创造力来自个人,不要破坏个人的主动性和创造力,项目经理应该专注于设计架构和流程
  22. 给低级别组织保留自由度和责任能让效率更高
  23. 软件成本是开发成本与数量的比值,包装和宣传市场的成本非常高
  24. Excel宏命令式的元编程可能流行,应该给软件留下可以交互脚本的窗口(MOD)

后记

《人月神话》这本书我也是看了蛮久,基本每周都是看三小时,差不多100页,边看边写写画画,然后隔一天总结成字记录下来。

如今看完了这本书,我心里的感受和刚开始看的时候差不多,那就是这书对于还没有什么项目经历的人例如我来说可能感触有限。书中我感觉最最重要的其实是第18章作者自己做的总结,如果没有时间全看完的话,认真看完第18章应该就可以了。

软件工程确实是如今工业界的一大难题,这本书出版至今已近50年,书中描述的东西更多是当时的十多年前的事物,实在是历史久远。但是为何如今还是有那么多人和我一样会来阅读这本老书,我想也和作者说的一样,这本书说的是人与团队的问题,是淘汰非常慢的。

还没有参与过真正软件工程的我看完书也只能对其充满崇敬,心里希望从书中得到的那些许有些理解的经验教训能成为以后的借鉴。尽管软件工程的前路困难重重,但这并非没有希望的,而仅仅是不够成熟,就如同当年二战后飞速发展的化学工程一样。

在这最后我推荐所有从事计算机的人都去阅读下《人月神话》的结束语《令人向往,激动人心和充满乐趣的50年》,也在此引用第19章《二十年后的人月神话》最后作者的话,算是对自己还有所有看到这些文字的人的激励:

软件工程的焦油坑在将来很长一段时间内会继续地使人们举步维艰,无法自拔。软件系统可能是人类创造中最错综复杂的事物,只能期待人们在力所能及的或者刚刚超越力所能及的范围内进行探索和尝试。这个行业需要:进行持续的发展;学习使用更大的要素来开发;新工具的使用;经论证的工程管理方法的最佳应用;良好判断的自由发挥以及能够使我们认识到自己不足和容易犯错的——上帝所赐予的谦卑。 Frederick P.Brooks.Jr

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未竟东方白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【笔记】《人月神话》——从"焦油坑"到"胸有成竹"
这是最近看《人月神话》时中途记录的一些笔记,目前计划是1-8章写一篇,9-17章写一篇,剩余章节和后记一篇。这本书篇幅不长,内容主要是项目管理的相关经验,还算是比较轻度,可以放松点看。
ZifengHuang
2020/07/29
1K0
【笔记】《人月神话》——从"焦油坑"到"胸有成竹"
为什么软件行业仍在重蹈 50 年前的覆辙?——《人月神话》读书笔记
“人月神话” 这个词,你知道是什么意思吗?我的第一反应是当面阿姆斯特朗在月球上留下的人类的一大步。然而实质上,这是一本软件工程的经典书籍,它最大的影响是让 “人月” 这个概念传遍整个软件工程行业。
amc
2024/09/02
5590
【人月神话】01 人月神话
这部写于1974年的软件工程管理经典著作,至今已有43年历史。但是可惜的是,这样的著作至今少之又少,今天我们重温这部经典。或许它已成为一个时代,但依然给当下人之深思。—imagineXie 一、焦油坑
前端修罗场
2023/10/07
2610
【人月神话】01 人月神话
IBM 大型机之父、人月神话作者 Fred P. Brooks 去世
据消息,美国计算机架构师、软件工程师和计算机科学家 Fred P. Brooks 于当地时间 2022 年 11 月 17 日去世,享年 91 岁 (1931 年 4 月 19 日 - 2022 年 11 月 17 日)。
深度学习与Python
2022/11/28
4420
IBM 大型机之父、人月神话作者 Fred P. Brooks 去世
《人月神话》要点总结
1.1 编程系统产品(Programming Systems Product)开发的工作量是供个人使用的、独立开发的构件程序的九倍。我估计软件构件产品化引起了 3 倍工作量,将软件构件整合成完整系统所需要的设计、集成和测试又强加了 3 倍的工作量,这些高成本的构件在根本上是相互独立的。
SeanCheney
2022/05/31
3.4K0
《人月神话》要点总结
《人月神话》:软件工程的成本寓言与生存法则
1975年,Fred Brooks在《人月神话》中写下那句振聋发聩的断言——“向进度落后的项目增加人力,只会让进度更加落后”——时,他或许未曾料到,这一观点会在半个世纪后的人工智能与云原生时代,依然如达摩克利斯之剑般悬在每一个技术团队的头顶。在软件吞噬世界的今天,开发成本早已不再是简单的预算数字,而是一场关于复杂性、人性和技术哲学的永恒博弈。
不惑
2025/03/10
1090
《人月神话》:软件工程的成本寓言与生存法则
透过《人月神话》,看清开发问题
在软件开发领域,布鲁克斯博士的《人月神话》是一本关于大型项目管理的经典之作。它不仅对每一个软件行业的项目经理(PM)来说是一本必读读物,对每个软件行业的参与者,都是一本不可错过的经典。
架构精进之路
2022/04/28
7170
透过《人月神话》,看清开发问题
盘点|开发者必读的十大经典书籍
编者按:人生如逆水行舟,不进则退。开发者想要保持自身的竞争力,做到所向披靡,知识储备必不可缺。这就意味着,简单的代码阅读远远不够。 快速迭代的信息社会,技术前进的速度远超人类历史上的任何时期,技术攫取呈现出碎片化的特征,开发者更倾向于通过网络搜素寻求问答。然而,这种浅尝辄止的阅读方式,会给人深沉的浮躁感,难以做到为自己切实所用。 新语言、新工具持续更替,让人目不暇接,学习过程中必定伴随着各种琐碎的问题。事实上,许多伟大的技术人在以前就遇到过同样的难题,并且提出了相应的策略和解决方法。虽然具体问题具体对待,
CSDN技术头条
2018/02/08
9080
盘点|开发者必读的十大经典书籍
人月神话不是神
用人月来衡量一项工作的规模是一个危险和带有欺骗性的神话,因为它暗示了人员数量和时间是可以相互替换的。(注:人月是用来衡量工作量的,规模是通过功能点或代码行等方式来衡量的,规模除以个体生产率后可以得到人月数据)。
PM吃瓜
2020/07/20
7980
9本醍醐灌顶的计算机好书
本文集合了鹅厂程序员们强烈推荐的9本经典计算机图书,“工作以后重新读来让我有种醍醐灌顶之感”,这是他们对这些书籍的评价。
腾讯云开发者
2024/08/09
5690
9本醍醐灌顶的计算机好书
中文书籍中对《人月神话》的引用(一)
有同学说2014-2020年出版的引用《人月神话》的书(2020年1月30日更新)里都是英文,难以阅读。特整理中文书籍引用--其实还是老外写的。
用户6288414
2020/04/12
9340
【必读】每位程序员职业生涯必读书单
很多小伙伴都在问,要成为一个更好的开发人员,我应该读哪些书?我真的需要读书吗? 这是一个很值得探讨的问题,而且很多人推荐的是不同主题的不同书籍。 他们推荐的书在他们看来是伟大的、必要的,但没有人能说,
老九君
2018/03/27
8480
【必读】每位程序员职业生涯必读书单
个人 产品 团队(下):个人与团队
上篇主要讲个人发展,本篇谈谈我对敏捷开发的认识。现在很多新员工一上来就是敏捷开发的方式,形式上是有了,可能理解上还有不到位的地方,希望能对这些人有所收获。最后结合两个段子,解释一下我是如何适应环境的。 1为什么采用敏捷开发 首先给出一个不言自证的结论:世间的物质都在进化成越来越复杂的东西。项目,团队也是如此。想想你的团队或产品,是否越来越大,越来越复杂。 同时,软件行业有一个很有意思的现象,大项目通常表现平平,小项目小团队往往更容易成功。到底是什么原因导致大项目难以成功呢?《人月神话》中巴比伦塔的例子说明,
Peter Lu
2018/06/20
5930
AI是银弹吗?AI时代开发软件要看懂这本书
五十年前,软件工程大神 FrederickP.Brooks 在《人月神话》一书中提出一个观点:没有一种能够解决软件工程中所有问题的技术或方法。即没有“银弹”能杀死软件本身的复杂性这头可怕的“人狼”。
程序猿DD
2025/02/10
910
AI是银弹吗?AI时代开发软件要看懂这本书
围绕开源的系列思考——国家篇
我非常喜欢看各种网络小说,其中最大的一类,自然是穿越小说。其中又可以细分为很多类型。按照穿越回到的时代,从远古到近现代的都有,这其中有一个很小的分类,是回到大约20世纪70年代末、80年代初的。那些主人公,大概率都是要搭上改革开放的顺风车,赚取巨额红利的了。比如抢先去上海,购买股票认购证之类。
开源社
2020/01/16
5020
围绕开源的系列思考——国家篇
最受程序员欢迎的 20 本书!
大家好,我是逆锋起笔小编,今天推荐的书籍都是行业经典,这就不太适合初级水平阅读,部分提供了电子版本,关注公众号后联系小编获取。
逆锋起笔
2021/07/19
1.2K1
2020年出版的新书中提到的《人月神话》(2)
《人月神话》于1975年出版,1995年出二十周年版。自出版以来,该书被大量的书籍和文章引用,直到现在热潮不退。
用户6288414
2021/01/14
7400
2020年出版的新书中提到的《人月神话》(2)
享年91岁!图灵奖得主、软件工程圣经《人月神话》作者Fred Brooks逝世
1999年图灵奖得主,美国国家科学院院士、对计算机体系结构、操作系统和软件工程做出里程碑式贡献的计算机科学家Frederick Phillips Brooks, Jr.逝世,享年91岁。
新智元
2023/01/07
4060
享年91岁!图灵奖得主、软件工程圣经《人月神话》作者Fred Brooks逝世
10年后编程还有意义吗?
这个是Quora上提出的一个问题。随着AI在近年来成为热门话题,并且在AlphaGo自学围棋击败了人类近10年最好的围棋选手之后,有人开始提出这个问题。具体来说这个问题有三层意思: 到2025年程序员还有没有用,到那个时候所谓的“程序员”是指什么? 代码本身还有没有用,到那时候代码会变成什么样子? 机器智能会不会取代(目前意义的)代码或程序员两者的其中一个或者全部? 大家基本上倾向于认为,到2025年时编程仍然有意义,但有人说2025年以后情况可能就不是这样了。 而那些认为编码将死、程序员将失业的人的理
用户1667431
2018/04/18
6420
10年后编程还有意义吗?
【笔记】《人月神话》——从"削足适履"到"另外一面"
这是最近看《人月神话》时中途记录的一些笔记,稍稍改变下计划,这个是9-15章节的笔记,这样后面的银弹和记录能记录得比较连贯些。
ZifengHuang
2020/07/29
5680
【笔记】《人月神话》——从"削足适履"到"另外一面"
推荐阅读
相关推荐
【笔记】《人月神话》——从"焦油坑"到"胸有成竹"
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档