消化人月神话

来源:互联网 发布:dnf代练接单软件 编辑:程序博客网 时间:2024/05/02 04:29

  程序的规模包括:

  普通程序。

  程序加上通用化,测试,文档和维护就成了编程产品。

  程序规模很大,为了便于理解、开发和维护,我们将它分解为模块,为它定义清晰的接口,然后将各个构件集成为系统,称之为编程系统。

  编程系统 * 编程产品 == 编程系统产品

  从工作量上面来说:

  编程产品 = 3 * 程序

  编程系统 = 3 * 程序

  编程系统产品 = 9 * 程序


  对我来说,编程的乐趣在于,持续学习,探索细节,以及找到Bug,将“部分”组合成“整体”最后创造事物,这个过程的巨大魅力。它是一个极富创造性的过程,既是科学也是艺术。

  当然编程也不可能时刻都那么有趣,也有枯燥的时候,发脾气的时候,无可奈何的时候。


  对项目进行管理时,进度安排不合理常常导致项目失败。

  进度与工作量不能混淆,人月不能互换,就是说1个人做一年的程序,不等于12个人做一个月。这主要是因为:

  1.任务次序有限制

  2.分解独立子任务的数量有限制

  3.参与人员需要沟通(包括培训和交流)

  所以向进度落后的项目中增加人手,会使沟通的成本急剧增加,进度可能达不到预期。

  1/3计划

  1/6编码

  1/4构建测试和早期系统测试

  1/4系统测试

  可能是一个合理的时间安排。


  团队构建一个可能的结构是外科手术团队。一个首席程序员,定义功能和技术性能说明书,设计程序架构,其他人编码,测试,文档,以支持他的工作。团队还包括了语言专家和工具维护人员。

  系统的概念完整性由首席程序员一个人说了算,其他人把精力集中在自己要解决的问题上,这样有助于创意的形成,以及沟通的减少,从而错误也减少。


  软件活动包括:

  根本任务,打造构成抽象软件实体的复杂概念结构。Conceptual

  次要任务,使用编程语言表达抽象实体,在空间和时间限制内将它们映射为机器语言。Representation


  软件开发中的问题包括:根本问题,次要问题。

  根本问题包括:

  1,复杂度,来自于程序员之间沟通不良;程序本身的复杂度;新增功能的副作用

  2,一致性,各个小系统随时间和环境的变化趋于不一致

  3,易变性,硬件,人群,法律以及应用领域等因素引起的变化

  4,不可见性,程序是抽象的,无法用图形表示程序的整体结构,给沟通和理解造成巨大困难

  解决的办法:

  1,通过购买,使用现成的软件组件

  2,快速原型,首先开发高风险的核心架构

  3,优秀的人才,专家是专门用来飙高音的,专家和新手的差距是10-20倍

  4,迭代开发,有机成长的系统

原创粉丝点击