开发者停用AI编程工具一个月后发现简单任务效率下降明显,但复杂问题的深度思考能力有所恢复。
几个月前,我决定在我在构建和维护的一个自由开源项目 LibreWeddingPlanner 中,不再接受 AI 的贡献。并不是因为这个项目收到了很多 AI 贡献——实际上我收到的所有贡献都是翻译和功能请求——而是我想避免未来的纷争,对 AI 持一个明确的反对立场。
不过,虽然我没有在自由开源项目中使用 AI,但我一直在工作中使用它。在我的工作场所,以及我的许多开发者朋友的工作场所,用 AI 来工作已经非常非常普遍了。毫不夸张地说,让我来谈谈这段经历,以及它是如何让我变得越来越蠢、越来越懒、越来越差的。
一个朋友告诉我,你应该试试,感觉太有掌控感了。一旦你开始使用,就停不下来了。那些原本需要花好几天完成的任务,几个小时就能搞定。不,我们说的不是可卡因,尽管在一定程度上,我把 AI 的使用视为一种成瘾。我开始在 VSCode 中启用增强型自动补全(或者是自动启用的?),然后下载和使用其他代码生成模型就接踵而至了。当我还是个孩子的时候,我记得我父母说过,要小心那些在学校门口用糖果引诱孩子的坏人,那些不是糖果,是毒品。当我二十几岁的时候,我会调侃他们说,是啊,现在他们确实在免费发放毒品对吧?好吧,现在我三十多岁了,我觉得他们可能真的在这么做。
一旦你开始使用 AI 编码工具,事情会很快失控。一开始,你让 AI 帮你实现一个函数,或者为某段代码写测试。如果你长期以来一直是 TDD 选手,你会倾向于先让它帮你写测试,这样你之后再去写代码。除非你不再自己写代码了,你只是让 AI 来做,而 TDD 的一半目的(不让测试因为你写代码的方式而产生偏差)就这样消失了。但你感觉速度太快了,以至于你开始不在乎了。
有一天,我看到 AI 代理在我提交的 commit 上联名签名,我赶紧去那个设置里退出了这个功能。就好像,我想假装这些代码是我自己写的。天哪。
如果事情到此为止,那还不算太糟糕,但大多数人类的大脑不是这样运作的。如果你喜欢某样东西,而且你能得到双倍的,你就会想要双倍。我开始把 Jira 票据的整个描述粘贴过去,让 AI 来实现它。太棒了!!太有掌控感了!!在一个对我来说相对较新的代码库上工作时,我开始失去对哪些变更才是真正需要完成任务的控制。我认为如果 AI——它读过了项目中的每一行代码——说这是需要的,那就是需要的。掌控感是一种幻觉。和我聊过这件事的其他人都同意,他们对自己推送到生产环境的代码并不 100% 了解。我打赌我们连 20% 都不到。太他妈的可怕了。
但事情也没有就此打住。当我有一个小任务时,我就交给 AI,然后大约 30 分钟后我就有一个 PR 了。那 30 分钟里我在干什么呢?切换焦点。很快我就意识到,我可以同时让不止一个 AI 代理在不同的工作任务上工作,在多个 git worktree 中。全功率!Token 拉满!我通过 ACLI(命令行接口)把 AI 代理连接到 Jira,只需要对它说"在一个独立的工作树里处理这个 Jira 票据"。然后它就会开始工作。我感到欣喜若狂。
当任务比较大的时候,你会觉得我应该自己在做对吧?才不是。我当然会让 AI 把它分解成更小的任务,然后去处理它们。AI 然后会给我一个超级有说服力的 PR,里面有一堆我不太理解的变更。我怎么可能去请求别人对这些变更做代码审查?我的同事们会怎么说?当他们(更有经验的,尤其对那个代码库更熟悉的)问我为什么这样做或那样做时,我该说什么?我要怎么承认这一切都是 AI 写的,而我不过是一个 AI 牧羊人?所以我强迫自己去理解代码。不是因为我想要理解代码库的架构,而是我想避免不知道自己他妈在干什么的耻辱。
到了某个时刻,我有太多的 AI 代理在同时工作,焦点切换对我来说已经不堪重负了。有些任务我本来 20 分钟就能轻松搞定,AI 代理花了 5 分钟,然后我花了 2 天来 review。因为还有太多其他事情要做。也许 AI 和计算机擅长上下文切换,但我不是。我精疲力竭。因为如果只是审批那些写得完美的 PR,那还好。但对于每个 PR,我都得去看代码、看测试、看代码风格、给出反馈、切换到别的事情、再回来、推动、看看有没有 PR 评论、CI 是否通过、等待,现在 linter 又报错了。你花了 2 天交付了一个本来可能只需要 1 小时专注就能完成的东西。根据我的个人经验,AI 带来的性能翻倍只是一种幻觉。不过,翻倍的挫折和精疲力竭是肯定的。
我认为我交给 AI 的任务中,没有一个是我能够原样合并的。当然,commit 和 PR 描述我也没有自己写(什么,这是 2024 年吗??),AI 在替我写,而且它确保 PR 里有一段 7 段的描述,解释它做了什么。我不再看那些描述了,比如,我告诉它要做什么,我假设它做了我说的。描述是写给别人的。因为总得有一个描述对吧?AI 在显得专业这件事上太他妈擅长了,以至于你放松了警惕,让它去。就是说我并不是真的认为代码是好的,但随着时间推移,你被说服了,你变懒了,你变得自满了。你停止质疑,开始接受一些你本来绝不会接受的代码,只因为你说不清楚它哪里不好。你已经失去了控制。大多数 AI 开发者会否认,但内心深处,他们知道这是真的。只是不想面对。
几个月过去了,有一天我意识到我已经好几个月没有自己写过一行代码了。我甚至都没有自己 commit 过。无数次我都在 AI 代理的聊天框里写"commit and push"。什么。鬼。这如果不是懒,我不知道什么叫懒。AI 也不是能够解决我给它的所有任务。连一半都不到。一次又一次,我不得不像带小孩一样盯着 AI 代理说"现在,应用这个模式"或者"在 spec 里,把测试设置放在 before 块里,把断言放在另一个块里"。就像我在指导一个初级工程师。别误会我,我喜欢指导,我做了很多年,而且我认为对导师和学员都有好处。但我不会去他妈的伺候一台机器,抱歉。
很多时候,我会看到 AI 写的代码质量明显下降了。不是说他一开始就很厉害,但我有一种"老兄,你以前做过这个,为什么这次做不出来了?"的感觉。所以我不得不再次 prompt 它,重新解释怎么做。或者链接一个包含我偏好的文件。好吧,我知道你的意思了,抱歉造成困惑。让我重新做一遍。然后它又会他妈的搞得一团糟,完全不是我请求的东西。它开始让我想起 Google 的那个策略——降低搜索结果的质量,迫使用户多次搜索,多看几次广告。如果这对 Google 有效,AI 公司怎么可能不这么做?特别是考虑到 AI 公司正处于财务不确定的时期,你真的认为他们不会这么做?别逗了。他们会这么做,而且还会做得更多。
还有些日子,我会看到 AI 代理已经卡了 30 分钟没有给我答案。我该怎么办?你觉得我接手任务自己做了吗?才不是。我拿起言语的鞭子,用权威的口吻,命令它给我真正的代码!AI 代理满脸歉意,20 秒就给了我 30 分钟都没给我的东西。我看了一眼 token 费用,它在什么都没干的情况下花了 30 美元。如果是我自己买单,我会完全暴怒。
一个月前,在我的一次 PR 代码审查中,一个同事说了一句类似的话:"你这个测试实际上并没有测试你在应用代码中修改的那个场景。"我 review 了一下,他是对的。但是……它是那么有说服力……我感到很羞耻。因为对于我来说,一个已经使用 TDD 超过 10 年的开发者,在这么基础的事情上犯错是一种耻辱。我意识到我已经失去了控制,而且情况不会变得更好。我觉得仅仅更努力、更挑剔地要求 AI、要求你付的钱对应的质量,是没有意义的!因为尽管你努力了,AI 最终还是会说服你,让你再次变得自满。
所以我决定停止使用 AI。即使这会让我丢掉工作。
当你拿过一个 AI 写的草稿 PR,然后不得不自己来处理时,你会意识到你之前对它在做什么一无所知到了什么程度。你开始质疑你是否需要这个和那个,最终丢弃一切,重新开始。我感觉手生了,就好像我好久没有自己写代码了。幸好,我偶尔还在我的 side project 里编程,所以努力是明显的,但也不算太糟糕。
我回归了 TDD,回到了只改 5 个文件的 PR。回到了只有两行、直奔主题的 PR 描述。回到了理解自己在做什么,回到了有信心地部署,回到了准备好接受详细的代码审查,因为我知道这些变更在做什么,我能为我写的每一行代码辩护。我回归了享受人类的代码审查(不是 AI 的,我仍然讨厌那些。甚至更讨厌那些粘贴 AI 审查假装是自己写的人),回归了从中学习。我开始询问架构决策,为什么事情是这样而不是那样。我可以问 AI,但我更愿意问我的同事。
我重新找回了编程的乐趣。而且我没有回头。我不会假装代码行数或 PR 数量是什么有效的指标,特别是当 AI 可以随意写得冗长来在每个指标上获胜的时候。但我可以说,我现在每天都在推动重大变更,合并 PR,并且在一天结束的时候,把工作完成了。出于这个原因,我不害怕被解雇。而且,我保持着我的大脑功能完好。
对毒品说不。某种程度上是个比喻,但也不完全是。第一步是意识到我们对 AI 的依赖程度有多深。一项你无法控制的技术,而且正在让你的雇主(如果你自己买单的话)花费一大笔钱。你会说但我的经理对我期望很高的,我现在怎么可能会表现下滑?我不能替你说话,但这种情况没有发生在我身上。我不认为我比两个月前表现下滑了。如果有的话,我现在更清楚自己在做什么,更有能力应对突发事件(因为嘿,是我写的代码搞砸的),而且我(字面意义上,就是我)在代码库上工作得越多,我就变得越厉害。这才是你的经理应该想要你拥有的。
而且当 AI 预算开始削减的时候——因为他们会削减的,如果还没有的话——你会为他们省下一笔钱。
如果你是一个像我一样的开发者,你作为开发者的经验才是让你得到那份工作的原因。如果你在市场上摸爬滚打了很多年,你就知道你的能力取决于你职业生涯中面临的难题有多难。如果你关掉你的大脑,放松地伺候 AI,你不会变得更好。你在失去价值,因为你能够交付的东西,你作为工程师的真正价值(不是一个 AI 牧羊人)在下降,因为你的大脑变得自满,把控制权交给了 AI。
醒醒。要勇敢。重新夺回控制权。