> For AI agents: the complete documentation index is available at https://blog.glimverge.com/llms.txt, the full documentation bundle is available at https://blog.glimverge.com/llms-full.txt.

# 二十分钟写完的代码，你敢改一版吗

:::tip 读前一句
让 AI 替你做你已经会做的事，别让它替你做你正要学的事。
:::

![封面](https://img13.360buyimg.com/imagetools/jfs/t1/536503/25/9580/488483/6ac88a5eFd6f557e8/03e6600360933757.png)

先讲个我们都很熟的场景。

同事 A 用 AI 搓一个页面，二十分钟，能跑，样式干净，截图丢进群里，一片叫好。同事 B 手写，跟 CSS 较劲，跟一堆边界条件较劲，中间还撞上一个诡异的异步 bug，查到第二天下午才把它摁住，最后也跑起来了。两张截图放在一起，看不出谁花了多久。

只看做出来的东西，两边一样。

## 产出凭什么证明过能力

工程师这行靠另一条等式吃饭很久了。面试看你做过什么，晋升看你交付了什么，评审看代码写得怎么样。我们习惯拿产物证明自己行。AI 第一次让这条等式不好用。

省时间当然有用。我每天都在用，不少活从三天压到三小时。

旧等式失灵，是因为中间那段摩擦被抽走了。过去产物能证明能力，多半因为产物不可能白来，后面站着一段时间、一堆报错、一次次返工。证据在那段摩擦里，产物只是它留下的痕迹。

这里还要再往下走一步。摩擦不光是能力的证据，它还是能力长出来的地方。跟一个诡异的异步 bug 耗两天，耗完你身上会多一样东西，下次再碰到类似的坑，你能认出来。这样东西长在过程里，不长在结果里。摩擦没了，痕迹还在，你照样看得见东西做出来了，可你已经没有那两天可以长了。

所以 AI 抽走的不只是时间。它顺手把练手的场地也抽走了。

![摩擦被抽走](https://img10.360buyimg.com/imagetools/jfs/t1/537844/19/8972/210158/6ac88a5fF079f7d13/03e660036066f62d.png)

## 代价是第二天才到的

功能上线崩了，你打开文件，看着一段不是你写的代码。看得懂就能修，看不懂就只能再去问 AI，然后跟模型猜谜。昨晚的成就感，在你身上留不下什么。

一个人讲不清，还只是个人的麻烦。一个 PR 的作者自己讲不清，评审就容易走过场。

代码评审能成立，有一个没人说出口的前提。作者比评审的人更懂这段代码。评审者看的是方向、边界和副作用，他默认作者知道每一行为什么这么写。整个流程靠这个默认撑着。

AI 生成的代码把这个默认抽掉了。作者自己也只看过一遍输出，他没有比评审者多懂多少。这时候评审在审什么，谁也说不清。

还有一件更实际的事。AI 生成的 PR 往往偏大。八百行 diff 摆在你面前，你不可能逐行看完，只能挑几处扫一眼。人写的八百行，作者自己知道哪三十行是要紧的。AI 写的八百行，没人知道哪三十行要紧。

更难的地方在于，没人愿意在评审里说我看不懂。这句话等于承认这段代码不该由自己提交，也等于当着同事认一件不太体面的事。最常见的动作就变成了看一遍，结构清楚，命名规整，边界看着也像那么回事，点通过。AI 写的代码通常长得很好看，这一关过得格外容易。

时间一长，系统里积起一批没人真懂的代码。它们能跑，测试也过了，看板上一片绿，绿得很稳。直到某天它不能跑了，团队里没有一个人能站出来说，我知道它为什么这么写。

## 认知债和技术债不是同一种债

技术债我们都熟。还有一种债很少有人记账，叫**认知债**。代码不是你的，理解也不是你的，等它出问题那天，连本带利一起还。

两种债的利息长得不一样。技术债的利息是改起来慢。你每次碰到那段代码都要多花一点时间，痛是持续的，总有一天会被排进迭代。

认知债的利息不在平时。平时它完全不痛，代码跑得好好的，没人会去问它是怎么跑起来的。它只在出事的那个晚上一次性结清，方式是没人能响应。

这决定了它几乎不会被主动偿还。技术债天天痛，有人会去还。认知债不痛，出事才痛，而出事又常常能被解释成偶发的、外部的、上游的。一次线上故障过去，值班的人熬到凌晨，复盘会开完，改进项挂到下个季度，代码照原样躺着，债一分没少。

![两种债](https://img13.360buyimg.com/imagetools/jfs/t1/540655/14/5929/473031/6ac88a5fFb4552ab2/03e66003607bb336.png)

## 判断力寄生在底子上

我不是来劝大家别用 AI 的。用，是对的。AI 让你长出来的本事，是判断、描述和验收。这是真本事，跟旧标签"我会写代码"不是一回事。最容易犯的错，是拿新本事去填旧标签。

判断力涨了一点，工程底子未必一起涨。下次接到更硬的需求，手底下该懂的还是空的。

麻烦还在于，判断力是靠底子喂的。你能看出 AI 给的这段并发处理有问题，靠的是你自己踩过坑。底子停在那里，判断力早晚跟着停。它涨到某个位置就上不去了，而你还以为自己一直在进步。

这里面很阴的一点在于，玩和练从里面看常常是同一个感觉。vibecoding 一晚上很爽，手写两天也很爽，都看到东西跑起来了。当下很难分辨这一晚是在玩，还是在长能力。于是就会拿做出来的即时快感，去结变强了的长期账。

![判断力寄生在底子上](https://img10.360buyimg.com/imagetools/jfs/t1/527336/21/18000/163312/6ac88a5fFcef4e9ab/03e660036042729a.png)

## 讲得清楚，可能只是转述

我自己在这上面栽过。一段 AI 生成的逻辑，我读完觉得懂了，还能给同事讲一遍。讲到一半同事问，这里要是并发呢。我答不上来。我复述的是它的结论，我没想过它为什么成立。

AI 生成的代码特别容易制造这种错觉。它命名规整，结构清楚，读起来一路顺。读得顺和想得通是两回事，你很容易把前者当成后者。

讲得清楚和真的懂，中间隔着一道很窄但很硬的坎。就看你能不能回答一个问题，把它改成另一种写法会怎么样。

答得上来，说明你脑子里有它的模型。答不上来，你手里只有一段转述，讲得再流利也只是读得比较熟。

![读得很顺，影子里是空的](https://img13.360buyimg.com/imagetools/jfs/t1/538889/20/7154/228933/6ac88a5fF84e952e0/03e6600360da68bf.png)

## 怎么给自己量一下

我想了很久，有没有一把能用的尺子。很土，对我管用。

做完之后，不看结果，能不能说清楚它为什么成立。

落到日常是三个问题。

1. 这段代码明天出线上事故，我敢不敢在没有 AI 的情况下自己定位、自己修？
2. 能不能把它讲给一个完全不了解背景的同事，讲到对方能接着改？
3. 如果现在把 AI 关了，我还知道从哪下手吗？

三个都答能，那这次就是在长本事。有一个卡住，它多半只是一次很爽的消费。

想再狠一点，就把它改一版，看跑出来的结果是不是你预想的那样。这一下最准。

## 线划在哪里

有些页面、有些脚本，你就是要个产物，用完就扔，怎么方便怎么来。我不会因此觉得谁虚。工具没毛病，出问题的是目的和手段没对上。想练能力的人在买产物，想要产物的人却在自我感动地练能力。

我自己只划一条线。**让 AI 替你做你已经会做的事，别让它替你做你正要学的事。**

前半句是放开的。你已经会的活交给它，只是省时间，底子在你身上，丢不掉。后半句是底线。你还不会的那块，正是摩擦该发生的地方，你把它交出去，就什么都没留下。

AI 把写代码的时间还给你了。那段时间你拿去干什么，现在没人替你安排，也没人替你检查。

![那条线](https://img14.360buyimg.com/imagetools/jfs/t1/532427/34/15670/182493/6ac88a5fFe3594bc8/03e66003600629cc.png)
