《人月神话》-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,整个过程是前进两步,后退一步。

  • 一个app开发完成并不是结束,之后还有好多事情。

剔除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. 卓越的设计人员:遵循卓越的实践可以得到良好的设计。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值