人月神话-Frederick P.Brooks,Jr

摘抄&笔记

Good cooking takes time. If you are made to wait, it is to serve you better, and to please you.

  • 佳肴费时。你的等待是为了享受更好的服务。

外科医生团队建构

整个创造性的活动包括三个独立的阶段

体系结构(architecture)、设计实现(implementation)、物理实现(realization),在实际情况中,可以同时开始和并发进行。

the second-system effect:添加过多的修饰性功能和想法。

  • 无法避免,但可以有意识减少,建议请更加有经验的人从旁矫正。

He’ll sit here and he’ll say,”Do this! Do that!” And nothing will happen.

  • 光坐着瞎嚷嚷是干不成事儿的。

手册是必不可少的东西

形式化定义(虽然枯燥但精确)

会议是必要的

周例会议、年度大会。推行晨会,总结昨天的进度,计划今天的任务。

巴比伦塔的教训

清晰的目标、人力、材料、足够的时间、足够的技术、交流(电话会议+会议+工作手册)、组织。

项目工作手册

1. 定义:项目必须产出的一系列文档进行组织的一种结构,包括目的、外部规格说明、接口说明、技术标准、内部说明和管理备忘录。
2. 功能:控制版本、控制信息发布。
3. 要求:保持实时更新,记录更新的内容和原因。减少交流成本:人力划分、限定职责范围。

树状管理结构-每棵子数必须具备的基本要素:

  • 任务 (a mission)+产品负责人(a producer)
  • 组建团队、划分工作、制定进度表+技术主管或架构师(a technical director or architect)
  • 攻坚小组中的独行侠+进度(a schedule)+人力划分( a division of labor)+各部分之间的接口定义(interface definitions among the parts)。

降低成本

功能划分要明确。

软件项目的文档

内容:目标+内容:产品技术说明+时间:进度+资金:预算+地点:工作空间分配+人员:组织图。书面决策必须要记录,为了解决分歧,最终制定明晰的策略。

项目经理的主要功能

制定并实现计划。
制定计划包括时间、地点、人员、项目内容、资金。实现计划包括倾听、报告、讲授、贵圈、讨论、鼓励。

There is nothing in this world constant but inconstancy.

It is common sense to take a method and try it. If it fails, admit it frankly and try another.But above all, try something.

实验性工厂

demo,为舍弃而计划。每个变更都有自己的日程表和冻结日期。

维护成本通常是开发成本的40%。缺陷修复总会以固定20%-50%的几率引入新bug,整个过程是前进两步,后退一步。

剔除bug的设计

1.. 测试规格说明:编程之前,提交给测试小组,查看说明是否完备和明晰。实行自上而下的设计,每一个步骤都使用级别较高的表达方式来表现概念和隐藏细节,直到有必要进一步细化。但这并不是不能逆转的,不要执着于设计基础很差的系统,该抛弃的时候要抛弃,但是这个时候我们可以知道为什么抛弃这个系统。
- 结构化编程。
- 测试用例。
- 文档化的bug。

How does a project get to be a year late?…One day at a time.

  • 项目为什么会被推迟整整一年?……某天某时某事。

进度的灾难通常来自于白蚁而不是龙卷风。

里程碑

明确的时间点,不要用百分比报告进度,以完成了什么,还有什么没完成,接下去完成什么来说明。估计这件事情,每两周进行一次仔细的修订,无论最后情况怎么样,都不会有太大的变化,过高的时间估计会慢慢减少,但是过低的时间估计还是会存在。

老板对于进度把控

1)减少角色冲突和鼓励状态共享(状态检查会议和问题-行动会议)。
2)猛地拉开地毯(里程碑+实际的完成情况)。

What we do not understand we do not possess.

  • 不了解,无支配。

文档内容:

使用程序框图代替流程图。
自动化归档:在程序中插入注释。

软件系统中无法避免的通性:

1. 复杂度:呈非线性增长。
2. 一致性:很多复杂性来自与其他接口保持一致性。
3. 可变性:可变成本低,生命周期一般比硬件长。
4. 不可见性:这一条现在已经不成立了。

针对概念上根本问题颇具前途的方法(降低成本):

1. 除非必要,购买可用的软件代替自行开发。
2. 需求精炼和快速原型。(在计划任何软件活动之前,都要让客户和设计人员之间进行多次广泛的交流沟通)
3. 增量开发-增长而非搭建系统:这也就是我们现在说的迭代开发,老爷子果然厉害啊,这么久之前就已经得出这个结论了。
4. 卓越的设计人员:遵循卓越的实践可以得到良好的设计。

猜你喜欢

转载自blog.csdn.net/sunyejia/article/details/80268792