我最近的工作评估只包括一个弱点:及时性。我已经知道我可以做些改进的事情,但是我正在寻找更多。
在提高其输出速度而又不牺牲其质量的情况下,是否有人对它们进行提示或建议?
您如何估计时间表并遵守时间表?您如何做才能在较短的时间内完成更多工作?
非常感谢您提供任何反馈意见,谢谢,
我最近的工作评估只包括一个弱点:及时性。我已经知道我可以做些改进的事情,但是我正在寻找更多。
在提高其输出速度而又不牺牲其质量的情况下,是否有人对它们进行提示或建议?
您如何估计时间表并遵守时间表?您如何做才能在较短的时间内完成更多工作?
非常感谢您提供任何反馈意见,谢谢,
Answers:
您自己想成为“更快”的程序员的愿望值得称赞。但是,不按时交付并不意味着您很慢,这意味着该项目的计划不佳。成为“更快”的程序员无济于事。这只是意味着您可以更快地超过截止日期。
您(和您的团队)正在执行以下错误之一(或所有错误):
您可以通过多种方式解决上述三种情况中的任何一种。但是,在对它们中的任何一个进行改进之前,您需要知道事情为什么会如此发展。对最后两个或三个项目的估算值与实际花费时间进行事后检验,找出多余的时间在哪里。
我会再重复一遍- 如果您已经适当计划了这一事实,那么编写代码的速度就不会导致错过最后期限。
真的,真的要学习您的编辑器。如果使用IDE,请确保使用了它提供的所有功能。获取备忘单,以了解所选编辑器的键盘快捷键。如果您使用的是Shell,请为常用目录设置快捷方式
“有人在提高输出速度而又不牺牲输出质量的情况下,有任何技巧或建议吗?”
许多人以(a)简单,(b)可靠和(c)正确的东西为代价来追求“终极”质量。
加快开发速度的最重要方法是简化您的操作,以使其尽可能地简单。
大多数在按时交付方面存在问题的人都在交付方式,方式太多。给出的原因通常很愚蠢。它们通常只是感知的需求,而不是实际的需求。
我听到很多人告诉我客户的“期望”。这是一个坏政策。
构建最简单的东西。如果客户需要更多,则增加数量。但是首先要构建最简单的东西。
避免完善代码,仅使其工作即可。这就是企业的期望。
但通常,提高速度意味着要牺牲质量。
把事情简单化。
如果使用TDD,则应遵循“ 红色,绿色,重构 ”:
请注意,当您阅读堆栈溢出时间太长时。“编译”借口只能使用这么长时间。:)
避免过于频繁地切换任务。即使您使用Mylyn之类的工具来管理任务,分心和任务切换也可能会浪费一天的时间。
确定粒度(例如30分钟),然后仅处理与当前任务相关的事情。其他任何问题(新的错误报告,有关其他问题的电子邮件,不相关的程序问题)至少会延迟到“下一个检查点”。确保禁用弹出的电子邮件通知,以免您陷入困境。
如果您的团队中有一个好友,他会告诉您事情是否真的融化并需要您的立即关注,这特别有效。
学会尽快打字。
实践和努力。
您需要花费时间和精力。随着您对使用的任何工具变得更加舒适和自信,速度和创造力也应随之而来。
如果您想提高任何特定技能,也可能有助于设计练习,使您可以专门从事此工作。如果您的设计进度很慢,请尝试查找可在线处理的设计问题。重做相同的练习将使您更快地完成练习并加快练习速度。我个人喜欢TopCoder的算法练习,以练习纯粹的编程速度。它们也有设计挑战,但我没有尝试过。
了解有关“区域”的信息,了解如何使自己进入该区域,并学习如何识别自己不在的区域。
一旦我“处于区域内”,我就会变得非常有生产力,并且代码刚从我体内流出,通常我可以在1天之内完成2或3天的编码。但是我发现通常很难到达那个地方,我发现自己拖延,被其他事情分散注意力(例如Stack Overflow)。
为了更快地生产软件,我发现最好的方法是尽可能地学习您的运行时API。当LINQ扩展可以使用时,请不要键入列表逻辑。当绑定可用时,不要构建一堆事件监听器,等等。
据估计,这是有经验的。您可以在那里使用估算软件来帮助您确定更好的估算。
就个人而言,我发现与初级开发人员一起,将他们最初的估计数乘以2,然后将其加倍。这将包括所有的学习,会议,浪费的时间等。高级开发人员的工作往往比他们的估计高2倍。
通常,问题不是您的估计是否错误。您的估计是否解释了所有正确的事情?您是根据编码工作量还是日历时间给出估算和时间表?想一想您一天中的所有时间,其中有多少是实际的,富有成效的编码,而不是会议,学习,调试等。
有两个想法:
从您的估计中获取其他意见-是否有其他开发人员会问类似“嘿,您认为可以在此时间范围内完成这种功能?”的问题。在某些情况下,其他人的输入可能有助于提高准确性,因为有人可能会注意到您在进行估算时错过的一堆东西。
磨练您的估算技能-开始跟踪您的估算状况如何以及为何中断:其他工作项是否导致无法按时完成?您是否一直低估事物的复杂性?您是否在不可行的情况下给出了完整的时间表,例如,所要求的内容很模糊,以至于仅仅准备一个原型就需要数周的时间,然后应该重新评估要做什么?这样做可能最有助于建立该技能,因此,如果您说某件事将花费x个小时,您将对此充满信心,因为您已经一遍又一遍地重复了。另一种陈述方式是实践,实践,实践。
当然,您可能已经考虑过这些,但我认为值得为那些尚未考虑这些想法的其他人指出这一点。
我认为这里的关键词是“及时性”。他们没有说你太慢,而是说你不及时。
在项目管理中,经理必须能够准确估计何时完成您的工作项目,这一点很重要。我怀疑您的工作不及时的主要原因是您经常遇到未按计划交付且交付时间比计划晚得多的项目。
为了提高您的时效性,您可能需要花费更多的时间来了解在给定您的技能,经验和领域的情况下,完成特定工作项目将花费多长时间。这将使您可以向项目经理提供更好的估计。这里的关键是“更好”……您可以通过用软糖填充所有内容来按时交付,但是您真正想要争取的是更准确的估算。
我将与您的经理讨论此问题,以查看是否确实是问题所在。否则,您可能会以比以前快一半的速度,以两倍的速度完成编程工作,并在以前的一半时间内完成了一些有前途的事情,并且由于估算仍然具有相同的错误系数,因此仍然因其及时性而受到批评。
保持稳定,保持稳定。
构建一些实现少量功能的东西,并确保其端到端有效。然后,在添加新功能时使其保持工作状态。是的,这在某种程度上是TDD的做法,但是即使您不进行TDD也是有道理的。
这样做的理由是,每当我看到有人用两周的代码编写出从未稳定过的代码时,总是需要另外两周才能使其保持稳定。
如果您保持稳定,则可以消除不确定性,并在必要时为自己提供一种在截止日期之前缩小范围的方法。
明显的反论点是,这样做将比编写一次代码花费更多的时间,因为您将做更多的工作来稳定非最终代码。我一秒钟都不会买。当您的代码有效时,您更改了5行,并且发生了中断,您确切知道中断必须发生在哪里。
如果您有10,000行从未使用过的代码,并且必须找到一个中断,那么您就有大量的代码可以搜索。
在始终稳定的FTW的系统上进行小的增量更改。慢走快走。
在这里和其他地方的许多地方,几乎所有答案都被说死了。或者,至少我听说过死刑。学习您的IDE,学习更快地键入内容,使用框架,使用代码生成,等等,等等。当然,这些事情会有所帮助,而且我怀疑有很多程序员是他们的大师。但是作为询问这些问题的程序员类型和像Stack Overflow这样的常见网站,您已经知道这些。您只是想在这里让他们重复一遍,还是只想发泄一下?
但是,如果我们能够达到那种状态怎么办?我的意思是掌握所有这些建议?那会发生什么呢?好。我猜想时间表会进一步减少。再一次,我们将恢复对质量的看法。我的意思是,几十年来,我们的工艺确实取得了进步,并且生产率越来越高。但是,这段时间的质量是否有所提高(当然不包括早期的课程)?
我的答案很简单:优质软件需要时间!您只能以一种换另一种(质量/速度)。但是,是的,我们都知道,但是,我们对折衷往往会在规模的速度方面最终结束的程度并不诚实。在项目初期,我们甚至是更大的骗子!
我说你这里没有错。问题在于人们对优质软件应该使用多长时间的看法。我们自欺欺人,以为我们有能力根据经理甚至是猜测的时间表来创建高质量的软件。我们不生产高质量的软件。我们编写的软件可以正常工作,但有时在应用程序的某些角落会闪烁一些质量。
那么我们该怎么办?我们不能仅仅说服老板,我们需要将每个项目的投资增加一倍或两倍。我说以身作则。创建一个真正出色的软件作为辅助项目。投入自己的时间,不要妥协。始终注意您的进步。记下您似乎不得不花费大量时间的看似无关的任务,并查看是否可以证明其合理性。将此与您工作过的所有其他项目进行对比。要敢说真话与您自己以及此分析的各个方面。您使用质量软件所做的额外工作是否可以在工作中的“真实”项目中忽略?但是也许您的尝试失败了。是什么原因 您是否感到无聊而又急于完成核心功能?我本人还没有做过这样的事情,这就是为什么我会怀疑地结束这种想法的原因-但我打算真正付诸实践。我会及时向大家发布 :)。
最后,我认为大多数(如果不是全部)绩效评估都是错综复杂的,而且极具操纵性。您无法将质量和速度控制在100%。您的老板应根据组织设定的标准给您打分。组织在质量和速度之间进行权衡的标准。假设OrangeSoft Inc.期望33%的质量和66%的速度。因此,如果您编写的代码可能具有单元测试的三分之一,但是应该以更快的速度并缩短交付时间来弥补,则您的评论应获得接近100%的评分!(这些都是粗略的类比,但您明白了)。但是,相反,发生的事情是Bob编写代码的速度非常快,但是臭名昭著的是它的错误。因此,在他的绩效评估中,他的质量得分为3/5,速度得分为5/5。另一方面,Carol编写代码的速度要慢得多,但产生的错误却少得多。她的质量得分为5/5,但速度得分为3/5。鲍勃和卡罗尔无论哪种方式都会加薪。任何员工都有可能获得完美的成绩吗?这公平吗?