2008-12-03 62 views
7

我经常发现我对功能做的不够全面,尤其是在设计阶段。我发现有几个原因:怎么不急于自己?

  1. 我过于乐观
  2. 我觉得有必要为客户提供快捷的解决方案,所以有时我骗自己,以为设计为防呆而事实上,它仍然是千疮百孔,只是为了更快完成工作。当然,我最终会付出高昂的代价。

我知道我的这种行为一段时间,但我仍然发现我无法弥补。你有没有遇到类似的问题?你如何解决它们?

回答

5

我遇到过这个问题很多。

我的解决方案是笔记本。 (老式的纸类)。

我写出来我是如何打算实施解决方案作为项目符号概述列表,然后我尝试和充实名单上的每一个点。

通常,在这个过程中,我遇到了我没有想到的问题。

当然,80/20法则仍然适用......我还是遇到事情时,我实际上做没有发生,我认为执行,但有经验的这些趋于减弱。

编辑:如果我仍然不确定在这个过程结束时,我把一个一次性原型测试平台放在一起...重要的是要确保它是一掷千金,因为否则你运行的风险包括一些讨厌的黑客你的真实代码库。

+0

另外,让自己按小时支付工作是一种很好的方法来治愈这种倾向;) – 2008-12-03 17:41:43

+0

同意。坐下并分解问题。 – jim 2008-12-03 17:50:51

0

我已经学会了,通过几年的错误(但仍使他们),即几乎所有的东西我想重复使用,或分发,需要进行适当的设计。所以烧得够多就会结束你的乐观。

当正从管理压力,我告诉他们,我将不得不把在思想上无论如何,所以当它的价格便宜,我应该这样做。我也在纸上思考,所以我可以证明我正在做一些事情,它让我的手指保持在键盘上,这两者都为管理提供了舒缓的效果。 ;-)

3

这是很常见错过边缘的情况和细节,当你在一个项目的规划阶段的时候,尤其是在软件开发领域。请不要认为这是个人失败;这是特有的。

为了解决这个问题,许多软件开发方法已经出现。最近,许多开发团队转而采用“敏捷”方法,重点在于快速开发,只需很少的前期技术设计(毕竟,只有在实际开始开发时才会发现许多复杂性)。我目前使用Scrum的系统,该系统一直以优良的在我的小团队:

http://en.wikipedia.org/wiki/Agile_methods

http://en.wikipedia.org/wiki/Scrum_%28development%29

如果您发现自己的组织不会接受他们可以作为一个根本性的转变,把方法,可能值得研究他们是否会同意开发原型系统。这意味着你可以编写一个特性来调查涉及的技术,并判断它是否可行,而不必承诺全面开发,质量标准,测试计划等等。一旦可行性已被证明或推翻,原型应该被扔掉,那么可以开始适当的发展,包括你在这个过程中学到的所有东西。

如果您的问题与时间管理更相关,那么我会推荐Getting Things Done方法(http://en.wikipedia.org/wiki/Getting_things_done)。这是务实和简单的,专注于提高您的工作效率,同时不会使您的信息与您当前的工作无关。我发现,有时候我会因为项目/功能的想法而感到不知所措,并且在我有足够的资源可以有效地工作时,将所有内容写下来并存档一段时间会非常有帮助。

我希望这会有所帮助,祝你好运!

0

风险听起来明显 - 悲观。我有几次经历,我认为“这应该需要几个小时”,并且由于所有意外弹出的小事情,它最终需要几天

到目前为止,我发现管理事物的最佳方式是(非常像安德鲁的答案)以设计和要求作为出发点。然后,我会经历并寻找设计中的薄弱环节,陷阱和其他用例等等。我尝试将此视为一个关键练习 - 尚未编写任何代码,因此,现在是时候完全无情地寻找每一个弱点。寻找您必须处理的错误情况,以及您认为完成每个功能/功能需要的时间量,然后大量填充该量。我曾经有过几次将我的初步估算翻倍,但仍然没有达到这个标准。

作为一名程序员,要真实地预测调试时间非常困难 - 编写代码很容易估计,但将其调试到功能有效的代码是完全不同的。因此,我发现它并没有确切的科学,但我只是把任务放在一堆,所以我有足够的调试空间。

另请参阅Evidence Based Scheduling这是FogCreek为其FogBugz产品开发的时间表中的一个迷人概念。

0

你和世界其他地方。

您需要更多更详细的设计,更准确的估计以及接受的意愿,有时最佳解决方案不一定是最佳解决方案(例如,您可以在汇编器中编写一些循环以获得最佳性能,但是这样做采取比刚刚做的更长的时间

for (i=1; i<=10; i++) {} 

)。花费的时间真的值得用于导弹系统的会计套餐。

9

我使用了一些技巧。第一个是简单的待办事项清单。在早上,我写下了我今天的任务。我尝试着去完成一项任务,直到我能够完成任务。只有当我完成我自己的满意度时,我才会把它消除。我的待办事项清单帮助我保持专注。当中断进入时,我可以有意识地选择是否足够重要,以打断我现在正在做的事情。

我使用的第二种技术是放弃“完成”设计的想法。相反,我将重点放在我已经开始称之为“继任”上,即设计经历了可预测的阶段。每个阶段都很好地支持当前的功能,并且在下一阶段的某个阶段会成功。这让我做得很好,我可以引以为傲的工作,而不会过度设计。

我有直觉,有这样演替(如http://www.threeriversinstitute.org/FirstOneThenMany.html),将覆盖大部分设计的一个小目录。与此同时,我试图记住“足够的一天是它的麻烦”。

0

我喜欢设计,但是随着时间的推移,我发现前期的许多设计很像建造城堡到天空 - 它太多的推测,但是受过良好教育,缺少实际实施和使用设计。

所以今天我更接受的是,在实施设计的同时,学习了很多关于它的新东西,并且需要将这种学习反馈到设计中。这样做是一种有趣的技能,其中包括通过保持简单设计的灵活性,避免重复和凝聚力以及解耦,以小的受控步骤改变设计(=重构)以及编写必要的技巧广泛的自动化测试套件,可以使这种更改变得安全。

对于我来说,这似乎是比“前期设计推测”更好的方法 - 另外,它使我同样准备好了设计需要更改的不可避免的时刻,因为这是一个简单的不可预测的问题更改要求。

3

沟通。

不要急于自己进入编程错误的最好方式就是沟通。是的,良好的问责制。如果办公室里的另一个人参与了这个过程,那么结果就越好。如果一个程序员只是承担这个任务而不担心任何其他人,那么错误的可能性就更大。

问责清单:

  1. 我们怎么支持呢?
  2. 谁需要知道发生了什么变化?
  3. 为什么我们要做这个呢?
  4. 会不会有人不希望这个改变?
  5. 有人会理解我是怎么做到的吗?
  6. 用户将如何感知和使用此更改?

一个skepticle comrad通常是足够好的帮助。功能规格很好,他们通常回答所有这些想法。但是,有时与另一个人的对话可以帮助你,并且你可以更快地从门外获得变化。

0

除,除,除。清单所有将被要求完成项目,然后列出所有步骤步骤那些步骤都需要进行总结,依此类推,直到你达到你有绝对的把握,你可以在一天或更短的时间完成原子项目。添加所有这些值的持续时间以达到一段时间。

然后加倍。现在你有一个数字,如果压抑,至少有些现实。

0

如果发布之前,可能“对设计的睡眠”。我离开工作后发现,我通常会想到我错过的事情。这通常发生在我躺在床上睡觉之前,甚至在第二天洗澡的时候。

我也觉得有价值有一个同行/朋友说,我相信检讨我有什么分发它之前。其他人几乎总是看到我没有想到或误传的东西。

0

我喜欢像其他人所说的那样做。用伪代码写下你的应用程序的流程。这立即突出了一些可能需要进一步关注的细节领域,这些领域并不明显。

伪代码对于可以验证您的方法是否满足其需求的业务用户也是可读的。

使用伪代码还创建了一个很好一套可以放在作为最终解决方案的接口使用方法。一旦伪代码非常紧密,查找模式并查看一些常见的GOF模式。它们不必是完美的,但是使用它们会在修改过程中稍后重写代码时让你感到羞耻。

只需服用一到两个小时的写入伪代码,产生一些非常宝贵的时间节省件以后: 1.一种对象模型出现 2.程序的流被清楚地为他人 3.定义它可以用作文档您的设计有一些改进 4.评论更容易添加,并且对于其他人查看您的代码将更加清晰。

祝你好运!

0

我发现,最好的方式,以确保你选择了一个好的设计是为了确保你理解这个问题,知道你有局限性,并且知道什么东西是必备与nice-对富人。

理解问题将涉及到谁说话有需要的人,让他们挂靠在需要而不是先被做的他们是怎么想它应该得到的所作所为。一旦你知道实际发生了什么,你可以回过头来谈谈关于如何做的要求。

知道你的限制可能很容易:需要在iPhone上运行;必须是一个Web应用程序;需要与已有的Java代码和部署设置集成;等等。这可能相当困难:您不知道您的用户群的潜在规模是多少(几百?几千?百万?);你不知道你是否需要本地化它(尽管如果你不确定,假设你将不得不)。

必备VS,可有可无富人:这可能是最困难的部分。用户经常对“需求”(“应该看起来就像Excel”)有情绪上的依恋,而这些“需求”实际上并不是“必须发生”的东西的一部分。你经常需要兼顾功能和期望才能获得可接受的实现。你不能总是给每个人一匹小马。

确保你写下所有这些!即使它沿着这个方向发展,或者设计很小,当你需要做出关于提交资源的决定时,有一个“这就是我们现在计划要做的事情”的指南,这使得它更容易限制自己实施一个非常酷的专家级功能,而不是无聊的必备功能。

0

既然你认识,你觉得有必要提供一个快速的解决方案,也许它会让你放慢脚步意识到,你或许可以解决问题更快,如果你在设计上花更多的时间的前期提供它越快。例如,如果您花费3小时设计和30小时书写代码,则可能意味着如果花费6小时设计,则可能需要花费10个小时编写代码。 (这些并不仅仅是实例)。您可能会尝试在接下来的几个项目中为自己量身定制。做一些你平时表现的事情,看看你实际进行调试的设计/编码/测试比例。然后在下一个项目中,有意增加您在设计阶段花费的时间百分比,看看它是否缩短了其他阶段所需的时间。因为这些项目可能会有很大的不同,所以您将不得不尝试几个项目来获得真正的基线。将其作为测试,看看您是否可以在其他阶段提高性能,从而在您花费20%以上的时间或50%的时间或100%的更多时间进行设计时提供更快的产品。

还记得后面的过程中,你发现设计的问题更难(更耗时),它是修复。

相关问题