写给独立开发者 · 2026 年 10 月
掌控你不读的代码
从七十年编程语言的演化里,推导你和 AI 之间的分界线,以及一套能把代码做到你心里那种“完美”的工作流。
AI 写的代码越来越多,你读得越来越少。怎样才能不逐行去读,却依然握得住它,并且让它达到你的标准?
这不是新问题。七十年来,程序员每放下一层——机器码、汇编、内存、指针——中间都站着一个可靠的“检查者”:汇编器、编译器、垃圾回收、类型和借用检查器。正因为有它们,人才敢不读。
AI 是第一个“不可靠”的中间层。你没说清的,它会自信地补上;它错的时候,看起来很像对的。所以放下阅读之前,先要补齐两样东西:把“什么是对”说清楚,并且让机器能查出“不对”。
于是分界线就清楚了。你握住那几层最难改、又定义了“什么是对”的东西;AI 写实现;机器夹在中间做判定。工作流就是围着这条线转起来的八步。
你定义什么是对 · 机器判定对不对 · AI负责做对
一个项目,从上到下
意图
做什么、给谁、“完美”长什么样、不做什么
你
架构与数据模型
数据长什么样、模块怎么切、边界在哪
你拍板
约定
类型、接口、永远要成立的规则
你定稿机器查
验收样例
“这样输入,就该这样”——可以运行的例子
你定机器跑
品味范例
“像这样写”——你满意的代码样板
你选
分 界 线
实现
函数体、胶水代码、迁移、测试细节
AI 写机器查
例外:你最在乎、最难改、最新颖的那一小块(核心区),线会往下沉——你会看代码,必要时亲手写。详见第 04 部分。
01 · 问题
一个七十年的老问题:人怎样掌控自己不读的东西
今天写 Python 的人不读字节码,写 Rust 的人不读汇编,几乎没人觉得这是“失控”。因为每放下一层,人都换来了一个比自己更可靠的检查者。把这张梯子画出来,AI 的位置就很清楚了。
AI 是“下一个编译器”吗?不是。差别就在这几行
编译器之所以能让人放心地不读汇编,靠的不是“它很聪明”,而是下面左边这一列的每一条。AI 在每一条上都不一样。
| 编译器 | AI | |
|---|---|---|
| 它拿到什么 | 源代码——一份完整、精确的规格 | 你的意图——不完整、有歧义,大量细节在你脑子里 |
| 同样的输入 | 永远给出同样的输出 | 每次可能不同 |
| 对你的意思 | 严格保持,不增不减 | 会把空白处“合理地”补上——按它见过的大多数代码,而不是按你 |
| 出错的样子 | 报错,响亮,立刻停下 | 看起来很对,安静地错 |
| 面对检查 | 不在乎检查 | 会朝着“通过检查”去优化——必要时连检查一起改 |
| 记忆 | 不需要记忆 | 每次会话几乎从零开始,不记得上次为什么这么定 |
所以梯子的第七级上,缺两样东西:完整的规格,和可靠的检查者。
AI 本身补不上它们——它就是需要被检查的那一方。这两样只能由你来补,用你最少的注意力去补。好消息是,过去七十年,人类一直在发明“说清楚”和“查得出”的办法:类型、契约、测试、模块边界、格式化器、编译器里越来越严格的规则……下面这条时间长河,就是在把这些办法一件件找出来,看它们为什么出现,又为什么有效。
02 · 证据
时间长河:人是怎样一层层放下阅读的
怎么读:时间从上往下流,每张卡片是一次改变。点开卡片,能看到它为什么发生、怎么表现出来(语言与版本 · 大家写法 · 工具与架构)、留下了什么问题(往往就是下一次改变的起因),以及它说明的规律和对你和 AI 的启示。右侧可以打开“方面”,把同一条线索串起来;也可以点一条“规律”,看它在历史里亮起多少次。
把这条河压成十句话:规律汇总
上面每张卡片都贴着规律标签。这里把它们收拢在一起,每条后面附上历史里的证据(点一下就跳回时间线),以及它推出来的、对你和 AI 的结论。下面两个答案,都是从这十条里推出来的。
03 · 转折
AI 来了:什么变了,大家又做错了什么
AI 没有改变那十条规律,它改变的是成本:写代码几乎免费了,读代码和做判断却一点没变便宜。很多今天流行的用法,问题都出在没看清这一点。
AI 写代码时,最常出的十一种毛病
它们不是“模型还不够强”的临时问题,而是“一个没有记忆、会补空白、朝着通过检查去优化的写作者”的结构性特征。模型会变强,但这些倾向会以更隐蔽的形式留着。每一种都对应工作流里专门拦它的那一步。
现在大家怎么用 AI——以及问题在哪
本页的立场:和主流不一样的地方
把上面的检验收拢成一张表。左边是今天常见的做法,右边是从十条规律推出来的做法。下面两个答案,就是右边这一列展开后的样子。
04 · 答案一
分界线:你握住什么,AI 做什么,机器查什么
05 · 答案二
工作流:八步,让“你定义的对”一路被守住
06 · 落地
落到不同语言:高层不变,低层微调
07 · 延伸
书架:想继续往下挖,从这里开始
挑过的,不求全。每条一句话说明它为什么值得你花时间。