《紐約客》長文:Jeff Dean和他背後的男人

《紐約客》長文:Jeff Dean和他背後的男人

【新智元導讀】《紐約客》雜誌近日發表長文,描寫了谷歌公司最重要的兩位程序員不為人知的友情故事:Jeff Dean和Sanjay Ghemawat。兩人的友誼已經持續20年,他們都是天才的程序員,工作上是最默契的搭檔,生活上情同手足。

2000年3月的一天,谷歌最優秀的六位工程師聚在一個臨時作戰室。

谷歌公司正處於空前的緊急狀態。上一年10月,谷歌的核心繫統停止了工作,這些系統通過在網絡上“爬行”來構建“索引”(index)。儘管用戶仍然可以在google.com上輸入查詢,但他們收到的結果已經過時5個月。

更多的危險工程師們還未意識到。谷歌創始人拉里·佩奇(Larry Page)謝爾蓋·布林(Sergey Brin)當時正在與雅虎進行談判,為雅虎開發搜索引擎,並且他們承諾提供的索引比他們當時擁有的索引還要大10倍。如果失敗了,google.com就仍然只是一個時間膠囊,與雅虎的交易也可能會告吹,谷歌公司將面臨資金耗盡的風險。

在比特級別理解計算機

在一間靠樓梯的會議室裡,工程師們在鋸木架上鋪上門板,安裝了電腦。二十七歲的克雷格·西爾弗斯坦(Craig Silverstein)坐在遠處靠牆處。Silverstein是谷歌的第一名員工:他加入公司時,公司的辦公室就在布林的客廳裡,他自己重寫了公司的大部分代碼。經過四天四夜,他和一位羅馬尼亞的系統工程師Bogdan Cocosel一無所獲。“我們所做的分析沒有任何意義,”Silverstein回憶說:“所有東西都壞掉了,而我們不知道為什麼。”

Silverstein幾乎沒有注意到他左邊一個人的存在——Sanjay Ghemawat。Sanjay是幾個月前,也就是1999年12月加入公司的。他跟另一位同事——一位身材瘦高、精力充沛的31歲男子,名叫Jeff Dean,同樣來自Digital Equipment Corporation。

Jeff比Sanjay早10個月離開D.E.C。他們兩人非常親密,而且都更喜歡共同寫代碼。在作戰室裡,Jeff把椅子轉到Sanjay的桌前,讓自己的桌子空著。Sanjay敲代碼,Jeff在一旁糾正他,就像新聞主播身邊的製作人。

《紐約客》長文:Jeff Dean和他背後的男人

Jeff Dean和Sanjay Ghemawat

Jeff和Sanjay開始仔細研究索引停滯不前的原因。他們發現有些單詞丟失了——他們搜索了“mailbox”,但沒有得到任何結果;還有一些單詞的順序被打亂。幾天來,他們一直在尋找代碼中的bug,沉浸在代碼邏輯中。一段一段地,終於全部檢查完畢。但他們沒有找到bug。

程序員有時將軟件概念化為層次結構,從頂層的用戶界面,再到越來越基礎的層。要深入到這種結構的底部,即軟件與硬件相結合的地方,就必須拋棄柏拉圖式的代碼順序,轉向它所依賴的電和硅的元素世界。在作戰室的第五天, Jeff和Sanjay開始懷疑他們正在尋找的問題不是邏輯上的,而是物理上的。他們將混亂的索引文件轉換成最原始的表示形式:二進制代碼。他們想看看機器所看到的是什麼。

在Sanjay的顯示器上,出現了由1和0組成的長列,每一行代表一個索引詞。Sanjay指出:一個本該是0的數字變成了1。當Jeff和Sanjay把所有錯誤排序的單詞放在一起時,他們發現了一個模式——每個單詞都出現了同樣的小毛病。他們的機器的存儲芯片不知怎麼壞掉了。

幾個月來,谷歌發生的硬件故障越來越多。問題的根源是,隨著谷歌的發展,它的計算基礎設施也在不斷擴大。計算機硬件很少出故障,但到了硬件非常多的時候,故障就會經常出現。電線磨損、硬盤崩潰,主板過熱。許多機器一開始就不能工作;有些機器會莫名其妙地變慢。環境因素會造成影響。超新星爆炸時,衝擊波會產生高能量粒子,分散在各個方向;科學家們認為,有一種被稱為宇宙射線的偏離軌道的粒子極有可能擊中地球上的計算機芯片,使其從0變成1。

世界上最強大的計算機系統,如安裝在美國國家航空航天局、金融公司等的,它們使用了特殊的硬件,可以承受單比特翻轉。但當時仍像一家初創公司的谷歌使用的是更便宜的計算機,沒有這樣的能力。谷歌已經到了一個轉折點。它的計算集群已經發展到如此之大,以至於即使是不太可能的硬件故障也成了不可避免的

Jeff和Sanjay一起編寫代碼,試圖修復這些問題機器。不久,新的索引就完成了,作戰室解散了。Silverstein是困惑的。他是一名優秀的調試人員,他知道發現錯誤的關鍵是找到問題的根源。

但Jeff和Sanjay找得更深。

在3月份索引崩潰之前,谷歌的系統一直根植於其創始人在斯坦福大學研究生院編寫的代碼。佩奇和布林都不是專業的軟件工程師。他們是進行搜索技術實驗的學者。當他們的網絡爬蟲崩潰時,並沒有出現任何有用診斷信息——只有一句“Whoa, horsey!”早期員工把佩奇和布林編寫的一個名為BigFiles的軟件稱為BugFiles。修復所有重要的索引代碼需要幾天才能完成,如果遇到問題,又必須從頭開始。用硅谷的話說,谷歌不具備“可擴展性”

我們說“search the Web”,但實際上並不是;搜索引擎只是遍歷web的索引——一個映射。1996年,當Google還是BackRub時,它的地圖小到可以裝在佩奇宿舍裡的電腦上。2000年3月,還沒有足夠大的超級計算機能夠處理它。谷歌能做的唯一方式就是購買消費者機器,然後將它們連接成一個機群。

因為這些電腦一半的成本都在谷歌認為是垃圾的部件上——軟盤驅動器、金屬機箱——因此公司會訂購原裝主板和硬盤驅動器,然後將它們裝在一起。在加州聖克拉拉的一棟大樓裡,谷歌有1500臺這樣的設備,堆放在6英尺高的塔樓裡;由於硬件故障,只有1200臺機器工作。看似隨機發生的故障不斷地破壞系統。

為了生存,谷歌必須把它的計算機整合成一個無縫的、能迅速恢復的整體。

Jeff和Sanjay一同負責這項任務。曾在蘋果公司負責Macintosh前身的韋恩•羅辛(Wayne Rosing)在2000年11月加入了谷歌,管理大約100人的工程團隊。

“他們都非常優秀,”羅辛說。為了保障單個硬盤驅動器發生故障時不破壞整個系統,他們能連著每週工作90個小時寫代碼。他們在爬蟲過程中增加了檢查點,以便可以在中途重新啟動。通過開發新的編碼和壓縮方案,他們有效地使系統的容量增加了一倍。他們是不屈不撓的優化者。當汽車轉彎時,外輪必須覆蓋更多的地面;同樣,旋轉硬盤的外沿必須比內沿轉動得更快。谷歌將最常訪問的數據移到外部,以便在讀頭下比特可以更快地流動,但內部的一半是空的;Jeff和Sanjay使用該空間存儲用於常用搜索查詢的預處理數據。

2001年,他們花了四天時間,證明了谷歌的索引可以使用快速隨機存取存儲器(RAM)來存儲,而不是使用相對緩慢的硬盤來存儲;這一發現重塑了該公司的經濟狀況。佩奇和布林知道,用戶會湧向一項能即時提供答案的服務。問題是,

速度需要計算能力,而計算能力需要錢。Jeff和Sanjay用軟件解決了這個問題。

2005年,羅辛離開谷歌後,艾倫·尤斯塔斯(Alan Eustace)成為工程團隊的負責人。“矛盾的是,要解決大規模的問題,你必須知道最小的細節,”尤斯塔斯說。Jeff和Sanjay是在比特的級別上理解計算機的

Jeff曾經分發過一份“每個程序員都應該知道的延遲時間”的列表。實際上這是一份幾乎沒有哪位程序員知道的數字列表:L1緩存引用通常需要0.5納秒,或者從內存中連續讀取1兆字節需要250微秒。這些數字根植在Jeff和Sanjay的大腦裡。他們幫助推動了對谷歌核心軟件的幾次重寫,系統的容量升了幾個數量級。與此同時,在谷歌龐大的數據中心裡,技術人員按照軟件生成的指令更換硬盤、電源和記憶棒。即使部分部件損壞或崩潰,系統仍能正常運行。

今天,谷歌的工程師存在於一條巨大的鏈中,從1級開始。最底層是IT支持人員。2級是剛從大學畢業的學生;3級通常擁有碩士學位。達到4級需要幾年時間,或者一個博士學位。6級工程師(前10%)的能力非常強,通常是項目主管;從6級升到7級需要很長時間的貢獻記錄。首席工程師,即8級,是主要產品或基礎設施的負責人。傑出工程師,即9級,是備受尊敬之人。最後,成為Google Fellow,10級,就是贏得了一項榮譽,這項榮譽將伴隨你一生。Google Fellow通常是他們所在領域的世界領先專家。

Jeff和Sanjay是谷歌的高級Fellow(Senior Fellow),他們是谷歌公司最初的、也是僅有的2位11級工程師。

谷歌園區位於一條高速公路旁,距離山景城市中心只有幾分鐘的路程。園區裡有一群低矮的建築,沒有什麼吸引力,窗戶都是彩色的。去年夏天的一個星期一,在一起編程了一個上午之後,Jeff和Sanjay一起去園區食堂吃午飯。食堂名叫“Big Table,得名於他們在2005年幫助開發的一個系統。

Sanjay又高又瘦,穿著一件老派的褐色亨利衫,灰色褲子,戴著一副小框眼鏡。他看到外面有張桌子,就輕快地走過去,搖開遮陽傘,在陰涼處坐了下來。他為Jeff把另一把椅子挪到陽光下。Jeff一分鐘後到了,他穿著短袖襯衫,腳上穿著時髦的運動鞋。

兩人就像一對夫婦。他們各自講起過去的事情,就這麼拼湊出過往的回憶——兩人早期的項目。

“我們當時還是手寫代碼,”Sanjay說。他的眼鏡在陽光下變暗了。“我們把代碼重寫了一遍,結果怎麼說,就感覺——‘哦,這似乎和我們上個月寫的差不多。’”

“或是和索引的數據略有不同,”Jeff補充說。

“略有不同,”Sanjay說:“我們就是這樣發現問題的。”

“這是關鍵,”Jeff說。

“這是很常見的模式,”Sanjay說完,結束了他們的回憶。

Jeff吃了一口披薩。他的手指像水手一般,骨節突出且有些粗糙;相比之下,Sanjay就更加纖細了。他們是怎麼成為一對的呢?

Sanjay說:“我記不太清楚了,我們是怎麼成為搭檔的呢?”

“我們從進谷歌之前就已經是搭檔了,”Jeff說。

“但我不知道為什麼我們決定在一臺電腦前工作,而不是用兩臺電腦,”Sanjay說。

“在D.E.C.的時候,我會從兩個街區外我的實驗室走到他的實驗室,”Jeff說:“中間有一家冰淇淋店。”

“原來是冰淇淋店!”Sanjay笑道。

Sanjay是單身,Jeff有妻子和兩個女兒,他們曾一起度假。Jeff的女兒們管他叫Sanjay叔叔,他們五人經常在星期五一起吃晚飯。Sanjay和Jeff的大女兒維多利亞都喜歡烘焙。“我看著他的女兒們長大的,”Sanjay自豪地說。

在2004年穀歌IPO之後,他們搬進了相隔四英里的房子。Sanjay住在老山景城一套不起眼的三居室裡;Jeff在帕洛阿爾託市中心附近設計了自己的房子,在地下室安裝了蹦床。在設計這棟房子的過程中,他發現雖然自己喜歡設計空間,但並沒有耐心去完成建築中所謂“適合Sanjay的部分”:橫樑的細節、螺栓、支撐建築的樑柱等。

“我不知道為什麼越來越多人不這樣做了,”Sanjay說,他指的是與搭檔一起編程。

“你需要找到一個能與你的思維方式兼容的人來做搭檔,這樣你們倆就能形成互補。”Jeff說。

最棒的搭檔:10x程序員

社會學家Michael P. Farrell在2001年初版的《協作圈:友誼動機和創造性工作》(Collaborative Circles: Friendship Dynamics and Creative Work)一書中,對法國印象派畫家、弗洛伊德及其支持派等創作型群體進行了研究。

他寫道:“大多數後來成為新理論基礎的見解,不是在整個團隊一起的時候出現的,也不是在成員們單獨工作的時候出現的,而是在兩個人相互合作、相互回應的時候出現的。”1869年夏天,莫奈和雷諾阿並肩工作,形成了後來稱為

印象派的風格;在催生立體主義的六年合作中,巴勃羅•畢加索和喬治•布拉克經常只在畫布背面簽名,不明確說每幅畫是兩人中誰完成的。(畢加索後來回憶說,“直到我們倆都覺得完成了,畫作才算完成。”)

在新科學或新藝術的“理論建設”階段,廣泛探索而不陷入死衚衕是很重要的。弗朗索瓦•雅各布(Francois Jacob)和雅克•莫諾(Jacques Monod)共同開創了基因調控研究,他指出,到20世紀中葉,分子生物學領域的大多數研究都離不開這兩位的研究結果。

“在構思理論和構建模型方面,兩人總比一人好。”雅各布寫道:“因為只有當兩個人一起解決問題時,思維才能飛得更快、更深。它們從一個人腦袋裡跳到另一個人腦袋裡。它們相互嫁接,就像樹上的樹枝一樣。在這個過程中,假象很快就會被扼殺在萌芽狀態。”在過去的35年裡,大約一半的諾貝爾生理學或醫學獎頒給了科學合作。

經過多年分享工作和生活,二人有時會發展出一種私人語言,就像雙胞胎那樣。他們模仿彼此的衣著和習慣。幽默感也會在潛移默化中滲透。在他們之間分配信任是不可能的事。

但這種緊密的合作在軟件開發中並不常見。雖然開發人員有時會談到“組隊編程”——兩個程序員共用一臺計算機,一人“駕駛”,另一人“導航”——但他們也認為這樣的合作關係有點多餘,就好像同一架航班上安排了兩名副駕駛員。

相比之下,Jeff和Sanjay有時更像是一個大腦的兩個半球。他們的一些著名論文有十幾位共同作者。儘管如此,谷歌的一位經理Bill Coughran回憶道,“他們是如此多產、高效的合作伙伴,我們經常是圍繞他們建立團隊。”


《紐約客》長文:Jeff Dean和他背後的男人

這兩位天才程序員就像一個大腦的兩個半球

1966年,系統開發公司(System Development Corporation)的研究人員發現,最優秀的程序員的效率是最糟糕的程序員的十倍以上。從那時起,所謂的“10x(十倍效率)程序員”就一直存在爭議。這一說法推崇個人,但軟件項目通常規模龐大,需要多人參與。在編程世界中,很少有人能靠單打獨鬥取得成功。即便如此,許多程序員仍然將Jeff和Sanjay共同完成的工作視為10x程序員存在的證據。

在同一臺電腦上編程的天才程序員

Jeff Dean於1968年7月出生於夏威夷。他的父親Andy是一名熱帶疾病研究員;他的母親Virginia Lee是一位醫學人類學家,會說六種語言。為了好玩,父子倆設計了一臺IMSAI 8080工具包電腦。他們在機器上進行焊補更新,掌握了機器的每個零件。

Jeff和他的父母經常搬家。13歲時,他跳過了8年級最後三個月的課程,去索馬里西部的一個難民營做義工。後來,在高中時,他開始為流行病學家編寫了一個名為Epi Info的數據收集程序;這個工具後來成為野外工作的一個標準工具,最終以十幾種語言分發了幾十萬份。(美國疾病控制與預防中心運營的一個網站“the Epi Info Story”上有一張Jeff Dean高中畢業時的照片。)

Jeff的博士期間主要研究編譯器,這是一種將人類編寫的代碼轉換成針對計算機優化的機器語言指令的軟件。Alan Eustace說:“就性感程度而言,編譯器相當無趣。”但是另一方面,它會讓你“非常接近機器”。Sanjay描述Jeff:“在編寫代碼時,他會有一個模型。‘這段代碼的性能如何?’他幾乎可以半自動化地考慮所有細微的情況。”

Sanjay直到17歲去康奈爾大學後才接觸到電腦。1966年,他在印第安納州的西拉法葉出生,但在印度北部的工業城市哥打長大。他的父親Mahipal是一位植物學教授;母親Shanta照顧Sanjay和他的兩個兄妹。這是一個愛讀書的家庭:他的叔叔阿Ashok Mehta記得曾買過一本弗雷德裡克·福賽斯的《豺狼之日》,裝訂已經很破舊了,他看著Ghemawat家的孩子們一起讀那本破損的書,讀完後一頁一頁地傳下去。Sanjay的哥哥Pankaj後來成為哈佛商學院有史以來最年輕的教員。(他現在是紐約大學斯特恩商學院的教授。)

在麻省理工學院的研究生院期間,Sanjay認識了一群關係親密的朋友。儘管如此,他從未約會過,直到現在約會的次數也是“屈指可數”。他說他並非是決定不結婚——事情只是自然而然地變成了這樣。他的好朋友們已經知道不去打擾他,他的父母很久以前也接受了他們的兒子將會一直單身的事實。

也許因為他喜歡清靜,在谷歌,他的周圍也籠罩著神秘氣氛。他沉默寡言,但思想深邃——他思考深刻,思路異常清晰。在他的桌子上,放著一堆Mead筆記本,這些筆記本可以追溯到20年前,裡面寫滿了整齊的清單和示意圖。他喜歡用鋼筆和草書寫字。他很少翻閱以前的筆記本,書寫只是為了思考

他的研究生導師、MIT教授Barbara Liskov是一位有影響力的計算機科學家,研究的領域包括複雜代碼庫的管理。在她看來,最好的代碼就像一篇好文章。需要有一個精心設計的結構;每個字都應該有用。編程也需要與讀者產生共鳴。這意味著不僅將代碼視為達到目的的手段,而且將其本身視為一件藝術品。

“我認為Sanjay最擅長的是設計系統,”Craig Silverstein說,“如果你看過他寫的代碼文件,你會發現他的代碼就像比例勻稱的雕塑一樣美麗。”

在谷歌,Jeff的名氣要大得多。但對於熟悉他們兩人的人來說,Sanjay是不輸Jeff Dean的天才

“Jeff非常善於提出大膽的新想法,並製作原型,”與他們共事很久的同事Wilson Hsieh說:“Sanjay是能夠長期打造一個產品的人。”

在生活中,Jeff更外向,Sanjay更內向。在代碼中,情況正好相反。Jeff的程序設計令人眼花繚亂——他能迅速勾勒出令人吃驚的想法——但由於編得很快,代碼可能令讀者費解。Sanjay的代碼則易於理解。

“有些人的代碼太鬆散了,”Silverstein說,“一段代碼的信息量非常少。你總是要來回翻頁才能弄清楚寫的是什麼。另一些人寫的代碼又太過密集,令人讀不下去。Sanjay在兩者之間。你看著他的代碼,你會想,‘很好,我能看懂。’而且,你仍然能夠在一頁的篇幅中得到很多信息。”

今年春天一個週一的早晨,Jeff和Sanjay站在谷歌人工智能部門所在的40號樓的廚房裡。在他們身後,一塊白板上寫滿了矩陣代數;桌上放著一篇關於無監督對抗網絡的論文。Jeff穿著一件褪了色的T恤和牛仔褲,看上去像一個改過自新的海灘流浪漢;Sanjay穿著毛衣和灰色褲子。明亮的窗戶映出一排高大的松樹,遠處是一片田野。只要Jeff在谷歌工作,濃縮咖啡機就會出現。在小廚房的櫃檯上,La Marzocco咖啡機嗡嗡作響。“我們要遲到了,”Sanjay在咖啡研磨機旁說。已經是八點三十二分了。

喝完卡布奇諾後,他們走到電腦前。Jeff把一張椅子從自己凌亂的桌子邊拉到Sanjay的桌子旁,Sanjay的桌子則一塵不染。他把一隻腳擱在文件櫃上,身子往後一靠,Sanjay在他們面前的屏幕上工作。他打開了四個窗口:左側是一個Web瀏覽器和一個終端,用於運行分析工具;右側是文本編輯器Emacs中的兩個文檔,一個是待辦事項列表和筆記本的組合,另一個則滿是各種顏色的代碼。Sanjay的筆記本就放在電腦旁。

“好了,我們要做什麼?”Sanjay問道。

“我想我們正要看TensorFlow Lite的代碼大小,”Jeff說。

這是一個機器學習的新軟件項目,Jeff和Sanjay擔心它過於臃腫;像圖書編輯一樣,他們想要削減代碼量。為此,他們構建了一個需要優化的新工具。

“我得看看它有多慢,”Sanjay說。

“超級慢,”Jeff說。他身體前傾,仍然很放鬆。

“120千字節,大概是8秒。”Sanjay說。

“12萬個堆棧調用,”Jeff說,“不是千字節。”

“額, 千字節的文本,應該是。”Sanjay說。

“好吧,我的錯。”Jeff說。

“我不太清楚應該為一個單元的大小選擇什麼門檻。”Sanjay說,“0.5兆字節?”

“看起來不錯,”Jeff說。Sanjay開始敲代碼,Jeff的目光放在了屏幕上。“所以你的意思是,如果它比那個大,我們就取樣……”他沒有說完;Sanjay用代碼回答了他。

Sanjay開車時,他會把雙手放在10點和2點的位置,專注地盯著前方。他在鍵盤前也是這樣的。他的雙腳與肩同寬,似乎這就是他工作的姿勢。他細長的手指在鍵盤上輕快地移動。

很快他們到達了一個小小的里程碑,Sanjay輸入一個命令來測試進展。他看起來疲憊不堪,在程序運行時他check了一下郵件。測試結束了,他也沒有注意到。

“嘿,”Jeff說。他打了個響指,然後指向屏幕。雖然平常談話時他經常講笑話和雙關語,但在電腦前,他就變得固執、粗魯,意見也經常合不來。Sanjay對此泰然處之。當他覺得Jeff動作太快時,他會把雙手從鍵盤上抬起來,攤開手,好像在說:“停一下。”(如果打個比方,Jeff是油門,Sanjay就是剎車。)這是他們最接近爭論的時候:在一起20年了,他們都沒有互相提高過嗓門。

接近午餐時間。他們一起工作了兩個小時,中間休息了十分鐘,大部分時間都在交談。(普通程序員看到他們可能會印象深刻,因為他們從未被卡住或陷入困境。)讓另一位程序員檢查代碼,已經成為標準的工程實踐,但是Jeff和Sanjay跳過了這一步,在他們的日誌中輸入“lgtm”(looks good to me),即“在我看來很好”。

表面上看,他們的工作都是細枝末節。然而,他們的代碼在整個谷歌公司範圍運行。他們所擔心的千字節或是微秒的問題會在世界各地的數據中心被放大無數倍。有時,Jeff回到家會告訴他的女兒們,“Sanjay和我今天把谷歌搜索速度提高了10%。”

拯救谷歌的MapReduce

2003年,Jeff和Sanjay對Google進行了可以說是4個月來最大的一次升級。他們用一個叫做MapReduce的軟件完成了這項工作。這個想法是他們第三次重寫谷歌的爬蟲和索引器時產生的。他們意識到,每次他們都解決了一個重要問題:在地理上廣泛分佈、個別不可靠的計算機中協調工作。將他們的解決方案普及化(generalize),就可以避免一遍又一遍地重複遇到這個問題。但這需要創造一種工具,讓任何谷歌的程序員都可以用它來操縱數據中心的機器。

MapReduce是Jeff和Sanjay在一間可以俯瞰鴨塘的角落辦公室裡寫的,程序對可能極其複雜的過程強加了順序。在MapReduce之前,每位程序員都必須自己解決如何劃分和分發數據、分配工作和解釋硬件故障的問題。MapReduce為程序員提供了一種結構化的方式來思考這些問題。

MapReduce要求程序員將他們的任務分為兩個階段。首先,編碼器告訴每臺機器如何完成任務的“映射”階段(例如,計算單詞在Web頁面上出現的次數);接下來,編寫指令來“減少”所有機器的結果(例如,將它們加起來)。MapReduce處理分佈的細節,並且通過這樣做,可以隱藏細節。

第二年,Jeff和Sanjay根據MapReduce任務重寫了谷歌的爬蟲和索引系統。很快,其他工程師意識到它有多麼強大,他們開始使用MapReduce處理視頻並在谷歌地圖上渲染圖塊。MapReduce是如此簡單,甚至新任務一直是自我提示的。谷歌有所謂的“日使用曲線”——白天的流量大於晚上的流量——MapReduce任務開始吸收空閒容量。

很早就有跡象顯示,谷歌是一家偽裝成搜索公司的人工智能公司。2001年,曾與Jeff和Sanjay共用一間辦公室的Noam Shazeer,對谷歌從另一家公司獲得授權的拼寫檢查程序感到沮喪:它不斷地犯令人尷尬的錯誤,比如告訴輸入“TurboTax”的用戶,他們可能是在說“turbot ax”。拼寫檢查器的好壞取決於它的字典,而Shazeer意識到,在Web上,谷歌可以訪問有史以來最大的字典。他編寫了一個程序,利用Web上文本的統計特性來確定哪些單詞可能拼寫錯誤。軟件會知道“pritany spears”和“brinsley spears”都是指“Britney Spears”。當Shazeer在谷歌的每週T.G.I.F.聚會上演示這個程序時,員工們試圖愚弄它,但大多數都失敗了。

在Jeff和一位名叫Georges Harik的工程師的合作下,Shazeer應用了類似的技術將廣告與網頁關聯起來。廣告定位成為了該公司的一筆收入,谷歌將這筆收入重新投入到計算基礎設施中。這是一個反饋循環的開始,更大的反饋循環將成為谷歌智能的源泉;智慧是財富的源泉;財富是公司增長的源泉;這將使公司異常令人不安地佔據主導地位。

隨著更多的程序員使用MapReduce從谷歌的數據中獲得見解,轉錄一百多種語言的用戶語音郵件、回答他們的問題、自動完成他們的查詢和翻譯成為可能。這些系統是使用相對簡單的機器學習算法開發的。

“非常簡單的技術,當你擁有大量數據時,就能工作得非常好,”Jeff說。“數據、數據、數據”——用BigTable、MapReduce等來存儲和處理,成為公司的首要指令,谷歌的全球基礎設施變得更加無縫和靈活。分佈式計算是一個古老的概念;“雲計算”和“大數據”等概念出現在谷歌崛起之前。但是,通過讓普通程序員能夠方便地編寫分佈式程序,Jeff和Sanjay使谷歌對這類技術有了新的掌握。用戶可能已經意識到有些事情正在改變:谷歌的雲變得越來越聰明瞭

2004年,因為Jeff和Sanjay認為MapReduce將對天文學家、遺傳學家和其他需要處理大量數據的科學家有用,他們寫了一篇論文《MapReduce:簡化大型集群上的數據處理》,並公開發表。

MapReduce的論文就像一種扭轉乾坤之力量。廉價的硬件、Web服務和連接設備的增長帶來了海量數據,但很少有公司擁有處理這些信息的軟件。

兩位工程師,Mike Cafarella和Doug Cutting,他們一直在努力擴大一個叫做Nutch的小型搜索引擎,他們非常確信MapReduce的重要性,所以他們決定從頭開始構建一個免費的系統克隆。他們最終將這個項目命名為Hadoop,名字來源於Cutting的兒子喜愛一個大象玩具。

如今Hadoop已經被財富50強中一半的企業採用。它成了“大數據”的同義詞。Facebook使用Hadoop MapReduce來存儲和處理用戶元數據——包括用戶點擊了什麼、喜歡了什麼以及查看了哪些廣告的信息。Facebook一度擁有世界上最大的Hadoop集群。Hadoop MapReduce也為LinkedIn和Netflix提供支持。Hadoop執行分析任務的速度比之前的系統快1.8萬倍。它成為了情報收集新方法的基礎。

擁抱人工智能

Jeff有一種不安定的天性:一旦他看到問題的解決方案,他就會對這個問題失去興趣。2011年,當全世界都在擁抱雲計算的時候,他開始與吳恩達(Andrew Ng)合作。

吳恩達是斯坦福大學的計算機科學教授,曾在谷歌領導一個秘密項目,研究由虛擬“神經元”組成的神經網絡軟件程序。Jeff在大學期間認識了神經網絡;當時,神經網絡還不能解決現實世界中的問題。吳恩達告訴Jeff,這種情況正在改變。在斯坦福大學,當網絡獲得了大量的數據時,研究人員已經取得了一些令人興奮的結果。吳恩達認為,有了谷歌這樣大規模的數據,神經網絡不僅可以變得有用,而且可以變得非常強大。

神經網絡與傳統的計算機程序有很大的不同。它們的行為不是由程序員用通常的方式指定的;相反,它是通過輸入和反饋“學習”的。Jeff的神經網絡知識從他大學畢業後就沒怎麼進步,他在浴室裡堆滿了課本。

Jeff開始每週花一天的時間在這個叫做“Google Brain”的項目上。谷歌內部許多人對這項技術表示懷疑。“真是浪費人才,”他當時的經理Alan Eustace回憶說。Sanjay也無法理解Jeff的舉動。“你從事基礎設施建設的,”他想,“你在那邊做什麼呢?”

在接下來的7年裡,谷歌大腦團隊開發出了神經網絡,在機器翻譯、語音和圖像識別方面超越了當前最先進的技術水平。最終,它們取代了谷歌最重要的搜索結果排名和定位廣告算法,Google Brain成為公司發展最快的團隊之一。

2001年開始加入谷歌的工程師Claire Cui說,Jeff Dean的參與標誌著Google AI的一個轉折點:“有人相信AI,也有人不相信,”Jeff證明了它是可行的。

AI很大程度上取決於規模。為此,Jeff Dean領導了一個名為TensorFlow的程序的開發——該程序試圖創建一個類似於AI版的MapReduce程序,簡化在大量計算機上分佈神經網絡的任務。2015年,TensorFlow終於發佈,後來成為AI的通用框架。而近年,谷歌CEO Sundar Pichai已經公開宣稱谷歌是“AI first”的公司,正是Pichai決定讓Jeff Dean擔任公司人工智能部門的負責人。

Jeff現在每週花四天時間在谷歌大腦工作。他帶領著3000多名研究員。他經常去做演講,每週開一次會,研究一種新型計算機芯片(專門為神經網絡設計的張量處理單元TPU),並幫助開發AutoML,這是一個使用神經網絡設計其他神經網絡的系統。

他每週只有一天時間能和Sanjay一起編程。

角色不同,但從未走遠

工程上的壯舉往往會抹殺自己。我們會記得18世紀偉大的探險家詹姆斯·庫克(James Cook)、喬治·溫哥華(George Vancouver),但卻不記得約翰·哈里森(John Harrison)了。哈里森是一名鐘錶匠,他花了幾十年,發明了一種航海精密計時器,能夠可靠地在海上定位經度。

最近,Jeff和Sanjay在他們經常光顧的一家墨西哥餐館享用瑪格麗塔和玉米餡餅時,Jeff拿出了手機。“Gmail是什麼時候問世的?””他問道。“2004年4月1日,”手機回答道。Sanjay在社交場合很敏感,他似乎不喜歡用餐時被打擾,但Jeff很高興。如今,谷歌可以說話、會傾聽,也會回答問題了,這些功能通過一系列程序實現,這些程序無縫整合,基本上是看不見的,能將用戶的手機連接到世界各地的數據中心。

今天,他們兩人的角色已經截然不同。在谷歌,Sanjay被稱為“個人貢獻者”——他獨自工作,不管理任何人。對此,他心存感激。“我不想要Jeff的工作,”他說。他目前正在開發一種軟件,可以讓工程師們更容易地組合和控制幾十個程序——獲取新聞、照片、價格——只要用戶在Google的搜索框輸入文本,這些程序就會開始運行。每週一次,他會見一群“區域技術領導”——谷歌的“工程絕地委員會”——他們做出的技術決定會影響整個公司。

如果將Google比喻成一座房子,那麼Jeff是在建造房子的附加部分。Sanjay是在加固房子的結構,加固屋樑,擰緊螺栓。

與此同時,在週一的編程會議上,他們開始了一些新的工作。這是一個AI項目:Jeff說,這是一個嘗試,訓練一個“巨型的”機器學習模型來完成成千上萬的不同任務。Jeff多年來一直在思考這個想法;最近,他認為這是可能的。他和Sanjay計劃建立一個原型,讓團隊可以圍繞這個原型開發。

“我想他們彼此思念,”Jeff的妻子Heidi說。他們在合作放緩時,會在每週五共進晚餐。

3月的一個週末,Jeff和Sanjay在庫比蒂諾郊外徒步旅行。天氣晴朗,陽光明媚。Jeff開著一輛藍色的特斯拉跑車。Sanjay緊隨其後,也是特斯拉,一輛紅色Model S。Sanjay上午一直在看書。Jeff踢了場足球。(他小腿上的一個裝置告訴他,他已經跑了7.1英里。)距離建立谷歌Index的那個三月已經過去20年了,Jeff就像一名退役的耐力運動員,皮膚被太陽曬壞了。而Sanjay看起來幾乎沒有變老。

這條路有六英里長,蜿蜒穿過茂密的森林。Jeff帶路。在樹林裡,他們說起谷歌的成長速度有多快。 Sanjay 回憶說,在公司的第一次井噴式增長期間,一名水管工在男衛生間的一個隔間裡安裝了兩個馬桶。“我記得當時Jeff的評論,”他笑著說:“‘兩個總比一個好!’”

他們從樹林裡出來,來到乾燥、空曠的鄉間。一隻火雞禿鷹從頭頂飛過。

“這裡的山比我想象的還要陡,”Jeff說。

“我記得有人說條路相當平坦,” Sanjay說。

“我想這就是那邊沒有自行車道的原因,”Jeff說。

他們開車回到樹林。在一個急轉彎中,Jeff向樹林外瞥了一眼,他說:“我們在某些方面需要好好觀察。”

小路一直通向山頂,又高又寬,沒有樹,全景盡收眼底。地平線上有一片薄霧。儘管如此,他們仍能看到南面的聖克魯斯山脈和東面的米遜峰。

“Sanjay,那邊是你的辦公室!”Jeff說。他們站在一起,眺望著山谷的另一邊。


分享到:


相關文章: