“光在真空中的速度曾經是大約每小時35英里,然後Jeff Dean花了一個週末優化了基礎物理學。”——出自“關於Jeff Dean的事實”
其實,“關於Jeff Dean的事實”這個G+帖中描述的並非是真實的。不過有人大費周折為他建立了一個類似於“關於Chuck Norris 的事實”這樣的網站,這倒是件不同尋常的事。這是因為Jeff Dean是一位軟體工程師,而軟體工程師們通常是不會像武術界的戰神Chuck Norris那樣的。一方面,他們不是獨行俠,軟體開發從本質上來講是一個協作過程。另一方面,他們也從來不會像這個視訊裡面的Chuck Norris那樣用衝鋒槍來打牛仔。
譯註:Chuck Norris(查克·諾里斯)是空手道世界冠軍、美國電影演員。他有另一個更為人所共知的譯名“羅禮士”,出自功夫名片《猛龍過江》。 他發展電影事業初期,在李小龍執導的武打電影《猛龍過江》中飾演一名空手道高手Colt,與李小龍在羅馬鬥獸場決鬥,公認是經典的武打場面。(摘自維基百科)
Jeff Dean
然而,在2007年的愚人節,一些慕名而來的年輕谷歌工程師覺得應該給Jeff Dean製作一個網站,來讚揚他在程式設計方面的成就(譯者:以下都只是玩笑,並不是真的)。例如:
- 編譯器不會向Jeff Dean給出警告的,Jeff Dean會給編譯器警告的。
- Jeff Dean是直接寫二進位制程式碼的,然後他寫了原始碼,作為給其他開發人員看的文件。
- 當Jeff Dean考慮人體工程學的問題的時候,這是為了保護他的鍵盤。
- 有一天當Jeff Dean在優化一個功能時,他被迫發明了非同步呼叫的API。這樣的話這個功能可以在它被呼叫之前就可以返回結果了。
關於Jeff Dean的一個真正的事實是:你必須是一個計算機高手,才能瞭解人們說的很多關於Jeff Dean的笑話。(對此有興趣的讀者,Business Insider 網站提供了一些關於他的比較流行的笑話的解釋。)如果你沒有電腦科學的背景知識,那麼你就很難理解那些玩笑中談到的那些他的虛假成就,更不用說理解他在工作中真正的成就了。Dean親手打造的系統,例如,MapReduce、BigTable、Spanner等,對於眾多Google使用者來說並不知道是來源於Goolge的。但是,這些程式都是Google和現代網際網路存在的基石。他現在所工作的一些專案,很有可能會再次為資訊科技帶來革命。
當你在思考是誰創造了當今網際網路的時候,你可能會想到很多公司的創始人和CEO,比如:蒂姆·伯納斯 – 李(Tim Berners-Lee)、馬克·安德森(Marc Andreessen)、拉里·佩奇(Larry Page)和謝爾蓋·布林(Sergey Brin),也許是馬克·祖克伯(Mark Zuckerberg)。這是有道理的,這些人中的每一位都發明瞭一種產品或框架,塑造了我們今天使用網際網路的方式。
同時,在這些已從繁重的日常工作中解脫出來的巨人陰影下,是一幫不知名的開發人員,在鍵盤上每日敲打出來給我們使用的產品和系統。同其他行業不同的是,在高科技行業,這些人通常是不可替換的。一個出色的會計可能會幫你節省5%的個人所得稅。一個出色的棒球選手的上壘率也就比一般球員高出那麼一點點(譯者:棒球運動中一般會用上壘成功率,擊球成功率等來衡量球員的水準)。但是一個出色的軟體開發人員在一週中的工作可能需要一支近10人的團隊花幾個月才能完成。這種差異是指數級別的。這個並不是一個關於Jeff Dean的事實,而是矽谷的高科技行業的常識,也就是為什麼最好的公司會花如此大的代價來吸引頂尖人才。
在Dean 1999年中加入Google的時候,他已經擁有了美國頂尖年輕電腦科學家的榮譽。在家用計算機剛開始普及的時候,Dean說他總是在尋找能夠在一臺給定的機器上不斷追尋極限效能的方法。當他還是一個高中生的時候,他編寫了一個軟體來分析大量的流行病資料。據他說,他的軟體比是當時專業軟體快26倍。這個系統稱之為Epi Info,被美國疾病控制中心(Centers for Disease Control)採納並翻譯成13種語言。當他在讀電腦科學博士的時候,他研究的是編譯器,用來將程式原始碼翻譯成計算機能夠執行的語言。他說到,“我總是喜歡執行得快的程式碼”。
不過Dean並不是安於現狀的人,他也不想把一輩子都花在編譯器上,所以他後來離開了學術界。三年不到,他加入了當時只有20個人的Google。(根據Steven Levy的《In the Plex》一書, 作為搜尋初創企業的Google,當時覺得Dean是一個來之不易的人才。)他為早期的Google News 和AdSense 做出重大貢獻,其中AdSense這一廣告產品改寫了網際網路公司的遊戲規則。在此之後,他轉而關注了公司核心的問題之一:擴充套件性。
Google公司基礎演算法的最初想法來自於Page和Brin, 他們兩在當時都算是頂級的開發人員。在90年代末,他們創造了PageRank演算法,一種在使用者給定搜尋查詢的時候返回最相關搜素結果的演算法。對於搜尋結果相關性的專注讓Google一舉超越了Yahoo, AltaVista以及當時處於領先地位的其他各個搜尋引擎。不過隨著Google變得越來越成功的同時,它也碰到了一項巨大的技術挑戰。Dean回憶道,“我們不能足夠快地部署更多的機器來響應需求”。
所以Dean和他的同事們,包括另一位出色的程式設計師Sanjay Ghemawat一起找到了解決方案。這個問題就像他在高中時對待Epi Info 一樣,看起來象是一個硬體問題。Ghemawat幫助帶領了一個團隊開發了谷歌檔案系統(Google File System, GFS),使得超大型的檔案能夠分佈地被儲存在眾多廉價的伺服器上。然後Dean和Ghemawat一起開發了一個稱之為MapReduce的程式設計工具,來幫助開發人員有效地使用這些機器並行處理龐大的資料集。正像編譯器幫助程式設計師在編寫程式的時候不用考慮CPU是如何處理該程式一樣,MapReduce使得Google的開發人員在調整搜尋演算法或者增加新功能的同時不必擔憂如何將這些運算並行化,也不必擔心如何處理硬體的故障。
Dean和Ghemawat的方法如此之強大,當他們在2004年的一個會議上發表了一篇研究論文之後,這個方法馬上就變成了業界的標準。直到今天,MapReduce成為了眾多其他專案的重要基石,其中之一就是著名的開源框架Hadoop。而正是Hadoop, 造就了業界中新的流行語“大資料”。從在線旅行到能源勘探等不同的領域中都會用到大資料的方法。而正當Google 開始在一些核心的應用中從MapReduce進一步擴充套件到其他新的程式設計模型時,Dean說他還是看到許多夏季實習生到Google後開始新專案的時候,都會大量地開始使用MapReduce。
MapReduce正是Google的創始人之一Page所說的10倍效應的一個好例子。10倍效應說的是比原來的好10倍,而不是比原來做得好10%。MapReduce並沒有使得某一種特定型別的運算更快一點,而是幫助了Google的每一位開發人員可以做到他們以前做不到的事情。
Dean的其他幾個專案也有類似的指數效應。在谷歌檔案系統的基礎上,他和Ghemawat建立了一個分散式資料庫系統,名為BigTable。 BigTable可以處理1PB的資料(1 PB=1百萬GB。)( 譯者:開源社群也有類似的專案, 基於Hadoop 之上的 Hive)之後他們又進一步開發了被稱之為世界上最大的單一資料庫的Spanner系統。連線雜誌(The Wired)的Case Metz說,通過使用創新的時間同步方式,Spanner的物理儲存雖然跨越了全球不同的資料中心,但操作起來就像是在一個地方。換句話來說,它能夠使得全球的資料中心中不同的資訊保持一致,即使一個特定的更新請求可能會需要不同的時間達到不同的資料中心。Metz又說道,在Spanner被報導之前,從來沒有人覺得這種系統是能夠搭建出來的。
現在看起來,這些關於Jeff Dean真正的事實看起來有點像是假的一樣。Dean自己也會對這種情況笑起來,說這個有點尷尬,但同時也一種被恭維的感覺。但他又說,要記住的是,他的這些工作上真正的成就,總是通過和不同的人共同合作得來的。
幾乎每天早上,他都會到位於加利福尼亞州,Mountain View的Google總部上班,而且總是坐下來和同一夥人一起喝咖啡。他估算到,這些年來我們大概一起消滅了20,000杯卡布奇諾吧。這些人並不總是在一起工作。事實上,有些人已經搬到了Google園區另一邊不同的辦公室裡。不過當他們聚在一起討論他們正在做的事情的時候,一些人的問題總是能激勵其他人的新想法。這些咖啡閒聊使得Dean把他在優化、平行計算、軟體架構等方面的經驗運用到眾多不同型別的專案中去。這些使得他產生了足夠的雄心和自信心。作為他長期合作伙伴的Ghemawat說,“他總是對於我們能做到什麼程度充滿了熱情和樂觀,沒有什麼能夠阻礙他”。
他最近的工作可以很好地說明Google接下來會做什麼。去年,他和史丹佛大學機器學習領域的專家、Coursera創始人之一的Andrew Ng一起,幫助了Ng的研究生Quoc Le進行了一項前所未有的無監督機器學習的試驗。這個屬於Google公司祕密的Google X 臭鼬專案下(譯者:指祕密的創新專案)的試驗,將16,000個處理器用於對YouTube視訊進行無人幹攝的學習,來得出如何識別一隻貓的方法。這個看起來是用了很多計算機來得出一個非常基本的結果,但是這個試驗能夠幫助我們為下一代的人工智慧技術打下基礎。未來的人工智慧技術將在許多的潛在應用中發揮作用,這些包括使用了個人助手技術的Google Now,以及對Google 眼鏡專案(Project Glass)會有很大幫助的影象搜尋功能等。
Jeff Dean可能正的會發明一些不可思議的東西,就像“關於Jeff Dean的事實”中提到的只有0和1的特殊鍵盤(譯者:這種鍵盤是不存在的,這個網頁上的文章在開玩笑說Jeff Dean是直接用二進位制的機器程式碼寫程式的。)Jeff Dean承認他並不是機器學習的專家,不過他樂於使用它在搭建可擴充套件、高可用系統方面的經驗來幫助這一方面的研究。
和“關於Jeff Dean的事實”說的相反的是,Dean說在很多情況下解決問題的最佳方法並不是簡單地一坐下來就開始寫程式。他的方法總是在開始的時候需要進行一些簡單的計算,來找到對於特定過程的質量和速度之間的最佳平衡點。他說,從機器翻譯到搜尋質量的許多領域,你總是試圖權衡你能夠對每一個查詢所做的計算量。也許你不能找到最理想的解決方案,但是我們總是可以通過某種近似的方式,通過1%的計算,得到98%的好處。
Dean經常做這類計算,以至於他給出了一個“每個計算機工程師都應該知道的數字列表”。其中包括諸如在光速情況下,從加利福尼亞到阿姆斯特丹傳送一個網路包要花多少毫秒,(150毫秒)。將這些數字牢記在心, 在20分鐘內,你就能從白板上區分在3個設計中哪一個會是最好的。他又說到,如果你不能快速地進行計算?把所有這些數字近似地轉換為2的次方吧,這樣做乘法的時候會比較容易。
如果Dean真的擁有超人的力量的話,那麼這種能力並不能在瞬間就把事情做到完美。這是一種能夠根據事情的不同級別進行權衡、優化,及處理問題的能力。換個角度來說,它是一種能發現機會,並把事情在很短的時間內做到儘可能好,而不是一開始就盡全力追求完美的能力。在矽谷,這可比拿著衝鋒槍向牛仔們掃射酷多了。