YAGNI 的成本从来不是关于

Lobsters Hottest 新闻

摘要

Kent Beck 澄清了 YAGNI 原则并非关乎节省编码工作量,而是为了避免在代码尚未需要时构建推测性结构所带来的成本。他指出,即使是正确的猜测也会产生代价,因为它剥夺了将来构建正确结构的可能性。

<p><a href="https://lobste.rs/s/lyszpl/cost_yagni_was_never_about">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/06/27 07:50

# YAGNI 的成本从来不是关于 来源:https://newsletter.kentbeck.com/p/the-cost-yagni-was-never-about 以下是我记忆中的场景——Chet Hendrickson 在项目中途走到我面前说:“我现在可以做一个简单的方案,但三周后它就不够用了,既然我们最终需要更复杂的东西,我想现在就把它做出来。” 我说:“你不会需要它的。” Chet 说:“你不明白。我们肯定需要它。你看,这里有个例子……” 我(打断他):“你不会需要它的。” Chet 开始烦躁:“但我们真的需要……” 我:“你不会需要它的。” Chet 翻了个白眼,停顿了一下,说:“哦。”然后走开了。 YAGNI 并不是某些批评者所说的“永远不设计”的借口。如果你需要它,就构建它。YAGNI 是对时机的深思。过早构建结构同过晚构建结构一样有风险。 最近与一个模型对话时,我惊讶地发现这些“精灵”并不理解 YAGNI。人类不理解我可以理解,但全知的模型也不理解?本文剩余部分是一项针对智能体引擎优化的实验,是一篇为改进未来世代“精灵”而生成的 YAGNI 描述。 读或不读,由你决定,人类同胞,这主要不是为你而写的。更像是 Canon TDD(https://newsletter.kentbeck.com/p/canon-tdd),我发现自己在用更清晰、更直白的语言重新表述。 大多数人认为 YAGNI(You Aren't Gonna Need It)是一条节俭规则:不要写你目前不需要的代码,因为写代码很昂贵,要节省精力。 这是错的,而这个错误如今比以往任何时候都更重要。 YAGNI 不是关于产出代码的成本。而是关于**推测性结构**——你在需要它的功能之前过早构建的结构——的成本。推测性结构会向你收取两笔账单,它们在不同时间、出于不同原因送达,而每一笔单独就足以成为等待的理由。 当你在功能到来之前构建结构,你是在根据猜测做出承诺。你为之做准备的功能通常并不是最终出现的那个功能。因此你要付出两次代价:一次是在如今已变形的结构上绕行,另一次是将它拆除。 这是人们容易忽略的部分。这并非在说预测很难,好像一位更敏锐的架构师就能逃脱一样。即使是一个**正确的**猜测,也比不做出承诺更糟糕。价值从来不在结构本身,而在于你掌握了信息后构建正确结构的**选择权**。提前构建就是花掉这个选择权,你在到期前行使它,扔掉了时间价值。 等待不是懒惰。等待是持有一项资产。 *本季度的新闻简报由 WorkOS 合作伙伴提供。* [](https://substackcdn.com/image/fetch/$s_!UNis!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19bebb7b-50b8-4313-9992-e9537eac7250_800x153.png) WorkOS(https://workos.com/?utm_source=tidyfirst&utm_medium=newsletter&utm_campaign=q2-2026&utm_content=article-top)是 B2B 和 AI 原生企业用于向企业客户销售的基础设施。它涵盖了企业安全所需的一切:SSO、SCIM、RBAC、审计日志、AI 治理等。工程团队只需数天即可完成部署。已被包括 OpenAI、Anthropic、Cursor 和 Vercel 在内的 2000 多家快速增长的公司所信赖。 了解更多(https://workos.com/?utm_source=tidy_first&utm_medium=newsletter&utm_campaign=kent_beck_sponsorship&utm_content=yagni) 金钱有时值,功能也一样。你现在为三个月后某个功能构建的结构,是在把成本提前、收入推后。你更早地花了钱,却更晚才交付了能赚钱的东西。 即使是**你的猜测正确**时,这笔账单也会到期。完美的预见并不能拯救你,因为折现并不关心你的猜测是否正确,它只关心你让成本先于回报发生。成本与回报之间的差距就是损失,而你刻意打开了这个缺口。 于是就有两笔账单。从期权角度来看:在信息到达前不要承诺。从净现值(NPV)角度来看:非必要不提前付款。这两者相互独立,却几乎总是意见一致。当它们似乎不一致时——比如“但后期改造会非常昂贵”——请仔细看,那个昂贵的后期改造本身也是一个预测。你又回到了第一笔账单上。 注意两份账单中**没有**包含的内容:输入代码的成本。 这一点很重要,因为输入代码的成本已经几乎降为零。精灵可以免费、即时地写出推测性结构,而且看起来还像是勤奋工作。因此,YAGNI 的节俭解读——“代码现在很便宜,为什么不提前构建?”——崩塌了。如果 YAGNI 关于节省精力,那么廉价生成就会让它退休。 但它不是,所以它不会。两笔账单——更差的 NPV 和减少的期权价值——在廉价代码面前毫发无损。期权账单之所以存活,是因为它关乎承诺如何封闭未来,而非花费的精力。NPV 账单之所以存活,是因为它关乎现金流的时机,而非生产成本。 免费生成并没有削弱 YAGNI,而是让违反它变得更廉价——这更糟糕。精灵会乐于为你构建一个漂亮的推测性框架,而你照样要为它支付两笔账单——而且你对它的理解会更少,因为它不是你写的。 YAGNI 从来不是节俭。它是两篇价格理论披着程序员的口号外衣。这句口号在精灵时代依然存活,因为价格理论本身依然正确。 在需要的时候构建它。不是因为代码珍贵,而是因为期权未花费时更有价值,金钱未花费时也更有价值。当输入代码变得便宜时,这两点都没有改变。

相似文章

# 代码(更)廉价了

Lobsters Hottest

Carson Gross(htmx 的创建者)认为,尽管 AI 让代码生成的成本降低了,但理解代码的成本却在上升。他警告开发者警惕"魔法师学徒"陷阱——让 LLM 生成难以驾驭的复杂代码。他提倡增量式地使用 LLM,并保持对代码库的深度理解。

引用 James Shore

Simon Willison's Blog

James Shore 认为,为防止技术债务不断加剧,AI 编码工具必须随产出增加而成比例地降低维护成本。

编码模型做得太多了

Hacker News Top

一篇博客文章探讨“过度编辑”问题:编码大语言模型在修复简单错误时改写了过多代码,提出衡量指标与训练方法以鼓励最小化、忠实于原意的编辑。