真實的C++之父
——Bjarne Stroustrup訪談錄
趙玉勇
Bjarne Stroustrup簡介
許多重要人物之所以成名,或者是因為其改變了歷史或者是因為其創(chuàng)造了歷史,Bjarne Stroustrup先生,C++之父,屬于后者;歸結個人成功的原因,理由可能有許多,但他只有淺顯的兩個一點點:他比多數(shù)人天真和理想主義那么一點點;比多數(shù)人花在解決問題上的時間多一點點。
C++程序設計語言是一種承前啟后,被數(shù)以百萬計的程序員應用在各個領域中的語言,我們正在使用的Windows操作系統(tǒng),我們上網用的瀏覽器IE無不是出自C++的手筆。
C++是一種重要的和比較流行的計算機語言之一,也是未來十年內仍然發(fā)揮重要作用的語言。C++語言是一種通用的應用廣范的程序設計語言,是一種既支持傳統(tǒng)的結構化程序設計,又支持面向對象程序設計的系統(tǒng)復雜的語言。C++對C語言的擴充首先由 Stroustrup先生于1980年在貝爾實驗室提出的,于1983年改名為C++。盡管C++的祖先C語言是世界上最受喜愛和應用最廣的專業(yè)程序設計語言之一,但C++的發(fā)明是必需的。C++的本質就是讓程序員理解和管理更大更復雜的程序。而對這種語言有著最大貢獻的C++之父又是怎樣一個人呢?
Bjarne Stroustrup先生,1950年生于丹麥港口城市奧爾胡斯,1975年在奧爾胡斯大學畢業(yè),1979年獲得劍橋大學計算機科學博士學位。他是C++語言的設計者和實現(xiàn)者,現(xiàn)在是得克薩斯州A&M大學計算機系教授。1979年他來到美國的新澤西州并加入貝爾實驗室,與C語言之父、1983年圖靈獎得主Dennis Ritchie以及大名鼎鼎的Brian Kernighan(兩人合著《C程序設計語言》)共事多年,期間參與了貝爾實驗室的C語言標準化活動。他的研究興趣十分廣泛,包括分布式系統(tǒng)、操作系統(tǒng)、仿真、設計以及編程,Bjarne還積極推動C++的ANSI/ISO標準化。
20世紀90年代以后,Bjarne Stroustrup步入人生的最輝煌時期。
1990年,Bjarne榮獲《財富》雜志評選的“美國12位最年輕的科學家”稱號。
1993年,由于在C++領域的重大貢獻,Bjarne獲得了ACM該年度的 Grace Murray Hopper大獎并成為ACM院士(成立于1947年的ACM協(xié)會是歷史最悠久、目前世界上最大的教育和科學計算協(xié)會,成為ACM院士是個人成就的里程碑)。
1995年,BYTE雜志頒予他“近20年來計算機工業(yè)最具影響力的20人”的稱號。
除了他的專業(yè)研究領域外,他對歷史,通俗文學,攝影,運動,旅行和音樂等有廣泛的興趣。他對C++語言的推廣也做出了極大的貢獻,他寫的書“The C++ Programming Language《C++程序設計語言》”已經成為這種語言中最為流行的學習資料,至少被翻譯成18種語言。
給中國程序員最美好的祝愿
2004年12月8日,杭州,C++之父Bjarne Struostrup先生再次來到中國。我們有幸采訪到了這位大師!請看大師給中國程序員的最美好祝愿。
問: 您對中國和中國的程序員有什么認識?您想對他們說點什么嗎?
Bjarne Stroustrup:中國是個大國,并且她有許許多多有趣的文化。我想和中國程序員說的和對其他國家的程序員說的是一樣的,所以我有如下的回答:優(yōu)秀軟件所具有的特點和技術在全世界都是通用的。
圖 C++之父給中國程序員最美好的祝愿
現(xiàn)在,成為一名電腦高手是許多年輕學生的夢想,面對Stroustrup這樣一位大師級人物的出現(xiàn),最令我們感興趣的問題莫過于:Bjarne成為大師的歷程是什么樣子的呢?
Bjarne Stroustrup先生出生的奧爾胡斯市是日德蘭半島東海岸的一個美麗的小城,那里每家都有自己的小公寓,公寓里有個小院,小院是孩子們踢足球的地方,那時,成為一名足球明星比成為一名電腦高手是更可行的想法,做一名電腦名星好象是很遙遠的事情,因為個人不太可能擁有一臺昂貴的計算機。很幸運,在大學時他就用上了系里的計算機,它叫GIER,是一臺舊的丹麥計算機,有一個房間那么大,程序都寫在磁帶上面,他用它學習Algol 60程序設計。
而對Bjarne生活產生質的變化的事情是什么呢?
他認為在他的發(fā)展生涯中,最關鍵的一個項目是在劍橋大學攻讀博士學位時用Simula67計算機做的模擬分布式系統(tǒng)。做這個項目除了使他成為一名頂尖的程序設計高手外,更使他養(yǎng)成了程序員應具有的溝通和交流能力,這為他后來的發(fā)展奠定了堅實的基礎。
B與C
Bjarne和C有緣。
Bjarne Stroustrup先生和C(China中國)有緣,對他來說中國是一個神秘、美麗而有趣的國度。
Bjarne兩度親密接觸中國,第一次是2002年,曾在中國的幾所大學講學,而第二次是在浙江大學參加ICESS國際會議(ICESS 2004, http://www.cs.zju.edu.cn/icess2004/)。Bjarne Stroustrup先生兩年前在中國有過長時間的旅程,而在杭城的日子恰逢陰雨,這次到來對晴天的期望是強烈的,何況有杭州西湖美景。作為丹麥人,也就是賣火柴的小女孩誕生的地方,也就是安徒生童話誕生的國度,和中國有著很深的淵源,安徒生童話里恰巧里面有一篇《夜鶯》,那里寫到了中國,而Bjarne Stroustrup先生對于C(中國)的認識又是什么呢?
他的回答很微妙,他自然知道安徒生童話,他也很喜歡它們,《夜鶯》中描繪的中國純是虛構,與當時的中國可能有也可能沒有任何關系,安徒生創(chuàng)造了那個“中國”來泛指多個國家及其統(tǒng)治者。而作為一個教育者,他對中國的教育老祖師孔老夫子也有自己獨到的見解。
作為第二個C,自然就是C++了。勿庸置疑,C++對于IT的分量,和對于Bjarne個人的影響,都是巨大的。還有一個C,就是計算機,且看下面他如何描述自己與計算機的聯(lián)系。
問: 您的生活是怎樣和計算機聯(lián)系在一起的?
Bjarne Stroustrup:我也不曉得自己到底是怎樣和計算機聯(lián)系在一起的。當我上高中時,不知什么原因總覺得計算機科學是數(shù)學的某種實用形式。而事實不完全是這樣,或者至少從軟件的發(fā)展上看并不是如此,但正是這種誤解使得我在還不知計算機為何物時選擇了 “計算機科學數(shù)學” ,作為我學習的專業(yè),并獲得了我的碩士學位。我寫完第一個程序后,就著了迷,曾沒有回過頭。正象大家所看到的,很幸運,我找到了一個使自己的才能可以很好地發(fā)揮的位子。
問:您怎樣教育自己的孩子和學生們?
Bjarne Stroustrup:多數(shù)情況下,我是通過實例來進行教學的。我認為多數(shù)人過高的估計了言語的影響力,而過低的估計了這種影響力是怎樣達到的過程。我盡量通過把理論和實踐相結合起來以更好地達到目的,這樣可以比僅用理論或僅用實踐示例來教育更能取得事半功倍的成效。我盡量舉出實例,從這些活生生的實例中引導歸納出一般的規(guī)則和概念。
C++是怎樣煉成的,是什么促成了C++語言?這象迷一樣繞在我們的心頭;那什么又是計算機語言呢?后者弄懂了,前者看起來也許就更簡單了!且看大師的回答:
問: 您覺得計算機語言和我們人類的語言有什么不同呢?
Bjarne Stroustrup:計算機語言要比人類語言簡單的多,并且精確的多,那也是它應該具有的方式。我不贊成用自然語言去指令電腦的想法。一種程序語言是專家們的工具,并且和普通人相比,是對所有的專家來說用更加專業(yè)、定義的更加精確的符號和術語來表達的工具。
當然兩者也有相同之處。那些用的較多的語言比那些使用率較小的語言擁有更多的俗語、表達方式、詞匯,這一點無論是計算機語言還是自然語言都是一樣的。語言還有一個傾向就是越來越易學,但卻很難精通,象C++ 和英語。在兩種語言當中,我們都希望能從最初的基本的應用到真正的掌握。另外一個相同之處就是語言的發(fā)展都要適應一個群體的需求,并且一個大的群體或者說社區(qū)本身就有重要意義,因為作為這個群體的一部分可以讓你有更多的人來進行互動并且有更多的機會可以使用。所有鮮活的語言都是通過獲得新的術語、俗語和表達方式來得到發(fā)展的。在C++中我們已經看到了關于模板技術的迅猛發(fā)展,始因是STL(注:STL指標準模板庫,后面我們將采訪STL之父 Stepanov先生,他確實有許多精彩的言論,和Bjarne Stroustrup先生相比,毫不遜色),也就是經常提到的泛型編程(generic programming)和模板元程序(template metaprogramming)。以后幾年里,我們將會在新的ISO C++標準中看到,比1998年標準中對模板技術更強的支持和更廣的應用。
那么,究竟是什么促成了C++語言呢?
他的研究生涯給了他很大靈感,他所在的AT&T貝爾實驗室是一個光榮的群體,那里有一群非常出色的研究人員,那里有許多著名的IT人物,他們彼此間的影響十分深遠。他曾經和C語言之父Dennis Ritchie親密接觸十多年,他們的辦公室相距不遠,C++語言受C的影響是巨大的。而對于C++來說,尤其值得我們推崇的是:作為一種學術性語言,他是從商業(yè)性語言的重圍中殺出的。
1979年Bjarne在劍橋完成學業(yè)后,到了貝爾實驗室從事研究工作,20世紀80年代,AT&T曾拔款5000美元作為市場預算,創(chuàng)建一門語言的決心可能由此而始。在那里,開始研究幾個與分布式計算有關的項目。可是工作進展得并不順利,因為那時幾乎所有程序設計工具都不適合完成此類工作。所以,他決定自己開發(fā)一個名為“帶類的C”的工具,它既允許以類似于Simula的方式組織程序(這種方式現(xiàn)在被稱為面向對象),同時也支持在硬件層次上進行系統(tǒng)軟件開發(fā)。從1980年開始,“帶類的C”被應用于貝爾實驗室的很多應用領域,在應用過程中,他又學到了很多東西,而C++正是以“帶類的C”為基礎并結合了一些我們學到的新東西發(fā)展而來的。1983年夏天,Rick Mascitti給起了C++的名字,這個名字也象征著兩種語言之間巨大的淵源。
生活中更有意義的事情
對于Bjarne來說,生活中更有意義的事情是什么呢?是學習和教育。這看起來象個沉重的話題,而在Bjarne身上卻顯得如此生動,作為教育家,Bjarne Stroustrup先生本身便是一個成才的典范,他出身于農場和“藍領工人”家庭,他在專業(yè)領域孜孜耕耘,取得了不菲業(yè)績。先是AT&T的研究者,現(xiàn)在又兼任教席,Bjarne從研究室又走進了大學,直接面對大學的新學生!
C++是Bjarne生命中最重要的事情,而還有一些更有意義的事情。
他對大學教育情有獨衷,他現(xiàn)在是A&M大學的教授,這種行動便是很好的說明,在這里,以一種在AT&T研究所中無法采用的方式將研究和教學結合起來。他認為教學是一種與工業(yè)生產不同的能影響世界并使其變得更加美好的方式,而且大學里的研究工作的成果與曾經進行的工業(yè)研究的并不相同 - 不是說它更好,僅僅只是不同而已。
他的一些教育觀點也非常值得我們深思:
他說,不要只學習計算機和編程,要積累一種或多種領域的經驗,要有其他專業(yè)知識,這樣就能明白什么東西值得我們去編程實現(xiàn)。另外,學習多種語言也是他一再強調的,如果只學一種,容易導致想象力的僵化。他本人愛好廣范,精通多種計算機語言。
問:您覺得怎樣才是學編程的好方法?學習語言時一種好的工具是不是必需的?
Bjarne Stroustrup: 這是過去一年左右里一直占據(jù)我大部分注意力的一個問題。我志愿教授電子工程/ 計算機工程專業(yè)大學一年級的學生編程,我認為我們目前教編程的傳統(tǒng)方法不夠嚴謹也不夠廣闊。我們社會的文明進步是建立在軟件上的,因而必須培養(yǎng)更好的軟件專家。我認為已經到了我開始培養(yǎng)新手程序員的時候了,在我此之前我都是把精力放在專家上。我基本的設想是讓學生成為專家,使他們最終能夠編出可靠并且別人可以信賴的軟件,這就意味著在培養(yǎng)新手時要求更高,要將重點放在對程序正確性和處理錯誤的訓練上。既然目標是為了制造現(xiàn)實世界中可用的軟件,我也非常重視標準庫的應用和設計。對于C++標準庫工具的教學,例如向量(vector)和字符(string)從第一周就該開始應用,在第一個月之內類(class)就應該介紹,在第二個月之內介紹圖形(graphics)和繼承性(inheritance)。這種方法和傳統(tǒng)的方法不同,那些教學方法往往花費數(shù)周的時間來區(qū)分那些令人迷惑的C++基本類型,并且浪費寶貴的時間來處理諸如聲明和循環(huán)上的一些迷人耳目的語法細節(jié)。我稱我的方法為“深度優(yōu)先法”,因為我們首先教我們的學生足夠的知識去做一些有用的工作,然后才在這有限的基礎上拓寬他們的理解能力和對工具的使用能力。
我所有的教學都是在實例的基礎上進行的。我通過典型的例子來使學生理解,用親身的體會來解釋一些規(guī)則。自然地,我要求學生寫大量代碼—如果你不讀也不寫大量代碼的話你就學不會編程。第一階段如下,學生必須經過親身寫代碼,體會解題過程中出現(xiàn)的實際問題;第二個階段必須好好體會親身所犯的錯誤,并且學會克服他們。這其中,調試、錯誤處理,還有學會將大問題分解成小問題,從最小的組件來編程是非常重要的。
問:數(shù)學和計算機科學有什么關系嗎?
Bjarne Stroustrup: 兩者并沒有很強的直接聯(lián)系,但是有一部分編程的實質包含在里面-- -象學數(shù)學一樣,編程有時也需要很嚴密的思維。自從古希臘以來,數(shù)學就被用來訓練人們的邏輯思維,并且我覺得如果不用數(shù)學的話很難想象怎樣才能編出好程序來。當然也有一些計算機領域,用到高深的數(shù)學知識。然而,這些領域通常是非常專業(yè)的。數(shù)學,特別是數(shù)學思維是計算機的一個支柱。經驗主義是另一支柱,通過觀察和測量來幫助理解實際的發(fā)展,用以調整我們的系統(tǒng)和行為。兩方面我們都需要。計算機科學不是僅僅用來證明定理的,也不是僅僅用來收集數(shù)據(jù)的。為了有效地實踐計算機科學和發(fā)展高質量軟件,更同時需要數(shù)學和經驗的訓練。
問: 您以前在歐洲學習而現(xiàn)在在美國工作,您覺得歐美有什么學術傳統(tǒng)區(qū)別?怎樣才算是一種好的大學教育呢?尤其對計算機科學來說。現(xiàn)在的大學有部分學生中途退學,您怎樣看待這一現(xiàn)象呢?
Bjarne Stroustrup:這很難回答。歐洲和美國都幅員遼闊,而且有很多不同的學術傳統(tǒng)。真的不好總結,并且在兩地都有一些非常好的大學科系,這不是很容易區(qū)別和下結論的。
很少有學生離開學校去開公司,較多的是離開學校去從事一些有較高收入的工作,但大多數(shù)人還是完成了學業(yè)。我印象中那些放棄了計算機科學學習轉而投入業(yè)界工作的是會為此感到后悔的。從長期眼光來看學位對一個好工作來說是重要的,特別是學生在他們最后一年或最后幾年的學習。當然也確實有些相反的例子,但那些人通常永遠不會再從事真正的技術工作,而轉為商業(yè)管理人員了,如果那是他們想做的,那一個學位并不是必須的。我一直認為:一個學生如果還未獲得學位,最好不要離開學校。
問:我們經常批評我們現(xiàn)在的C++教育不夠現(xiàn)代、不夠科學,您是通過“深度優(yōu)先法”來教授學生的,您是否覺得在一個學生學習早期有些難嗎?我們該如何做呢?
Bjarne Stroustrup:這是必然的。傳統(tǒng)的教授編程的方法是不行的,學完這些課程的學生寫不出很好的代碼。說得更激進一點,他們甚至不知道什么是好的代碼!我的方法可以避免這種情況發(fā)生。我已在300 名學生身上實驗成功。對于程序員來說這是非常關鍵的——包括新程序員——了解基本概念和基本技能。但僅僅了解程序設計語言的基本構造是不夠的。另一方面,如果沒有一種編程語言我們就不可能教授編程的技能和規(guī)則,因此,對一種語言工具充分掌握,做盡可能多的練習是必需的。
很顯然,這種教育問題不僅僅局限于C++語言。我的方法可以應用于任何其他語言。
面向金錢、面向未來和面向對象
面向對象是個有趣的問題,C++正是和面向對象有著非常聯(lián)系的語言,作為一種非商業(yè)化語言,他已經影響了世界范圍數(shù)十億美元的設計決策。而還有許多語言具有這種特點,因而,關于各種語言的爭論喋喋不休地進行了幾十年。
當有人問Bjarne Stroustrup先生:有人說Java是純粹面向對象的,而C#更勝一籌,而還有很多人說它們純粹是面向金錢的。以您之見呢?
Bjarne 的回答非常風趣:我喜歡“面向金錢”這個詞 :-) 還有Andrew Koenig的說法"面向大話"我也喜歡。C++可不面向這兩個東東。對這點我還想指出,我認為純粹性并非什么優(yōu)點。C++的優(yōu)點恰恰在于其支持多種有效的編程風格(多種思維模型吧,如果你一定要這么說)及其組合。最優(yōu)雅最有效也最容易維護的解決方案常常涉及到一種以上的風格(編程模型)。如果一定要用吸引人的字眼,C++是一種多思維模型的語言。在軟件開發(fā)的龐大領域,需求千變萬化,起碼需要一種支持多種編程的設計風格的通用語言,而且很可能需要一種以上呢。再說,世界之大,總容得下好幾種編程語言吧?那種認為一種語言對所有應用和每個程序員都是最好的看法,根本就是荒謬的。
他上面的回答很好地告訴了我們面向對象和面向金錢的關系,也給我們的爭論劃上了圓滿的句號。
問:您對面向對象是怎樣理解的?它是不是一種好的可接受的編程思考方式?有沒有學習OO必須的有用的工具?
Bjarne Stroustrup:OO 技術在現(xiàn)在軟件發(fā)展的扮演了非常重要的角色,但并不是唯一的方法。象泛型程序設計(generic programming),用C++ 模板是另一種方法,這些方法必須通過綜合應用來,才能創(chuàng)造出:一流的、最可讀的、最易于維護的、最高效的程序。但沒有任何一種方法是適合所有要求的。
我主要用C++來編程。我覺得C++是一種學習和實踐OO思想很好的編程語言。
圖 敢問路在何方
問: 您能對IT的將來做一下預測嗎?將來我們最有可能用什么語言?
Bjarne Stroustrup:一個聰慧的幽默大師曾經說過:預測是困難的,特別是對將來的預測。但是我認為未來十年之內我們用的東西在今天的實驗室里是能夠看到的。另外我們將用的最主要的語言也是今天最主要的。我們不可能因為一些新東西和一些更好的東西的出現(xiàn)就重組整個工業(yè)領域,因此在五到十年之內,我們還是用C, C++, COBOL, Fortran, Java, Perl, Python,也許還有C#,和其它許多種語言。沒有一種語言能適合所有用途,并且好的程序員都懂并且都能用好幾種語言。懂好多種語言和多種程序設計技術會使我們可以更好地編程。
對于IT我不想說太多,很顯然:我們會繼續(xù)依賴IT并且它會延伸到越來越多的領域。當然,肯定會有失敗,通常是因為過度的濫用引起的——但是在十年以后我們受IT的影響肯定要比今天大得多。
人物印象
很幸運,通過電郵采訪的同時終于有機會和大師面對面。想象中的大師和面對面見到的有太多的意想不到,用一個詞來形容是“謙遜”。
Bjarne到杭州下了飛機,便撲向美麗的西湖,同去的是他的好友STL之父Alex Stepanov先生。在未去杭州之前,Bjarne Stroustrup先生通過電郵告訴我杭州城的美;去了之后,少有的好天氣讓我們碰上了,爽;夜里在旅館見到了久違的大師,一夜之間見到兩位大師,更爽!
我對Bjarne Stroustrup先生有著特殊的感情,覺得他象位慈父,而他正和我的父親同樣的年紀。大師,慈父!接觸越多,對Bjarne Stroustrup先生的感觸越深。到了杭城,見到大師其人,這種感覺越來越濃厚,他又象海,既有熱情,又能包容。
采訪大部是通過E—mail進行的,采訪的過程中對我的問題孜孜以求,給我的回答細微備至,E—mail的好處在此發(fā)揮到了極致,大洋這邊的我沐著陽光,那邊的他在挑燈夜書。
唯有謝謝眾多C++程友和非C++朋友對我的支持,唯有大師再來杭城時,到最好的茶館將上好的龍井泡上,親手送到大師的手中!
2004年12月19日
posted on 2007-04-06 16:35
學習才能進步 閱讀(268)
評論(0) 編輯 收藏 引用 所屬分類:
收集