《人月神话》读书笔记part3

第九章削足适履

该如何去节省程序所需要的存储空间。

但是相对的,现在的电脑可用的资源变多,所以其实在 Heresy 来看,并没有必要像以前一样为了一点点的记忆体使用而斤斤计较,与其想办法去省 1k、1m 的记忆体,倒不如把精力放在想办法让程式跑更快上面(不过这也取决于开发的环境、以及要开发的程式种类)。

规模控制

  1. 和制定驻留空间预算一样,应该制定总体规模的预算;和制定规模预算一样,应该制定后台存储访问的预算。
  2. 指明模块的大小的同时,确切定义模块的功能。
  3. 每个小组倾向于为了自己的目标,只求局部上的最佳化,而不会思考呈现给客户的整体效果

空间技能

  • 空间——时间折衷,开发团队就必须在程式设计的技术上受过训练,求其在面对一个新语言或新型机器的时候。
  • 编程需要技术积累,需要开发很多公共单元构件。

数据的表现形式是编程的根本

  • 又小、又快、又好的程式,几乎源自于策略上的突破,而非技术上的取巧。
  • 更常发生策略突破是来自于重新思考数据或表结构,数据的呈现方式是程序设计的本质。



第十章提纲挈领(THE DOCUMENTARY HYPOTHESIS)

所谓的文件假说,就是:「在成堆的书面资料中,有一小部分关键性文件记录着项目管理的核心工作,而这些文件就是身为管理者最重要的工具」。而在维护这些文件的同时,就是在执行监督和预警机制的工作,也可以直接拿来当作检查列表、状态监控之用。

三种文件的需求例子:

规划计算机产品的文档

  • 目标、规格说明、进度、预算、组织结构图、工作空间配置
  • 预估、预测、定价,这三者会循环影响,也决定了项目的成败

规划大学科系的文档

  • 目标、课程说明、学位要求、研究报告、课程与教学计划、预算、场地分配、师资与研究生助手配置

软件项目的文档

  • 目标(内容):待完成目标,迫切需要的资源,约束和优先级。
  • 产品技术说明(内容):以建议书开始,以用户手册和内部文档结束。速度和空间说明是关键部分。
  • 进度(时间)
  • 工作空间配置(地点)
  • 组织图(人员)

任何管理任务的焦点:时间,地点,人员,项目内容,资金。

为什么要有正式文档?

  • 只有真正写下来,遗漏和矛盾之处才会显露出来;也只有写出来,才能导引出更多的细节决定。
  • 沟通的渠道。
  • 提供管理者一个资料库和检查列表。



第十一章未雨绸缪(PLAN TO PHROW ONE AWAY)

本章的一个重点,是「把必然的第一次失败纳入正式计划之中」;

作者在本书的第十九章,则是又提出了他认为这样是错的,因为这个说法过度地简化了问题;因为这个说法隐含了一个前提,那就是软件的创作是采用传统的循序式、或「瀑布模型」的方式。

把真正的产品交付出去前,先试做一个系统,也就是所谓的 Beta 版、甚至是有限功能的原型 Alpha 版。此外,软件开发也常常会面临客户在目标和需求上的改变,要接受多少变化是很难决定的,但是定义出一个底线是必须的,而且随着项目的进行,这项限制应该要越来越严格,否则没有任何一项产品会完成。

为变更计划系统

  • 采用结构化程式设计、加上模组的详细说明、使用 table-driven 的技术(将参数存在表格裡,而不写死在程式中)。
  • 把改变量化,使产品具有明确的版本编号、冻结日期。

为变更计划组织架构

  • 当今软件团队失败的共通原因不是因为太多管理,而是缺乏管理。
  • 在大型项目中,通常要保留两到三位顶尖的程式设计师来当机动部队。
  • 管理和技术人员能力许可的话,就应该保持这两种不同的脚色的职位互换。
  • IBM 建立的双梯式(dualladder)的晋升架构,让管理和技术两种对应的职位在制度上位阶是平等的。

  • 采用第三章所提的「外科手术团队」的概念。

软件维护:前进两步,后退一步

  • 上一个版本的缺陷修复总会以固定(20%~50%)的几率引入新的bug。
  • 软件维护的主要目的是修正错误、增加新功能、因应环境和组态的变化而调整。
  • 要维护一个广为使用的软件,起码要付出开发成本 40%的代价;使用者越多,维护成本就越高。
  • 维护软件最大的问题,就是因为修正错误而导致其他错误的可能性相当高(30% –50%)。因此,每修正一个错误后,都应该要把之前的测试桉例(test case)都拿来测一次,进行回归测试(regression test)。
  • 用较少的人、较少的接口,错误也会比较少。

软件维护:前进一步,后退一步

  • 模组的数量会随着版本编号呈线性递增,但是模组间的牵连程度却是成指数递增。
  • 任何动作都有破坏原有软件结构的倾向,并且会增加系统的混乱程度;到最后会变成无法再进行修改,只能重新设计。
  • 软件开发是减少混乱度的过程,本身是亚稳态的;
  • 软件维护是提高混乱度的过程,只是放缓了系统退化到非稳态的过程。



第十二章干将莫邪(SHAPP TOOLS)

这章主要是在讨论工具的重要性。作者认为,项目经理必须要建立一套运作哲学,不但要配置资源已建立共用工具,也要认知到特殊化工具的需要,不吝于他的团队建立属于自己的工具。

目标机器

「目标机器」(target machine):要执行最后结果的机器

「工具机器」(vehicle machine):开发阶段要用的机器

  • 不过以目前一般的软体开发来说,目标机器和工具机器在很多状况下,应该是同一台。
  • 但是如果目标机器比较特别,有数量限制、而又有许多团队要使用的话,就需要想办法共用了。而在这种情况下,比较好的分配办法,应该是切割较长的使用时间,给每个团队各自的使用权限,这样会是比较有效率的方法。

辅助机器和数据服务

  • 仿真装置:如果是新机种的话,最好还能有他的逻辑模拟器(logical simulator),在真正的机器前,当作除错用的工具。即使在新的机器已经准备好的情况下,逻辑模拟器应该也会是个相对可靠的除错工具。

在程序库的部分,应该要分为三个区块:

  • 局部自由区块(playpen):个人任意使用
  • 系统整合子程式库(system integration sublibrary):需要整合管理员同意方可变动,做为系统测试之用
  • 现行版本子程式库(current version sublibrary):除非有重大错误,不然不轻易修改。

这裡的概念,主要是「控制」(由管理者来控制异动)和「区隔」(将正式、整合、局部自由区块三者做区隔)。

高阶程式语言(high-level language)和交谈式程式编写(interactive programming),这两者都可以有效地提高生产力。而实际上,在现在的环境裡,这两种东西也都已经算是广被接受了。



时间: 2024-10-10 16:42:00

《人月神话》读书笔记part3的相关文章

<<需求分析与系统设计>>读书笔记之一

<<需求分析与系统设计>>这本书论述了软件分析和设计的迭代增量式过程,讨论软件分析与设计的原理,方法和技术,并特别关注了设计阶段,对软件体系结构的内容进行了很大的扩充.本书强调对象技术与统一建模语言UML在企业信息系统开发中的应用,并讨论了使用web技术和数据库技术进行开发的方法.这本书集中在面向对象软件开发上,统一建模语言用于捕捉建模的人工制品,主要论述用逐步细化的方式进行开发,并且在整个开发生命周期中都是用UML这种建模语言.系统分析师,设计师和程序员使用同一种语言和工具,但有

&lt;&lt;需求分析与系统设计&gt;&gt;读书笔记之三

终于把<需求分析与系统设计>读完了,感受很多,虽然理解还不是透彻,但还是学到了不少知识.在软件需求规格说明中,需要用图形和其他形式化模型来说明需求,为了完整地说明一个系统,有必要采取多种模型.UML提供了许多集成化的建模技术来辅助系统分析师来完成这项工作.规格说明的过程是迭代增量式的.对成功的建模来说,使用case工具是必须的.需求规格说明产生三种模型:状态模型,行为模型,状态变化模型.需求规格说明涉及需求确定期定义的客户需求进行严格的建模,重点放在那些系统将要提供的所期望的服务上.在规格说明

系统&lt;&lt;需求分析与系统设计&gt;&gt;读书笔记之二

需求确定是关于社会,沟通和管理的技能.它是系统开发中需要技术最少的一个阶段,但是如果该阶段没有充分完成,其结果将会比不能完成其他阶段来得更糟.由于不理解,忽略或者曲解客户需求付出的代价在软件过程的以后阶段将是不可承受的.一个当代自适应企业的业务前景要求是,对业务能力进行探索,并确定满足不断变化的解决方案.业务过程界定IT项目和系统的需要.很多情况,IT解决方案仅仅是解决业务问题.另外一些情况下,IT解决方案是业务创新的真正推动者,并产生新的经济理念.无论哪种情况,IT解决方案都是一种基础设施服务

《需求分析与系统设计》读书笔记part3

经过一个月的阅读,终于把<需求分析与系统设计>这本书读完了,其中对需求和对设计方面的知识对我帮助很大.书中作者对需求分析的思想对我也有很大的启示,在我现阶段的学习中对需求的了解有了进一步的认知.这一阶段我读了这本书的最后几章,在这几章中作者主要对系统的设计做了一定的分析,同时让我学到很多东西. 第七章中主要讲了图形用户界面设计,界面设计是一个多学科的活动,其设计的中心问题是用户控制式,面向对象程序是事件驱动的,对象响应事件的内部通信由外部用户激活的事件来触发:它的设计必须遵循由项目采用的窗口界

《探索需求》读书笔记part3

“一本出色的书——独特,发人深省而又有趣,这是任何从事需求过程的人员的必读书”这是Claude W.Burrill,Burrill.Ellsworth  Associates写在书的最后对这本书的赞扬,随着阅读的进行我这些天读了这本书的第三部分,第三篇探索机会同样用原来的风格讲述需求分析的知识,让我受益匪浅. 第三篇主要讲述了需求的需求探索中的一些探索需求的小技巧,和通用的一些知识.需求的过程不是线性的,而是围绕目标转圈,一点一点地接近.第10章 产生想法的会议头脑风暴:不许批评和责备:让想法自

机器学习系统设计-读书笔记3

继续第二篇笔记中的例子. 3.不断的迭代与探索的过程 从上篇的图看到,直线并不能很好的代表week4以后的趋势.既然一阶函数不行,我们试试二阶函数? f(x)= ax**2 + bx + c 继续使用polyfit这个函数来确定a,b,c的值: f2p =sp.polyfit(x,y,2) print f2p 上述代码得到了一个数组 [ 1.05322215e-02 -5.26545650e+00 1.97476082e+03],这就是a,b,c分别的值. f2 = sp.poly1d(f2p)

JVM读书笔记PART3

一.早期(编译器)优化 语法糖 c#和java的泛型截然不同看似相同,c#是真实的泛型 编译运行一直存在 List<string> 和List<int> 就完全是两个类 而Java中 是伪泛型采用类型擦除的方法实现泛型    List<Integer> List<String> 运行期就是同一个类 编译期错误,无法识别两个方法. 语法糖:自动拆箱.装箱 可变参数 遍历循环 条件编译 二.晚期(运行期)优化 二者各有优势: 分层编译策略: 有两种进行热点探测的

《浪潮之巅》读书笔记part3

马可尼里领导的太阳公司在很长时间里甚至没有看出决战操作系统的重要性,这样太阳公司和微软公司的竞赛还没有开始就先输了第一回合.这倒不是马可尼里无能,而是马可尼里等人的“思维”锁定在卖硬件上了.虽然太阳公司的工作站当年每台要上万美元.服务器要十万美元,但是比DEC的小型机和IBM的大型机便宜多了.在九十年代末由于互联网的兴起,太阳公司的服务器和工作站销路太好了.太挣钱了.虽然太阳公司的中小企业市场份额不断被微软/英特尔联盟侵蚀,但是它也在不断占领原来DEC和HP小型机的市场并有足够的处女地可以开发.

《需求分析与系统设计》读书笔记1

这个月开始对<需求分析与系统设计>的阅读,在读这本书之前我先看了看网上对这本书的书评,了解到这本书论述了需求分析和系统设计的迭代增量式过程,并讨论了软件生命周期的其他阶段(包括实现.测试和变化管理).本书提出了运用UML(统一建模语言)进行信息系统分析和设计的方法,以克服大型系统模型的复杂性:改进软件体系结构:提高软件可维护性和可扩展性:促进对象的分层结构:处理构件集成:改进对GUI和永久数据库对象建模等方面的方法和策略.这本书的内容丰富,这一段时间主要对这本书前三章进行了阅读. 在这段时间的