兩個程序員的神奇友誼:幫助谷歌度過重大危機
導語:美國《紐約客》近日發表文章,描述了谷歌公司內部兩個程序員間的友情故事。桑杰·格瑪沃特(Sanjay Ghemawat)和杰夫·迪恩(Jeff Dean)是谷歌的高級研究員,他們共同合作,幫助谷歌在早期解決一場前所未有的危機,后來還在很多項目上有合作。雖然目前他們職責不同,但他們仍然保持著深厚的友誼。
以下為文章全文:
2000年三月里的某一天,谷歌內最優秀的六位工程師聚集在一間臨時“作戰室”內。公司正面臨一場前所未有的危機。十月,谷歌的核心系統停止運行。雖然用戶依然可以在谷歌網頁上輸入問題進行搜索,但他們獲得的結果其實是五個月之前的了。實際上,該問題的嚴重程度還不止如此。谷歌的聯合創始人拉里·佩奇(Larry Page)以及謝爾蓋·布林(Sergey Brin)當時正在與雅虎協商談判,計劃為其提供搜索引擎支持,他們承諾提供比其擁有的搜索引擎強大十倍的索引。這樣的索引需要跟上萬維網的發展速度,而后者在之前一年時間內規模增加了一倍。如果他們失敗了,那么與雅虎的談判有可能功虧一簣,谷歌也將燒掉所有資金,淡出大眾視野。
在樓梯旁的會議室里,工程師們把門放在鋸木架上,然后擺好了電腦。二十七歲的克雷格·西爾弗斯坦(Craig Silverstein)體型瘦削,但嗓門洪亮。他就坐在遠處的墻邊。西爾弗斯坦是谷歌的第一位員工:在他加入谷歌時,谷歌的辦公室還設在布林的起居室里,大部分編程他都是自己重寫的。在接連四天四夜的奮戰之后,他和羅馬尼亞的系統工程師博格丹·科考塞爾(Bogdan Cocosel)依然毫無頭緒。“我們所做的分析毫無價值。”西爾弗斯坦回憶道,“所有東西都出問題了,而我們找不到原因。”
西爾弗斯坦幾乎沒有注意到自己左肩上方桑杰·格瑪沃特(Sanjay Ghemawat)的存在。桑杰是一個沉默寡言的麻省理工畢業生。他眉毛濃密,有著一頭烏黑的頭發。幾個月之前,桑杰才剛剛加入公司。他是和在Digital Equipment Corporation的同事——31歲的杰夫·迪恩(Jeff Dean)一起跳槽到谷歌的。杰夫是個精力充沛的人。他比桑杰早十個月離開了D.E.C.。兩人之間非常要好,愿意一起寫代碼。在作戰室里,杰夫把他的椅子挪到了桑杰的桌子旁邊。桑杰敲代碼的時候,杰夫就靠在他的背上,像是新聞主持人耳畔叮囑的制片人一樣,糾正桑杰的代碼。
杰夫和桑杰開始探究索引方面的問題。他們發現有一些詞匯消失了——搜索“郵箱”的話,網頁不會顯示任何結果——而其他一些詞匯則是以亂序出現。幾天內,他們一直忙于尋找代碼中的錯誤,沉浸在邏輯的世界里。他們核查了所有代碼,但并未找到程序錯誤的根源。
有些時候,程序員會將他們的軟件概念化成一個多層級結構,從頂端的用戶界面往下延伸到基礎層級。為了探究該架構的底部(這也是軟件和硬件的交匯之處),這就需要關注代碼存在所依靠的電以及硅的元素宇宙。在第五天的作戰室里,杰夫和桑杰開始懷疑他們尋找的問題根源并非是出在邏輯上,而是物理層面。他們將亂成一團的索引文件轉變為原始形式:二進制碼。他們希望能看到機器發現的蛛絲馬跡。
在桑杰的顯示器上,出現了由1和0組成的縱列,每一排都代表著索引詞。桑杰指出:一個本應該是0的數字卻是1。當杰夫和桑杰將所有誤分類的詞集中在一起之后,他們發現了一個規律——每個詞匯都出現了一種相同的小差錯。機器的內存芯片不知怎么回事似乎被破壞了。
桑杰看了看杰夫。數月以來,谷歌內硬件故障的情況越來越多。隨著谷歌規模的擴大,計算基礎設施也在不斷發展。計算機硬件鮮少會出現故障,除非使用了過長時間——之后便會一直失靈。電線會老化、硬盤會散架、電腦主板過熱等。許多機器在一開始并非就有用,有一些機器也會莫名其妙得處理速度變緩。陌生環境因素可能也會起到一定影響。當一顆超新星爆炸的時候,沖擊波會帶來高能量粒子,朝著各個方向散射。科學家們認為有一種微弱的可能,部分粒子可能會擊中地球上的計算機芯片,將0變為1。全球最穩固的計算機系統,例如NASA、金融公司等會采用特殊的硬件來預防這種情況。但是谷歌在當時,運營模式依舊像是一個初創企業,它所購買的計算機缺乏這種特性。這家公司已經到達了一個拐點。其計算集群已經發展到了一個很大的規模,即便是不太可能會發生的硬件故障也是無可避免的。
杰夫和桑杰聯手寫代碼來彌補機器出現的問題。很快,他們完成了新的索引。作戰室也就此解散了。西爾弗斯坦感到些許困惑。他很善于找到程序問題,而這一步驟的關鍵在于弄清問題的真正原因。
直到三月代碼出現問題之前,谷歌系統采用的還是其創始人在斯坦福大學就讀研究生時所寫的代碼。佩奇和布林并非是專業的軟件工程師。他們是在搜索技術領域進行試驗的學者。當他們的網絡爬蟲崩潰時,沒有出現任何診斷信息,只是一句——“Whoa, horsey!”早先的員工查閱了佩奇和布林撰寫的軟件BigFiles。所有重要的索引代碼都需要數天時間才能完成,如果出現問題,那就需要從頭開始。用硅谷的話來說,谷歌無法“升級”。
我們會說自己“搜索網頁”,但其實并非如此。我們的搜索引擎來回穿梭在互聯網的索引中——一張地圖。當谷歌在1996年還被叫作BackRub時,這張地圖小到足以適配佩奇寢室內安裝的計算機。2000年3月還沒有出現龐大的超級計算機來進行處理。谷歌能做的唯一一點就是購買消費者機器,然后將其連接為一個艦隊。由于谷歌認為這些計算機的零件都是破爛品,所以他們會去訂購原裝主板和硬盤并將其進行組裝。在加州圣克拉拉的一棟建筑物里,谷歌擁有1500個這種設備,堆起來有六英尺高。由于硬件故障,只有1200個還能用。隨機發生的故障正在不斷破壞系統。為了存活下去,谷歌必須將其計算機整合成一個無縫連接、有適應能力的整體。
杰夫和桑杰一同負責這一任務。曾在蘋果負責過Macintosh前身的韋恩·羅辛(Wayne Rosing)在2000年11月加入了谷歌,管理一個數百人的工程團隊。“他們都非常優秀。”他這樣說道。他們能連著每周工作90個小時寫代碼,就為了單個硬盤的故障不會破壞整個系統。他們還在爬蟲過程中增設了檢查站。通過制定新的編碼以及壓縮體系,他們能夠高效增加系統的功率。他們是不知疲倦的優化者。當車輛轉彎時,外面的車輪必須接觸到更多地面。與之類似,旋轉硬盤的外沿也必須比內沿的移動速度要快。谷歌將頻繁被訪問的數據移到外部,而保持內部空白。杰夫以及桑杰利用此空間來存儲相同搜索詢問中被預先處理過的數據。在2001年的四天內,他們證明了谷歌的索引可以采用快速隨機存取存儲器,而不必使用相對緩慢的硬盤。這一發現改變了公司的經濟情況。佩奇和布林知道用戶會爭相來使用能立即提供答案的服務。問題在于速度就意味著計算力,而計算力需要資金。杰夫和桑杰用軟件克服了這一困難。
羅辛在2005年離開之后,艾倫·尤斯塔斯(Alan Eustace)成為了工程團隊的負責人。“矛盾的是,為了解決一定規模的問題,你需要掌握最細微的細節。”尤斯塔斯說道。杰夫和桑杰能夠非常確切得掌握計算機的細節信息。杰夫曾經發布了一份清單,講的是“每一位程序員都應該知道的延遲值”。實際上,幾乎沒有一個程序員知道這些值意味著什么。這項數字已經深深嵌入在了杰夫和桑杰的大腦中。他們帶頭重新編寫谷歌核心軟件時,系統的功率成量級增長。即便零件有的老舊或失靈,系統也依然存活了下來。
兩個高級研究員
如今,谷歌的工程師會被分為很多級。第一級就是IT支持人員。第二級是剛出大學的應屆生。第三級則是有碩士學位的畢業生。達到第四級需要幾年時間,或是需要擁有博士學位。大多數人止步于第五級。第六級的工程師——最頂尖的10%——非常厲害,他們可以說是一個項目成功的原因。第七級和第六級的工程師資歷都非常老了。首席工程師也就是第八級,他們通常會負責一個主要產品或基礎架構。杰出工程師為第九級,他們在業內備受尊崇。如果成為了谷歌研究員,那么你就是第十級工程師,這是一種終身榮譽。谷歌研究員在其各自領域都是全球的頂尖專家。杰夫和桑杰就是谷歌的高級研究員——公司內絕無僅有的兩個第十一級工程師。
谷歌的園區就坐落在距離里山景城市中心幾分鐘車程的公路旁。園區內有一排低矮的建筑物。去年夏天的一個周一,在早晨完成編程之后,杰夫和桑杰一起去園區內名為“Big Table”的自助餐廳就餐。該餐廳的名字是以他倆在2015年參與開發的系統來命名的,該系統可以將無數臺計算機當作是一個數據庫進行處理。瘦瘦高高的桑杰穿著褐紅色的亨利衫、灰色的褲子,戴著一副線框眼鏡。他看到外邊的一個桌子,很快走過去,用曲柄打開傘,然后坐在陰涼處。他又將太陽下的另一把椅子搬過來。杰夫幾分鐘之后走了過來。
兩人就像是一對夫妻,各自講述一點過去的事情,就這么拼湊出了過往的回憶。他們開始回憶起自己早期的項目。
“我們當時還是手打代碼。”桑杰說道。他的眼鏡在陽光下萌生了一絲陰影。“我們會重新寫代碼,然后就感覺——‘哦,這好像是我們上個月寫過的那個。’”
“或是和索引數據略微不同。”杰夫補充道。
“略微不同。這就是我們發現問題的方式。”桑杰說道。
“這是關鍵。”杰夫說道。
“這是共有的模式。”桑杰說。
杰夫咬了一口他買的披薩,他的手指像水手的手指,骨節突出且有些粗糙。而桑杰的手指相比而言更顯纖細。桑杰在想他們是怎么成為搭檔的。“我有點記不太清楚為什么我倆做搭檔更好了。”
“我們在谷歌之前就一起合作。”杰夫說。
“但我記不清為什么我們要在一臺電腦上編程,而不是在兩臺電腦上工作。”桑杰說。
“在數字設備公司工作的時候,我經常從我的實驗室走兩個街區到他的實驗室。兩個實驗室中間有一個冰淇淋店。”
“是冰淇淋店!”桑杰笑道。
桑杰一直未婚,他會在假期同杰夫、杰夫的妻子海蒂以及他的兩個女兒一起度假。杰夫的女兒們叫他桑杰叔叔,他們五個人經常在周五共進晚餐。桑杰和杰夫的大女兒會一起做烘焙。“我算是見證了他兩個女兒的成長。”桑杰自豪地說道。在谷歌2004年首次公開募股之后,他們搬到了僅隔四英里的房子里。桑杰住在山景城一個三居室房子里,而杰夫則自己設計了房屋,在地下室里裝了一個蹦床。在設計房屋時,他發現自己雖然喜歡設計空間,但并沒有耐心去完成建筑方面“適合桑杰的部分”:橫梁的細節、螺栓以及供電量等等。
“我不知道為什么沒有更多的人像我們這樣合作。”桑杰在提及與搭檔一同編程時說道。
“你需要找到一個搭檔,他的思維方式與你相符,這樣你們兩個人就能夠優勢互補。”杰夫說道。
他倆將桌子往后移,在餐廳和谷歌員工中四處溜達,尋找軟質冰淇淋。杰夫更急于解釋,在他們走動的過程中,他分享了自己軟質冰淇淋的策略。“我負責壓扁。我想擠壓的方法能夠增加穩定性。”他說道。桑杰則為他的甜筒選了巧克力和香草味的混合冰淇淋。
在社會學家邁克爾·法瑞爾(Michael P. Farrell)于2011年出版的《協作圈:友誼動機和創造性工作》(Collaborative Circles:Friendship Dynamics and Creative work)一書中,作者對比了兩組創作型人群——法國印象派、西格蒙德·弗洛伊德(Sigmund Freud)及其同時代人——之間的的區別。“構成新愿景的想法并非是在整個團隊齊心協力時出現的,也不是在成員單獨工作時出現的,而是在雙方合作并組隊回應另外一隊人時出現的。”他這樣寫道。莫奈和雷諾阿曾在1869年一同合作,開創了印象派畫法。畢加索和喬治·布拉克合作的六年時間內,催生出了立體主義,因為雙方通常會在油畫背面簽名,以掩蓋究竟是誰完成了作品。(“一幅油畫完成與否,得由我們雙方都覺得它完成了才行。”畢加索之后回憶道。)
在新科學或藝術的“理論構建”階段,進行大范圍的探索非常重要,而不能繞進死胡同。François Jacob以及Jacques Monod一同開創了基因調控。他指出到二十世紀中期,分子生物學新興領域的大多數研究都是兩人合作的結果。“相比一個人,兩個人能更好地想出理論并且建構模型。”雅各布寫道,“當兩個人一同解決問題時,創意會更加‘茂密’、更快出現。它們會在合作伙伴之間來回反射。兩者會結合得更加緊密,就像是樹上的枝杈一樣。而在此過程中,假象就會很快被扼殺在萌芽中。”在過去三十五年來,大約有一半的諾貝爾獎生理學或醫學獎被授予給了科學合作伙伴。
在分享工作生活多年之后,兩個人會形成一種私密的語言,就像是雙胞胎一樣。他們會模仿彼此的穿著、習慣。幽默感會在潛移默化中傳遞。分配信任是一件不可能的事情。但是這種強度的合作關系在軟件開發中是非比尋常的。盡管一些開發者有時候會談論“組隊編程”——兩個程序員共用一臺電腦,一個人“駕駛”、另一個人“導航”——他們通常會認為這樣的合作關系顯得很多余,這就好像同一架飛機上安排了兩個副駕駛員。相比之下,杰夫和桑杰有時候就像是一個大腦的兩個部分。一些知名論文通常有許多第二作者。不過,他們的經理比爾·庫格蘭(Bill Coughran)回憶道:“他們兩個人搭檔時效率很高,以至于我們經常圍繞他們來組建團隊。”
1966年,系統開發公司的研究人員發現最出色的程序員是糟糕程序員效率的十倍以上。所謂的“10倍程序員”說法自此開始引發爭議。這一想法推崇個體,但軟件項目規模龐大,通常需要多人參與。在編程中,極少數人能依靠單打獨斗取得成功。即便如此——或是頗具諷刺意味的是——許多程序員都認為杰夫和桑杰合作的成果是10倍程序員存在的證據。
杰夫于1968年7月出生在夏威夷。他的父親安迪是一名熱帶疾病研究人員,他的母親弗吉尼亞·李是一位會說六國語言的醫學人類學家。有趣的是,父子兩人設計了一臺IMSAI 8080工具包電腦。他們在機器上進行焊補更新,掌握了機器的每個零件。
杰夫和他的父母經常搬家。十三歲那年,他在八年級最后三個月時間里翹課,去西部索馬里的難民營幫助其父母。之后,在高中,他開始為流行病學家編寫了一個叫作Epi Info的數據收集程序。之后,該程序成為了流行病學家野外工作的標配工具,最終,它以十多種語言被復制發行了數十萬份。
杰夫的博士學位專業是編譯器,該軟件可以將人們寫的代碼轉化針對計算機優化的機器語言指導。“就有趣程度來說,編譯軟件變得愈加無趣。”Alan Eustace說道,但另一方面它又能讓你“非常接近機器”。桑杰在描述杰夫時,將其食指轉動了一下,“當你在編寫代碼時,他的腦海里就能有一個模型。”他說道,“這些代碼的結果是什么?他會半自動得思考所有極端情況。”
桑杰是17歲去康奈爾念書時才第一次接觸電腦。他于1966年出生在印第安納州西拉斐特,但在一個位于印度北部的工業城市長大。他的父親Mahipal是一位植物學教授,他的母親Shanta則在家照顧桑杰以及另外兩個兄妹。他們一家人都喜愛讀書:他的叔叔Ashok Mehta記得自己買過一本破舊的《The Day of the Jackal》,一家人一同看完才會翻頁。桑杰的弟弟成為了哈佛商學院有史以來最年輕的教職人員,現在則是紐約大學斯特恩分校的教授。
在麻省理工就讀研究生期間,桑杰認識了一群關系親密的朋友。盡管如此,他卻從不去約會,現在約會的次數也是“屈指可數”。他說自己并不想結婚——他就是這么想的。朋友在知悉之后決定不再就此事去打擾他,他的父母很早之前就接受自己的兒子將會一直是單身漢的事實。也許他喜歡清靜,在谷歌時,他就散發著一種神秘的氣息。他雖然沉默寡言,但思想深邃——他是一個能進行深入思考,但思路依舊清晰的人。近二十年來,他一直在自己的桌上放著一堆Mead筆記本,上面滿是干凈的清單以及示意圖。他喜歡用鋼筆寫草體字。他很少翻閱之前的筆記本,書寫只是為了思考。在麻省理工,他的畢業導師是一位頗具影響力的計算機科學家Barbara Liskov。在她看來,最好的代碼就像是寫作。它需要認真思考結構,每個詞都能物盡其用。編程也需要獲得讀者的共鳴。這就意味著代碼不僅僅只是一種實現目的的手段,而它本身就是一項人工制品。“我覺得桑杰最擅長的就是設計系統。”克雷格·西爾弗斯坦說道,“如果你看過桑杰寫的代碼,你會發現它就和比例完美的雕塑一樣漂亮。”
在谷歌,杰夫的知名度要更高一些。員工間會流傳杰夫的表情包等。但在那些了解杰夫和桑杰的人看來,桑杰也同樣是一位杰出的人才。“杰夫擅長于想出新電子然后設計原型。”與之共事很久的同事威爾遜·謝(Wilson Hsieh)說道,“桑杰擅長打造一個持久的產品。”在生活中,杰夫性格更外向一些,桑杰則是偏內向。而在編程的世界里,恰恰相反。杰夫的編程令人頭暈目眩——他能很快列出驚人的想法——但是,正因為想法之快,它會將閱讀代碼的人拋在身后。而桑杰的代碼則易于理解。
西爾弗斯坦表示:“一些人的代碼松松垮垮。整個屏幕上的信息寥寥無幾。你需要來回翻閱才能弄清楚。”還有一些人寫的代碼非常密集:“你仔細閱讀之后,就會心想——我并不想閱讀這樣的內容。桑杰卻能夠在兩者之間取得更好的平衡。看他的代碼,你的感覺就是——‘好的,我可以明白’,但你依然能發現這一頁上有很多內容。每當我想要在桑杰的代碼上添加新功能時,似乎這些功能早就設計好了。我感覺自己像是Salieri,我能理解它的偉大,但我不明白這究竟是怎樣做到的。”
職責不同,但友誼長存
今年春天,某個周一的早晨,杰夫和桑杰站在谷歌人工智能部門的小廚房內。在他們身后,一塊白板上寫滿了矩陣代數。桌上的紙上都是一些無人監管的對抗網絡。杰夫穿著一件褪色的T恤和牛仔褲,看上去像是一個在海灘消遣的人,而桑杰則穿著毛衣和灰色褲子。明亮的窗戶外是一顆高高矗立的松樹,再往外則是一塊田地。不論何時,杰夫在谷歌工作的地方總有制作卡布奇諾的咖啡機。“我們快遲到了。”桑杰在咖啡機旁說道。已經是八點三十二分了。
在喝完咖啡之后,他們就走向自己的電腦。杰夫從他的桌子那邊將椅子移到桑杰的桌子旁。杰夫的桌子上一團亂,反觀桑杰的桌子卻是整潔無暇。杰夫將一只腳搭在文件柜上,背靠椅子,而桑杰則在看著面前的屏幕。他們面前共有四個窗口,左邊是一個網頁瀏覽器和一個終端,主要用于運行分析工具。右邊,文本編輯器Emacs中有兩個文檔,一個是待辦事項和筆記,另一個文檔則是五顏六色的代碼。桑杰的筆記本就放在計算機旁邊。
“好了,我們做些什么?”桑杰問道。
“我想我們應該看看TensorFlow Lite的代碼規模。”杰夫說道。
這是一個關于機器學習的新型軟件項目,杰夫和桑杰擔心項目有些“臃腫”。就像是書本編輯一樣,他們在尋找可以削減的地方。針對這項任務他們開發了一個新的工具可以自行進行優化。
“我想的是弄清楚速度有多慢。”桑杰說道。
“已經非常慢了。”杰夫說道,他往后靠了靠,神態輕松。
“這個是120個千字節。”桑杰說道,“大概是八秒左右吧。”
“12000個函數調用堆棧。”杰夫說道,“而不是千字節。”
“額,文本千字節。”桑杰說道。
“好吧,我的錯。”杰夫說。
“我不太清楚我們應該挑選什么樣的單元大小。”桑杰說,“一半兆位?”
“看上去不錯。”杰夫說。桑杰開始輸入代碼,杰夫的目光則放在了屏幕上。“你剛才是說,如果這比我們抽樣的結果要大……”剩下一半話他還沒說完,桑杰就用代碼回答了他的問題。
當桑杰工作的時候,他會聚精會神。他會將雙腳岔開到肩寬,似乎這就是他工作的姿勢。他的手指在鍵盤上輕微移動。幾位年輕的程序員走了進來。
很快,他們達到了一個小的里程碑。桑杰輸入了一個命令來測試進度。他似乎有些疲憊,在測試運行過程中他查看了自己的電子郵件。測試完成之后,他也并沒有在意。
“嘿,”杰夫說。他打了一個響指,然后指向屏幕。雖然談話中充滿了玩笑和俏皮話,但當他和桑杰坐在電腦前時,他還是會變得固執、粗魯,意見也是經常不合。而桑杰則淡然處之,當他認為杰夫速度太快時,他會把手從鍵盤上拿開,攤開手指,好像在說,“停下來”(通常來說,杰夫是加速器,桑杰就是剎車)。這就像他們開始爭論一樣:在一起20年了,他們已經不記得要提高嗓門了。
桑杰滾動著屏幕,讓一段新代碼進入視線。杰夫說:“比如,所有這些都可以變成例行公事,不是嗎?”
桑杰表示同意,“嗯”。
杰夫按壓著指關節,啪啪作響。“似乎可行,我們應該那樣做嗎?”
桑杰顯得很謹慎。“不,我……”
杰夫有些不高興的說:“這樣我們將會忽視一個問題?”
“不,我的意思是,我們只想弄清楚正在發生的事情的類型。然后,我們可以做筆記,對吧?”
杰夫高興地回答說:“好吧。”他的情緒很快變得輕松了,然后他們開始一起做筆記了。
午餐時間快到了。他們工作了兩個小時,中間只休息了10分鐘,大部分時間都在討論。
讓另一名程序員檢查你的代碼,已成為一種標準的開發慣例。但杰夫和桑杰則跳了過這一步,只是敷衍地在他們的日志中輸入了“LGTM”(looks good to me),即“看起來還不錯”。表面上看,他們的工作都是一些微小的事情。但事實上,他們的代碼被用于谷歌整個公司范圍內。有時,杰夫回到家里會告訴自己的女兒:“今天,桑杰和我把谷歌搜索的速度提升了10%。”
2003年,通過MapReduce這款軟件,杰夫和桑杰曾賦予谷歌一次最大規模的升級。這是他們第三次有了重寫谷歌爬蟲和索引器的想法。每一次,他們都解決了一個重要的問題:在分布于許多不同地區的、個別不可靠的計算機上協調工作。推廣他們的解決方案意味著,他們可以避免一次又一次地重溫這個問題。但同時,它也將創造出一種工具,任何谷歌的程序員都可以用它來操縱數據中心里的機器,就好像它們是一臺單一的、行星大小的計算機一樣。
杰夫和桑杰開發的MapReduce對可能非常復雜的程序強加了順序。在MapReduce之前,每個程序員都必須弄清楚如何劃分和分發數據、分配工作,并自己解決硬件故障。而MapReduce則賦予程序員一種結構化的思考這些問題的方式。正如廚師的開工前準備一樣,在組合各種配料之前,要準備好這些配料。
MapReduce要求程序員將他們的任務分成兩個階段。首先,一名編程人員告訴每臺機器如何執行任務的“映射”階段(例如,計算一個單詞在網頁上出現的次數);其次,編寫指令“減少”所有機器的結果(例如,將它們加起來)。MapReduce通過這樣做,隱藏它們,來處理分發的細節。
第二年,杰夫和桑杰根據MapReduce任務重寫了谷歌的爬蟲和索引系統。不久,當其他工程師意識到它的強大時,他們開始使用MapReduce來處理視頻,并在谷歌地圖上渲染內容。MapReduce如此簡潔,以至于新的任務一直不斷地自我提示。谷歌擁有所謂的“日使用曲線”——白天的流量比晚上多——MapReduce任務開始吸收空閑容量。
早期曾有跡象表明,谷歌是一家人工智能內(AI)公司,假扮成一家搜索公司。2001年,與杰夫和桑杰在同一辦公室的諾姆·沙澤(Noam Shazeer),對谷歌從另一家公司授權獲得的拼寫檢查器感到沮喪:因為它總是犯一些令人尷尬的錯誤。例如,用戶明明想輸入“TurboTax”,它總是認為用戶想輸入“turbot ax.”。
拼寫檢查器應該和字典一樣好,沙澤意識到,在互聯網上,谷歌已經訪問到了有史以來最大的字典。于是,他編寫了一個程序,利用網絡上文本的統計特性來確定哪些單詞可能拼錯了。該軟件能分清,“pritany spears”和“brinsley spears”都是指小甜甜布蘭妮(Britney Spears)。
當沙澤在谷歌每周一次的T.G.I.F.大會上演示這個程序時,員工們試圖從中找出一些毛病,但大多數都失敗了。通過與杰夫和另一位工程師喬治·哈里克(Georges Harik)合作,桑杰后來又在網頁廣告中使用了類似的技術。
隨著越來越多的編碼人員使用MapReduce從谷歌的數據中提取各種規律和結論,使得轉錄用戶的語音郵件、回答他們的問題、自動完成他們的查詢,并在一百多種語言之間進行翻譯成為可能。這樣的系統就是使用相對簡單的機器學習算法開發的,但杰夫說,“雖然技術簡單,但只有當你有了大量的數據,才能做得更好。”
隨著“數據、數據和數據“——通過BigTable、MapReduce和后續產品來存儲和處理——變成一項重要的任務之后,谷歌在全球范圍內的基礎設施才變得越來越無縫和靈活。如今,分布式計算已經成為陳舊的概念了,云計算和大數據正在推動谷歌的崛起。
但是,通過讓普通的程序員在編寫分布式程序時更加智能、易于管理,杰夫和桑杰讓谷歌對這類技術的掌握達到了一個新水平。事實上,用戶可能已經感覺到事情已經發生了變化:谷歌云變得越來越智能。
2004年,杰夫和桑杰意識到,大量的數據處理會給天文學家、遺傳學家和其他需要處理大量數據的科學家們帶來大量裨益,他們撰寫了一篇論文《MapReduce:大型集群上的簡化數據處理》,并公開發表。
硬件價格日益低廉、Web服務的普及,以及聯網設備的增加,導致了大量數據的出現,但是沒有幾家公司有相應的軟件來處理這些信息。為此,兩名工程師邁克·卡弗雷拉(Mike Cafarella)和道格·卡亭(Doug Cuting)在意識到了MapReduce的重要性之后,決定從頭開始,對這套系統進行“克隆”。
后來,他們把該項目命名為“Hadoop”,名字的來源就是卡亭兒子的一個棕黃色大象玩具的名字。隨著Hadoop的成熟,如今它已被“財富50強”的一半企業采用,它甚至成為了“大數據”的代名詞。目前,Facebook正在使用“Hadoop MapReduce”來存儲和處理用戶的元數據,包括用戶點擊了什么、喜歡什么,以及觀看了哪些廣告等。
它還一度擁有世界上最大的Hadoop集群,LinkedIn和Netflix也在使用Hadoop MapReduce。此外,美國國家安全局(NSA)前技術總監蘭迪·加勒特(Randy Garrett)還曾向NSA局長基思·亞歷山大(Keith Alexander)演示過該技術。與之前的系統相比,Hadoop在執行分析任務時的速度要快出一萬八千倍。如今,它已成為情報搜集新方式的基礎,一些觀察家將其稱之為“收集一切”。
杰夫天性不安:一旦看到了解決問題的雛形,他對這個問題的興趣就變得不那么濃厚了。2011年,當世界開始擁抱云計算的時候,他開始與斯坦福大學的計算機科學教授吳恩達(Andrew Ng)合作。當時,吳恩達在谷歌領導一個秘密的項目,在一個神經網絡上進行研究。
杰夫在大學時代接觸過神經網絡,但那時候,人們還不能解決一些現實中的問題。吳恩達告訴杰夫,如今這種情況正在發生改變。在斯坦福大學,由于神經網絡能夠訪問到大量數據時,研究人員已經取得了一些令人興奮的結果。考慮到谷歌的規模,吳恩達認為,神經網絡不僅有用,而且是非常強大的。
神經網絡與傳統的計算機程序有著很大的不同。神經網絡的行為不是由編碼人員以通常的方式指定的,相反,它可以利用輸入和反饋來“學習”。自大學畢業后,杰夫的神經網絡知識就沒有多大進步。但隨后,妻子海蒂(Heidi)就發現,他們的浴室中堆滿了相關書籍。
后來,杰夫開始每周花一天的時間來做這個名為“谷歌大腦”(Google Brain)的項目。許多谷歌員工對這項技術表示懷疑,他當時的經理艾倫·尤斯塔斯(Alan Eustace)回憶說:“太浪費人才了。”當時,桑杰也不理解杰夫的舉動,他在心里想:你從事基礎架構工作,跑到那邊干什么?
在接下來7年的時間里,“谷歌大腦”團隊開發了神經網絡,該神經網絡在機器翻譯、語音和圖像識別方面超越了當前技術。最終,他們還取代了谷歌最重要的搜索結果排名和精準廣告算法,“谷歌大腦”也成為公司發展最快的團隊之一。2001年就已入職的谷歌工程師克萊爾·崔(Claire Cui)稱,杰夫的參與代表著谷歌在人工智能領域的一個轉折點:有些人相信它,有些人不相信,而杰夫給出了答案,它是可行的。
人工智能在很大程度上依賴于規模,為此,杰夫又領導開發了TensorFlow,相當于人工智能時代的MapReduce。TensorFlow簡化了在一組計算機上分布神經網絡的任務,將其變成一個大腦。2015年,當TensorFlow面向公眾發布時,就成了人工智能的通用語言。近期,谷歌CEO桑達爾·皮查伊(Sundar Pichai)宣布谷歌是一家“人工智能為先”的公司,并任命杰夫為人工智能戰略負責人。
如今,杰夫每周花4天時間來運營“谷歌大腦”,指揮著3000人的工作。他出差發表演講,每周召開一次會議來研究一種新型計算機芯片(Tensor處理單元,專門為神經網絡設計),并幫助開發AutoML,后者是一套使用神經網絡設計其他神經網絡的系統。除此之外,他每周只能與桑杰溝通一次。
工程業績往往會抹殺自己。如今,我們還記得18世紀偉大的探險家詹姆斯·庫克(James Cook)和喬治·溫哥華(George Vancouve),但已不記得約翰·哈里森(John Harrison)。哈里是一名鐘表匠,發明了航海精密計時器,解決了海上精確定位的問題。
近期,杰夫和桑杰曾在他們經常光顧的一家墨西哥餐廳“Palo Alto Sol”享受美食。杰夫拿出手機問:“Gmail何時誕生?”手機回答說:“2004年4月1日。”對于杰夫不專心享受美食,桑杰似乎并不欣賞,但杰夫本人卻很得意。如今,通過一系列程序的無縫整合,谷歌可以通過說、聽和回答的方式,讓用戶通過手機連接到全球的數據中心。
當前,他們在谷歌的職責各有不同。桑杰目前是一位“個人貢獻者”,一名編程人員,不管理任何人。對此,他感到很滿足。他說:“我不想要杰夫的工作。”目前,他正在開發一款軟件,允許工程師輕松整合和管理十幾款應用程序。如果把谷歌比作一所房子,杰夫是在建造一個附加產品,而桑杰則在支撐結構,加固房梁,擰緊螺絲。
同時,在周一的編程大會上,他們已經啟動了新項目。這是一個人工智能項目,據杰夫稱,要培訓一個巨大的機器學習模型,能夠處理上千、甚至上百個不同的任務。對于該想法,杰夫已經考慮好多年。近期,他認為時機已成熟。他和桑杰想先建立一個原型,然后整個團隊再基于此進一步開發。
杰夫的妻子海蒂說:“我認為他們還是想念著對方。”當合作放緩時,他們就會在星期五一起吃晚餐。
3月份的一個星期日,杰夫和桑杰在庫比蒂諾(Cupertino)郊外有一次會面。當時,天氣晴朗,在陽光的照射下也顯得很熱。杰夫開著一輛藍色的特斯拉Roadster跑車,桑杰開著紅色的Model S。整個早上,桑杰在閱讀,杰夫在踢足球。小腿上的一個設備告訴他,他已經跑了7.1英里。在建立“3月指數”20年后,杰夫像一名退休的耐力運動員,他的皮膚被太陽曬壞了。而桑杰看起來并不顯老。
他們走在一條6英里的環線道路上,穿過一片茂密的森林。杰夫帶路,他們在森林里回憶起谷歌的成長。桑杰會議說,在公司第一次發展壯大的時候,一個水管工在男廁所的一個空間位置上安裝了兩個坐便器。他說:“我記得杰夫當時的評價,兩個總比一個好!“說完就笑了。
杰夫說:“這山要比我想象的陡。”
而桑杰說:“我還想有人會說這是一個很平緩的徒步旅行。”
杰夫接著說:“這可能就是為什么那邊沒有自行車道的原因。”
他們又重新爬回了樹林。在轉彎處,杰夫向樹林之外一瞥,說:“在某個時候,我們要好好看看。”
這條路延伸到山頂上,又高又寬,沒有樹木遮擋,景色盡收眼底。盡管地平線上有一片霧靄,但他們向南仍可以看到圣克魯斯山,向東可以看到Mission Peak公園。杰夫說:“桑杰,那里就是你的辦公室!”他們站在一起,眺望山谷。