抽象革命
我花了25年多的时间编写代码、设计系统,并观察软件开发实践的演变。从创办自己的咨询公司和领导团队构建定制应用程序,到设计EdTech平台,现在在房地产科技领域构建代理编排系统,我见证了编程范式的转变和演进。但没有什么比大型语言模型更让我重新思考我们构建软件方式的根本本质。我们正站在一场变革的边缘,这场变革将从根本上改变不仅是谁编写代码,而且是计算本身如何被构建。
1、我们为自己建造的梯子
让我们从一个比你想象的更重要的简短历史课程开始。最初,有1和0。字面上。早期程序员通过拨动物理开关或打孔卡片来创建计算机可以直接执行的机器码。这是残酷、容易出错的工作,需要像机器一样思考。所以我们创建了汇编语言——一层薄薄的、人类可读的助记符,直接对应于机器指令。ADD、MOV、JMP。它仍然非常接近硬件,但至少我们能记住我们在做什么。
从汇编开始,我们爬得更高。我们创建了C,然后是C++,然后是Java、Python、JavaScript和数百种其他语言,每种语言都增加了更多的抽象、更多人类友好的结构。我们构建这些层次有一个非常具体的原因:每个之前的层次对人类来说都太难以有效使用。汇编对于构建复杂系统来说太乏味了。C需要太多手动内存管理。我们不断抽象,因为我们需要在更高层次上思考来管理复杂性。有史以来创建的每种编程语言都是为一个用户设计的:试图告诉计算机做什么的人类程序员。
这是我们当时没有完全意识到的事情:我们不仅仅是为了效率而创建抽象层。我们正在创建认知脚手架。我们构建的编程语言匹配了我们的思维方式、我们组织概念的方式、我们调试问题的方式。我们偏爱简单而非复杂,不是因为更简单的代码运行得更好——通常不是——而是因为我们能理解它。我们能在脑海中保持它。当生产环境在凌晨2点出现问题时,我们能推理它。我们从二进制到现代高级语言构建的整个抽象塔都是为了服务于人类认知的局限性和偏好。
2、当受众改变时,一切都会改变
现在我们正在向这个生态系统引入一种根本不同的程序员:大型语言模型。这就是事情变得有趣的地方,大多数人都没有完全考虑到。LLM没有我们相同的认知限制。它们不会疲劳。它们不会失去对复杂状态的跟踪。它们不需要"围绕"一个概念保持头脑。我们构建整个抽象塔的全部原因——使编程对人类大脑来说是可行的——根本不适用。
想想这真正意味着什么。当我今天构建代理编排系统时,我仍然使用为人类消费而设计的语言编写代码。我使用Python或JavaScript或项目需要的任何语言,将我的代码组织成对我和我的团队有意义的函数、类和模块。我们遵循DRY(不要重复自己)和SOLID等原则,不是因为它们产生最高效的机器码,而是因为它们产生人类可以维护的代码。但LLM生成代码不需要任何认知辅助。
理论上,LLM可以直接编写机器码。它可以在没有我们需要的中间层的情况下操作1和0。现在,我不是说这是最佳解决方案——我们稍后会讨论——但它说明了一个关键点。对我们来说必要的抽象级别可能对AI系统来说完全是任意的。我们建造了一个梯子来帮助我们从机器码爬到人类可读的程序。但如果你能飞,你就不需要梯子。
3、我们尚未发明的语言
这是我最近一直在思考的地方,当我与AI系统合作并观察它们如何与代码交互时。我相信我们将看到全新的编程范式出现——不是作为现有范式的增量改进,而是作为针对LLM原生开发优化的完全不同方法。
如果一种编程语言是为LLM编写和维护而设计的,而人类主要扮演审查和指导角色,它会是什么样子?它可能看起来不像我们今天拥有的任何东西。它可能不会以我们理解的方式优先考虑可读性。它可能拥抱对人类来说难以管理但对AI来说微不足道的复杂性。它可能在对我们来说毫无意义但对LLM处理和生成代码的方式来说完全自然的抽象级别上运行。
我不是在谈论通过添加更好的文档或更一致的语法使现有语言"AI友好"。我是在谈论从头开始重新思考应用程序架构。也许我们会看到基本构造不是函数和对象的语言,而是更符合LLM处理信息方式的东西——也许是基于模式的规范或意图声明,然后AI以任何最有效的低级形式实现它。也许"源代码"变得更像一个约束系统,定义程序应该做什么而不规定 exactly how,让AI以对人类理解不透明但可证明正确的方式优化实现。
4、灭绝问题
这是令人不安的问题:我们是否面临许多当前编程语言的灭绝?我认为答案可能是肯定的,尽管可能不是在大多数人担心的时间框架内。主要存在于使某些任务对人类更容易的语言——其中"对人类更容易"是主要设计目标——可能会过时。如果AI可以高效地使用更低级别或完全不同的范式,为什么要维护以人类为中心抽象的开销?
但这不仅仅是关于语言消失。这是关于我们如何思考软件构建的潜在革命。现在,我们处于一个尴尬的过渡阶段,我们使用AI在人类设计的语言中为人类可理解的架构编写人类风格的代码。这就像用汽车拉马车。它有效,但你没有利用新技术真正启用的东西。
我今天在代理编排中构建的系统已经在推动这些边界。当你协调多个AI代理来完成复杂任务时,你开始看到传统编程范式的局限性。对人类开发者来说有意义的编写和维护的代码,不一定是AI系统自然产生的代码,也不一定是AI驱动执行最有效的代码。
5、这对构建者意味着什么
如果你是一个认真的软件构建者——25年后,我当然认为自己是——这应该既令人兴奋又令人清醒。令人兴奋是因为我们可能正处于构建当前不可能或不切实际的东西的边缘。令人清醒的是,使我们有价值的技能可能正在我们脚下发生变化。
我不认为这意味着人类开发者变得过时。但我确实认为我们的角色发生了巨大变化。与其成为那些通过多层抽象辛勤地将想法转化为代码的人,我们可能变得更像建筑师和指挥家——设定方向、定义约束、评估输出,并编排进行详细实现工作的AI系统。我们操作的抽象层可能会显著向上跳跃。
在这个新环境中蓬勃发展的开发者将是那些既理解旧范式又理解新可能性的人。谁能在比我们当前高级语言支持的更高抽象层次上思考系统。谁能设计和评估软件架构,无论它们是由人类还是AI创建的。谁不仅理解如何编写代码,还理解如何定义软件应该完成什么并验证它确实如此。
6、革命现在开始
我们可能不会看到这些新的LLM原生语言和范式一夜之间出现。现有系统、现有代码库、现有知识中存在着巨大的惯性。但我相信变革是不可避免的。我们将看到对软件构建的完全不同方法的实验。有些会失败得惊人。有些会开辟全新的可能性。
我们在70年计算历史中构建的抽象塔是一个伟大的成就——但它是为我们建造的。现在我们正在添加具有不同能力和不同需求的新构建者。这座塔即将看起来非常不同。或者也许我们会发现我们根本不需要一座塔。也许软件开发的未来看起来不像爬上抽象梯子,而更像是在多维空间中操作,AI系统在任何对任务最有效的表示级别上工作。
我已经构建软件四分之一个世纪了,这是我见证过的最根本的转变。不是更快的计算机。不是云基础设施。甚至不是互联网本身。这是计算如何构建的基本模型的变化。我们所知道的编程语言可能面临灭绝。或者 transformation。或者与我们尚未想象的完全不同的范式共存。
无论哪种方式,如果你是一个构建者,现在是时候关注了。因为我们依赖的抽象——我们将想法转化为执行代码的整个概念框架——即将以将重塑我们所做一切的方式进化。
原文链接:The Abstraction Revolution: Why AI Will Fundamentally Transform How We Build Software
汇智网翻译整理,转载请标明出处