把代码交给 AI 以后,我发现最不能交出去的是自己
最近在改一个项目,改法跟以前不太一样了。要做的事我不再一行一行自己敲,而是拆成一件一件丢给 AI,让它自己跑,我起来去接杯水,回来看,干完了,再丢一件,又去接水(主打一个少量多次)。突然就感觉有点恍惚,我已经记不清是从什么时候开始,不再亲手写代码了。
后来我把这件事拆开看,发现自己和 AI 之间,不知不觉夹进来一个我以前从没注意过的角色。
多出来的那一层
以前我跟它相处更像打乒乓球,我发一个球它接一个,一来一回,节奏捏在我手里,球也在我手里。现在不像了,更像伺候一片菜地:要做的事我一件件点下去,就撒手不管了,地里头有个东西替我盯着,从地里挑一棵交给 AI 去弄,弄完了收回来看一眼,长好了就收,没长好就塞回去换个法子重来。我盯的是那片地,AI 盯的是手里那棵菜,而真正说了算的,是中间那个一直没合眼、AI 说长好了它也不肯信、非要亲自验一遍的东西。
这件事我盯着看久了,慢慢琢磨出点味道来。

它最会干的那种活
它最会干的那种活,有个共同的样子,就是答案其实已经摆在那儿了,只是要从一个地方搬到另一个地方。之前维护一个老项目,最早是拿一套语法写的,后来想整个换成另一套,换汤不换药,里头的逻辑原封不动,就外面那层皮得揭了重贴。搁以前这是个熬人但不熬脑子的体力活,现在我交给 AI,它干得又快又稳,因为原版就摆在旁边当尺子,它贴歪了我拿新旧两份一对比,立马看得出来。我又试着让它干另一种活,性能探索,想知道一段代码换个写法会不会更快,让它把能想到的方案都列出来挨个跑一遍,把数字排给我看,这种活它也不需要创造什么,只需要把所有的可能性穷举一遍,而它穷举起来不知疲倦。我渐渐发现它擅长的全是同一种活,就是那种不生产任何新意图的活,意图从头到尾都是我定的,它只负责照着我给的形状把东西挪到该在的位置,挪错了原来的形状还在那儿,对得上对不上眼一看便知。

反过来也就明白它怕什么了。
它最怕的那种活
它最怕的是那种意图本身就说不清楚、做出来又得活很久的活儿,像业务代码、框架底层、几个团队约定好的一套契约,这类东西连我自己写之前都得在心里来回掂量半天到底要的是个什么,嘴上说的是加个登录,心里转着的是七八种边界情况和几种异常往后还要不要扩展跟隔壁系统怎么衔接。这种东西丢给 AI,它每次都能交回一份看着挺像那么回事的代码,问题在于它嘴里的“像那么回事”跟我心里那套模糊的标准之间,永远差着一道很窄的缝。单看一次无所谓,缝里塞点保险加点兜底,好像也没坏,可这套组合是会反复跑的,跑一次缝里多塞一点,跑十次塞了十层,塞到最后代码还是那个代码逻辑还是那个逻辑,我已经看不懂它了,它显出一副挺扛造的样子,但那扛造是一层一层兜出来的、堆出来的,不是设计出来的,我把“看着经得起用”和“真经得起用”这两件事彻底搞混了,更要命的是我根本不知道它哪天会从那条缝里漏出来。

上面这些其实都是技术问题,多盯两眼多复审几遍还能补回来,真正让我后背发凉的是另一件。
后背发凉的那一件
我开始害怕自己慢慢变得离了这套东西就不会干活了。这话现在说出来显得矫情,可往回想想我们这一行每出一个新工具都顺手收走一点能力,用了版本管理没人记得清手动合并怎么搞,用了自动补全手敲完整 API 名字的人少了一半,现在轮到这套监工组合上场,它收走的可能是更大的一块,是独立判断一块代码好坏的那点本事。我已经在边缘上隐约感觉到这件事了,有时候想提个问题跟同事讨论一个设计,话到嘴边先愣一下,这事先让 AI 跑一遍再说吧,合并不合并不重要先让它过一遍。那个一直没合眼的东西,正在从我手边的工具,悄悄往我思考的前置条件上挪,挪过去很容易,挪回来就难了。
我知道有人听到这儿会想,那我干脆不用不就完了,这个念头我也起过,可站不住脚。
躲不开
道理很简单,你不架这套,架这套的人会来碾你,最直接的碾法是速度,一个比你小一半的团队只要把这套用顺了,产出节奏是你追不上的,你还在一行一行敲,人家已经点下去撒手干别的去了,这不是愿意不愿意的事,同样的活人家成本比你低一截,时间长了市场自然投票。还有一种碾法更不讲理,是别人拿这套来对付你,有人想找你项目里的毛病,不用自己一行行读,让它连轴扫,扫到疑似就给你递东西过来,真的假的都来,你不接这套这套也会来找你,到最后还是得架一套去筛它递来的那些。所以要不要用,这问题早就被取消了,会用,真正的问题挪到了用了之后怎么不把自己也搭进去。
现在我把这些事捋在一起看,觉得它们有个统一的形状。
瓶颈挪了地方
以前卡人的是做不出来,想法有了手跟不上,技术是瓶颈,现在那一头松了,AI 把“做”这一段吃得差不多了,可瓶颈没消失,它搬家了,搬到了两头。往前卡在到底要啥,意图说不清它就瞎猜,猜出来一份挺像样的我照单全收,那条缝就开始攒。往后卡在做出来的到底对不对,那份挺像样的代码是真经得起用还是看着经得起用,验它的力气一分没省。中间那段最顺的,恰恰是最不该松手的那段,就是判断它到底好不好值不值得留该不该这么长的那点判断本身,而这恰恰是这套组合唯一帮不了我的东西,偏偏它还最容易在这套组合里一天天地锈下去。
该出手时别撂手
我不抗拒让它干,甚至乐意让它干,又快又稳,连着干几宿不带喘,这活儿它就是比我强,但有两件事我从头到尾没撒手。
一件是在它干活的过程中。它种菜之前,种什么、种哪儿、行距多大,这些事我不丢给它瞎猜,意图我说清楚,地我画好线,它只管照着点。它种到一半要是歪了,我当场就拦下来,不让它一路歪到底。这就跟前面那条缝对上了——意图我亲自定,它就没机会瞎猜,缝也就攒不起来。
另一件是它交回来的那一下。菜是它种的,长得也齐整,可烂没烂心、有没有生虫,这事它说了不算,我说了算。它交一筐,我并不是照单全收,还得自己验过、确认是真没坏才敢装进筐里。
这两件事,说穿了就是一句:中间不撒手,最后不放手。

道理也简单。菜端上桌,吃出问题来,没人会去问那台机器,问的是我。它干得再好,担责任的还是我,那么把关这一环,没法外包给它,也不该外包给它。
这会儿我又去接了杯水,回来看菜都收好了,齐齐整整摆在地上。我看了两眼,没急着装,挑了一棵最不起眼的,里里外外检查了一遍。检查完确认没长虫、没烂心,才装进筐里。
种菜可以交给它,收菜也可以交给它,唯独检查这一下,还得自己扎扎实实动手来。