
你早已是肉代理
作者用一场 20 分钟的现场演示证明:真正的瓶颈不是 AI 能力,而是工程师不肯交出控制权、不肯追问「什么才重要」。
我对一个未来感到兴奋,但我猜想,这个未来对许多老朋友和我所爱的某些人会非常残酷。那项让我比以往任何时候都更成功的技术,正在瓦解他们曾经赖以过上舒适生活的那套安排。我可以告诉他们,利用好手头现有的跑道。我可以鼓励他们更主动一些。但我没法诚实地保证,每个人都会发现自己在接下来的人生里过得开心。
“可我想用我的脑子啊,老兄!”
昨晚和一位老朋友聚了聚,他在一家成功的大型创业公司做资深工程师,公司有几百名工程师。
我这位朋友一直很绝望,用他的话说,他“已经不知道该怎么干自己的活了”。每次我们聊到这个话题,我都会建议他,大意是:“你干嘛不直接问 Claude 告诉你怎么干你的活?”
而他的回应,每次也都是大意如此:“不,你不懂。”
昨晚我们来回绕来绕去,最后我实在受不了了,就说:“哥们,让我看看终端。”
我们走到他的工作电脑前。他打开了几十个浏览器标签页和半打终端,每个终端里都跑着一个 Claude 实例。我说了句大意是,行吧,看起来你是在用这玩意儿干这玩意儿嘛!
“是啊,可你不明白。我觉得我什么事都推进不了,”他回答。
“可我不明白你怎么可能什么都推进不了。让我开个新的 Claude。你介意吗?”我就开了。我做的第一件事是切到 Fable,因为他用的是 Opus,所以我给出的第一条具体建议就是:编排工作时永远用 Fable,因为它比 Opus 聪明一个数量级。
“可我不想浪费我的 token 预算。”
我有点恼火,训了他一句:“不,老兄,这不是浪费预算。Opus 很烂。就。用。Fable。呃,你是可以用 Fable 的吧?”
“嗯,我觉得是这样。”
“太好了,那就所有事都用 Fable 吧。它很聪明,不会让你失望的,”我跟他说。
“但我想用自己的脑子啊,兄弟!”
这个朋友相当聪明。他也是那种对生成式 AI 给人类带来的影响感到绝望的朋友。
“兄弟,去你的脑子吧。你跟我说了六个月你不知道怎么做你的工作。Fable 比你聪明。它比我聪明,比我们所有人都聪明,我不是在开玩笑。”
“它是个机器!我拒绝相信它更聪明……”他抗议道。
“哦,它是个随机鹦鹉??”我打断他。
他皱了下眉,“不,我不是那个意思。我是说它没有灵魂。”
我们争论了一会儿,他跟我说他想保持掌控,我跟他说他得把那玩意儿放下。
他有点沮丧,但看着我尝试演示:与其下达细碎的任务,不如用提示词直接要结果。我在主单体目录里输入:
这代码就是一坨屎,架构全乱套了。
我按下回车,我朋友开始大笑。他不敢相信。
“这就是你的提示词???”
我说,“嗯,我对你的系统一无所知啊兄弟,总得从某个地方开始吧,对吧?”
我们俩都笑了,Fable 开始干活,试着弄明白我的提示词。显然这个系统里有很多上下文,所以它有很多可依据的东西。失败清单里包括大量缺失的测试覆盖、几千行代码的上帝对象、一大堆明显的死代码,换句话说,很多构成真实技术债的问题。
对像我这样的人来说,这简直是多到令人瞠目结舌的唾手可得的果实。
为了证明一个观点,我按下回车接受 Fable 的第一个建议。几分钟后我又按下回车,然后再一次,选择删除一些死代码。我们开始做一个 PR。我朋友让我确保把它设为草稿。行吧,随便。
Fable 干它的活。我朋友查看 diff。那不过是一段死代码及其相关单元测试的简单删除。我想继续推进,但我朋友求我停下。
“你不明白,Obie,我不能像你那样做,兄弟。”
我让他解释为什么不能。
他解释说,他有老板和队友,他不能就那么随便改,他必须提出计划并执行它们。
“好啊,那就让 Claude 给你做计划,”我回敬道。
“我已经做过了!”
我朋友接着点开 Confluence,给我看了一大堆明显是机器生成的计划,讨论着为了清理这个系统需要做的架构变更。
搞什么鬼,他已经有计划了!我大声纳闷他为什么不直接执行它们,并问他是不是需要老板签字批准。
“不,他根本不看那玩意儿。”
什么鬼?!?
“我得和团队协作。他们会看。”
我有点难以置信,就这一点追问他。“你的团队必须看那个?”
我不相信他的团队会看所有那些东西,绝对不信。真要说的话,他们只会让 Claude 替他们看。
他接着说,“嗯,是啊,然后我还得把这一切都变成 Jira 里的 epic 和 story。”
顺便说一句,读到这里的一些人完全明白在公司里使用 Jira 和 Confluence 意味着什么。简而言之,这意味着他们并不怎么在乎开发者生产力高于一切。但在智能无处不在、随取随用的时代,这已经不像过去那样是个诅咒了,至少我不再这么认为。
“来,兄弟,你的 Claude 通过 MCP 连到 Jira 了吧?”我转回终端,输入以下内容:
我们还不能推送这些工作,先把它作为 epic 和 story 放进 Jira 吧
Claude 立刻向 Jira 发布了 5 个 epic,并表示即将开始创建它们下面的相关工单。
我朋友吓坏了,按下 ESC 来阻止。
好吧。我想我今晚的演示就到此为止了。
我追问他,为什么不干脆每天试着做点渐进式的改进。他的回答是:因为没人在思考。
我被这答非所问弄得一头雾水。
他接着抱怨说,所有人都任由 Claude 替自己思考,就像我刚才那样。他说他不想让自己的脑子烂掉,整天就坐在那儿按回车。
啊。我好像开始有点明白了,也许吧。
“可那为什么一点进展都没有呢?”我提出疑问。
“我不知道,就好像现在没人对任何事动脑子了。”
我这哥们儿拿着高薪,而且(看样子)管理层对他的期望还很低,结果他却在抱怨没法工作?更糟的是,他还为此抑郁,对自己的职业前景焦虑不安。按理说,我这位朋友至少比那些级别更低的同事要聪明些、能干些吧(不然他也当不上 staff engineer),可他居然落到这种状态?我把他当亲兄弟一样在乎。我既困惑,又担忧。
我说:“哥们儿你到底怎么回事,把活儿干完就行了,怎么干完的不重要。随便做点什么,都比每天原地空转强。”
他难道不知道这事最后会怎么收场吗?拿着高薪却对公司毫无价值贡献的人,最终会变成没有薪水的人。
“可我不想只当一个肉身代理!”他抗议道。
哈!
我朋友早就是个肉身代理了。在这词流行之前他就是了。我知道。我相当肯定他自己也知道,只是不愿意承认罢了。我摇了摇头。
“兄弟,你就该整天按回车,然后陪孩子玩去,让 Claude 干它的活儿。Fable 聪明得很,你可以信它。”
他没在听。他觉得我的观点有偏见。确实有偏见,是被成功带偏的。他指责我没有逐行读自己产出的每一行代码。他说得对,而这是我引以为傲的事。
在我的工作中,我主要负责的系统是全新的、设计良好、测试完善的 Ruby on Rails 内部系统。我不需要逐行阅读 Claude 生成的代码。过去几个月里,我甚至不再监督使用 Claude Code 编写代码的过程,因为我有自主代理来编写 75-80% 的代码。只有在我想添加重要的新功能或进行大规模架构调整时,我才会深入细节。
我朋友的情况显然不同。他负责生产系统中涉及客户支付的部分。所以我告诉他,他应该逐行阅读 Claude Code 所做的每一处更改。为什么不呢?
经过激烈的讨论,很明显他不信任 Claude,因为他不想信任它。总有一天,他必须给这种恐惧一个准确的名称。他害怕被淘汰。
问题是,抱着这种态度,他已经过时了。可能 80% 以上从事软件开发的人也是如此。他们的职业生涯已经搁浅,只是他们还没有意识到而已。
挫败感一触即发
巧合的是,下面这条帖子昨天火了,在我写这段话时已有超过 150 万次浏览和大量互动。显然,它触动了这个行业的一根神经。
不用点开,这是条短帖,所以不妨在预览之外再多引用一点,以提供上下文。
……一切都是 Claude Code 做的。我团队里没人喜欢这样。他们被迫尽可能多地交付。我已经多次从高层管理那里听到,推送代码不是瓶颈,那我们为什么还这么慢?人们每天工作 12 到 13 个小时,就只是为了按回车。没人在读任何东西。公司里的人自己什么都不做。每个人,真的是每个人,从 L1 到 L7 的工程师,都在做同样的事。跟 Claude 聊。没有任何胜利感。没人在解决 bug。实际上,已经没人在思考了。一切都由 LLM 完成。这太吞噬灵魂了。说实话,如果我们至少有时间去看看代码、看看事情往哪儿走,我不会介意。但没有,目标就只是交付。不管发生什么。
那条帖子和其中的情绪也触动了我,但原因恐怕和大多数人不一样。在超过三十年的职业生涯中,我从来都不是一个“人肉代理”。即便是在最初五年——那时我记忆里大多是冒名顶替综合征,以及根本不知道自己他妈在干什么——我也很确定,我始终会质疑别人让我做的事,并试图在做之前先弄明白。
后来到了 2000 年前后,我参与了极限编程运动的最初阶段,在工作中被提升为技术负责人,之后的事就顺理成章了。如果我处于听从上级指示的位置——我经常如此——那么我执行这些指示的方式通常由我自己斟酌决定。这就是人们如今津津乐道、视为如此宝贵的那种“品味与判断力”。
大多数软件开发者并不具备这一点。
大多数软件开发者甚至从未尝试去拥有它,因为只要做一个稳定的团队合作者、遵循流程(无论是什么流程)、按照薪酬高于自己的人制定的计划交付成果,就始终足够过得去了。
大多数软件开发者不去尝试,仅仅是因为他们骨子里没有这种东西,或者因为那样更省事,他们宁愿把多余的精力花在别的事情上:家庭、电子游戏、旅行,随你说……只要老板满意,他们就能拿到相对丰厚的薪水,一切就都相安无事。
嗯,在我看来,也在许多其他人看来,这套体系显然正在瓦解。而随之而来的后果不会好看。如果你为了薪水所做的一切,就是融入一个由别人决定做什么的流程,然后你把那些指示转化为软件,那么恭喜你,你是一个“人肉代理”。如果你所做的一切就是从更高级别的老板那里接受指示,再把它们转化为给其他人的指令,那你同样是一个“人肉代理”。
人肉代理还能保住工作的唯一原因就是惯性。当前的 AI 技术已经足以取代所有人肉代理,之所以还没有,仅仅是因为那种级别的颠覆性变革需要时间。
你到底想要什么?
这又让我回到那个话题:在提示 Claude Code 的间隙,我劝朋友“按下回车,去陪孩子玩吧”。
我是认真的。我的朋友不会魔法般地变成我。我希望他每天能完成一些有用的事,保住工作,还能留点精力给他那对可爱的宝贝女儿。他在一家成功的大公司。我猜他还有一些回旋余地来理清头绪。很多人都是如此。组织惯性可以让薪水在某个职位的经济合理性开始蒸发后很久,依然照发不误。
所以,利用好那段时间。看在上帝的份上,享受其中一些吧。但要明白你在花费什么。
因为我没法告诉你你还有多少时间。我只能告诉你,和朋友争论计算机智能是否有灵魂,似乎是对那段时间的糟糕利用。
我不会给出那种安慰性的建议,说你该去当架构师,因为 AI 永远需要有人做高层思考。二十多年来,架构一直是我价值主张的重要部分,但我完全预期 AI 会吃掉越来越多这类工作。我预期它会吃掉全部,直到剩下的唯一人类就是那些为正在建造和/或维护的东西付钱的人。在组织架构图上往上挪一格,并不能让你置身于这个过程之外。
我的老朋友 @chadfowler 正在写一本关于再生软件的书:这类系统的实现可以被替换,同时保留人们所依赖的行为。要做到这一点,需要恢复埋藏在现有软件中的知识,明确其义务,并建立如何判断替代品是否有效的方法。今天,这需要相当多的工程判断力和经验,但我看不出有什么理由认为,界定边界、提取需求或设计检查会永远专属于人类的工作。
这次历史性转变让我个人感到兴奋的是,随着这些能力的出现,我能创造的价值会大得多。回想在 ThoughtWorks 和后来的 Hashrocket 的日子,客户把我拉进那些局面时,弄清楚该做什么本身就是任务的重要部分。我热爱这份责任。现在依然如此。给我更强的行动能力去落实一个决定,我立刻就会开始琢磨,还能为付我钱的人多做成些什么。
这当然是一种偏好,而不是永久雇佣的保证。我抽屉里可没藏着什么防 AI 的证书。我预计自己需要日复一日地持续演进我做什么、以及怎么做,就像我到现在这三十年里一直做的那样。
我说这话时很清楚,很多人觉得我偏好的这种工作关系令人精疲力竭。他们想要的只是一份还算清晰的任务、一份不错的薪水,以及工作之外的生活。我理解这种吸引力。遗憾的是,我严重怀疑软件行业会继续向每个想要这种安排的人提供它。
那么,亲爱的读者,你究竟想要什么?
如果是一份丰厚的薪水和大量与家人相处的自由时间,那就对此坦诚。用 AI 工具把你的职责履行到令人满意的水平,再利用由此腾出的喘息空间去弄清楚下一步。你不欠这个行业一场终生的热恋。事实上,你或许该考虑干脆去做点完全不同的事。
但如果你能鼓起兴趣,想要对建造什么拥有更多发言权,那就现在开始锻炼这种判断力。如果可能,就在工作中这么做。如果不行,那就在空闲时间找一个值得解决的问题。和与它共处的人聊聊。用 AI 去调查它、挑战你的假设,并想清楚你可以尝试什么。决定什么样的结果才让投入的努力值得。然后,把其中一个想法推进得足够远,去发现你到底对不对。真的,没有比现在更好的时机了。
我为朋友做的小演示在20分钟内就生成了一个草稿PR和一些Jira史诗。我们始终没能走到确立任何重要改进的那一步。睡了一觉、写了这篇文章之后,我意识到一件事:真正把那个关于重要性的问题追问到底,恰恰是我希望朋友不要再逃避的工作。如果障碍是让五个人同意去做某件事,那么让他们达成一致就是这项工作中不可或缺的一部分。Claude可以帮你做准备,但你还是得去和那些你需要其合作的人打交道,对吧?
对于我将要把这篇文章发给的那位朋友,我说:这周就挑一件事来做。小到足以完成,又重要到另一个人会注意到。让机器尽可能多地干活。留意发生了什么。如果结果是错的,找出原因,继续前进。你不会因为亲手多敲了一些代码,就变得不那么像一个肉身代理。
我无法承诺这能拯救你作为软件工程师的职业生涯。但它给了你一个机会,让你在还有时间实验的时候,去发现凭借以前不曾拥有的能力你能做到什么。
对于那些读到这里说“不,不,不!”的人,我只有一个回应。站在这场AI海啸面前对它大发脾气,并不能让你免于被卷走。
你真的想继续用你的大脑?不想让它烂掉?弄清楚你真正想要什么,然后让Claude去为此干活。