那是我在oDesk的自由职业者的工作。在给定的时间内,我已经完成了一些工作,但这是我第一次错过截止日期。这项工作非常漫长,我尽力了,但我仍然错过了最后期限。现在,我很害怕。我错过了最后期限是我的错。
我的问题是:这是一个大问题,还是在编程工作中普遍错过最后期限,所以我不必为此担心太多吗?
那是我在oDesk的自由职业者的工作。在给定的时间内,我已经完成了一些工作,但这是我第一次错过截止日期。这项工作非常漫长,我尽力了,但我仍然错过了最后期限。现在,我很害怕。我错过了最后期限是我的错。
我的问题是:这是一个大问题,还是在编程工作中普遍错过最后期限,所以我不必为此担心太多吗?
Answers:
是。错过最后期限在软件开发中很常见。
许多自由职业者会因招致技术债务或将污垢藏在地毯下而在最后期限之前完成任务。
由于项目负责人继续以与土木工程相同的方式估算软件任务,因此经常会错过最后期限,这是一种有缺陷的方法,因为软件是一种新颖的手工业,没有明确的规范体系。的确如此,您不能以程序员的不当行为撤销程序员的“许可”,也不能起诉没有标题的程序员。
软件开发具有其他学科所缺乏的内在复杂性。一个大型程序可以拥有比汽车更多的组件,并且这些组件可以以更多不同的方式进行交互。
软件很难可视化,因此使用不同种类的图来查看项目的不同方面,这些方面可能不是正交的。另一方面,土木工程的蓝图可让您以正交的方式在同一张图表(或图层)中查看管道,接线等。
在桥梁或建筑物半建后,客户完全改变项目范围并不常见。在软件项目中通常是这种情况。
软件开发的最新水平尚未达到软件项目可重复且几乎没有风险的地步。即使是像Microsoft这样的大型软件公司,也可能错过数月或数年的截止日期。
大多数汽器皿不过是由于这些问题而被削减的软件项目。
结论:
由于软件开发过程的手工性质,对复杂性的错误估计和低估意味着它仍然是一个不成熟的学科。
make
或其他内容)。计算机科学中的“计划”就是“计划”计划”。不同之处在于make
,计算机科学最多要花几个小时,而编写源代码(包括测试和集成)要花费数月,而在工程学中计划可能要花费数月(包括结构计算),而构建则要花费数月,因此计划的差异影响较小在后者上。
如果您想继续找工作,错过最后期限应该不会成为惯例。
话虽如此,您通常希望在估计中给自己留一些额外的“摆动”空间,以防万一发生事情(而且总是如此)。您无需透露自己已经添加了额外的时间,只是不要使其变得不合理。也许占总时间的5-10%?您会发现的唯一方法是几次。
为了真正掌握估计值,您必须知道编码某种类型的小部件需要花费多长时间...例如,假设您必须为客户端X创建一个无限滚动小部件。如果要花一周的时间,要将其部署到生产中而没有错误,您可以将其用作无限滚动估算的基准。
我的理论(未经证实)是,人类已经进化为低估了两到三对一的复杂工作。国会任何时候问NASA之类的事情是:建造一个航天飞机或前往月球旅行要花多少钱,它们在一周之内就会返回一个数字。在用尽所有预期成本之后,他们发现成本将是原来的三倍。
我们在1970年代开了个玩笑:拿任何程序员的估计,将数字加倍,然后将其移至下一个时间单位。因此,如果程序员说可以在两周内完成,那么他将在四个月内完成。
如果有人改造了厨房,他们通常会认为“好吧,我会在两周内完成”。他们大约在六个星期后完成。