我答不上自己代码的面试题
前几天我做了一件事:把自己项目里的一个文件丢给 AI,让它出一套技术面试题,考察"这个人是否真正写过、维护过这份代码"。
题出得很好。递进式的问题链,场景推演,评分标准,连"所有权验证"都有,专门鉴别你是不是真干过的那种题。
然后我试着答。
答不上来。
那个文件是我指挥 AI 写的。排序为什么在某一帧会反过来,某个非空断言依赖什么前提,注释掉某一行会在什么场景出现什么现象,我都说不清。
那一刻挺难受的。我意识到自己回不去了,回不去那种把所有技术细节装在脑子里的状态。现在我脑子里想的是怎么让 AI 产出更高效、更健壮的系统,而不是这个系统里某一行的细节。
这算退化吗?
想了几天,我觉得这里面混着一个假问题和一个真问题。
假问题是那套面试题本身。它考的是"你是否亲手写过这段代码",可我的角色早就不是实现者了,是指挥者。拿实现者的考卷考指挥者,就像要求建筑师背出钢筋的屈服强度参数。答不上来不丢人,考卷发错了。
但真问题藏在后面:有一层能力不能外包,就是判断 AI 错了没有。
危险的从来不是"不知道细节"。危险的是质量控制慢慢退化成"看起来能跑"。AI 在你的验收里从不出错,不是它完美了,是你已经看不出来了。判断力是一点点钝掉的,等你发现的时候,已经分不出它的对错。
所以要分清楚,什么可以丢,什么不能丢。
可以丢的:API 名称、框架语法、错误码、CSS 的某条规则。可检索,可现场推导,记住了也会过期。这些放心交给 AI。
不能丢的:这个断言依赖什么前提。这个输入如果是空的、重复的会怎样。用户主动取消和系统故障,该不该长一个样。这份数据的下一步,是谁在用。
你向 AI 提要求、识破它的错误答案,靠的全是这一层。
我给自己定了一个自测标准:给我一段 AI 写的代码,开卷,不限时,我能不能推出"注释掉这一行,什么场景下会出什么问题"。能,只是慢,那就没事。慢没关系,我又不需要在面试里表演推演。开卷也推不动,才是真要警惕的信号。
后来我翻自己项目的 CLAUDE.md,发现这层能力其实一直在长,只是换了个形态。里面那份"教训清单",race 不会取消输家、查询结果为空不等于数据不存在、这份数据的下一步是谁在用,每一条都是从 AI 的错里抓出来的。不是 API 细节,是思维陷阱。
抓 AI 的错,把坑抽象出来记下。这件事我其实一直在做,只是没把它当回事。
于是我把它做成了一个系统。三个文件,放在全局目录里,不放进任何项目,因为它们度量的是我这个人,不是某个项目:一份操作清单,一个陷阱库(只写陷阱,不写修法,修法会过期,陷阱不会),一本账。
账本上记三个数。这个季度我抓到了 AI 几个错。开卷推演一个模块要花多久。陷阱库长了几条。
其中第一个数最要命:如果一个季度抓到的错是零,最坏的解释不是 AI 变完美了,而是我已经停止验收了。真到那时候,还有个狠招:让一个 AI 在正常任务里故意埋两三个缺陷,不告诉我位置,我来验收。找不到,就说明我的验收只是走个流程。
为了让这套东西活下来,我把记账弄得不费一点劲:在 AI 工具的全局指令里定了三个口令。抓到错,随口说一句"记一笔",它自动落账;每两周说一句"深潜这个模块",它出题陪练;每季度说一句"体检",它把三个数算给我看。
系统能不能活,只取决于抓到错的那一刻,我肯不肯说那三个字。
整套东西我放在了 GitHub 上,带一键安装:https://github.com/atshelchin/ai-commander
那种把所有细节装在脑子里的状态,维持它很贵,贬值又很快。回不去,也不值得回去。
要守住的只有一样东西——当 AI 递给我一个"看起来很对"的方案时,心里那声"等等"。
目前它还很响。