协作方法论 · 带护栏的 Vibe Coding

注释三要素与代码保护

背景、设计意图、关键约束缺一不可;禁止静默删除代码与依赖

本页解决的问题

先给结论

「注释三要素与代码保护」要解决的关键问题是什么?

背景、设计意图、关键约束缺一不可;禁止静默删除代码与依赖

判断标准

把品味变成产品可重复的行为。 有用的结果不是一句“我觉得更好”。它应该是一条看得见的规则、一个小例子,以及判断体验何时低于标准的方法。

下一步

记录一个前后对比,让别人不用听解释也能看懂质量线。

常见误区

表面更精致了,却没有减少用户的不确定感。

问题在哪

代码只能表达「做了什么」。为什么存在、为什么这样实现、调用时要注意什么,这些信息只有写进注释才能跨时间留存。「写好注释」四个字 AI 执行不了,必须给出固定结构和示例。

三要素结构
1

背景

这个函数为了解决什么业务问题、在什么场景下被调用。没有背景,读代码的人只能看到实现,看不到它为什么存在。

2

设计意图

为什么这样实现,选择这种方案的理由,以及放弃了哪些备选方案。git log 里找不到这些,注释是唯一载体。

3

关键约束

调用方须知:副作用、依赖关系、边界条件等非显而易见的注意点。少了这条,下一个调用者就会踩坑。

交互演示一 · 同一个函数,两种注释

点击切换同一个 merge_chat_history 函数的两种注释写法,对比它们留下的信息量。

chat/history.py
def merge_chat_history(existing: list, incoming: list) -> list: """ 合并两个聊天记录列表,返回合并后的结果。 """ ...
这条注释复述了函数名,读一眼代码就能得到同样的信息。三个月后想知道「为什么以服务端为权威」「为什么丢弃 system 消息」,什么线索都没有。
交互演示二 · 删不删,你来判

三个真实情景,判断 AI 应该怎么做。点选项即时判定,并给出对应的规则依据。

情景 1 · AI 在重构时发现一段兼容旧数据格式的代码,它觉得「看起来没用」,想顺手删掉。
情景 2 · 重构后实现方式变了,原有的「设计意图」注释已经和代码对不上了。
情景 3 · AI 觉得 fetch 比 axios 更轻量,想把项目里的 axios 换成 fetch,顺手改掉 package.json

已答对 0 / 3 题

两条保护规则

注释保护

重构时禁止以「注释太长」「代码自解释」「顺便清理」为由删除背景和设计意图注释。实现变了导致注释不准确时,必须同步更新内容。判断标准只有一条:未来接手的人,没有这条注释还能理解当初为什么这样做吗?

代码删除声明

删除任何已有功能代码前,必须明确告知用户并说明理由,禁止以「顺手清理」「看起来没用」为由静默删除。认为某段代码该移除时,先标注 // TODO: 建议移除 - 原因:xxx,拿到许可再删。

配套规范 · 错误处理

禁止空 catch。所有 try/catch 和错误分支必须有实质性处理:日志记录 + 用户可见的错误提示,或合理的降级逻辑。仅 console.log(e)pass// ignore 都属于静默吞错,一律不允许。

本节要点

注释的使命是留存代码无法表达的决策信息。三要素结构让 AI 写得出来,保护规则让它删不掉,两者配合才能跨越时间。

素材来源:本节内容整理自开源仓库 itshen/xs_vibe_rules 的 rule-opensource.mdc 第七章「代码组织与规范」。

从「问题在哪」把感觉变成判断

「代码只能表达「做了什么」。」指出,AI 降低了做出“能用”成品的门槛,读者真正需要练的是看出哪里不对,并把感觉说成可以执行的要求。

观察用户的下一步,而不是只看表面

「这个函数为了解决什么业务问题、在什么场景下被调用。没有背景,读代码的人只能看到实现,看不到它为什么存在」可以转成几个可观察的问题:用户是否知道现在发生了什么,是否知道下一步做什么,出错或空白时能否恢复,以及信息层级是否让重要内容先被看见。

漂亮不等于容易用

把「注释的使命是留存代码无法表达的决策信息。」用在第二个页面或流程上,记录一个具体犹豫点和一个改动后的用户动作;能被观察到的变化,才是体验改善。

从「问题在哪」走到「三要素结构」

「问题在哪」先把问题落在「代码只能表达「做了什么」。 为什么存在、为什么这样实现、调用时要注意什么 ,这些信息只有写进注释才能跨时间留存。「写好注释」四个字 AI 执行不了,必须给出固定结构和示例」上;到了「三要素结构」,讨论继续推进到「这个函数为了解决什么业务问题、在什么场景下被调用。没有背景,读代码的人只能看到实现,看不到它为什么存在」。两段连起来,重点就不只是记住一个结论,而是看清它成立所依赖的条件。

把这条判断带到下一个场景

评估体验时,把抽象的“好看”或“顺手”换成用户动作:他是否看懂状态、找到了下一步、能从错误中恢复,并且愿意继续使用。

  • 「问题在哪」:代码只能表达「做了什么」。 为什么存在、为什么这样实现、调用时要注意什么 ,这些信息只有写进注释才能跨时间留存。「写好注释」四个字 AI 执行不了,必须给出固定结构和示例
  • 「三要素结构」:这个函数为了解决什么业务问题、在什么场景下被调用。没有背景,读代码的人只能看到实现,看不到它为什么存在
  • 「配套规范 · 错误处理」:禁止空 catch。 所有 try/catch 和错误分支必须有实质性处理:日志记录 + 用户可见的错误提示,或合理的降级逻辑。仅 console.log(e) 、 pass 、 // ignore 都属于静默吞错,一律不允许

最后的「配套规范 · 错误处理」把讨论落到「禁止空 catch。 所有 try/catch 和错误分支必须有实质性处理:日志记录 + 用户可见的错误提示,或合理的降级逻辑。仅 console.log(e) 、 pass 、 // ignore 都属于静默吞错,一律不允许」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。

标记为已学完 阅读进度会自动记录
← 上一篇下一篇 →

继续阅读

同一条线上的下一篇。

文章讨论

读到这里,留下一个判断。

把刚想明白的地方、还没想通的问题,留给下一位一起学习的人。

正在讨论 注释三要素与代码保护 带护栏的 Vibe Coding
3条讨论文章讨论 · 与共学社区同步
在共学社区查看
AM
Asha Morgan内容编辑
观点实践记录

我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。

文章讨论7 有帮助
LH
Lin Harper独立开发者
观点观点

读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。

文章讨论5 有帮助
KM
Kiki Moore产品运营
问题问题

如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。

文章讨论4 有帮助