
|
肯尼斯·艾弗森在哈佛大學(xué)當(dāng)了5年助教,沒有獲得終身教職。
院長不提拔他的一個重要原因就是:這5年,除了一本小書之外,什么都沒出版! 那本小書后來幫助他獲得了計算機界最高獎:圖靈獎。
這本小書的名字叫做《A Programming Language》
(注:這個故事是另外一個圖靈獎獲得者布魯克斯講的,我搜了一下,《A Programming Language》這本小書其實在哈佛大學(xué)的時候并沒有出版,艾弗森當(dāng)時只是發(fā)明了一套符號系統(tǒng),主要用于教學(xué)) A Programming Language 縮寫是APL, 它真的是一個編程語言! 這個名字實在是搞笑,不由得讓人想起周星馳的電影《鹿鼎記》中的“有間客?!?。
一個編程語言,為什么有這么大的影響力,竟然能獲得圖靈獎? 有人認為APL是世界上最丑陋的編程語言,因為用它寫出的代碼實在是太難懂了。 下面是個康威生命游戲的代碼,一行就能實現(xiàn)極為復(fù)雜的功能。
看看這奇奇怪怪的符號,甚至得配一個專用的鍵盤,要不然你根本就敲不出來。
還有人認為它是有史以來最重要的編程語言,它本質(zhì)上是函數(shù)式的,迫使程序員進行并行思考,它支持任意形狀和大小的矩陣,提供了任何你能想象得到的運算符進行選擇,拆分,連接,投影,重塑等各種運算,幾天內(nèi)就可以用APL寫一個SQL解釋器,沒有任何語言能和它媲美。 其實,艾弗森并不是為了編寫計算機程序而設(shè)計APL的,他是為了更好地表達數(shù)學(xué)思想和算法,這使得APL具有一種非常獨特的符號體系,如希臘字母、箭頭、圓圈等。 比如數(shù)組a = [1,2,3,4] 在APL 中是這么表示的: A ← 1 2 3 4兩個數(shù)組相加:
創(chuàng)建一個從1到5的數(shù)組: n ← ? 5 ? n的值是[1,2,3,4,5]把數(shù)組n的每個元素做平方: 對數(shù)組n中每個元素相加,求和: +/ n ? 結(jié)果是 1+2+3+4+5 = 15 ,“/”是規(guī)約運算,它使得左側(cè)的運算符(+)應(yīng)用到右側(cè)所有元素對數(shù)組n求平均值 再來一個復(fù)雜一點兒的:生成6個隨機數(shù),范圍在1到999之間,并按照升序顯示 x [ ? x ← 6 ? 40 ]APL對矩陣運算和高維數(shù)組操作非常簡潔和直觀,假設(shè)我們有兩個矩陣A和B
我們要計算兩個矩陣的乘積C = A × B
解釋一下: (1) 2 2 ? 1 2 3 4 將一維數(shù)組 1 2 3 4 重新排列為一個 2x2 的矩陣 A。? 是reshape的意思。 (2) 2 2 ? 5 6 7 8 將一維數(shù)組 5 6 7 8 重新排列為一個 2x2 的矩陣 B。 (3) +.× 是APL的內(nèi)置運算符,用于矩陣乘法。
一旦你記住了這些符號,代碼就變得非常簡潔。 APL的核心就是數(shù)組,它甚至可以叫做“Array Programming Language”。 我們回過頭來說艾弗森,他“黯然”離開哈佛大學(xué)以后,加入了IBM的研究院,薪水也翻了一番。 在IBM,弗雷德·布魯克斯(System/360架構(gòu)師,圖靈獎獲得者,《人月神話》作者)建議他:堅持做你真正想做的事情,管理層非常需要新想法,只要不是非常瘋狂的想法,都會得到支持。” 于是艾弗森就繼續(xù)發(fā)展自己在哈佛大學(xué)創(chuàng)建的符號系統(tǒng),這一發(fā)展不得了,竟然變成了一門計算機編程語言。 1964年,IBM推出著名的大型機System/360,APL也在System/360上實現(xiàn)了。
當(dāng)時的編程語言,基本上都是批處理的,就是說把代碼輸入計算機,“等半天”后查看運行結(jié)果。
但是APL是一套完整的交互式編程環(huán)境,程序員可以輸入 APL 語句并立即得到響應(yīng)。 程序可以在數(shù)十人同時使用的計算機上定義、調(diào)試、運行和保存。 對于許多曾經(jīng)飽受使用打孔卡進行批處理編程之苦的程序員來說,APL絕對是一大福音。 IBM肯定不會放過這樣的商業(yè)機會,開發(fā)了很多軟件和庫,吸引用戶使用APL,比如 Starmap :一組繪制恒星和行星位置的函數(shù) IBGS:交互式商業(yè)模擬游戲 Graphpak:交互式圖形包 MINIPERT:項目管理的關(guān)鍵路徑方法 (CPM) 系統(tǒng) APL 財務(wù)規(guī)劃系統(tǒng) APL 計量經(jīng)濟學(xué)規(guī)劃語言 ...... 一旦掌握APL,編寫程序的速度就非???,這讓它在建模和原型方面有重要價值。 1973年,Continental Can公司需要給旗下的21家制造廠提供一個庫存管理程序,他們的FORTRAN程序員干了一年也沒搞定,后來STSC公司的一個銷售出馬,用APL Plus一周內(nèi)就把一個可用的工作模型給弄好了。 可以說,在20世紀60年代末到80年代初的大型機上,APL編程語言占有重要的一席之地。 1980年,在IBM工作了20年的艾弗森離開IBM,回到加拿大,加入IP Sharp Associates公司,從事APL語言的咨詢和服務(wù)工作。 1990年,為了解決APL中的特殊字符問題,艾弗森和華裔科學(xué)家Roger Hui一起發(fā)明了J語言,J語言完全使用基本ASCII字符集。
80年代以后,隨著個人計算機的興起,Basic、Pascal、C語言等新貴開始統(tǒng)治市場,APL慢慢地退居到了科學(xué)計算、統(tǒng)計、保險精算和金融等領(lǐng)域,APL的符號性質(zhì)和數(shù)組功能使其受到領(lǐng)域?qū)<液蛿?shù)據(jù)科學(xué)家的歡迎,他們不具備程序員的技能。 那么,都2024年了,APL值得我們?nèi)チ私鈫幔?nbsp; 首屆圖靈獎獲得者Alan J. Perlis說過:一門語言如果不能影響你編程的思維方式,是不值得了解的。 而APL就是一門能影響你編程思維的語言,強烈建議去Try APL這個網(wǎng)站去玩一下:https:/// 全文完,覺得不錯的話點個贊或者在看吧! 近期爆文: |
|
|
來自: 芥子c1yw3tb42g > 《待分類》