QIAOPANG.COM · 陈天(TYR CHEN)2013–2026 精选技术与随笔文集 · 共 260 篇按时间顺序浏览(2013 → 2026)↗
程序人生 · 陈天文集QiaoPang · Systems, Craft & Agentic Era
时间轴 ↗

当 AI 成为程序员:编程语言需要怎样的进化?

当 AI 成为程序员:编程语言需要怎样的进化?

穷则变,变则通,通则久。 —— 《周易·系辞》下

编程语言之演进,如易经所言,穷则必变。当人类认知成为瓶颈,语言便向抽象化求变;当AI成为主力,范式必向结构化求通。从机器码到高级语言,从文本到AST,从实现到规约,每一次变革皆因旧制已穷而新制得通。今日AI原生语言之兴,乃历史必然,非偶然之变也。

这篇文章是我跟 Gemini 共同编纂完成,我负责文章的大纲、脉络、核心观点和审校,Gemini 负责质疑我的思路以及填充细节。此外,还需感谢 Cursor (sonnet) 提供的 markdown 格式校正和多种标题选择,以及 gpt-5-mini 提供的配图提示词,gpt-image-1 提供的配图。

编程语言的演进历史

编程语言自诞生以来的整个历史,本质上是围绕一个核心驱动力展开的:为程序员创造合理的抽象,以服务于人类心智的局限与优势。理解这一历史轨迹,对于把握当 AI 成为代码的主要创作者时,编程语言的设计约束将发生何等根本性的变革至关重要。

抽象的轨迹:从机器到人类

编程语言的演进史,是一部不断提升抽象层次、降低人类开发者认知负荷的历史。其发展的根本动力,在于让人类能够用更接近自然思维的方式与机器沟通,从而摆脱机器底层操作的繁琐与复杂。

编程的最初形态是原始的机器码,即由二进制的 0 和 1 组成的指令序列,以及随后出现的汇编语言。这些“低级语言”要求程序员像机器一样思考,直接管理内存地址、寄存器和 CPU 指令。这种方式不仅极其繁琐、耗时,而且极易出错。在那个时代,硬件资源稀缺且昂贵,而人力资源相对廉价,因此,尽管使用起来费时费力,但那些更贴近硬件、能实现更高效率的语言仍然备受青睐。

20 世纪 50 至 60 年代,以 Fortran、COBOL 和 LISP 为代表的“高级语言”的出现,标志着一场革命性的转变。这些语言引入了人类可读的抽象概念,例如用于数学计算的符号表示法、命名的变量、循环结构和条件语句,将硬件的复杂细节完全屏蔽。这一飞跃的根本目标,是让程序对人类而言更易于编写、阅读、调试和维护。

这一趋势在随后的几十年里持续深化。每一个新的编程范式,无论是 C 和 Pascal 所代表的结构化编程,还是 C++、Java 和 Python 所引领的面向对象编程(OOP),亦或是 Haskell 等语言所倡导的函数式编程,都为人类程序员提供了更强大的工具来管理日益增长的软件复杂性,并显著提升开发效率。所有这些演进的核心收益,始终可以归结为“抽象与生产力”的提升。

深入分析这一历史轨迹,可以得出一个核心论点:编程语言设计的整个历史,就是一部认知工程学的历史。每一次重大的语言创新 —— 从变量的引入到面向对象的隐喻,再到自动垃圾回收机制 —— 之所以能够成功,根本原因在于它将一项具体、繁琐且极易出错的脑力劳动从人类程序员身上卸下,转嫁给了编译器或运行时环境。例如,我们之所以不再普遍使用汇编语言,是因为对人类而言,持续追踪寄存器和内存地址是一项巨大的认知负担,且极易导致错误。面向对象编程之所以大行其道,是因为它允许人类使用熟悉的“对象”及其属性和行为来对复杂系统建模,这与人类感知世界的方式高度契合。同样,自动垃圾回收成为现代语言的标配,是因为手动管理内存是导致内存泄漏、悬垂指针等顽固错误的巨大源头,而这正是人类程序员难以始终做对的事情。

因此,一种编程语言的“特性”并非凭空出现,它们是针对人类认知瓶颈的特定解决方案。这一思想为我们理解未来的变革奠定了基础:一个 AI 程序员,其“认知”模型与人类截然不同,它所面临的瓶颈也与人类迥异。因此,它必然要求一套全新的、为其自身优化的语言特性和设计哲学。迄今为止,所有围绕性能与安全性、灵活性与严格性的设计权衡,都是在人类认知能力的框架内定义的。当撰写代码的主体不再是人类时,这些权衡的基准将彻底改变。

现代语言的两种不同的设计哲学:Python 与 Rust

在当代以人为本的编程语言设计中,存在两种主流且几乎对立的设计哲学。我们可以用两种标志性的语言,Python 和 Rust,作为这两种哲学的原型。它们分别代表了为人类开发者设计的两个极端:最大化灵活性与生产力,以及最大化安全与正确性。这种哲学上的二分法,为我们探讨 AI 时代编程语言的未来演化提供了一个至关重要的分析框架。

Python 的设计哲学将开发者的生产力、代码的可读性和使用的便捷性置于首位。其核心思想体现在被称为 “Python 之禅”(PEP 20)的指导原则中,包含了诸如“优美胜于丑陋”、“明了胜于晦涩”、“简单胜于复杂”等信条。

Python 的动态类型系统、自动内存管理(垃圾回收)以及其庞大而丰富的库生态系统,共同造就了其无与伦比的多功能性和灵活性,使得快速原型开发和迭代成为可能。它的设计初衷就是让代码“易于学习和编写”。这种哲学代表了优化人类开发者即时生产力和降低认知门槛这一历史趋势的顶峰。程序员可以专注于业务逻辑,而不必过多关注底层的内存管理或繁琐的类型声明。然而,这种极致的灵活性是有代价的。其代价通常是运行时性能的牺牲,以及将许多潜在错误推迟到运行时才暴露的可能性。而一个更严格的系统本可以在编译时就捕捉到这些错误。

与 Python 截然相反,Rust 的设计哲学建立在一个核心前提之上:人类程序员是会犯错的,尤其是在处理复杂的内存管理和并发编程时。因此,Rust 的首要原则是“安全第一”,同时兼顾性能和并发能力。

Rust 通过其革命性的所有权(Ownership)模型和借用检查器(Borrow Checker)来实现这一目标。这些机制在编译时强制执行严格的内存安全规则,从而从根本上消除了诸如数据竞争、悬垂指针和二次释放等困扰 C/C++ 等系统语言数十年的顽固错误类别。这种设计理念旨在“让做错的事情变得困难”。它牺牲了 Python 式的即时灵活性和平缓的学习曲线,以换取长期的代码正确性和系统可靠性。开发者必须满足编译器提出的严格要求,这个过程有时被戏称为“与借用检查器搏斗”,虽然初期可能感到束缚,但一旦代码通过编译,开发者就能获得极高的信心,相信程序在内存安全方面是稳健的。

Rust 的哲学代表了一种反向运动:它并非追求无限的自由,而是提供了一套强大的“护栏”,通过在编译阶段施加约束来保证系统级的正确性,深刻承认了人类的认知局限在复杂系统编程中往往是错误的来源。

为了清晰地展示这两种设计哲学之间的根本性权衡,下表对其核心特性进行了对比。这个表格将作为后续分析的参照基准,帮助我们理解为何现有的语言范式在面对 AI 程序员时会遇到挑战。

特性/哲学 Python (以人类灵活性为先) Rust (以系统正确性为先)
主要目标 开发者生产力、可读性、简洁性 性能、内存安全、并发性
类型系统 动态类型 静态类型,具备强大的类型推导
错误处理 运行时异常 (错误在执行前保持静默) 编译时检查,强制处理 Result 和 Option 类型
内存管理 自动垃圾回收 所有权、借用、生命周期 (编译时管理)
开发者体验 低门槛,快速原型,学习曲线平缓 学习曲线陡峭,需“与借用检查器搏斗”,编译后信心高
核心信条 “应该有且最好只有一种明显的方式来做这件事。” “无数据竞争的并发,无垃圾回收的内存安全。”

这张表格清晰地揭示了两种语言在设计上的取舍。Python 将信任和责任更多地交给了开发者,相信他们能利用其灵活性写出正确的代码。而 Rust 则将信任更多地赋予了编译器,通过严格的静态分析来确保代码的底层稳健性。这一根本性的哲学差异,将在 AI 成为主要程序员的时代背景下,被前所未有地放大,并直接导向对一种全新编程范式的需求。

AI 程序员:代码生成的范式转移

在清晰地描绘了以人为本的编程语言演进史及其核心哲学权衡之后,我们的视线转向当下与未来。人工智能正以前所未有的速度和规模渗透到软件开发领域,它不仅是一种工具的革新,更是一种根本性的范式转移。我们深入剖析 AI 在代码生成领域的颠覆性能力,并揭示其与生俱来的、决定性的缺陷。正是这些缺陷,将成为催生下一代编程语言的核心驱动力。

AI 辅助开发的现状

人工智能工具已不再是少数前沿开发者的实验品,它们正迅速成为专业开发环境中的标准配置,深刻地改变着软件开发生命周期(SDLC)的每一个环节。

sdlc

这些 AI 工具展现了惊人的多功能性,其能力覆盖了从细粒度的代码补全到完整代码库的生成。过去四五个月我的 github repo 里,超过 95% 的代码都是 AI 生成的。我也做了很多视频(见 B 站:喜欢历史的程序君)揭示从 Cursor 到 Claude Code 进行 Vibe coding 的强大能力。它们还能提供调试辅助、自动生成配置,部署脚本,正则表达式,SQL 查询等内容,极大地提升了生产力。

AI 对 SDLC 的冲击是深远的。它极大地提升了开发速度,将开发者从重复性劳动中解放出来,缩短了产品从概念到上市的时间。这种变革正在重塑开发者的角色,使其从代码的“逐行创作者”转变为 AI 驱动开发的“引导者”和“监督者”。新的工作流范式正在形成,即“AI 执行,人类监督”。在这种模式下,人类开发者将更多精力投入到更高价值的活动中,如系统的高层设计、复杂的创造性问题解决以及对 AI 生成结果的审查与验证。

这一转变并非简单地意味着“写代码更快了”,它实际上是第一部分所探讨的“抽象轨迹”的自然延伸。正如高级语言将开发者从机器细节中解放出来一样,AI 助手正在将开发者从编写常规代码的“仪式”中解放出来。人类程序员正在向更高的抽象层次攀升,其工作核心从“如何实现”转向了“意图规范”。这种从程序员到系统架构师或“计算设计师”角色的演变,预示着一种全新的工作模式。这种模式与“设计智能环境”的理念不谋而合,即人类负责构建和指导一个由人类智能和人工智能协同工作的系统。这个新角色,必然需要新型的工具和为之优化的新型语言。

正确性的危机:AI 生成代码的阿喀琉斯之踵

尽管 AI 带来了显著的生产力提升,但一个严峻的现实问题也随之浮现,并构成了当前 AI 编程范式的核心矛盾:AI 生成的代码在正确性,尤其是安全性方面,存在系统性的、深刻的缺陷。这种“正确性的危机”是当前 AI 模型的阿喀琉斯之踵,也是现有编程语言难以有效应对的巨大挑战。

多项独立的学术研究和行业报告均证实了这一问题的严重性。例如,一项研究分析了超过 100 个大型语言模型(LLM),发现在 45% 的情况下,AI 生成的代码会引入安全漏洞。另一项研究则指出,由 GitHub Copilot 生成的程序中,有 40% 存在缺陷。这些问题并非简单的语法错误,而是潜藏在功能看似正常的代码之下的严重安全隐患,包括 OWASP Top 10 中列出的跨站脚本(XSS, CWE-80)和日志注入(CWE-117)等高危漏洞。AI 在面对这些特定漏洞时,防范失败率分别高达 86% 和 88%。见「Artificial-Intelligence Generated Code Considered Harmful: A Road Map for Secure and High-Quality Code Generation」 https://arxiv.org/html/2409.19182v1。

这种缺陷的根源在于 LLM 的本质。它们通过对海量公开代码库的训练来学习编程,而这些训练数据本身就充满了各种漏洞、过时的编程实践和不良的代码风格。模型在学习语法和模式的同时,也忠实地复制了这些缺陷。研究发现,LLM 在生成代码时,常常未能利用现代语言和编译器提供的新式、更安全的特性,反而倾向于使用陈旧甚至已被废弃的方法,在 Java/C++ 这样具有沉重历史负担的语言中尤为如此。此外,AI 生成的代码往往缺乏必要的防御性编程结构,这使得它们更容易受到缓冲区溢出或整数溢出等攻击。

更令人担忧的是,开发者社区中存在一种危险的“认知失调”。尽管高达 86% 的开发者对 AI 的安全性表示担忧,但同时却有 75% 的人认为 AI 生成的代码比人类编写的更为安全。这种巨大的认知偏差,源于 AI 代码在表面上的结构良好和可读性,给开发者带来了一种虚假的安全感。这种盲目信任,尤其是在紧迫的项目期限下,可能导致开发者未经充分审查就接受 AI 的建议,从而将严重的安全风险引入生产环境。

至关重要的是,这个问题并非随着模型规模的增大就能自然解决。研究表明,更大的模型在安全性能上并没有显著优于小模型,这暗示了该问题是 LLM 概率性本质所固有的系统性缺陷,而非一个可以通过简单扩展模型参数来修复的“bug”。LLM 是语法的模仿大师和模式的识别高手,但它们对代码的深层语义、逻辑和安全含义一无所知。

这一危机也让我们重新审视了 Python 与 Rust 的哲学之争。Python 那种推崇灵活性、信任开发者、将错误检查推迟到运行时的哲学,在面对一个概率性的、不懂语义的 AI 程序员时,几乎是一场灾难。AI 会很乐意地生成那些“看起来正确”但违反了隐式契约的代码,导致难以预料的运行时错误和安全漏洞。相比之下,Rust 的哲学 —— 在编译时强制执行严格的正确性、内存安全和线程安全规则 —— 恰好为非推理的 AI 代理提供了其所急需的“护栏”。

然而,仅仅依赖 Rust 这样的现有语言也是不够的。Rust 的检查主要集中在内存和并发安全,而 AI 引入的错误是全方位的,包括业务逻辑、算法正确性和更广泛的安全协议。因此,这场“正确性的危机”揭示了一个更深层次的需求:我们不能指望通过“训练”来让一个本质上是概率模型的 LLM 变得绝对可靠。唯一可行的前进道路,是彻底变革编程范式本身,转向一个正确性不再依赖于约定、测试或人类审查,而是由语言及其工具链通过数学方法进行证明和强制执行的新范式。语言本身,必须成为最终的正确性仲裁者。

AI 原生编程语言的形态学

综合前两部分的分析,即编程语言为服务人类认知而演进的历史,以及 AI 作为程序员所带来的深刻的“正确性危机”,我们可以开始构建一幅关于未来编程范式的蓝图。这种范式并非为人类直接编写而设计,而是为 AI 高效、安全地生成代码,并由人类进行高层次监督而优化。它将不再是我们今天所熟知的“编程语言”,而是一种全新的、多层次的智能系统。本部分将详细描绘这种 AI 原生编程语言可能具备的形态与核心特征。

超越文本文件:从语法到结构的转变

我们今天所理解的编程语言,其最基本形态是一个存储在文本文件中的字符序列。这种以文本为中心的范式,是为适应人类的读写习惯而演化至今的产物。然而,对于一个 AI 而言,这种线性、充满歧义的文本表示法是一种低效且不自然的媒介。未来的 AI 原生编程,其核心将从处理“语法”转向直接操作“结构”。

将抽象语法树(AST)作为事实的唯一来源

未来的编程环境将以投射式编辑(Projectional Editing)或称结构化编辑(Structural Editing)为基础。在这种模型中,一个程序的规范表示(canonical representation)不再是其文本代码,而是其抽象语法树(AST)。我们所看到的文本代码,仅仅是这棵树的一种可配置的“投射”或“视图”。

一个 AI 代理将不再通过“输入”字符来编写代码,而是直接在内存中构建和修改 AST 节点。例如,要创建一个变量声明,AI 会直接实例化一个 VariableDeclaration 节点,并填充其 name、type 和 initializer 等子节点。这种方式对机器而言,远比解析一串字符来得直接、高效且无歧义。它从根本上消除了所有与解析相关的语法模糊性,这对实现安全的语言组合(language composition)至关重要。

在这种范式下,人类开发者将通过一个高度智能的 IDE 与程序的 AST 进行交互。IDE 可以根据任务需求,将同一个 AST 投射成多种不同的视图:传统的文本视图、用于数据流分析的图形化视图、用于配置的表格视图等。

将中间表示(IR)作为通用语

更进一步,一个定义良好、面向机器的中间表示(Intermediate Representation, IR),可能成为 AI 驱动开发时代真正的“通用语”(lingua franca)。编译器早已在使用 IR 作为连接前端(解析高级语言)和后端(生成目标机器码)的桥梁。

相比于高级语言的 AST,IR 通常更简单、更规整、更接近底层操作。它被设计为语言和目标平台无关的,这使其成为一个完美的通用格式,可以由不同的 AI 模型生成、分析和操作。AI 可以在这个更基础的层面上进行程序变换、优化和推理,而不必关心上层语言那些为人类设计的“语法糖”。

这种从文本到结构的转变,解决了投射式编辑在历史上遇到的一个关键难题。过去,投射式编辑的一个主要障碍是缺乏一个被广泛接受的、非文本的持久化存储格式,以及与之配套的工具生态系统(如版本控制、差异比较工具),而这些工具在以文本文件为基础的世界里是理所当然的。然而,在 AI 主导的开发环境中,这个问题被巧妙地颠覆了。AI 完全有能力处理结构化的存储格式,如 XML 或更高效的二进制树表示。新一代的 AI 原生 IDE 将在结构层面(AST/IR)上实现版本控制和差异比较,并能将结构化的差异以人类可读的方式“投射”出来。非文本源文件的问题,归根结底只是一个以人为中心的旧工作流的问题。

这一转变的最终结果是语法的消亡。关于代码风格的无休止争论,如“缩进用制表符还是空格”、“大括号放不放新行”,将变得毫无意义。语法将彻底沦为一种用户可以在 IDE 中随时切换的、可配置的“主题”或“皮肤”。开发者 A 可以以类似 Python 的无括号风格查看程序,而他的同事开发者 B 可以查看完全相同的底层 AST,但投射为带有 C 风格大括号的视图。语言的本质是其结构,而非其文本外观。这是关注点分离原则的终极体现。

以验证为核心:构建于证明的基础之上

要从根本上解决第二部分提出的“正确性的危机”,AI 原生语言的核心必须建立在形式化验证和可证明性的原则之上。它必须将 Rust 的通过编译时检查来保证正确性的设计哲学推向其逻辑极致。

解决 AI 代码正确性问题的最强大武器,是让语言的类型系统本身成为一种证明工具。这点,我们在 Rust 身上已经看到了其强大的能力:一个设计良好的类型系统甚至可以保证其他语言很难做到的并发的安全性。

此外,我们还可以利用形式化验证,即使用数学方法来证明一个程序严格遵守其规约(specification)。以前,形式化验证因其高昂的成本和专业门槛,很少被用于大型商业软件项目。然而,在一个 AI 原生的世界里,这一局面将被彻底改变。

AI 有潜力自动化形式化验证流程中的诸多繁重环节。人类监督者的角色将转变为定义系统的高层属性和不变性(即“规约”),而 AI 则利用集成的证明助手(Proof Assistants)和 SMT 求解器等工具,承担生成底层实现代码及其形式化证明的艰巨任务。开发过程将演变为一个由“规约定义、代码与证明生成、自动化验证”组成的持续集成闭环。

这标志着一种全新的计算契约(Computational Contract)的诞生。在这个契约中,人类与 AI 之间有了清晰的劳动分工,并充分发挥了各自的优势:

  • 人类:提供规约(Specification)。这包括定义系统“应该做什么”,通过高层级的属性、不变量和依赖类型来精确表达意图。
  • AI:提供实现及其证明(Implementation and its Proof)。这包括生成满足规约的底层代码(以 IR/AST 形式存在),并同时构建一个可以通过类型检查器和验证工具核验的形式化证明。

这种分工模式,类似于一个高效的软件开发团队中,“架构师/产品经理团队”与“开发与质量保证团队”之间的协作,只不过后者的角色现在由 AI 高效、可靠地扮演。这正是将 Rust 的“让错误难以发生”的哲学,从内存和并发安全领域,推广到程序所有逻辑层面的终极体现。它用编译时的证明,取代了只能证明存在特定错误的运行时测试,从而在理论上保证了对所有可能输入的正确性。

人类接口:从提示工程到智能设计

在 AI 原生范式下,人类的角色和交互方式也将发生根本性的转变。人类将不再是代码的工匠,而是智能系统的设计师和指挥官。

人类的工作将远超当前“提示工程”(prompt engineering)的范畴。借鉴科学家斯蒂芬·沃尔夫勒姆(Stephen Wolfram)的构想,人类将使用一个高层次的“语言学接口”(linguistic interface)来向一个确定性的“计算基石”(computational bedrock)传达意图。这种交互将不再是单向的指令下达,而是一种反复澄清和精化的对话,旨在共同完善系统的规约。

人类的角色将演变为“设计智能环境”(designing intelligence environments),成为真正的“系统架构师”。他们的核心职责是定义系统的目标、约束、业务规则和期望的性质,而将具体的实现细节完全委托给 AI。人类的创造力将集中于更高层次的问题解决和创新上。

为了让人类能够有效监督并信任 AI 生成的复杂系统,透明度至关重要。因此,未来的编程“环境”必须将可解释性 AI(Explainable AI, XAI)作为其核心的一等公民特性。

当 AI 生成一段复杂的算法或一个形式化证明时,它必须同时有能力生成一个人类可以理解的解释。这种解释可以有多种形式:一段总结其设计决策的自然语言描述、一个展示数据流和逻辑依赖的可视化图表,或者一个分步拆解其证明逻辑的推导过程。这种可解释性对于调试、审计、安全审查以及确保 AI 的行为与人类的真实意图保持一致,是不可或缺的。

在这种新范式下,最有价值的人类技能将不再是具体的编码技巧,而是认识论(Epistemology):关于知识的理论。人类程序员的最高职责,是精确、无歧义地定义他们想要构建的系统中“何为真理”。他们必须成为阐明需求、约束和不变量的专家。这标志着编程从一种技术手艺,向一种更偏向逻辑学和哲学的智力活动的转变。简而言之,人类定义公理,AI 推导定理(即程序)。

结论:双层智能环境的浮现

综上所述,当编程的主力由人类转向 AI 时,编程语言的进化将超越语法的改良,迈向一种全新的架构——双层智能环境(Dual-Layer Intelligence Environment)。

这一架构的出现,并非要在 Python 所代表的“人类友好型灵活性”与 Rust 所代表的“机器强制型正确性”之间寻求妥协,而是通过彻底的关注点分离来化解这一历史性的矛盾。

  • AI 核心层(计算基石):这是一个为机器优化、以可验证性为基础的表示层。它在形态上是结构化的(基于 IR/AST),在理论上是建立在依赖类型和形式化方法之上的,其设计目标是绝对的逻辑严谨性和可证明的正确性。它将 Rust 的哲学推向极致,构建了一个 AI 可以安全、高效操作的计算世界。这个世界对人类的直接认知而言可能是陌生甚至无法理解的。
  • 人类外壳层(交互接口):这是一个为人类设计、灵活且多模态的交互层。它在形态上是对话式的、可解释的、投射式的。它允许人类通过自然语言、图表、公式等高层次抽象来表达意图、定义规约并理解 AI 的行为。这一层体现了 Python 哲学的精髓——以人为本、追求表达的便捷和思想的自由流动——但它作用的层面已从“实现”上升到了“规约”。

未来的编程,将不再是关于发明一种更好的语法,而是构建一种更好的伙伴关系。这种伙伴关系由一个全新的体系结构所支撑,它为正确的“程序员”(无论是人类还是 AI)提供了正确的“语言”。人类通过富有表现力的、灵活的对话来指挥,而 AI 则在一个充满逻辑确定性的、可验证的世界里执行。这便是 AI 时代编程语言演化的终极图景。

MORE IN AI 与智能体

同专栏延伸阅读

查看「AI 与智能体」全部文章 →

Tokenmaxing 之后,谁在替谁思考?

Agent 可以替人执行很久,人却可能只思考了几秒。一次 AI 限额引发的争执,让我重新审视独立思考、产品判断,以及工作完成之后究竟学到了什么。

New Hope (2025–2026)7,672 字 · 17 分钟