上周让 Claude Code 做一个登录页。我说了一句”做个登录页,前后端都要”,然后就出门吃饭了。回来一看,前端改了,路由改了,状态管理也改了,连数据库 schema 都被动了。测试没有,鉴权逻辑里还埋着一个 bug。我花了两个小时审代码,又花了一个小时改回来。比自己写还慢。那天之后我想明白一件事:问题不在 AI,在我把活派错了。我现在不”让 AI 帮我写代码”。我让它替我交付功能。这两件事完全不一样。下面是我现在的做法。
不要一次给 AI 一个”用户中心”。要把它切成一片一片:第一片:前端按钮、后端接口、数据库存一行记录,从上到下打通。哪怕功能很简单,比如就是登录返回一个成功。第二片:加密码校验。第三片:加错误提示。第四片:加记住登录状态。每一片都是从前端走到数据库的一条完整路径。AI 拿到一片,自己就能闭环。我以前的习惯是横着切——前端任务、后端任务、数据库任务,分开派。这套是给人用的,方便人分工合作。给 AI 不行。AI 没办法跨任务保持上下文,它写前端的时候,不知道后端那个接口是什么形状。竖着切,每一片都小且完整。这是 AI 能消化的最小单位。
三、让它先写测试,再写代码
这一步是我现在最依赖的。流程是这样:AI 接到一片任务先根据需求写测试。这些测试一开始全是红的然后写代码,目标就一个:让测试变绿绿了,自动提交为什么有效?因为 AI 没有”我觉得差不多了”这个状态。它会脑补自己干完了。测试就是它的红绿灯,绿了才算完成。我自己定了一条规矩:没有测试的代码,AI 不能 commit。一开始觉得这条规矩很麻烦,写测试也要时间。后来发现返工率降了一大截。原来一晚上能交付的活,现在能交付两三倍。因为不用反复回头改。
这一条最反直觉。我们以前写代码追求”巧”。一个问题一个写法,看谁的方案更聪明。给 AI 用,要反过来——你要的是一致。如果 A 模块这么写,B 模块也这么写,C 模块还是这么写,那 AI 看了 A 和 B,就能猜到 C 该怎么写。它的成功率会高得吓人。我现在写代码会刻意保持一致:文件目录结构一样命名习惯一样错误处理方式一样接口返回格式一样不是为了好看,是为了让 AI 抄作业更容易。这一条还有一个隐含的意思——你自己的基本功不能丢。AI 抄作业的前提,是你先写出一份好的 A 文件给它抄。架构怎么搭、模块怎么分、抽象在哪一层,这些事 AI 还干不了,你得自己来。最后写到这里我自己梳理了一下,这套打法其实就是把”写代码的我”换成了”管生产线的我”。以前我是写每一行代码的人。现在我写的是规则、边界、测试标准。代码 AI 来写。不会一夜之间切过去。我自己花了三个月,才让一个项目真的跑起来。中间放弃过两次,觉得还不如自己写。撑过去之后才有复利——你睡觉的时候,活在做。下一篇想写一下,一份让 AI 一次跑通的 Issue 长什么样。我会把自己的模板贴出来。如果你也在试这条路,欢迎交流。