一个曾经与我一起工作过的经验丰富的项目经理声称,他拿到程序员的时间估算以后,先将它乘以π,然后转化下一个时间数量级后,才能得到真正的值。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小时。但是即使是有一些有经验的开发者也需要有利用管理时间块来思考。
同样重要的是明白:编程经验不等同于估算经验。一个不被包含在估算流程中的开发者将不会擅长估算。同样,如果实际的时间花费不被测量和用于与估算比较,那么将没有反馈来学习。
最后,每个程序员都应该具备估算的技能。为磨练这个技能,接手每个任务时,先决定你要做什么。然后在开始之前估算任务所需时间。最后测量实际花费时间,并与估算相比较。同样比较你实际完成的与计划完成的。这样你将会既提高你对一个任务包含细节的理解,同样也提高了你的估算技能。
分享到:
相关推荐
【优秀程序员的十个习惯】 1. 持续学习与跟进新技术:作为优秀程序员,保持对新知识的渴望至关重要。不断学习新的编程语言、框架和工具,关注行业动态,参与专业社区讨论,如CSDN、ITPUB、CHINAUNIX、digg.com等,...
- **时间管理**:合理分配答题时间,优先解决自己擅长的问题,避免在难题上浪费过多时间。 - **代码规范性**:保持代码清晰易读,注释充分,提高代码的可维护性和可读性。 - **逻辑思维训练**:通过模拟练习等方式...
同时,详细阅读项目需求,准确评估工作量,避免因预估不准确导致的后期困扰。 项目执行过程中,管理时间和任务至关重要。使用敏捷开发方法,如Scrum或Kanban,可以帮助你更有效地组织工作。保持与客户的定期沟通,...
比如,这份简历中的“codeKK2公司|Android资深开发”部分就详细列出了求职者在该职位上的工作内容和取得的成绩,这有助于招聘方评估求职者的实际工作经验和能力。 ### 知识点四:专业技能的展现 专业技能部分是对...
【程序员面试经验】是本文的主题,探讨了面试官在评估程序员时关注的要点以及程序员如何做好面试准备。面试官在面试程序员时,通常会关注以下几个方面: 1. **技术水平**:这是最基本的要求,面试官可能会通过笔试...
编程能力是架构师的基础,因为这有助于他们深入理解技术细节,更好地评估技术选择,以及解决实际开发中遇到的问题。 【抽象思维与逻辑思维】 作为架构师,抽象思维和逻辑思维能力是不可或缺的。抽象思维能力使他们...
例如,有些人可能更擅长于前端开发,而另一些人则可能对后端系统架构更为感兴趣。明确自己的定位有助于找到最适合自己的工作环境和发展方向。 当你考虑应聘C#程序员职位时,确保你对该领域有着浓厚的兴趣和热情。这...
9. **具体任务**:程序员在项目中负责“学员管理”、“课件管理”、“统计”和“注册”等模块的开发,涉及到的功能包括数据增删改查、导入导出、权限管理、Flash交互、CMS新闻发布等。 10. **技术应用**:在一些...
例如,你可能更擅长于前端开发、后端开发还是数据库管理?这有助于你在面试过程中更好地定位自己。 #### 二、面试前的准备工作 1. **时间管理**: - **提前到达**:建议提前10-15分钟到达面试地点,既表现出你的...
因此,评估一个系统的复杂性时不能仅仅依赖其外观。 ### 知识点六:教学技巧 #### #41:优秀的程序员不一定能成为优秀的教师 虽然精通编程技术对于教学非常重要,但成为一名成功的教师还需要具备良好的沟通技巧和...
- 张先生精通 JavaEE 开发,擅长使用 Eclipse、NetBeans 和 JBuilder 等 IDE。 - 他在 DWR 框架方面有经验,能够开发 Ajax 应用程序。 - 他还精通 Struts、Spring 和 Hibernate 框架,这些都是 Java Web 开发中的...
18. **前瞻性思考**:思考在不从事开发工作时,自己还能做什么,这有助于长远的职业规划。 19. **专注与持续性**:制定并坚持每周的开发计划,保持专注,避免半途而废。 20. **分享与传承**:积极传授所学,以便...
程序员笔试面试是求职过程中的重要环节,特别是对于进入IT行业的技术人才来说,它不仅测试了候选人的编程能力,还考察了他们的逻辑思维、问题解决和系统设计能力。在这个过程中,了解常见题型和解题策略至关重要。...
例如,你可以写“寻求一份能利用我在Python和Java上的专业知识,以及在软件开发领域的5年经验的后端开发职位”。 3. **技能列表**:列出你的编程语言、框架、工具和操作系统等技术能力。例如,C++, Java, Python, ...
4. **组织与计划**:优秀的程序员懂得如何有效地管理时间和任务,他们擅长制定清晰的计划,以保持项目的进展。良好的项目管理能力可以帮助克服编程过程中可能出现的困境,如拖延症或过度工作。 5. **沟通技巧**:...
- **自我评估**:定期进行自我评估,找出自己最擅长的技术领域。 - **技能提升**:针对个人优势和兴趣进行深入学习和技术实践。 - **展示优势**:在简历和面试中突出自己的核心竞争力,比如通过项目经验来展示。 ##...
6. 软件开发工具:是协助程序员进行编程、调试、测试等活动的软件。 7. 代码生成工具:能够根据设计或模型自动创建源代码的工具。 8. 软件测试工具:用于自动化测试、性能评估、错误检测的工具。 9. 维护工具:帮助...
在软件开发工程师的面试中,评估候选人的素质和能力至关重要,因为这直接影响团队的生产力和项目的成功。面试过程应着重于考察以下几个核心方面,并在不同素质间进行适当的权衡。 首要素质是态度。一个优秀的软件...
在软件开发领域,工作压力、个人发展和职业规划是决定一个程序员是否继续留在当前职位的重要因素。这份辞职报告中,软件开发员提到了他在公司的经历、成长以及离职的原因,揭示了一些关键的知识点。 1. **职业发展...
1. **为什么要在团队中开展软件测试工作?** 软件测试是团队工作中的核心环节,它能有效发现和修复软件中的错误,提高软件的稳定性和用户体验。通过测试,可以在产品发布前减少错误,降低维护成本,同时增强开发...