专栏名称: 猿大侠
猿大侠,既然选择了,就一定成为大侠! 小程序、小游戏、Google、苹果、职场、前沿技术分享,一起成长。
目录
相关文章推荐
锦缎  ·  巴菲特2025年股东信千字脱水版 ·  8 小时前  
企业专利观察  ·  说明书修改超范围,专利局认定专利继续维持有效 ·  2 天前  
企业专利观察  ·  说明书修改超范围,专利局认定专利继续维持有效 ·  2 天前  
知识产权那点事  ·  关于杭州知识产权法庭、杭州破产法庭、杭州国际 ... ·  4 天前  
51好读  ›  专栏  ›  猿大侠

被哈佛扫地出门,他发明了让无数程序员痛不欲生的编程语言,获得了计算机界最高奖......

猿大侠  · 公众号  ·  · 2024-10-08 12:08

正文

肯尼斯·艾弗森在哈佛大学当了5年助教,没有获得终身教职。



院长不提拔他的一个重要原因就是:这5年,除了一本小书之外,什么都没出版!


那本小书后来帮助他获得了计算机界最高奖:图灵奖。



这本小书的名字叫做《 A Programming Language



(注:这个故事是另外一个图灵奖获得者布鲁克斯讲的,我搜了一下,《A Programming Language》这本小书其实在哈佛大学的时候并没有出版,艾弗森当时只是发明了一套符号系统,主要用于教学)


A Programming Language 缩写是 APL , 它真的是一个编程语言!


这个名字实在是搞笑,不由得让人想起周星驰的电影《鹿鼎记》中的“有间客栈”。




一个编程语言,为什么有这么大的影响力,竟然能获得图灵奖?


有人认为 APL是世界上最丑陋的编程语言 ,因为用它写出的代码实在是太难懂了。


下面是个康威生命游戏的代码,一行就能实现极为复杂的功能。



看看这奇奇怪怪的符号,甚至得配一个专用的键盘,要不然你根本就敲不出来。


还有人认为它是有史以来最重要的编程语言,它本质上是函数式的,迫使程序员进行并行思考,它支持任意形状和大小的矩阵,提供了任何你能想象得到的运算符进行选择,拆分,连接,投影,重塑等各种运算,几天内就可以用APL写一个SQL解释器,没有任何语言能和它媲美。


其实, 艾弗森并不是为了编写计算机程序而设计APL的,他是为了更好地表达数学思想和算法 ,这使得APL具有一种非常独特的符号体系,如希腊字母、箭头、圆圈等。


比如数组a = [1,2,3,4] 在APL 中是这么表示的:

A1 2 3 4


两个数组相加:

A ← 1 2 3 4B ← 5 6 7 8A + B ⍝ 输出 6 8 10 12

创建一个从1到5的数组:

n ← ⍳ 5  ⍝ n的值是[1,2,3,4,5]

把数组n的每个元素做平方:

n * 2     ⍝ 结果是[1,4,9,16,25]APL中星号表达的是平方,不是乘法


对数组n中每个元素相加,求和:

+/ n      ⍝ 结果是 1+2+3+4+5 = 15 ,“/”是规约运算,它使得左侧的运算符(+)应用到右侧所有元素

对数组n求平均值

(+/ n) ÷ ⍴n     ⍝ ⍴ 是求一个数组的个数

再来一个复杂一点儿的:生成6个随机数,范围在1到999之间,并按照升序显示

x [ ⍋ x ← 6 ? 40 ]

APL对矩阵运算和高维数组操作非常简洁和直观,假设我们有两个矩阵A和B


我们要计算两个矩阵的乘积C = A  × B

A ← 2 2 ⍴ 1 2 3 4B ← 2 2 ⍴ 5 6 7 8C ← A +.× B

解释一下:

(1) 2 2 1 2 3 4 将一维数组 1 2 3 4 重新排列为一个 2x2 的矩阵 A。⍴ 是reshape的意思。


(2) 2 2 5 6 7 8 将一维数组 5 6 7 8 重新排列为一个 2x2 的矩阵 B。


(3) +.× 是APL的内置运算符,用于矩阵乘法。



一旦你记住了这些符号,代码就变得非常简洁。


APL的核心就是数组,它甚至可以叫做“ Array Programming Language ”。


我们回过头来说艾弗森,他“黯然”离开哈佛大学以后,加入了IBM的研究院,薪水也翻了一番。


在IBM,弗雷德·布鲁克斯(System/360架构师,图灵奖获得者,《人月神话》作者)建议他: 坚持做你真正想做的事情,管理层非常需要新想法,只要不是非常疯狂的想法,都会得到支持。


于是艾弗森就继续发展自己在哈佛大学创建的符号系统,这一发展不得了,竟然变成了一门计算机编程语言。


1964年,IBM推出著名的大型机System/360,APL也在System/360上实现了。


当时的编程语言,基本上都是批处理的,就是说把代码输入计算机,“等半天”后查看运行结果。



但是APL是一套完整的交互式编程环境,程序员可以输入 APL 语句并立即得到响应。


程序可以在数十人同时使用的计算机上定义、调试、运行和保存。


对于许多曾经饱受使用打孔卡进行批处理编程之苦的程序员来说,APL绝对是一大福音。







请到「今天看啥」查看全文