如果我没有很好的想法来实现功能该怎么办?[关闭]


32

我正在开发自己的应用程序,但遇到了麻烦。我必须实现一个功能,但是找不到实现该功能的好方法。我考虑了几天,没有好主意。搜索互联网并没有给我任何启发。

我需要继续前进,但我想知道什么是最好的:

  • 多思考,多等待,然后继续寻找最佳方法
  • 停止浪费时间,从不良的设计开始,用测试覆盖一切

你怎么看?如前所述,我正在开发自己的应用程序。我没有任何截止日期,但我也想尽快完成对应用程序的编码。



12
@gnat:这些其他问题用于询问者已经知道如何干净地实现某些功能的情况,但是可能希望牺牲良好的设计来避免“快速而肮脏”。但是,此问题描述的是另一种情况,它通常是在根本找不到合适的起点时解决问题,因此恕我直言,没有重复的内容。
布朗

注意:如果该应用程序成功,您将永远不会“完成编码”,并且无论如何都将重新设计功能。因此,我将尽我所能来实现它。

Answers:


41

除了谈论这件事的人(问题建议你没有对项目的同事),我常常觉得这是一个很好的方法把重点放在我的事情可以做。

通常,我知道我必须写一些代码。我还不知道如何写的东西,然后被存根替换,这些存根要么返回虚拟结果,要么使用足以测试其余结果的近似值。

这使您保持生产力。并且,当您需要实现缺少的部分时,您已经有了接口。而且,您在相同的问题域中编写了很多围绕该问题的代码,通常可以帮助我产生想法:您更确切地知道需要输出什么,如果可以帮助解决问题,还可以使用其他哪些输入。而且,通常得出的结论是,丢失的部分不必像最初所想的那样包罗万象。


6
最后编写最危险,最难理解的代码的缺点是,您可能发现无法解决该问题,或者只能通过对程序体系结构进行实质性更改来解决该问题,从而导致大量浪费。
Rich Smith

1
这种方法的另一个缺点有时会导致您:“我可以解决问题X。剩下的就是做Y。” 实际上,Y不可行,真正的解决方案是Z。–
Brian

@ RichSmith,Brian:发生了,尽管很少问我。然后,它可以使您更好地了解缺失部分为何如此困难,从而改善了估计。而且我不建议基于投机性和任意性的职责划分来投入数周的工作。
jdv-Jan de Vaan 2013年

虽然这些是否不利,这是有争议的。您是否将时间花费在完全不探讨这个问题上了?还是坐在旁边猜测会起作用?我认为编写快速原型,尝试尝试并快速失败是一个好习惯。这是唯一可以肯定并在未来类似情况下获得经验的方法
sara 2016年

14

如果搜索失败,您总是可以使用第一个(不一定是最好的)想法来实现,然后在找到正确的方法时对其进行重构。

这是正确的方法,因为即使您发现了看起来不错的主意,但以后可能会变得很糟糕。或者在那时可能很好,但是后来您发现更好的东西。然后,您仍然必须重构。

进行此操作时,请确保以易于重构的方式设计和实施。如果操作正确,则仅需更改有问题的部分,而无需从头开始。


1
这似乎是在本文中假定的,但是我想补充一点,以易于重构的方式编写代码非常重要。
c_maker 2013年

@c_maker是的,当然。否则,以后从头开始重写所有内容都没有意义。我将其添加到答案中。感谢
BЈовић

10

询问另一个人呢?例如,您可以在这里描述您的问题,或者如果它是一个实施问题,请在stackoverflow.com上进行描述,并征求意见。有时,即使您没有得到好的答案,如果您开始写下问题,它也会对您有所帮助。


如果是用户界面有问题,还可以使用ux.stackexchange.com
Rob Church,

如果您提出要求,那么答案将归知识共享(Creative Commons)所有,并且取决于项目,该代码可能无法使用。
smcg 2013年

2
咨询可以享有版权?当然作者会使用它作为教程,而不是复制/粘贴吗?
grizwako

@smcg:在此讨论了该主题:meta.stackexchange.com/questions/12527/…-但老实说,如果这真的成为一个问题,我认为可以通过GrizzLy建议的方式来规避这一问题。
布朗

@DocBrown IANAL,所以我不能肯定地说是否会坚持下去,但有时最好还是谨慎一点。
smcg 2013年

2

一些想法:

  • 头脑风暴
    写下您的所有愚蠢想法(在纸上或白板上)。划掉那些肯定不会起作用的选项。继续写。包括可能与现实世界相关的问题的解决方案。例如,混合油漆,在墙上钉子或换油会解决现实世界中的问题吗?

  • Google 寻求帮助,在这里提问,询问您的极客朋友,等等。
  • 解决相关问题,
    你解决不了问题,但可以解决一个更简单的吗?还是同样复杂,相关的一个?去做。然后进行细微的,个别的更改,使您的解决方案更接近所需的解决方案。

  • 不管您的界面是Web服务,网页,本机表单,照相机,键盘,监视器还是其他任何东西,都可以从外部开始编写。编写几行代码/伪代码以使接口正常工作。使用尚不存在的魔术方法。对每种不存在的魔术方法进行递归操作。稍后进行优化。

2

不好的解决方案没有错。通常,您只是在那个时候对问题域了解得不够多。有了一个不好的解决方案,让您继续学习并进一步了解问题。然后,您仍然可以返回并重构您的第一个解决方案。


1

我总是尝试从最终用户的角度来看它。作为开发人员,您很容易想到“酷”的想法,因为您可以花很多时间在上面工作,实际上对您的应用程序几乎没有增加。

理想情况下,您想要映射应用程序中的所有功能,并根据最终用户的利益对它们进行优先级排序,我个人使用MOSCoW,尽管只要您在整个过程中保持相同的优先级排序方法就可以像1一样简单。 -5。

在此之后,如果您仍然发现此功能是应用程序的必要组成部分,那么就像人们已经说过的那样,请问!我认为我从未遇到过某个问题,而该问题最终并未由同事或Stackoverflow上的好人解决。



在那里,您可以看到它的标志!
Mrk Fldig 2013年

1

我的观点是:永远不要编写行之有效的代码!将来很难重构。

对于开发人员(当然还有PM或老板),这是一种非常普遍的方法。我听到了很多时间“只是让它正常工作”或“我会稍后修复”(以后什么时候?永远不会!),但是,我认为质量并不是在项目中期就无法获得的。

我的建议是,暂时停止思考您的问题。...做其他事情,有时,解决方案只是自己提出来的。

顺便说一句,向同事询问绝对是解决您的麻烦的好方法。

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.