为什么程序员不擅长估算时间?
2012-08-26 16:29

问:为什么程序员不擅长估算时间?

答:
钟大为 Davy Zhong

各种不同水平,层次"程序员"太多,不可一概而论. 但是这种情况在程序员以外的群体看来,似乎是一种普遍现象.其实内部产生的原因会有所不同。粗略划分一下,分外在因素和内在因素吧:

内在的情况,大致分为下列几种:

1) 对于"做过的"内容,通常有一定水平的程序猿应该会估计比较准确的.因为重复性劳动基本就是体力活。

--这个可以类比项目管理PMP中关于项目的估算方法.比较类似与"专家估算"或是"经验估算"。这里有一种情况,资深的/或者是高级别的程序员简单分析需求后分配任务,定schedule.但是视角是从自身出发的,可是实际开发却是安排给其他比较初级的程序员去实现。

而那些比较初级的程序员的知识背景不同,相应的知识储备也不同,对某些"难点"或相关联外围知识了解程度也不同.这类的估算失误在新组建的团队中比较常见.长期的配合与磨合可以降低偏差。

2) 对于"没做过"的东西,通常就没底.估算偏差通常也较大.不是高估了解决方案的难度就是低估. --通常还都是低估[很多程序员都很有"自信"。各类论坛上常常可以看到诸如"XX服务器选项如何配置", "XX在Unix/Linux下如何安装", "XX接口如何调用". 这种了解"窍门"的人只要几分钟,不了解的人会花几天时间反复摸索. 其实不论高级/初级程序员,在没有经验的问题面前,处境都差不多.差别只是:

-有经验又比较聪明的程序员懂得举一反三。

-谦虚的新人程序员懂得去请教有经验的程序员--(有些"老人"会不好意思,什么问题请教什么人也是个学问)。

-好学的程序员通常都会有常常去的技术论坛/博客,也会在那上面寻求解答.微博也是一个好渠道。

-有好习惯的程序员会有自己的KB[知识库], 收集整理各类有用的知识笔记.有一定的积累下,这个也是个好渠道.(有不少大牛长期积累后,简单整理一下就可以出书。感谢Google,搜索引擎的出现大大提高了解决这类问题的效率.)。

3) 问题没有分析清楚,隐藏的"地雷"导致估算偏差. 此类情况有些复杂, 有

--需求本身描述过于简单,开发实现过程中发现技术难点的.

--分析估算人员认为简单,就不将需求任务详尽分析. 实现人员经验不足,估算出现偏差(也有可能估算人员经验不足,没有发现其中的技术难点)。

--实现人员对于解决方案的特点了解不足,选择了错误的解决方案[技术上有实现难度/无法满足需求/架构层面改造成本大而无法接受/与其他模块有冲突]

4) 分析人员工期与任务优先级安排不合理,从而导致资源依赖或者是资源冲突。

--基础模块高优先级开发 [减少功能模块依赖]。

--接口模块,设计与开发先于功能模块 [降低外围系统依赖]。

--测试计划优先设计/安排, 测试人员尽早参与项目 [加深功能理解/降低后续问题影响]。

外在的情况:

1) 客户需求变更

--这种情况多/乱/杂. 需求变更有大有小,虽然各类项目管理教材中对于需求的管理有大幅的章节进行描述.可是实际项目中,不论是国内项目还是国外,需求变更的问题几乎是不可避免的. 项目经理们也只有各显神通,通过各种手段来尽量降低变更对于项目的影响。

2) 其他配合团队的问题,软件开发是个工程型项目.程序员个体虽然是具体实现人员,但是其他团队的参与也有很大的影响。

--DBA, 处于安全和专业的考虑,很多公司和项目安排了专门的数据库管理人员.由他们进行数据库层面的更新与设置. 此类专门的人员数量通常都不多,多个程序员都有需要DBA配合的时候,势必有冲突和先后。

--BE[build engineer] 部署人员. 很多公司也安排了专门的部署和构建人员或者是团队,这类人员也和DBA一样,同时服务与多个项目. 也会有冲突和影响。

--SA [system administrator]系统管理员. 专门管理服务器,配置服务器目录/权限,在服务器安装各类应用等。

以上的各类人员,开发过程中必然会接触到.很多时候处于部门管理问题或是其他原因,会影响到程序员的进度 (毕竟,这一类的时间,程序员是无法估算的. WBS中也无法描述和罗列此类时间, 难道要程序员汇报:等DBA更新索引-2小时, 等SA清除日志缓存-4小时)。]

3) 天灾人祸

--电脑有问题这个就多了,有时候也很浪费时间. e.g:JDK版本不对/开发工具/网络/鼠标键盘。

--疲劳 没错,就是疲劳. 程序员大部分都是夜猫子,更不要说什么世界杯/奥运会的影响了. 世界杯期间,估计很多项目的进度都多少受到了熬夜看球的影响。

--生病长期空调房对屏幕, 腰酸背痛鼠标手那是标配,其他的三高和肩周炎也是普遍存在.项目可不会因为你请病假就顺延, 一个萝卜一个坑的安排导致在病假期间照样要接电话, VPN使得你在家一样要联网工作. 可是, 这样一来效率就打折扣了. 延期也是必然的.。

暂时就总结了以上这些, 基本都出自于自身开发。

michael-lei

这个问题要看你问的是程序员估不准时间还是项目经理估不准时间,如果是程序员,原因一般都是三个:

一是未真正理解客户的实际需求,导致做出的东西不是客户所需的,所以要不停更改;这个问题可以通过采取SCRUM敏捷开发管理的方式来解决,可以及时响应需求变化,调整进度,另外就是要增强程序员理解客户需求的能力。

二是程序员能力不足,没有一个全面的、整体的考虑,导致后期会出现很多预想不到的问题,诸如非预期BUG的出现、与外部系统的接口考虑不全等;这个只能通过提升程序员自身的能力来解决

三是原有代码基础水平会影响新程序员的开发进度,如果单纯的要程序员实现某个功能可能只需要一天,但如果是在已有代码的基础上增加同样功能可能反而需要更长的时间,因为原有代码的可读性和健壮性等都会对新开发人员造成影响。这个需要公司要求所有员工保持良好的开发习惯和完善的文档支持,方便后续人员上手。

更多创业疑问、商业难题请移步至:优士问答 阅读/提问

本文由“优士网 ”(微博:http://e.weibo.com/ushichina)与“i黑马”联合出品,原问答地址:http://www.ushi.com/wenda/question!detail.jhtml?qid=6110   问答整理自优士问答频道。如果在阅读程中遇到什么问题,请联系post@chuangyejia.com ,期待您宝贵的意见和建议!也推荐创业者注册优士网,扩大您的人脉,增强您的优势。 


i黑马也诚邀第三方媒体入驻“开放实验室”,合作联系:@老雅痞