Node之父Ryan Dahl:我不想被定義
作者:薛命燈
被稱為Node之父的Ryan Dahl在2012年離開了Node項目,後來加入Google的Brain團隊,從事深度學習方面的研究,主要專註在圖像的著色和超解像技術上。擁有深厚數學功底的Ryan經歷了從Web開發到深度學習的跨越,還主導了多個開源項目,如HTTP解析器、libuv等,可以說是一個技術多面手。他不喜歡被人定義成某個領域的專家。MTJ(Mapping The Journey)網站對Ryan進行了一次深度訪談,他在訪談中提及了他的成長經歷、Node的開發始末、個人的職業變遷以及對深度學習和人工智慧的看法。
漫漫求學路
Ryan在聖地亞哥長大,在他六歲的時候,家裡就購買了一台Apple IIc電腦,這對他後來走上技術之路產生了一定影響。在念完聖地亞哥社區大學之後,Ryan到加利福尼亞大學聖迭戈分校繼續攻讀數學碩士學位。碩士畢業之後又到羅徹斯特大學繼續攻讀數學博士學位,在這期間他學習了代數拓撲學。數學曾經讓他著迷,他覺得數學是一門非常美妙的學科。不過有一天,他意識到數學並不能被完美地應用到現實生活當中,他也不想餘生就做一個數學家,於是他就中途退出博士學位計劃,跑到南美洲呆了一年。他在那裡找到了一份Web開發工作,開始了他的職業生涯。
Node的誕生
在離開南美洲後,Ryan和他的女朋友去了德國。因為Ryan的女朋友是德國人,她要回到大學繼續深造。在那裡,有個叫Chris Neukirchen的人開發了一個叫作Rack的Web伺服器,這個伺服器擁有非常簡單的介面——接收請求,返迴響應。與此同時,在從事自由職業的過程中,Ryan接觸到了Nginx的一些模塊,他發現Nginx的很多東西都是非同步的。於是他想,如果把Rack和Nginx的非阻塞IO結合起來,那會變成一個怎樣的東西呢?
2008年12月,Google發布了V8引擎,這為Node的誕生奠定了堅實的基礎。Ryan開始把玩V8引擎,它既有趣又簡潔,而且運行速度很快,Ryan突然想到:JavaScript本身就是單線程的,而且瀏覽器發起的AJAX請求就是非阻塞的。如果將JavaScript和非同步IO以及一個簡單的HTTP伺服器集合在一起,就會變成一個很酷的東西。就這樣,在接下來的四年,Ryan開發出了如今被廣泛使用的Node。
Node不是萬能的
雖然Ryan已經離開Node項目很多年了,但當年開發和佈道Node的經歷似乎還歷歷在目。Ryan四處發表演講,試圖說服人們相信阻塞式IO是錯誤的方式,如果使用非阻塞的方式來處理所有的事情,那麼就可以解決很多難點。比如,可以完全把線程忘掉,在單個進程里處理所有的非同步請求。那個時候,Ryan相信這就是一切,直到Go語言的出現。其實Go語言早在2009年就發布了,Ryan在2012年才注意到它。Go語言的運行時適當地使用了綠色線程(即用戶線程),在運行時和操作系統之間所有的IO操作都是非阻塞的,但是它提供給用戶的介面卻是阻塞式的。在Ryan看來,這是一種更好的編程模型。為什麼這麼說呢?假設你的應用程序要做兩件事情,分別是A和B。你發起請求A,等待響應,出錯。發起請求B,等待響應,出錯。Go語言的阻塞模型可以非常容易地處理這些異常,而換到了Node里,要處理異常就要跳到另一個函數里去,事情就會變得複雜。
Node的非阻塞模型沒有了多線程,但卻多出了「回調地獄」問題。Ryan認為Node並不適合用來開發大規模的服務端應用,相比之下,Go語言會是更好的選擇。而Node能夠真正一展拳腳的地方是客戶端。
低調
在加入Joyent成為全職的Node開發人員之後,Ryan也隨之成為更加重量級的人物。參加各種大會,被粉絲要求合影拍照,隨便寫點東西都會有很多人響應。但Ryan並不喜歡這種狀態,他說:
我是一個程序員,我想寫代碼,我想無拘無束地表達我的想法。我並不喜歡這種狀態……
離開Node項目
在Node如日中天的時候,Ryan離開了項目。首先,他當時已經在這個項目上開發了四年時間,已經實現了他的預期目標。他原先的想法是把Node做成簡單緊湊的小型化核心,讓其他人基於這個核心開發出更多的模塊。後來他們不斷增加新模塊,涵蓋了網路協議到文件系統的訪問,甚至還把Node移植到了Windows平台上。隨著代碼量的膨脹,開始出現大量的bug,不過在那個時候已經有很多人可以修復這些bug,無需Ryan操心了。在Ryan看來,如果繼續留在這個項目里,無非就是修修bug。而且隨著Go語言的發展,他發現Node並不適合用來構建伺服器端應用,再加上他不喜歡頭上的「光環」,所以決定離開這個項目。
新的起點
在離開Joyent和Node項目之後,Ryan去了紐約,開始開發屬於自己的項目。他做了一些項目,但都不算太成功,後來他接觸到了卷積神經網路和圖像分類技術,對機器學習產生了興趣。兩年前,Google發布了TensorFlow,同時啟動了Google Brain Residency計劃(為期一年的深度學習研究,有機會與Brain團隊的人一起工作),Ryan加入了這個計劃,並最終成功成為Brain團隊的一員。Ryan的研究方向是圖像著色和超解像技術。
對人工智慧的看法
Ryan認為,目前的機器學習系統還很簡單,離真正的人工智慧還差得很遠。但是技術在發展,硬體也在發展,人類正在為人工智慧的發展奠定堅實的基礎。在未來的20年,機器學習技術將被廣泛地應用在各個領域,人類一定能夠從中獲益。
不想被定義
Ryan從做Web開發開始,轉而進入機器學習領域,這兩個領域看起來相差了十萬八千里,但因為Ryan擁有牢固的數學背景,所以這種轉變對他而言似乎也是一件很自然的事情。不過他不想被定義成某個領域的專家,他說:
人們喜歡把人和他所在的領域聯繫起來,但我不喜歡那樣。我既不想被認為是一個JavaScript專家,也不想被認為是一個機器學習專家。探索無限的可能性是一件有趣的事情。創造前所未有的、對人類有益的事物會讓人激動不已。


TAG:教授學苑 |