调和 YAGNI 与远见的悖论

Reconciling the paradox of YAGNI vs foresight

我参加了一些课程并了解了 YAGNI 的用途。但是,这个原则作为一个整体从来没有让我满意。它引入了一个逻辑悖论。

作为一个假设,您正在设计一个您打算向前扩展的框架。 YAGNI(可能还有 TDD)会鼓励您关注现在。让它适用于您可预见的硬件。毕竟对未来的要求是模糊的,好吧,在未来。

但是,这从本质上限制了您的框架的可行性。在这个假设中,你有先见之明,知道未来会怎样。花时间做一些原型设计和提前工作可能是值得的,因为知道它可以很好地帮助你走下去。毕竟,框架的本质是促进跨环境的某些功能——那么您如何设计一个框架 严格遵守 YAGNI 原则?

我不确定我是否要求提供关于 "how to use YAGNI" 的具体信息——我知道它可能比那更哲学。我可能只是想问问业内经验丰富的开发人员,YAGNI、对立原则和最佳实践之间的界限在哪里。 YAGNI 是否强制执行?甚至被重视?或者它只是我们学校教给我们的东西,因为它在我们的书本上?

谢谢。

YAGNI 是现实世界中大型应用程序开发和维护的重要原则,原因有很多。以下是最引人注目的:

技术复杂性 在处理工业规模的代码库时,经验丰富的开发人员会了解到,他们非常不愿意在系统中接受技术复杂性。您不应该在需要之前就开始支付额外技术复杂性的隐性开销。

REQUIREMENTS 流失 您可能认为您对系统的未来需求有清晰的认识,但您很可能错了。统计数据表明,在产品负责人描述为项目 'must have' 的所有功能中,有 35% 从未实现。试图预测未来的需求并做一些新的技术工作会导致白费力气。

QA 反馈循环 任何时候你在一个非平凡的技术系统上做任何开发,都会有错误。这是不可避免的。根据一些研究,在创建当天发现错误与一年后发现错误会使开发成本相差 100 倍。现在键入无法通过与 UI 交互执行的代码 'in case we need it later' 是缺乏经验的开发人员的标志。

综上所述,最好的代码基本上始终坚持 YAGNI 原则,最好的敏捷团队也以此为目标。如果您有先见之明,您可能会认为您正在使您的代码更易于使用、更灵活等,但事实并非如此。代码简单时最容易使用,因此请保持这种状态。