卡尔·马克思会怎么看我的编程智能体

原文:https://every.to/source-code/what-karl-marx-would-say-about-my-coding-agents


Loren Stewart 是负责 Every 的 Slack agent 的工程师。他给自己搭了一座软件工厂,可以在他照常过日子的同时产出一个新功能。但把写代码这件事交出去,也意味着失去那些帮他学习、并让工作有满足感的试错过程。在今天的文章里,他借用卡尔·马克思(Karl Marx)的异化理论来理解这种失落,并思考什么时候该自动化、什么时候该监督、什么时候该自己动手。我想,不管写不写代码,我们很多人都认得这个问题。——Kate Lee

过去几个月,我一直在打磨一座代码工厂。

我先和一个 LLM 一起制定计划,自己审一遍,再让另一个 agent 审一遍计划。然后工厂把计划拆成可以并行处理的小块。计划确定之后,几乎所有的实现工作都由我的 agent 完成。它们用浏览器和终端敲出新功能、找 bug、审阅其他 agent 的工作、修掉由此产生的问题。只有通过自动检查、并且由一个单独的 agent 审阅并批准每个问题之后,改动才会被合入。

我可以启动工厂,然后去过我的一天,回来时收获一个新功能,甚至一整个应用。结果可能比我亲手写的更好。而且肯定来得更快。

在代码工厂之前,实现一个功能意味着在多个工具之间来回折腾好几个小时。我会抓错一段代码,因为它的名字看起来就是我想要的那个。追查这个错误会把我带进代码库里我本来没打算碰的部分,而出来时,我对系统各部分如何拼在一起有了更完整的图景。现在这些弯路由 agent 去走,我只看到它们最终停在哪里。我把自己从“制造”的体验里自动化掉了。

很多工程师把这类系统叫作软件工厂(software factory):agent 按有序的流程各司其职,像流水线上的工人。但相似之处可能比我们预想的更深。150 多年前,卡尔·马克思描述了工厂工人如何与自己制造的东西相疏离。他的论述帮我理解了我亲手做东西时最怀念的是什么,以及我可以改变什么,把其中一部分拿回来。

异化的四种形式

马克思在 19 世纪中叶写到工业工厂里的劳动者,包括纺织厂——在那里,机器正在改变人们工作的方式。他描述了工人如何可能与自己制造的产品、制造的行为、自身的能力,以及彼此之间发生断裂。在我的工厂里,我看到了这四种断裂各自的版本。

产品。 马克思笔下的纺织工人不拥有他织出的布,也不拥有织布的那座工厂。我拥有我的工厂产出的每一行代码,但“拥有”和“使之成为自己的”之间有巨大的差别。

八月,我审阅了工厂做的一个新功能,它意在帮助 agent 协调更复杂的项目。构建这个功能的编程 agent 动过 42 个文件,新增了约 3,000 行代码。在开发过程的某个地方,它们认定设计的一部分应该是“content-light”(内容轻量),而我说不出这在实践中意味着什么。我能解释我和 agent 一起制定的计划,但我不知道那些把计划变成代码的小决定。

我拥有那一行行代码的每一行,而我在读一个陌生人的作品。

行为。 马克思写道,工人“在不工作的时候感到自在,而在工作时他并不感到自在。”

我曾经是电脑前那个工人,自己把问题啃下来。现在我更像是工厂主:我让工作运转起来,然后检查结果。在这中间,agent 实现代码——这项活动里包含着走错路的挫败,和让某个东西跑起来之后的满足。我在工作中并不痛苦。我只是不在场。

能力。 工作会改变做工作的人。一个功能是外化的练习;通过做一个功能,我们发展出技能、信心和判断力。马克思看到知识与技能变成了工厂机器的一部分,而工人越来越少有机会运用自己的。我的软件工厂依赖我的判断力,但它并不是为了培养我而设计的。它生产高质量软件,如果它在实现过程中需要我的注意,那大概算是设计缺陷。现在当我手写代码时,我注意到自己生疏了。

他人。 在马克思的工厂里,工人并肩站着,但主要和机器打交道。我和同事们各自拥有自己的软件工厂,我们有更多与这些系统打交道、而不是与彼此打交道的风险。

如果我想删掉一段看起来冗余的代码,我可能会问同事它为什么存在。他们跟我讲起去年一次影响到客户的事故,而聊着聊着我们发现,其中一部分代码仍然必要,另一部分可以删。我带着更好的答案离开,而我的同事看到:在删掉我不理解的东西之前,我会先问。我也看到:他们可以重新考虑一个旧决定,而不把这个问题当成攻击。

一个 agent 可以检索到同样的历史,并建议同样的改动。但我和我的同事会错过一次学会互相信任的小机会。

三种运转工厂的方式

我的处境和马克思笔下的纺织工人很不一样,他们无法重新设计那座工厂。我建了我的工厂,也能改变它运转的方式。我把那些曾经挑战我、教导我、给我满足感的工作交给了它,衡量成功的标准是它有多不需要我。要把一部分工作拿回来,我可以给工厂内置三种不同的模式:完全自主、密切监督、手工完成。

完全自主适合像生成我早晨简报这样的任务。在职业生涯的这个阶段,如果我委托出去的是我已经写过 1,000 遍的日常操作,我不会损失什么。对这类任务,我乐意依赖工厂工作流里内置的标准。

密切监督用于我想理解的复杂系统。在 agent 敲定重要决定之前会有一个检查点,并附有足够的解释和试验空间,让我能自己把问题走一遍。我可能会去追查:当并行工作中的某一支失败时会发生什么,或者某个任务始终没有报告完成时会发生什么?我能解释为什么提议的设计是一个好方案,以及为什么它被选中而不是其他方案吗?在跟随 agent 推理的过程中,我可能也会生出自己的想法。

手工完成用于那些我想自己啃下来的问题:因为我想学一个新的模式或技术,或者只是为了写代码的乐趣。对于我不写的代码,我仍然可以缩短一些距离。我常常让 agent 为我想理解的部分写检查(checks),然后用调试工具一步步跟着代码走。检查可能会通过,但我仍然得弄清楚代码是怎么运作的、检查漏掉了什么。检查可以代替我的判断,也可以帮我发展判断。

有些工作这样会花更长时间。我可能宁愿用一个下午写代码,而不是多要一个做完的功能。如果只看产出,这很难辩护,但我认为不该只看产出。我想要那个功能,我也想要一种生活,给我空间去练习那些构成我是谁的技能。

工厂闲置也没关系

蒸汽机不会累,磨坊主注意到了这一点。马克思称之为“经济悖论”(economic paradox):本可以终结漫长工作日的机器,反而成了延长工作日的理由。闲置的机器就是白花的钱。

我的工厂可以在我睡觉时继续写代码,而当它闲置时,我会想它还能做些什么。但我可以选择哪些工作我想醒来就已做完,哪些我想参与其中。我的工厂永远能做得比我多。而我可以决定,什么时候我已经做得够了。

[作者简介]Loren Stewart 是 Every 的工程师,负责 Every 的 Slack agent。


核心启示:自动化能产出更好、更快的代码,但马克思描述的四种异化提醒我们:当产品、行为、能力与人际关系全部交出去,人也就退出了制造的中心;问题的关键不在于少用 agent,而在于主动选择哪些工作留给自己。

What Karl Marx Would Say About My Coding Agents 的发芽报告

材料核心

Loren Stewart 用 LLM 与多个 agent 搭起一座能自动产出功能的“代码工厂”,却发现自己更像工厂主而不是工匠:他拥有代码,却不理解代码如何成为代码。于是他用马克思的异化理论分析这种失落,并提出全自主、密切监督、手工工作三种模式,以及“工厂空闲也没关系”的选择权。


发芽 01:从“所有权”到“归属感”:制作是理解的入口

种子

文章里最尖锐的一句是:“我拥有每一行代码,却在读陌生人的作品。”这不是产权问题,而是认知作者权问题。马克思在 1844 年《经济学哲学手稿》中讲“劳动产品异化”:产品本来应是劳动者本质力量的对象化,却在私有制下变成异己的、反过来支配劳动者的东西。Stewart 的代码工厂把这个结构改写了:代码法律上归他,但 42 个文件、约 3,000 行代码中的局部决策,对他保持不透明。他拥有结果,却没有参与结果的形成。

外部研究可以把这个张力照得更亮。2012 年,Michael Norton、Daniel Mochon 与 Dan Ariely 在《Journal of Consumer Psychology》提出“IKEA 效应”:人们会对自己亲手参与组装的东西赋予更高价值,劳动本身会生出依恋。但 AI 工厂制造的是相反情形:所有权没有消失,劳动参与却被抽走。于是“我的代码”变成一种只具备法律意义、不具备经验意义的归属。

Aha 瞬间

“当生产可以完全外包,所有权就只剩法律意义;归属感来自你能复述产品如何成为产品。”


发芽 02:自动化的讽刺:越省事,越不会处理不省事

种子

Stewart 说,工厂依赖他的判断,却不是为发展他的判断而设计的;如果实施过程中需要他介入,那反而像设计缺陷。这正好撞上 Lisanne Bainbridge 1983 年发表在《Automatica》上的经典论文《自动化的讽刺》(Ironies of Automation)。Bainbridge 指出:自动化并没有真正取消人,而是把人推到“监控者”和“异常处理者”的位置;可日常操作被机器接管后,人恰恰失去了练习判断的机会。系统越可靠,人在罕见故障面前越生疏。

这解释了 Stewart 为什么把“密切监督”和“手工工作”重新写进工厂:它们不是效率最低的模式,而是保留判断力的训练场。全自主适合晨间简报这类写过 1,000 遍的 routine;但复杂系统需要 checkpoint,需要人能在 agent 提交关键决策前追问“为什么选这个方案,而不是另一个”。否则,工厂越顺,人越像异常情况下的临时替补。

Aha 瞬间

“自动化把日常判断变成稀缺资源:系统越顺,人在异常面前越像临时替补。”


发芽 03:空闲不是故障:从机器时间到人的时间

种子

文章结尾有一个很轻但很重要的反转:马克思说机器本可缩短工作日,却成了延长工作日的理由,因为“闲置的机器就是损失的钱”。Stewart 的工厂也能在他睡觉时继续写代码,所以它一空闲,人就本能地想:它还能做什么?但他提出另一种权利:我可以决定哪些工作想醒来就看到完成,哪些想亲自参与;工厂总能做得比我多,但我可以决定“什么时候已经够了”。

这条线索在 20 世纪有过两次著名回响。凯恩斯在 1930 年《我们后代的经济可能性》中预测,到 2030 年技术生产力可能把每周工作时间压到 15 小时;伯特兰·罗素在 1932 年《闲散颂》中更直接地为“少工作、多生活”辩护。他们和 Stewart 共享同一个问题:生产力提升究竟应该兑换成更多产出,还是兑换成更多可支配的生活?文章没有把“空闲”浪漫化,而是把它变成一种治理选择:工厂的节奏不必自动成为人的节奏。

Aha 瞬间

“机器的空闲曾是资本损失,人的空闲却可以是生活的收益;真正的自动化不是让工厂永远运转,而是让人有权定义‘够了’。”


你的思考空间

  • 你当前哪些“拥有”其实是“未参与”?哪些东西法律上属于你,但你说不清它是怎么形成的?
  • 如果你的 AI 工厂需要你处理异常,这是设计缺陷,还是必要的学习接口?怎样设计“可练习的监督”?
  • 哪些任务值得保留手工,不是因为它们更高效,而是因为它们塑造你的判断力、身份感或与他人的关系?
  • 当工具能做得更多,你用什么非产出指标判断“今天已经够了”?
  • 你的团队是否正在用 agent 替代本可建立信任的对话?哪些协作环节应该保留一点“低效的摩擦”?