Answers:
第三种选择是……通过测试驱动的开发编写干净的代码,以实现当今使用YAGNI所需的要求。
暂时不需要编写代码但将来可能会编写代码的诱惑有很多缺点…… 您将不需要它:
结果,您不仅应该只是原型……也不应该从头开始编写干净,优化和文档化的代码,要记住,如果在一段时间内它不会具有成本效益,那么它将被丢弃。
编写您现在需要的代码,从而知道自己将能够最好地满足今天和明天的需求。
照常...
如果您要进行原型设计以减轻风险或暴露未知因素,请对其进行编码,并期望在完成后将其丢弃
如果您要进行迭代优化的原型,只需对其进行编码,并希望经常对其进行修改和重构。
如果您开始编写实际产品,但称其为原型,那么您可以懒惰,那就不要懒惰,并在第一时间写得好
如果您正在制作原型,为什么要考虑使用干净的代码?原型设计的初衷是为了证明一个概念或构想,然后将其丢弃。
我要在这里与大多数人不同意,如果您已经在考虑编写干净的代码或快速完成原型制作之间的选择,请选择后者。特别是在谈论早期开发时。我并不是说永远不要编写干净的代码,而是要说出主意,看看这是前进的方向,然后再将其整理干净-重构。
作为软件开发人员,我们非常着迷于正确地做事并在第一时间进行清理,以至于我们没有意识到这不是我们要交付的代码,而是解决问题的方法。
我认为编码就像写论文一样:
在写论文时,我们从某个地方开始,勾勒出想法,轮廓等。它不会包含所有细节或没有任何完成的外观–本质上是第一稿,然后是第二稿,依此类推。许多东西将被重写,替换和/或什至删除,直至获得更精致和更精美的纸张。(显然,此类比喻并不能说代码像纸一样真正完成或最终完成。)
原型有两种类型:
根据Capers Jones的说法,进化原型会生产出低质量的最终产品,这将需要更多的精力和更长的时间才能达到稳定。
因此,如果您正在考虑进行原型设计,以便客户尽快看到一些东西,以帮助您更好地了解需求,并获得有关需求的更多详细信息,最好是使用一次性原型,并在以后使用干净的代码进行开发。如果您负担不起,请从头开始编写干净的代码,并仔细维护它,但正如其他人建议的那样,请不要过度优化,也不要添加任何东西直到您需要它们为止。
我出于任何原因都不愿意原谅肮脏的编码。以我的经验,以快速而肮脏为原型的借口的人对任何代码(包括生产)都持这种态度。如果有人创建了一个混乱的原型,那么他将以任何代码创建混乱。原型开发并不意味着脏编码,而是意味着可以简化测试最重要用例的假设。该代码可能未经过正式测试,或未考虑所有细节,但仍应精心设计和实施。清洁是能力的标志,有能力的程序员自然对混乱的代码感到厌恶,无论其目的是什么。
从一开始就编写干净,优化和文档化的代码。我自己无法做到这一点,这是一个真正的问题。我不是编码员,但我曾在软件开发公司的客户管理角色中担任过相当多的工作,由于他们给了我很多好主意,所以我有时会为某些东西构建原型。几乎每次原型都被交给开发人员,后者“清理”并将其转变为运输产品。当我检查源代码时,仍然是我糟糕的代码的80-90%。
我倾向于说极端情况几乎总是有害的。
我建议保持干净,有据可查的原型之间的平衡。当您为图书馆或平台进行开发时,就没有与我接触的经验,因此我会更多地向原型方向发展。从一开始,对于将Android置于紧身胸衣的平台(例如Android或容器),尤其如此。这意味着您实现了他们的接口,然后他们打电话给您。
根据我自己的经验,大多数代码的寿命不会很长。就是说,通过实现功能来快速入门。迟早(大多数情况下会更快),由于下一个功能,您需要重新整理/重构现有代码,尤其是处理复杂的部分。请注意进行适当的自动化测试,以使无障碍的重构成为可能。与上述类似Android的平台相同:由于紧密耦合且没有可测试性设计,它们经常使自动化测试变得不那么容易。然后,您可以将测试基础提升到更高的水平,例如集成测试。
我写了一篇文章,可能会给您一些有关启动的提示:https : //medium.com/@ewaldbenes/start-lean-why-its-best-to-split-your-next-coding-project-by-feature-70019290036d