Answers:
两个简单的规则:
当您开始做所有这些事情时,您将获得信心,您现在就可以做出简单的决定,而不会影响您以后对变化做出响应的能力。
请记住,面向未来的证明意味着使代码易于更改,而不是试图预期代码可能需要更改的所有可能方式。
通常,当我有这种感觉时,这意味着我需要尝试:
如果问题涉及语法和小片段,则:
认为自己无所作为非常容易。即使你管理,不知何故,拿出最佳的解决方案,现在,可以轻松改变之前完成该项目,然后呢?
最好选择一个不错的解决方案并与其一起运行,而不是坐视最佳解决方案。最好的解决方案是难以捉摸,更糟糕的是,主观的。如果需求变化甚微,您的解决方案可能会比您放弃的解决方案更糟糕,因为当时它不是最好的。
我也在学习避免分析瘫痪,因此对我们表示敬意=)这种情况经常发生是因为我们要进行“最佳设计”。实际上,“最佳”在情人眼中。我的公式避免分析瘫痪,是应用足够好的设计原则。我该怎么做?我带来了诸如时间约束,日程安排之类的变量,并问自己,在不影响质量的情况下,能完成工作的最简单的设计是什么(这并不意味着最简单),但与此同时,我确保这是可测试的,并且一对扩展开放,对修改关闭(OCP)设计。可测试和OCP是什么意思?好吧,我没有去寻找我认为最好的东西,而是考虑了一种设计,该设计可以告诉我情况何时会变差,并尝试执行足够的代码以使我能够在以后进行重构和改进。另外,请尝试将要更改的代码与保持不变的代码分开。重构变得更加容易,因为不应该更改的代码从您自己或其他人的将来变得更加安全。
让您的直觉决定其中一种选择怎么样?这应该非常快,并且可以与ammoQ也提出的时间框完美结合。如果已建立选项,则可以尝试限制为1分钟;如果必须先定义它们,则可以尝试限制为2分钟。或任何合适的东西(预先定义)。当学习倾听您的直觉时,实践将使您的直觉选择变得越来越快。
如果您担心选择不完全的可能性,请考虑以下几点:
祝好运!:)
为了克服您不愿做出的决定,请应用时间框:将闹钟设置为在几分钟后关闭;直到那时,您的脑筋才会折磨,但是当闹钟响起时,请选择直到那时为止找到的最佳选择。
创建一个原型。记住,原型是要扔掉的,所以无论您使用什么功能,变量名甚至是宏大体系结构都没关系。您只是构建它来证明它有效。
一旦您创建了它,并把它扔了出去,我愿意打赌您会更轻松地做出那些决定。
我正在阅读您的问题,并按照其他海报的思路思考问题:您不适合这份工作;给自己一个时间限制;暂时做点其他事情。经过一番思考,我不确定任何答案是否真的有帮助
诸如此类的精神问题的麻烦在于它们不容易解决,它们是您的一部分,并且显然您(可能对工作)过于在意,也没有信心与自己达成共识缺乏经验的人一直以来都认为您是第一选择,否则就会过分强调完美的选择。你为什么还要担心这些琐事呢?
现在我有类似的问题,但是代码却没有那么多..通常它的晚餐用..披萨或咖喱..嗯...披萨,但是咖喱很好,但是我感觉像咖喱吗,比萨更便宜,但是您会得到更多的咖喱,但是...等等。:)
所以我想-为什么我在编码方面没有类似的问题,我认为这仅仅是因为我有一组经常使用的模式。如果我需要一个函数定义,那么它很简单..它将与我曾经编写的所有其他函数定义保持一致。如果需要控制流,首先要确定是需要for循环还是while循环,然后创建与上次我需要这些东西之一使用的相同的旧代码。一切都一样,我要排队吗?当然-让我们剪切并粘贴我的“标准”队列代码(从我从事的上一个项目中窃取,或者使用这些东西中的任何一个我都记得)。最终结果...我只为新事物而烦恼,说实话,这是一种荣幸。
因此,我的建议是开始建立代码片段库-我曾经通过电子邮件将它们发送给自己,然后将它们放在文件夹中,但是无论您做什么工作都是最好的-然后您将开始每次都知道该怎么做。您将始终使用以前编写的旧代码,将问题排除在外,为下一个问题做好准备。您会发现自己成为一名更快的开发人员(认真地讲,这是提高程序员工作效率的唯一方法),并希望能找到时间来玩一些有趣的事情,而不是已经解决了很多遍的沉闷的日常工作过度。
当然,所有这些的后半部分也很重要-工作量越大,花在思考上的时间就越少。
这是一种结合 Rein Henrichs(从简单开始,重构)和ammoQ(定时装箱)建议的策略:
x
,然后将其优化为string
,然后name
直到时间到了。userHandle
这种方法可能带来的好处:
我也遇到同样的问题。对于小问题,我尝试解决的方法是采用我认为并不愚蠢的第一个设计。试图找到最佳设计没有任何意义。如果没有写下来,您很难甚至不可能就您可能想到的任何设计的所有细微差别进行推理。在编写代码时,您会发现您可以进行一些小的改进。做对了,我发现以这种方式收敛到一个相当好的解决方案是很容易的。
对于更大的问题,我认为首先考虑您的选择是有好处的,但要在时间上加以考虑。大问题有很大的解决方案空间,您无法评估所有可能性,也不要尝试。
TLDR;选择一个合理的解决方案,并随时进行改进。
这也相关:
陶艺老师在开幕日宣布,他将课堂分为两组。他说,工作室左侧的所有人员仅根据他们制作的作品的数量进行评分,右侧的所有人员仅根据其作品的质量进行评分。他的程序很简单:在上课的最后一天,他将带上浴室磅秤并称量“数量”组的工作:五十磅的锅被评为“ A”,四十磅的杯子称为“ B”,依此类推。但是,那些按“质量”评分的人只需生产一个锅(尽管是一个完美的锅)即可获得“ A”。
好吧,来了分级时间,一个奇怪的事实浮出水面:最高质量的作品都是由按数量分级的小组制作的。看起来,虽然“数量”小组忙于进行大量工作,并从错误中吸取教训,但“质量”小组却对完美理论进行了理论探讨,最后,他们的努力除了宏大的理论和一堆枯死的粘土。
来自http://www.codinghorror.com/blog/2008/08/quantity-always-trumps-quality.html。
我从来不明白这一点。当我是一名讲师时,我会说:
"OK, create an integer variable and assign the return value of strlen() to it."
您可能会想,这不太复杂,其中95%的人写的是:
int x; // or y, or len, or whatever
x = strlen( s );
但是偶尔会有人像一只兔子一样瘫痪在大灯下。我会同情地问问题出在哪里,他们会说“我不知道该怎么称呼!”。
这些人应该寻找另一个职业。也许你应该。