软件供应链收缩:当重写成本接近零,依赖树开始松动
传统软件开发世界的一个核心现实是:读别人代码很痛苦。理解大型陌生代码库像在迷宫里拿着手电筒找出口,时间成本巨大。于是大家形成策略:尽量复用成熟库,哪怕带着一整棵依赖树。深层依赖链条成为常态,因为“自己重写”成本远高于“忍受复杂性”。
LLM直接改变这个成本结构。
当一个代码智能体可以读完整仓库、解释架构、提炼必要模块、甚至按需求抽取功能片段,重写与裁剪的门槛骤降。
与其夜夜啃源码,不如让智能体重建核心逻辑。
依赖不再是唯一理性选择。
单体架构回潮:模块碎片化的时代开始收敛
更激动人心的是,借助LLM的持久战斗力,从零开始构建整个应用的梦想正在变成现实。这里的从零开始是真正的从零开始,从 bare-metal(裸机)层面的考虑一直往上搭。以前这需要一支庞大的工程师团队,现在一个程序员加上AI就能挑战这个曾经不可能的任务。
微服务与高度模块化在过去几十年成为主流,背后逻辑是团队分工、部署独立性、风险隔离以及复用性最大化。这套结构高度依赖人类协调能力与组织结构。当协调成本高于技术成本时,拆分是合理选择。
LLM改变的是“协调成本”和“重构成本”。当跨模块理解与修改变得容易,大量拆分带来的复杂网络开销开始显得多余。单体架构重新获得竞争力,因为整体优化在AI环境下更加可行。跨层修改不再痛苦,架构收敛带来运行效率与部署简化。
这并不意味着微服务消失,而是激励函数变化。
Lindy效应动摇:老代码的时间护城河开始松弛
Lindy效应(林迪效应)说的是:存在时间越长的东西,越有可能继续存在下去。就像纽约的那些老牌熟食店,开了几十年的那种,大概率还能再开几十年。
在软件领域,这表现为一种惯性思维:这段代码已经跑了十年了,肯定有它存在的道理,别乱动它。
Chesterton's fence(切斯特顿的栅栏)原理也是类似的逻辑:在拆掉栅栏之前,你得先搞清楚当初为什么要建它。
因为理解成本往往高昂!
这种保守主义在过去是有道理的:人类程序员的时间和精力有限,面对一个庞大的遗留代码库,光是理解它就要花掉几个月,更别说重构了。
所以大家都选择能跑就别动,哪怕它是一坨屎山。
但现在不一样了,AI可以不知疲倦地探索这些老代码库,把它们的逻辑一点点梳理清楚。长期存在的软件可以被替换,而且摩擦成本大大降低。一个代码库可以被完全重写成新的语言,遗留软件可以在人类早就放弃的情况下被仔细研究和更新。
LLM进入后,理解成本骤降!
旧代码库成为详细提示词,智能体可以遍历、重构、生成测试、迁移语言。
历史包袱转化为结构化数据源。护城河的深度下降,替换摩擦显著降低。
语言迁移成为现实:C代码迁移至Rust成为趋势,COBOL遗产系统升级获得新动力。
LLM在翻译任务上尤其擅长,因为原代码提供详细上下文,同时也提供可对照的测试标准。
这种双重锚点使迁移成为可规模化工程,而非英雄式项目。
这种能力的解放是革命性的:想象一下那些用COBOL写的银行系统,那些用Fortran写的科学计算程序,它们支撑着我们的金融体系和科研基础设施,但懂这些语言的老程序员正在退休。以前这是个巨大的风险,现在AI可以接手这些系统的维护和升级。COBOL可以被翻译成现代语言,Fortran可以被重构得更高效。那些曾经被认为不可触碰的 legacy(遗产)系统,正在失去它们的护城河。
强类型语言崛起:心理因素退场,形式结构进场
编程语言的江湖,向来是“得人心者得天下”。Python 为啥火?因为简单易学,写起来像英语;JavaScript 为啥统治前端?因为浏览器天生支持,社区生态爆炸。这些成功背后,都是人性在驱动——人类喜欢直观、讨厌繁琐、渴望即时反馈。所以像 Haskell、Idris 这种强类型、高严谨的语言,虽然理论上更安全、更适合做形式化验证,但一直曲高和寡,因为对人类太不友好:写个 Hello World 都要先定义类型宇宙。
可现在,读者变了。未来读代码的主力不再是人类程序员,而是 AI 代码智能体。AI 可不在乎代码好不好读、语法漂不漂亮,它只关心逻辑是否严密、约束是否清晰。强类型语言恰恰提供了这种“结构化约束”——类型系统就像给代码装了 GPS 导航,AI 能顺着类型线索快速推理出正确实现,还能在生成时自动避开类型错误的坑。
当代码的主要读写者逐步转向机器人,人类心理因素权重下降。LLM对形式结构高度敏感,强类型、可验证、高性能语言更符合机器优势。静态检查提供明确约束,强化学习环境更容易建立奖励机制。
这直接导致语言格局洗牌:Rust 已经尝到甜头了,它的所有权模型和借用检查器,虽然让人类初学者抓狂,但对 AI 来说却是绝佳的“安全护栏”。AI 在 Rust 里生成内存安全代码的概率,远高于在 C 或 Python 里。
更极端的情况是,未来可能会出现专门为 LLM 优化的新语言——这种语言可能长得奇形怪状,充满人类看不懂的符号,但对 AI 来说却是逻辑天堂。
比如,它可能内置形式化验证指令,写一行代码就自动附带数学证明;
或者用图结构代替文本,让 AI 能直接操作代码的语义图而非字符流。
当然,完全抛弃人类也不现实,毕竟最终决策权还在人手里。所以未来的语言设计,可能会走“双模”路线:核心逻辑用 AI 友好的强类型语言写,外围交互层用人类友好的脚本语言包装。
但毫无疑问,语言设计的重心,正从“取悦人类”转向“服务 AI”,这场静悄悄的革命,会让很多现在的主流语言慢慢边缘化。
强类型语言也为形式化验证提供天然土壤:类型系统成为第一层证明框架。过去人类觉得学习曲线陡峭的语言,现在反而适配机器工作流。语言流行逻辑开始重排。
形式化验证成为必要条件
在 AI 主导的软件世界里,形式化验证(formal verification)不再是实验室里的阳春白雪,而是每个上线代码的“健康码”。
为什么?
因为 AI 生成的代码,表面看完美无缺,实则可能藏着人类都想不到的逻辑黑洞。
LLM 的训练数据来自互联网,里面混杂着无数错误示范和 hacky 写法,它学到的“常见模式”未必是“正确模式”。
更可怕的是,AI 擅长生成“看似合理”的幻觉代码——比如,它可能自信满满地写一个并发算法,声称无锁安全,但实际上在四核 CPU + 特定缓存策略下会死锁。这种 bug,靠传统测试根本抓不住,因为触发条件太刁钻。
唯一的解药,就是用数学方法证明代码在所有可能输入和环境下都满足规约。形式化验证能做到这一点:它把代码和需求都翻译成逻辑公式,用定理证明器(如 Coq、Isabelle)或模型检测器(如 TLA+)来验证一致性。
在AI主导开发环境中,形式化验证从锦上添花转为基础设施。可证明正确性成为安全阀。没有验证体系,重写速度越快,风险扩散越快。完整覆盖测试、边界分析、形式化模型检查成为核心环节。
LLM可以参与生成测试与推理,但数学证明与模型检查框架的重要性显著上升。软件正确性进入中心舞台,验证系统成为新的基础设施层。
这就引出了一个关键问题:在AI主导的世界里,形式化验证(formal verification)不再是可选项,而是必需品。
形式化验证是用数学方法证明代码正确性的技术,以前因为成本高、难度大,只在航空航天、医疗设备等关键领域使用。但现在,当AI可以大规模生成和重写代码的时候,我们需要更严格的保证机制。测试可以覆盖已知的情况,但形式化验证可以证明在所有可能的情况下代码都是正确的。这就像给软件装上了数学保险,确保它在任何极端情况下都不会崩溃。
这个转变对软件行业的影响是深远的。形式化验证工具和语言将获得前所未有的关注。Rust语言之所以火爆,很大程度上就是因为它在编译期就能保证内存安全,这是形式化验证的一种实践。未来我们会看到更多这样的语言,它们可能对人类来说更难学,但对AI来说却是完美的工作语言。
但是,形式化全面验证的成本依然很高,尤其对大型系统。
所以未来的趋势可能是“分层验证”:核心安全模块(比如加密、内存管理)做全形式化验证;外围业务逻辑用 AI 生成 + 模糊测试 + 轻量级契约(contracts)兜底。
但无论如何,验证会成为开发流程的强制环节,就像现在的 CI/CD 流水线一样不可或缺。可以预见,掌握 TLA+ 或 Dafny 的工程师,会比只会写 CRUD 的码农吃香得多。这场变革,会让软件工程从“经验驱动”真正转向“证据驱动”——代码好不好,不看 star 数,看 proof 数。
新语言的未来:机器最优语言的可能性
最后聊聊编程语言的未来。
人类在设计编程语言时面临各种权衡:表达力 vs 简洁性、安全性 vs 控制性、性能 vs 抽象层次、编译时 vs 运行时、显式 vs 简洁。这些权衡反映了人类的认知限制和需求。我们的大脑容量有限,所以需要简洁的语法;我们会犯错,所以需要安全机制;我们重视开发效率,所以喜欢高级抽象。
但AI会面临同样的权衡吗?很可能不会。从长远来看,创建新编程语言的原因将与过去人类驱动的动机显著不同。可能存在一种对LLM最优的编程语言,而且这种语言没有理由假设它会类似于人类所趋向的那些语言。
想象一下,一种专门为AI设计的语言可能是什么样子。它可能有极其严格的类型系统,每个函数的行为都能被形式化证明。它可能完全没有语法糖,因为AI不需要人类喜欢的那些简洁写法。它可能直接在某种中间表示上操作,跳过源代码这一层。它可能内置了概率推理、自动微分、形式化验证等特性,这些都是AI需要的,但人类程序员很少用到。
Rust已经推动安全与性能平衡,但仍然围绕人类可理解性设计。面向LLM的语言可能更加偏向形式系统与证明导向。语言演化动机将与过去几十年截然不同。
这种语言对人类来说可能完全不可读,就像机器码对人类一样。但这没关系,因为主要的读者和作者都是AI。人类只需要用自然语言描述需求,AI负责翻译成这种最优语言。这就像是软件开发的巴比伦塔,人类和AI说着完全不同的语言,但通过某种接口能够协作。