我一生都和C有緣——與C++之父Bjarne Stroustrup接觸

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

尋跡

當IT爆發式膨脹的同時,有一些人曾默默地奉獻,他們可能開創了一個時代,他們的作品可能是IT發展中的一個里程碑……2005年,我們開啟了“尋跡”這個欄目,我們的記者會不定期親身采訪那些具有代表意義的軟件或者軟件技術的開創人員,發掘他們的思想、發掘他們的精神。

 

我一生都和C有緣

——與C++之父Bjarne Stroustrup接觸

特約記者趙玉勇

了解Bjarne與C++

這是Bjarne通過《電腦報》對全國程序員的祝愿

許多重要人物之所以成名,或者是因為其改變了歷史或者是因為其創造了歷史,Bjarne Stroustrup先生(以下簡稱Bjarne),C++之父,屬于后者;歸結個人成功的原因,理由可能有許多,但他只有淺顯的兩個一點點:他比多數人天真和理想主義那么一點點;比多數人花在解決問題上的時間多一點點。

1979年Bjarne來到美國的新澤西州并加入貝爾實驗室,與C語言之父、1983年圖靈獎得主Dennis Ritchie以及大名鼎鼎的Brian Kernighan共事多年,期間參與了貝爾實驗室的C語言標準化活動。

1990年,Bjarne榮獲《財富》雜志評選的“美國12位最年輕的科學家”稱號。

1993年,由于在C++領域的重大貢獻,Bjarne獲得了ACM該年度的Grace Murray Hopper大獎并成為ACM院士(成立于1947年的ACM協會是歷史最悠久、目前世界上最大的教育和科學計算協會,成為ACM院士是個人成就的里程碑)。

1995年,BYTE雜志頒予他“近20年來計算機工業最具影響力的20人”的稱號。

C++程序設計語言是一種承前啟后,被數以百萬計的程序員應用在各個領域中的語言,我們正在使用的Windows操作系統,我們上網用的瀏覽器IE無不是出自C++的手筆。

C++是一種重要的和比較流行的計算機語言之一,它是一種通用的應用廣范的程序設計語言,是一種既支持傳統的結構化程序設計,又支持面向對象程序設計的系統復雜的編程語言。

 

Bjarne和三個C

Bjarne先生,1950年生于丹麥港口城市奧爾胡斯,他是C++語言的設計者和實現者,現在是得克薩斯州A&M大學計算機系教授。最近,在杭州,C++之父Bjarne來到中國,我們記者也有幸采訪到了這位大師!

“我和和C(China中國)非常有緣”,Bjarne告訴記者。對Bjarne來說中國是一個神秘、美麗而有趣的國度。Bjarne曾兩度親密接觸中國,第一次是2002年,曾在中國的幾所大學講學,而第二次是在浙江大學參加ICESS國際會議。作為丹麥人,也就是賣火柴的小女孩誕生的地方,也就是安徒生童話誕生的國度,“我和中國有著很深的淵源,安徒生童話里恰巧里面有一篇《夜鶯》,那里寫到了中國。”Bjarne談到中國非常高興,不過在安徒生創造了那個“中國”來泛指多個國家及其統治者。

作為第二個C,自然就是C++了。勿庸置疑,C++對于IT的分量,和對于Bjarne個人的影響,都是巨大的。還有一個C,就是計算機(Computer),Bjarne告訴記者:“在他上高中時,不知什么原因總覺得計算機科學是數學的某種實用形式。而事實不完全是這樣,或者至少從軟件的發展上看并不是如此,但正是這種誤解使得我在還不知計算機為何物時選擇了 ‘計算機科學數學’。”當初,在他上高中的時候,Bjarne完成第一個程序后,他開始著迷計算機,沒有回過頭。正像大家所看到的,Bjarne找到了一個使自己的才能可以很好地發揮的位子。

 

C++是怎樣煉成的

究竟是什么促成了C++語言呢?C++對C語言的擴充首先由Bjarne于1980年在貝爾實驗室提出的,并于1983年命名為C++。盡管C++的“祖先”C語言是世界上最受喜愛和應用最廣的專業程序設計語言之一,但C++的發明是必需的,因為C++可以讓程序員理解和管理更大更復雜的程序。

C++的誕生是Bjarne的研究生涯給了他很大靈感,他所在的AT&T貝爾實驗室是一個光榮的群體,那里有一群非常出色的研究人員,那里有許多著名的IT人物,他們彼此間的影響十分深遠。Bjarne和C語言之父Dennis Ritchie共事十多年,他們的辦公室相距不遠,C++語言受C的影響是巨大的。而對于C++來說,

1979年Bjarne在劍橋完成學業后,到了貝爾實驗室從事研究工作,20世紀80年代,AT&T曾拔款5000美元作為市場預算,創建一門語言的決心可能由此而始。在那里,開始研究幾個與分布式計算有關的項目。可是工作進展得并不順利,因為那時幾乎所有程序設計工具都不適合完成此類工作。所以,他決定自己開發一個名為“帶類的C”(“C with Classes”)的工具,它既允許以類似于Simula的方式組織程序(這種方式現在被稱為面向對象),同時也支持在硬件層次上進行系統軟件開發。從1980年開始,“帶類的C”被應用于貝爾實驗室的很多應用領域,在應用過程中,他又學到了很多東西,而C++正是以“帶類的C”為基礎并結合了一些我們學到的新東西發展而來。1983年夏天,Rick Mascitti給起了C++的名字,這個名字也象征著兩種語言之間巨大的淵源,C++這個名字正式被使用是在1983年12月。

 

BjarneIT的預測

一個聰慧的幽默大師曾經說過:預測是困難的,特別是對將來的預測。Bjarne還是告訴記者,他認為未來十年之內我們用的東西在今天的實驗室里是能夠看到的。另外我們將用的最主要的語言也是今天最主要的。我們不可能因為一些新東西和一些更好的東西的出現就重組整個工業領域,因此在五到十年之內,我們還是用C、C++、COBOL、Fortran 、Java、Perl和Python,也許還有C#,和其它許多種語言。沒有一種語言能適合所有用途,并且好的程序員都懂并且都能用好幾種語言。懂好多種語言和多種程序設計技術會使我們可以更好地編程。

“對于IT我不想說太多,很顯然,我們會繼續依賴IT并且它會延伸到越來越多的領域。當然,肯定會有失敗,通常是因為過度的濫用引起的——但是在十年以后我們受IT的影響肯定要比今天大得多。”

在本期G13版是我們的特約記者和Bjarne的真實對話。

(下轉G13版)

 

 

人物印象

很幸運,通過電郵采訪的同時終于有機會和大師面對面。想象中的大師和面對面見到的有太多的意想不到,用一個詞來形容是“謙遜”。

Bjarne到杭州下了飛機,便撲向美麗的西湖,同去的是他的好友STL之父Alex Stepanov先生。

我對Bjarne Stroustrup先生有著特殊的感情,覺得他像位慈父,而他正和我的父親同樣的年紀。大師,慈父!接觸越多,對Bjarne的感觸越深。到了杭城,見到大師其人,這種感覺越來越濃厚,他又像海,既有熱情,又能包容。

采訪內容大部分是通過E—mail進行的,采訪的過程中對我的問題孜孜以求,給我的回答細微備至,E—mail的好處在此發揮到了極致,大洋這邊的我沐著陽光,那邊的他在挑燈夜書。

 

Bjarne先生個人網站:http://www.research.att.com/~bs/homepage.html,

 

尋跡

C++之父談編程

 

編程中的教與學

    編程愛好者自然是無比關心自己學習的方法、進度等的,那么教的方法在一定程度上也指明了自學者的方向。就讓我們先來聽聽大師對于教與學的看法和主張。

問:能否談談你對傳統編程教學的看法和你的主張?

Bjarne這是過去一年左右里一直占據我大部分注意力的一個問題。我志愿教授電子工程/計算機工程專業大學一年級的學生編程,我認為我們目前教編程的傳統方法不夠嚴謹也不夠廣闊。我們社會的文明進步是建立在軟件上的,因而必須培養更好的軟件專家。

我認為已經到了我開始培養新手程序員的時候了,在這之前我都是把精力放在專家上。我基本的設想是讓學生成為專家,使他們最終能夠編出可靠并且別人可以信賴的軟件,這就意味著在培養新手時要求更高,要將重點放在對程序正確性和處理錯誤的訓練上。

這種方法和傳統的方法不同,那些教學方法往往花費數周的時間來區分那些令人迷惑的C++基本類型,并且浪費寶貴的時間來處理諸如聲明和循環上的一些迷人耳目的語法細節。我稱我的方法為“深度優先法”,因為我們首先教我們的學生足夠的知識去做一些有用的工作,然后才在這有限的基礎上拓寬他們的理解能力和對工具的使用能力。反過來,學生們學習編程的態度或者理念我認為也應該如此。

 

問:能否談談您的具體教學方法?

Bjarne既然我教學的目標是為了學生制造現實世界中可用的軟件,我也非常重視標準庫的應用和設計。對于C++標準庫工具的教學,例如向量(vector)和字符(string)從第一周就該開始應用,在第一個月之內類(class)就應該介紹,在第二個月之內介紹圖形(graphics) 和繼承性(inheritance)。

我所有的教學都是在實例的基礎上進行的。我通過典型的例子來使學生理解,用親身的體會來解釋一些規則。自然地,我要求學生寫大量代碼—如果你不讀也不寫大量代碼的話你就學不會編程。

第一階段如下,學生必須經過親身寫代碼,體會解題過程中出現的實際問題;第二個階段必須好好體會親身所犯的錯誤,并且學會克服他們。這其中,調試、錯誤處理,還有學會將大問題分解成小問題,從最小的組件來編程是非常重要的。

 

問:我們經常批評我們現在的C++教育不夠現代、不夠科學,您是通過“深度優先法”來教授學生的,請再簡單談談您的教學方法和傳統方法在理念上的不同?

Bjarne傳統的教授編程的方法是不行的,學完一些課程的學生寫不出很好的代碼。說得更激進一點,他們甚至不知道什么是好的代碼。我的方法可以避免這種情況發生。我已在300名學生身上實驗成功。

對于程序員來說這是非常關鍵的——包括新程序員,了解基本概念和基本技能,但僅僅了解程序設計語言的基本構造是不夠的。另一方面,如果沒有一種編程語言我們就不可能教授編程的技能和規則,因此,對一種語言工具充分掌握,做盡可能多的練習是必需的。

很顯然,這種教育問題不僅僅局限于C++語言。我的方法可以應用于任何其他語言。

面向金錢還是面向對象

既然請C++之父來談編程,就沒有辦法回避面向對象這個有趣的問題。C++正是和面向對象有著非常緊密聯系的語言,作為一種非商業化語言,他已經影響了世界范圍內數十億美元的設計決策。讓我們來看看C++之父對這些問題的看法。

問:有人說Java是純粹面向對象的,而C#更勝一籌,而還有很多人說它們純粹是面向金錢的。以您之見呢?

Bjarne我喜歡“面向金錢”這個詞,還有Andrew Koenig的說法“面向大話”我也喜歡。C++可不面向這兩個東西。對這點我還想指出,我認為純粹性并非什么優點。C++的優點恰恰在于其支持多種有效的編程風格(也可以說是多種思維模型吧)及其組合。最優雅最有效也最容易維護的解決方案常常涉及到一種以上的風格。如果一定要用吸引人的字眼,那么可以說C++是一種多思維模型的語言。

在軟件開發的龐大領域,需求千變萬化,起碼需要一種支持多種編程的設計風格的通用語言,而且很可能需要一種以上呢。再說,世界之大,總容得下好幾種編程語言吧?那種認為一種語言對所有應用和每個程序員都是最好的看法,根本就是荒謬的。

 

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

BjarneOO技術在現在的軟件發展中扮演了非常重要的角色,但并不是唯一的方法。象泛型程序設計(generic programming),用C++ 模板也是另一種方法。這些方法必須通過綜合應用才能創造出:一流的、最可讀的、最易于維護的、最高效的程序。但沒有任何一種方法是適合所有要求的。

我主要用C++來編程。我覺得C++是一種學習和實踐OO思想很好的編程語言。

問:大家都在談論數學和計算機科學的關系,能否談談您的看法?

 Bjarne兩者并沒有很強的直接聯系,但是有一部分編程的實質包含在里面---像學數學一樣,編程有時也需要很嚴密的思維。自從古希臘以來,數學就被用來訓練人們的邏輯思維,并且我覺得如果不用數學的話很難想象怎樣才能編出好程序來。當然也有一些計算機領域,用到高深的數學知識。然而,這些領域通常是非常專業的。

數學,特別是數學思維是計算機科學的一個支柱,經驗主義是另一支柱。通過觀察和測量來幫助理解實際的發展,用以調整我們的系統和行為,兩方面我們都需要。計算機科學不是僅僅用來證明定理的,也不是僅僅用來收集數據的。為了有效地實踐計算機科學和發展高質量軟件,更同時需要數學和經驗的訓練。


趙玉勇 2011-02-23 06:01:31

[新一篇] 精英也如此犯傻 IT精英們不斷上演的十大傻事

[舊一篇] 我希望四年前就有人告訴我的事情
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表