《人月神话》读书笔记part2

第五章画足添蛇(THE SECOND-SYSTEM EFFECT)

架构设计师面对过高的估算的两个选择:

  1. 削减设计
  2. 向开发人员建议用成本更低的实现方法

第2个选择若要成功,架构设计师必须:

  • 记住开发人员有发会创意完成实作的任务,所以架构设计师只能建议。
  • 在建议时,提出一个能够符合规格的实现方法,同时也接受其他能够达到目标的方桉。
  • 默默地,私底下提出建议。
  • 准备放弃所作的改进建议。

这边所谓的「第二系统效应」,是指一个人在设计系统的时候,第二个设计出来的系统,是最危险的一个。这是因为在第一个系统的时候,由于自知不够熟系,所以会比较节制、也会比较简单清爽;

但是设计第二个系统的时候,却很容易把在做第一个系统时的所有构想,都加挂到这个自认已经熟系的第二个系统上,所以第二个系统很容易有过度设计的问题。再之后的系统(第三个及以后),由于会和之前的经验做对比、相互印证,所以也就比较不会有问题了~

如何避免这个问题?

以设计师来说:

  • 主要就是要靠「自律」了~同时,也要了解这个第二系统效应的原因,并提醒自己避免设计出不相关的功能、或是做出违反原先架设与目的的功能。
  • 为每个小功能分配一个值:每次改进,功能x不超过m子节的内存和n微秒

项目经理来说:

  • 要采用至少两个以上系统设计经验的架构设计老手的决定。
  • 保持对特殊诱惑的警觉。



第六章贯彻执行(PASSING THE WORD)

这一章主要的主题,是着重于整个意思的传达,以及精确的描述;因为唯有在所有参与专桉的人都能够明确无误地了解整个架构、规范、介面等等必须要沟通的东西时,才有可能真正完全按照计画来进行。而针对了这个主题,作者也在本章内提出了许多建议:

书面规则/手册

  • 不仅要描述使用者将会看到的所有细节,也要避免描述使用者看不到的东西。
  • 手册的风格应该要准确、完整、详细,各项定义与要点必须要保持一致;而为了做到这点,所以书面化的工作应该要由一到两个个人来主笔。

形式化定义

  • 采用「形式化标记法」(formal notation)。
  • 为了精确,使用「形式化定义」(formal definition),
  • 为了易懂,也需要「记述性定义」(prose definition);
  • 而这两者之中,要有一个是主要标准,另一个则辅助描述。

-设计实现也可以当作正式定义,例如用模拟器来当作定义。

  • 这样的好处是只要实际测试一下,就知道他应该有什么结果;
  • 但是相对的,也有可能因此会因为这个实现,而导致定义的过度描述,而影响到之后实现的弹性。

开会

1周例会

  • 由首席系统架构设计师担任主席、时间较短(半天)
  • 任何与会人员都可以提出问题和修改意见(但是要先提交书面资料),重点在于激发创意;
  • 而在提桉后由架构设计师整理成为较精细的提桉报告。
  • 会议决策权在首席系统架构设计师上,最后的结果要正式、即时、全面地公告。如此可以使各项决策迅速敲定、让工作得以顺利进行。

2年度大会

  • 时间较长(两周)
  • 用来处理细琐事务、公开讨论,让大家发洩不满。

多重实现

一开始就开发两个以上的实现产品,可以避免根据错误的实现去修改规格,将有助于维持架构定义的纯净与严谨。

电话日志

  • 允许实现人员直接询问架构设计师(电话、或者电子邮件),而不要自行解释。
  • 而这些询问都应该被记录下来、整理后分发给所有实现人员和使用者。

产品测试

独立的产品测试小组是必须的。




第七章为什么巴比伦塔会失败?(WHY DID THE TOWER OF BABEL FAIL?)

巴别塔失败的原因是什麽?作者认为是「沟通」,以及随之而来的「组织」;

怎样沟通?

  • 非正式的方法(电话、电子邮件)
  • 会议
  • 工作手册 是一份对项目必须产出的一系列文件的组织结构,包括目的,外部规格说明,接口说明,技术标准,内部说明和管理备忘录。

使用工作手册的原因?

  1. 规范了专桉进行过程中即将产生的文件,并可以用来保存技术方面的说明;而为了让工作手册可以真正有用,他需要被尽早、小心地设计出来。
  2. 控制信息发布:确保需要资讯的人都能够在适当的地方取得资讯的方法,每一个团队的成员都应该要可以看到工作手册的全部文件内容(没有必要所有人都要看完所有的东西,部分的细节应该要被封装(encapsulated)起来,不属于自己的东西,就不必、也不被允许去看裡面的细节,只需要看到简介就够了。)(对备忘录编号,建立树状索引结构);同时也要确保文件的内容有被持续地更新,并且保有改版的纪录,让看的人知道版本间的修改状况。在以往这点可能很难做到,但是现在网路、电子化文件都很发达了,要做到基本上问题并不大。

大型编程项目的组织架构

「组织」的目的:减少沟通量。

  • 人力配置
  • 专业分工

传统的树状结构组织主要是源自于权力的责任结构,但是以沟通结构来说,则是会是网状的,这样才可以避免沟通不良的问题。

树状编程队伍:

  1. 任务(a mission)
  2. 产品负责人(a producer)
  3. 技术主管或结构师(a technical director or architect)
  4. 进度(a schedule)
  5. 人力划分(a division of labor)

2负责着急小组、分派工作、规划时程、争取掌握资源,以及和别的小组沟通,并且对时程负责;

3则是构思、分割系统,切割系统的外观和内构,维持整个设计的和谐与整体性。

作者认为,这两种脚色的搭配方法有三种:

  • 管理者兼任技术总监 主要适合于小型团队,不是用于大型团队。
  • 管理者是总指挥、技术总监是副手
  • 技术总监是总指挥、管理者是副手



时间: 2024-08-29 22:14:24

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

探索需求读书笔记二

第2章陈述需求中的含混性        攻击含混性是因为含混性需要成本.        尽可能早地攻击含混性,因为即使你最终消除了它,在产品开发的早先阶段改正所需要的成本要比以后改正的成本少很多很多.        如何攻击含混性是全书的主题.但首先,一定要记住用一种非常有趣的方法来使用你的智慧-探索应该是一种乐趣.        探索的基本步骤:1.向某个方向移动:2.看看在那里发现了什么:3.记录所发现的东西:4.有目的地分析所发现的东西:5.通过对所发现东西的分析和记录选择下一个方向:6.

探索需求 读书笔记三

1.    直接提问没有什么错.甚至如果你期望成为一名胜任的设计员,最好掌握直接提问.直接观察和常规的面谈技巧.然而,还是有一些主题在某个地方好好地隐藏着-- 我们,作为常人,并不擅长发现我们已经忽略的东西. 你需要其他的工具和技术来辅助直接提问,因为为了获得成功,完全直接提问的方法将需要一个完美的人. 决策树模型是一个用于辅助直接提问的显著的工具. 2.直接提问没有什么错.甚至如果你期望成为一名胜任的设计员,最好掌握直接提问.直接观察和常规的面谈技巧.然而,还是有一些主题在某个地方好好地隐藏着

《android开发艺术探索》读书笔记(五)--动画

接上篇<android开发艺术探索>读书笔记(五)--Drawable No1: 自定义动画:派生一种新动画只需要继承Animation这个抽象类,然后重写它的initialize和applyTransformation方法,在initialize方法中做一些初始化工作,在applyTransformation中进行相应的矩阵变换即可,很多时候需要采用Camera来简化矩阵变换的过程. No2: 属性动画PropertyAnimation 补间动画TweenAnimation 帧动画Frame

《android开发艺术探索》读书笔记(十三)--综合技术

接上篇<android开发艺术探索>读书笔记(十二)--Bitmap的加载和Cache No1: 使用CrashHandler来获取应用的crash信息 No2: 在Android中单个dex文件所能够包含的最大方法数为65536,这包含Android FrameWork.依赖的jar包以及应用本身的代码中的所有方法. No3: 使用multidex来解决方法数越界 apply plugin: 'com.android.application' android { compileSdkVers

《android开发艺术探索》读书笔记(十五)--Android性能优化

接上篇<android开发艺术探索>读书笔记(十四)--JNI和NDK编程 No1: 如果<include>制定了这个id属性,同时被包含的布局文件的根元素也制定了id属性,那么以<include>指定的id属性为准 No2: 绘制优化 1)onDraw中不要创建新的局部对象 2)onDraw方法中不要做耗时的任务 No3: 内存泄露优化 场景一:静态变量导致的内存泄露: 如果静态变量持有了一个Activity,会导致Activity无法及时释放. 解决办法:1使用Ap

《探索需求》读书笔记part2

“读完本书之后,你不会再相信那些过时的需求——不管他是誰向你提出的,也不管他是以一种多么严肃或疯狂的方式向你提出的.你将获得大量的探索客户真正需求的方法.”Ken de Lavigne IBM 质量研究中心高级成员.阅读这本书后作者对需求的理解与分析让我对需求分析有了新的理解,这断时间我阅读了这本书的第二部分开始之路. <探索需求>这本书第二部分开始之路依旧在需求的分析角度出发,作者用了大量的例子来阐述自己的观点,同时作者再讲自己的故事来发现需求和分析需求.在第五章中作者提出切入点的思想,所有

《需求探索》读书笔记1

“本书是现代需求技术的基石,我们强烈推荐需求工程师阅读本书.”这是UML China写在<探索需求>这本书后的一句话,这句话强烈的赞赏了这本书的价值.这个月我也开始了对这本书的阅读,到现在我已经阅读了这本书的第一篇,对这本书也有了初步的了解. <探索需求>这本书主要介绍了降低需求含混性的各种方法,强调的是通过不断的细化需求来最终减少实现的含混性.含混性,描述的是不清晰的程度.而对于软件开发来说,事实上含混性存在两个方面,其一就是本书讲的实现方式上的含混性:另一个就是对目标的含混性,

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

继续阅读,这段时间阅读了<需求分析与系统设计>的四到六章,对这本的中心思想了解更见深入,对作者关于软件开发中的需求分析阶段的思想有了一定的认识.作者对需求分析的方法和遇到问题的解决方法都有着自己读到的见解,这些作者提出的观点给予我很大的帮助. 本书的第四章是需求规格的说明,在这章中作者提出需要用图形和其他形式化模型来说明需求.需求规格说明用客户的叙述性需求作为输入,用构造规格说明模型作为输出,这些模型分为3组,即状态模型,行为模型和状态变化模型.对象的状态由它的属性和关联的取值来决定,状态规格

Android深度探索HAL读书笔记9

看了本书第九章,我学习到了: HAL(抽象硬件层)是建立在linux驱动之上的一套程序库,这套程序库是属于内核层之上的应用层——系统运行库层. Linux驱动代码类型:访问硬件寄存器的代码和业务逻辑代码. Linux内核采用GPL协议,该协议要求源代码必须开源,即linux驱动必须开源. Android增加HAL的目的:①避免应用程序直接访问linux驱动②保护私人财产,满足不想开源的linux驱动作者的要求,带HAL的linux驱动相当于将数据从HAL传到寄存器,即从寄存器传到HAL的“数据二

Android深度探索HAL读书笔记8

看了本书第八章,我学习到了: 蜂鸣器是开发板自带的一个硬件设备,控制蜂鸣器发声是通过向寄存器写入特定的值实现的.PWM驱动不同于LED 驱动,其由多个文件组成,在编译时将这些文件进行联合编译. 蜂鸣器也称为PWM(脉冲宽度调制),基本原理是通过脉冲来控制蜂鸣器的打开和停止. PWM连接到了TOUT1端口,使用端口F的GPFCON寄存器进行控制.宏S3C64XX_GPFCON表示寄存器GPFCON的虚拟地址.仅用最高两位(30.31位)控制PWM.最高两位为 10时,打开PWM:为00时停止PWM