像人类会维护它一样编写代码
摘要
文章警告说,依赖LLM编写代码而不保持良好模式,会教会AI不良习惯,导致代码库充满重复逻辑,代码质量不断恶化。
暂无内容
查看缓存全文
缓存时间: 2026/07/10 15:19
# 像人类会维护代码那样写代码
来源:https://unstack.io/write-code-like-a-human-will-maintain-it
LLM 最棒的一点是,它们可以全天候为你写代码。谁还在乎 DRY(不要重复自己)?你不需要亲自去四个不同的文件里更新同一个长长的条件判断——AI 会替你搞定,对吧?
我最近注意到,在一个与 AI 合作构建的项目上,我逐渐放松了要求。我在好几个地方都需要同样的访问权限检查:路由处理器、后台任务、API 端点、Webhook 等等。每次我都描述一下需求,模型生成一段能用的代码,我就合并进去了。
每个版本看起来都像这样:
```
if (user.isActive && user.hasPermission('read') &&
!user.isSuspended && account.status === 'open') {
// 执行某个操作
}
```
基本上是相同的条件判断,每次都是。四个条件,可能变量名稍有不同,逻辑复制粘贴后改一两个字。原本有更干净的做法——比如一个共享的辅助函数,如果是我自己写,我肯定会提取出来的。但我没有。代码能跑!测试通过了,而且我也不是那个需要再碰它的人。
这就是我偷懒的地方:如果代码不符合最佳实践,或者我知道某段代码将来维护起来会很痛苦,那又怎样呢?以后需要改东西时,LLM 会处理,而不是我。
*但问题是*,LLM 并非在真空中写代码。它会读取你的代码库:你打开的文件夹、已有的模式、以及你最近做出的更改。**你合并进代码库的每一个偷懒做法,都在告诉模型“这里就该这么干”**。下次你让 LLM 再写一个带有相同权限规则的端点时,模型不会从基本原则出发。它会从仓库里已有的四个副本开始。
于是你要求第五个端点,得到的是第五份条件判断,带着同样的复制代码。你要求重构,模型保留了全部五个,因为你的代码看起来就是这样。坏的模式不再是个例,而是被认为是你的风格。
如果你一直这样放任下去,当你想修复某个问题的时候,你真的能相信 LLM 能抓到每一个实例吗?
当然,其中一两个本身不是灾难。事情总是这样开始的,但代码坏味道确实会积累。每一个重复的条件判断、每一个“上帝函数”、每一个“我稍后会清理”的合并,都会为下一次提示添加一层信号。最终你很难通过提示轻松摆脱困境——至少不亲手弄脏代码、卷起袖子干是不行的。
最令人沮丧的是:我以为我把维护工作外包给了 LLM,但实际我滑入的滑坡,是在训练 LLM 养成越来越差的习惯。
像人类会维护代码那样写代码吧。LLM 就像海绵,吸收你的一切,然后重复给你。所以,确保你给它的东西是好的。
相似文章
用AI写更好的代码,但更慢
Nolan Lawson认为,AI编程助手可以通过使用多个模型进行彻底的代码审查和漏洞检测,从而更慢地编写高质量代码,提升代码库的健康状况,而不是最大化输出速度。
迈向可理解的软件
本文批判了当前的编程实践和对大语言模型的依赖,反而主张通过更好的抽象、文档和软件栈来使代码更易于理解和维护。
@addyosmani: https://x.com/addyosmani/status/2056078124346228860
Addy Osmani 提醒:过度依赖 AI 编写代码可能会阻碍学习,并削弱对软件开发的思维模型。
如何避免AI代码质量下降
本期通讯文章讨论了AI生成代码速度超过人工代码审查速度所导致的“AI代码质量下降”问题,并提供了平衡速度与质量的策略。
# 代码(更)廉价了
Carson Gross(htmx 的创建者)认为,尽管 AI 让代码生成的成本降低了,但理解代码的成本却在上升。他警告开发者警惕"魔法师学徒"陷阱——让 LLM 生成难以驾驭的复杂代码。他提倡增量式地使用 LLM,并保持对代码库的深度理解。