从类比
走向系统化试错
用「档案馆」理解 Git,用「实验协议」理解 TDD,用「协作网络」理解 GitHub,让 AI 不只替你写代码,而是帮助你建立可回退、可验证、可复用的工程思维。
创造不是沿一条路冲刺,而是把多个未来变成可比较的证据。
这不是一份命令速查表,而是一张可以反复校正的认知地图。
AI 降低的是执行成本,
工程方法降低的是错误成本。
四者不是四个孤立工具,而是一条完整的学习与创造闭环:先用类比建立可工作的心智模型,再用 Git 保存探索路径,用测试把预期变成可执行证据,最后在 GitHub 上让变化可讨论、可审查、可复用。
四层系统:从想明白,到做扎实
Git 不是「保存按钮」,
而是一座本地的项目档案馆
门外的工作桌
你正在改的文件。Git 看得到变化,但不会替你决定哪些值得归档。
a18f…
工具栏下移
b730…
自动隐藏
c912…
通过测试
「平行世界时光机」负责点燃直觉,
「档案馆」负责校正结构
像平行世界
- 可以从同一个历史节点分出多个实验方向。
- 可以在不同分支之间切换、比较,再决定是否整合。
- 每条路径都保留其上下文,适合真正有不确定性的创造。
不是真正改写过去
- Git 通常不是把旧历史抹掉,而是从旧节点继续产生新历史。
- 分支不是一整套项目副本;在 Git 中,它本质上是指向某个提交的轻量可移动指针。
- 合并也不一定是「选一个、删两个」;它可以组合多个实验的有效部分,也可能产生冲突,需要人判断。
命令可以交给 AI,
但这些名词与动词必须认得
| 概念 | 类比 | 为什么重要 | 常见动作 |
|---|---|---|---|
| repository | 整座档案馆 | 项目文件、对象与历史的容器;本地仓库与远程仓库不是同一个东西。 | init · clone |
| working tree | 门外工作桌 | 你当前看见和修改的文件状态。 | edit · status · diff |
| staging area | 待入库清单 | 精确决定下一次提交包含什么,而不是「所有改动一起塞进去」。 | add · restore --staged |
| commit | 带索引的档案袋 | 一个可定位、可解释、可作为分叉起点的历史快照。 | commit · show · log |
| branch | 可移动书签 | 隔离实验方向;不是项目文件夹的昂贵复制。 | branch · switch |
| HEAD | 当前阅读指针 | 告诉 Git 你当前位于哪条分支、哪个提交。 | switch · checkout |
| merge / rebase | 整合 / 重排档案 | 两种不同的历史整理方式;不要让 AI 在你不理解影响时擅自改写共享历史。 | merge · rebase |
| remote | 另一座可联络的档案馆 | 常见是 GitHub,但也可以是别的服务器或位置。 | fetch · pull · push |
看状态
读变化
选入库
写意图
做验证
传远端
讨论合并
不必背完命令,但应能在 AI 执行前读懂「它准备改变哪一层、是否会改写历史、失败时如何回退」。
GitHub 是协作与公开资产层
Git 可以完全在本地工作;GitHub 把仓库带入网络、讨论、审查、自动检查与社区关系。
个人实验系统
clone
把远程仓库与其历史复制到本地。它不是「下载 ZIP」的同义词。
fork
在 GitHub 上产生关联的仓库副本,常用于无直接写权限时独立贡献。
pull request
不是「拉代码」,而是向目标分支提议合并,并聚合会话、提交、检查与差异。
TDD 不是「写完再测」,
而是用测试驱动设计决策
把测试理解成实验协议:在实现之前先写清楚「什么现象才算成功」。代码只是为了让这份可执行的行为合同成立。
写一个足够小的测试,描述下一项行为;运行它,确认它因为功能尚不存在而失败。
写最少、最简单的实现让测试通过。此时目标是建立证据,不是提前追求优雅。
在所有测试仍通过的前提下,整理命名、结构、重复与耦合,让设计更清楚。
测试真正提供什么
明确预期、迫使接口可测试、快速发现回归、积累行为文档,并给重构提供安全网。
测试不能保证什么
不能证明没有 bug,不能自动覆盖所有边缘情况,也不能替你判断「这个功能值不值得做」。坏测试同样会误导。
「全面试错完毕,只剩正确道路」适合作为行动方向,但不是数学保证。更准确的说法是:把重要风险空间显性化,并用一组可重复实验不断压缩未知。
别问 AI「这个功能怎么实现」,
先问「它在哪些维度会失败」
以录音中的阅读器「划词高亮」为例。功能表面只有一次拖拽,真实行为却横跨文本边界、方向、DOM 结构、语言与空选择等多个维度。
先写行为合同
把「应自动扩展到完整词」写成可观察、可断言的结果。
再找测试空洞
对照优秀开源项目的测试,问 AI:哪些风险维度尚未出现?
最后守住历史
任何已修复 bug 都先变成测试,再修代码,避免同一问题回来。
让 AI 执行更多,
让自己判断得更清楚
你不是在「学会 Git」,
你是在升级自己的创作操作系统
1. 一个目标,一个实验分支
- 只有存在真实不确定性时才分支:不同布局、不同数据结构、不同交互策略。
- 分支名写假设,例如 experiment/toolbar-bottom,不要写 new-thing。
- 实验结束必须得出结论:合并、摘取部分成果,或记录为什么放弃。
2. 内容与代码都按意图提交
- 课程、书稿、HTML、Skill 都可以用 Git;commit 的单位是「一个可解释的变化」。
- 不要把一天所有工作塞成「update」;让历史本身成为未来 AI 可读的上下文。
- 二进制大文件另设资产策略,避免仓库被视频、PDF、图片历史拖重。
3. 先测试风险,不测试行数
- 优先测试会毁掉用户信任的行为:数据丢失、跨端不一致、权限错误、不可逆操作。
- 测试数量多不等于质量高;每个测试都要能回答「它防止哪种真实失败」。
- 对探索性 UI 可以先做小原型,再把确定的行为下沉为测试。
4. 把「变慢」当作质量信号
- 早期 AI 开发的快,常来自没看见复杂度;后来变慢,是边界、验证与回滚进入流程。
- 用交付吞吐而不是敲代码速度衡量:真正指标是「稳定完成并可继续迭代」。
- 但也防止宰牛刀杀鸡:根据风险分级,决定测试深度,不把每个临时实验都做成航天工程。
5. What / Why 领先,How 不消失
- 日常命令可以让 AI 执行,但你必须理解它要改变工作区、暂存区、历史还是远程。
- 高风险动作前,让 AI 先展示计划、git status、git diff 与回滚方法。
- 禁止 AI 未经明确授权执行 force push、硬重置、清理未跟踪文件或改写共享历史。
工程思维的成熟,
首先体现在知道什么不能自动化
应该坚持
- 先看 status 与 diff,再决定提交。
- 一个 commit 只表达一个完整意图。
- bug 先写可复现测试,再修复。
- PR 让别人能看懂目标、风险与证据。
- 重要仓库设置远程备份与分支保护。
- 让 AI 报告验证命令与实际结果。
不要这样
- 把 Git 当成「Dropbox 自动存档」。
- 把 GitHub 当成 Git 本身。
- 为每次随手保存都制造无意义 commit。
- 通过删除失败测试让 CI 变绿。
- 测试全通过就宣称没有缺陷。
- 让 AI 在脏工作区里盲目 reset / clean。
| 常见说法 | 更准确的理解 |
|---|---|
| commit = 保存 | 保存写入文件;commit 是把经过选择的项目状态写入可追溯历史。 |
| branch = 复制项目 | Git 分支是指向提交的轻量指针;切换分支会让工作区呈现对应快照。 |
| pull = pull request | git pull 是取回并整合远程变化;Pull Request 是 GitHub 上的合并提议与协作页面。 |
| TDD = 测试很多 | TDD 是测试、编码、设计紧密交织的短循环;测试数量只是结果,不是定义。 |
| AI 会命令就够了 | 执行可委托,责任不可委托。你仍需理解目标、影响、证据和回滚。 |
从一条真实需求开始,
不要从背命令开始
建立档案馆
- 选一个正在写的 HTML、课程或小工具。
- 用 AI 初始化仓库并解释每一步。
- 每天至少做 3 次有意图的 commit。
- 练习 status、diff、log 三种观察。
制造平行世界
- 为一个真实设计选择开 2 个分支。
- 分别推进,保留清晰提交。
- 比较结果并记录取舍。
- 练习 merge 与冲突解释。
把预期写成测试
- 挑一个具体功能或 bug。
- 先找成熟仓库的相关测试。
- 建立边界矩阵。
- 完成 3 个 Red–Green–Refactor 循环。
进入协作网络
- 推送一个不含敏感信息的仓库。
- 开一次 Pull Request。
- 让自动检查运行测试。
- 把 README 写成「目标 + 用法 + 验证」。
每次交付前的 10 项检查
真正改变质量的,
往往只是问题换了一种问法
类比建模
请给出 3 个日常类比解释 X。分别说明每个类比准确、不准确的部分,并给出匹配度与适用边界。
最小概念集
在准确的部分,我必须立刻掌握哪些名词、动词和关系?只给能让我开始阅读真实资料的最小集合。
源码考古
基于这个官方仓库的真实历史,解释它为何形成今天的结构。请给出对应文件、提交或文档证据。
测试先读
全面搜索与功能 X 相关的测试,按行为分类,并从测试反推该功能真正的契约。
找 gap
这些测试没有覆盖哪些维度?请建立风险矩阵,并标明哪些 gap 值得优先补、为什么。
反向验证
- Pro Git · About Version Control:版本控制记录文件变化并可召回特定版本;Git 属于分布式版本控制。
- Pro Git · Recording Changes:工作区、跟踪状态、暂存区与提交的官方说明。
- Pro Git · Branches in a Nutshell:Git 分支是指向提交的轻量可移动指针。
- GitHub Docs · About repositories:仓库、可见性与协作能力。
- GitHub Docs · About pull requests:PR 聚合会话、提交、检查与文件差异,用于提议、审查与合并变化。
- Agile Alliance · What is TDD?:失败测试、最小实现、重构与重复循环;同时列出常见陷阱。
说明:录音中的具体仓库规模与「测试代码多一个量级」等瞬时数据未作为结论使用;本指南保留方法论,技术定义以可核查的一手资料为准。