一个曾经与我一起工作过的经验丰富的项目经理声称,他拿到程序员的时间估算以后,先将它乘以π,然后转化下一个时间数量级后,才能得到真正的值。1天转化成3.14周。他过去因为程序员不擅长估算时间而吃尽了苦头。我创建了一个用来翻译程序员时间估算的表格,来尽量缩小估算错误。
估算时间
程序员所想象的
程序员所忘记的
实际时间
30秒 |
只需要做一个很小的代码改动。我准确地知道怎么改,在哪里改。花费30秒敲键盘即可。 |
启动计算机,开发环境和获取正确源码的时间。用于构建,测试,检查和文档修复的时间。 |
1小时 |
5分钟 |
小事一桩,我只要上谷歌查一下语法就可以修复它了。 |
很少有一次就能找到完全正确的信息。即使找到,在它能工作前,也需要做一些调整。外加构件,测试等等时间。 |
2小时 |
1 小时 |
我知道怎么做,但是写这些代码需要花费一些时间。 |
面对未来可能发生的问题,1小时稍纵即逝。有些东西总是会出错。 |
2小时 |
4小时 |
需要写一些代码,但是我粗略地知道步骤。我知道标准框架中的Wizzabanga模块可以做到,不过我得查看文档,了解它的准确地调用方式。 |
这个大概是唯一现实的估算。它为意外的错误留下了足够大的余地,而这个任务也小到足以把握。 |
4小时 |
8 小时 |
我先要把Balunga类重构成2个,然后为Wizzabanga模块加一个调用,最后为GUI加一些字段。 |
总会有许多系统的不同部分依赖着Balunga类。大概有40个不同的文件需要修改。为GUI新加的字段,同样也需要加到数据库中。8小时太长,无法完全把握。总会有比程序员估算时更多的步骤出现。 |
12-16小时 |
2 天 |
真的有一大堆代码要写。我需要往数据库里加一些新table,显示table的GUI,还有读写table的代码逻辑。 |
对于大多数开发者来说,两天的工作量已经大到难以估算了。肯定会有什么东西被遗漏掉。不仅仅是一些小事情,而是整个一大块主要功能会被遗忘在估算中。 |
5 天 |
1 周 |
哎哟,这真是一项艰巨的任务。虽然我还没有思路,但我不能说我不知道。一周应该够了,我希望,我真心希望,但是我不能要求更多了,否则他们会认为我不够称职。 |
这个任务已经大到超过大多数程序员的理解了。它应该被发回给架构师,帮忙将它划分成更小的部分,然后提供一些解决问题的方向。架构师可能会发现一种更简单的方法来完成它,或者发现其实有更多超乎想象的工作。。。 |
2-20 天 |
时间估算时困难的。每一个程序员都有一个现实的估计区间。低于这个区间的估计意味着(构件,测试,检查代码的)时间开销被低估了。超过这个区间的估计意味着这个任务太大而很难预估。
对于初级开发者来说,这个区间甚至都不存在。他们忽略(
构建 ,测试,检查代码的)时间开销,同时困难的任务他们却又无法预估。我想说一个有经验的开发者应该在0.5至24小时将事情做完。超过24小时,就需要细分。这项工作应该在开发者的头脑中完成,然后总和到60小时。但是即使是有一些有经验的开发者也需要有利用管理时间块来思考。
同样重要的是明白:编程经验不等同于估算经验。一个不被包含在估算流程中的开发者将不会擅长估算。同样,如果实际的时间花费不被测量和用于与估算比较,那么将没有反馈来学习。
最后,每个程序员都应该具备估算的技能。为磨练这个技能,接手每个任务时,先决定你要做什么。然后在开始之前估算任务所需时间。最后测量实际花费时间,并与估算相比较。同样比较你实际完成的与计划完成的。这样你将会既提高你对一个任务包含细节的理解,同样也提高了你的估算技能。
转自:http://www.ituring.com.cn/article/details/8290
分享到:
相关推荐
2. **测量量的量度**:涵盖常见的测量单位及其在汇率、长度、面积、体积、重量等方面的运用和意义,以及时间单位间的换算。 3. **几何初步知识**:涉及线、线段、射线、垂线、平行线、角的分类等基础概念,以及平面...
例如,可以使用WHILE循环来计算1到100的和,或者使用CASE语句根据分数换算成绩等级。 在SQL中,数据类型定义了数据的种类,如整数、浮点数、字符串、日期/时间等。局部变量用于存储临时数据,而全局变量则保存SQL ...
5. 局部变量在声明时并不自动赋默认初值,需要程序员显式初始化。 6. 2GB等于2048MB,这是计算机中存储容量的基本换算关系。 7. 抽象方法必须定义在抽象类中,但抽象类中并非所有方法都必须是抽象的,也可以包含...
4. **单位转换**:包括长度、重量、温度、速度、体积等多种物理量的单位转换,方便日常生活中各种测量值的换算。 5. **日期与时间计算**:可以计算两个日期之间的差距,或者向前/向后推算日期,对行政人员和项目...
- 高级语言如C、Java、Python等,由于其易读性和效率,是开发软件时的首选,相比汇编语言和机器语言,它们更便于程序员理解和使用。 7. **内存类型** - CPU可以直接访问RAM(随机存取存储器),其中又分为静态随机...
19. 垃圾回收(Garbage Collection, GC)是Java的一大特性,它的优点在于自动管理内存,防止内存泄漏,使程序员无需手动释放内存。原理是通过跟踪和标记不再被引用的对象,然后回收这些对象占用的内存空间。 20. ...
根据提供的文件信息,我们可以归纳和扩展出以下几个关键知识点: ### 1. Java 集合框架中的 LinkedList - **LinkedList 类**:`...它采用了可视化编程的方式,允许程序员通过拖放控件等方式快速构建应用程序界面。
垃圾回收的具体时间由JVM决定,而不是由程序员明确指定。 #### 21. 并发操作的数据一致性 - **题目描述**:对并发操作若不加以控制,可能会带来数据的什么问题? - A. 不安全 - B. 死锁 - C. 死机 - D. 不一致 ...
11. **世界主要城市同步时间查询**:http://www.123cha.com/worldclock/,了解世界各地的时间,对于跨国沟通非常有用。 12. **各国货币汇率换算**:http://www.123cha.com/currency-converter/,实时汇率信息,方便...
- **实际应用**:多态是面向对象编程的核心特性之一,它允许程序员编写更灵活、可扩展的代码。例如,可以通过一个通用的接口调用不同类的具体实现。 #### 5. IP地址的定义 **知识点解析:** - **基本概念**:IP...
15. **存储容量换算公式**:给出的换算公式中,**1KB=1024MB**(选项D)是错误的。正确的应该是1KB=1024B。 16. **多媒体计算机系统组成**:多媒体计算机系统由 **多媒体计算机硬件系统和多媒体计算机软件系统** ...