1. 程式人生 > >C語言之父 UNIX之父 Dennis M. Ritchie

C語言之父 UNIX之父 Dennis M. Ritchie

 

Dennis M Ritchie(丹尼斯·裡奇), C語言之父,UNIX之父。

C語言是使用最廣泛的語言之一,可以說,C語言的誕生是現代程式語言革命的起點,是程式設計語言發展史中的一個里程碑。自C語言出現後,以C語言為根基的C++、Java和C#等面嚮物件語言相繼誕生,並在各自領域大獲成功。但今天C語言依舊在系統程式設計、嵌入式程式設計等領域佔據著統治地位。

C語言,這種最有效、最通用的程式語言,就是他開發的,而這還是他在做另一個專案時的副產品。Dennis Ritchie還和Ken Thompson一起開發了Unix作業系統,因此,他還是名副其實的UNIX之父。現年64歲的40年如一日在貝爾實驗室/朗訊科技公司(原AT&T實驗室)工作,現在是計算科學研究中心繫統軟體研究部主任。

從二十世紀七十年代起,他的工作得到了很多計算機組織的公認和表彰,如:美國計算機協會(ACM)授予的系統及語言傑出論文獎(1974);電氣和電子工程師協會(IEEE)的 Emmanuel Piore 獎(1982);貝爾實驗室特別人員獎(1983);美國計算機協會(ACM)的圖靈獎(1983); NEC公司的 C&C 基金獎(1989);電氣和電子工程師協會(IEEE)的優秀獎章(Hamming Medal)(1990), 等等。

目前,Dennis M. Ritchie 正擔任貝爾實驗室/朗訊科技公司(原AT&T實驗室)下屬的計算科學研究中心繫統軟體研究部的主任一職。該中心位於美國新澤西州的 Murray Hill。

1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《C程式設計語言(The C Programming Language)》,現在此書已翻譯成多種語言,成為C語言方面最權威的教材之一。

大師的修煉之道

在Ritchie的成長曆程中,有兩個人對他的影響最大,一個是他父親,而另一個是他的摯友,同為UNIX發明人的Ken Thompson。尤其是後者,我們可以從後面他對此問題的回答中得到印證。

有人問過Dennis,他的偶像是誰,不論在計算機領域還是其他領域?

他說:我不是在英雄薰陶下成長起來的。很顯然,對我職業生涯影響最大的人物是Ken Thompson。UNIX大部分是他的工作,同樣也是C語言的前輩,同樣Plan 9系統的大部分工作也是他做的。並且在這其間Ken做了第一個計算機象棋大師。

Ritchie生於1941年9月9日的紐約 Bronxville,獲得學士學位並且獲得哈佛大學更高的學位,在那裡以肄業生資格學習物理,以研究生資格學習應用數學。也正是在這時候,一個偶然的機會改變了他一生的選擇。Ritchie這樣描述他的轉變,當他聽取一些非課程類的計算機講座後(大約1960年),開始對計算機著迷,並選擇了一學期正規(介紹性的)課程。第一部分是模擬計算機,後面是關於打孔卡片裝置的,然後是關於真正的數字式計算機的,併為Univac I號機準備了一個程式。當時他是一個主修物理學的學生,但是更加著迷於計算機處理的理論和實際問題。因此,他的畢業論文大部分是理論方面的(遞迴函式的層次),但是也開始投入更大精力到實踐方面。作為助教為同一個介紹性課程的後續版本工作了三年——不過那時計算機已經成了IBM7049。

1968年獲得數學博士,而論文正是上面的《遞迴函式的的層次》。

1967年加入貝爾實驗室,他的父親Alistair E. Ritchie在那裡有長時間的工作經歷,他的父親對電晶體電路類的東西很有研究,正是由於父親的影響,也使得他走上了科學研究之路。

不久後,加入了Multics專案,那時由貝爾實驗室、麻省理工學院和通用電器三家的合作專案。Ritchie負責多道處理機的BCPL語言和GE650的編譯器,它們都是屬於GECOS系統的。同樣的,他也寫了ALTRAN語言的代數編譯器,那是用於符號計算機的一種語言和系統。

圖:Dennis在辦公室裡

後來,Ritchie先生協助Ken Thompson做UNIX作業系統。在UNIX系統基本就緒並且在教育、政府和商業中得到一定程度的應用時,Steve Johnson和他(在Ken幫助下)開始將這個作業系統移植到Interdata 8/32上,通過這種方式證明其輕便性,基於UNIX快速的傳播:貝爾實驗室的第7版已經成為商業化UNIX的第五版和BSD UNIX的基礎。

在UNIX發展之前,他向Thompson的B語言中加入資料型別和新的句法,就這樣產生了一種新語言——C,這也是他說Thompson是C語言的前輩的原因。C是行動式UNIX的基礎,並且它也在其它領域得到了廣泛應用;計算機各方面的應用程式和系統發展,從手持裝置到巨型機,都有對它的應用。有美國標準和國際標準的C語言,並且它是後來Stroustrup 寫的C++語言的基礎。

他從來沒有間斷過在計算機及其作業系統方面的工作。也因此,他所領導的研究小組開發出了 Plan 9 和 Inferno。

Ritchie的業餘生活也非常精彩,工作之餘,他喜歡幹什麼呢?

他這樣描述自己的生活,幹好多糾纏不清的事,大部分是和計算機相關的。另一方面,也讀讀書看看報。另一項愛好是旅行,他到過很多地方,特別喜歡旅行,但每次時間都不是很長。他是一個戀家的人,因而有時旅行不久後感到相當疲乏,但喜歡回想旅行經歷,這時就很希望能擠出時間在一個具有異國情調的地方待得時間長一點。

曾有人問過下面的問題,對於一個人是如何涉足軟體工業領域的,不同人有不同的回答。是什麼使Ritchie選擇了她,又是什麼使得他在此領域如此瀟灑呢?

他的回答很簡潔:興趣和好奇心!

他說:我開始對於物理學比較感興趣,現在仍然是一個業餘愛好者,試圖跟上物理學的一些新東西。早先上大學時包括讀研究生,我在計算機理論方面花了不少時間(如圖靈機、複雜性理論)。這其間,我對真實的電腦也非常著迷,著迷於所編即所見的經歷:當你編出一個程式,便能立即看到你的思想的實現!所有的事情以一種非常有趣的方式聯絡在了一起,也正是這一類的東西促使我進入這一領域。但不知什麼原因,我沒有想過我正在這一領域做什麼,即使時光倒流到1968年,我想也是如此。

DMR先生對問題的描述非常簡潔。

問:您的生活是怎樣和計算機聯絡在一起的?

D M R:在大學的時候我開始對它感興趣(大約1960-61年),我參加了一個非學術性的講座,關於大學裡的Univac I(通用自動計算機I號),然後就選修了一些課程。

問:您覺得怎樣才是學程式設計的好方法?學習語言時一種好的工具是不是必需的?

D M R:我想你最有必要做下面的事情——編一些小程式,然後編大一點的。

問:怎樣才算是一種好的大學教育呢?尤其對計算科學來說。

D M R:教育知識面最好要寬一些,不要僅僅侷限於程式設計。即使是程式設計,最好多學幾種語言。我在大學時花了幾年時間學習物理和計算理論知識,現在我仍然對當時的選擇比較滿意。

貝爾實驗室出大師

圖:圖片看貝爾實驗室的發展

C語言或Unix,任一項發明足以讓Dennis成為一代又一代程式設計師們的偶像。但當我們接觸這位偉人之後發現,Dennis是一位非常低調的人,形成對照的是他在軟體業成就輝煌的40年。今天,當初與他同期加入貝爾實驗室的科學家中,多數人都已安享晚年或是自立門戶成為老闆,而Dennis還是一如既往地在這裡從事自己喜歡的研究工作,著書立說,潛心程式設計。在完成C語言和Unix兩座高峰後,他還帶領他的研究小組開發出了 新一代作業系統Plan 9 和 Inferno。

C語言和UNIX的發展歷程,還讓我們從側面見證了業界流流傳很久的話題:貝爾實驗室出大師!而在談到貝爾實驗室成功的原因時,Dennis的評價只有四個字:管理得到!

貝爾實驗室是全球馳名的研發機構,遍佈全球16個國家,自1937年以來已經產生出11位諾貝爾獎獲得者。貝爾實驗室的科學家和研究人員自1925年以來已經獲得了40,000多項發明,30,000多項專利,平均每個工作日超過4項,是全球最多產的發明源泉之一。

貝爾實驗室原名“貝爾電話實驗室”,1996年10月正式改稱“貝爾實驗室”(Bell Labs),先後為AT&T和朗訊科技公司的研發機構,也是後者得以成立的支柱。它主要從事通訊科技的基礎研究和技術發展工作,目前還從事通訊系統和裝置的研製工作。

自1925年成立之時起,它一直是世界上規模最大、通訊科技和控制等方面最先進、優秀人才最集中和科技成果最突出的工業研究實驗室或研發機構。它的工作人員從成立時的3600人和年經費1200萬美元發展到1991年的29000人和37億美元。在1999年,僱員人數仍為25000人,年經費36.78億美元,依然雄居世界研發機構的榜首,被稱為“世界首要的研發機構”和研發的“象牙之塔”。

圖:Ken Thompson (左) 和 Dennis Ritchie從克林頓手中接地過國家技術獎章

問:在AT&T和Bell實驗室有這樣多的IT發明和著名人物,您覺得有什麼祕決嗎?

D M R:我覺得這得益於我們的管理,使得有足夠資金資助研究,更重要的是給予充足的時間和允許某些思想發展的時間。很幸運的另一點是,這裡有一批天才人物的加入。還有一定程度的幸運在裡面:1970年代,在計算機硬體條件(如小型機)發生了巨大的變化,這樣使得許多機構可以順利地開展實驗,而這之前是很困難的。

C語言是Dennis的得意這筆,對於這一筆,他看得非常平靜,當問到他對C語言的將來做一下預測時,他的回答十分簡潔:C語言正在被C++,也可能是Java所替代,也可能是更高階的指令碼語言。當然,它在關於系統一類設計中還是相當強的工具。

問:您能對IT的將來做一下預測嗎?將來我們最有可能用什麼語言?

D M R:我對預測不在行,但是很明顯,人們正在從象C語言之類的直接編譯型語言,轉換到注重解釋性的語言,象某些指令碼語言。

問:您對面向物件是怎樣理解的?它是不是一種好的可接受的程式設計思考方式?有沒有學習OO必須的有用的工具?

D M R:我看過OO的東西但我現在還不是OO迷。這種思想是非常好的,也即是通過隱藏任務的執行來定義介面,但是它可能做得有點過火;它以很難發現工作本質的程式終結;它的所有的東西就是介面。

問:數學和電腦科學有什麼關係嗎?

D M R:我覺得電腦科學就是:包括工程學在內的對數學的應用。

問:現在的大學有部分學生中途退學,您怎樣看待這現象呢?

D M R:在.com泡沫時期,我曾經為此非常擔心,現在,至少現在在我們國家,好象不很普遍了。可能原因在於,人們已經不再把電腦科學看作可以立即賺到大把美金的東東了,因此,現在其他的人對這門學科本身更感興趣一點。

問:您對中國和中國的程式設計師有什麼認識?您想對他們說點什麼嗎?

D M R:我訪問中國好多次,但每次都很短暫,以至於很難形成一個一般的看法。上一次我還記得,在大學的見面會上,我講了一些當時正在從事的工作的情況和歷史,學生們的態度非常熱情,他們提問所表達出的知識面也很寬博。

問:您怎樣教育自己的孩子和學生?

D M R:兩者我都不可能有!我沒結婚,並且我是在工業系統而不是學術機構中。

C語言、UNIX雙雙飛

C語言是一門偉大的語言,一門偉大的承前啟後的語言。C語言是藉助Unix作業系統的翅膀而起飛的,Unix作業系統也由於C而得已快速移植落地生根,兩者相輔相承,成就了軟體史上最精彩的一幕。而對於C的誕生,大師對他的描述是那樣地不經意。C語言的發展頗為有趣。它的原型ALGOL 60語言。

1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。

1967年,劍橋大學的Matin Richards 對CPL語言進行了簡化,於是產生了BCPL語言。

1970年, Ken Thompson將BCPL進行了修改,併為它起了一個有趣的名字“B語言”。意思是將CPL語言煮幹,提煉出它的精華。

而在1973年,B語言也給人“煮”了一下,在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。

為了使UNIX作業系統推廣,1977年Dennis M.Ritchie 發表了不依賴於具體機器系統的C語言編譯文字《可移植的C語言編譯程式》。

1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《C程式設計語言(The C Programming Language)》,從而使C語言成為目前世界上流行最廣泛的高階程式設計語言。

1988年,隨著微型計算機的日益普及, 出現了許多C語言版本。由於沒有統一的標準,使得這些C語言之間出現了一些不一致的地方。為了改變這種情況,美國國家標準研究所(ANSI)為C語言制定了一套ANSI標準, 成為現行的C語言標準。

C語言發展迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的功能。許多著名的系統軟體,如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。用C語言加上一些組合語言子程式, 就更能顯示C語言的優勢了。C++、Java等語言受C語言影響深刻。

在技術方面,曾有人問Dennis, C語言設計目標有沒有隨著時間推移而改變?如果沒變,為什麼?

他說: 我個人的目標這些年來一直未變,並且,我不是1989和1999年標準的主要推動者。無論1989年ANSI標準還是ISO標準都使事情制度化了,這些條文比我最初寫的文件要好;最需要加以說明的是我早先關於函式原型做的工作,對C++語言的影響是非常重要的一個影響。

而在關於眾多計算機語言的激烈辯論中,始終處在中心位置的C語言作者Dennis卻顯得很平靜。西班牙的一位大學生曾經問過他類似的問題: 如果 UNIX 被選為過去和當前的作業系統,儘管過去幾年出現了一些面向物件的語言,毫無疑問C 也將被認為是“唯一的語言”。你怎麼看待 C++ 和 Java,以及 C 和 C++ 程式設計師之間在 UseNet 上經常發生的激烈爭論呢?

他說:C++ 的很大一部分得宜於 C。因為 C 早在 C++ 出現之前就已經具有了非常好的相容性,所以 C++ 才可以採用 C 作為建構自身的基礎並使用它來開發自己的編譯器。C 被設計成為一種行動式組合語言,對於這一特性人們褒貶不一,C++ 則試圖把程式設計方法提高到面向物件這種更抽象的層次上來。從最近形成的標準來看,二者共同的缺點是:帶有過多的裝飾和附屬物。同樣的,它們都採用了相同的程式設計思想,都試圖按照真正的需求來編寫程式碼。Java 顯然是 C++ 的改進版本。它砍掉了 C 中的指標操作部分,引入了生成獨立於機器的目標檔案這種程式設計思想(雖然這個思想並不是很新的,但是也許直到現在它才真正可行了)。既然 Sun 和 Microsoft 公司(它的產品同樣的有過多的裝飾附件)已經把 Java 作為它們之間競爭的工具,誰也難以預料事態將向何處發展。


圖:Ken Thompson和 Dennis Ritchie 在PDP11 1971

問:您是怎樣發明C語言的?發明的過程是什麼樣子的。它對您的生活和研究有什麼影響嗎?

D M R:公正地說,發明C語言的目的是:為了寫編譯器和語言設計,為了更易於編寫UNIX作業系統程式,我們做的一個可以在小型計算機上使用的工具。Unix做的比較好,並且PC開始相當普遍,由於C語言在Unix上的很好地應用,使得用它來寫應用程式和作業系統迅速增長起來。因此,對我來說,C語言的確非常重要。

 問:您覺得C語言和C++有什麼不同嗎?

D M R:多年以來,C和C++,已經是兩種不同的語言了;Stroustrup先生汲取了C語言語法和潛在的語義學中的許多東西,形成了C++語言。在一些交叉領域,標準委員會盡量使兩種語言相容。

問:您覺得計算機語言和我們人類的語言有什麼不同呢?

D M R:計算機語言更加正式和明確,有統一的規則,當然,它們都是經過設計的。人類語言有語法,但相對來說不很正式,有些規則可以打破,當然,它們有不同的目的——為了同人交流而不是同機器交流。

人物印象

D M R先生的專業精神令人感動,近40年如一日,在他所從事的領域辛勤耕耘,而他的多項發明,包括C語言,Unix,也包括現在正在進行的Plan9,無論哪一項,在軟體發展史上都有著舉足輕重的地位,和他的偉大成就形成對照的是他的行事,態度低調,他的表達,象他的軟體一樣,簡潔生動而準確。

C++的成功,很大一部分也來自於C,是C語言的普及和深入,才有了後面的鳳凰涅盤,從另一個角度,在同另一語言大師Pascal之父Niklaus Wirth交流時,C++的名字也是源自C語言的利器,Wirth先生不無惋惜地表示,後來他開發的語言可惜沒叫Pascal2。