未来的“安装”可能不是运行一个脚本,而是告诉AI你想做什么,然后它自己去折腾——这远比它帮你写代码更颠覆。

核心观点:真正激进的变化不是AI辅助写代码,而是AI让“写代码”这件事本身变得可被自然语言描述替代,这正在催生一种新的应用范式。

在AI产品的热潮中,最主流的叙事一直是“AI辅助编程”:GitHub Copilot帮你自动补全代码,Cursor让你用自然语言生成函数,于是人们惊呼“程序员要失业了”。但如果我们只盯着这个角度,就会错过一个更根本的变化——不是AI在帮你写代码,而是“写代码”这整个概念正在被消解。

Andrej Karpathy在最近一次Sequoia活动中提到了三个例子,每一个都值得细品。第一个叫“menugen”,这是一个完全由LLM驱动的应用,没有一行传统代码:输入一张图片,输出一张图片,整个过程完全由模型自主完成。第二个更极端:用markdown文件替代bash脚本。你想在服务器上装一个软件,不再需要写一个复杂的、需要处理各种边界情况的shell脚本,而是写一段自然语言的安装说明,然后直接扔给AI去执行。第三是LLM知识库——处理来自任意来源、任意格式的非结构化数据,这用传统代码几乎不可能实现。

这三个例子的共同点是什么?它们不是在加速已有的软件开发流程,而是在定义一种全新的应用类型。传统软件的核心是确定性逻辑:if-else分支、循环、函数调用,每一条路径都是工程师预先设计好的。而AI原生应用的核心是“描述性逻辑”:你不是告诉系统每一步怎么走,而是告诉它你想要什么结果,然后让模型自己去探索路径。这两者之间的区别,就像给一个人一份地图和一个指南针的区别。

这种转变的激进之处在于,它动摇了软件开发最根本的前提。过去三十年,软件工程的所有方法论——测试驱动开发、代码审查、持续集成——都建立在“源代码是可读、可调试、可验证的”这一假设之上。但当你用自然语言描述功能时,你失去了对内部逻辑的精细控制。你不知道AI会走哪条路,甚至不知道它是否会到达目的地。这听起来像是噩梦,但对于某些特定的用例,这恰恰是解放。

考虑“安装脚本”这个例子。传统的bash脚本必须考虑到各种可能的系统环境:不同的包管理器、不同的文件系统布局、不同的权限配置。一个健壮的脚本可能需要数百行代码来处理这些边缘情况。但如果你只是写一段自然语言的描述,然后让AI去理解和适配,那么维护负担就从“程序员调试脚本”变成了“AI动态适配环境”。这不是把同一个工作做得更好,而是用完全不同的方式完成了同一个目标。

这种新范式的拥护者会指出,它极大地降低了软件开发的门槛。过去,你想做一个自动化的数据处理流程,需要掌握编程、API、调度工具等一系列技能。现在,你只需要能用自然语言清晰地描述你的需求。这听起来像是梦想,但确实正在发生。已经有实验性的项目通过纯自然语言描述实现了复杂的E-commerce后端逻辑,虽然不是生产级,但概念验证已经足够令人震惊。

反对者则有三条核心质疑。第一,不可靠性。自然语言描述天然具有歧义性,AI可能理解错,而且由于LLM的随机性,同样的描述两次运行可能得到不同结果。第二,不可调试性。当系统出错时,你无法像阅读代码那样逐行追踪错误来源,因为根本不存在“行”的概念。第三,安全风险。让AI直接去执行安装操作,等于把系统的root权限交给了一个概率模型,这在安全敏感的场合是不可接受的。

这些质疑都有道理,但它们可能只是暂时性的问题。随着模型能力的提升和运行时工程的发展(如前文讨论的长期代理可靠性问题),不可靠性可以被大幅降低。不可调试性可以通过引入“执行日志”和“思考链可视化”来缓解。安全风险则可以通过权限分级和沙箱技术来管控。更重要的是,这些问题的存在并不意味着我们应该放弃这个方向,而是意味着我们需要发明新的工程方法来适应它。

从历史的角度看,每一次编程范式的跃迁都经历了类似的阵痛。从机器码到汇编语言,从汇编到高级语言,从结构化编程到面向对象,每一次转变都被当时的工程师批评为“效率低下”或“不可控”。但每一次,新的范式最终都因其在表达能力和开发效率上的优势而胜出。今天,自然语言作为编程接口正在经历同样的过程。它的初期版本确实粗糙,但方向是明确的。

那么,这种新范式会对行业产生什么实际影响?最直接的冲击是“软件工程师”这个角色的分化。一部分工程师将继续在底层做传统代码开发,专注于性能敏感、安全关键、确定性要求极高的系统。另一部分则会转型为“AI交互设计师”,他们的工作不是写代码,而是设计精准的、无歧义的、可被AI高效执行的描述性指令。这类似于产品经理和工程师的融合,但更强调对AI行为模式的深度理解。

另外,软件产品的形态也会变化。传统的“安装”概念将逐步被“技能注入”取代。你不是去下载一个App,而是把你的需求描述给一个通用的AI平台,它会动态组合出你需要的功能。这听起来有些遥远,但已经有人在实验了。Karpathy提到的“.md skills”就是一个生动的例子:安装包不是二进制文件,而是markdown文件,里面写的不是代码,而是自然语言的说明。这听起来像是玩笑,但仔细想想,它和今天我们用scoop或brew安装软件的思路并没有本质区别,区别只在于“解释者”从包管理器的确定性脚本变成了AI。

当然,这不是一夜之间会发生的事情。从实验到生产,还有很长的路要走。但重要的是,我们已经看到了那扇门。它打开的不是一个更快的编码工具,而是一个全新的应用类别。对于所有关注AI的人来说,这可能是比“AI能写什么代码”更有趣的问题——当代码本身不再是最重要的表达方式时,我们如何定义和构建软件?