軟件簡潔之美——C語言之父Dennis Ritchie訪談

Dennis M. Ritchie其人


Dennis M Ritchie(丹尼斯·裏奇), C語言之父,UNIX之父。生於1941年9月9日,哈佛大學數學博士。
現在,Dennis M. Ritchie 擔任朗訊科技公司貝爾實驗室 (原AT&T實驗室)下屬的計算機科學研究中心繫統軟件研究部的主任一職。
1978年Brian W. Kernighan和Dennis M. Ritchie出版了名著《C程序設計語言(The C Programming Language)》,現在此書已翻譯成多種語言,成爲C語言方面最權威的教材之一。
C語言是使用最廣泛的語言之一,可以說,C語言的誕生是現代程序語言革命的起點,是程序設計語言發展史中的一個里程碑。
除了C語言的開發,Dennis Ritchie還和Ken Thompson一起開發了UNIX操作系統,因此,他還是名副其實的UNIX之父。
從二十世紀七十年代起,他因傑出的工作得到了衆多計算機組織的公認和表彰。
1974年,美國計算機協會(ACM)授予他系統及語言傑出論文獎。
1982年,電氣和電子工程師協會(IEEE)授予他 Emmanuel Piore 獎。
1983年,他獲得了貝爾實驗室特別人員獎和
1983年,還獲得美國計算機協會頒發的圖靈獎(又稱計算機界的諾貝爾獎)。
1989年,他獲得了NEC公司的 C&C 基金獎。
1990年,電氣和電子工程師協會又給他頒發了優秀獎章(Hamming Medal)
1999年,他和同爲UNIX之父的Ken Thompson 獲得美國國家技術獎章。等等。

大師的修煉之道
Ritchie生於1941年9月9日的紐約 Bronxville,獲得學士學位並且獲得哈佛大學博士學位,在哈佛,先是

學習物理,而後轉向應用數學。正是在這時候,一個偶然的機會改變了他一生的選擇。
大約1960年,Ritchie聽取一些非課程類的計算機講座後,開始對計算機着迷,並選擇了一學期正規(介

紹性的)課程。第一部分是模擬計算機,後面是關於打孔卡片設備的,然後纔是關於真正的數字式計算機

的,併爲Univac I號機準備了一個程序。當時他是一個主修物理的學生,但是更加着迷於計算機處理的理

論和實際問題。因此,他的畢業論文大部分是理論方面的,例如1968年獲得數學博士時的論文《遞歸函數

的的層次》;但是他也開始投入更大精力到實踐方面,例如,作爲助手,在IBM7049計算機上用了三年時

間爲同一個介紹性課程做後續版本。
在Ritchie的成長曆程中,有兩個人對他的影響最大,一個是他父親Alistair E. Ritchie,而另一個是他

的摯友,同爲UNIX發明人的Ken Thompson。
由於父親的指引,他進入全球知名的研發機構——貝爾實驗室。Dennis的父親在貝爾實驗室有長時間的工

作經歷,對晶體管電路類的東西很有研究。1967年在父親指引下加入貝爾實驗室。不久後,加入了

Multics(Multiplexed Information and Computing System)項目,正是這個項目,使得他和Ken

Thompsom 有了合作的機會。該項目由貝爾實驗室、麻省理工學院和通用電器三家合作,Ritchie負責多道

處理機的BCPL語言和GE650的編譯器,它們都是屬於GECOS系統的,同樣的,他也寫了ALTRAN語言的代數編

譯器,那是用於符號計算機的一種語言和系統。


關於Ken Thompson,可以從後面他對此問題的回答中得到印證。有人問過Dennis,他的偶像是誰?他的回

答挺有意思。
他說:我不是在英雄薰陶下成長起來的。很顯然,對我職業生涯影響最大的人物是Ken Thompson。UNIX大

部分是他的工作,同樣也是C語言的前輩,Plan 9系統的大部分工作也是他做的。並且在這其間Ken做了第

一個計算機象棋大師。
Dennis協助Ken Thompson做UNIX操作系統,在UNIX系統基本就緒並且在教育、政府和商業中得到一定程度

的應用時,他和另一名同伴在Ken幫助下,開始將這個操作系統移植到Interdata 8/32上,通過這種方式

證明其輕便性,基於UNIX快速的傳播:貝爾實驗室的第7版已經成爲商業化UNIX的第五版和BSD UNIX的基

礎——這是UNIX快速傳播的兩個版本。
在UNIX發展之過程中,他向Thompson的B語言中加入數據類型和新的句法,就這樣產生了一種新語言——C

,這也是他說Thompson是C語言的前輩的原因,C是便攜式UNIX的基礎,並且它也在其它領域得到了廣泛應

用;計算機各方面的應用程序和系統發展,從手持設備到巨型機,都有對它的應用,還有美國標準和國際

標準的C語言,並且它是後來Bjarne Stroustrup 寫的C++語言的基礎。
他從來沒有間斷過在計算機及其操作系統方面的工作,他所領導的研究小組開發出了 Plan 9 和 Inferno


Ritchie的業餘生活也非常精彩,工作之餘,有自己精彩生活。
他這樣描述自己的生活,乾的大部分是和計算機相關的,有點糾纏不清的事情。另一方面,也時常讀讀書

看看報。
另一項愛好是旅行,他到過很多地方,特別喜歡旅行,但每次時間都不是很長。可能因爲他是一個戀家的

人,因而有時旅行不久後感到相當疲乏。但喜歡回想旅行經歷,這時就很希望能擠出時間在一個具有異國

情調的地方待得時間長一點。
曾有人問過下面的問題,對於一個人是如何涉足軟件工業領域的,不同人有不同的回答。是什麼使

Ritchie選擇了她,又是什麼使得他在此領域如此瀟灑呢?
他的回答很簡潔:興趣和好奇心!他說:我開始對於物理學比較感興趣,現在仍然是一個業餘愛好者,試

圖跟上物理學的一些新東西。早先上大學時,包括讀研究生,我在計算機理論方面花了不少時間(如圖靈

機、複雜性理論)。這其間,我對真實的電腦也非常着迷,着迷於所編即所見的經歷:當你編出一個程序

,便能立即看到你的思想的實現!所有的事情以一種非常有趣的方式聯繫在了一起,也正是這一類的東西

促使我進入這一領域。但不知什麼原因,我沒有真正想過我正在這一領域做什麼,即使時光倒流到1968年

,我想也是如此。

一如Dennis開發的軟件,DMR先生對問題的描述非常簡潔。

問:您的生活是怎樣和計算機聯繫在一起的?
D M R:在大學的時候我開始對它感興趣(大約1960-61年),我參加了一個非學術性的講座,關於大學裏

的Univac I(通用自動計算機I號),然後就選修了一些課程。
問:您覺得怎樣纔是學編程的好方法?學習語言時一種好的工具是不是必需的?
D M R:我想你最有必要做下面的事情——編一些小程序,然後編大一點的。
問:怎樣纔算是一種好的大學教育呢?尤其對計算科學來說。
D M R:教育知識面最好要寬一些,不要僅僅侷限於編程。即使是編程,最好多學幾種語言。我在大學時

花了幾年時間學習物理和計算理論知識,現在我仍然對當時的選擇比較滿意。
問:數學和計算機科學有什麼關係嗎?
D M R:我覺得計算機科學就是:包括工程學在內的對數學的應用。
問:您怎樣教育自己的孩子和學生?
D M R:兩者我都不可能有!我沒結婚,並且我是在工業系統而不是學術機構中。
問:您對中國和中國的程序員有什麼認識?您想對他們說點什麼嗎?
D M R:我訪問中國好多次,但每次都很短暫,以至於很難形成一個一般的看法。上一次我還記得,在大

學的見面會上,我講了一些當時正在從事的工作的情況和歷史,學生們的態度非常熱情,他們提問所表達

出的知識面也很寬博。


貝爾實驗室出大師

 

C語言或UNIX,任一項發明足以讓Dennis成爲一代又一代程序員們的偶像。但當我們接觸這位偉人之後發

現,Dennis是一位非常低調的人,形成對照的是他在軟件業成就輝煌的40年。
今天,當初與他同期加入貝爾實驗室的科學家中,多數人都已安享晚年或是自立門戶成爲老闆,而Dennis

還是一如既往地在這裏從事自己喜歡的研究工作,著書立說,潛心編程。在完成C語言和UNIX兩座高峯後

,他還帶領他的研究小組開發出了 新一代操作系統Plan 9 和 Inferno。
C語言和UNIX的發展歷程,還讓我們從側面見證了業界流流傳很久的話題:貝爾實驗室出大師!而在談到

貝爾實驗室成功的原因時,Dennis的評價只有四個字:管理得當!
在談到貝爾實驗室時,雖然它的稱呼、Logo不斷變化,但Dennis評價“貝爾實驗室仍然是相當不錯的幹事

的地方”。
貝爾實驗室(Bell Labs)是全球馳名的研發機構,遍佈全球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億美元,依然雄居世界研發機

構的榜首,被稱爲“世界首要的研發機構”和研發的“象牙之塔”。
美國國家技術獎章的統計數字是貝爾實驗室成就的有力補充說明,第一次的獎章是授予貝爾實驗室,1999

年,Ritchie 和 Thompson因爲在貝爾實驗室的受人矚目的成績獲得此項殊榮,是第六次以集體的名義和

第七次個人名義獲得國家技術獎章。


問:在AT&T和Bell實驗室有這樣多的IT發明和著名人物,您覺得有什麼祕決嗎?
D M R:我覺得這得益於我們的管理,使得有足夠資金資助研究,更重要的是給予充足的時間和允許某些

思想發展的時間。很幸運的另一點是,這裏有一批天才人物的加入。還有一定程度的幸運在裏面:1970年

代,在計算機硬件條件(如小型機)發生了巨大的變化,這樣使得許多機構可以順利地開展實驗,而這之

前是很困難的。

問:現在的大學有部分學生中途退學,您怎樣看待這現象呢?
D M R:在.com泡沫時期,我曾經爲此非常擔心,現在,至少現在在我們國家,好象不很普遍了。可能原

因在於,人們已經不再把計算機科學看作可以立即賺到大把美金的東東了,因此,現在其他的人對這門學

科本身更感興趣一點。
C語言UNIX雙雙飛
作爲一門偉大的語言,C語言的發展頗爲有趣,C語言是藉助UNIX操作系統的翅膀而起飛的,UNIX操作系統

也由於C而得以快速移植落地生根,兩者相輔相承,成就了軟件史上最精彩的一幕。
1967 年,Dennis參與的第一個項目是Multics,UNIX的誕生和Multics有一定淵源的。Multics是一個操作

系統項目,被設計運行在GE-645大型主機上,但是由於整個目標過於龐大,糅合了太多的特性,Multics

雖然發佈了一些產品,但是性能都很低,最終以失敗而告終。
AT&T最終撤出了投入Multics項目的資源,其中一個開發者,Ken Thompson則繼續爲GE-645開發軟件,並

最終編寫了一個太空旅行遊戲。經過實際運行後,他發現遊戲速度很慢而且耗費昂貴。在Dennis Ritchie

的幫助下,Thompson用PDP-7的彙編語言重寫了這個遊戲,並使其在DEC PDP-7上運行起來。這次經歷加上

Multics項目的經驗,促使Thompson開始了一個DEC PDP-7上的新操作系統項目。Thompson和Ritchie領導

一組開發者,開發了一個新的多任務操作系統,這個項目被稱爲UNICS(Uniplexed Information and

Computing System),因爲它可以支持同時的多用戶操作,也就是後來的UNIX。
最初的UNIX是用彙編語言編寫的,一些應用是由叫做B語言的解釋型語言和彙編語言混合編寫的,在移植

的過程中遇到不少麻煩。早在對Multics項目調整過程中,就迫切需要一門高級計算機語言做工具,可供

選擇的範圍僅僅是PL/I、Fortran等,經過一一實驗,不得不放棄,最後Ken 決定設計一種自己的語言,

將BCPL語言壓縮到僅有8KB的內存中,B語言誕生了。
B語言也並非無懈可擊,由於自身侷限性,在設計UNIX操作系統時讓設計者吃了不少苦頭,爲了解決程序

的可移植性問題,他們決定對它進行簡單改進,形成NB語言。但NB在UNIX的移植方面依然不盡人意,此後

Dennis又對NB語言做了改進,C語言誕生。

這是個劃時代的動作,C語言讓UNIX能夠輕易地被移植到各種不同的機器上,爲UNIX的迅速普及立下汗馬

功勞。
1977年Dennis發表了不依賴於具體機器系統的C語言編譯文本——《可移植的C語言編譯程序》,UNIX操作

系統得已推廣的另一項有利舉措是標準化。種種得力舉措,從而使C語言成爲目前世界上流行最廣泛的高

級程序設計語言之一。
1978年Brian W. Kernighan和Dennis M. Ritchie出版的名著《C程序設計語言(The C Programming

Language)》,常被人們稱爲K&R版C教材或“白皮書”,爲C語言的推廣普及立下汗馬功勞。
1988年,美國國家標準研究所(ANSI)爲C語言制定了一套ANSI標準。隨着標準化的深入,C語言發展迅速

, 成爲最受歡迎的語言之一。
而Dennis 由於C語言和UNIX兩項成就,成爲許多編程愛好者膜拜的對象。也正因此,和Ken二人於1983年

獲得有計算機界諾貝爾獎的ACM 圖靈獎。
C語言最初被用於UNIX的編寫,後來它被衆多程序員狂熱擁戴,成爲使用最廣泛的系統開發語言,這卻是

Dennis本人也沒有預料到的。
現在,C語言,作爲一種通用的程序設計語言,它主要用來進行系統程序設計。具有高效、靈活、功能豐

富、表達力強和移植性好等的特點,在程序員中備受青睞。C語言廣泛應用於不同的操作系統,例如UNIX

、MS-DOS、Microsoft Windows及Linux等。C語言是一種面向過程的語言,同時具有高級語言和彙編語言

的優點。在C語言的基礎上發展起來的有支持多種程序設計風格的C++語言,網絡上廣泛使用的Java、

JavaScript,微軟的C#等。
而UNIX作爲一種一種多用戶、多任務的通用操作系統,已發展成爲當前使用普遍、影響深遠的工業界主流

的操作系統,成爲重要的企業級操作平臺,廣泛運行於PC、小型機等各種環境,用於大型信息系統的關鍵

業務服務,如數據庫和Internet主機。
在技術方面,曾有人問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 作爲它們之間競

爭的工具,誰也難以預料事態將向何處發展。
C語言是Dennis的得意這筆,對於這一筆,他看得非常平靜,當問到他對C語言的將來做一下預測時,他的

回答十分簡潔:C語言正在被C++,也可能是Java所替代,也可能是更高級的腳本語言。當然,它在關於系

統一類設計中還是相當強的工具。


問:您是怎樣發明C語言的?發明的過程是什麼樣子的。它對您的生活和研究有什麼影響嗎?
D M R:公正地說,發明C語言的目的是:爲了寫編譯器和語言設計,爲了更易於編寫UNIX操作系統程序,

我們做的一個可以在小型計算機上使用的工具。UNIX做的比較好,並且PC開始相當普遍,由於C語言在

UNIX上的很好地應用,使得用它來寫應用程序和操作系統迅速增長起來。因此,對我來說,C語言的確非

常重要。

問:您覺得C語言和C++有什麼不同嗎?
D M R:多年以來,C和C++,已經是兩種不同的語言了;Stroustrup先生汲取了C語言語法和潛在的語義學

中的許多東西,形成了C++語言。在一些交叉領域,標準委員會盡量使兩種語言兼容。
問:您覺得計算機語言和我們人類的語言有什麼不同呢?
D M R:計算機語言更加正式和明確,有統一的規則,當然,它們都是經過設計的。人類語言有語法,但

相對來說不很正式,有些規則可以打破,當然,它們有不同的目的——爲了同人交流而不是同機器交流。

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

工具?
D M R:我看過OO的東西但我現在還不是OO迷。這種思想是非常好的,也即是通過隱藏任務的執行來定義

界面,但是它可能做得有點過火;它以很難發現工作本質的程序終結;它的所有的東西就是界面。

問:您能對IT的將來做一下預測嗎?將來我們最有可能用什麼語言?
D M R:我對預測不在行,但是很明顯,人們正在從象C語言之類的直接編譯型語言,轉換到注重解釋性的

語言,象某些腳本語言。


人物印象
提起Dennis Ritchie 先生,不可不提他那句在IT名言:
UNIX is basically a simple operating system, but you have to be a genius to understand the

simplicity.
這就是簡潔。軟件簡潔之美。
另外的產生一種由然的感動。
D M R先生的專業精神令人感動,近40年如一日,在他所從事的領域辛勤耕耘,而他的多項發明,包括C語

言,UNIX,也包括現在正在進行的Plan9,無論哪一項,在軟件發展史上都有着舉足輕重的地位,和他的

偉大成就形成對照的是他的行事,態度低調;他的表達,象他的軟件一樣,簡潔生動而準確。
Bjarne Stroustrup先生C++的成功,很大一部分也來自於C,是C語言的普及和深入,纔有了後面的鳳凰涅

槃;從另一個角度,在同另一語言大師Pascal之父Niklaus Wirth交流時,C++的名字也是源自C語言的利

器,Wirth先生不無惋惜地表示,後來他開發的語言可惜沒叫Pascal2。
他的行事低調和他的巨大成就形成鮮明的對照。和Ken亦師亦友的關係,對工作一絲不苟的執着,無不深

深地感動着我們。 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章