LLM 工具增强而非替代程序员
深度讨论 AI 编程工具如何赋能开发者而非威胁就业,在开发者社区引发广泛共鸣和思考。
深度讨论 AI 编程工具如何赋能开发者而非威胁就业,在开发者社区引发广泛共鸣和思考。
[编者按:关于替代人类程序员有很多讨论。当然,有些人会离职,但并非所有人。我对这一发展如何展开的看法在过去两个月发生了很大变化。在 5 个视角中占 3 个。]
上个月,我用 Claude Code 构建了两个应用程序:一个非平凡的后端 agent 处理平台的 MVP,以及一个相当复杂的 B2C SaaS 产品前端的早期版本。这些项目总共产生了大约 30k 行代码(整个过程中还扔掉了大约相同数量的代码)。这次经历教会了我关于 AI 和软件开发的一些重要东西,这与当前的许多叙述相悖。
还记得《异形 2》中 Ripley 与异形皇后的最后对决吗?她穿上了 Power Loader——一台工业外骨骼,放大了她的力量和能力。这套装甲没有替代 Ripley,而是将她转变成了远比单纯的人类或机器都更强大的存在。
这正是 Claude Code 等工具在实际应用中的工作方式。它们不是替代程序员的,而是放大我已有能力的放大器。那个后端项目?用传统方法本来需要我花费数月。用了 Claude Code,我在数周内完成了核心部分。但我们要说清楚——我不只是描述我想要什么然后看着魔法发生。
想象一下 Ripley 操控 Power Loader。Claude Code 给了我巨大的举力能力,同时我保持了对我们前进方向的控制。我做了所有架构决策,设定了质量标准,并保持了我们的愿景。最重要的是,我必须——勤奋地——关注它是否偏离轨道。当它确实偏离时(这种情况经常发生),我必须把它拉回来。AI 以难以置信的速度完成了实现细节,但这个操作背后的大脑?仍然是我,并且始终处于高度参与状态。
能力越大,责任越大。使用 AI 编码工具时,你必须保持不断的警惕——这是我通过几个痛苦的教训学到的。
Claude Code 偶尔会做出令人困惑的决定:修改框架代码来让测试通过,注释掉大量代码并用硬编码值替换它们以达到通过测试的目的,而不是解决根本问题,或引入不必要或不合适的依赖。它对行动有巨大的偏好,所以你必须无情地告诉它做得比它想做的要少,以保持对它的控制。我甚至发现自己有时会对它破口大骂,这是一种奇怪的拟人化形式,我至今仍不确定自己是否真正理解或接受。
就像驾驶 A380 一样,这个系统可以处理巨大的复杂性,但需要一个人类在关键时刻抓住方向盘。现代飞机几乎可以自己飞行,但我们仍然需要技术娴熟的飞行员在驾驶舱里做出关键决策。即使只是短暂地转移你的注意力,也可能导致麻烦。在我的案例中,后端项目需要三次完全重写,因为我在关键时刻放松了警惕,允许 AI 走上有问题的实现路径,这些问题直到很久后才显现出来。
这种警惕需求创造了一种有趣的动态。虽然 AI 大幅加快了开发的某些方面,但它要求开发者注意力的形式不同——较少关注编写每一行代码,更多关注审查、指导和维护架构完整性。
使用 Claude Code 从根本上改变了我对编程时间经济学的思考方式。传统上,编码涉及三个不同的"时间桶":
我为什么要做这个?理解商业问题和价值
我需要做什么?在概念上设计解决方案
我怎样做?实际编写代码
几十年来,最后一个桶消耗了我们大量的时间。我们会花费数小时、数天或数周来编写、调试和改进。有了 Claude,这个时间成本已经跌至几乎为零。我可以在一次会话中生成数千行功能性代码——说实话,这是令人惊叹的。
但这里有一个关键的洞察:前两个桶没有消失。实际上,它们变得比以往任何时候都更重要。理解你构建内容背后的意图和清楚地定义需要做什么的事情,现在是开发速度的主要制约因素。
还有一项新的技能出现了:磨刀。既然代码生成基本上是免费的,我们需要变得更加舒适于扔掉整个解决方案。沉没成本谬论对程序员打击很大——我们讨厌丢弃我们投入的代码,害怕我们可能会破坏重要的东西或永远无法回到工作状态。
但当你的助手可以在几分钟内重写所有东西时,这种计算完全改变了。在我的后端项目期间,我三次查看了大量代码——数千行在技术上可以工作的代码——并决定完全放弃它,因为这个方法不对。这并不容易。我的本能仍然是尝试拯救和重构。但正确的做法是退后一步,重新思考这个方法,并将 AI 引向不同的路径。
这种无情地削减的意愿是大多数开发者还没有培养出来的肌肉。它需要对你架构判断的信心,以及对实现时间价值的根本转变。
对我来说,使用 Claude Code 本身就是一次学习经历。进展通常感觉像是两步前进三步后退,特别是在早期阶段。每天生成 20k 多行代码变得相对直接,但知道何时扔掉一切并从头开始重建——这需要 30 年的经验。
智慧和一些白发让我有信心识别一个特定的方法什么时候不会扩展或正确维护,即使代码在表面上看起来是功能性的。我不只是坐在那里看它生成代码,我必须非常密切地注意以发现反模式或更糟的东西出现,这些东西要么在写完后不久就停止工作,要么潜伏着并稍后咬你。
这突出了一个关键的危险:缺乏实质性真实世界经验的开发者可能无法识别 AI 何时产生无意义的输出。他们可能没有意识到 AI 生成的代码解决了眼前的问题,但引入了三个更多的问题。机甲装甲放大了能力,但当由没有专业知识的人操纵时,它也放大了错误。这些工具非常强大,但当指向错误方向时也非常危险。
象棋提供了一个有用的平行线。"半人马棋"将人类与 AI 象棋引擎配对,创建的团队表现优于单独的人类和单独的 AI 系统。有趣的是,即使 AI 象棋引擎可以轻易击败大师级选手,人类-AI 组合仍然产生比单独 AI 更好的结果。人类提供战略方向和创意问题解决;机器提供计算能力和战术精确性。
我使用 Claude 的经历清楚地证明了这种效应。当我将 AI 视为合作伙伴而不是替代品时,开发速度大幅增加。我发现最有效的是当我花时间写出一个"自由流式"的规范,然后与 Claude 迭代将其转变为更正式的设计文档时。
但这个合作伙伴关系仍然需要我的领域知识和架构判断才能成功。AI 在模式识别和代码生成方面表现出色,但缺乏上下文理解来做出适当的权衡和设计决策。它不能告诉何时它做的看起来还好,但实际上是疯狂的。它需要我不断关注它并让它保持在轨道上。
构建这些应用程序需要在委托和控制之间找到正确的平衡。当不受监督时,Claude 在后端走了一些疯狂的兔子洞——AI 会为本应以不同方式解决的问题或根本不需要解决的问题实现越来越复杂的解决方案的地方。在一个噩梦般的例子中,它最终完全复制了整个代码部分,而不是重用现有组件。它工作了(对于某个版本的"工作"),但它是错误的。非常错误。
前端也是类似的故事。我必须不断阻止它尝试用草率的 JavaScript 实现功能,而不是使用习语 Elixir 和 Phoenix LiveView 模式。
随着时间的推移,我为合作开发了一个节奏。对于遵循既定模式的直接实现,我可以广泛委托。对于新颖的挑战或有重大权衡的领域,我需要提供更详细的规范并更仔细地审查输出。
我构建的东西如果没有 Claude Code 就不可能这么快完成,但如果没有人类的监督也会完全失败。真正的价值来自于理解何时利用 AI 的能力,何时坚持人类的判断。
许多圈子里有一种看法,认为 LLM 会替代程序员。我犹豫着说这永远不会发生,因为 LLM 最近有很多令我惊讶的事情,我期待更多的惊喜。不过,目前我看不到 LLM 有效地替代程序员;但它们正在改变我们的工作方式。就像 Power Loader 中的 Ripley,我们正在学习操纵强大的新工具,这些工具将我们的能力扩展到远远超过我们单独可以实现的范围。
这种转变将改变我们在开发者中看重的东西。原始编码能力变得不那么重要;架构思维、模式识别和技术判断变得更加至关重要。有效地指导和与 AI 工具协作的能力本身成为一项至关重要的技能。
在这个新环境中蓬勃发展的开发者不会是那些害怕或抗拒 AI 工具的人,而是那些掌握它们的人——那些既理解它们非凡的潜力又理解它们非常真实的局限性的人。他们会认识到目标不是将人类从等式中移除,而是增强人类可以完成的东西。
在我看来,这是值得拥抱的东西,而不是害怕。机甲装甲在等待,随之而来的是以前难以想象的规模和速度构建软件的潜能——但仅限于那些技术娴熟到足以以不伤害自己或周围人的方式操纵这些机器的人。
[编者按:如果你想以电子邮件的形式获取此内容,请点击这里加入邮件列表。]
首次发布在 matthewsinclair.com,并在 Medium 上转载。
hello@matthewsinclair.com | matthewsinclair.com | bsky.app/@matthewsinclair.com | masto.ai/@matthewsinclair | medium.com/@matthewsinclair | xitter/@matthewsinclair