第三篇 · 做出东西 / 第 6 章
完整实战流程
为什么刷新一下,刚填的东西就没了?因为页面只是页面,数据没有真正写进服务器。 这一章用午饭登记把“从想法到收尾”的 1–7 步走一遍。
读完这一章,你能
- 用 1–7 说出一次项目从想法到收尾要经过哪些步;
- 照着实录完成午饭登记的“登记 → 刷新还在 → 删除”闭环;
- 判断什么时候该停下验证、什么时候该退回上一个存档。
午饭登记 · 当前状态:只有页面,刷新就丢
- 必读:流程总图,以及“简化版 1–7”和“完整版七阶段”的对照。
- 必读:午饭登记完整实录,重点看每一步为什么停下来验证。
- 必读:简化版第 1–2 步、第 3–5 步的循环、第 6–7 步收尾的摘要;详细操作分别在第 7、8 章。
- 可选以后再看:工具选择与安装,用普通聊天框也能走完这一章。
流程总图
整件事只有两部分:开始前只做一次的准备,和不断转圈的主体。 下面用 1–7 给简化流程编号,完整版有另一套编号,两者在下一节对照。
简化版 1–7 与完整版七阶段
第 7、8 章讲的是完整版。它把同样的事拆成七个阶段,每个阶段配一个现成技能:
① 拷问 → ② 研究(可选)→ ③ 原型(可选)→ ④ 写规格 → ⑤ 拆票 → ⑥ 实现 → ⑦ 审查(含验收)
在这七个阶段之前,第 7 章还有一节「立项六步」,先判断这件事该不该做。 下面是把简化版 1–7 贴到这套编号上——先看对照,不要混用两套编号。
| 简化版 | 完整版位置(第 7–8 章) | 差别一句话 | 详细讲在 |
|---|---|---|---|
| 1 想清楚 | ① 拷问(此前先做立项六步;②③ 按需) | 简化版靠你口头问;完整版先判断该不该做,再用技能一次一个问题地拷问,必要时先查事实或做原型。 | 第 7 章 · 立项六步 / 拷问 |
| 2 定验收标准 | ④ 写规格 | 简化版是一张能亲手点的清单;完整版写进 spec.md,并写清不做什么。 |
第 7 章 · 写规格 |
| 3 做一小片 | ⑤ 拆票 + ⑥ 实现 | 简化版按“最小可跑一步”切;完整版切成纵向曳光弹工单,一张一张做。 | 第 8 章 · 拆票 |
| 4 亲手跑 | ⑥ 实现里的验证 | 不管哪一版,都必须由你亲手点;AI 说“完成了”不算验证。 | 第 8 章 · 实现 |
| 5 存档 | ⑥ 实现里的提交 | 每次验证通过就存档;它是你敢继续改的退路。 | 第 8 章 · 实现 |
| 6 让 AI 审 AI | ⑦ 审查(含验收) | 换一个干净会话,把规格和代码规范分开审。 | 第 8 章 · 审查 |
| 7 写交接文档 | 不属于七阶段,横跨全程 | 它是每个阶段结束时都该做的动作,不单独占一个阶段。 | 第 5 章 · 习惯三 |
开工之前:选工具、建文件夹、第一次存档
选一个能动手的工具 可选
最理想的是能读写你电脑上文件、能跑命令的 AI 工具, 比如 Claude Code、Cursor、Codex。它们的共同点是:能在项目文件夹里直接动手。 具体选哪个不重要,换工具的成本远低于换方法的成本。
这一章的流程不依赖任何特定工具,靠的是你说的话。 等你想要第 7、8 章那些现成命令时,再换工具。 安装与验证步骤见 第 7 章章末,这里不重复。
建一个空文件夹
给项目建一个专门的文件夹,比如 D:\我的项目\午饭登记,
然后让 AI 只在这个文件夹里工作。
不要让它在桌面或下载文件夹里乱来,否则你很快会找不到东西。
第一件事:建存档
文件夹建好之后,第一句话就可以是: “帮我把这个文件夹变成一个 Git 仓库,并提交一次空状态。” 这一步花不到一分钟,但从这一刻起你就有了后悔药。 一定要在写任何代码之前做。
第 1 步:把想法问清楚
目标只有一个:把脑子里的“感觉”变成一份写下来的清单。 先用自己的话说想做什么,再要求它像面试官一样,一次只问一个问题。 每个问题都是你后面会返工的地方;答不上来就说“我不确定,你推荐哪个”。
问完让它整理成 spec.md,写清做什么、为什么、明确不做什么。
完整做法见 第 7 章 · 拷问;这里只记住顺序:先问,后写。
第 2 步:定验收标准
动手之前,先拿到一份你能亲手点一遍的清单。 每条写成“打开页面能看到什么”“点一下会发生什么”,不要写“实现了数据持久化”这种你无法验证的话。
清单写进 spec.md。如果一条都点不出来,说明需求还没想清楚。
规格的七段结构见 第 7 章 · 写规格,
审查时怎么对照清单验收见 第 8 章 · 审查。
第 3–5 步:一片一片长大
这是主体。每一片都走同样的五步: 切出最小可跑的一片 → 让它做并说“做完停下” → 你亲手跑 → 通过就存档 → 判断下一片。
切片标准是:窄到一次能做完,完整到能跑起来看到效果。 如果发现切不出来,说明你切得太大了,再切一刀。 完整版的拆票规则见 第 8 章 · 拆票, 实现的五个节拍见 第 8 章 · 实现。
第 6–7 步:收尾与审查
功能都做完,还有两件事。第一,换一个干净会话,让它以代码审查员身份挑错, 重点看安全问题和明显 bug。第二,让它写一份交接文档: 做了什么、文件各管什么、下一步能做什么。
审查发现的问题,不要让它一口气全修;把每一项当成新的小片,一片一片做。 完整审查流程见 第 8 章 · 阶段七 · 审查。
午饭登记完整实录
场景:团队要在一个网页上登记午饭。组织者看列表、删掉填错的记录; 同事打开链接,填姓名和想吃的菜。下面是关键对话, 旁注会解释每一步在干什么、验证的是什么。
每条登记是数据表 lunch_orders 里的一行:
id, name, dish, created_at。
id 是自动编号,name 是姓名,dish 是想吃的菜,
created_at 是登记时间。
页面通过接口(API,前后端约定怎么问、怎么答)和服务器说话:
GET /api/lunch-orders?date=today
POST /api/lunch-orders
DELETE /api/lunch-orders/{id}
第 0 步:建仓库
第 1 步:让它问,别让它做
第 2 步:把结论写成 spec.md
spec.md 存下来。
写清楚要做什么,也写清楚明确不做什么。
第 3 步:拿到能亲手点的验收清单
- 打开页面,能看到姓名输入框、菜名输入框和“登记”按钮;
- 输入“小王 / 牛肉面”并提交,列表立刻出现这一条;
- 刷新页面,这一条还在;
- 点这一条的“删除”,列表里消失;再刷新,仍然不在;
- 姓名或菜名为空时,提交后能看到提示,列表不变。
第 4 步:第一小片,只做“读空列表”
GET /api/lunch-orders?date=today,
服务器返回空列表,页面显示“今天还没有人登记”。
GET 是“读取”。刷新页面时,浏览器会重新发一次 GET,
所以页面显示什么,完全取决于服务器返回什么。
第 5 步:第二小片,把记录写进服务器
POST /api/lunch-orders,
请求体是 {"name":"小王","dish":"牛肉面"}。
服务器写进 lunch_orders,再把新记录返回给页面。
POST 是“新建”。created_at 由服务器在写入时生成,
不需要你填。id 也是服务器自动给的。
第 6 步:第三小片,删除一条
DELETE /api/lunch-orders/{id},
{id} 替换成这条记录的编号。服务器删掉后返回成功,页面把这一条移除。
DELETE 是“删除”。id 就是 lunch_orders 里那一行的编号,
它保证删掉的是你点的那一条。
如果现在刷新页面,刚填的记录会消失吗?为什么?
不会。记录已经通过 POST 写进服务器的 lunch_orders;刷新时页面再用 GET 把它读回来。
第 7 步:出问题了
错误的处理
继续跟它说“按钮坏了,你修一下”。
它改了一个地方,另一个地方又坏了。你再解释一遍,它又改,又坏。
→ 一下午过去了,项目比刚才更烂
正确的处理
“把项目退回上一个存档,我们重新来。”
退回后,重新描述那一小片,这次说清楚一点。
→ 一分钟回到干净状态,损失为零
第 8 步:聊太久了,换会话
进度.md。
spec.md 和 进度.md,然后告诉我你理解的现状。
先不要改任何东西,等我确认。
第 9 步:收尾
什么时候该回头
如果它开始忘掉你说过的要求、同一个错纠正了三次、改一处坏一处, 或者你开始觉得“算了就这样吧”,不要继续硬推。 完整的危险信号清单和对应处理动作,见 第 10 章 · 危险信号清单。
三句话带走
- 简化版只有 1–7:先想清楚、定验收标准,然后每一小片走“做、跑、存档”,最后审查并交接。
- 每一片都必须由你亲手跑;AI 说“完成了”只代表它写完了,不代表你要的功能实现了。
- “刷新还在”不是页面魔法,是 POST 把数据写进了服务器,GET 又把它读了回来。
自测:三个问题
简化版第 4 步和第 5 步分别是什么?为什么不能合并?
第 4 步是亲手跑,第 5 步是存档。没验证就存档,会把一个可能是错的状态固化成“已知的好状态”; 验证后不存档,下一次改动就没有退路。
同事填完一条,刷新页面后记录还在。这说明哪一步真的发生了?
POST 请求把记录写进了服务器上的 lunch_orders;刷新时页面又用 GET 把它读了回来。
只改页面、不写服务器,刷新后一定会丢。
删除按钮点了没反应,第一件事应该做什么?
先退回上一个存档,回到已知的干净状态;再把这一片切小重做。 不要在一个已经坏掉的状态上继续打补丁。
动手 10 分钟
打开你正在做的小项目,做三件事:
- 写下 3 条你能亲手点一遍的验收标准;
- 只做其中最小的一条,做完停下来,刷新一次;
- 确认结果对了,再让 AI 存一次档。
然后把 3 条标准贴给 AI,让它逐条回答“能验证 / 不能验证”,并说明理由。
如果你看到 X,大概率是 Y
- 刷新后刚填的数据没了 → 数据只存在页面或浏览器里。先检查有没有向服务器 POST,以及 GET 有没有把记录读回来。
- 它一次改了十几个文件 → 这一片切大了。退回存档,切成一个能立刻验证的小片。
- 它说“完成了”,但你没亲手点过 → 验收根本没有发生。按清单自己跑一遍,再决定是否存档。
- 同一个错纠正了三次 → 对话已经进入变笨区。写交接文档,开新会话,不要继续解释。