在 AI 辅助编程日益普及的背景下,开发者面临一个核心问题:如何在借助 AI 提升效率的同时,确保代码质量、安全性和可控性?这篇文章给出了十二条实践原则,覆盖从项目规划、文档编写、测试策略到安全审查的全流程,核心思想只有一个——AI 是工具,人必须始终掌握控制权。
先想清楚,再动手
你不做的决策,AI 会替你做。 而 AI 对你的业务、团队和用户一无所知。
Every decision in your project that you don't take and document will be taken for you by the AI.
这意味着在写代码之前,你必须先完成这些事:
- 明确项目愿景和架构设计——接口、数据结构、算法,哪些部分需要深思熟虑,哪些需要严格测试,都要提前想清楚。
- 写详细的文档——需求、规范、约束、架构、编码标准、设计模式,越详细越好。文档应放在代码仓库里,用标准化格式编写,这样其他开发者和 AI 都能高效利用。
- 对复杂算法,先写伪代码引导 AI 理解你的意图。
让 AI 更好地为你工作
降低 AI 出错的成本,提升它获取上下文的效率。
- 构建辅助调试系统——不要让 AI 反复执行昂贵的 CLI 命令或浏览器操作来验证代码。比如在分布式系统中,建一个日志收集系统,直接告诉 AI "数据 X 已保存在节点 1 但未到节点 2"。
- 使用上下文特定的提示文件——例如
CLAUDE.md,把编码标准、最佳实践、项目特定要求写进去。可以自动生成,省去 AI 每次从零开始理解项目的时间和成本。 - 降低代码复杂度——每一行多余的代码都在消耗上下文窗口,让 AI 和你都更难把握整体逻辑。每一行可避免的代码,都在浪费能源、金钱,并增加未来任务失败的概率。
测试:绝不能交给 AI 全权负责
这是整篇文章最重要的警告之一:
AIs will cheat and use shortcuts eventually. They will write mocks, stubs, and hard coded values to make the code tests succeed while the code itself is not working.
AI 会"作弊"——写假的 mock、硬编码值让测试通过,甚至直接删除或修改测试代码。应对策略:
- 自己编写高层次的规范测试——使用基于属性的测试(property-based testing),比如重启服务器后检查数据库是否有正确的值。让 AI 难以通过捷径绕过。
- 在独立上下文中编写接口测试——让另一个 AI 在尽量少了解实现细节的情况下编写接口测试,避免测试被实现"污染"。
- 锁定测试文件——将这些测试与 AI 的编辑权限隔离,明确提示 AI 不得修改它们。
安全与代码审查
不是所有代码都同等重要,但关键代码必须得到人类的充分理解。
- 标记代码审查等级——让 AI 在它编写的函数后加上
//A之类的注释,表示"AI 编写,尚未人工审查"。这样你随时知道哪些代码还没过人眼。 - 标识高安全风险函数——认证、授权、数据处理等敏感函数,用
//HIGH-RISK-UNREVIEWED和//HIGH-RISK-REVIEWED显式标记。一旦 AI 修改了哪怕一个字符,状态必须自动回到"未审查"。
A human has comprehended the logic of the function in all its dimensions and is confident about its correctness and safety.
- 使用严格的 lint 和格式化规则——尽早发现问题,保持一致性。
控制节奏,不要一次生成太多
If you have lost the overview of the complexity and inner workings of the code, you have lost control over your code.
两条实操建议:
- 用原型和实验探索问题——AI 生成代码的成本很低,利用这一点快速尝试多种方案,找到最优解后再正式实现。
- 拆解复杂任务——不要让 AI 一次生成整个项目或组件。拆成单个函数、单个类,逐个检查是否符合规范。一旦你对代码的内部运作失去了全局把控,就必须回退到你还能掌控的状态重新开始。