首页 > 其他分享 >读书笔记六

读书笔记六

时间:2023-06-11 15:00:31浏览次数:31  
标签:读书笔记 焦油 项目 系统 进度 银弹 软件

终于有幸拜读了《人月神话》这部业内经典著作。整体来说,本书的主线——人月神话、没有银弹在现今的软件工程管理领域依然属于有效的基础理论。不过有些东西确实过时了,比方说文档的管理,现在已经有了svn或者在线文档。提到调试的复杂性,现在的集成环境把调试变得非常容易。读完之后才感觉不是给编程的人看的,更应该是项目经理或者架构师看的,很巧的是我的下一阶段职责正是往这个方向转型,还是很有帮助的。下面我就记录一些我印象比较深刻的章节。

第一章-焦油坑。焦油坑是作者用来形容大型系统开发的一个概念。史前时代,恐龙、猛犸象、剑齿虎这些大型食肉动物碰到焦油坑也是没有办法挣脱的,而且越用力就越容易被沉入坑底。这种场景就像极了大型系统开发的工作。基本上一个大型的编程系统产品的开发成本会是单个的简单程序的9倍。这里的编程系统产品是指的由很多编程程序以及系统组合而成的可交互、协作的程序集合。我们每个人都应清晰的认识到这样一种非线性关系,认识到真正的大型编程系统产品并不是简单程序的简单堆叠。这也就是所谓的“焦油坑”。既然是明知是焦油坑,那我们为什么要跳进去呢?因为软件开发有其独有的的乐趣。比如创建事物的快乐、开发对其他人有用的东西的乐趣、面对不重复的任务不断学习的乐趣。

第二章-人月神话。在软件项目中我们往往用人月这个指标在衡量项目的工作量。但是人月这个指标实际上是一个危险的带有欺骗性的神话。它暗示着人员数量和时间是可以互相替换的。只有在将任务分解给参与人员后他们之间不需要互相交流的情况下,人数和时间才是可以互换的。简单来说就是,3个人要干3个月的事情不是说安排9个人就能1个月干完了。看到作者有一个很有意思的结论:在进度落后的项目中增加人手的做法,往往只会使进度更加落后。但现实是一旦发现进度落后很多,除了增加人手,很难有更有效的办法来解决这个问题。当然了,走到这一步确实本身也是因为前面的计划有严重问题。

第三章-外科手术队伍。面对软件项目的“焦油坑”以及“人月神话”,作者给出的一个解决办法是——“外科手术队伍”。分别是外科医生、管理员及其文秘、编辑及其文秘、副手、程序职员、工具维护人员、测试人员和语言专家。有研究表明,同样有两年经验而且受到同样培训的情况下,优秀的专业程序员的生产率是较差程序员的10倍。在软件项目中,一个小型的、精干的队伍是最好的,这样既减少了沟通成本,又提高了生产率。但是对于真正意义上的大型系统来说,小型精干的队伍往往意味着太慢。这就是矛盾的所在,对于效率和概念的完整性来说,最好由少数精干的人员来设计和开发,而对于大型系统来说,则需要大量的人手,以使产品能在时间是满足市场的需求。

第四章-贵族专制、民主政治和系统设计。作者认为在系统设计中,概念完整性应该是最重要的考虑因素。就是说,为了反映一系列连贯的设计思路,您可省略写不规则的特性和改进,也不提倡独立和无法整合的系统,哪怕它们其实包含着许多很好的设计。概念的完整性要求设计必须由一个人,或者非常少数互有默契的人员来实现。虽然作者不认为只有结构师才有好的创意,新的概念经常来自实现人员或者用户。但是系统的概念完整性决定了其使用的容易程度。结构师一直处在解决用户问题,实现用户利益的核心地位。若要得到系统概念上的完整性,必须有人控制这些概念。这实际上是一种无需任何歉意的贵族专制统治。

第七章-为什么巴比伦塔会失败。据《创世纪》记载,巴比伦塔是人类继诺亚方舟之后的第二大工程壮举,同时,其也是第一个彻底失败的工程。这个故事在很多方面和不同层次都是非常深刻和富有教育意义的。他们有清晰的目标、充足的人力和材料、有足够的时间和技术,最后还是失败了。作者认为是两个原因,其一是交流;其二是交流的结构——组织。他们无法相互交谈,从而无法合作。交流的缺乏导致了争辩、沮丧和群体猜忌。很快,部落开始分裂。确实很多时候,尤其大一点的项目,沟通是很大的成本,费事费力,项目经理和架构师意见不和还会内耗。作者推荐小型团队的模式是技术主管作为总指挥,产品负责人充当其左右手,合理的组织是成功的关键。交流和组织的技能需要管理者仔细考虑,相关经验的积累和能力的提高同软件技术本身一样重要。

第十四章-祸起萧墙。当人们听到某个项目的进度发生了灾难性的偏离时,可能会认为项目一定遭受了一系列重大灾难。然而,灾祸来自白蚁的肆虐,而不是龙卷风的侵袭。同样,项目进度经常以一种难以察觉,但是残酷无情的方式慢慢落后。这个真的深有感触,一般都是很小的地方跟自己说,这个地方有特殊处理先放一下,那个地方回头再测试,结果最后报进度的时候就落后了。这个主要还是靠项目经理把握,有些明确的节点一定要亲自检查成果并及时调整计划,不然后果不堪设想。

第十六章-没有银弹。狼这种民间传说中存在的怪物,会在月圆之夜由我们熟悉的人类面孔变成可怕的狼脸。我们熟悉的软件项目也有着人狼的特性,看似简单明了的外表,但是却可能随时变成一个进度落后、超出预算、存在大量缺陷的怪物。在民间传说中对付人狼唯一可靠的武器就是银弹。所以银弹在软件项目中就是比喻这种使得软件成本像计算机硬件成本一样迅速降低的尚方宝剑。然而,作者在40年前悲观的告诉我们,没有银弹。40年后我们回首望去,这个预言恐怕是真的。在软件开发中存在着4个天生的根本困难——复杂度、一致性、可变性和不可见性。现代软件工程中通过高级语言、分时系统、面向对象程序设计、使用开源库、敏捷开发等新的理论实践不断在克服软件开发中的次要困难,同时也减轻了一些根本困难。但始终不能消除软件复杂度这样的根本性困难。因为随着软件工具能力不断的提升,软件开发中需要面对的复杂度其实也是在不断提升的。所以,我们在软件生产效率上的提升需要的是逐步的进步,而不是期待一个一蹴而就的突破。

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

标签:读书笔记,焦油,项目,系统,进度,银弹,软件
From: https://www.cnblogs.com/yvxiaoshuai/p/17472959.html

相关文章

  • 读书笔记《人月神话》三
    人月神话相对于构建之法来说,讲的完全就是团队作业的效率问题了。首先,要为软件开发安排足够的时间,一个赶工出来的软件好不到哪去,因为当开发要达到约定期限时,开发者第一时间想到的往往不是加班加点把项目赶出来,而且也不现实。通常想到的都是在原项目的基础上进行各种各样的阉割,导致......
  • 【读书笔记】——《代码大全》
    DesigninConstruction我们要学会使类与类之间、子程序与子程序之间保持松散耦合,就是使一个类或者子程序能够很容易地被另一者调用。在结对编程的对接过程中,作为ui组我们就需要调用core组写的计算核心,这就是两个保持松散耦合的模块。我们只需要知道传入参数的设置就可以实现调用......
  • 《代码大全》读书笔记二
    《代码大全2》第六、七章      作者在第六章中从抽象数据类型(AbstractDataType)出发阐释类(class)的概念,给出创建类的原因以及创建高质量的常涉及的设计问题。抽象数据类型(ADT)是指一些数据以及对这些数据所进行的操作的集合,ADT是一个比类更基础的概念,类由ADT出发得到扩展,或......
  • 人月神话读书笔记二
    作者介绍:20世纪最后一年也就是1999年的图灵奖,授予了年已69岁的资深计算机科学家布鲁克斯(FrederickPhillipsBrooks,Jr.)。布鲁克斯这个名字在中国知之者不多,但在美国却是大名鼎鼎。因为他在60年代初只有29岁时就主持与领导了被称为人类从原子能时代进入信息时代标志的IBM/360......
  • 【读书笔记】人月神话
     作为一本计算机编程项目管理类的书刊,此书书名就毫不留情地指出“用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话”。这里向读者传达了这个重要的概念,在估计和进度安排中使用的工作量单位:人月。但实际上,人数和时间的互换是近乎不可能的,因为编程项目的任务不能分解给......
  • 《大道至简》读书笔记七
    今天的阅读内容主要是关于道家文化的实际应用,作者通过丰富的生活案例,向读者展示了道家文化的精髓,并提供了一些在现实生活中的实用指导。在本章中,作者讲述了一个非常生动的案例,讲述了一位厨师在面对油漆匠的粗鲁行为时如何保持自己内心的平静和冷静。通过这段案例,作者想告诉读者要......
  • 代码整洁之道读书笔记
    可读性至关重要:代码应该易于阅读、理解和维护。命名清晰明了,函数和类的功能单一且一目了然。采用一致的代码风格和格式,使用注释来解释代码的意图和重要细节。函数的简洁性:函数应该短小精悍,只做一件事情,并且只有一个抽象层级。避免函数过长,可以通过提取功能单一的子函数来降低复杂......
  • 第一行代码读书笔记
    Android是一个开放的移动操作系统,由Google开发。它提供了丰富的开发工具和库,使开发人员能够构建功能强大的移动应用程序。 Android应用程序由组件组成,其中最重要的组件是Activity、Service、BroadcastReceiver和ContentProvider。 Activity是用户与应用程序交互的窗口,每个Ac......
  • 梦断代码读书笔记1
    第0章软件时间作者迷恋于一个开放代码并可以由游戏玩家更改程序的一个游戏,并为在它的基础上创新和增添一些功能而乐此不疲。0代表程序员的思维方式,因为计算机从0开始计数。"HelloWorld"程序能够唤醒每个程序员心中乐观的一面。既然能叫它说话,就能让它做任何事!计算机器协会(......
  • 梦断代码读书笔记3
    第8章白板上的即时贴获得更好进展的关键是将软件改进到程序员自己可以使用的程度。白板上的即时贴:用贴纸,每张纸表示大致同等的工作量。每张即时贴代表各开发者一个月或两个月的工作时间。先在墙上循“点号版本”的顺序贴上,然后就能对每一轮计划的工作和自己是否脱离显示一目了然......