?11. 計算機語言名人簡介
(1)計算機語言之父??奈加特
克利斯登 奈加特(Kristen Nygaard,1926年—2002年)1926年出生于奧斯陸,1956年畢業(yè)于奧斯陸大學并取得數(shù)學碩士學位,此后致力于計算機計算與編程研究。奈加特是奧斯陸大學的教授,因為發(fā)展了simula編程語言,為MS-Dos和因特網(wǎng)打下了基礎而享譽國際?;谒麕椭蛱鼐W(wǎng)奠下了基礎,為計算機業(yè)做出的巨大貢獻,所以被譽為 “計算機語言之父”。
1961年~1967年,奈加特在挪威計算機中心工作,參與開發(fā)了面向?qū)ο蟮木幊陶Z言。因為表現(xiàn)出色,奈加特和同事奧利-約翰 達爾(Ole-Johan Dahl?)獲得了2001年圖靈獎及其它多個獎項。當時為奈加特頒獎的計算機協(xié)會認為:“他們的工作使軟件系統(tǒng)的設計和編程發(fā)生了基本改變,可循環(huán)使用的、可靠的、可升級的軟件也因此得以面世?!边@說明了他們的工作為Java和,C++等編程語言在個人計算機和家庭娛樂裝置的廣泛應用掃清了道路。奈加特因其卓越的貢獻,其對計算機語言發(fā)展趨勢的掌握和認識,以及投身于計算機語言事業(yè)發(fā)展的精神,都將激勵我們向著計算機語言無比燦爛的明天前進。
(2)Fortran語言創(chuàng)始人 巴庫斯
世界是復雜的,世界上的人和事更是變化莫測,叫人無法捉摸。世界上第一個高級程序設計語言Fortran和最廣泛流行的元語言BNF的發(fā)明人約翰 巴庫斯(John Warner Backus)獲得 1977年度的圖靈獎,這顯然是當之無愧和眾望所歸,但是誰能想到,20歲之前的巴庫斯卻是個不愛學習、喜歡游蕩的“紈绔子弟”,甚至曾經(jīng)被大學逐出校門呢?
巴庫斯1924年12月3日生于美國的歷史名城費城,早年就讀于賓夕法尼亞州波茨敦市很有名望的希爾學校。但他不愛學習,每年只盼望早些放暑假,好到新罕布什爾州的夏令營去,在那里可以劃船、嬉戲,度過美好的時光。因此巴庫斯的學習成績從來就不及格,拖了兩年才勉強畢業(yè),于1942年進了弗吉尼亞大學。由于不愛學習,把大多數(shù)時間花在舞會上,每周只去上一堂課,終于被學校處分,掃地出門。
1943年,巴庫斯參軍入伍,在喬治亞洲服役。在部隊組織的一次能力測試中,巴庫斯不經(jīng)意地顯露出了他的才能,從而受到上級賞識,陸軍決定送他上學深造。這樣,當他的戰(zhàn)友們都被送往二次大戰(zhàn)的戰(zhàn)場上去的時候,巴庫斯卻上了哈弗福特學院(Haverford College)的醫(yī)學院預科。但巴庫斯對醫(yī)學不感興趣,只學了九個月的醫(yī)學就離開了那兒,轉(zhuǎn)到哥倫比亞大學學習數(shù)學。經(jīng)過這番磨煉,巴庫斯已經(jīng)從混沌走向清醒,開始認真學習。1949年他取得學士學位。畢業(yè)時,他對自己的未來仍然沒有什么打算,幸好一個偶然的機會,他去IBM公司的計算中心參觀,在那里見到了IBM早期的SSEC計算機(Selective Sequence Electronic Calculator),并開始了他在SSEC上的三年工作。
人們稱巴庫斯為“不知疲倦的發(fā)明家”,事實確實如此。進入IBM以后,巴庫斯就全身心地投入工作。他接手的第一個較大的項目是計算“月歷”,這是一個非常復雜而困難的問題,因為月歷要能給出一年中任一時刻月亮所處的精確位置,但巴庫斯出色地完成了任務。接著,巴庫斯和他的同事H.Herrick一起又成功地開發(fā)出了一個叫Speed coding的程序,這個程序用來解決浮點數(shù)運算。由于浮點運算比較復雜,浮點運算部件的設計與實現(xiàn)也比較困難,早期計算機大多沒有浮點運算部件,但許多科學與工程問題中又要處理非常小的數(shù)或非常大的數(shù),這怎么辦呢?計算機的先驅(qū)馮 諾伊曼提出對定點數(shù)附以“比例因子”使之成為浮點數(shù),從原則上解決了這個問題,但卻給程序員出了難題:在不能確切知道計算的中間結(jié)果和最后結(jié)果的范圍的情況下,如何設定比例因子?比例因子取小了,運算發(fā)生溢出;取大了,影響結(jié)果精度。這成了當時程序設計中的一大難題。 Speed coding成功地解決了這個難題,使程序員免除了設定比例因子的麻煩。
月歷程序和Speed coding奠定了巴庫斯作為出色的程序員的地位,受到了同事的尊敬和上司的器重。但巴庫斯是一個永遠不滿足于現(xiàn)狀、總想變革現(xiàn)實的人。1953年,他向IBM的老板卡斯伯特 赫德(Cuthbert Hurd)寫了一個備忘錄,指出用機器語言編程的種種弊端,建議設計一種接近人類語言的編程語言代替機器語言,以提高編程效率,降低編程費用。意想不到的是,巴庫斯這一對計算技術(shù)的發(fā)展起了如此重大影響的歷史性建議遭到了當時任IBM公司顧問的馮 諾伊曼的強烈反對。由于對程序設計的高昂費用和代價不太了解,馮 諾伊曼認為巴庫斯的建議是沒有必要的,也是不切實際的。好在赫德比較開明而有遠見,雖然馮 諾伊曼的聲望和地位當時遠比巴庫斯高,但他還是支持了巴庫斯,批準了巴庫斯的計劃,使Fortran的誕生成為可能。1959年4月,F(xiàn)ortran的編譯器第一次在西屋電氣公司訂購的704計算機上成功運行,標志著一個時代(機器語言編程時代)的結(jié)束,另一個時代(高級語言編程時代)的開始。打這以后,各種不同風格的高級程序設計語言不斷涌現(xiàn)出來,有些高級語言出世后從來就沒有流行過,有些高級語言風行了一陣以后就銷聲匿跡,而Fortran則至今長盛不衰,這說明了它在設計與實現(xiàn)兩方面都是成功的。
基于Fortran的巨大成功,在1958年5月于蘇黎世舉行的一次國際性計算機會議上,決定成立一個委員會,以Fortran為基礎,對它們進一步改進,以形成了一種單一的標準化的計算機高級程序設計語言。許多著名的計算機科學家都參加了這個委員會。這個委員會的工作成果就是Algol 58及隨后的Algol 60……等一系列版本。巴庫斯也參加了這個委員會,而且對于Algol融入了一些新概念、新思想、新功能,如局部變量、遞歸等。但這時,基于開發(fā)Fortran的經(jīng)驗,巴庫斯關(guān)注的重點已由定義語言本身轉(zhuǎn)為如何清晰地描述和表達語言這個問題上,也就是要創(chuàng)建一個“元語言” (meta language)。經(jīng)過苦苦思索和探討,1959年6月,在聯(lián)合國教科文組織UNESCO于巴黎召開的一個討論程序設計語言的語法和語義的會議上,巴庫斯在他提交的一篇論文中提出了如今眾所周知的BNF(Backus Normal Form或Backus Naur Form)。巴庫斯范式(或巴庫斯 諾爾范式)以遞歸方式描述語言中的各種成分,凡遵守其規(guī)則的程序就可保證其語法上的正確性。BNF由于其簡潔明了而被廣泛接受,成為描述各種程序設計語言的最常用的工具。 BNF全文的第二種形式中出現(xiàn)的“諾爾”指丹麥數(shù)學家彼得 諾爾(Peter Naur),他對巴庫斯的草稿進行了改進與完善。
我們目前常用的高級程序設計語言都是所謂馮 諾伊曼型的,也就是面向過程的語言,是以“逐詞逐句”的方式工作的。巴庫斯后來致力于開發(fā)非馮 諾伊曼型的語言,也就是函數(shù)式語言(functional language)。這種語言的主要成分是原始函數(shù)、函數(shù)型、定義函數(shù)。程序就是函數(shù),程序作用在結(jié)構(gòu)型數(shù)據(jù)上,產(chǎn)出結(jié)構(gòu)型結(jié)果。用這種語言編寫的程序結(jié)構(gòu)清晰,便于使用代數(shù)方法研究程序的特性。巴庫斯后來推出了一種名為FP的函數(shù)式程序設計系統(tǒng),成為函數(shù)式語言的典型代表。
Fortran的效率非常高,大大縮小了程序開發(fā)人員之間的水平差距,這在Fortran出現(xiàn)之前幾乎無法想象。Fortran的高效率主要源于編譯器的設計,它可以準確地“捕捉”開發(fā)人員的意圖,并將其轉(zhuǎn)化為計算機可以處理的方式。在Fortran項目中,巴庫斯解決了兩個基本問題:如何讓程序語言更容易被用戶掌握,以及如何構(gòu)造底層代碼。在整個工作生涯中,他一直在積極應對這兩大挑戰(zhàn)。
Fortran可謂目前計算機運算中的程序語言之父,是第一個能將數(shù)學公式轉(zhuǎn)換成計算機程序的語言。在1957年IBM成功地將其商業(yè)化后,F(xiàn)ortran正式展開協(xié)助無數(shù)工程應用軟件的開發(fā)工作,為計算機軟件開發(fā)做出了重大貢獻。
巴庫斯由于其一系列的重大發(fā)明而獲得許多榮譽。1977年,巴庫斯以“高級編程系統(tǒng),程序設計語言規(guī)范的形式化定義”等工作榮獲圖靈獎。除圖靈獎外,1967年他獲得IEEE的W.W.McDowell獎;1975年被授予美國國家科學獎章 (National Medal of Science);1982年IEEE授予他“計算機先驅(qū)獎”;1994年美國工程院授予他Charles Stark Draper獎。他還是美國科學院和工程院的院士。