松本行弘:代碼的將來

非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/17487前端

松本行弘(Yukihiro Matsumoto),Ruby語言發明者,亦是亞洲數一數二的編程語言發明者。現兼任網絡應用通訊研究所(NaCl)研究員、樂天技術研究所研究員、Heroku首席架構師等。暱稱「Matz」。討厭東京,喜歡溫泉。圖靈社區就《代碼的將來》,以及中國讀者所關心的一些話題,採訪了Ruby語言設計者松本行弘(如下簡稱Matz)先生。(採訪者:《代碼的將來》譯者周自恆程序員

周:松本先生今年出版了新書《代碼的將來》,這本書的中文版正在由我進行翻譯,預計明年會在中國出版。您的上一本書《松本行弘的程序世界》在中國受到了讀者的好評,此次的新書和前做相比有哪些不一樣,又有哪些看點呢?編程

Matz:《松本行弘的程序世界》一共涉及了14個話題,每一個話題都是淺嘗輒止,內容比較普遍但不是很深刻,而此次的新書則是設定了一個大的主題——即對將來即將到來新技術的思考,所以內容比《程序世界》所涉及的範圍要窄一些。此外,這本書還在時間尺度上進行了探討,例如從計算機出現以來,到如今爲止經歷了怎樣的變化,並由此來思考將來可能會發生的變化,也就是對過去和將來兩方面都進行了思考。計算機的世界變化很是快,而這本書的目的在於探討其將來變化的方向。ruby

周:提及計算機的發展,您在書中還提到了關於摩爾定律的一些話題呢。服務器

Matz:摩爾定律是描述計算機將如何發生變化的一個定律,書中所探討的不只包括計算機自己的變化,還包括計算機爲周圍的環境所帶來的變化。微信

周:關於編程語言進化的方向,保羅·格雷厄姆在一篇名叫「一百年後的編程語言」的文章(參見圖靈圖書《黑客與畫家》P156)中,主張「擁有最簡潔最小核心的編程語言」將是將來發展的趨勢。對於這一觀點,您在書中表示「不一樣意」,這是爲何呢?您對編程語言發展方向的見解又是怎樣的呢?網絡

Matz:保羅是一個很喜歡Lisp的人,而Lisp所具有的特性正好符合他所說的「一百年後的編程語言」的樣子,所以保羅認爲一百年後的編程語言就應該變成Lisp這個樣子。但實際上,Lisp這個語言的歷史已經有50多年了,說實話,Lisp如今並無成爲一種有不少人在用的主流語言。我以爲這也許是由於Lisp對於大多數程序員來講不具有那麼大的魅力,也就是說,做爲一種「擁有最小核心」的語言,或者從某種意義上說是一種很「美麗」的語言,和程序員們所指望的語言之間,存在着必定的差距。若是一兩年的時間裏,Lisp的魅力沒有被你們所接受,那還能夠理解,但已通過了50年尚未被普遍接受的話,是否是它在本質上就不太符合你們的指望呢?「對人類來講好用的語言」和「擁有最小核心的語言」之間的這個差距多是很大的,我以爲可能未來100年也沒辦法消除。至於將來的編程語言應該是怎樣的,我以爲應該是兼具接近Lisp的運行模型,以及人類容易理解的語法這兩方面特徵,這麼一看Ruby是否是更接近這樣一種語言呢?架構

周:松本先生被稱爲Ruby之父,咱們知道在編程語言的設計過程當中,可能要作出不少選擇,例如動態仍是靜態、基於原型仍是基於類等等。在Ruby的特性中,您認爲當初最難作的選擇是什麼?框架

Matz:在設計Ruby以前,我在上大學的時候還設計過另一種語言,而那種語言是徹底靜態的,和Eiffel語言很是類似。而我本來也是特別喜歡靜態語言的,不過上大學時設計的那種語言是以學術研究爲目的的,多年以後,當我想設計一種編程語言做爲本身的工具來用的時候,我就以爲仍是動態語言實際用起來比較好用。抱着這樣的想法,我設計了Ruby,如今看來這個設計仍是正確的。那麼當初對於Ruby應該是靜態仍是動態這個問題,也許算不上是最難的吧,但至少是我在設計中作出的「最大」的一個判斷。而在此以後,由於是動態語言,那就借鑑一下Smalltalk和Lisp吧,Perl有一些功能也不錯,因而如此這般吸取了這樣一些語言的特性,也就顯得比較天然而然了。Ruby的特色在於Mixin模塊,而這個特色在Ruby誕生當時還算是很是罕見的,由於我不喜歡多繼承,總以爲應該有一個更簡單的方式,因此就設計了Mixin模塊。編程語言

周:那麼如今回過頭來看,Ruby當中有哪些地方會讓您以爲「若是當初設計成這樣就行了」呢?

Matz:最開始的時候個人目標只是想實現Perl所具有的功能,所以從Perl借鑑了不少,好比說用美圓符號($)來修飾變量名之類的,如今看來以爲學得有點過了,搞得和Perl太像了。固然,除此以外還有其餘一些小地方,但最主要的我以爲就是這個了,也就是跟Perl太像了這一點。剛開始的時候,尚未造成Ruby的語法習慣和文化,所以不少東西都是從Perl「抄」過來的,如今看來好像一股腦拿過來的東西太多了,裏面其實有一些是不須要的。而通過一段時間以後,Ruby本身的文化已經造成,Rails出現以後又造成了Rails的文化,而到了這個時候再看的話,可能就會以爲這些Perl的部分好像沒啥必要呢。

周:你們都認爲「Ruby有如今的人氣基本上都是因爲Ruby on Rails的貢獻」,您在書中也認同這個觀點,那麼您認爲Ruby on Rails得到巨大成功的緣由是什麼呢?

Matz:首先是得益於Web的快速發展,幾乎全部的軟件開發平臺都在瞄準Web這個領域。以往在用CS(客戶端-服務器)架構來開發的系統,如今均可以在Web上實現了。在Web上可以開發的應用變多了,這是一個主要的背景。另外,Ruby的優點在於進行軟件開發很是容易,也就是開發效率比較高。這兩點結合起來,我認爲就是Ruby on Rails成功的主要緣由。

此外,Ruby還有一些比其餘語言強大的特性,例如元編程(Metaprogramming)、經過猴子補丁(Monkey patch)所帶來的可擴展性等等,經過這些特性,甚至能夠對基礎的類進行加強。DHH正是運用了Ruby的這些強大之處,開發出了Rails。而對於沒有接觸過Ruby的人,好比只用過Java這種比較「死板」的語言的人來講,會以爲「唉?竟然還能夠作到這樣嗎?」,我以爲這也是Rails成功的緣由之一。

周:聽說DHH曾經是準備用PHP來開發這樣一個框架的,但後來卻轉向了Ruby?

Matz:對,由於PHP在元編程方面有不少限制吧。Rails推出以後,又出現了不少(在PHP上實現的)模仿Rails的開發框架,好比Symfony、CakePHP等等,可是Ruby所擁有的強大特性PHP卻並不是徹底具有,即使不考慮它們各自的背景,只是單純去對比這些開發框架的話,我仍是以爲Rails更強大一些,我以爲DHH選擇Ruby也正是看重了這一點。順便,我實際上是見過DHH的,在丹麥,那時候他還沒開始學習Ruby,說不定那次見面也是對他產生影響的一個緣由吧。

周:中國讀者很關心的一個話題是,Ruby目前最普遍應用的領域就是Web開發,那麼在Web開發這個領域以外,Ruby的發展方向又是什麼呢?

Matz:的確,Ruby在Web開發領域被用得不少,例如Rails、Sinatra等開發框架。但編程的世界並不是只有Web而已,我也一直但願Ruby可以從Web中走出去。在不久的未來,我認爲Ruby有望被應用的領域,主要有三個。

  1. 科學計算(Scientific computing),也就是大學科研中所要用到的計算。在這個領域,Python、R、matlab等語言用得很是多。我但願Ruby也可以進入這一領域,爲此咱們正在開發一個叫作SciRuby的項目,但願藉此推進Ruby在大學科研計算領域的應用。
  2. 高性能計算(High performance computing)。這個和科學計算有點接近,是運用超級計算機來進行計算的領域。和C++比起來Ruby確實要慢不少,因此你們都以爲Ruby不可能被用於高性能計算領域。東京大學一個研究生作了一個研究項目,將Ruby寫的代碼編譯成C語言代碼,而後再編譯成二進制程序,這個過程當中須要用到類型推導等技術,最好的狀況下,速度可以達到C語言(指用C語言人工編寫的同等程序)的90%。這個項目目前只發表了論文,尚未公開源代碼,我但願明年這個項目的成果可以所有公開。
  3. 嵌入式(Embedded)開發。所謂嵌入式就是指在微型設備,例如手機、醫療器械、機器人,在這些環境下,如今的Ruby其實並非很適合,內存開銷很大,API也不合適,所以才須要開發適合嵌入式開發的,內存開銷比較小的,而且具有面向嵌入式開發API的Ruby引擎,這也就是mruby。

以這三個領域爲首,我但願Ruby可以在Web開發之外的領域有更多的發展。

周:Twitter主要是用Rails開發的,最近我看了一則新聞,說美國大選的時候Twitter遇到了史無前例的大訪問量,Twitter稱爲了應付訪問量的上升,正在從Ruby轉移到其餘語言,您對這個問題怎麼看呢?

Matz:這裏面緣由不少吧。首先,Twitter剛開始開發的時候,沒人知道Twitter會得到今天的成功,當時不少人以爲,這種只能寫140個字的博客有什麼意思呢?但Twitter卻出人意料地得到了巨大的成功。在這個過程當中,Twitter增長了不少新功能,在它快速發展的過程當中,Ruby的貢獻是至關大的。由於一個新功能從構思出來到付諸實現,能夠用很短的時間就可以完成。Twitter剛開始開發的時候不可能考慮到會有如今這樣大的訪問量,也就是遇到了設計上的瓶頸了,由於通常的網站也不可能會有每秒上萬的訪問量,所以能夠說如今的Twitter發展到當初在設計上的極限了。

爲了解決這個問題,Twitter須要開發一個全新的架構,以應付如今愈來愈大的訪問量。不過,即使要重寫架構,我以爲沿用Ruby也是能夠作到的吧?(笑)話說,一個網站在遇到設計極限的時候,有不少解決方法,好比重寫架構、換其餘語言等等,其中重寫架構我以爲是最重要的,而實際上Twitter也正是作了這方面的工做。但在這個過程當中,他們的工程師想要挑戰一些新的東西,那麼從編程語言上來講,就提出要改用Scala,由於Scala是編譯型語言,性能也不錯,正好適合編寫新的架構,我以爲這樣也不錯。

在我看來,在網站所提供的服務尚未徹底成型的時候,最重要的是可以對需求的變化作出快速的反應,這個時候就須要Ruby這樣靈活性比較高的語言;而在網站得到成功以後,遇到了設計瓶頸,用一種新的語言,好比Scala,來編寫一個新的架構,以節約必定的資源,我認爲這也是很好的一個結果。Twitter轉向Scala還只是在其核心部分,而在Web前端和一些內部工具上還有不少地方在用Ruby。其實,上個月我還去拜訪了一下Twitter,跟他們的工程師進行了一些交流,Ruby仍是用得不少的哦(笑)。

周:近年來隨着智能手機、平板電腦等移動設備的普及,移動平臺開發也變得很是熱門。從編程語言來看,Android上是用Java,而iOS上則是用Objective-C來進行開發的,那麼做爲腳本語言,不只限於Ruby,您認爲在移動開發上面會有怎樣的發揮呢?

Matz:目前,提到移動開發,在Android上用Java,在iOS上用Objective-C彷佛是板上釘釘的事情,不過這也產生了必定的隔閡,好比某個App是爲iOS開發的,若是要移植到Android的話,就得所有用Java重寫才行。如今也逐步產生了一種新的嘗試,例如PhoneGap、Titanium等框架,經過用JavaScript、Lua等腳本語言,編寫出來的App就能夠實如今iOS和Android的跨平臺移植。做爲Ruby來講,也有一種叫Rhodes的框架,經過它就能夠用Ruby編寫出在iOS、Android以及Blackberry上通用的App。

之前移動設備和PC相比性能差距太大,若是App不能全速運行的話,就根本無法用了。但如今移動設備的性能已經獲得了大幅度的提高,經過在通用框架的基礎上,採用腳本語言來進行開發的方式,性能也逐漸變得能夠接受,我想從此經過這種方式,用JavaScript、Lua、Ruby等腳本語言來提高移動開發效率的作法,應該會愈來愈流行吧。對了,剛纔咱們說到mruby,其實用mruby來編寫iOS和Android應用的項目也已經開始了呢,但願不久的未來這樣的App能愈來愈多吧。

周:剛纔您提到了mruby,而明天您的演講題目是Ruby 2.0,能夠就mruby和Ruby 2.0的一些亮點,作一下簡單的介紹嗎?

Matz:剛纔咱們也提到了,mruby是爲了在微型設備上運行而設計的一種Ruby,它並不是擁有Ruby的全部功能,相應地,可以在微型設備上工做纔是它的長處。所以,在以往沒法使用Ruby的一些設備上面,例如自動售貨機、控制器、機器人等等,從此也能夠用Ruby來進行開發了。說不定幾年以後,在電視機、汽車等地方也可以見到Ruby開發的軟件。

Ruby 2.0則包含了兩個信息。第一,Ruby從開始開發算起,明年將迎來20週年了。而做爲對20週年的記念,是2.0這個名字所包含的最大的一個信息。若是但從變化來看,從1.8到1.9已是一個很是大的變化,不少人表示說很不適應,而從1.9到2.0的變化,並不像版本號的變化看起來那麼大。實際上,個人目標是保證在1.9上能運行的全部程序,在2.0上面也都能運行,不會由於引擎版本升級致使原來的程序就不能用了。

Ruby 2.0確實也增長了一些新的功能。好比說,如今的Ruby中,能夠經過猴子補丁,對某個類中的方法進行添加和替換,但這樣一來,全部的用戶都會受到影響,可能有人以爲仍是原來那樣的好,不想跟着改,或者說這樣的改動和我如今的開發會發生矛盾、衝突等等。爲了解決這個問題,Ruby 2.0中能夠限定猴子補丁的做用範圍,這樣就能夠在團隊開發、庫開發中,避免一些改動對開發範圍以外的其餘人形成沒必要要的麻煩。以往Ruby可能都是用在小規模的項目中,而當項目逐漸擴大,開始由多個團隊合做的時候,這樣的機制就顯得很是重要了。除此以外,Ruby 2.0中還有一些其餘的新功能,也是針對團隊開發的需求來設計的。

周:目前世界範圍內普遍使用的語言大部分都是來自歐美的,做爲例外大概只有來自巴西的Lua和來自日本的Ruby,您在書中也說這種狀況讓人感受「很寂寞」,那麼形成這種狀況的緣由是什麼呢?要改變這種局面,咱們應該作出怎樣的努力呢?

Matz:關於Lua呢,其實若是你要說它是歐美的也能夠,巴西是屬於「拉丁美洲」嘛(笑)。要說亞洲或者東亞這邊的話,那就只有Ruby了,真的是蠻寂寞的一件事。從世界範圍來看,(對於編程語言來講)歐洲和美國的影響力應該是最強的,而亞洲雖然有衆多的人口,但卻沒有可以出現不少的編程語言,確實挺寂寞的。

若是說對未來的期待,別的國家我不太清楚,至少在日本,實際上是有不少人在開發各類各樣的編程語言,但除了Ruby之外,其餘的語言在日本之外幾乎就沒人知道了。若是對編程語言感興趣的人愈來愈多,所創造出來的編程語言也愈來愈多的話,這其中應該就會有那麼一兩個可以取得成功吧。在日本還存在一個問題就是語言障礙,日本人除了母語之外,精通外語的人很少,有趣的是,竟然有用日語來編寫程序的編程語言呢。(周:說到這個,其實中國也有用漢語寫程序的編程語言呢。)中國也有嗎?果真。不過這些語言雖然有趣,卻只能給日本人用,也就沒法走向世界了。

說句題外話,我曾經收到過一個美國人發給個人一封郵件,他說你是個日本人,但Ruby看上去卻跟英語沒什麼區別,由於Ruby程序都是用英語寫的嘛,難道沒有用日語寫程序的編程語言嗎?爲何沒有呢?我只好回答說:有啊,只不過你不知道而已,即使知道你也沒辦法用嘛。

如今在日本對編程語言感興趣的人不斷增長,大概我老是在網上還有書裏說編程語言多麼有趣,多少也是受了個人這些言論的影響吧,如今有很多人在挑戰設計新的編程語言。在這些新的編程語言中,若是能有千分之一的語言可以最終得到成功,我認爲就是很好的結果了。我不知道中國、韓國,以及其餘一些亞洲國家中,有多少人想要挑戰這一領域,不過若是你們以個人這本書爲契機,可以改變「編程語言是別人給咱們的,咱們只能被動接受」這種見解,繼而抱有「本身創造一種編程語言也不錯嘛」這樣想法的人可以愈來愈多的話,這其中必定會有人得到成功。

說到開源,不管是日本,仍是中國、韓國,在世界範圍內發表的項目還不多,這也算是一個能夠去努力的切入點。這裏面可能有不少緣由,好比英語很難學,(周:好比GitHub也很難用?)哈哈,GitHub在中國能用嗎?(周:能用能用……)唔,還好還好。不過,這個(嗶——)的影響仍是很大的,有不少資料不太容易得到吧。(周:是啊,好比Go語言的官網就上不去呢。)啊!Go的官網上不去嗎!果真是由於它是Google的吧(笑)。總之,須要面對的難題仍是不少的。另外,在日本也是如此,程序員把大多數時間都用在了工做(掙錢)上,要進行開源項目之類的活動就比較困難了。10年前,開源這個概念在日本也沒人接受,而如今你們都逐漸明白了開源的主要性,開源項目也就逐漸增多了,我想將來幾年中,在中國應該也會產生相似的變化吧,我很期待。

並且,在剛開始作的時候,沒人知道到底作什麼會成功。我在設計Ruby的時候,也不可能想着Ruby很不錯之後必定會在全世界普遍使用。所以,一種編程語言生逢其時可能更重要一些,但這種事情,你不去嘗試一下是不會知道結果的。在中國,也必定會有一些編程語言或者軟件由於生逢其時,從而走向世界並得到成功。

周:在書裏講到Dart的時候,您說過對於編程語言來講,生態環境是很重要的。那麼要創建這樣的生態環境,須要一些怎樣的努力呢?

Matz:從用戶的角度來看,用這種編程語言,對我有什麼益處,這一點很重要。在Rails出現以前,使用Ruby的人,包括我本身在內,大多數都是以爲Ruby寫程序很輕鬆,這多是選擇Ruby的主要目的。固然,Rails出現以後,由於「我要作個網站,Rails最快」這樣的理由而使用Ruby的人變多了。所以,若是你設計一種新的語言,若是可以準確地傳遞給用戶使用這個語言所能帶來的好處,我想這樣的語言成功的可能性會更大一些。

周:很是感謝,在採訪的最後,請您談談對中國程序員的寄語吧。

Matz:在《程序世界》中我也提到了,我以爲編程的將來應該會以開源的形式發展下去,將來的創新性軟件或者編程語言,可能都會以開源的形式出現。做爲開源軟件來講,別人作出來我能夠無償使用,這一點你們都很開心。在經歷了這個階段以後,若是可以更進一步,將本身作的軟件開源,使其對全世界產生影響,若是能作到這一步的話,你可能就會成爲一名一流的軟件工程師。中國的軟件工程師,就我接觸的這些人來看,你們都很是認真和努力地學習技術,我但願這些人之中,可以有更多的人邁出這一步,從而成爲能夠影響世界的一流程序員。


加入圖靈訪談微信!

圖片描述

相關文章
相關標籤/搜索