對九個超級程序員的採訪

介紹

  • Linus Torvalds – Linux kernel 作者。
  • Dave Thomas – “Pragmatic Programmer”(注:douban) 和 “Programming Ruby”(注:douban) 以及其它一些優秀書籍的作者。 你可以在 這裡 讀讀他對編程的一些想法。
  • David Heinemeier Hansson – Rails Framework 作者- 一個目前最新最熱的Web開發框架。他的blog在 這裡. (陳皓注:他也是37signals的領導人之一)
  • Steve Yegge – 他可能並不那麼知名,但是他給了很多有意思的回答。他有一個很火的關於編程的 blog,他也是遊戲 “Wyvern” 的作者。(陳皓注:他最火的是去年在google+上對google和amazon的吐槽,06年他應該在google了)
  • Peter Norvig – Research Director at Google, 知名的 Lisper,AI書的著名作家,個人主頁。
  • Guido Van Rossum – Python 發明者。
  • Bjarne Stroustrup – C++發明者, 個人主頁。
  • James Gosling – Java 發明者。
  • Tim Bray – XML 和 Atom 規格說明書作者之一 個人博客 。


Q 1: 你是怎麼學編程的?是從學校裡學的嗎?或者你沒有上過學:) ?

Steve Yegge

在我17歲的時候,我在HP的計算器中用他們的RPN 棧語言自學編程的。在這之前,我嘗試過學習編程一兩次,但都沒有學成。HP 28c 和 48g 的科學計算器是一個很牛的東西,而且還有不錯的文檔。我搞了一本3D圖形的書,並很費力地把其中的Pascal語言轉成RPN棧語言,並用48g寫了一個3D的線框圖渲染圖。運行的還不錯,在我買了PC和Turbo Pascal之後,我開始認真地學習編程。在我進入大學計算機科學專業之前,我已經是一個不錯的程序員了。

我在華盛頓大學拿到了計算機科學學位,這絕對是有價值的,所以,我建議所有的程序員都應該得到計算機科學專業的學位。

Linus Torvalds

我沒有在學校裡學過編程,我在主要是讀我自己想讀的書,或是就直接去編程 (一開始在 Commodore VIC-20 學編程, 然後是 Sinclair QL上編程)。

當然,我覺得上大學非常有用。我沒有去一個工科大學,我上了赫爾辛基大學,這是一個比較偏理論的大學,所以,那裡的教育並沒有那麼多的編程的東西(編程只是很少一部分),這裡大多數的課程都傾向於教一些基礎概念的東西,如:複雜性分析。看上去很無聊,甚至有點浪費時間,但是我還是覺得這些課有用,我對大多數課都還比較enjoy。所以,我覺得我可能在這些方面是一個比較好的程序員。

David Heinemeier Hansson

我學編程是從用HTML做我的第一個網頁開始的。那時,我想當我的網頁能動態地顯示一些內容,所以,我選擇了ASP和PHP。在做完這個網頁後,我知道了怎麼去編程,於是我開始我的計算機科學和商業管理學位的學習。

Peter Norvig

我是從高中和大學課程中學編程的,但是我還是覺得我自己學得更多。

Dave Thomas

我是在高中學編程的。我完全地迷住了,我對編程愛得無法自拔,然後,我開始挑選那些提供軟件開發課程的大學。最終,我去了倫敦大學的帝國學院。第二年我就開始學習軟件開發的課程了,那絕對是非凡的,學生和教員在一起工作把教材做得更好,每一個人都可以從中學到很多。這些課程給了我難以置信和非常雄厚的軟件開發背景。我在那裡讀到了博士,最後去創業了。

關於“我是怎麼學編程的”這個問題,我的回答是“我現在還在學編程”。我認為好的程序員一生都在學編程。這並不是去學一門語言或是一個代碼庫,好的程序員會對他們的編程技藝一年又一年地精益求精。

Guido Van Rossum

我去的那個大學有一個大型主機和很多不同的計算機課程。這對我很重要。

James Gosling

起初,我是自學的。在我去上大學之前,我就找到了一份程序員的工作。但是我很高興我去了大學,在那裡有很多樂趣,最終我學到了博士。

Bjarne Stroustrup

我先上的是Aarhus大學, 然後是 劍橋大學(Cambridge),這兩個大學教了我很多很有用的東西,這些東西為了以後的工作打下了基礎。另外,我對編程和錢的關係學得非常好——知道了真實世界的問題,正確性,維護性,準時交付,等等,這些比教育可能更重要。

Tim Bray

我本來想去做一個數學老師的。但是,那個學數學的大學要我去學幾個計算機的課。

Q 2: 你們覺得對程序員最重要的事是什麼?

Steve Yegge

溝通能力(寫和說)。除非你可以讓你的想法更有效率地傳遞出去,否則你不可能做得比編程更多的事。程序員應該瘋狂地閱讀,鍛鍊寫作能力,參加一些寫作培訓課程,甚至鍛鍊在公開場合演講的能力。

Linus Torvalds

It’s a thing I call “taste”. 有一件事,我把它叫做“品味”。

我傾向於不從熟練程度來評判那些和我工作過的人。這些人能非常艱苦地寫出很多代碼,但是我想從他們對別人的代碼的反應做出評判,這樣我們就可以明白他們自己寫的代碼怎麼樣,知道他們使用的方法怎麼樣。他們對別人的評判還告訴我,他們是不是有好的“品味”。是這樣的,如果一個人沒有“好的品味”,那麼他一般不會很好的評判他人的代碼,他自己寫的代碼通常也不會很好。

哦,這並不只是唯一的事。還有一件事,尤其在開源項目裡,那是他是否有能力能和別人進行簡單的溝通,告訴別人他要幹什麼,怎麼幹。這個能力可以告訴別人為什麼你乾的事是非常重要的,並不是所有的人都有這個能力。

也就是說,有一些人可以寫出很不錯的代碼,但他們並不一定能解釋這些代碼,他們也並不一定有好的品味,但是代碼可以運行得不錯。有時,你需要另一個人(有那種不錯的品味的人)把他的代碼轉成更好的形式。也就是說,任何一個程序員都需要那種可以用清晰的代碼來解決複雜問題的基礎能力。

David Heinemeier Hansson

很強的對有價值的事的感覺。你可以問問自己這個問題你有沒有這種能力:我現在做的這個事值不值得做?很多程序員浪費了如大海一樣的時間去做一些無意義的事。

Peter Norvig

我不覺得只有一個,如果要我說一個的話,我說是“專注”。

Dave Thomas

熱情。

Guido Van Rossum

你的問題很難回答啊:-) 我猜,如果程序員會在早晨煎個雞蛋做早餐,那真是無價的能力。

James Gosling

自我激發。你需要全身心地投入到你要做的事中。

Bjarne Stroustrup

把事想清楚的能力:程序必需要能清楚地理解問題並能清楚地表述解決方案。

Tim Bray

能為自己的直覺提供證據的能力。

Q 3: 你是否認為數學和/或物理是一種很重要的編程技能?為什麼?

Steve Yegge

數學有很多的分支和程序員相關,他們是“離散數學”和“具體數學”。這些分支包括的學科有,概率論,組合數學,圖論,歸納證明,和其它有用的東西。我會鼓勵所有的程序員都去學習離散數學,無論能學多少,因為這總比什麼都不懂強。

對於傳統的數學,我也不經常用,但是我需要的時候這些數學知識會很管用。例如,在我之前的工作中我就用到了微積分。我需要估計每個小時中某服務的高峰時間的流量負載,所以,他的負載是跟著太陽走的就像一個正弦曲線一樣。最簡單的方式就是把每個小時的負載曲線給整合起來。如果我不知道微積分,我就不知道怎麼更為準確地估計。

當年我在開發我的Wyvern遊戲的時候,我的平面幾何的知識對我非常有幫助。而且經常使用代數和線性代數的知識。但我很少在工作中使用三角學或微分方程,微積分同樣也很少。

我想說,簡單的數學基礎讓我的技能比一般程序員好過5%到10%。如果我瞭解更多的數學,我確信我會比今天做得更好,所以,我每週都會花幾個小時學習數學。

我喜歡物理,我還在學習物理,我會花我一生去理解量子力學。但是我個卻沒有發現物理對我的程序員工作有多有用。當然,如果我從事一些和物理相關的工作,可能會有用,例如:3D遊戲編程,或是某種物理特性仿真。

Linus Torvalds

我個人認為有很強的數學背景是一件好事。但我不確信物理是不是這樣的,但是我深信懂數學的人會讓你成為一個更好的程序員。這些智力模型都是相通的。

David Heinemeier Hansson

根本沒用。至少對業務編程和Web應用來說沒用。但是數學可能對一個人的寫作有很重要的幫助。

Peter Norvig

是的。很多相法都是從數學來的:歸納,遞歸,邏輯,等等。

Dave Thomas

也許吧。但老實說,我沒見到過懂這些學科和好的程序員有很大的相關性。

然而,我見過有音樂背景和好的編程技能有很強的相關性。我不知道這為什麼,但是我懷疑大腦中的某個區域可以讓人即可以寫出好的音樂,也可以寫出好的代碼。(陳皓注:@Sir阿怪 貌似就是這個例子)

Guido Van Rossum

數學,當然(對於一些學科是很重要的,我不關心微分方程,但是代數和邏輯學是很重要的),物理,我不覺得對編程技能有關,當然物理在其它很多地方很有意思。

James Gosling

當然!數學教會了我邏輯和推導……讓我有了一雙懂分析的眼睛。當我們分析算法的時候,數學是無法被取代的。

Bjarne Stroustrup

這要看程序員自己和項目性質了。以前的數學很有用,物理一般,但是學好物理是是學習應用數學最好的一條路。

Tim Bray

對我來說,在我的編程生涯中我從來都沒有用過大學裡教的數學。

Q 4: 關於編程,你們認為接下來的大事是什麼?X-Oriented編程,Y語言,量子電腦 ?

Steve Yegge

我認為Web編程會逐漸變成最最重要的客戶端編程。而對於原來傳統的客端端編程都會被廢棄,如: GTK, Java Swing/SWT, Qt, 當然,所有的和平臺有關的東西,例如 Cocoa 和 Win32/MFC/等。

當然,這不會一晚上就發生了。這會在第一個十年內緩慢地發生,而在第二個十年內,Web Apps最終會勝利。工具,語言,協議,和瀏覽器技術都會進步得非常快,並會完全超出你今天能幹的事。每一年都會向前進一步,而從今天開始,我會最終決定把我所有的應用開發全部切換到基於瀏覽器的應用。(陳皓注:我也是這麼認為的,參看《來信,創業,移動互聯網》)

微軟和蘋果最終不願意這個事發生,所以,觸發這個事的第一步會是一個開源的瀏覽器(如:Firefox)開始到了支配市場的地位,然後會出現某種Firefox的殺手級應用(這種殺手級應用可能會像iTunes一樣,所有的人都會用它,只需要下載Firefox)

Linus Torvalds

我並不認為我們會看到一個“大的跳躍”。我們只會看到很多的工作幫助我們把那些沉悶辛苦的工作變得更簡單——會有一個更高級別的語言,也許把簡單的數據庫集成到語言中來會是其中最主要一個。

例如,我個人相信“Visual Basic”在編程方面比“面向對象”做得更多。當然,人們都在取笑VB是一個很爛的編程語言,並且人們在談論OO語言都十多年了。但我還覺得不是這樣的,Visual Basic 不是一個好的語言,但是我覺得VB那簡單的數據庫接口比OO更重要。

所以,我認為會語言有很多的改進,並且,硬件的改進會讓編程更容易,但我並不期望會有巨大的生產力或是革命性的改進。

至少,你不會開始搞真正的AI的東西,我也不認為真的AI會變成某種你不需要編程的東西。

David Heinemeier Hansson

我從不試圖預測未來。我也不相信命運一說。最好預測未來的方式就是去實現未來。

Peter Norvig

大規模的分佈式處理

Dave Thomas

下一個最牛的事會被再下一個最牛的事所掩蓋,然後再被再再下一個所掩蓋,再再再下一個所掩蓋……。這是一件沒完沒了的事,所以,我並不會試圖去找最牛的事,因為這會讓人們忘了那些最真實的問題:把基本的東西做對。我們要讓用戶更滿意,專注於交付有價值的東西,自豪於我們做的事。一個程序員可以使用很多工具把這些事做得更好,而不是去追逐時尚和流行。

Guido Van Rossum

對不起,我沒有那麼多水晶球。我CGI被髮明瞭5年後預測過它 :-)

James Gosling

有兩個事是我現在最關心的,那就是要對付並行和複雜。

Bjarne Stroustrup

我不知道,我也不願猜。

Tim Bray

不知道。

Q 5: 如果你有3個月學一個相對較新的技術,你會學什麼?

Steve Yegge

我的確有3個月的業餘時間,我準備學一下 Dojo (http://dojotoolkit.org) 和高級 AJAX 及 DHTML。我會通過開發一個相當牛的Web應用來學習他們。Dojo 真的酷,並且我確信它會越來越好。

Linus Torvalds

嗯,我真的很愛做 FPGA(可編程芯片),但我部是太忙了而不是坐來來開始學習。我喜愛和硬件打交道:很明顯這個原因是因為我最終在做操作系統,因為操作系統(除了編譯器)基本上都是在和硬件打交道,但我沒有真正地自己去設計和做一個硬件。

David Heinemeier Hansson

Mac 的 Cocoa 編程

Peter Norvig

我想把 Javascript 學得更好,然也當然也想學 flash.

Dave Thomas

如果“新”是對於我來說,那麼我會去學鋼琴課。

如果“新”是說技術,我猜 我會選擇學習某種和為殘疾人服務的有關的技術。

Guido Van Rossum

單板滑雪。

James Gosling

搞點有樂趣的東西,我會學習最新的3D渲染技術。我可能會寫一個光子映射渲染器。

Bjarne Stroustrup

3個月只有很少的東西你可以學,我覺得你只能參加某個成熟領域的培訓。

Tim Bray

安全,加密,數字簽名,身份標識,等等。對我來說,從沒學過這些東西對我來說是個很大的問題。

Q 6: 你們覺得如何讓一些程序員可能有超過其它程序員10倍或100倍的生產力?

Steve Yegge

我想你應該考慮一下為什麼不是讓所有的程序員都一樣牛。托馬斯愛迪生有一句關於天才的名言也許會給你一些啟示。

Linus Torvalds

我真的不知道,我想,一些人之所以更牛是因為他們可以專注於那些重要的事,而更多的只不過是在應付。那些我所知道的真的很牛的程序員從很年輕的時候就在做事了。

David Heinemeier Hansson

把難題變簡單的能力。

Peter Norvig

把整體問題一次性放入大腦的能力。

Dave Thomas

他們關心他們做的事。

Guido Van Rossum

大腦結構基因不同。

James Gosling

他們知道他們要做什麼,他們不併不急於倉促行事。他們有他們要做的事的整個藍圖。

Bjarne Stroustrup

首先,缺少足夠的職業培訓,或基礎不夠。其次,這些人要即聰明(那種可以把事情想清楚,直達核心的能力),又有經驗,並有使用工具的知識。編程需要把理論和實踐結合起來 – 並不是使用沒有實際業務的知識。

Tim Bray

令人驚訝的思維改變。

Q 7: 什麼工具是你的最愛(操作系統,編程/腳本語言,文本編輯器,版本管理,shell,數據庫,或其它沒它你活不了的工具),為什麼不是別的?

Steve Yegge

操作系統: Unix! 我用Linux,cygwin,和 darwin。你無法打敗那些高效的工具。每一個程序員都應該學習使用/bin和/usr/bin下的所有命令。

腳本語言:Ruby。我幾乎對所有的重要的腳本語言都很熟悉: Perl, Python, Tcl, Lua, Awk, Bash, 和一些我忘了的。但是我太懶了,而Ruby是目前所有腳本語言中最簡單的,它應該是天堂製造的。

編程語言:沒有一個我喜歡的,我覺得所有的編程語言都很扯。我傾向於Java,因為它很強,可跨平臺,有多不錯的工具和類庫。但是Java未來會進化或是滅亡,Java還沒有好到可以永遠保持其領先地位。

文本編輯器:Emacs,因為這是迄今最好的編輯器。

版本管理:SVN,Perforce更好一些,但是也很貴。

Shell腳本: Bash, 因為我太懶了去學一個更好的。

數據庫: 當然是MySQL,沒有之一。

其它:我發現GIMP是無價的,但也是令人惱炎火的。我用這個東西好幾年了,但什麼也沒幹,但是我沒它活不了。很諷刺吧。Firefox 越來越是我最重要的工具。如果讓我去用IE和Safari,我會有嚴重的窒息感。

注:所有的這些工具 (Unix, Emacs, Firefox, GIMP, MySQL, Bash, SVN, Perforce) 都有一個共同點:他們是可擴展的。例如:他們都有可編程的API。偉大的程序員知道怎麼編寫他們的工具,而不只是去使用。

Linus Torvalds

實際上,我最終也沒有用過幾個工具,而我卻花了一些時間讓這些工具為我工作。最大的事是我自己寫了個操作系統,我也自己寫了個版本管理系統(git),我用的文本編輯器是 micro-emacs – 最終我也定製和擴展了它。

除了上面三個,其它的東西,我深度關心我的郵件閱讀軟件,我使用“pine”,並不是因為它是史上最好的郵件閱讀軟件,因為我習慣了,用它我會有最低限度的大驚小怪。

David Heinemeier Hansson

OS X, TextMate, Ruby, Subversion, MySQL. 這些組合讓我很快樂。我希望那些有好的品味的專注於重要的事的工具。

Peter Norvig

我不喜歡那三大操作系統 – Windows, Mac, Linux。我喜歡 Python 和 Lisp. Emacs.

Dave Thomas

在使用Linux10年後我轉到Mac平臺有兩年多了。Mac並不見得有多好,但是它不需要很牛的技術,也不需要經常維護,這讓我可以讓我更專心得使用它。

我並不是一個單一工具的信仰者,我喜歡換來換去的,這樣可以讓我有更多的經歷。現在,我使用 OSX, Emacs, TextMate, Rails, Ruby, SVN, CVS, Rake, make, xsltproc, TeX, MySQL, Postgres, 還有一堆高效的小工具。沒人知道我明年會用什麼。

Guido Van Rossum

Unix/Linux, Python, vi+emacs, Firefox.

James Gosling

這些天,我在用 NetBeans. 用它可以幹我想幹的所有的事,清潔,簡單和高效。這是最好的我永遠要生活在其中的環境了。

Bjarne Stroustrup

Unix, sam (一個非常簡單的文本編輯器), 當然,一個好的C++編譯器。

Tim Bray

我喜歡 Unix-like 的操作系統,像 Python 和 Ruby 的動態語言,像Java的靜態語言(具體說來是Java API) Emacs, 還有, bash, whatever, NetBeans.

Q 8: 你最喜歡的編程書是什麼?

Steve Yegge

大哥,這個問題太難了。也許是”Gödel, Escher, Bach: an Eternal Golden Braid” (作者Hofstadter)?雖然這不是嚴格意義上的編程的書,如果你要明確意義上的編程書,那麼可能是 SICP (mitpress.mit.edu).

Linus Torvalds

嗨。這兩天我在讀一些小說,或是非計算機讀物(老的但是有用的 “The Selfish Gene” 作者 Richard Dawkins)。

如果要問我編程的書,我腦子裡只出現了唯 一一本真正的經典的編程的書 Kernighan & Ritchie 的 “The C Programming Language”,因為這本書太牛了,可讀性強並且很短。考虛慮一下你想學到這世上一門最重要編程語言,並且它很要很薄,而且還有可讀性,這真是一個奇蹟。

也就是說,其它我很喜歡的書並不是編程的,而是關於計算機結構和硬件的。那顯然是 Patterson & Hennessy 的計算機結構的書,但是我個人也許更喜歡 Crawford & Gelsinger 的 “Programming the 80386?,這是我在開始寫Linux時用的書。

相似的原因,我還喜歡 Andrew Tanenbaum 的 “Operating Systems: Design and Implementation”.

David Heinemeier Hansson

我喜歡 Extreme Programming Explained 其摒棄了一般的編程實踐,我還喜歡 Patterns of Enterprise Application Architecture 其出眾地說明了抽象和具現的平衡。

Peter Norvig

Structure and Interpretation of Computer Programs

Dave Thomas

這關係到你所謂的“最喜歡”,也許我最喜歡的是IBM的 “IBM/360 Principles of Operation.”

Guido Van Rossum

Neil Stephenson的 Quicksilver.

James Gosling

Programming Pearls 作者Jon Bentley.

Bjarne Stroustrup

K&R.

Tim Bray

Bentley的 Programming Pearls

Q 9: 你最喜歡的和編程無關的一本書是什麼?

Steve Yegge

只能是一本嗎?這不可能。有太多太多我喜歡的書了。

我這個月讀過最喜歡的書是 “Stardust” (Neil Gaiman) 和 “The Mind’s I” (Hofstadter/Dennet).

我最喜歡的作者是 Kurt Vonnegut, Jr. 和 Jack Vance.

Linus Torvalds

我在前面說過 Dawkins的 Selfish Gene。在小說方面,有很多很多我enjoy的,但是幾乎沒有我特別喜歡的一本。我一般不會重讀一本書,我的選擇總是會變。我可能更喜歡科幻小說,如:”Stranger in a Strange Land” 作者 Heinlein,這是我青少年時期最喜歡的書,但現在並不是我喜歡的了。

David Heinemeier Hansson

1984, George Orwell.

Guido Van Rossum

Neil Stephenson 的 Quicksilver.

James Gosling

Guns, Germs & Steel 作者 Jared Diamond

Bjarne Stroustrup

我沒有固定喜歡的書。目前是 O’Brian 的 Aubrey/Maturin 系列。

Tim Bray

One Day in the Life of Ivan Denisovich

Q 10: 你最喜歡的樂隊/演奏家/作曲家?

Steve Yegge

喜歡的風格:古典音樂,動漫原聲音樂,電腦遊戲音樂

喜歡的作曲家:Rachmaninoff, Chopin, Bach

喜歡的演奏者:David Russell (古典吉它), Sviatoslav Richter (鋼琴)

喜歡的動漫音樂: Last Exile, Haibane Renmei

Linus Torvalds

實際上我並不太喜歡音樂,但是當我聽音樂的時候,我一般聽經典搖滾樂,如: Pink Floyd ,Beatles ,Queen 和 The Who 樂隊。

David Heinemeier Hansson

我喜歡很多風格。 Beth Orton, Aimee Mann, Jewel, Lauryn Hill. Actually, 所有的這些都可以歸到 Girls with Guitars ;).

Guido Van Rossum

Philip Glass.

James Gosling

我喜歡聽民歌: Christine Lavin, Woody Guthrie, Pete Seeger…

Bjarne Stroustrup

樂隊: The Dixie Chicks. 作曲家: Beethoven.

Tim Bray

看我的博客吧。


分享到:


相關文章: