谷歌最好的程式設計師 Jeff Dean:我用過 18 種程式語言

infoq 發佈 2024-05-10T17:54:48.080402+00:00

當地時間 2 月 21 日,谷歌大神 Jeff Dean 在參與網友「學習程式語言順序」的話題中,又不小心秀了下自己的「肌肉」:自己至今已經學習和使用了 17 種程式語言。

作者 | 褚杏娟、核子可樂

當地時間 2 月 21 日,谷歌大神 Jeff Dean 在參與網友「學習程式語言順序」的話題中,又不小心秀了下自己的「肌肉」:自己至今已經學習和使用了 17 種程式語言。但他分明忘記了自己還用過 Sawzall ,還是在網友的提醒下才想起來。這樣算來,Dean 已經用過至少 18 種程式語言了!



Dean 的評論區一時間也成為網友的「答疑區」。「你還記得這些嗎? 我學 Python 的時候忘了 Java,學 Java 的時候又忘了 C……我想我的大腦內存嚴重不夠。」網友 Ravi Ahuja 不禁問道。


「我認為這有點像騎自行車?為了記住我不經常用到的、感覺模糊的地方,我會做一些查究。但通常來說,看到那些代碼都很舒服。如果在一段時間不用後開始使用,那麼一兩天之後情況就會變得更好。」Dean 回答道。


還有網友 Avik Dutta 問道,「如何為特定的問題或項目選擇程式語言?」Dean 回答稱,這是多種因素造成的,其中包括性能有多重要、需要與之交互的現有代碼、是一個少數人參與的小項目還是一個大項目等等。


不過,Dean 在博客介紹中也提到,儘管多年來使用其它程式語言寫了大量代碼,但他大部分代碼都是用 C++編寫的。

「成神之路」


有很多「關於 Dean 的事實」的段子流傳至今。比如,2007 年的愚人節,一些對 Dean 抱有崇敬之情的谷歌工程師決定以諾里斯式幽默的方式向他致敬,熱情宣揚他在編程領域的成就。例如:


  • 不是由編譯器向 Dean 報警,而是 Dean 向編譯器報警。
  • Dean 直接用二進位碼編程,再把原始碼轉換成其他開發者能看懂的文檔。
  • 對 Dean 來說,人體工程學要保護的不是他,而是鍵盤。
  • 有一回,Dean 想優化一個函數來讓返回先於調用,於是異步 API 就此誕生。


拋開段子不談,Dean 的編程能力到底多讓人信服?Hacker News上曾有人問:你見過的最優雅的代碼是什麼?放在首位的回答就是 Jeff Dean 的 MapReduce 最初實現。


IIRC 只有 3 個 C++ 類和幾百行代碼。它將大部分分發、任務運行和磁碟訪問任務外包給其他谷歌基礎設施,只專注在運行計算、為每個鍵收集結果並分發給 reducer。

當前(截至 2012 年,不再是當前版本)的 MapReduce 版本更快、更可靠,但用幾百行代碼啟動一個價值數萬億美元的行業,確實也是一種的優雅。

在當前(也是自 2012 年起)的 MapReduce 代碼中,還有另一個同樣由 Jeff Dean 設計的令人毛骨悚然的東西。這是一種外部排序算法,與大多數外部排序一樣,它通過編寫一堆整機 RAM 大小的臨時文件然後執行 N 路合併來工作。但它是如何對機器的 RAM 進行排序的呢?當然是使用 STL qsort() 函數!但是,如何使用標準庫函數有效地對 64GB 的數據進行排序呢?他編寫了一個自定義比較器,一次比較整個記錄,使用 IIRC 編譯器的內在機制編譯成 SIMD 指令,並執行某種 Duff's device(類似展開)來考慮不同的密鑰長度。它是標準庫函數與高度優化的專用代碼的巧妙結合。


Dean 曾為 MapReduce、Bigtable 和 Spanner 等重要項目做過貢獻,正是這些技術,讓谷歌乃至眾多現代 Web 產品得以存在。他所從事的項目,也隨時可能再次顛覆整個信息技術世界。


Dean 是 1999 年加入谷歌的,當時的他已經是享譽全球的頂尖年輕計算機科學家之一。Dean 回憶道,當時家用計算機正在蓬勃發展,他一直希望能在給定的設備上做更多的事情。


還在讀高中的 Dean 編寫了一個用於分析大量流行病學數據的軟體,而且速度比當時專家們常用的產品「快 26 倍」。這套系統定名為 Epi Info,後來被翻譯成 13 種語言版本供世界各地的疾控中心使用。讀博期間,他又開始探索編譯器課題,希望將原始碼轉換為計算機能夠輕鬆執行的語言。「我一直喜歡能快速運行的代碼。」


但 Dean 不滿於此,他不願把一輩子都耗費在編譯器身上。於是他離開學術界,在兩年多之後加入了當時只有 20 名員工的谷歌。


在為 Google News 和 Adsense 做出重要早期貢獻之後,Dean 意識到谷歌的廣告業務將必定網際網路經濟的基本規則,於是他開始將注意力轉向即將到來的核心問題:規模。


谷歌的兩位創始人 Larry Page 和 Sergey Brin 本身就是一流的開發人員。1990 年代末,他們開發出一種能將最相關結果返回至給定搜索查詢的算法 Pagerank。這種對相關性的關注,讓谷歌一舉超越了上個世代的霸主雅虎、Altavista 和曾經代表先進生產力的其他對手。但隨著業務占比的提升,谷歌也面臨著巨大的計算挑戰。Dean 曾感嘆道,「我們部署機器的速度」總是跟不上需求。


為此,Dean 與其他幾位優秀同事聯手合作,並意識到高中時做的 Epi Info 已經蘊藏著正確的方向:把看似硬體的問題,轉化成軟體形式來解決。


Dean 和同事 Sanjay Ghemawat 開發了一款名叫 MapReduce 的編程工具,能幫助開發人員在機器上並行處理龐大的數據集。就像編譯器能幫助程式設計師完成代碼轉換一樣,MapReduce 能幫助谷歌開發者調整搜索算法或添加新計算,又不必分神於並行化操作或者處理設備故障。


Dean 和 Sanjay 的成就震古爍今,因此在 2004 年發布開創性研究論文後,其很快成為行業標準和後來 Hadoop 的實現基礎。儘管如今的谷歌已經逐漸超越 MapReduce,但每當有新的時期實習生參與新項目時,仍然經常會從 MapReduce 起步。


谷歌的聯合創始人們經常討論「10 倍」效能,而 MapReduce 正是個絕佳案例。所謂 10 倍效能,就是不滿足於將效能提升 10%,而是直接擴大 10 倍。MapReduce 也是如此,它不是讓每項操作都快上一點,而是讓谷歌的開發者們得以做出以往無法想像的嘗試。


Dean 參與的其他一些項目也帶來了類似的指數級效應。在 Google File System 的基礎之上,他和 Sanjay 一同創建了名為 Bigtable 的分布式數據存儲系統,亮點是能夠處理 PB 級別的數據(1 PB 約等於 100 萬 GB)。


之後他們又更進一步,開發出了號稱是「全球最大單體資料庫」的 Spanner。憑藉一種創新的計時方法,Spanner 「在全球覆蓋的同時又保持著類似於單地部署運行感受」。換句話說,即使更新在抵達各地節點的時間上並不相同,Spanner 也能讓全球數據中心網絡保持一致。在 Spanner 出現之前,很多人認為這根本不可能實現。


大家應該能理解開頭那些「關於 Dean 的事實」完全是在搞笑。Dean 本人覺得「有點尷尬,但也挺好玩的。」而且他總是強調,自己的一切成就都離不開合作。


通過採用新的資料庫方法和大規模數據分析幫助谷歌成為一個計算強國,Dean 也贏得了業界最有才華的編碼員之一的榮譽。


每天早上,Dean 都會到加州山景城的 Googleplex 總部上班,跟其他核心員工坐下喝杯咖啡。雖然大家的工作方向並不一樣,有些同事也隨谷歌業務的拓展而搬到了別處,但這種輕鬆愉快的每日討論仍然不斷激發著彼此的思路。咖啡對話幫助 Dean 把自己的優化、並行化和軟體基礎設施方面的專業知識,推廣到了更多谷歌項目當中。作為他的長期搭檔,Sanjay 說「他對我們的工作總是非常熱情和樂觀,似乎沒什麼能夠阻擋他的腳步。」



「Dean 證明了它確實有效」


Dean 天生不願安於現狀:一旦看到問題解決方案的輪廓,這個問題對他而言也就失去了吸引力。


2011 年,在全世界都向雲計算張開懷抱時,他開始與來自史丹福大學的計算機科學教授吳恩達合作。吳恩達教授當時在谷歌公司負責領導一個關於神經網絡研究(即利用虛擬「神經元」構建電腦程式)的秘密項目。


Dean 曾在本科求學階段接觸過神經網絡,但那個時候還無法解決真實世界中的問題。吳恩達告訴 Dean,情況正在快速發生改變。在史丹福大學,研究人員們發現向神經網絡提供大量數據之後,即可取得一系列激動人心的結果。吳恩達認為,在谷歌龐大的業務規模支撐之下,神經網絡不僅將在實用性層面有所提升,更會變得無比強大。


神經網絡與傳統電腦程式截然不同。神經網絡的行為並非由程序直接指定,而是通過輸入與反饋自行「學習」到的。自從本科畢業之後,Dean 的神經網絡知識就一直停滯不前,於是 Dean 的妻子 Heidi 很快發現家裡的衛生間中擺滿了相關教材。Dean 決定每周拿出一天了解這個被稱為「谷歌大腦(Google Brain)」的項目。


當時,谷歌公司內部有很多人對這項技術持懷疑態度,谷歌員工 Alan Eustace 回憶道:「這簡直是在浪費人才。」就連 Sanjay 也對 Dean 的舉動無法理解,他說道,「你的工作在於管理基礎設施,整那些沒用的幹啥?」


在接下來的七年時間裡,谷歌大腦團隊開發出了遠超以往最佳方案的機器翻譯以及語音與圖像識別神經網絡。最終,這些神經網絡模型取代了谷歌最重要的搜索結果排序與定向廣告算法,這也使得谷歌大腦團隊成為公司內增長速度最快的部門之一。


2001 年加入谷歌公司的工程師 Claire Cui 提到,Dean 的參與標誌著谷歌內部人工智慧開發工作的歷史性轉折點:「當時有人相信這項技術,也有人不信,但 Dean 證明了它確實有效。」


事實證明,人工智慧以規模化為前提,而 Dean 這位系統工程師正是規模化實現的好手。他的一項重要努力在於領導了 TensorFlow 項目的開發——目標是為人工智慧創造出與 MapReduce 相似的簡化方案。


TensorFlow 極大降低了將神經網絡分配至多台計算機的門檻,從而將大量計算設備視為統一的龐大主腦。2015 年,TensorFlow 正式亮相,並成為人工智慧領域的客觀標準。谷歌 CEO Sundar Pichai 此後驕傲地宣布穀歌是一家「AI 優先」的企業,並任命 Dean 領導公司內的所有 AI 開發項目。


Dean 每周拿出四天時間管理谷歌大腦團隊,包括團隊中的三千名成員。他到處發表演講,每周召開一次關於新型計算機晶片(即專為神經網絡設計的張量處理單元,簡稱 TPU)的例會。此外,他還參與到 AutoML 的開發協助當中——這是一套嘗試利用神經網絡設計其它神經網絡的系統。在如此繁重的工作壓力之下,如今他每周與 Sanjay 一同編寫代碼的機會只剩下一次。


結束語


其他行業不太一樣,IT 領域的開發者具有很強的不可替代性。


一位出色的會計師也許能幫企業省下 5%的稅費,一名出色的棒球運動員可能比普通選手的搶壘率更高。但出色的軟體開發者可不一樣,一位大神七天能做完的工作,普通的小型開發團隊可能需要幾個月的時間。這是一種指數級的差距,所以各大科技巨頭才願意竭盡全力吸引最頂尖的編程人才。顯而易見,Dean 就是這樣的頂尖人才,以至於在很多人眼中,Jeff Dean 就是谷歌技術的代名詞。


還有一個「關於 Dean 的事實」的段子說道,Dean 能光靠小鍵盤上的 0 和 1 就完成發明。但真正的 Dean 承認,他自己並不是機器學習專家,只是渴望幫助他人構建起可擴展的高性能系統。


跟人們想像中的技術天才不同,Dean 認為硬堆時間來尋求最佳答案的可能性很低。相反,他的解決過程往往從後續計算起步,嘗試在給定過程的質量和速度之間取得最佳平衡點。在他看來,「在許多領域,從機器翻譯到搜索質量,我們總是在對每條查詢的計算方法做權衡。也許無法實現理論上的最佳方法,但如果我們能用某種方式來求取近似,那沒準能用 1%的算力獲得 98%的收益。」


Dean 也確實是這麼做的,他甚至整理了一份「每位計算機工程師都該知道的數字」清單——比如數據包從加利福尼亞到阿姆斯特丹的往返大約需要 150 毫秒。他認為牢記這些數字很重要,因為工程師們經常需要「在 20 分鐘內只靠一塊白板,計算出三種設計里哪種最好。」這事並不容易,但 Dean 表示「只要能把所有細節轉換成能夠直接比較的粗略結論,後面就比較容易推進了。」


如果非要說 Dean 擁有什麼超人的力量,那這種力量跟所謂「神跡」肯定沒半點關係。他的力量是優先級、優化和數量級意義上的力量。更直白地講,這是一種能在更少時間內完成更多工作的力量。在矽谷,這種力量可比舞刀弄棒酷多了。


參考連結:

https://slate.com/technology/2013/01/jeff-dean-facts-how-a-google-programmer-became-the-chuck-norris-of-the-internet.html

https://www.infoq.cn/article/rAJiubRpi9xSl_LEhI2N


本文轉載來源:

https://www.infoq.cn/news/6DxKgF0KO8kgkYh3EIDT

關鍵字: