Skip to content

让 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)。工作树让你可以在单独的目录中检出不同的分支——无需切换当前工作:

bash
# 为新功能创建工作树
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]

没有测试,会发生这样的情况:

  1. 你让 AI 添加一个功能
  2. AI 写了 200 行代码
  3. 你读了一遍,看起来没问题
  4. 你上线了
  5. 它破坏了你没注意到的某处——一个细微的边界情况、一个类型不匹配、一个差一错误

有了 TDD:

  1. 你把行为描述成测试(AI 帮你写)
  2. 测试失败——确认它在测试真实的东西
  3. AI 写代码让它通过
  4. 你运行测试——它通过了
  5. 你有了 证明 它能用,而不只是感觉

测试长什么样

你不需要从头编写测试。用自然语言描述你想要什么,AI 来写测试。但你应该能够 读懂 一个测试:

ts
// "当用户保存文档时,修改标记应该清除"
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——它们都在终端中运行。你不需要记住数百个命令,但需要熟悉其中的几个:

bash
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 模型在英语提示词下表现明显更好(参见为什么英文提示词效果更好

你不需要流利地写作。你需要:

  1. 读懂 一条错误信息,理解大意
  2. 有效搜索 技术术语
  3. 向 AI 描述 你想要的内容,足够清晰

如果英语不是你的母语,VMark 的 :: 提示词钩子会自动翻译和优化你的提示词。但阅读 AI 的回应——通常是英文的——是你一直都会做的事。

品味——AI 唯一无法取代的东西

这是最难定义却最为重要的一项。品味 是知道好的东西是什么样的——即使你还不能自己构建它。[7]

当 AI 提供三种解决问题的方案时,品味告诉你:

  • 简单的比聪明的好
  • 依赖更少的方案更可取
  • 读起来像散文的代码胜过"优化过的"代码
  • 如果 5 行就够,10 行的函数就值得怀疑

如何培养品味

  1. 使用优秀的软件 — 注意什么感觉对,什么感觉别扭
  2. 阅读好的代码 — 浏览 GitHub 上流行的开源项目
  3. 阅读输出 — AI 生成代码时,即使你不会写,也要读一读
  4. 问"为什么" — AI 做出选择时,让它解释权衡利弊
  5. 反复迭代 — 如果某处感觉不对,它大概率就是不对。让 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 辅助开发之后,你会发现自己理解了从未正式学过的东西。这就是复利效应在起作用——这也是为什么这五项基础,也只有这五项,才是真正不可或缺的。


  1. "无代码"和"低代码"运动多年来一直在努力降低编程门槛。AI 编程工具更有效地实现了这一点,因为它们不限制你能构建什么——它们根据自然语言描述用任何语言、遵循任何模式编写任意代码。参见:Jiang, E. et al. (2022). Discovering the Syntax and Strategies of Natural Language Programming with Generative Language Models. CHI 2022. ↩︎

  2. Git 的分支模型从根本上改变了人们对待实验的方式。关于开发者工作流的研究表明,频繁进行小提交并使用分支的团队,更倾向于尝试高风险变更——因为失败的代价降到了近乎零。参见:Bird, C. et al. (2009). Does Distributed Development Affect Software Quality?. ICSE 2009. ↩︎

  3. 测试驱动开发由 Kent Beck 于 2002 年正式提出,此后成为专业软件工程的基石。先写测试的规则迫使开发者在实现之前厘清需求——当"开发者"是需要精确指令的 AI 时,这个好处变得更加强大。参见:Beck, K. (2002). Test-Driven Development: By Example. Addison-Wesley. ↩︎

  4. 关于 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. ↩︎

  5. AI 模型在边界情况和临界条件上系统性地表现不佳。它们倾向于生成处理常见输入但对异常输入失败的"快乐路径"代码。这是基于 Transformer 的代码生成的已记录局限性——训练数据偏向典型使用模式。参见:Pearce, H. et al. (2022). Examining Zero-Shot Vulnerability Repair with Large Language Models. IEEE S&P 2022. ↩︎

  6. 英语在编程和技术文档中占据压倒性优势。对 GitHub 公开仓库的分析显示,超过 90% 的 README 文件和代码注释是英文的。同样,Stack Overflow 的 2300 万个问题主要是英文的。参见:Casalnuovo, C. et al. (2015). Developer Onboarding in GitHub. ESEC/FSE 2015. ↩︎

  7. 软件工程中的"品味"——区分好设计与坏设计的能力——越来越被认可为核心技能。Fred Brooks 写道,"伟大的设计来自伟大的设计师",而非伟大的流程。随着 AI 处理编码的机械部分,这种审美判断成为人类的主要贡献。参见:Brooks, F. (2010). The Design of Design. Addison-Wesley. ↩︎

  8. 关于 AI 辅助编程的研究表明,经验较少的开发者往往比专家从 AI 工具中获益更多——因为"能描述"和"能实现"之间的差距随着 AI 协助而大幅缩小。参见:Peng, S. et al. (2023). The Impact of AI on Developer Productivity. arXiv:2302.06590. ↩︎

  9. "复利学习"的概念——基础技能加速相关技能的习得——在教育研究中已有充分论证。在编程领域尤其明显,理解少数核心概念可以解锁对其上一切内容的快速学习。参见:Sorva, J. (2012). Visual Program Simulation in Introductory Programming Education. Aalto University. ↩︎