当您面对从未完成的编程任务时该怎么办?


37

3个月前,我以.NET开发人员的身份开始了我的职业生涯,在针对各种技术,模式和概念进行了长期培训之后,负责监督我的开发人员决定我准备加入该公司处理的众多项目之一。

我很高兴终于能够开始编码。我加入的团队目前很小,因为正在开始一个新项目,这很棒,因为我参与了该项目的整个生命周期。它是一个基于Web的SPA项目,其支持使用ASP.NET MVC / ASP.NET Web API,并且在前端提供Durandal框架和相关库。

我的问题是,在与同事开会并确定下个月的任务和估计后,我发现自己处于一个不知道自己是否有能力承担任何任务的职位。

我从未完成任何已创建的任务,而且我不知道该如何进行。

例如,创建的任务之一就是为整个应用程序创建通用的错误处理机制。

当面对他从未完成的任务时,通常如何进行?



7
这可能是编程所特有的,但是大多数人所做的所有前几项工作对他们来说都是这种感觉。他们之所以没有雇用您,是因为您知道答案-这是一项入门级的工作!-他们雇用了您,因为您将能够找到他们。
马可(Marco)

Answers:


59

您可以并且应该为准备任务做几件事:

  • 考虑问题并绘制一些图表。确保您知道要解决的问题是什么。
  • 研究您要做什么。互联网是有价值的信息来源。我不是在问Stack Overflow,而是在研究别人如何解决您的问题或解决问题。google提出了以下内容:“作为系统范围关注对象的异常处理”。就个人而言,我总是尝试向他人学习。
  • 最后,这可能是最重要的,请与团队中的其他人交谈,以获取有关操作方法的更多说明和方向。我总是希望看到新来的工程师来寻求项目指导。

不知道该怎么做永远不会结束。每天我都会遇到从未解决过的问题。弄清楚如何解决新问题的能力非常重要。即使是老问题也从来不会完全老旧-在编程中,几乎总会有新的变化或要求您的解决方案以新的或不同的方式工作。

这就是为什么我是一名工程师。我喜欢找出新的东西。

永远不要停止学习新事物。学习是什么使您变得更好。


27

目前还没有完美的解决方案,但是有些事情可能会有所帮助:

  • 将任务分解为最小的单元-将它们分解为可以做的事情。

  • 重述眼前的任务或问题,以确保您真正理解它。然后做一些分析并重复。

  • 首先选择最简单的任务,即使看起来太简单了也无法保持动力。有些人更喜欢最艰巨的任务,因此“艰苦的工作”就没有了。我发现,“最简单的任务”通常效果更好,因为您只是想获得一些动力,而我已经看到“最困难的优先”导致项目停滞不前。

  • 在选择正确的任务和方法上寻求帮助。

  • 寻找一个可以在一周或两周内持续(理想地每天)提供反馈的导师。

  • 问很多问题,但要专注于对队友有礼貌。总是问他们是否有时间,并注意通常没有时间的口头和非语言符号。

  • 保留您遇到的问题的运行清单,然后在每日讨论中或在您选择的固定时间与他人一起进行处理。

  • 不要害怕问最基本的问题。别人的假设很难挑战,但是如果您不能继续执行给出的要求,则必须再次提问。

  • 如果您知道目标,请尽可能多地做,直到被卡住,然后将进度和问题发布到堆栈溢出上。


11
除了“首先选择最简单的任务”之外,我大都同意。从项目风险的角度来看,最好先执行最困难的基本任务。最好尽早学习硬部分是否真的太硬。然后,您可以(也许)回溯到更简单的设计...或重新协商需求。
斯蒂芬·C

18

当然,您不知道如何编写“通用错误机制”。 在定义了一些要求之前,没人知道如何编写“通用错误机制”。 听起来您所拥有的只是某人的想法,即启动该项目需要某种“通用错误机制”。

就我个人而言,我会回避这个概念。在实现实际用户需求之前编写“通用”的东西几乎总是在浪费时间。而且由于它是通用的,从定义上来说,它并不是特定于您的公司或应用程序的,因此可能已经有一些产品可以满足您大约95%的需求。

但是由于您是初级会员,因此后退可能不是一个好主意。因此,您需要与认为他们需要“通用错误机制”的人们进行交谈,并找出他们期望该机制提供的服务。然后在网上搜索,看是否已经足够了。如果您发现一些东西,建议简单地使用它。他们可能不同意,因为任何要求“通用错误机制”的人都可能遭受“此处未发明”的糟糕情况。

如果失败,则下一步是为错误机制定义接口,并使其得到利益相关者的认可。在那之后,实现可能很简单。

=================

PS有一些程序员认为,启动任何项目的方式都是通过编写“平台”来提供应用程序模块所需的所有通用服务。这通常需要数月的琐碎工作,以重新发明已经可以免费获得的东西。在达到可用解决方案的性能极限之前,没有理由编写“平台”服务。也没有任何理由围绕现有API编写包装器。如果您连续进行重构,那么应用程序所需的确切包装将神奇地出现。


5
我认为我甚至可能花了大部分时间来消除人们认为他们需要的功能,而事实证明,要快速适应新的需求只是轻而易举而又麻烦。您的警告当场!
Eamon Nerbonne

11

我认为您所遭受的焦虑多于技能不足。在某个时候,不是所有的东西都是新的吗?您是否曾经接受过一项任务,但在某种程度上无法解决它?您得到报酬以解决问题。

利用您的团队 -如果您的团队很优秀,那么您应该可以寻求帮助。有些事情你会知道,即使是最高级的人也不会知道。寻求帮助并不是软弱的迹象(只不过是跑到某个问题站点。)。

搜索 -有关通用错误处理的网络搜索没有结果?您可能找不到完整的解决方案。无论如何,您将不得不对其进行处理并使它适合您的应用程序。

原型 -将您对任务的看法从生产更改为原型。只是从那里开始工作并构建。当您达到目的时就可以使用它,然后开始将其视为生产产品。现在您将看不到任务,甚至都不知道从哪里开始。

克服 -仅做您知道如何做的事情就会变得无聊。通过一遍又一遍地重复相同的事情,它还会导致您陷入仅仅强求某些解决方案的陷阱(如果您喜欢重复这些事情,请在装配线上工作)。准备犯错误。那些告诉您他们什么都知道,从不寻求帮助或进行搜索的人只是在撒谎。

关于医生仍在“实践”医学的古老笑话;他们也没有所有答案。


我同意利用您的团队。他们会暂时接受配对编程的知识,以使您快速入门吗?
neontapir 2014年

并非所有团队/开发人员都对结对编程有想法,但这并不意味着您不能坐下来看着他们的肩膀,反之亦然。
JeffO 2014年

6

庆幸的是,您没有做过之前做过一百次的事情。您已经发现了软件开发的乐趣(无论如何,对我来说,都是YMMV)-学习如何以非凡的速度驶过高速公路时如何驾驶。这是伟大的开发人员赖以生存并擅长的事情。

我的个人流程是这样的:

  • 研究。找出是否以及如何解决此问题或类似问题。即使您只能找到有关不同语言或平台的解决方案的信息,它也仍然可以提供非常丰富的信息。
  • 原型。做某事的绝对最佳方法是先做错事。建立一个解决方案,根据您的研究随时随地进行构建。尝试使它符合主要要求,同时考虑到辅助要求。不要为使其漂亮,完美,可扩展,灵活或高性能而烦恼,只需使其工作即可。记下所学到的教训-什么有用,什么没用,潜在的障碍等,然后将代码扔掉。如果您担心看傻瓜花太长时间,可以自己做。就知识而言,它使您个人受益。
  • 设计。将您的外部知识(研究)与个人知识(所学到的原型课程)结合起来,并设计出您认为正确的方法设计。
  • 合作。寻找一个高级团队成员,向他们展示您的拟议设计,获得反馈。向其他人展示,获取他们的反馈。优化设计。
  • 重复。如果您仍然不确定解决方案,请确保同行评审是您迭代周期的一部分。定期将实施情况带给高级团队成员以获取反馈。
  • 要开心-您已经提高了自己的知识和职业,并且必须做一些新的有趣的事情,而不是做过一千次以前的枯燥乏味的事情。尝试使您的下一个项目成为更大的挑战。

最后,不要太担心外观。作为开发团队经理,我希望有人可以证明他们可以学习所需的知识,而不是可以证明他们已经知道我们现在正在尝试做的一件事的人。前者对于我们明天,下个月或明年所做的一切将更加有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.