1962年,当肯尼斯·艾佛森在IBM的实验室里写下那套布满特殊符号的数学记号时,他或许并未预见到,这套原本只为简化矩阵运算而生的符号系统,会在未来几十年里成为编程世界中最神秘、最迷人、也最令人敬畏的存在。APL——A Programming Language,这门以希腊字母和古怪符号为血肉的语言,在大型机统治的时代里,如同一道来自异次元的闪电,劈开了传统编程语言的藩篱。它让一行代码能完成其他语言几十行的工作,让金融分析师在键盘上敲出天书般的指令,让计算机科学家在它面前既惊叹又困惑。今天,当我们站在软件博物馆的展柜前,透过泛黄的IBM 2741终端打字机的残骸,依然能感受到APL那独特的、近乎宗教般的魔力。\n\n要理解APL的诞生,我们必须回到20世纪50年代末到60年代初的计算机世界。那时,计算机还是庞然大物,占据整间屋子,以真空管和磁芯存储器为心脏。编程语言的主流是FORTRAN、COBOL和ALGOL,它们用英语单词和数学符号的混合体来表达逻辑,但每一行代码都只能操作单个数字或字符串。如果你要对一个包含100个数字的数组进行求和,你必须编写一个循环,逐次累加,或者调用一个子程序。这种逐元素操作的范式,在处理日益复杂的数据分析任务时,显得笨拙而低效。与此同时,数学家们正在用矩阵和向量进行高维运算,他们需要的是一种能够直接表达“对整个数组进行操作”的语言,而不是被迫将数学思维翻译成计算机的逐步骤指令。\n\n正是在这样的背景下,肯尼斯·艾佛森开始了他的探索。艾佛森1920年出生于加拿大阿尔伯塔省的一个农场,早年靠打零工和自学完成了学业。他在哈佛大学获得应用数学博士学位,1955年加入IBM,在研究中心负责数学和编程语言的研究。艾佛森有一个执念:数学记号本身就应该是一种编程语言。他观察到,数学家们用符号如∑(求和)和∏(乘积)来表达对一整个序列的操作,但计算机语言却强迫程序员用循环来模拟这些操作。他认为,如果能让计算机直接理解这些符号,编程就会变得简洁、优雅,且更接近人类的数学思维。\n\n1962年,艾佛森出版了一本名为《A Programming Language》的书,这不仅是语言的名称来源,也是APL的原始设计文档。在这本书里,他定义了一套完整的符号系统,包括希腊字母(如表示生成整数序列)、特殊运算符(如⍴表示重塑数组形状,⌹表示矩阵除法),以及一套基于数组的运算规则。这套记号最初并不是为了在计算机上运行,而是作为一种“描述工具”,用来精确地表达算法和数据处理过程。艾佛森在IBM内部用它来描述计算机系统的行为,比如他曾经用APL记号来定义IBM System/360的指令集架构,这让同事和客户都感到困惑——因为没人看得懂这些奇怪的符号。\n\n然而,艾佛森坚信这套记号的力量。他有一个著名的论点:“符号的密度与思维的深度成正比。”在他看来,一个复杂的数组运算,如果用FORTRAN需要写20行循环和条件判断,那么用APL的一个符号就能表达,因为那个符号浓缩了数学的本质。这种极简主义的设计理念,在当时的编程语言中极为罕见。\n\n真正让APL从纸面走向计算机的,是1966年。在IBM的沃森研究中心,艾佛森与他的同事阿迪·法尔科夫(Adin Falkoff)和拉里·布里德(Larry Breed)等人一起,在IBM System/360大型机上实现了第一个APL解释器,命名为APL\\360。这个解释器运行在OS/360操作系统之上,支持分时共享——这意味着多个用户可以通过远程终端同时使用APL。在当时,分时系统本身就是一种革命,它让程序员不再是排队提交穿孔卡片,而是坐在终端前,实时地与计算机对话。APL\\360的交互式特性,让它成为了“一次击键的编程语言”:你敲下一个符号,解释器立即计算并显示结果。这种即时反馈的体验,在1960年代是令人震撼的。\n\nAPL\\360的技术架构在当时堪称天才之作。它采用了基于栈的解释器设计,所有数据都是多维数组,包括标量(被视为0维数组)。运算符可以作用于任意维度的数组,并且支持运算符重载——同一个符号,根据上下文可以执行不同的操作。例如,符号+在APL中不仅可以做加法,还可以用于数组的逐元素相加、矩阵乘法(通过与其他运算符组合)等。这种设计使得APL的代码密度极高,但也带来了可读性的问题。一个典型的APL程序看起来就像是一串希腊字母和古怪符号的随机排列,比如:\n\n\ APL 的影响远超一门小众语言。1979 年,肯尼斯·艾佛森因在程序设计语言理论与表示法上的贡献获得图灵奖,APL 正是其核心成果。此后,他的思想在 1990 年催生了无特殊符号、纯 ASCII 的 J 语言,又在金融与实时数据领域衍生出 K 与 Q(即 kdb+ 数据库),至今仍是高频交易系统的底层利器。APL 一脉相承的数组即一等公民理念,还深刻影响了 MATLAB、NumPy 乃至现代 GPU 并行计算——对整个数组一次操作的思维,正是今日大数据与人工智能运算的直觉基础。耐人寻味的是,APL 当年需要专门定制的键盘来敲出希腊字母与特殊符号,那块带独特字符的键盘本身就是一段视觉奇观;而它极致的代码密度,既成就了行顶百行的传奇,也筑起了陡峭的学习门槛。APL 用极致证明了:好的表示法能解放思维,但也可能把门外的人永远挡在门外,这恰是编程语言哲学里最迷人的张力。
APL (A Programming Language)
用独特符号表达数学思维,极简而强大的数组语言。
展品故事
详细介绍
1962年,当肯尼斯·艾佛森在IBM的实验室里写下那套布满特殊符号的数学记号时,他或许并未预见到,这套原本只为简化矩阵运算而生的符号系统,会在未来几十年里成为编程世界中最神秘、最迷人、也最令人敬畏的存在。APL——A Programming Language,这门以希腊字母和古怪符号为血肉的语言,在大型机统治的时代里,如同一道来自异次元的闪电,劈开了传统编程语言的藩篱。它让一行代码能完成其他语言几十行的工作,让金融分析师在键盘上敲出天书般的指令,让计算机科学家在它面前既惊叹又困惑。今天,当我们站在软件博物馆的展柜前,透过泛黄的IBM 2741终端打字机的残骸,依然能感受到APL那独特的、近乎宗教般的魔力。
要理解APL的诞生,我们必须回到20世纪50年代末到60年代初的计算机世界。那时,计算机还是庞然大物,占据整间屋子,以真空管和磁芯存储器为心脏。编程语言的主流是FORTRAN、COBOL和ALGOL,它们用英语单词和数学符号的混合体来表达逻辑,但每一行代码都只能操作单个数字或字符串。如果你要对一个包含100个数字的数组进行求和,你必须编写一个循环,逐次累加,或者调用一个子程序。这种逐元素操作的范式,在处理日益复杂的数据分析任务时,显得笨拙而低效。与此同时,数学家们正在用矩阵和向量进行高维运算,他们需要的是一种能够直接表达“对整个数组进行操作”的语言,而不是被迫将数学思维翻译成计算机的逐步骤指令。
正是在这样的背景下,肯尼斯·艾佛森开始了他的探索。艾佛森1920年出生于加拿大阿尔伯塔省的一个农场,早年靠打零工和自学完成了学业。他在哈佛大学获得应用数学博士学位,1955年加入IBM,在研究中心负责数学和编程语言的研究。艾佛森有一个执念:数学记号本身就应该是一种编程语言。他观察到,数学家们用符号如∑(求和)和∏(乘积)来表达对一整个序列的操作,但计算机语言却强迫程序员用循环来模拟这些操作。他认为,如果能让计算机直接理解这些符号,编程就会变得简洁、优雅,且更接近人类的数学思维。
1962年,艾佛森出版了一本名为《A Programming Language》的书,这不仅是语言的名称来源,也是APL的原始设计文档。在这本书里,他定义了一套完整的符号系统,包括希腊字母(如表示生成整数序列)、特殊运算符(如⍴表示重塑数组形状,⌹表示矩阵除法),以及一套基于数组的运算规则。这套记号最初并不是为了在计算机上运行,而是作为一种“描述工具”,用来精确地表达算法和数据处理过程。艾佛森在IBM内部用它来描述计算机系统的行为,比如他曾经用APL记号来定义IBM System/360的指令集架构,这让同事和客户都感到困惑——因为没人看得懂这些奇怪的符号。
然而,艾佛森坚信这套记号的力量。他有一个著名的论点:“符号的密度与思维的深度成正比。”在他看来,一个复杂的数组运算,如果用FORTRAN需要写20行循环和条件判断,那么用APL的一个符号就能表达,因为那个符号浓缩了数学的本质。这种极简主义的设计理念,在当时的编程语言中极为罕见。
真正让APL从纸面走向计算机的,是1966年。在IBM的沃森研究中心,艾佛森与他的同事阿迪·法尔科夫(Adin Falkoff)和拉里·布里德(Larry Breed)等人一起,在IBM System/360大型机上实现了第一个APL解释器,命名为APL\\360。这个解释器运行在OS/360操作系统之上,支持分时共享——这意味着多个用户可以通过远程终端同时使用APL。在当时,分时系统本身就是一种革命,它让程序员不再是排队提交穿孔卡片,而是坐在终端前,实时地与计算机对话。APL\\360的交互式特性,让它成为了“一次击键的编程语言”:你敲下一个符号,解释器立即计算并显示结果。这种即时反馈的体验,在1960年代是令人震撼的。
APL\\360的技术架构在当时堪称天才之作。它采用了基于栈的解释器设计,所有数据都是多维数组,包括标量(被视为0维数组)。运算符可以作用于任意维度的数组,并且支持运算符重载——同一个符号,根据上下文可以执行不同的操作。例如,符号+在APL中不仅可以做加法,还可以用于数组的逐元素相加、矩阵乘法(通过与其他运算符组合)等。这种设计使得APL的代码密度极高,但也带来了可读性的问题。一个典型的APL程序看起来就像是一串希腊字母和古怪符号的随机排列,比如:
\
深度研究
影响力评价
对技术发展和工程实践的推动程度
对商业模式和市场格局的影响深度
在科技文化和社会层面的持久影响力
用户群体的广度和普及程度