让 AI 如虎添翼的五项基本人类技能
使用 AI 编程工具构建软件,并不需要计算机科学学位。但你确实需要一小套任何 AI 都无法取代的技能。这些是不可或缺的基础——让一切皆有可能的前提条件。
简明清单
| 技能 | 为何不可或缺 |
|---|---|
| Git | 你的安全网——撤销任何操作,无惧分支,永不丢失工作 |
| TDD | 让 AI 生成的代码保持诚实的方法论 |
| 终端素养 | AI 工具运行在终端中;你需要读懂它们的输出 |
| 英语 | 文档、错误信息和 AI 提示词在英语下效果最佳 |
| 品味 | AI 生成选项;你来决定哪个是对的 |
就这些。五件事。其他一切——语言语法、框架 API、设计模式——AI 替你搞定。[1]
Git——你的安全网
Git 是你手中最重要的工具。不是因为你需要精通变基(rebase)或遴选(cherry-pick)——AI 来处理这些——而是因为 Git 赋予你 无惧的实验精神。[2]
你实际需要掌握的命令
| 命令 | 作用 | 使用时机 |
|---|---|---|
git status | 显示变更内容 | 每次 AI 会话前后 |
git diff | 显示精确变更 | 提交前审查 AI 所写的内容 |
git add + git commit | 保存检查点 | 每次达到可工作状态后 |
git log | 变更历史 | 需要了解发生了什么时 |
git stash | 临时搁置变更 | 想尝试不同方案时 |
git checkout -- file | 撤销对某文件的修改 | AI 把某处改坏了时 |
git worktree | 同时在多个分支上工作 | 想并行探索想法时 |
思维模型
把 Git 想象成 无限撤销。每一次提交都是你可以返回的存档点。这意味着:
- 自由尝试高风险变更 — 随时可以回退
- 让 AI 去实验 — 出了问题就回滚
- 同时推进多个想法 — 分支让你并行探索
- 接受前先审查 —
git diff精确展示 AI 改了什么
AI 会为你创建提交、分支和拉取请求。但你应该理解这些是什么,因为由你来决定何时保存、何时分支、何时合并。
Git 工作树——平行宇宙
值得早点学习的一个 Git 功能是 工作树(worktree)。工作树让你可以在单独的目录中检出不同的分支——无需切换当前工作:
# 为新功能创建工作树
git worktree add ../my-feature -b feature/new-idea
# 在其中工作
cd ../my-feature
claude # 在这个分支中开启 AI 会话
# 回到主工作区——一切未受影响
cd ../vmark搭配 AI 编程工具尤其强大:你可以让一个 AI 会话在功能分支上实验,同时主分支保持干净可用。如果实验失败,直接删除工作树目录即可。无混乱,无风险。
不要跳过 Git
没有 Git,一次 AI 的糟糕编辑就可能毁掉数小时的工作,且无路可退。有了 Git,最坏的情况不过是 git checkout -- .,然后回到上次存档。在做任何其他事之前,先学 Git 基础。
TDD——让 AI 保持诚实的方法
测试驱动开发是将 AI 编程从"希望它能用"变成"证明它能用"的方法论。这不只是一种优秀实践——它是 验证 AI 生成的代码确实完成了你要求的事的主要机制。[3]
红-绿-重构循环
TDD 遵循严格的三步循环:
1. 红(RED) — 编写一个描述预期行为的测试。它会失败。
2. 绿(GREEN) — 让 AI 编写最少量的代码使测试通过。
3. 重构(REFACTOR)— 在不改变行为的前提下整理代码。测试仍须通过。这与 AI 编程工具配合效果出奇地好,因为:
| 步骤 | 你的角色 | AI 的角色 |
|---|---|---|
| 红 | 描述预期行为 | 帮助编写测试断言 |
| 绿 | 验证测试通过 | 编写实现代码 |
| 重构 | 判断代码是否足够整洁 | 执行清理工作 |
为什么 TDD 在 AI 时代更重要
当你自己写代码时,你隐性地理解它——你知道它做什么,因为是你写的。当 AI 写代码时,你需要一个 外部验证机制。测试就是这个机制。[4]
没有测试,会发生这样的情况:
- 你让 AI 添加一个功能
- AI 写了 200 行代码
- 你读了一遍,看起来没问题
- 你上线了
- 它破坏了你没注意到的某处——一个细微的边界情况、一个类型不匹配、一个差一错误
有了 TDD:
- 你把行为描述成测试(AI 帮你写)
- 测试失败——确认它在测试真实的东西
- AI 写代码让它通过
- 你运行测试——它通过了
- 你有了 证明 它能用,而不只是感觉
测试长什么样
你不需要从头编写测试。用自然语言描述你想要什么,AI 来写测试。但你应该能够 读懂 一个测试:
// "当用户保存文档时,修改标记应该清除"
it("保存后清除修改标记", () => {
// 设置:将文档标记为已修改
store.markModified("doc-1");
expect(store.isModified("doc-1")).toBe(true);
// 动作:保存文档
store.save("doc-1");
// 验证:修改标记已清除
expect(store.isModified("doc-1")).toBe(false);
});模式始终相同:设置、动作、验证。一旦你认识了这个模式,就能读懂任何测试——更重要的是,你可以告诉 AI 下一步测试什么。
边界情况——bug 藏身之处
TDD 的真正威力在于 边界情况——异常输入和边界条件,bug 就藏在那里。AI 自己去想这些出奇地差。[5] 但你可以提示它:
"如果文件名为空会怎样?" "如果用户双击保存按钮会怎样?" "如果网络在请求中途断开会怎样?" "如果文件名中包含 Unicode 字符会怎样?"
每一个问题都变成一个测试。每个测试都变成一份保证。你想到的边界情况越多,软件就越健壮。这就是人类的 品味 和 AI 的 实现速度 结合,产生两者单独都无法达到的成果的地方。
TDD 与 AI 的实战工作流
以下是一个真实的工作流:
你: 添加一个检查文件名是否有效的函数。
从一个失败的测试开始。
AI: [编写测试] it("拒绝空文件名", () => { ... })
[测试失败——红 ✓]
你: 现在让它通过。
AI: [编写 isValidFilename()]
[测试通过——绿 ✓]
你: 为以下情况添加测试:仅有空格、路径分隔符、
超过 255 个字符的名称、空字节。
AI: [编写 4 个更多测试,部分失败]
[更新函数处理所有情况]
[所有测试通过——绿 ✓]
你: 很好。如有需要,重构一下。
AI: [简化正则,保持测试通过——重构 ✓]你没有写一行代码。但你主导了每一个决策。测试证明代码有效。如果以后有人修改了这个函数,测试会捕获回归问题。
覆盖率棘轮
VMark 强制执行测试覆盖率阈值——如果覆盖率低于底线,构建就会失败。这意味着每个新功能都必须有测试。AI 知道这一点,会自动编写测试,但你应该验证它们测试的是有意义的行为,而不只是代码行数。
终端素养
AI 编程工具是命令行程序。Claude Code、Codex CLI、Gemini CLI——它们都在终端中运行。你不需要记住数百个命令,但需要熟悉其中的几个:
cd ~/projects/vmark # 进入目录
ls # 列出文件
git status # 查看变更
git log --oneline -5 # 最近的提交
pnpm install # 安装依赖
pnpm test # 运行测试AI 会为你建议并运行命令。你的工作是 读懂输出,理解是成功还是失败。测试失败和构建错误的样子不同。权限拒绝和文件未找到也不同。你不需要自己修复这些——但你需要描述你看到的内容,让 AI 来修复。
从这里开始
如果你从未用过终端,从 MIT 的 The Missing Semester 开始——特别是第一讲关于 shell 工具的内容。一小时的练习就足以让你开始使用 AI 编程工具。
英语水平
这不是关于写出完美的散文。而是关于 阅读理解——理解错误信息、文档和 AI 解释。整个软件生态系统运行在英语之上:[6]
- 错误信息 是英文的
- 文档 首先(通常也仅以)英文编写
- Stack Overflow、GitHub Issues 和教程绝大多数是英文的
- AI 模型在英语提示词下表现明显更好(参见为什么英文提示词效果更好)
你不需要流利地写作。你需要:
- 读懂 一条错误信息,理解大意
- 有效搜索 技术术语
- 向 AI 描述 你想要的内容,足够清晰
如果英语不是你的母语,VMark 的 :: 提示词钩子会自动翻译和优化你的提示词。但阅读 AI 的回应——通常是英文的——是你一直都会做的事。
品味——AI 唯一无法取代的东西
这是最难定义却最为重要的一项。品味 是知道好的东西是什么样的——即使你还不能自己构建它。[7]
当 AI 提供三种解决问题的方案时,品味告诉你:
- 简单的比聪明的好
- 依赖更少的方案更可取
- 读起来像散文的代码胜过"优化过的"代码
- 如果 5 行就够,10 行的函数就值得怀疑
如何培养品味
- 使用优秀的软件 — 注意什么感觉对,什么感觉别扭
- 阅读好的代码 — 浏览 GitHub 上流行的开源项目
- 阅读输出 — AI 生成代码时,即使你不会写,也要读一读
- 问"为什么" — AI 做出选择时,让它解释权衡利弊
- 反复迭代 — 如果某处感觉不对,它大概率就是不对。让 AI 再试一次
品味会复利增长。你读的代码越多(即使是 AI 生成的代码),你的直觉就越敏锐。几个月的 AI 辅助开发之后,你会发现自己能捕捉到 AI 遗漏的问题——不是因为你知道更多语法,而是因为你知道 结果应该是什么感觉。
品味测试
AI 完成任务后,问问自己:"如果我是用户,这感觉对吗?"如果答案不是立即的"对",就告诉 AI 哪里感觉不对。你不需要知道怎么修——只需要有那种感觉。
你不需要什么
知道哪些是必需品,同样重要的是知道哪些可以安全地跳过:
| 你不需要 | 原因 |
|---|---|
| 编程语言精通 | AI 写代码;你审查它 |
| 框架专长 | AI 对 React、Rails、Django 的了解比大多数人强 |
| 算法知识 | AI 实现算法;你描述目标 |
| DevOps 技能 | AI 写 CI 配置、Docker 文件、部署脚本 |
| 记住设计模式 | 当你描述行为时,AI 会应用正确的模式 |
| 多年经验 | 新鲜视角 + AI > 没有 AI 的经验[8] |
这不是说这些技能毫无价值——它们让你更快、更高效。但它们不再是 先决条件 了。你可以在工作中逐渐学习,让 AI 一边教你一边前进。
复利效应
这五项技能——Git、TDD、终端、英语和品味——不只是叠加。它们会 复利。[9]
- Git 的安全感让你自由实验,更快地培养品味
- TDD 给你对 AI 输出的信心,让你移动得更快
- 终端流畅度让你无摩擦地运行测试和 Git 命令
- 英语理解让你读懂错误信息和文档
- 品味让你的提示词更精准,产出更好的代码
- 更好的代码给你更好的学习范例
几周 AI 辅助开发之后,你会发现自己理解了从未正式学过的东西。这就是复利效应在起作用——这也是为什么这五项基础,也只有这五项,才是真正不可或缺的。
"无代码"和"低代码"运动多年来一直在努力降低编程门槛。AI 编程工具更有效地实现了这一点,因为它们不限制你能构建什么——它们根据自然语言描述用任何语言、遵循任何模式编写任意代码。参见:Jiang, E. et al. (2022). Discovering the Syntax and Strategies of Natural Language Programming with Generative Language Models. CHI 2022. ↩︎
Git 的分支模型从根本上改变了人们对待实验的方式。关于开发者工作流的研究表明,频繁进行小提交并使用分支的团队,更倾向于尝试高风险变更——因为失败的代价降到了近乎零。参见:Bird, C. et al. (2009). Does Distributed Development Affect Software Quality?. ICSE 2009. ↩︎
测试驱动开发由 Kent Beck 于 2002 年正式提出,此后成为专业软件工程的基石。先写测试的规则迫使开发者在实现之前厘清需求——当"开发者"是需要精确指令的 AI 时,这个好处变得更加强大。参见:Beck, K. (2002). Test-Driven Development: By Example. Addison-Wesley. ↩︎
关于 AI 代码生成的研究一致发现,除非有明确测试用例的引导,AI 生成的代码通过功能测试的比率低于人类编写的代码。在提示词中提供测试用例可使正确代码生成率提高 20–40%。参见:Chen, M. et al. (2021). Evaluating Large Language Models Trained on Code. arXiv:2107.03374; Austin, J. et al. (2021). Program Synthesis with Large Language Models. arXiv:2108.07732. ↩︎
AI 模型在边界情况和临界条件上系统性地表现不佳。它们倾向于生成处理常见输入但对异常输入失败的"快乐路径"代码。这是基于 Transformer 的代码生成的已记录局限性——训练数据偏向典型使用模式。参见:Pearce, H. et al. (2022). Examining Zero-Shot Vulnerability Repair with Large Language Models. IEEE S&P 2022. ↩︎
英语在编程和技术文档中占据压倒性优势。对 GitHub 公开仓库的分析显示,超过 90% 的 README 文件和代码注释是英文的。同样,Stack Overflow 的 2300 万个问题主要是英文的。参见:Casalnuovo, C. et al. (2015). Developer Onboarding in GitHub. ESEC/FSE 2015. ↩︎
软件工程中的"品味"——区分好设计与坏设计的能力——越来越被认可为核心技能。Fred Brooks 写道,"伟大的设计来自伟大的设计师",而非伟大的流程。随着 AI 处理编码的机械部分,这种审美判断成为人类的主要贡献。参见:Brooks, F. (2010). The Design of Design. Addison-Wesley. ↩︎
关于 AI 辅助编程的研究表明,经验较少的开发者往往比专家从 AI 工具中获益更多——因为"能描述"和"能实现"之间的差距随着 AI 协助而大幅缩小。参见:Peng, S. et al. (2023). The Impact of AI on Developer Productivity. arXiv:2302.06590. ↩︎
"复利学习"的概念——基础技能加速相关技能的习得——在教育研究中已有充分论证。在编程领域尤其明显,理解少数核心概念可以解锁对其上一切内容的快速学习。参见:Sorva, J. (2012). Visual Program Simulation in Introductory Programming Education. Aalto University. ↩︎