热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

《人月神话》(P3)越加人进度越慢

空泛的估算编程人员有时和厨师一样,某项任务的计划进度,受限制与客户要求的紧迫程度,然而紧迫程度并不能控制实际完成的情况。例如,

空泛的估算

编程人员有时和厨师一样,某项任务的计划进度,受限制与客户要求的紧迫程度,然而紧迫程度并不能控制实际完成的情况。

例如,约定两分钟内煎完一个鸡蛋,看上去简单,但实际上它无法在两分钟内完成,顾客只能选择等待或者吃生鸡蛋。厨师的另一个选择是把火开大,不过结果常常是得到一个更糟糕的煎蛋。

为了满足顾客期望而造成的不合理进度安排,在软件领域中非常普遍。不科学的估算方法,少的可怜的数据支持,完全凭借产品经理直觉的判断,这样的方式很难得出有力、可靠、低风险的评估。

显然,我们有两种解决方案:

  1. 采用科学的方法,例如生产率图表、缺陷率图表、估算规则等
  2. 项目经理挺直腰杆,坚持他们的估计,确信自己的经验比客户期望进度要强得多

可是,我们对自己的估计不确定,因此在管理和客户的压力下,我们常常缺乏坚持的勇气。

重复产生的进度灾难

当一个周期4个月的项目,在第2个月的节点上进度没有达到要求,此时项目经理可以做些什么呢:

  1. 假设任务必须按时完成,整体进度估算合理,那么就指派更多的人手
  2. 假设任务必须按时完成,整理进度估算偏少,那么指派更多更多的人手
  3. 不削减任务,确保工作能彻底完成,重新安排进度
  4. 削减任务,仔细认真的调整项目,重新安排进度

前两种情况是灾难性的,因为增加人手从三方面增加了项目必要的总体工作量:

  1. 任务重新分配本身和所造成的工作中断
  2. 培训新人员
  3. 额外的相互沟通

而且毫无疑问的是,增加人手所开发出的产品,比没有增加人手而是重新安排进度所生产出的产品更差。向进度落后的项目中增加人手,只会使得项目更加落后。

以上内容就是《人月神话》第二章——人月神话,后两节所讲述的内容

作者反复论证了软件项目延期最主要的原因——缺乏合理的进度安排。读者不忍发问了“没有按时完成任务是因为时间太短”这难道不是诡辩吗?

其实,作者想要提醒的是那些制定项目进度的人。进度估算作为软件工程中十分重要的一环,常常得不到应有的重视,不全面的、不科学的、不负责任的进度安排时常发生。项目经理总会有意无意的犯下各种错误,例如忽略测试阶段、盲目自信、缺少方法、缺乏勇气等等。这么说来,软件项目延期的主要责任人也就是制定项目进度的人。

放到现实中来说,作者的观点其实是有前提假设的,那就是所有的程序员都拒绝加班,所有项目都会指派一名项目经理,所有客户都知道自己要什么。说不定国外的环境确实是这样的,但是这三点假设在我们身边都是不成立的。

首先,程序员无条件的加班让项目经理更加盲目自信,为了能够接收到项目,不断地妥协于进度紧张的客户。其次,人员安排的混乱和欠缺,大多数项目是不存在项目经理的,甚至是由商务人员直接规划进度。最后,也是最可怕的事情,客户不清楚自己需要的是什么。

这些问题都发生在进度估算阶段之前,但由于不是本书重点所以不再赘述,以后会在其他书籍的导读中再来讨论这几个问题。

总之,《人月神话》第二章作者通过严谨详实的论证,得出了这样的结论,多少有点偏袒程序员的意思,难道项目延期的问题只在于安排进度的人吗?




推荐阅读
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 作为一名程序员,从大学步入职场后,常常感受到一种难以言喻的空虚感。这种感觉或许源于对生活的不满、职业发展的瓶颈,或是日常琐事带来的压力。本文将深入探讨这种复杂的情感,并尝试寻找解决之道。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 深入理解Spring:Aware接口、异步编程与计划任务
    本文将带你深入了解Spring框架中的 Aware 接口、异步编程以及计划任务。通过具体示例和详细解释,帮助你掌握这些核心功能的实现原理和应用场景。 ... [详细]
  • PyCharm中配置Pylint静态代码分析工具
    本文详细介绍如何在PyCharm中配置和使用Pylint,帮助开发者进行静态代码检查,确保代码符合PEP8规范,提高代码质量。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
author-avatar
手机用户2602916275
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有