跳到正文

容易混淆的问题 ​

代码之外的很多失误,来自把两类不同的东西当成一类。下面几组区分不涉及语法,但决定了产出是资产还是噪音。

注释与文档 ​

容易混淆区分
注释写 what 与 why代码能表达的不要重复,写决策和约束
没有注释与过时注释过时注释更危险,读者会先相信它
安装与用法读者先看用法再决定要不要装
固定链接与行号链接行号随代码漂移,用 tag 或 commit hash
文档与代码二者同属一个变更,改接口就改示例
注释数量与代码质量注释多不等于清晰,可能只是代码没写好
文档长度与有用程度长文档没人读完,短而准的文档更容易被维护

判断标准是删掉之后读者会损失什么。删掉重复代码的注释毫无损失,删掉「为什么不用显而易见的写法」可能让后人把问题改回来。

文档也有同样的检验方式:把 README 给一个没用过项目的人看,观察他在哪一步停下来提问。停下来的位置就是文档缺信息的位置。

提交与协作 ​

容易混淆区分
一个提交与一个 PR提交是回滚单位,PR 是评审单位
向上游贡献与 forkfork 适合方向不合或上游已停止维护
issue 与聊天消息issue 要能独立复现,不依赖上下文
阻塞意见与个人偏好只有正确性、安全、数据问题该拦合并
补充信息与 me too前者提供新线索,后者只增加未读

把重构和新功能塞进一个提交,回滚时会带走不相关改动,git bisect 也只能定位到一团混合变更。同理,把无关修复塞进一个 PR,reviewer 无法判断哪一部分导致了行为变化。

PR 描述里的 why 不能省。维护者接受 PR 等于接手长期维护,他需要知道你解决了什么问题、为什么选这个方案。

沟通与 AI ​

容易混淆区分
说出理解与直接问前者让回答者定位偏差,不用从头讲
XY 问题与真实目标描述目标,而不是自己设想卡住的解法
披露 AI 与隐瞒披露决定审查强度,隐瞒把风险留给别人
AI 初审与人工评审前者不懂产品约束,会自信地给出错误建议
生成速度与审查成本省下的是打字时间,不是判断时间
工具熟练与领域理解会调模型不等于会解决问题
text
# 弱
update parser

# 强
fix: 解析空单元格时不再吞掉后续列

问题:CSV 末尾空列被跳过,导致行长度不一致。
方案:保留空字段,按表头长度补齐。
影响:下游按索引取值的代码需要处理空字符串。

两种提交都能通过编译,区别在于半年后还有没有人能还原当时的判断。沟通也是同一件事:留下判断依据,而不是只留下结论。

读者是谁 ​

同一份材料会被三类人读到:半年后的自己、刚加入的同事、项目外部的使用者。三类人掌握的背景依次减少,对信息完整度的要求依次提高。

读者先看什么需要得到什么
未来的自己注释与提交信息当时的约束和取舍
新同事README 与开发文档跑起来的最短路径
外部用户README 顶部与示例能否解决他的问题

写作时轮流扮演这三种读者,比套用模板有效。模板保证结构完整,读者视角保证内容有用。

同一个事实对不同读者要写不同深度。内部实现细节放注释,使用约束放文档,项目定位放 README;放错位置的信息,等于没写。