Brian W. Kernighan:我與CS的半個世紀(圖靈訪談)

武衛東發表於2012-04-30

圖靈訪談之二十二:專訪Brian W. Kernighan

K&R C和AWK中的K都代表“Kernighan”。他和Dennis Ritchie合著了C Programming Language,他發明了AWK和AMPL程式語言。C Programming Language是世界上第一本被廣泛認可的C語言教程,平實、優雅、簡潔,已成為程式語言教程中的絕佳典範。作為貝爾實驗室的電腦科學家,Kernighan曾與Unix系統的創造者Ken Thompson和Dennis Ritchie一起工作,在這個影響深遠的系統中留下自己的印記。

在貝爾實驗室工作30多年後,Kernighan開始在普林斯頓大學教學,他的新書D is for Digital 解釋了計算和通訊領域的運作方式,並討論了新技術帶來的社會、政治和法律問題。他認為,今天每個人都應該知道這些。這本書簡潔不簡單,即使閱讀的人沒什麼技術背景,也不妨礙他們理解書中的世界。

圖靈社群有幸邀得Brian W. Kernighan接受訪談,暢談他與CS的半個世紀。訪談中,除了意料之中的睿智外,更令我們感動的是大師對CS的那種50年不變的執著與活力。

enter image description here

圖靈社群:非常感謝您授權我們翻譯D is for Digital一書,並同意接受我們採訪。您曾經說過,您在60年代進入計算機行業純屬意外,那時您在普林斯頓大學選擇了新開的電腦科學專業。現在,快50年過去了,而您成為了普林斯頓大學計算機系的教授。如今的計算機系的學生跟你們這些前輩相比,都有哪些不同?您對計算機行業的認識有什麼變化嗎?

Kernighan:我在1964年進普林斯頓大學研究生院的時候,還沒有一個單獨的電腦科學系,只是在電氣工程系有少數教授對計算機很感興趣。所以,那個時候計算機是個全新的領域,大多數人包括教員對它都不很熟悉。這也使得工作很有意思,因為什麼都是新的,做什麼都有可能出點成就。而今,將近50年之後,要跟諸如物理學或機械工程去比,電腦科學仍然是門年輕的學科,但絕對是比以往更加趨近“成熟”了。這就意味著很難再做出很重大的發現,而要成為在這個領域有著良好修養的人,就得學習更為艱深的內容。我讀研究生的時候,同學裡以前學什麼的都有,物理,數學,電氣工程,等等。現在,計算機系的研究生多數人本科也是計算機專業的。而在讀計算機的本科生裡,相當多的人在高中甚至更早,就大量接觸過計算機,當然不是所有人都這樣。經驗和專業化分工都越來越早地到來。

計算機行業當然也有了深刻的變化。我畢業的那會兒,基本上影響甚至說主宰計算機行業的都是些大公司,比如IBM,AT&T。我就在AT&T工作——貝爾實驗室屬於AT&T。這些大公司主要生產硬體,所有軟體方面的工作都是附屬的,目的是為了把硬體賣出去。今天,雖然說也還有類似影響力很大的公司,比如微軟、谷歌、蘋果,但是他們不像早期那些做硬體的公司業務範圍那麼全面,規模也沒有那麼大。AT&T在1970年員工數量就遠不止100萬,微軟今天的人數還不到其十分之一。現在,硬體的成本穩步降低,因特網的發展持續走高,任何人只要有個好創意就可以白手起家去創業,而且(撞上運了)能夠飛速成長。谷歌只有15年的歷史,Facebook才8年,Instagram剛被Facebook用10億美元收購,它才1歲半。顯然這是一個計算機行業創業的黃金時代,我發現如今學生的一個很大不同是,許多人開公司的願望非常強烈。50年前開家公司特別難,現在則易如反掌。當然,要想取得巨大的成功,難度可能沒有變,只是進入的門檻降低了,於是更多的人都想試一把。

圖靈社群:回顧您近50年的職業生涯,有什麼寶貴經驗甚至是失敗教訓可以與中國讀者分享的嗎?在中國,有幾百萬的學生和專業人士在計算機領域學習和工作。

Kernighan:學生們總要我提職業建議,通常我都是根據自己的經驗或教訓來給出回答。我認為自己沒有什麼特別深刻的見解,不過我覺得,最好是做你自己真正喜歡的事情。如果你覺得工作有樂趣,自然會聞雞起舞,廢寢忘食,因為這是你自己的興趣所在。要儘可能多瞭解不同的領域,因為往往是前所未有的新領域應用會帶來最有意思的計算機發展。路易•巴斯德曾經說過,“機會(也就是好運)眷顧有準備的人”。所以,你知道的越多,想過的越多,就越有可能發現冒出來的機會。學會清晰明白地說話和寫作,特別是當面對不是你自己領域的專家人群時,這些基本技能會使你受益匪淺,無論你用自己的專門技術做什麼都是如此。要跟最強的人一起工作,虛心向他們學習。

圖靈社群:您一定教過不少中國學生,也跟中國的IT專業人士一起工作過。您認為那些以前沒有美國教育背景或者沒有美國工作經驗的中國學生有什麼共同特質?他們需要改進哪些方面?

Kernighan:我認識很多極為出色的中國朋友和同事,我讀研究生的時候甚至更早就認識一些,現在我上的課也有中國研究生做助教。他們真的很棒!我認為很多來美國的中國學生的主要問題是如何對付快速的英語口語會話。要想流利地使用外語,需要大量的時間和精力,自然是越早開始學就越容易。很重要的一點是,要有意識地培養自己的語言能力,把自己放到一個必須使用外語的環境去,比如去參加無人懂你的母語的聚會。

圖靈社群:眾所周知,您寫過或與人合著過好些經典的計算機圖書。這些書深受中國讀者歡迎。有些好奇的人想知道您是否接受過技術寫作的專門訓練。您能否講講您一般是怎麼寫作的?

Kernighan:有些作者說自己寫作時一氣呵成,從來不用修改,我不是這樣的。我會先花很多時間考慮我要說什麼,再花很多時間考慮書這種大專案的組織結構和基本內容。一旦基本想法明確了,我就動筆寫作。我會盡快形成文字,得到還算可以的一份初稿。然後我就花大量時間去改,初稿會經過反覆修改,不但要做到內容連貫,而且我還要字斟句酌。最終到了不再反覆的時候,或者沒有時間再改的時候,就算定稿了。但我的基本寫作方式是反覆修改。

圖靈社群:許多中國人讀過您合著的K&R C語言書。不少人甚至以為您也是C語言開發者。您認為是什麼原因使得C語言歷經40多年還如此廣受歡迎?

Kernighan:程式語言要權衡效率、表達性和大小,我認為這個方面C仍然比任何其他語言做得要好。其他語言生成的程式碼跑得沒有它快,在整個程式設計過程中生成的程式也沒有它緊湊。C也能非常貼近硬體,而又不必降低到組合語言的層面。因此,當程式設計效率很重要,或者程式碼規模很重要的時候,C就仍然會是個很好的選擇。如果我要寫個操作文字內容的程式,我很可能會選擇Python那樣的語言;但如果我要寫作業系統或者裝置驅動程式之類的系統,這時要關注執行效率,而且要完全掌控硬體,我就會選擇C。

圖靈社群:丹尼斯•裡奇去年去世的時候,我們社群上翻譯和寫作了不少文章來紀念他。作為他的合著者和好朋友,您可否回憶關於他印象最深的一些事兒?

Kernighan:丹尼斯毫無疑問是個極其聰明的人,一個偉大的程式設計師,但我最看重的是他是個非常友善和大方的人,而且極具幽默感。舉個例子說明他大方,我和Bill Plauger寫作Software Tools那本書的時候,覺得應該寫一個簡單的巨集處理器作例證,來為書增色。我著手嘗試寫一寫,結果糟了,沒寫出來。丹尼斯就來幫我們寫了一個,他把這個巨集處理器叫做m4,這正是我們想要的東西。我們在書裡使用了這個巨集處理器,現在的Unix和Linux系統裡還在使用它。丹尼斯從來不要求我們在書中致謝他,他就是這麼無私地幫助他的同事。當然,在Unix第6版的原始碼裡那句有名的註釋:

/* You are not expected to understand this. */ (我們不指望你能理解它。)

恰恰最好地印證了他那故作一本正經的幽默感。

圖靈社群:您一直密切關注著程式語言的發展。您在貝爾實驗室的同事參與開發了Go語言,您是怎麼看這門 C + Python 式的語言的?

Kernighan:我只是粗略瞭解了一下Go語言,所以還不足以去預測它將如何改變程式設計世界。現實地說,要開創一門新語言十分困難,因為現存的那麼多程式語言的慣性很大。新語言要想讓大家花費工夫學習和採用,必須用起來很容易,而且在某個新領域效果很強。我十分敬重Ken Thompson和Rob Pike,他們創造了Go,而且Go有些非常好的特性,但我覺得要想讓Go像Python那樣成功,成為一門主流的程式語言,依舊任重而道遠。

圖靈社群:我們注意到您跟許多人合作過寫書和做軟體開發,而且總能得出很好的成果。您的確是一位優秀的團隊合作者。可否分享一些團隊合作的技巧,介紹幾位您印象深刻的合作者呢?

Kernighan:我一直以來都非常幸運,能和傑出的人士共事。貝爾實驗室真是個工作的好地方,有那麼多偉大的人才,而且工作氛圍鼓勵相互合作。因此,與其他人合作只是我們慣常的工作方式。從我個人觀點出發,我認為最好是和比你優秀的人合作,這樣你就可以從他那裡學到很多,這在貝爾實驗室自然不是個難事兒,因為我們有那麼多傑出的人才,想要不與更優秀的人合作都難。我認為重要的另一點是,不要去考慮這項工作該歸功於誰。最好是隻考慮做事,不去想分清究竟誰做了哪個部分,這是合作而不是競爭。眾人拾柴火焰高,總比一個人單打獨鬥強。寫書自然更是如此,有兩三個人合著總比一個人寫要好。

圖靈社群D is for Digital是您獨自創作的最新著作。您是怎麼想到要寫這麼一本書?獨自創作和與人合著有哪些不一樣?順便問一下,您為什麼起這個書名?這個名字讓我想到C語言的那本書。

Kernighan:我在普林斯頓給非理工科學生開一門介紹計算機和通訊的課程,講了有十二三年了。學生們都很聰明,就是興趣不在計算機上。所以,要把這個技術內容講得讓他們喜歡上,還真是個很有意思的難題。我找不到一本好的教材,就想著乾脆自己寫一本,就以課堂上講的內容為基礎。這其實是我獨自創作的第一本書,結果我立即意識到以前我是多麼依賴丹尼斯•裡奇和Rob Pike那些天才的合著者啊。自己單獨寫書要難得多,沒人和你互審把關,檢查內容是否合乎邏輯、準確無誤。所幸有不少朋友仔細閱讀了我寫的初稿,給了我很大的幫助。書名源自我2003年在普林斯頓的一次講座,也想過其他一些名字,但都沒它好。能讓你聯想到The C Programming Language,真是個讓人高興的巧合。

圖靈社群:這本書跟你以前寫的書的不同點在於,它是給非技術背景的人寫的。在您看來,在非技術背景人士的生活和工作中,計算機應該扮演什麼樣的角色?這些人該怎樣去學習電腦科學?

Kernighan:我認為非技術背景的人不必學習電腦科學,但是任何受過教育和知識全面的人,都應該對於今日核心的新技術有一些基本的瞭解。計算機在我們今天的世界中已是無孔不入,我們有必要了解計算機在做什麼,是怎麼做的,對我們的生活又有多大的影響。否則的話,我們就不能控制計算機的使用方式。比如說,如果你知道因特網是怎麼回事兒,就有能力防範欺詐,保護自己的隱私;如果你知道手機是怎麼回事兒,就更能夠知道它的侷限,知道隨意下載應用會有什麼樣的危害。

圖靈社群:在我們聯絡D is for Digital的過程中,您提到您最關心的是中文版的質量。您的書以前遇到過被翻譯得一團糟的問題嗎?

Kernighan:哦,我當然不擔心中文版的質量了!多年以前,歐洲曾出現過質量很差的譯本,顯然是因為譯者不理解技術內容,使用了錯誤的術語,或者搞錯了原文的意思。我很幸運有來自五湖四海的朋友和同事,他們精通各種語言,能幫我準確地評估翻譯作品的質量。

圖靈社群:除了教學和寫作,您還在做哪些計算機相關的工作?有什麼有趣的想法可以和中國讀者分享的嗎?

Kernighan:教學佔據了我的全部工作時間,暑假期間我經常會在谷歌的紐約公司工作,做些與Google Docs相關的工作,感覺很棒。我一直以來對文件處理軟體感興趣,所以這個工作跟我很匹配。到了寒假期間,我會嘗試不同的程式語言和工具,為下一年的教學做準備。計算機技術發展太快了,應用領域也在不斷擴充套件,想要迎頭趕上也十分不易。我相信中國讀者也有這樣的體會。

圖靈社群:謝謝您抽出時間接受我們的採訪。


更多精彩,加入圖靈訪談微信!

相關文章