放下代码洁癖,享受挖坑人生

一篇论文的数据,和一个反直觉的判断

SonarSource 上个月发了篇论文 Does Code Cleanliness Affect Coding Agents? ,抛出的问题很直接:代码干不干净,到底影不影响 AI 编码智能体的干活效率?

结论先说:代码越干净,智能体消耗的 token 越少、回看文件的次数也少。听起来像是"Clean Code 教条又赢了"对吧?

但我看完数据之后,想说的恰恰相反:综合人力时间成本和 token 消耗来看,代码简洁这件事,在 AI 协作时代确实贬值了。 不是说不重要了,是说它的投资回报率变了,而且变了不少。


一、论文说了什么

他们用"最小对立对"的思路------同一套架构和行为的仓库,只改干净度------在 Claude Code 上跑了 660 次试验。三个核心数字:

指标 干净侧 脏侧 差值
Pass Rate 91.3% 92.1% −0.9pp(基本没差)
输入 Token 基准 +7.1% −7.1%
输出 Token 基准 +8.5% −8.5%
推理字符数 基准 +11.1% −11.1%
会话轮次 基准 +7% −7%
文件回看次数 显著更少 频繁回头 −34% ★ 最大效应

三个发现拆开看:

  • 能不能干完? 0.9 个百分点的差距基本是噪声。干净代码不提升正确性。
  • 干活的代价? 干净侧输入 token 少 7%、输出少 8.5%、文件回看少 34%。文件回看降幅最大,被解读为智能体对改动的不确定性降低了。
  • 任务类型有影响? 跨模块改动(multi-module)效应最强;但那些被重构成一堆小方法的认知热点(cognitive-hotspot)反而 token 差不多------因为重构把复杂度重新分配到了更多方法里,总阅读量没真正降下来。

一个很诚实的方差警告: 同一个任务跑 10 次,token 用量能差 2.5 倍 ;72% 的任务组内比值超过 2×。27 个真实任务里只有 16 个干净侧更省 token,还有 11 个反而更费 。按任务看 input token 差值范围从 −47% 到 +44%,中位数 −4.5%。所以那个"−7%"是几百次试验池化后的均值,不是每次都能兑现的承诺。


二、我的判断:简洁性为什么贬值了

核心论点:代码干净度的收益(token 省 ~7%)远小于维持它的代价(人力时间 + 流程摩擦)。在 AI 参与编码的场景下,这笔账的 ROI 已经不如从前了。

1. 正确性不变 = AI 不挑食

这是最硬的数据。把 200 行 god method 拆成 10 个小函数、变量名从 xfm_q2 改成 normalize_query、删掉死代码------AI 干同一件事的成功概率几乎不提高(91.3% vs 92.1%)。

"为了以后好维护所以现在要写干净代码"这个经典论据里,"以后的维护者可能是 AI"这个分支基本被砍掉了。

2. 7% 的 token 节省,值多少?

算一笔粗糙但方向正确的账:

  • SWE-bench 上单任务平均约 400 万 token,7% ≈ 省 28 万 token/任务
  • 按 Claude Sonnet 4.6 定价,单任务 token 成本约 1 1~ 1 2,7% 大概省 0.07 0.07~ 0.07 0.14/任务
  • 一个团队每周花在风格 review、lint 修复、重命名争论上的时间:至少 5~10 人时/周
  • 一次"代码质量专项" refactor sprint:2~5 人天

就算你每天让 agent 跑 50 个任务,一年省的 token 钱也就几千美元;维持"干净"的人力成本,一年轻松十几万到几十万人民币。数量级不对等。

3. 方差大到你不该依赖它

前面说了,同一任务 10 次差 2.5 倍,27 个任务里 11 个反而是脏侧更省。你不能指望"把代码弄干净就能稳定省 token"------它更像统计趋势,不是每次兑现的承诺。

4. 认知热点任务的"中性"结果

把大方法拆成多个小方法,智能体反而要读更多文件才能拼出全貌。复杂度没被消除,只是被重新分配了。 很多我们以为的"代码改进"(过度拆方法),对人类更易读,对 AI 未必------它的上下文窗口有限,分散的信息反而增加拼接成本。

5. 维护干净代码的真实成本清单

  • PR 审查中的风格争论------"这里该拆两个方法""命名不够语义化",每次 10~30 分钟
  • Lint / 静态分析告警修复------有些真问题,很多只是风格偏好
  • Refactor sprint------通常占 sprint 容量 10~20%
  • 新人上手成本------规范越多工具链越重,新人越容易被打回
  • 团队共识成本------"什么算干净、什么级别值得 block merge",这些讨论本身就是开销

这些都是持续性、复利、常被隐性化的成本。而它的回报,在 AI 时代主要是省约 7% token 和减少文件回看。


三、不是让你去写垃圾代码

我说的是"没那么重要了",不是"不重要了"。几个地方干净代码依然值钱:

  • 人类还要读的代码------团队有新人要看代码理解业务,可读性仍是第一优先级
  • 跨模块导航------论文里 multi-module 效应最强,说明架构层面的清晰对 AI 确有助益(这是"模块边界"级,不是"变量命名"级)
  • 长期自增强效应未知------论文没测"干净代码会不会引导智能体产出更干净代码",如果是正反馈循环,长期价值可能比单任务 7% 大得多,但目前是 open question

所以我建议的是务实分级,不是一刀切:

等级 做什么 理由
必须做 模块边界清晰、公共 API 有文档、无死代码、无安全漏洞 人和 AI 都受益,出错成本高
值得做 关键路径方法控长度、避免深层嵌套、有意义命名 对人类可读性和 AI 多模块导航都有帮助
可以放 变量命名完美主义、过度拆小方法、严格 lint 规则集、纯风格类 PR block ROI 在 AI 时代已下降,投入产出不成比例

四、总结

这篇论文给我最大的启发,是它提供了一个量化框架,让我们重新审视一个被默认接受太久的假设。

Clean Code 作为工程文化有价值。但当你的协作伙伴从纯人类变成人 + AI 的混合体,这个价值的权重需要重新计算。论文数据很诚实:pass rate 不变、token 省 7%、方差巨大。把这些数字放进真实的工程经济学模型,过去那种"不惜一切代价保持代码整洁"的策略,在今天已经不是最优解了。

与其在变量命名和方法行数上较劲,不如把精力放在模块划分、API 设计、测试覆盖这些人和 AI 都真正受益的地方。至于那些纯粹的风格洁癖------

放下吧,时代变了。


原文

《Does Code Cleanliness Affect Coding Agents? A Controlled Minimal-Pair Study》 Priyansh Trivedi, Olivier Schmitt

注:本文观点为作者个人判断,不代表论文作者立场。

相关推荐
_张有志_1 小时前
手撕 STL:一棵红黑树,凭什么同时撑起 set 和 map?
后端
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(二十七):管理员登录验证码开关
前端·后端·ai编程
她的男孩1 小时前
当 Spring Boot 遇上 Flowable 7:Forge 框架企业级工作流引擎架构全解析
人工智能·后端·程序员
java小白小1 小时前
SpringBoot(15):日志框架选型与配置——Logback 从入门到生产级
后端
庄周de蝴蝶2 小时前
两次考试,总算压线通过系统分析师
后端·架构
孫治AllenSun2 小时前
【MDC】使用 MDC 封装一个 LogMdcUtil 工具类
java·spring boot·后端
神奇小汤圆2 小时前
Java 26正式发布!这3个新特性,让代码量直接减半
后端
再吃一根胡萝卜2 小时前
一亿数据下,如何实时统计“业务员业绩 TOP 10”?别再 GROUP BY 了
后端
Oneslide2 小时前
systemd-journald 使用与配置指南
后端