AI编程时代来临:AI不会取代程序员,而是会转变编程方式
2025年3月14日
来源:oreilly
**本文核心观点:**AI不会取代程序员,而是会转变编程方式。作者认为编程历史上多次发生技术革新,每次都使编程更易访问,创造了更多而非更少的工作机会。AI将成为程序员的"超能力",使他们能专注于更高层次的创造力和复杂问题。成功的开发者将是那些拥抱新工具的人,而非坚持旧技能的人。未来会出现新的编程范式、新的工作角色(如代理工程师),以及对AI与业务流程深度融合的需求。
以下是全文。
媒体上有很多讨论,认为软件开发者很快就会被人工智能取代。我并不认同这种观点。
这并不是编程的终结。这只是我们今天所知的编程的终结。这并不是什么新鲜事。最早的程序员通过连接物理电路来执行每一个计算。随后,程序员们开始编写机器指令,以二进制代码的形式输入,每次通过翻转计算机前面的开关输入一位。汇编语言编程结束了这一切。
它让程序员能够使用类似人类的语言来指示计算机将数据移动到内存中的位置并对其进行计算。接着,更高级的编译语言如Fortran、COBOL及其后继者C、C++和Java的发展意味着大多数程序员不再编写汇编代码。相反,他们可以使用更高级的抽象来向计算机表达自己的需求。

贝蒂·简·詹宁斯和弗朗西斯·比拉斯(右)在1946年编程ENIAC。来源:计算机历史博物馆
最终,易于调试的解释型语言成为了主流。
BASIC是最早获得广泛应用的语言之一,起初被视为玩具,但很快证明它是未来的趋势。编程变得对孩子和车库创业者都变得可及,而不仅仅是大型公司和政府机构的后台专家。
消费操作系统也是这个故事的重要组成部分。在个人计算机的早期,每个计算机制造商都需要能够编写低级驱动程序的软件工程师,这些驱动程序负责读取和写入内存板、硬盘以及调制解调器和打印机等外设。Windows 结束了这一切。
它的成功不仅在于提供了一个图形用户界面,使得未受过训练的个人更容易使用计算机。它还提供了马克·安德森(Marc Andreessen)所称的“只是一堆驱动程序”(他当时的公司Netscape即将被微软碾压),这种说法显得轻蔑(且错误)。这堆驱动程序以Win32 API为前端,意味着程序员不再需要编写低级代码来控制机器。这项工作实际上被封装在操作系统中。Windows 和 macOS,以及移动端的 iOS 和 Android,使得今天的大多数程序员不再需要了解早期程序员所掌握的许多知识。
程序员的数量更多,而不是更少
然而,这远不是编程的终结。程序员的数量比以往任何时候都要多。数亿用户享受着他们创造的成果。在一个经典的需求弹性示范中,随着软件的创建变得更加容易,其价格下降,使得开发者能够创造出更多人愿意为之付费的解决方案。
网络又一次迎来了“编程的终结”。突然间,用户界面由人类可读的文档构成,通过浏览器展示,并且可以通过链接调用远程服务器上的程序。任何人都可以凭借最少的编程技能构建一个简单的“应用”。“无代码”成为了一个流行词。没过多久,人人都需要一个网站。
像WordPress这样的工具使得非程序员也能在不编写代码的情况下创建这些网站。然而,随着技术能力的提升,成功的网站变得越来越复杂。“前端”和“后端”编程之间的分离也在加大。
新的解释型编程语言如Python和JavaScript逐渐占据主导地位。移动设备增加了一个新的、无处不在的前端,要求新的技能。而且,再一次,复杂性被隐藏在框架、函数库和API之后,这些工具使程序员不必了解他们几年前必须掌握的低级功能。
大数据、网络服务和云计算建立了一种“互联网操作系统”。像Apple Pay、Google Pay和Stripe这样的服务使得以前困难且风险较高的企业任务(如收款)变得可能,且只需最少的编程专业知识。各种深层次和强大的功能通过简单的API得以实现。然而,这一波互联网网站及其连接的网络协议和API的爆炸性增长,最终导致了对更多程序员的需求。
程序员不再是每隔几年更新一次静态软件工件,而是持续开发、集成和维护长期运行的服务。
更重要的是,这些庞大服务(如谷歌搜索、谷歌地图、Gmail、亚马逊、Facebook 和 Twitter)中的许多工作都是在大规模自动化的情况下进行的。
程序是由人类设计和构建的,而不是由人工智能完成的,但许多工作本身是由今天通用人工智能的特殊目的前身完成的。在这些公司的重担大部分由程序承担。人类程序员是它们的管理者。现在有成千上万的程序员在进行这种监督工作。他们已经生活在一个创造和管理数字同事的世界里。

*“谷歌、Facebook、亚马逊,或者一系列更近期的硅谷初创公司……雇佣了成千上万的员工。如果你用20世纪工厂的思维方式来看待这些员工,他们的工作就像他们的工业前辈一样,整天在生产产品,只不过今天他们生产的是软件而不是实物商品。
如果你退一步,以21世纪的思维方式来看待这些公司,你会意识到这些公司的很大一部分工作——提供搜索结果、新闻和信息、社交网络状态更新以及相关产品的购买——是由软件程序和算法完成的。这些才是真正的工作者,而创造它们的程序员则是它们的管理者。”—Tim O’Reilly, “管理那些正在管理业务的机器人,” MIT 斯隆管理评论, 2016年5月21日
在这些浪潮中,旧技能逐渐过时——仍然有用但不再是必需的——而新技能则成为成功的关键。
仍然有少数程序员在编写编译器,成千上万的人在编写流行的JavaScript框架和Python库,但有数千万的人在编写网页和移动应用程序以及支持它们的后端软件。数十亿用户消费他们所创造的内容。
这次会有所不同吗?
然而,突然之间,似乎非程序员可以简单地用普通英语(或你选择的任何人类语言)与大型语言模型(LLM)或专门的软件代理进行对话,并获得一个有用的Python原型(或你选择的编程语言)。
对此甚至有了一个新的流行词:CHOP,或“面向聊天的编程”。先进推理模型的兴起开始展示出AI能够生成复杂程序,只需一个高层次的提示来解释要完成的任务。因此,很多人说“这次不同了”,认为AI将完全取代大多数人类程序员,实际上也包括大多数知识工作者。
他们说我们面临着普遍的人类失业潮。
我仍然不相信这一点。当出现突破性进展,将先进的计算能力交到更大群体手中时,确实,普通人可以做一些曾经是高度专业化领域的事情。但同样的突破也促使了新型服务的出现以及对这些服务的需求。它创造了只有少数人能够理解的新深层魔法。
即将到来的魔力是迄今为止最强大的。这意味着我们正开始一个深刻的探索与创造时期,努力理解如何使这种魔力发挥作用,并从其力量中获得新的优势。聪明的开发者将会受到青睐,因为他们能够做得更多,专注于增加价值的更高层次的创造力。
通过实践学习
人工智能不会取代程序员,但它将改变他们的工作。最终,程序员今天所做的许多工作可能会变得过时(除了嵌入式系统程序员之外),就像用示波器调试的旧技能一样。大师级程序员和有远见的技术观察者史蒂夫·耶格(Steve Yegge)指出,取代的不是初级和中级程序员,而是那些固守过去而不愿接受新编程工具和范式的人。
那些掌握或发明新技能的人将会受到高度追捧。掌握人工智能工具的初级开发者将能够超越那些不掌握这些工具的高级程序员。耶格称之为“顽固开发者的死亡。”
我的想法不仅受到我在计算机行业超过40年的经验和像Yegge这样的开发者的观察影响,还受到经济历史学家 James Bessen 的研究启发,他研究了19世纪初在马萨诸塞州洛威尔的纺织厂中第一次工业革命的进程。当熟练的工匠被“非熟练”劳动力操作的机器所取代时,人工工资确实受到压制。但Bessen通过比较新工业厂房工人的工资记录与以前家庭工匠的记录,注意到了一些奇特的现象。一个学徒工匠达到熟练工人的全额工资所需的时间,与新入职的非熟练工厂工人达到全额工资和生产力所需的时间大致相同。这两种体制下的工人实际上都是熟练工人,但他们拥有不同类型的技能。
Bessen发现,有两个主要原因导致工业革命前50年的大部分时间里工资保持平稳或低迷,直到后来工资开始上升并引发了广泛的繁荣。第一个原因是工厂老板囤积了新生产力带来的好处,而不是与工人分享。但第二个原因是,最大的生产力提升需要数十年才能实现,因为如何最好地利用新技术的知识尚未广泛传播。发明者需要数十年才能使机器更加坚固,使用这些机器的人需要提出新的工作流程以提高其效率,创造出可以用这些机器制造的新产品,更多的企业需要采纳新技术,而工人也需要掌握必要的技能以便利用这些技术。工人不仅需要新技能来操作机器,还需要修理机器、改进机器,发明出未来所暗示但尚未完全实现的东西。所有这些都是通过Bessen所称的“实践中学习”的过程发生的。
仅仅有少数个人在掌握新技能方面走在前面是不够的。贝森解释道:“对一个工厂、一个行业以及整个社会而言,重要的不是培训一个个体工人需要多长时间,而是创造一个稳定、受过培训的劳动力所需的条件” (通过实践学习, 36)。如今,所有将受到这场革命影响的公司(也就是说,所有公司)都需要共同努力。
我们需要一支具备人工智能素养的劳动力。毕竟,编程不过是人类让计算机按照我们的意愿行事的一种方式而已。“编程”越来越接近人类语言这一事实,我们的机器能够理解我们,而不是我们必须用它们的母语0和1,或某种专业编程语言的混杂语与它们交流,这应该值得庆祝。
人们将创造、使用和完善更多的程序,新的行业将应运而生,以管理和发展我们所创造的东西。历史教训告诉我们,当自动化使得交付人们所需或想要的产品变得更便宜、更容易时,需求的增加往往会导致就业的增加。只有当需求得到满足时,就业才会开始下降。在编程方面,我们距离这一点还很遥远。
不出所料,沃顿商学院教授和人工智能倡导者 Ethan Mollick 也是贝森(Bessen)工作的支持者。这就是为什么他如此有说服力地主张“始终将人工智能带到桌面上”,将其融入你工作的每一个方面,并探索“锋利的边缘”,即什么有效,什么无效。
他还敦促公司利用人工智能来赋能员工,而不是取代他们。关于如何应用新技术,有太多的东西可以学习。企业最佳的应用研发来源 是你团队成员的探索,因为他们利用人工智能解决问题并寻找新机会。
编程的本质将会改变
微软的副首席技术官之一萨姆·希拉斯(Sam Schillace)同意我的分析。
在一次最近的对话中,他告诉我:“我们正处于围绕人工智能系统发明一种新的编程范式的过程中。当我们从桌面计算机进入互联网时代时,尽管堆栈的所有层次都是相同的,但堆栈中的一切都发生了变化。我们仍然有编程语言,但它们从编译型变成了解释型。
我们仍然有团队,但它们从瀑布式变成了敏捷,再到持续集成/持续交付(CI/CD)。我们仍然有数据库,但它们从ACID变成了NoSQL。我们从一个用户、一个应用、一个线程,转变为多分布式,无论是什么。我们现在正在用人工智能做同样的事情。”
以下是一些正在组装成新的人工智能堆栈的技术。这甚至还不包括大量的人工智能模型、它们的API和云基础设施。而且这些信息已经过时了!
“人工智能工程领域”,由Marie-Alice Blete在GitHub上提供
但新工具、框架和实践的爆炸性增长仅仅是编程变化的开始。Schillace指出的一个问题是,模型并不像人类那样拥有记忆。即使在较大的上下文窗口中,它们也很难进行他所称的“元认知”。
因此,他认为人类仍然需要提供大量的上下文,以便他们的AI共同开发者能够有效运作。
Schillace在最近的一篇文章中进一步阐述了这个观点。“大型语言模型(LLMs)和其他AI系统正在尝试自动化思维,”他写道。“与工业革命期间运动的自动化相比,这种相似性令人瞩目。今天,自动化仍然很粗糙:我们正在进行认知上相当于抽水和锤击的基本任务,比如摘要、模式识别和文本生成。我们还没有弄清楚如何为这一新能量源构建强大的引擎——我们甚至还没有达到AI的机车阶段。”
即使是机车阶段,主要也是人类在移动物体时所能施加的原始力量的扩展。下一个关键突破是对这种力量的控制手段的提升。Schillace提问道:“如果传统的软件工程在这里并不完全适用呢?如果构建AI需要根本不同的实践和控制系统呢?我们试图创造新型的思维(我们对运动的类比):更高层次的、元认知的、自适应的系统,能够做的不仅仅是重复预设计的模式。
为了有效使用这些系统,我们需要发明全新的工作方式和新学科。正如早期蒸汽动力的挑战催生了冶金学,AI的挑战将迫使新的认知、可靠性和可扩展性科学的出现——这些领域尚未完全存在。”
在商业中部署AI技术的挑战
Bret Taylor,曾任Salesforce的联合首席执行官,Meta的首席技术官,以及很久以前创建Google Maps团队的领导者,现在是AI代理开发公司Sierra的首席执行官,该公司正处于开发和部署商业AI技术的核心。在最近的一次对话中,Bret告诉我,他相信公司的AI代理将成为其主要的数字接口,重要性与其网站、移动应用程序相当,甚至可能更为重要。
公司的AI代理必须编码其所有关键的商业政策和流程。这是AI最终可能能够独立完成的事情,但今天,Sierra必须为每个客户分配一个工程团队来协助实施。
“将一个出色的平台与一系列业务流程结合起来,最终实现一个智能代理,这实际上是相当困难的,”布雷特解释道。“现在出现了一种新的角色,我们称之为代理工程师,这是一种看起来有点像前端网页开发者的软件开发人员。这种角色在软件开发中是最常见的。
如果你是一个React开发者,你可以学习如何制作AI代理。这是一个重新技能的绝佳方式,使你的技能保持相关性。”
当人们可以与一个能够真正解决他们问题的AI代理交谈时,谁还愿意在客户服务电话树中摸索呢?但要让这些代理真正有效将是一个真正的挑战。困难不在于编程,而在于深入理解业务流程,并思考如何利用新能力来转变这些流程。
一个仅仅复制现有业务流程的代理,就像一个简单重现纸质表单的网页或移动应用一样尴尬。(没错,这种情况确实仍然存在!)
谷歌Chrome用户体验负责人阿迪·奥斯曼尼称之为70%问题:“虽然工程师们报告称使用AI后生产力显著提高,但我们每天使用的实际软件似乎并没有明显改善。”
他指出,非程序员使用AI代码生成工具可以制作出很好的演示或解决简单问题,但在复杂程序的最后30%时却会陷入困境,因为他们对调试代码和引导AI找到正确解决方案的知识不足。与此同时:
当你看到一位资深工程师使用像 Cursor 或 Copilot 这样的 AI 工具时,简直就像在看魔术。他们可以在几分钟内搭建出完整的功能,连同测试和文档。但仔细观察,你会注意到一个关键点:他们并不是单纯接受 AI 的建议……他们在运用多年来积累的工程智慧来塑造和约束 AI 的输出。AI 加速了他们的实现过程,但正是他们的专业知识使代码保持可维护性。初级工程师往往会忽视这些关键步骤。他们更容易接受 AI 的输出,导致我所称之为“纸牌屋代码”——看似完整,但在现实世界的压力下会崩溃。
在这方面,Chip Huyen,这本新书 AI Engineering 的作者,在给我发的一封邮件中做出了一个启发性的观察:
我认为 AI 并没有引入一种新的思维方式。它揭示了什么实际上需要思考。
无论多么手动,如果一个任务只能由少数受过良好教育的人完成,那么这个任务就被视为智力活动。一个例子是写作,即将文字复制到纸上的物理行为。在过去,当只有一小部分人能够识字时,写作被认为是智力活动。人们甚至为自己的书法感到自豪。如今,“写作”这个词不再指代这种物理行为,而是指将思想整理成可读格式的更高层次的抽象。
类似地,一旦编码的物理行为可以被自动化,“编程”的意义将转变为将思想整理成可执行程序的行为。
斯坦福大学计算机系主任 Mehran Sahami 简单地说:“计算机科学是关于系统思维,而不是写代码。”
当 AI 代理开始与代理对话时……
准确地阐述问题的重要性变得更加突出。作为企业前端的代理,不仅会与消费者对话,还会与消费者的代理以及其他公司的代理进行交流,这将涉及到公司所有的业务流程。
代理方的这一整面向仍然充满了不确定性。我们尚未开始建立独立AI代理之间合作的标准!
最近一篇关于代理基础设施需求的论文指出:
目前的工具在很大程度上是不够的,因为它们并未设计用于塑造代理与现有机构(例如法律和经济系统)或参与者(例如数字服务提供商、人类、其他AI代理)之间的互动。例如,协调技术本质上并不能向对方保证,当用户指示代理执行非法行为时,会有某个人类承担责任。为了解决这一问题,我们提出了代理基础设施的概念:旨在调解和影响代理与其环境之间互动及其影响的技术系统和共享协议,这些系统和协议是独立于代理的。代理基础设施包括新的工具以及对现有工具的重新配置或扩展。例如,为了促进问责,可以基于现有的用户身份验证系统(如OpenID)构建将用户与代理绑定的协议。正如互联网依赖于HTTPS等基础设施,我们认为代理基础设施对代理生态系统同样不可或缺。我们为代理基础设施确定了三个功能:1)将行动、属性和其他信息归因于特定代理、其用户或其他参与者;2)塑造代理的互动;3)检测和补救代理的有害行为。
在这里需要解决巨大的协调和设计问题。即使是我们能想象的最好的AI代理,在没有人类指导的情况下,也无法解决如此复杂的协调问题。在这里需要足够的编程工作,甚至连AI辅助的程序员在接下来的十年里也会忙得不可开交。
简而言之,新的软件世界还有很多待发明,而这些软件的发明不仅仅依赖于人工智能,而是需要人类程序员利用人工智能这一超级力量来实现。而这些程序员需要掌握大量的新技能。
我们正处于发明未来的初期阶段
有太多新的知识和任务等待我们去学习和完成。因此,是的,让我们大胆假设,人工智能共同开发者使程序员的生产力提高十倍。(具体情况可能因开发者学习新技能的积极性而异。)
但我们也必须承认,一旦这种情况发生,企业、科学以及我们所建造的基础设施的“可编程表面面积”将会同步增加。如果编程带来改变的机会增加了20倍,我们仍然需要两倍于那些新10倍程序员的人数!
用户的期望也将提高。那些仅仅利用更高生产力来削减成本的企业,将会输给那些投资于利用新能力来构建更好服务的公司。
正如长期软件开发者西蒙·威利森(Simon Willison)所指出的,他一直在前沿展示编程在人工智能时代如何变得更简单、更好,人工智能让他“更有雄心”地进行项目开发。
从另一个能力爆炸的领域中汲取教训:渲染今天的漫威超级英雄电影中的单个画面所需的时间,可能与渲染第一部皮克斯电影的全部内容所需的时间相当,尽管CPU/GPU的价格和性能受益于摩尔定律。
事实证明,电影行业并不满足于更快、更便宜地提供低分辨率的粗糙动画。额外的计算周期投入到了数千个微小的改进中,包括逼真的毛发、水面、云彩、反射,以及更多的像素分辨率。技术的进步带来了更高的质量,而不仅仅是更便宜/更快的交付。有些行业是通过选择更便宜/更快而非更高的制作价值而得以实现的(考虑一下用户创作视频的爆炸性增长),因此这并不是非此即彼。但质量在市场中将占有一席之地。这一点始终如此。
想象一下,数千万名业余的AI辅助程序员正在使用像 Replit 和 Devin 这样的AI工具,或者使用Salesforce、Palantir或Sierra等企业解决方案。他们碰到能够吸引数百万用户的用例的可能性有多大?其中一些人将成为与AI合作创造的下一代软件的企业家。
但他们的许多想法将被现有的专业开发者采纳、完善并扩展。
从原型到生产的旅程
在企业中,人工智能将使得那些最接近问题的人更有可能构建解决方案。但即便是最好的解决方案,仍然需要经历帕兰提尔首席技术官Shyam Sankar所称的从原型到生产的旅程。
Sankar指出,人工智能对企业的价值在于“自动化和企业自主性”。但正如他所提到的,“自动化受到边缘案例的限制。”
他回忆起2005年赢得DARPA大奖挑战赛的自动驾驶汽车Stanley的教训:虽然能够做出令人瞩目的事情,但仍需20年的发展才能完全处理城市驾驶中的边缘案例。
“工作流程仍然很重要,”Sankar辩称,程序员的工作是理解传统软件能做什么,人工智能能做什么,哪些仍需人类完成,以及如何将这些串联起来以实际实现工作流程。
他指出,“一个能够捕捉反馈并学习边缘案例以尽快达到目标的工具链是成功的工具链。”在Sankar所设想的世界中,人工智能“实际上将解放开发者,使他们能够更深入地参与业务,并在他们所带来的影响上更具杠杆效应。”
与此同时,顶尖的主题专家将在人工智能助手的帮助下成为程序员。失业的不会是程序员,而是那些在每个职位上未能成为人工智能辅助程序员的人。
这并不是编程的终结,而是其最新一次重塑的开始。