一个月不用人工智能
一位开发者反思在 FOSS 项目 LibreWeddingPlanner 中拒绝 AI 贡献,却因工作用 AI 编程而变笨变懒,并称性能倍增只是幻觉。
中文
复制
几个月前,我决定不再接受 AI 向我正在开发和维护的 FOSS 项目 LibreWeddingPlanner 提交贡献。倒不是说这个项目收到了很多 AI 贡献——实际上我收到的贡献全是翻译和功能请求——但我希望避免将来出现麻烦,也想表明反对 AI 的立场。
然而,尽管我在 FOSS 贡献中不使用 AI,工作中却一直在用。在我的公司,以及我很多开发者朋友的公司,用 AI 干活非常非常普遍。带着几分羞愧,我来讲讲这段经历,以及它如何让我变得更笨、更懒、成为一个更差的开发者。
甜蜜的开端
一个朋友告诉我,嘿,你应该试试,你会觉得自己特别强大。一旦开始用就停不下来。以前要花几天的任务,现在几个小时就能搞定。 不,我们说的不是可卡因,尽管在某种程度上,我认为使用 AI 是一种成瘾。我先是启用了 vscode 里的增强自动补全(还是它自动开启的?),然后下载并使用其他代码生成模型也就顺理成章了。小时候,我记得父母说,小心学校门口给你糖的坏人,那不是糖,是毒品。二十多岁时,我会开玩笑说,是啊,现在他们好像直接送毒品了哈? 到了三十多岁,我觉得他们可能真的在送。
一旦开始使用 AI 编程代理,事情很快就会失控。起初,你让 AI 帮你实现一个函数,或者为某段代码写测试。如果你长期践行 TDD,你会倾向于先让它写测试,之后再写代码。只不过你不再自己写代码了,你直接让 AI 来写,而 TDD 的一半意义(避免测试被你实现代码的方式所影响)也就没了。但你觉得自己速度飞快,于是开始不在乎了。
有一天,我看到代理在给我提交的 commit 加共同署名,我赶紧去设置里关掉了这个选项。就像,我想假装代码是我自己写的。天哪。
失控
如果事情到此为止,那还不算太糟,但大多数人的大脑不是这么运作的。你喜欢某样东西,而你能拿到两倍的量,你就一定会拿。我开始把 Jira 工单的完整描述粘进去,让 AI 替我实现。爽!!太强了!!在一个对我来说相对陌生的代码库里干活,我逐渐搞不清哪些改动是完成任务真正需要的。我想,如果 AI 读遍了项目里的每一行代码,说这是必要的,那就这样吧。控制只是一种幻觉。和我聊过这件事的人也承认,他们并不百分之百清楚自己推到生产环境的代码到底在做什么。我敢打赌,我们连 20% 都不到。真他妈吓人。
但事情也没停在这里。遇到小任务,我丢给 AI,大约 30 分钟就拿到一个 PR。那 30 分钟我在干什么?切换注意力。很快我意识到,我可以同时让不止一个、而是多个 agent 在多个 git worktree 里处理不同任务。全力输出!Tokenmaxxing!我用 ACLI(命令行界面)把 agent 接到 Jira 上,直接对它们说“在单独的 worktree 里处理这个 jira 工单”。它就开始干了。我兴奋得不行。
任务不那么小的时候,你会以为我在自己动手吧?才不。我当然会让 AI 把它拆成更小的任务,然后逐个处理。AI 随后会给我一个极具说服力的 PR,里面一堆我不太看得懂的改动。我到底要怎么开口请人 review 这些改动?同事们会怎么说?当他们(更有经验,尤其是对这个代码库更熟)问我为什么这么做、为什么那么做时,我要怎么回答?我要怎么承认这全是 AI 干的,我不过是个放 AI 的牧羊人?于是我逼自己去读懂代码。不是我想搞懂这个代码库的架构,我只是想避免那种不知道自己他妈在干什么的羞辱。
到某个阶段,我同时跑着太多 AI agent,注意力切换的负担已经超出我能承受的范围。有些任务我本来 20 分钟就能轻松做完,交给 AI agent 花了 5 分钟,然后我 review 花了两天。因为还有太多别的事。也许 AI 和计算机擅长切换上下文,但我不擅长。我精疲力尽。因为如果只是批准写得完美无缺的 PR,那还好。但每个 PR 我都得看代码、看测试、看风格,给反馈,切去做别的事,再切回来,push,看看有没有 PR 评论,CI 过没过,等一等,现在 linter 又报错了。本来专注做一小时就能交付的东西,你要花两天。以我的亲身经历,AI 带来的性能倍增只是幻觉。挫败感和疲惫感的倍增倒是板上钉钉。
我觉得,我交给 AI 的任务,没有一个是能直接合并的。当然,commit 和 PR 描述不是我写的(都什么年代了,2024 年吗?),是 AI 替我写的,而且它一定会写出一段七段式的描述,解释自己干了什么。那些描述我早就不看了——我让它做什么,我就当它做了。描述是给别人看的。毕竟总得有份描述,对吧?AI 在听起来专业这件事上实在太强了,强到你放松下来,随它去。并不是我真的觉得代码写得好,而是时间一长你就被说服了,你变懒了,你开始将就。你不再质疑,开始接受一些你以前绝不会接受的代码,只因为你说不清它哪里不好。你已经失去了控制。大多数 AI 开发者会否认这一点,但内心深处,他们知道这是真的。只是不想面对。
几个月过去了,有一天我意识到,自己已经好几个月没写过一行代码。连 commit 都不是我自己提交的。无数次,我在 AI agent 的对话框里打下“commit and push”。搞。什么。鬼。如果这都不算懒,我不知道什么算。AI 也并不能解决我交给它的所有任务。连一半都不到。一次又一次,我得像带小孩一样盯着 AI agent,说“现在,套用这个模式”,或者“在规格里,把测试的 setup 单独放到一个 before 块里,断言放到另一个块里”。就像我在带一个初级工程师。别误会,我喜欢带人,带了很多年,我也觉得这对带的人和被带的人都有好处。但我他妈不想带一台机器,抱歉。
很多时候,我会发现 AI 写的代码质量明显下降。不是说它一开始写得多好,而是我会有种感觉:“哥们,你以前干过这个,怎么现在又不会了?”于是我只好再提示它一遍,重新解释该怎么做。或者给它链接一个记录我偏好的文件。好,我明白你的意思了,抱歉搞混了。我重新做一遍。然后它又搞出一团乱麻,根本不是我要的东西。这开始让我想起 Google 的那套策略:把搜索结果的质量降下来,逼用户多搜几次,多看几倍的广告。如果这招对 Google 管用,对 AI 怎么会不管用?尤其是在 AI 公司正经历的这段财务前景不明的时期,你真觉得它们不会这么干?得了吧。它们会这么干,而且不止于此。
还有的时候,我会发现某个 agent 卡了 30 分钟都没给我答案。怎么办?你以为我会自己接手把活干完?绝对不会。我抡起语言的鞭子,摆出一副专横的架势,命令它把我的代码交出来!AI agent 连连道歉,20 秒就给出了它 30 分钟都没给的东西。我看了看 token 账单,它白白烧掉了 30 美元的 token。要是账单是我自己付的,我非得气炸不可。
重新掌控
一个月前,在一次针对我的 PR 的代码评审中,一位同事说了大致这样的话:“你写的这个测试根本没有覆盖到你在应用代码里改动的那个场景。”我复查了一遍,他说得对。可是……它当时太有说服力了……我感到羞愧。因为对我这样一个用了 10 多年 TDD 的开发者来说,在这么基础的事情上翻车,多少算是一种羞辱。我意识到自己已经失去了掌控,而且情况只会越来越糟。我觉得,光靠更努力、对 AI 更挑剔、要求它交出你付钱买的质量,是没用的。因为不管你怎么努力,AI 最终还是会说服你,让你再次变得得过且过。
所以我决定不再用 AI。哪怕这会让我丢掉工作。
当你接手一个 AI 写的草稿 PR、不得不自己动手时,你才会意识到自己有多不清楚它到底在干什么。你开始质疑这个那个到底需不需要,最后把一切推翻重来。我感觉自己手生了,好像很久没亲手写过代码。好在我在副业项目里一直断断续续地写,所以虽然吃力,但还不算太糟。
我回到了 TDD,回到了只改 5 个文件的 PR,回到了两行、直击要点的 PR 描述。我回到了清楚自己在做什么的状态,回到了能放心部署的状态,回到了随时准备好迎接详细代码评审的状态,因为我知道这些改动在做什么,也能为每一行代码说出理由。我回到了享受人类代码评审的状态(不是 AI 评审,那些我照样讨厌,更讨厌那些把 AI 评审粘过来冒充自己意见的人),并从中学习。我开始问架构决策的问题,问为什么事情是这样。我本可以去问 AI,但我更愿意问我的同事。
我重新找回了编程的乐趣,而且再也没有回头。我不想假装代码行数或 PR 数量是什么靠谱的指标,尤其当 AI 为了在每个指标上取胜,可以想写多啰嗦就多啰嗦的时候。但我可以说,我每天都在提交重要的改动,PR 不断被合并,一天下来,活儿是真的干完了。也正因如此,我不怕被裁。而且,我的脑子还保持着运转。
一点建议
对毒品说不。算是个比喻,但也不完全是。第一步是意识到你对 AI 有多依赖。这是一项你无法掌控的技术,而且它让你的雇主(如果不是你)花掉一大笔钱。你会说 可我的经理指望我表现出高绩效,我现在怎么才能表现得不那么出色? 我没法替你回答,但这事没发生在我身上。我不觉得自己比两个月前表现更差。真要说的话,我现在更清楚自己在做什么,出了事故也更有能力应对(因为嘿,搞砸的那段代码是我写的),而且我(字面意义上的我)在代码库上花的时间越多,我就越是更好的开发者。这才是你的经理应该期望你做到的事。
等 AI 预算开始被砍的时候,你还能替他们省点钱——这一天会来的,如果还没来的话。
如果你和我一样是个开发者,当初让你拿到这份工作的,正是你作为开发者的经验。如果你在市场上混了几年,你就知道,你的水平取决于你职业生涯中面对过的问题有多难。如果你关掉大脑,放松下来给 AI 当保姆,你不会变得更强。你在贬值,因为随着你的大脑变得懈怠、把控制权交给 AI,你 能交付的东西、你作为工程师(而不是 AI 牧羊人)的真正价值,都在下降。
醒醒。勇敢一点。把控制权拿回来。