Bruce Tate:恐懼是我寫作《七週七語言》的初衷(圖靈訪談)

盼盼姐發表於2015-06-30

Bruce Tate現任icanmakeitbetter.com的CTO,他的團隊主要工作語言是Elixir以及Ruby on Rails。他曾任職於IBM公司13年,並擔任過多家公司的客戶解決方案總監和CTO。Bruce是一位受歡迎的國際講師,他曾在丹麥、班加羅爾、華盛頓、斯特哥爾摩等世界各地發表過主題演講。Bruce著有十餘本技術書,其中包括3本JavaOne暢銷書,以及兩本Jolt大獎獲獎圖書:《七週七語言》Better, Faster, Lighter Java

問:你寫作《七週七語言》的初衷是什麼?

有趣的問題!你可能想不到,我寫作《七週七語言》的原因是恐懼。我擔心隨著硬體設計的改變,這批程式語言(比如Java, Ruby, Python, C#和C++)可能無法勝任處理多核的工作。我害怕的原因在於我個人的經驗侷限在這些語言上。所以我決定做一些研究。一段時間之後,我想可能其他人也想和我一起經歷這個過程,所以我萌生了寫作《七週七語言》的想法。

這個書名可能有些魯莽。沒有人能在七週的時間內學會七種語言,但是這個書名可以引發人們的思考,“我為什麼要學習語言?對我有什麼好處?”我沒有想到這本書會受歡迎,但是這個想法確實很奏效。

問:如果你要重寫《七週七語言》的話,你還會選擇同樣的語言嗎?還是會增加一兩個新的進去?

我已經用實際行動回答了這個問題,因為我已經寫了第二本書,《七週七語言 第二季》(Seven More Languages in Seven Week)。希望在不久的將來,這本書也能被翻譯出來。在《七週七語言 第二季》中我寫到了Elixir,這種語言受到了《七週七語言》的啟發。我還寫到了Elm,這種語言可以響應式程式設計,然後編譯到JavaScript中去。Fred Doad撰寫了一章關於Factor的內容;Ian Dees寫了關於Idris(一種探索型別理論的驚人語言)和Lua的內容;Jack Moffitt撰寫了Julia(併發友好的技術計算)以及最後一章關於MiniKanren的內容,這種語言基本上是Lisp和Prolog相結合的產物。這些作者們幫助我在更短的時間內完成了第二本書,如果只有我一個人是絕對做不到的。

問:為什麼在《七週七語言》中,你會選擇Lisp的方言Clojure,而不是Lisp這種語言本身?

Clojure絕對是最為活躍的Lisp方言。寫作這本書的一部分理由在於找到能夠吸引潛在讀者的話題,而Clojure則引人遐想。這種語言關注正確的問題,比如提高Lisp的可存取性和併發機制。我很喜歡這門語言,它給予了Lisp新生。我一直都是Lisp的祕密粉絲,但是Clojure帶給我們的更多。小範圍的語法調節以及對Java虛擬機器的可存取性改變了Lisp的特色,同時也讓它更容易親近。

問:隨著函數語言程式設計特性加入了Java 8,Scala是否有可能會喪失一些原有相對於Java的優勢?Scala的未來會如何?

Java真心需要變化。Java增加閉包已經是很久以前的事了。但是對於真正的函數語言程式設計來說還是遠遠不夠的。Scala增加了很多很棒的概念,比如currying,這是一種更好的型別系統、型別推導,以及不錯的程式庫。你能看到Scala越來越受歡迎,並且它物有所值。它為Java社群帶來了真正的函數語言程式設計,同時也允許物件導向程式設計。

問:決定一種程式語言是否受歡迎的主要因素是什麼?

在我寫作《七週七語言》的時候,這個問題一直困擾著我。有很多因素能夠決定一種語言的接受情況。這裡面經常存在潛在的商業問題,你可以把它說成是催化劑。在我們語境下,這種催化劑就是併發和新的硬體設計。但是還有其他因素,比如可訪問性、美感,以及實用性。新的語言需要通過社群這一關。偉大和受歡迎的語言需要在合適的時候表明立場,並忠於自己的目標。營銷的工作當然也很繁重。還有一些因素則來源於個人喜好。

所有以上內容都是為了說明——我不知道,但是沒關係!我認為從很多方面來說,七種都比一種更有趣。

問:邏輯程式設計在現階段不是很流行,這種程式語言在未來有機會變成主流嗎?那將是一種什麼樣的契機?

邏輯程式設計不是主流,但是基於約束的系統形成了我們生態環境的重要部分。像排程和後勤這樣的問題需要基於邏輯的系統,而能利用這些語言來解決這類問題的人會受益匪淺。

問:你近期關注了哪種語言?你所期待的未來語言是什麼樣的?

我的公司現在在大範圍內應用Elixir。而我是Elm語言的忠實粉絲。但是我想下一代程式語言與現在的相比,會更加有效地使用型別。我能想象利用型別系統的語言,比如Haskell,但是可能這門語言沒有這麼嚴密,或者有哪些特性可以讓這種嚴密性對於程式設計師來說更易接觸。

問:學習函數語言程式設計對於初學者來說似乎特別困難,你認為函數語言程式設計是為更聰明的程式設計師設計的嗎?

我認為函數語言程式設計對於物件導向的開發者來說確實有些難。但是我並不認為學習函數語言程式設計比你當初學習物件導向程式設計更難。我認為之所以難,是因為它太新了。問題在於,我們要教給新一代程式設計師的不僅僅是函數語言程式設計,同時也包括像併發和分散式這樣的高階概念,甚至也包括像型式類別以及巨集命令這樣的更高層的抽象。如果想一下把這些概念都學會是很困難的。

問:對於程式設計師來說,如何能找到最適合自己的語言?

用不同的語言程式設計!用某種語言來編寫下不平凡的東西。你會成為一位更好的程式設計師,甚至更好的人。

問:為什麼你的團隊選擇Elixir作為工作語言?讓整個團隊都採用一種小眾語言是需要的勇氣的,你們從中獲得了哪些獨特的優勢?對於其他想要採用小眾語言的團隊來說,有什麼需要注意的嗎?

我們團隊都喜歡Ruby,因為它效率高。元程式設計很棒,語法和特性感覺都很自然。工具不錯。但是當我們想要解決併發問題的時候,還是遇到了瓶頸,語言阻礙了我們。我們認為這個問題會一直存在,隨著時間會變得越來越嚴重。

Elixir提供了更高層的抽象,但是同時也保留了松本行弘為Ruby帶來的程式設計樂趣。Elixir還提供了由Erlang帶來的併發,同時還有用來監控的模型以及我們喜歡的故障。

我認為不需要使勁鼓勵其他團隊,他們就會採用新的語言,因為新的硬體設計會馬上讓老程式語言心有餘而力不足。我的意見是嘗試新的語言,看看它們和你需要解決的問題的契合度如何。最後,慢慢來。我們花了兩年的時間才選擇了函數語言程式設計和Elixir。要想把最重要的生產系統遷移過去確實需要一些時間。


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

相關文章