圖:C語言之父
Dennis M Ritchie(丹尼斯·里奇), C語言之父,UNIX之父。
C語言是使用最廣泛的語言之一,可以說,C語言的誕生是現(xiàn)代程序語言革命的起點(diǎn),是程序設(shè)計(jì)語言發(fā)展史中的一個(gè)里程碑。自C語言出現(xiàn)后,以C語言為根基的C++、Java和C#等面向?qū)ο笳Z言相繼誕生,并在各自領(lǐng)域大獲成功。但今天C語言依舊在系統(tǒng)編程、嵌入式編程等領(lǐng)域占據(jù)著統(tǒng)治地位。
C語言,這種最有效、最通用的編程語言,就是他開發(fā)的,而這還是他在做另一個(gè)項(xiàng)目時(shí)的副產(chǎn)品。Dennis Ritchie還和Ken Thompson一起開發(fā)了Unix操作系統(tǒng),因此,他還是名副其實(shí)的UNIX之父?,F(xiàn)年64歲的40年如一日在貝爾實(shí)驗(yàn)室/朗訊科技公司(原AT&T實(shí)驗(yàn)室)工作,現(xiàn)在是計(jì)算科學(xué)研究中心系統(tǒng)軟件研究部主任。
從二十世紀(jì)七十年代起,他的工作得到了很多計(jì)算機(jī)組織的公認(rèn)和表彰,如:美國(guó)計(jì)算機(jī)協(xié)會(huì)(ACM)授予的系統(tǒng)及語言杰出論文獎(jiǎng)(1974);電氣和電子工程師協(xié)會(huì)(IEEE)的 Emmanuel Piore 獎(jiǎng)(1982);貝爾實(shí)驗(yàn)室特別人員獎(jiǎng)(1983);美國(guó)計(jì)算機(jī)協(xié)會(huì)(ACM)的圖靈獎(jiǎng)(1983); NEC公司的 C&C 基金獎(jiǎng)(1989);電氣和電子工程師協(xié)會(huì)(IEEE)的優(yōu)秀獎(jiǎng)?wù)?Hamming Medal)(1990), 等等。
目前,Dennis M. Ritchie 正擔(dān)任貝爾實(shí)驗(yàn)室/朗訊科技公司(原AT&T實(shí)驗(yàn)室)下屬的計(jì)算科學(xué)研究中心系統(tǒng)軟件研究部的主任一職。該中心位于美國(guó)新澤西州的 Murray Hill。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《C程序設(shè)計(jì)語言(The C Programming Language)》,現(xiàn)在此書已翻譯成多種語言,成為C語言方面最權(quán)威的教材之一。
大師的修煉之道
在Ritchie的成長(zhǎng)歷程中,有兩個(gè)人對(duì)他的影響最大,一個(gè)是他父親,而另一個(gè)是他的摯友,同為UNIX發(fā)明人的Ken Thompson。尤其是后者,我們可以從后面他對(duì)此問題的回答中得到印證。
有人問過Dennis,他的偶像是誰,不論在計(jì)算機(jī)領(lǐng)域還是其他領(lǐng)域?
他說:我不是在英雄熏陶下成長(zhǎng)起來的。很顯然,對(duì)我職業(yè)生涯影響最大的人物是Ken Thompson。UNIX大部分是他的工作,同樣也是C語言的前輩,同樣Plan 9系統(tǒng)的大部分工作也是他做的。并且在這其間Ken做了第一個(gè)計(jì)算機(jī)象棋大師。
Ritchie生于1941年9月9日的紐約 Bronxville,獲得學(xué)士學(xué)位并且獲得哈佛大學(xué)更高的學(xué)位,在那里以肄業(yè)生資格學(xué)習(xí)物理,以研究生資格學(xué)習(xí)應(yīng)用數(shù)學(xué)。也正是在這時(shí)候,一個(gè)偶然的機(jī)會(huì)改變了他一生的選擇。Ritchie這樣描述他的轉(zhuǎn)變,當(dāng)他聽取一些非課程類的計(jì)算機(jī)講座后(大約1960年),開始對(duì)計(jì)算機(jī)著迷,并選擇了一學(xué)期正規(guī)(介紹性的)課程。第一部分是模擬計(jì)算機(jī),后面是關(guān)于打孔卡片設(shè)備的,然后是關(guān)于真正的數(shù)字式計(jì)算機(jī)的,并為Univac I號(hào)機(jī)準(zhǔn)備了一個(gè)程序。當(dāng)時(shí)他是一個(gè)主修物理學(xué)的學(xué)生,但是更加著迷于計(jì)算機(jī)處理的理論和實(shí)際問題。因此,他的畢業(yè)論文大部分是理論方面的(遞歸函數(shù)的層次),但是也開始投入更大精力到實(shí)踐方面。作為助教為同一個(gè)介紹性課程的后續(xù)版本工作了三年——不過那時(shí)計(jì)算機(jī)已經(jīng)成了IBM7049。
1968年獲得數(shù)學(xué)博士,而論文正是上面的《遞歸函數(shù)的的層次》。
1967年加入貝爾實(shí)驗(yàn)室,他的父親Alistair E. Ritchie在那里有長(zhǎng)時(shí)間的工作經(jīng)歷,他的父親對(duì)晶體管電路類的東西很有研究,正是由于父親的影響,也使得他走上了科學(xué)研究之路。
不久后,加入了Multics項(xiàng)目,那時(shí)由貝爾實(shí)驗(yàn)室、麻省理工學(xué)院和通用電器三家的合作項(xiàng)目。Ritchie負(fù)責(zé)多道處理機(jī)的BCPL語言和GE650的編譯器,它們都是屬于GECOS系統(tǒng)的。同樣的,他也寫了ALTRAN語言的代數(shù)編譯器,那是用于符號(hào)計(jì)算機(jī)的一種語言和系統(tǒng)。
圖:Dennis在辦公室里
后來,Ritchie先生協(xié)助Ken Thompson做UNIX操作系統(tǒng)。在UNIX系統(tǒng)基本就緒并且在教育、政府和商業(yè)中得到一定程度的應(yīng)用時(shí),Steve Johnson和他(在Ken幫助下)開始將這個(gè)操作系統(tǒng)移植到Interdata 8/32上,通過這種方式證明其輕便性,基于UNIX快速的傳播:貝爾實(shí)驗(yàn)室的第7版已經(jīng)成為商業(yè)化UNIX的第五版和BSD UNIX的基礎(chǔ)。
在UNIX發(fā)展之前,他向Thompson的B語言中加入數(shù)據(jù)類型和新的句法,就這樣產(chǎn)生了一種新語言——C,這也是他說Thompson是C語言的前輩的原因。C是便攜式UNIX的基礎(chǔ),并且它也在其它領(lǐng)域得到了廣泛應(yīng)用;計(jì)算機(jī)各方面的應(yīng)用程序和系統(tǒng)發(fā)展,從手持設(shè)備到巨型機(jī),都有對(duì)它的應(yīng)用。有美國(guó)標(biāo)準(zhǔn)和國(guó)際標(biāo)準(zhǔn)的C語言,并且它是后來Stroustrup 寫的C++語言的基礎(chǔ)。
他從來沒有間斷過在計(jì)算機(jī)及其操作系統(tǒng)方面的工作。也因此,他所領(lǐng)導(dǎo)的研究小組開發(fā)出了 Plan 9 和 Inferno。
Ritchie的業(yè)余生活也非常精彩,工作之余,他喜歡干什么呢?
他這樣描述自己的生活,干好多糾纏不清的事,大部分是和計(jì)算機(jī)相關(guān)的。另一方面,也讀讀書看看報(bào)。另一項(xiàng)愛好是旅行,他到過很多地方,特別喜歡旅行,但每次時(shí)間都不是很長(zhǎng)。他是一個(gè)戀家的人,因而有時(shí)旅行不久后感到相當(dāng)疲乏,但喜歡回想旅行經(jīng)歷,這時(shí)就很希望能擠出時(shí)間在一個(gè)具有異國(guó)情調(diào)的地方待得時(shí)間長(zhǎng)一點(diǎn)。
曾有人問過下面的問題,對(duì)于一個(gè)人是如何涉足軟件工業(yè)領(lǐng)域的,不同人有不同的回答。是什么使Ritchie選擇了她,又是什么使得他在此領(lǐng)域如此瀟灑呢?
他的回答很簡(jiǎn)潔:興趣和好奇心!
他說:我開始對(duì)于物理學(xué)比較感興趣,現(xiàn)在仍然是一個(gè)業(yè)余愛好者,試圖跟上物理學(xué)的一些新東西。早先上大學(xué)時(shí)包括讀研究生,我在計(jì)算機(jī)理論方面花了不少時(shí)間(如圖靈機(jī)、復(fù)雜性理論)。這其間,我對(duì)真實(shí)的電腦也非常著迷,著迷于所編即所見的經(jīng)歷:當(dāng)你編出一個(gè)程序,便能立即看到你的思想的實(shí)現(xiàn)!所有的事情以一種非常有趣的方式聯(lián)系在了一起,也正是這一類的東西促使我進(jìn)入這一領(lǐng)域。但不知什么原因,我沒有想過我正在這一領(lǐng)域做什么,即使時(shí)光倒流到1968年,我想也是如此。
DMR先生對(duì)問題的描述非常簡(jiǎn)潔。
問:您的生活是怎樣和計(jì)算機(jī)聯(lián)系在一起的?
D M R:在大學(xué)的時(shí)候我開始對(duì)它感興趣(大約1960-61年),我參加了一個(gè)非學(xué)術(shù)性的講座,關(guān)于大學(xué)里的Univac I(通用自動(dòng)計(jì)算機(jī)I號(hào)),然后就選修了一些課程。
問:您覺得怎樣才是學(xué)編程的好方法?學(xué)習(xí)語言時(shí)一種好的工具是不是必需的?
D M R:我想你最有必要做下面的事情——編一些小程序,然后編大一點(diǎn)的。
問:怎樣才算是一種好的大學(xué)教育呢?尤其對(duì)計(jì)算科學(xué)來說。
D M R:教育知識(shí)面最好要寬一些,不要僅僅局限于編程。即使是編程,最好多學(xué)幾種語言。我在大學(xué)時(shí)花了幾年時(shí)間學(xué)習(xí)物理和計(jì)算理論知識(shí),現(xiàn)在我仍然對(duì)當(dāng)時(shí)的選擇比較滿意。
貝爾實(shí)驗(yàn)室出大師
圖:圖片看貝爾實(shí)驗(yàn)室的發(fā)展
C語言或Unix,任一項(xiàng)發(fā)明足以讓Dennis成為一代又一代程序員們的偶像。但當(dāng)我們接觸這位偉人之后發(fā)現(xiàn),Dennis是一位非常低調(diào)的人,形成對(duì)照的是他在軟件業(yè)成就輝煌的40年。今天,當(dāng)初與他同期加入貝爾實(shí)驗(yàn)室的科學(xué)家中,多數(shù)人都已安享晚年或是自立門戶成為老板,而Dennis還是一如既往地在這里從事自己喜歡的研究工作,著書立說,潛心編程。在完成C語言和Unix兩座高峰后,他還帶領(lǐng)他的研究小組開發(fā)出了 新一代操作系統(tǒng)Plan 9 和 Inferno。
C語言和UNIX的發(fā)展歷程,還讓我們從側(cè)面見證了業(yè)界流流傳很久的話題:貝爾實(shí)驗(yàn)室出大師!而在談到貝爾實(shí)驗(yàn)室成功的原因時(shí),Dennis的評(píng)價(jià)只有四個(gè)字:管理得到!
貝爾實(shí)驗(yàn)室是全球馳名的研發(fā)機(jī)構(gòu),遍布全球16個(gè)國(guó)家,自1937年以來已經(jīng)產(chǎn)生出11位諾貝爾獎(jiǎng)獲得者。貝爾實(shí)驗(yàn)室的科學(xué)家和研究人員自1925年以來已經(jīng)獲得了40,000多項(xiàng)發(fā)明,30,000多項(xiàng)專利,平均每個(gè)工作日超過4項(xiàng),是全球最多產(chǎn)的發(fā)明源泉之一。
貝爾實(shí)驗(yàn)室原名“貝爾電話實(shí)驗(yàn)室”,1996年10月正式改稱“貝爾實(shí)驗(yàn)室”(Bell Labs),先后為AT&T和朗訊科技公司的研發(fā)機(jī)構(gòu),也是后者得以成立的支柱。它主要從事通信科技的基礎(chǔ)研究和技術(shù)發(fā)展工作,目前還從事通信系統(tǒng)和設(shè)備的研制工作。
自1925年成立之時(shí)起,它一直是世界上規(guī)模最大、通信科技和控制等方面最先進(jìn)、優(yōu)秀人才最集中和科技成果最突出的工業(yè)研究實(shí)驗(yàn)室或研發(fā)機(jī)構(gòu)。它的工作人員從成立時(shí)的3600人和年經(jīng)費(fèi)1200萬美元發(fā)展到1991年的29000人和37億美元。在1999年,雇員人數(shù)仍為25000人,年經(jīng)費(fèi)36.78億美元,依然雄居世界研發(fā)機(jī)構(gòu)的榜首,被稱為“世界首要的研發(fā)機(jī)構(gòu)”和研發(fā)的“象牙之塔”。
圖:Ken Thompson (左) 和 Dennis Ritchie從克林頓手中接地過國(guó)家技術(shù)獎(jiǎng)?wù)?/p>
問:在AT&T和Bell實(shí)驗(yàn)室有這樣多的IT發(fā)明和著名人物,您覺得有什么秘決嗎?
D M R:我覺得這得益于我們的管理,使得有足夠資金資助研究,更重要的是給予充足的時(shí)間和允許某些思想發(fā)展的時(shí)間。很幸運(yùn)的另一點(diǎn)是,這里有一批天才人物的加入。還有一定程度的幸運(yùn)在里面:1970年代,在計(jì)算機(jī)硬件條件(如小型機(jī))發(fā)生了巨大的變化,這樣使得許多機(jī)構(gòu)可以順利地開展實(shí)驗(yàn),而這之前是很困難的。
C語言是Dennis的得意這筆,對(duì)于這一筆,他看得非常平靜,當(dāng)問到他對(duì)C語言的將來做一下預(yù)測(cè)時(shí),他的回答十分簡(jiǎn)潔:C語言正在被C++,也可能是Java所替代,也可能是更高級(jí)的腳本語言。當(dāng)然,它在關(guān)于系統(tǒng)一類設(shè)計(jì)中還是相當(dāng)強(qiáng)的工具。
問:您能對(duì)IT的將來做一下預(yù)測(cè)嗎?將來我們最有可能用什么語言?
D M R:我對(duì)預(yù)測(cè)不在行,但是很明顯,人們正在從象C語言之類的直接編譯型語言,轉(zhuǎn)換到注重解釋性的語言,象某些腳本語言。
問:您對(duì)面向?qū)ο笫窃鯓永斫獾??它是不是一種好的可接受的編程思考方式?有沒有學(xué)習(xí)OO必須的有用的工具?
D M R:我看過OO的東西但我現(xiàn)在還不是OO迷。這種思想是非常好的,也即是通過隱藏任務(wù)的執(zhí)行來定義界面,但是它可能做得有點(diǎn)過火;它以很難發(fā)現(xiàn)工作本質(zhì)的程序終結(jié);它的所有的東西就是界面。
問:數(shù)學(xué)和計(jì)算機(jī)科學(xué)有什么關(guān)系嗎?
D M R:我覺得計(jì)算機(jī)科學(xué)就是:包括工程學(xué)在內(nèi)的對(duì)數(shù)學(xué)的應(yīng)用。
問:現(xiàn)在的大學(xué)有部分學(xué)生中途退學(xué),您怎樣看待這現(xiàn)象呢?
D M R:在.com泡沫時(shí)期,我曾經(jīng)為此非常擔(dān)心,現(xiàn)在,至少現(xiàn)在在我們國(guó)家,好象不很普遍了??赡茉蛟谟?,人們已經(jīng)不再把計(jì)算機(jī)科學(xué)看作可以立即賺到大把美金的東東了,因此,現(xiàn)在其他的人對(duì)這門學(xué)科本身更感興趣一點(diǎn)。
問:您對(duì)中國(guó)和中國(guó)的程序員有什么認(rèn)識(shí)?您想對(duì)他們說點(diǎn)什么嗎?
D M R:我訪問中國(guó)好多次,但每次都很短暫,以至于很難形成一個(gè)一般的看法。上一次我還記得,在大學(xué)的見面會(huì)上,我講了一些當(dāng)時(shí)正在從事的工作的情況和歷史,學(xué)生們的態(tài)度非常熱情,他們提問所表達(dá)出的知識(shí)面也很寬博。
問:您怎樣教育自己的孩子和學(xué)生?
D M R:兩者我都不可能有!我沒結(jié)婚,并且我是在工業(yè)系統(tǒng)而不是學(xué)術(shù)機(jī)構(gòu)中。
C語言、UNIX雙雙飛
C語言是一門偉大的語言,一門偉大的承前啟后的語言。C語言是借助Unix操作系統(tǒng)的翅膀而起飛的,Unix操作系統(tǒng)也由于C而得已快速移植落地生根,兩者相輔相承,成就了軟件史上最精彩的一幕。而對(duì)于C的誕生,大師對(duì)他的描述是那樣地不經(jīng)意。C語言的發(fā)展頗為有趣。它的原型ALGOL 60語言。
1963年,劍橋大學(xué)將ALGOL 60語言發(fā)展成為CPL(Combined Programming Language)語言。
1967年,劍橋大學(xué)的Matin Richards 對(duì)CPL語言進(jìn)行了簡(jiǎn)化,于是產(chǎn)生了BCPL語言。
1970年, Ken Thompson將BCPL進(jìn)行了修改,并為它起了一個(gè)有趣的名字“B語言”。意思是將CPL語言煮干,提煉出它的精華。
而在1973年,B語言也給人“煮”了一下,在B語言的基礎(chǔ)上最終設(shè)計(jì)出了一種新的語言,他取了BCPL的第二個(gè)字母作為這種語言的名字,這就是C語言。
為了使UNIX操作系統(tǒng)推廣,1977年Dennis M.Ritchie 發(fā)表了不依賴于具體機(jī)器系統(tǒng)的C語言編譯文本《可移植的C語言編譯程序》。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《C程序設(shè)計(jì)語言(The C Programming Language)》,從而使C語言成為目前世界上流行最廣泛的高級(jí)程序設(shè)計(jì)語言。
1988年,隨著微型計(jì)算機(jī)的日益普及, 出現(xiàn)了許多C語言版本。由于沒有統(tǒng)一的標(biāo)準(zhǔn),使得這些C語言之間出現(xiàn)了一些不一致的地方。為了改變這種情況,美國(guó)國(guó)家標(biāo)準(zhǔn)研究所(ANSI)為C語言制定了一套ANSI標(biāo)準(zhǔn), 成為現(xiàn)行的C語言標(biāo)準(zhǔn)。
C語言發(fā)展迅速, 而且成為最受歡迎的語言之一, 主要因?yàn)樗哂袕?qiáng)大的功能。許多著名的系統(tǒng)軟件,如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。用C語言加上一些匯編語言子程序, 就更能顯示C語言的優(yōu)勢(shì)了。C++、Java等語言受C語言影響深刻。
在技術(shù)方面,曾有人問Dennis, C語言設(shè)計(jì)目標(biāo)有沒有隨著時(shí)間推移而改變?如果沒變,為什么?
他說: 我個(gè)人的目標(biāo)這些年來一直未變,并且,我不是1989和1999年標(biāo)準(zhǔn)的主要推動(dòng)者。無論1989年ANSI標(biāo)準(zhǔn)還是ISO標(biāo)準(zhǔn)都使事情制度化了,這些條文比我最初寫的文檔要好;最需要加以說明的是我早先關(guān)于函數(shù)原型做的工作,對(duì)C++語言的影響是非常重要的一個(gè)影響。
而在關(guān)于眾多計(jì)算機(jī)語言的激烈辯論中,始終處在中心位置的C語言作者Dennis卻顯得很平靜。西班牙的一位大學(xué)生曾經(jīng)問過他類似的問題: 如果 UNIX 被選為過去和當(dāng)前的操作系統(tǒng),盡管過去幾年出現(xiàn)了一些面向?qū)ο蟮恼Z言,毫無疑問C 也將被認(rèn)為是“唯一的語言”。你怎么看待 C++ 和 Java,以及 C 和 C++ 程序員之間在 UseNet 上經(jīng)常發(fā)生的激烈爭(zhēng)論呢?
他說:C++ 的很大一部分得宜于 C。因?yàn)?C 早在 C++ 出現(xiàn)之前就已經(jīng)具有了非常好的兼容性,所以 C++ 才可以采用 C 作為建構(gòu)自身的基礎(chǔ)并使用它來開發(fā)自己的編譯器。C 被設(shè)計(jì)成為一種便攜式匯編語言,對(duì)于這一特性人們褒貶不一,C++ 則試圖把編程方法提高到面向?qū)ο筮@種更抽象的層次上來。從最近形成的標(biāo)準(zhǔn)來看,二者共同的缺點(diǎn)是:帶有過多的裝飾和附屬物。同樣的,它們都采用了相同的編程思想,都試圖按照真正的需求來編寫代碼。Java 顯然是 C++ 的改進(jìn)版本。它砍掉了 C 中的指針操作部分,引入了生成獨(dú)立于機(jī)器的目標(biāo)文件這種編程思想(雖然這個(gè)思想并不是很新的,但是也許直到現(xiàn)在它才真正可行了)。既然 Sun 和 Microsoft 公司(它的產(chǎn)品同樣的有過多的裝飾附件)已經(jīng)把 Java 作為它們之間競(jìng)爭(zhēng)的工具,誰也難以預(yù)料事態(tài)將向何處發(fā)展。
圖:Ken Thompson和 Dennis Ritchie 在PDP11 1971
問:您是怎樣發(fā)明C語言的?發(fā)明的過程是什么樣子的。它對(duì)您的生活和研究有什么影響嗎?
D M R:公正地說,發(fā)明C語言的目的是:為了寫編譯器和語言設(shè)計(jì),為了更易于編寫UNIX操作系統(tǒng)程序,我們做的一個(gè)可以在小型計(jì)算機(jī)上使用的工具。Unix做的比較好,并且PC開始相當(dāng)普遍,由于C語言在Unix上的很好地應(yīng)用,使得用它來寫應(yīng)用程序和操作系統(tǒng)迅速增長(zhǎng)起來。因此,對(duì)我來說,C語言的確非常重要。
問:您覺得C語言和C++有什么不同嗎?
D M R:多年以來,C和C++,已經(jīng)是兩種不同的語言了;Stroustrup先生汲取了C語言語法和潛在的語義學(xué)中的許多東西,形成了C++語言。在一些交叉領(lǐng)域,標(biāo)準(zhǔn)委員會(huì)盡量使兩種語言兼容。
問:您覺得計(jì)算機(jī)語言和我們?nèi)祟惖恼Z言有什么不同呢?
D M R:計(jì)算機(jī)語言更加正式和明確,有統(tǒng)一的規(guī)則,當(dāng)然,它們都是經(jīng)過設(shè)計(jì)的。人類語言有語法,但相對(duì)來說不很正式,有些規(guī)則可以打破,當(dāng)然,它們有不同的目的——為了同人交流而不是同機(jī)器交流。
人物印象
D M R先生的專業(yè)精神令人感動(dòng),近40年如一日,在他所從事的領(lǐng)域辛勤耕耘,而他的多項(xiàng)發(fā)明,包括C語言,Unix,也包括現(xiàn)在正在進(jìn)行的Plan9,無論哪一項(xiàng),在軟件發(fā)展史上都有著舉足輕重的地位,和他的偉大成就形成對(duì)照的是他的行事,態(tài)度低調(diào),他的表達(dá),象他的軟件一樣,簡(jiǎn)潔生動(dòng)而準(zhǔn)確。
C++的成功,很大一部分也來自于C,是C語言的普及和深入,才有了后面的鳳凰涅盤,從另一個(gè)角度,在同另一語言大師Pascal之父Niklaus Wirth交流時(shí),C++的名字也是源自C語言的利器,Wirth先生不無惋惜地表示,后來他開發(fā)的語言可惜沒叫Pascal2。
聯(lián)系客服