沉默是金:AI注释“话太多”反而害了你的代码
那些"答非所问"的代码注释
你有没有见过这种注释?AI帮忙写代码后,代码库里出现了大量这样的东西:
# 根据我们讨论的,改成了字典推导式
user_emails = {user.id: user.email for user in users}
# 修好了刚才说的那个空值处理的bug
if data and data.get('value'):
process(data['value'])
这类注释压根不是在解释代码。它们是在记录你和AI的对话。问题就出在这儿。
为什么"提示词泄露"式的注释是个坏味道
当注释说的是"我让AI做了什么",而不是"这段代码在干什么",麻烦就来了:
1. 时间错位 注释预设了一个读者——一个见证了整个开发过程的人。"现在我们改用了……"这句话,暗示有人亲眼看到了改动前后的对比。但未来的维护者,包括未来的你,根本没有这个背景。
2. 文档过期诅咒 这类注释和需求强绑定。一旦需求变了,注释就开始误导人。你以为代码还是那个目的,其实早就不是了。
3. 噪音盖过信号 好的注释解释"为什么",而不是"是什么"。代码本身已经展示了它做什么。注释应该揭示那些从代码里看不出来的意图、约束和上下文。
能不能让火星人看懂?
有个简单的检验方法:一个完全不了解你开发过程的人,能看懂这个注释吗?
❌ 糟糕的注释:
# 从for循环改成列表推导式了,效率更高
results = [transform(x) for x in data]
✅ 好的注释:
# 列表推导式利用了解释器的优化,大数据集下比循环快
results = [transform(x) for x in data]
好的版本解释了选择这个方案的原因,这个价值不会随着时间消失。
Vibe Coding也要讲基本法
"Vibe Coding"——用AI辅助开发,追求快速上线——确实有它的价值。速度很重要。但如果为了快,把代码搞得难以维护,那就是捡了芝麻丢了西瓜。
AI助手给你建议注释的时候,多问自己几句:
- 这段注释解释的是代码存在的理由吗?
- 两年后再看这段注释,还能不能看懂?
- 它记录的是代码的目的,还是开发的过程?
如果是后者,直接删掉。未来的你会感谢现在的自己。
培养更好的AI协作习惯
办法不是不用AI助手,而是养成更好的review习惯:
接受注释前先读一遍。 这个注释是真的有用,还是只是在复述你和AI的聊天记录?
重写AI生成的注释。 更进一步,自己写。你懂业务背景,AI不懂。
制定团队规范。 如果这类注释能混过code review,代码质量只会越来越差。
让代码自己会说话。 命名清晰、结构合理、抽象适当,很多注释根本不需要。
写在最后
代码被读的次数,远比被写的次数多。那些记录"提示词"而不是"目的"的注释,是一种会不断累积的技术债。在快速交付的压力下,这类注释很容易被放过——但它们真的会误导后来的开发者。
好的代码库讲的是一个完整的故事。注释应该解释剧情,而不是把编剧的创作笔记也塞进去。
在 NameOcean,我们相信好的开发习惯不止关乎托管。无论你是在vibe coding你的MVP,还是在搭建企业级系统,代码整洁、可维护才是根本。你的域名是你的数字身份——背后的代码质量,同样重要。