上世纪90年代末,我在德克萨斯大学奥斯汀分校读本科时,见证了计算机科学史上的两位巨匠同台演讲,至今仍历历在目:埃德斯特·迪克斯特拉和尼克劳斯·维尔特。迪克斯特拉邀请维尔特发表演讲。对于任何关注编程艺术的人来说,能够近距离聆听那些真正发明了我们思考代码方式的人讲话,是一种莫大的荣幸。
我与维尔特作品的缘分要追溯到更早的时期,当时我还远在奥斯汀之外。十几岁时在巴基斯坦,我偶然读到英国科技记者迪克·庞廷在《BYTE》杂志上介绍一种名为Oberon的语言和系统的文章。文章中那个简洁而强大的窗口环境截图,以及对精简编译器和集成系统的描述,深深印在我的脑海中。这就是作为工程产品的软件,精确且具有近乎建筑学的清晰度,与当时行业中开始盛行的那些喧嚣的、营销导向的软件推销形成了鲜明对比。
我做了社交媒体时代之前青少年们常做的事:写信。我给苏黎世联邦理工学院的尼克劳斯·维尔特和他的合作者约格·古特克内希特写信。令我惊讶的是,他们竟然回信了。维尔特邮寄给我关于Lilith和Oberon的文档。我至今还记得在拉合尔打开那些信封时的情景,读到了一个个人工作站的介绍,它的设计、微编码和完整编程都使用同一批人设计的语言来完成。硬件、操作系统、语言、编译器、工具,全部都是一个连贯愿景的组成部分。这证明了一个非常小但极其严谨的团队,如果拥有正确的工具和正确的理念,完全可以自上而下地构建整个计算环境。
几十年后,重读维尔特的论文《Modula-2和Oberon》让我重新审视那种理念,这次我有了后见之明的优势。这不仅仅是关于两种语言的历史记录,更是对软件发展方向的尖锐批判,也是软件在AI和大语言模型时代需要走向何方的路线图。
维尔特从Pascal到Modula-2再到Oberon的语言序列,通常在教科书中被总结为一个整齐的谱系。实际上,这是对单一问题日益紧迫的一系列回应:不断增长的复杂性。ALGOL给了我们块结构。Pascal提炼了迪克斯特拉严谨的结构化编程。Modula-2将模块化系统设计和严肃的分离编译引入了图景。Oberon在添加通过类型扩展实现最小对象导向风格的同时,将整个体系精简回来。在每一步中,维尔特都抵制了在已经沉重的结构上添加新想法的诱惑。他重新设计语言,使新概念能够存在于一个小而可教的核心之中。对他来说,设计的简洁性不是一种美学偏好,而是主要的设计约束,清晰性、特性的经济性、效率和可靠性都由此而来。
Lilith以及后来的Oberon就是认真对待这种约束的产物。大约在世界大部分地区仍然依赖16位小型机和分时终端的时候,维尔特在施乐帕洛阿尔托研究中心度过了一个学术假期,看到了Alto、Smalltalk、Mesa和第一批真正的个人工作站。然后他回到苏黎世,没有试图引进产品,而是为软件工程构建了自己的机器。Lilith配备了位片CPU、高分辨率位图显示器、多窗口、网络、鼠标和文档系统。整个软件栈都是用他自己的语言Modula-2编写的。这远不是在角落里运行的业余爱好操作系统,而是成为了苏黎世联邦理工学院严肃工作的日常环境。
通过Oberon和Ceres工作站,他和古特克内希特在更高层次上重复了这一壮举。两个人主要在业余时间工作,构建了一个具有模块和类型扩展的类型安全系统语言,一个基于文本和查看器的窗口环境,一个文件系统,一个编辑器和文档系统,一个编译器和运行时,网络和打印机。整个Oberon系统,包括编译器、编辑器和窗口系统,舒适地适配在不到200千字节的内存中,在25MHz处理器上可以在一分钟内重新编译自身。如今,你需要比这更多的资源才能在某些"轻量级"工具中打开一个空白文档。
关键不在于对微小二进制文件的怀念,而在于经济力量和认知控制。当你的整个技术栈足够小,能够装进一个小团队的头脑中时,你就能对它进行推理。你可以理解失败模式。你可以将其移植到新架构上,而无需拖拽未经检验的层级。你实际上可以证明关于它的性质。对于某些领域,这比另一层便利要有价值得多。
维尔特清楚地指出了什么打破了这种纪律。硬件容量爆炸式增长。内存从几百兆字节增长到几千兆字节。CPU时钟频率达到千兆赫范围。在人类尺度上,存储变得几乎免费。节约的动机消失了。系统增长到没有一个人能够完全理解它们。语言积累特性的速度比摆脱它们的速度更快。手册变得厚到足以阻止任何认真的阅读。编程从基于小而逻辑的框架的学科,滑向了通过试错、粘合你并不真正理解的层级,以及依靠你没有编写的代码来学习的东西。
任何试图在现代微服务架构中调试生产事故的人都知道这种感觉。你通过容器、框架、适配器、网关、边车和配置层的迷宫追踪错误,直到你不再确定实际逻辑在哪里。这种复杂性不是本质的。它是一种文化的涌现属性,这种文化将硬件视为草率设计的永久补贴。
维尔特的论点不是我们应该将历史冻结在Oberon工作站上。而是我们失去的纪律正是我们现在更需要的,因为我们正在将AI模型铺设在已经臃肿的技术栈上。这就是我们当前盲目地将大语言模型投向每个问题的倾向变得特别危险的地方,仅仅因为我们拥有它们。
大语言模型是令人惊叹的通用模式引擎。我使用它们并依赖它们构建。它们正在重塑我们写作、编程、分析和设计的方式。正确使用时,它们是人类能力的放大器。但行业采用它们的方式与维尔特警告的错误有着令人不安的相似性。简单的基于规则的引擎正被聊天界面取代。确定性解析器正成为对话式前端。应该是小型索引存储加精简服务层的内部数据查找,正转变为庞大的检索增强生成管道,配备向量数据库、编排框架和多阶段提示。团队跳过显式领域模型,因为"大语言模型会解决它"。
这感觉很高效。演示效果很好。它满足了组织说"我们在使用AI"的冲动。但隐藏的成本稍后显现。你在生产中遇到延迟和单次调用成本的瓶颈。当模型产生幻觉或误解上下文时,你继承了不透明的失败模式。你引入了新的安全和隐私风险,因为提示和内部状态不如函数和类型那样受到严格控制。你失去了机构知识,因为领域逻辑现在存在于临时提示片段中,而不是在清晰、可检查的系统中。
如果维尔特在这个时代进行设计,我怀疑他不会拒绝大语言模型。我猜他会坚持像使用硬件资源一样谨慎地使用它们。用于状态、规则和控制的小而明确定义的核心。在不需要全局通用性的地方使用窄而特定领域的模型或轻量级适配器。系统的符号部分和概率部分之间的清晰契约。并且绝对拒绝让"我们已经有了一个大模型"被视为架构懒惰的充分理由。
在我自己跨越AI、自主性和工业系统的工作中,我看到这是多么关键。我们已经期望具有数十亿参数的神经模型运行在没有人能够完全描述其内部行为的操作系统之上。我们部署依赖于代码栈的机器人技术和无人机,这些代码栈层次深到没有单个人真正从头到尾理解它们。现在我们在此之上堆叠通用大语言模型,并要求可信赖的行为。可解释性不仅关于Transformer内部发生的事情,还关于该Transformer运行的环境。如果你希望在现实世界中感知、决策和行动的系统表现可预测,你需要在它们之下有精简、良好理解的层级,以及关于为什么使用大语言模型的非常清晰的说明。
当我回想起在拉合尔的那个年轻学生,困惑于从苏黎世传到我这里的Oberon源代码时,最让我着迷的是整个系统可以排版并打印在一本书中的想法。不是作为玩具示例或伪代码,而是作为真实的实现。维尔特和古特克内希特希望学生通过阅读完整、高质量的程序来学习编程,就像土木工程专业学生研究经典桥梁和建筑一样。今天我们经常以相反的顺序培训开发者。从大型框架开始,复制模式,输入聊天窗口,快速发布,让测试和自动化工具捕捉人眼不再看到的东西。这种速度和杠杆作用确实有价值。但一些本质的东西已经丢失了。
我与维尔特和古特克内希特的通信,以及后来在德克萨斯大学奥斯汀分校在迪克斯特拉关注的目光下见到维尔特,是对这个领域纯粹版本的早期介绍。在那个版本中,语言设计、操作系统架构甚至硬件的形状都是关于如何控制复杂性和放大人类理解的一个对话的组成部分。今天重读维尔特,特别是在他去世后,很明显我们仍在与同样的问题作斗争。软件复杂性现在是一个系统性风险,表现为停机、安全故障和关键基础设施的脆弱性。如果我们现在随意地在所有这些之上覆盖巨大的大语言模型,而没有维尔特式的纪律,我们不是在解决问题,而是在加剧问题。
Oberon报告以一句话开头,这句话应该贴在每个严肃的软件和AI团队的墙上:让它尽可能简单,但不能更简单。商业激励、供应商锁定和营销周期推向相反方向。更多功能、更多配置、更多"内置AI"。复杂性被重新包装为护城河而不是成本。我们无法消除这一点。但我们可以决定我们的哪些系统必须以维尔特倡导的精神设计:小而清晰、数学上有根据、完全可理解。我们可以有意识地决定大语言模型在哪里是正确的工具,在哪里它是一个昂贵的干扰,阻碍了更简单、更安全的解决方案。
尼克劳斯·维尔特生于1934年,死于2024年1月1日,距他90岁生日仅几周。埃德斯特·迪克斯特拉生于1930年,死于2002年8月6日。他们现在都已离去,但他们提出的关于简洁性、结构和对我们系统的智力控制的问题,在万亿参数模型和无处不在的AI时代比以往任何时候都更紧迫。
Q&A
Q1:维尔特的软件设计理念核心是什么?
A:维尔特倡导简洁性优先的设计约束,认为软件应该尽可能简单但不能更简单。他通过Pascal、Modula-2到Oberon的语言演进,一直在对抗软件复杂性的增长,坚持将新概念融入小而可教的核心中,而不是在已有结构上简单叠加功能。
Q2:大语言模型的使用为什么需要谨慎?
A:虽然大语言模型是强大的通用模式引擎,但盲目使用会带来隐藏成本:生产中的延迟和成本瓶颈、不透明的失败模式、新的安全隐私风险,以及领域逻辑变得难以检查和维护。应该像维尔特使用硬件资源一样谨慎使用它们。
Q3:Oberon系统有什么特别之处?
A:Oberon系统展现了极致的工程精简:整个系统包括编译器、编辑器和窗口系统只需不到200千字节内存,在25MHz处理器上一分钟内就能重新编译自身。这证明了小团队通过严格的设计纪律,完全可以构建出功能完整且高效的计算环境。
好文章,需要你的鼓励
当超级计算机被压缩进一个比书本还小的盒子里,这画面有多炸裂?想象一下,你桌面上摆着的不是什么花瓶摆件,而是一台能跑200B参数AI推理的"超算怪兽"——这就是我们今天要聊的主角:华硕Ascent GX10。
Adobe研究院与UCLA合作开发的Sparse-LaViDa技术通过创新的"稀疏表示"方法,成功将AI图像生成速度提升一倍。该技术巧妙地让AI只处理必要的图像区域,使用特殊"寄存器令牌"管理其余部分,在文本到图像生成、图像编辑和数学推理等任务中实现显著加速,同时完全保持了输出质量。
香港科技大学团队开发出A4-Agent智能系统,无需训练即可让AI理解物品的可操作性。该系统通过"想象-思考-定位"三步法模仿人类认知过程,在多个测试中超越了需要专门训练的传统方法。这项技术为智能机器人发展提供了新思路,使其能够像人类一样举一反三地处理未见过的新物品和任务。