@Thom_Wolf: AI主导的软件世界中的结构变迁。一些初步反思(末尾有TL;DR):减少软...
摘要
AI缩减软件供应链,复兴单体架构,削弱遗留代码持久性,青睐强类型语言,并重构开源经济,对为LLM定制的新编程语言产生影响。
查看缓存全文
缓存时间: 2026/05/18 16:33
AI主导的软件世界中的结构转变:一些初步思考(太长不看版在文末)
缩减软件供应链,单体软件的回归 – 当重写代码和理解大型陌生代码库变得廉价时,依赖深层依赖树的动机将瓦解。从零开始编写¹或从其他库中提取相关部分变得容易得多——只需让代码代理处理,而不必花费无数夜晚深入不熟悉的代码库。减少依赖的理由很有说服力:供应链攻击面更小、打包软件体积更小、性能提升、启动速度更快。借助LLM不知疲倦的耐力,从底层硬件考量一路向上编码整个应用的梦想正变得现实。
林迪效应的终结 – 林迪效应认为,存在已久的事物必然有其存在理由,并且很可能会持续下去。这与切斯特顿栅栏原理相关:在移除某物之前,应先理解其存在的原因,这意味着移除总是有代价的。但在这个软件可以从第一性原理开发并由不知疲倦的代理理解的世界里,这一逻辑被削弱了。旧代码库可以随意探索;长期存在的软件可以以更小的阻力被替换。代码库可以完全用新语言重写²。遗留软件可以在人类早已放弃的情况下被仔细研究和更新。
难题:未知的未知仍未知。AI影响的真正程度将取决于测试、边缘情况和形式化验证能否实现完全覆盖。在AI主导的世界里,形式化验证不是可选项——而是必需品。
强类型语言的理由 – 历史上,编程语言的采用主要由人类心理学和社会动态驱动。一门语言的成功取决于多种因素:个体因素如易于学习和正确编写简单;社区效应如社区活跃度和友善度如何,这进而影响生态系统增长的速度;以及基本属性如可证明的正确性、形式化验证,以及在动态检查和静态检查之间取得平衡——在编写任何内容的自由与防范边缘情况和攻击的纪律之间。随着人为因素的减少,这些动态将发生变化。对人类心理依赖的减少将有利于强类型、可形式化验证和/或高性能语言³。这些语言对人类来说通常更难学,但它们更适合LLM,LLM在形式化验证和强化学习环境中表现出色。预计这将重塑哪些语言占据主导地位。
开源的经济重组 – 几十年来,开源社区围绕着人类通过共同编写、学习和使用代码来建立联系而构建。在一个大多数代码由机器编写——更重要的是由机器阅读——的世界里,这些激励因素将开始瓦解⁴。由AI构建库和代码库的社区可能会作为替代出现,但这样的社区将缺乏迄今为止推动开源的根本人类动机。如果开源开发的未来在很大程度上变得没有人类参与,AI模型的对齐将不仅是重要的——它将是决定性的。
新语言的未来 – AI代理在开发或采用新编程语言时是否会面临与我们相同的权衡?表达性与简洁性、安全性与控制、性能与抽象、编译时与运行时、显式性与简洁性。目前尚不清楚它们会如此。长期来看,创建新编程语言的原因将可能与过去以人为本的动机大相径庭。很可能存在一种针对LLM的最优编程语言——没有理由假设它会与人类趋同的语言相似。
太长不看版:
- 单体回归 – 廉价重写消灭依赖树;攻击面更小,性能更好,底层硬件变得现实
- 林迪效应削弱 – 遗留代码失去护城河,但未知的未知仍然存在;形式化验证变得必要
- 强类型语言崛起 – 人类心理学曾对采用很重要;现在形式化验证和RL环境青睐类型而非易用性
- 开源重组 – 人类联系曾驱动社区;AI编写/阅读的代码打破了这些激励;对齐变得决定性
- 新语言分化 – AI可能不共享我们的权衡;最优LLM编程语言可能完全不像人类趋同的语言
¹ https://x.com/mntruell/status/2012825801381580880?s=46&t=iVWn6Dak9g-Ei-XSbI6BXw… ² https://x.com/anthropicai/status/2019496582698397945?s=46&t=iVWn6Dak9g-Ei-XSbI6BXw… ³ https://wesmckinney.com/blog/agent-ergonomics/… ⁴ https://github.com/tailwindlabs/tailwindcss.com/pull/2388#issuecomment-3717222957…
从人类工效学到代理工效学 – Wes McKinney
来源:https://wesmckinney.com/blog/agent-ergonomics/ 我最近用Go构建了很多新软件。但实际上我这辈子一行Go代码都没写过。怎么回事?
任何关注我LinkedIn(https://www.linkedin.com/in/wesmckinn/recent-activity/all/)或Twitter/X(https://x.com/wesmckinn)动态的人都会看到,近几个月我深陷编码代理的兔子洞。这包括:
- moneyflow (https://moneyflow.dev/),一个TUI会计系统(用Python编写)
- roborev (https://github.com/wesm/roborev),一个持续后台代码审查系统(用Go编写)。顺便说一句,roborev彻底改变了我的生产力。
- VibePulse (https://github.com/wesm/vibepulse),一个平庸版的CodexBar (https://github.com/steipete/CodexBar)(用Swift编写)
- agent-session-viewer (https://github.com/wesm/agent-session-viewer),一个用于编码代理会话的会话历史查看器和搜索工具(用Python编写)
我还有多个正在进行中的项目,利用夜晚和周末创造,未来计划开源或留给自己。我比过去几年更努力地工作,也获得了更多构建的乐趣。
Python与代理
Python仍然是一种非常高效的语言。它简洁、可读,拥有有史以来最强大的库生态系统之一。
但代理工程是不一样的:
- 快速的编译-测试循环比代码简洁性和可读性更重要。代理的编译-测试频率比人类同行高出一到两个数量级,因此任何额外的摩擦都是惩罚性的。
- 无痛的软件分发感觉至关重要。你可能会创建许多工具来支持你的“代理循环”,而在编码代理上下文中可访问的、自包含的、无依赖的二进制文件感觉是正确的形态。
- 当人类不再是主要作者时,人类工效学就不那么重要了。
在这种背景下,Python有弱点:它的测试循环相对较慢,分发也有挑战(尽管uv有帮助)。拖着一个Python解释器开始感觉像我们曾经拼命想要摆脱的Java虚拟机。
Python之所以如此受欢迎(以及我早在2007年就陷入Python兔子洞,并花了很多年推广Python用于数据分析)的原因是它对人类来说既高效又愉快地编写和使用。随着时间推移,与明显的缺点(性能、内存使用、分发等)相比,这种好处越来越显得无足轻重,尤其是一个代理为你做所有编码时。
***换句话说,编程语言中的人类工效学现在重要得多。***Python的可读性和简洁性也帮助LLM生成代码,但通过迭代代理循环的“退火”视角来看,更快的迭代转化为净生产力提升,即使考虑到在更冗长或语法更复杂的语言中生成代码的“开销”。
无摩擦的开发与发布
这种向代理工程转变的赢家是那些解决了构建系统、运行时性能、打包和分发问题的语言。这越来越像是Go和Rust:
- 无痛构建零运行时依赖的静态二进制文件
- 可预测的依赖管理和代码共享
- 快速、确定的构建
- 资源占用少,无需即时编译,运行时性能良好
根据我的经验,Go甚至比Rust有显著优势,因为它的发布构建编译速度快(而Rust发布构建可能需要几分钟的链接和优化)。Rust在没有垃圾回收的情况下提供内存安全和确定的资源管理,而Go则为了更快的编译和更简单的并发模型而放弃了一些控制。一些项目可能会根据这些特性选择其中一种(将Rust较慢的编译-测试循环视为可接受的权衡)。
目前,LLM具有强大的Python编程技能,因为从GitHub和更广泛的互联网中挖掘了大量的训练数据,因此现在Python的平均代码质量可能比Go或Rust更好,但经过多次代理迭代和自动化代码审查后,可能就足够好了。
需要明确的是,我并不是说Go和Rust对人类来说非常不工效学。这些已经是我们所有人用于关键应用程序的流行语言,比如Docker、Kubernetes、Terraform、Deno或uv。有趣的是,代理使这些语言变得更容易访问,超越了之前的核心用户群——重型系统工程师。Go是一种很好的系统工作、微服务和分布式计算编程语言,但通常来说,用它工作需要更多的学习曲线,过去构建一个Go项目通常比构建相同的Python项目花费更长时间。
数据科学和AI呢?
只要Python作为数据工作、ML/AI推理和训练语言的护城河存在,它就不会消失。NumPy、pandas、PyTorch以及所有其他流行项目的生态系统代表了数十年的积累经验、机构知识和肌肉记忆。虽然一些项目可能会用主要面向代理的系统语言重新构思,但生态系统的惯性(以及丰富的训练数据)将持续很长时间。
发生变化的是持久价值实际所在的位置。将堆栈分为几个层次越来越有用:
- 基于CUDA的计算、IO和编译器内核库、编译器框架如MLIR或JAX的XLA,当然还有Apache Arrow。
- 数据库系统和缓存层,理想情况下通过ADBC (https://arrow.apache.org/adbc/current/index.html) 的零序列化连接。
- 暴露这些功能的语言绑定和编排层。
- 位于顶部的应用或代理接口。
这样看,大部分长期价值显然存在于前两层(计算和数据访问),而不是后两层。
代码审查:机器多于人
远离Python的一个明显缺点是,我阅读和判断Go代码或Rust代码质量的经验少得多。这也是我构建roborev (https://github.com/wesm/roborev)的部分原因,不仅因为代理的提交充满了错误和不完美,还因为我显然不太擅长手动审查在AI之前从未使用过的语言。
Python不是终点,但一个时代结束了
Python仍将作为人类和代理在数据分析、研究和数据可视化方面协作的探索性计算层而至关重要。笔记本层(Jupyter、Marimo等)和混合IDE(如Positron,过去两年我一直在贡献)将越来越专注于服务人在回路的数据科学家或ML工程师,即使“Python部分”可能随着堆栈底层被重新设计以获得性能和代理工程生产力而变得越来越薄。
无论如何,我为我们共同构建Python生态系统所取得的成就感到自豪,以及它如何使数据科学和ML/AI工作民主化。我仍然热爱这门语言,但很明显,我和行业中的许多人将越来越少地使用它,考虑到Go和其他现代编译语言的代理循环生产力优势。这条路通向何方,我们很快就会看到。
感谢Josh Bloom、Ian Cook、Pete Jarvis和John Zila对本文的有益反馈。
相似文章
Martin Fowler:技术债、认知债与意图债
Martin Fowler 反思 AI 对代码质量的影响,指出人类的“懒惰”反而促成清晰抽象,而 LLM 则可能用不必要的复杂性把系统拖胖。
GLM 5.1 战略思考,数据中心反抗加剧,当有用的LLM变得无用时,人形机器人开始工作
Andrew Ng 讨论了编码代理如何以不同速度加速不同类型的软件工作,其中前端开发受益最大,研究受益最小。
@rohit4verse:AI 并没有让代码变得廉价,而是让劣质代码变得致命。Matt Pocock:“软件基础比以往任何时候都更重要”AI 在……
探讨了 AI 如何放大代码质量的影响,强调软件基础比以往任何时候都更重要,并推荐了构建可靠 AI agent 的五种设计模式。
@OpenAI:与OpenAI的@markchen90对话中,陶哲轩思考了一个未来,人工智能减少研究的认知摩擦……
陶哲轩与Mark Chen讨论了人工智能如何改变数学研究,从文献搜索到代码生成,以及调整工作流程的必要性。
@Kangwook_Lee: https://x.com/Kangwook_Lee/status/2052925157606568217
作者主张,为 AI Agent 设计的人工结构框架应被 AI 自主构建的工程架构所取代。文中引入 Three Regimes Framework,阐述这一转变如何释放中型模型的潜能。结合 Meta Harness 等项目的实践,作者预测 AI 将很快实现对其自身系统架构的自主优化。