Automatic programming

Salvatore Sanfilippo

自动编程

一段时间以来,我在自己的 YouTube 频道中一直用“Automatic Programming(自动编程)”来称呼借助 AI 编写软件的过程(我相信,这个说法很快就会直接变成“编写软件”)。

也许你没有注意到,在使用相同 LLM 的情况下,Automatic Programming 产生的结果会因引导这一过程的人不同而大相径庭;人的直觉、设计、持续调整,以及对软件的理解,都会发挥作用。

请不要再说“Claude 用凭感觉编程给我写了这个软件”。vibe coding(凭感觉编程)指的是完全不参与软件开发过程、仅靠 AI 生成软件。你只用非常笼统的语言描述自己的需求,LLM 就会根据训练内容、恰好在这次运行中占主导地位的特定 sampling(采样)结果等因素,自发地产生它碰巧想到的第一个想法、设计或代码。凭感觉编程者最多只会反馈哪些东西无法运行,或者哪些地方不符合自己的预期。

当这个过程是真正的软件生产,而你清楚其中发生的一切时,请记住:这是你*正在*编写的软件。此外还要记住,pre-training(预训练)数据虽然不是 LLM 学习的唯一部分(RL 的权重也很大),但它是由人类创造的,所以我们并不是在挪用什么别的东西。我们完全可以把 AI 生成的代码视为“我们的”,我们有权这样做。实际上,预训练是我们集体赠予的礼物,让许多人得以完成原本绝不可能完成的事情——就好像我们以某种方式连接成了一个集体意识。

话虽如此,如果说 vibe coding 是一种在不太理解发生了什么的情况下生产软件的过程(它有其存在的价值,也让软件生产更加民主化,所以我完全认可),那么 Automatic Programming 指的就是在 AI 协助下生产软件的过程:这种软件力求高质量,并严格遵循生产者对软件的构想(这种构想是多层次的:既可以涉及如何具体完成某些事情,也可以在更高层次上介入,告诉 AI 如何编写某个函数)。当然,过程中一个根本性的部分还包括*做什么*。

我是程序员,我使用 Automatic Programming。以这种方式生成的代码属于我。我的代码、我的输出、我的作品。我和你都可以为此感到自豪。

如果你还没有完全信服,不妨想想 Redis。Redis 并没有多少技术上的新颖之处,尤其是在最初,它不过是一些基本数据结构和网络代码的组合,任何称职的系统程序员都能写出来。那么,它为什么会成为一款非常有用的软件?因为其中蕴含着思想和愿景。

如今,编程已经可以自动完成,但愿景还不行。