執(zhí)著一生的研究工作
C語(yǔ)言或Unix,任一項(xiàng)發(fā)明都足已讓Dennis成為一代又一代程序員的偶像,任一項(xiàng)發(fā)明也足以成就他“軟件藝術(shù)家”的稱號(hào)。但當(dāng)我們接觸這位偉人之后發(fā)現(xiàn),Dennis是一位非常低調(diào)的人,形成對(duì)照的是他在軟件業(yè)的輝煌成就。今天,當(dāng)初與他同期加入貝爾實(shí)驗(yàn)室的科學(xué)家中,多數(shù)人都已安享晚年或是自立門(mén)戶成為老板,而Dennis還是一如既往地在這里從事自己喜歡的研究工作。在完成C語(yǔ)言和Unix兩座高峰后,他還帶領(lǐng)他的研究小組開(kāi)發(fā)出了 商業(yè)操作系統(tǒng)Plan 9和Inferno。
著名的《經(jīng)濟(jì)學(xué)人》雜志曾評(píng)價(jià)他是在C語(yǔ)言和Unix研發(fā)小組中唯一一位至今仍保持著年輕人熱情和活力的偉大科學(xué)家。
影響大師成長(zhǎng)的兩個(gè)人
Dennis認(rèn)為自己并不是在英雄熏陶下成長(zhǎng)起來(lái)的,但在他的職業(yè)生涯中,有兩個(gè)人對(duì)他的影響最大,一個(gè)是他的父親,而另一個(gè)是他的摯友,即同為Unix發(fā)明人的Ken Thompson。尤其是后者,Ken負(fù)責(zé)了大部分的Unix的工作,他也是C語(yǔ)言的前輩。C語(yǔ)言從某種程度上來(lái)講,是Unix開(kāi)發(fā)項(xiàng)目的副產(chǎn)品。
1941年9月9日,Dennis出生于紐約 的Bronxville。1960年前后,他在哈佛大學(xué)學(xué)習(xí)物理和應(yīng)用數(shù)學(xué)。也正是在這時(shí)候,一個(gè)偶然的機(jī)會(huì)改變了他一生的選擇。主修物理學(xué)的他在聽(tīng)取了一些計(jì)算機(jī)講座后,從此開(kāi)始對(duì)計(jì)算機(jī)著迷。
1967年,Dennis步父親后塵,也加入貝爾實(shí)驗(yàn)室,正是由于父親的影響,他走上了科學(xué)研究之路。Dennis在協(xié)助Ken Thompson做Unix操作系統(tǒng)的過(guò)程中,他向Ken的B語(yǔ)言中加入數(shù)據(jù)類型和新的句法,就這樣產(chǎn)生了一種新語(yǔ)言——C。C是便攜式Unix的基礎(chǔ),也在其他領(lǐng)域得到了廣泛應(yīng)用,同時(shí)是后來(lái)的C++語(yǔ)言的基礎(chǔ)。
C語(yǔ)言、Unix雙雙飛
作為一門(mén)偉大的語(yǔ)言,C語(yǔ)言的發(fā)展頗為有趣,C語(yǔ)言是借助Unix操作系統(tǒng)的翅膀而起飛的,Unix操作系統(tǒng)也由于C而得已快速移植落地生根,兩者相輔相承,成就了軟件史上最精彩的一幕。
1967年,Dennis參與的第一個(gè)項(xiàng)目是Multics,是由麻省理工學(xué)院、通用電器公司和貝爾實(shí)驗(yàn)室合作的一個(gè)大型系統(tǒng)。
但到1969年,貝爾實(shí)驗(yàn)室的管理層和研究人員意識(shí)到實(shí)施Multics時(shí)間太緊代價(jià)昂貴,沒(méi)正式放棄之前,開(kāi)始調(diào)整該項(xiàng)目,當(dāng)時(shí)的組長(zhǎng)是Ken Thompson。但調(diào)整計(jì)劃要實(shí)施,迫切需要一門(mén)計(jì)算機(jī)語(yǔ)言做工具,可供選擇的范圍僅僅是PL/I、Fortran等,經(jīng)過(guò)一一實(shí)驗(yàn),不得不放棄,最后Ken 決定設(shè)計(jì)一種自己的語(yǔ)言,將BCPL壓縮到僅有8KB的內(nèi)存中,B語(yǔ)言誕生了。
B語(yǔ)言也并非無(wú)懈可擊,由于自身局限性,在設(shè)計(jì)Unix操作系統(tǒng)時(shí)讓設(shè)計(jì)者吃了不少苦頭。為了解決程序的可移植性問(wèn)題,他們決定對(duì)它進(jìn)行簡(jiǎn)單改進(jìn),形成了NB語(yǔ)言。但NB依然不盡如人意,此后Dennis又對(duì)NB語(yǔ)言做了改進(jìn),C語(yǔ)言誕生。這是個(gè)劃時(shí)代的貢獻(xiàn),C語(yǔ)言讓Unix能夠輕易地被移植到各種不同的機(jī)器上,為Unix的迅速普及立下汗馬功勞。
1977年Dennis發(fā)表了不依賴于具體機(jī)器系統(tǒng)的C語(yǔ)言編譯文本《可移植的C語(yǔ)言編譯程序》。1988年,美國(guó)國(guó)家標(biāo)準(zhǔn)研究所(ANSI)為C語(yǔ)言制定了一套ANSI標(biāo)準(zhǔn)。隨著標(biāo)準(zhǔn)化的深入,C語(yǔ)言發(fā)展迅速, 成為最受歡迎的語(yǔ)言之一。
Dennis 也由于C語(yǔ)言和Unix兩項(xiàng)成就,被人們稱為“軟件藝術(shù)家”,成為許多編程愛(ài)好者膜拜的對(duì)象。C語(yǔ)言最初被用于Unix的編寫(xiě),后來(lái)它成為使用最廣泛的系統(tǒng)開(kāi)發(fā)語(yǔ)言,這卻是Dennis本人也沒(méi)有預(yù)料到的。
對(duì)話C語(yǔ)言之父
C語(yǔ)言是Dennis的得意之作。如今在眾多的關(guān)于各種計(jì)算機(jī)語(yǔ)言的激烈辯論中,處在中心位置的Dennis卻顯得很平靜。從采訪中,我們可以看出他的一些態(tài)度。
問(wèn):您是怎樣發(fā)明C語(yǔ)言的?它對(duì)您的生活和研究有什么影響嗎?
Dennis:C語(yǔ)言最初是為了更易于編寫(xiě)Unix操作系統(tǒng)程序。Unix做得比較好,并且PC開(kāi)始普及,由于C語(yǔ)言在Unix上應(yīng)用得很好,使得用它來(lái)寫(xiě)應(yīng)用程序和操作系統(tǒng)的人迅速增長(zhǎng)起來(lái)。因此,對(duì)我來(lái)說(shuō),C語(yǔ)言的確非常重要。
問(wèn):您覺(jué)得C語(yǔ)言和C++有什么不同嗎?
Dennis:多年以來(lái),C和C++已經(jīng)是兩種不同的語(yǔ)言了;Stroustrup先生汲取了C語(yǔ)言語(yǔ)法和潛在的語(yǔ)義學(xué)中的許多東西,形成了C++語(yǔ)言。在一些交叉領(lǐng)域,標(biāo)準(zhǔn)委員會(huì)盡量使兩種語(yǔ)言兼容。
問(wèn):您對(duì)面向?qū)ο笫窃鯓永斫獾模克遣皇且环N好的可接受的編程思考方式?有沒(méi)有學(xué)習(xí)OO(面向?qū)ο螅┍匦璧挠杏玫墓ぞ撸?/P>
Dennis:我看過(guò)OO的東西但我現(xiàn)在還不是OO迷。這種思想是非常好的,也即是通過(guò)隱藏任務(wù)的執(zhí)行來(lái)定義界面,但是它可能做得有點(diǎn)過(guò)火;它也很難發(fā)現(xiàn)工作本質(zhì)的程序終結(jié);它的所有的東西就是界面。
問(wèn):您能對(duì)IT的將來(lái)做一下預(yù)測(cè)嗎?將來(lái)我們最有可能用什么語(yǔ)言?
Dennis:我對(duì)預(yù)測(cè)不在行,對(duì)于C語(yǔ)言,它可能正在被C++,也可能是Java,或者是更高級(jí)的腳本語(yǔ)言所替代。當(dāng)然,它在關(guān)于系統(tǒng)一類設(shè)計(jì)中還是相當(dāng)強(qiáng)的工具。但是很明顯,人們正在從像C語(yǔ)言之類的直接編譯型語(yǔ)言,轉(zhuǎn)換到注重解釋性的語(yǔ)言,如某些腳本語(yǔ)言。
在采訪的最后,Dennis也對(duì)學(xué)習(xí)編程的朋友提出了一些建議:“知識(shí)面最好要寬一些,不要僅僅局限于編程。即使是編程,最好多學(xué)幾種語(yǔ)言。我在大學(xué)時(shí)花了幾年時(shí)間學(xué)習(xí)物理和計(jì)算理論知識(shí),現(xiàn)在我仍然對(duì)當(dāng)時(shí)的選擇比較滿意”。
