肯尼斯·艾弗森在哈佛大學當了5年助教,沒有獲得終身教職。
院長不提拔他的一個重要原因就是:這5年,除了一本小書之外,什么都沒出版!
那本小書后來幫助他獲得了計算機界最高獎:圖靈獎。
這本小書的名字叫做《A Programming Language》
(注:這個故事是另外一個圖靈獎獲得者布魯克斯講的,我搜了一下,《A Programming Language》這本小書其實在哈佛大學的時候并沒有出版,艾弗森當時只是發明了一套符號系統,主要用于教學)
A Programming Language 縮寫是APL, 它真的是一個編程語言!
這個名字實在是搞笑,不由得讓人想起周星馳的電影《鹿鼎記》中的“有間客棧”。
一個編程語言,為什么有這么大的影響力,竟然能獲得圖靈獎?
有人認為APL是世界上最丑陋的編程語言,因為用它寫出的代碼實在是太難懂了。
下面是個康威生命游戲的代碼,一行就能實現極為復雜的功能。
看看這奇奇怪怪的符號,甚至得配一個專用的鍵盤,要不然你根本就敲不出來。
還有人認為它是有史以來最重要的編程語言,它本質上是函數式的,迫使程序員進行并行思考,它支持任意形狀和大小的矩陣,提供了任何你能想象得到的運算符進行選擇,拆分,連接,投影,重塑等各種運算,幾天內就可以用APL寫一個SQL解釋器,沒有任何語言能和它媲美。
其實,艾弗森并不是為了編寫計算機程序而設計APL的,他是為了更好地表達數學思想和算法,這使得APL具有一種非常獨特的符號體系,如希臘字母、箭頭、圓圈等。
比如數組a = [1,2,3,4] 在APL 中是這么表示的:
A ← 1 2 3 4
兩個數組相加:
A ← 1 2 3 4
B ← 5 6 7 8
A + 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 4
B ← 2 2 ? 5 6 7 8
C ← 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絕對是一大福音。
IBM肯定不會放過這樣的商業機會,開發了很多軟件和庫,吸引用戶使用APL,比如
Starmap :一組繪制恒星和行星位置的函數
IBGS:交互式商業模擬游戲
Graphpak:交互式圖形包
MINIPERT:項目管理的關鍵路徑方法 (CPM) 系統
APL 財務規劃系統
APL 計量經濟學規劃語言
一旦掌握APL,編寫程序的速度就非常快,這讓它在建模和原型方面有重要價值。
1973年,Continental Can公司需要給旗下的21家制造廠提供一個庫存管理程序,他們的FORTRAN程序員干了一年也沒搞定,后來STSC公司的一個銷售出馬,用APL Plus一周內就把一個可用的工作模型給弄好了。
可以說,在20世紀60年代末到80年代初的大型機上,APL編程語言占有重要的一席之地。
1980年,在IBM工作了20年的艾弗森離開IBM,回到加拿大,加入IP Sharp Associates公司,從事APL語言的咨詢和服務工作。
1990年,為了解決APL中的特殊字符問題,艾弗森和華裔科學家Roger Hui一起發明了J語言,J語言完全使用基本ASCII字符集。
80年代以后,隨著個人計算機的興起,Basic、Pascal、C語言等新貴開始統治市場,APL慢慢地退居到了科學計算、統計、保險精算和金融等領域,APL的符號性質和數組功能使其受到領域專家和數據科學家的歡迎,他們不具備程序員的技能。
那么,都2024年了,APL值得我們去了解嗎?
首屆圖靈獎獲得者Alan J. Perlis說過:一門語言如果不能影響你編程的思維方式,是不值得了解的。
而APL就是一門能影響你編程思維的語言,強烈建議去Try APL這個網站去玩一下:https://tryapl.org/
全文完,覺得不錯的話點個贊或者在看吧!
近期爆文:
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.