深度|兩個程式員的神奇友誼:幫助Google度過重大危機
2018年12月05日01:32

  導語:美國《紐約客》近日發表文章,描述了Google公司內部兩個程式員間的友情故事。桑傑·格瑪沃特(Sanjay Ghemawat)和傑夫·迪恩(Jeff Dean)是Google的高級研究員,他們共同合作,幫助Google在早期解決一場前所未有的危機,後來還在很多項目上有合作。雖然目前他們職責不同,但他們仍然保持著深厚的友誼。

  以下為文章全文:

  2000年三月裡的某一天,Google內最優秀的六位工程師聚集在一間臨時“作戰室”內。公司正面臨一場前所未有的危機。十月,Google的核心繫統停止運行。雖然用戶依然可以在Google網頁上輸入問題進行搜索,但他們獲得的結果其實是五個月之前的了。實際上,該問題的嚴重程度還不止如此。Google的聯合創始人拉里·佩奇(Larry Page)以及謝爾蓋·布林(Sergey Brin)當時正在與雅虎協商談判,計劃為其提供搜索引擎支援,他們承諾提供比其擁有的搜索引擎強大十倍的索引。這樣的索引需要跟上萬維網的發展速度,而後者在之前一年時間內規模增加了一倍。如果他們失敗了,那麼與雅虎的談判有可能功虧一簣,Google也將燒掉所有資金,淡出大眾視野。

  在樓梯旁的會議室里,工程師們把門放在鋸木架上,然後擺好了電腦。二十七歲的克雷格·西爾弗斯坦(Craig Silverstein)體型瘦削,但嗓門洪亮。他就坐在遠處的牆邊。西爾弗斯坦是Google的第一位員工:在他加入Google時,Google的辦公室還設在布林的起居室里,大部分編程他都是自己重寫的。在接連四天四夜的奮戰之後,他和羅馬尼亞的系統工程師博格丹·科考塞爾(Bogdan Cocosel)依然毫無頭緒。“我們所做的分析毫無價值。”西爾弗斯坦回憶道,“所有東西都出問題了,而我們找不到原因。”

  西爾弗斯坦幾乎沒有注意到自己左肩上方桑傑·格瑪沃特(Sanjay Ghemawat)的存在。桑傑是一個沉默寡言的麻省理工畢業生。他眉毛濃密,有著一頭烏黑的頭髮。幾個月之前,桑傑才剛剛加入公司。他是和在Digital Equipment Corporation的同事——31歲的傑夫·迪恩(Jeff Dean)一起跳槽到Google的。傑夫是個精力充沛的人。他比桑傑早十個月離開了D.E.C.。兩人之間非常要好,願意一起寫代碼。在作戰室里,傑夫把他的椅子挪到了桑傑的桌子旁邊。桑傑敲代碼的時候,傑夫就靠在他的背上,像是新聞主持人耳畔叮囑的製片人一樣,糾正桑傑的代碼。

  傑夫和桑傑開始探究索引方面的問題。他們發現有一些詞彙消失了——搜索“郵箱”的話,網頁不會顯示任何結果——而其他一些詞彙則是以亂序出現。幾天內,他們一直忙於尋找代碼中的錯誤,沉浸在邏輯的世界里。他們核查了所有代碼,但並未找到程式錯誤的根源。

  有些時候,程式員會將他們的軟件概念化成一個多層級結構,從頂端的用戶界面往下延伸到基礎層級。為了探究該架構的底部(這也是軟件和硬件的交彙之處),這就需要關注代碼存在所依靠的電以及矽的元素宇宙。在第五天的作戰室里,傑夫和桑傑開始懷疑他們尋找的問題根源並非是出在邏輯上,而是物理層面。他們將亂成一團的索引文件轉變為原始形式:二進製碼。他們希望能看到機器發現的蛛絲馬跡。

  在桑傑的顯示器上,出現了由1和0組成的縱列,每一排都代表著索引詞。桑傑指出:一個本應該是0的數字卻是1。當傑夫和桑傑將所有誤分類的詞集中在一起之後,他們發現了一個規律——每個詞彙都出現了一種相同的小差錯。機器的內存芯片不知怎麼回事似乎被破壞了。

  桑傑看了看傑夫。數月以來,Google內硬件故障的情況越來越多。隨著Google規模的擴大,計算基礎設施也在不斷髮展。計算機硬件鮮少會出現故障,除非使用了過長時間——之後便會一直失靈。電線會老化、硬盤會散架、電腦主板過熱等。許多機器在一開始並非就有用,有一些機器也會莫名其妙得處理速度變緩。陌生環境因素可能也會起到一定影響。當一顆超新星爆炸的時候,衝擊波會帶來高能量粒子,朝著各個方向散射。科學家們認為有一種微弱的可能,部分粒子可能會擊中地球上的計算機芯片,將0變為1。全球最穩固的計算機系統,例如NASA、金融公司等會採用特殊的硬件來預防這種情況。但是Google在當時,運營模式依舊像是一個初創企業,它所購買的計算機缺乏這種特性。這家公司已經到達了一個拐點。其計算集群已經發展到了一個很大的規模,即便是不太可能會發生的硬件故障也是無可避免的。

  傑夫和桑傑聯手寫代碼來彌補機器出現的問題。很快,他們完成了新的索引。作戰室也就此解散了。西爾弗斯坦感到些許困惑。他很善於找到程式問題,而這一步驟的關鍵在於弄清問題的真正原因。

  直到三月代碼出現問題之前,Google系統採用的還是其創始人在斯坦福大學就讀研究生時所寫的代碼。佩奇和布林並非是專業的軟件工程師。他們是在搜索技術領域進行試驗的學者。當他們的網絡爬蟲崩潰時,沒有出現任何診斷信息,只是一句——“Whoa, horsey!”早先的員工查閱了佩奇和布林撰寫的軟件BigFiles。所有重要的索引代碼都需要數天時間才能完成,如果出現問題,那就需要從頭開始。用矽穀的話來說,Google無法“升級”。

  我們會說自己“搜索網頁”,但其實並非如此。我們的搜索引擎來回穿梭在互聯網的索引中——一張地圖。當Google在1996年還被叫作BackRub時,這張地圖小到足以適配佩奇寢室內安裝的計算機。2000年3月還沒有出現龐大的超級計算機來進行處理。Google能做的唯一一點就是購買消費者機器,然後將其連接為一個艦隊。由於Google認為這些計算機的零件都是破爛品,所以他們會去訂購原裝主板和硬盤並將其進行組裝。在加州聖克拉拉的一棟建築物里,Google擁有1500個這種設備,堆起來有六英呎高。由於硬件故障,只有1200個還能用。隨機發生的故障正在不斷破壞系統。為了存活下去,Google必須將其計算機整合成一個無縫連接、有適應能力的整體。

  傑夫和桑傑一同負責這一任務。曾在Apple負責過Macintosh前身的韋恩·羅辛(Wayne Rosing)在2000年11月加入了Google,管理一個數百人的工程團隊。“他們都非常優秀。”他這樣說道。他們能連著每週工作90個小時寫代碼,就為了單個硬盤的故障不會破壞整個系統。他們還在爬蟲過程中增設了檢查站。通過製定新的編碼以及壓縮體系,他們能夠高效增加系統的功率。他們是不知疲倦的優化者。當車輛轉彎時,外面的車輪必須接觸到更多地面。與之類似,旋轉硬盤的外沿也必須比內沿的移動速度要快。Google將頻繁被訪問的數據移到外部,而保持內部空白。傑夫以及桑傑利用此空間來存儲相同搜索詢問中被預先處理過的數據。在2001年的四天內,他們證明了Google的索引可以採用快速隨機存取存儲器,而不必使用相對緩慢的硬盤。這一發現改變了公司的經濟情況。佩奇和布林知道用戶會爭相來使用能立即提供答案的服務。問題在於速度就意味著計算力,而計算力需要資金。傑夫和桑傑用軟件克服了這一困難。

  羅辛在2005年離開之後,艾倫·尤斯塔斯(Alan Eustace)成為了工程團隊的負責人。“矛盾的是,為瞭解決一定規模的問題,你需要掌握最細微的細節。”尤斯塔斯說道。傑夫和桑傑能夠非常確切得掌握計算機的細節信息。傑夫曾經發佈了一份清單,講的是“每一位程式員都應該知道的延遲值”。實際上,幾乎沒有一個程式員知道這些值意味著什麼。這項數字已經深深嵌入在了傑夫和桑傑的大腦中。他們帶頭重新編寫Google核心軟件時,系統的功率成量級增長。即便零件有的老舊或失靈,系統也依然存活了下來。

  兩個高級研究員

  如今,Google的工程師會被分為很多級。第一級就是IT支援人員。第二級是剛出大學的應屆生。第三級則是有碩士學位的畢業生。達到第四級需要幾年時間,或是需要擁有博士學位。大多數人止步於第五級。第六級的工程師——最頂尖的10%——非常厲害,他們可以說是一個項目成功的原因。第七級和第六級的工程師資曆都非常老了。首席工程師也就是第八級,他們通常會負責一個主要產品或基礎架構。傑出工程師為第九級,他們在業內備受尊崇。如果成為了Google研究員,那麼你就是第十級工程師,這是一種終身榮譽。Google研究員在其各自領域都是全球的頂尖專家。傑夫和桑傑就是Google的高級研究員——公司內絕無僅有的兩個第十一級工程師。

  Google的園區就坐落在距離裡山景城市中心幾分鍾車程的公路旁。園區內有一排低矮的建築物。去年夏天的一個週一,在早晨完成編程之後,傑夫和桑傑一起去園區內名為“Big Table”的自助餐廳就餐。該餐廳的名字是以他倆在2015年參與開發的系統來命名的,該系統可以將無數台計算機當作是一個數據庫進行處理。瘦瘦高高的桑傑穿著褐紅色的亨利衫、灰色的褲子,戴著一副線框眼鏡。他看到外邊的一個桌子,很快走過去,用曲柄打開傘,然後坐在陰涼處。他又將太陽下的另一把椅子搬過來。傑夫幾分鍾之後走了過來。

  兩人就像是一對夫妻,各自講述一點過去的事情,就這麼拚湊出了過往的回憶。他們開始回憶起自己早期的項目。

  “我們當時還是手打代碼。”桑傑說道。他的眼鏡在陽光下萌生了一絲陰影。“我們會重新寫代碼,然後就感覺——‘哦,這好像是我們上個月寫過的那個。’”

  “或是和索引數據略微不同。”傑夫補充道。

  “略微不同。這就是我們發現問題的方式。”桑傑說道。

  “這是關鍵。”傑夫說道。

  “這是共有的模式。”桑傑說。

  傑夫咬了一口他買的披薩,他的手指像水手的手指,骨節突出且有些粗糙。而桑傑的手指相比而言更顯纖細。桑傑在想他們是怎麼成為搭檔的。“我有點記不太清楚為什麼我倆做搭檔更好了。”

  “我們在Google之前就一起合作。”傑夫說。

  “但我記不清為什麼我們要在一台電腦上編程,而不是在兩台電腦上工作。”桑傑說。

  “在數字設備公司工作的時候,我經常從我的實驗室走兩個街區到他的實驗室。兩個實驗室中間有一個冰淇淋店。”

  “是冰淇淋店!”桑傑笑道。

  桑傑一直未婚,他會在假期同傑夫、傑夫的妻子海蒂以及他的兩個女兒一起渡假。傑夫的女兒們叫他桑傑叔叔,他們五個人經常在週五共進晚餐。桑傑和傑夫的大女兒會一起做烘焙。“我算是見證了他兩個女兒的成長。”桑傑自豪地說道。在Google2004年首次公開募股之後,他們搬到了僅隔四英里的房子裡。桑傑住在山景城一個三居室房子裡,而傑夫則自己設計了房屋,在地下室里裝了一個蹦床。在設計房屋時,他發現自己雖然喜歡設計空間,但並沒有耐心去完成建築方面“適合桑傑的部分”:橫樑的細節、螺栓以及供電量等等。

  “我不知道為什麼沒有更多的人像我們這樣合作。”桑傑在提及與搭檔一同編程時說道。

  “你需要找到一個搭檔,他的思維方式與你相符,這樣你們兩個人就能夠優勢互補。”傑夫說道。

  他倆將桌子往後移,在餐廳和Google員工中四處溜躂,尋找軟質冰淇淋。傑夫更急於解釋,在他們走動的過程中,他分享了自己軟質冰淇淋的策略。“我負責壓扁。我想擠壓的方法能夠增加穩定性。”他說道。桑傑則為他的甜筒選了巧克力和香草味的混合冰淇淋。

  在社會學家邁克爾·法瑞爾(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》,一家人一同看完才會翻頁。桑傑的弟弟成為了哈佛商學院有史以來最年輕的教職人員,現在則是紐約大學斯特恩分校的教授。

  在麻省理工就讀研究生期間,桑傑認識了一群關係親密的朋友。儘管如此,他卻從不去約會,現在約會的次數也是“屈指可數”。他說自己並不想結婚——他就是這麼想的。朋友在知悉之後決定不再就此事去打擾他,他的父母很早之前就接受自己的兒子將會一直是單身漢的事實。也許他喜歡清靜,在Google時,他就散發著一種神秘的氣息。他雖然沉默寡言,但思想深邃——他是一個能進行深入思考,但思路依舊清晰的人。近二十年來,他一直在自己的桌上放著一堆Mead筆記本,上面滿是乾淨的清單以及示意圖。他喜歡用鋼筆寫草體字。他很少翻閱之前的筆記本,書寫只是為了思考。在麻省理工,他的畢業導師是一位頗具影響力的計算機科學家Barbara Liskov。在她看來,最好的代碼就像是寫作。它需要認真思考結構,每個詞都能物盡其用。編程也需要獲得讀者的共鳴。這就意味著代碼不僅僅只是一種實現目的的手段,而它本身就是一項人工製品。“我覺得桑傑最擅長的就是設計系統。”克雷格·西爾弗斯坦說道,“如果你看過桑傑寫的代碼,你會發現它就和比例完美的雕塑一樣漂亮。”

  在Google,傑夫的知名度要更高一些。員工間會流傳傑夫的表情包等。但在那些瞭解傑夫和桑傑的人看來,桑傑也同樣是一位傑出的人才。“傑夫擅長於想出新電子然後設計原型。”與之共事很久的同事威爾遜·謝(Wilson Hsieh)說道,“桑傑擅長打造一個持久的產品。”在生活中,傑夫性格更外向一些,桑傑則是偏內向。而在編程的世界里,恰恰相反。傑夫的編程令人頭暈目眩——他能很快列出驚人的想法——但是,正因為想法之快,它會將閱讀代碼的人拋在身後。而桑傑的代碼則易於理解。

  西爾弗斯坦表示:“一些人的代碼鬆鬆垮垮。整個屏幕上的信息寥寥無幾。你需要來回翻閱才能弄清楚。”還有一些人寫的代碼非常密集:“你仔細閱讀之後,就會心想——我並不想閱讀這樣的內容。桑傑卻能夠在兩者之間取得更好的平衡。看他的代碼,你的感覺就是——‘好的,我可以明白’,但你依然能發現這一頁上有很多內容。每當我想要在桑傑的代碼上添加新功能時,似乎這些功能早就設計好了。我感覺自己像是Salieri,我能理解它的偉大,但我不明白這究竟是怎樣做到的。”

  職責不同,但友誼長存

  今年春天,某個週一的早晨,傑夫和桑傑站在Google人工智能部門的小廚房內。在他們身後,一塊白板上寫滿了矩陣代數。桌上的紙上都是一些無人監管的對抗網絡。傑夫穿著一件褪色的T恤和牛仔褲,看上去像是一個在海灘消遣的人,而桑傑則穿著毛衣和灰色褲子。明亮的窗戶外是一顆高高矗立的鬆樹,再往外則是一塊田地。不論何時,傑夫在Google工作的地方總有製作卡布奇諾的咖啡機。“我們快遲到了。”桑傑在咖啡機旁說道。已經是八點三十二分了。

  在喝完咖啡之後,他們就走向自己的電腦。傑夫從他的桌子那邊將椅子移到桑傑的桌子旁。傑夫的桌子上一團亂,反觀桑傑的桌子卻是整潔無暇。傑夫將一隻腳搭在文件櫃上,背靠椅子,而桑傑則在看著面前的屏幕。他們面前共有四個窗口,左邊是一個網頁瀏覽器和一個終端,主要用於運行分析工具。右邊,文本編輯器Emacs中有兩個文檔,一個是待辦事項和筆記,另一個文檔則是五顏六色的代碼。桑傑的筆記本就放在計算機旁邊。

  “好了,我們做些什麼?”桑傑問道。

  “我想我們應該看看TensorFlow Lite的代碼規模。”傑夫說道。

  這是一個關於機器學習的新型軟件項目,傑夫和桑傑擔心項目有些“臃腫”。就像是書本編輯一樣,他們在尋找可以削減的地方。針對這項任務他們開發了一個新的工具可以自行進行優化。

  “我想的是弄清楚速度有多慢。”桑傑說道。

  “已經非常慢了。”傑夫說道,他往後靠了靠,神態輕鬆。

  “這個是120個千字節。”桑傑說道,“大概是八秒左右吧。”

  “12000個函數調用堆棧。”傑夫說道,“而不是千字節。”

  “額,文本千字節。”桑傑說道。

  “好吧,我的錯。”傑夫說。

  “我不太清楚我們應該挑選什麼樣的單元大小。”桑傑說,“一半兆位?”

  “看上去不錯。”傑夫說。桑傑開始輸入代碼,傑夫的目光則放在了屏幕上。“你剛才是說,如果這比我們抽樣的結果要大……”剩下一半話他還沒說完,桑傑就用代碼回答了他的問題。

  當桑傑工作的時候,他會聚精會神。他會將雙腳岔開到肩寬,似乎這就是他工作的姿勢。他的手指在鍵盤上輕微移動。幾位年輕的程式員走了進來。

  很快,他們達到了一個小的里程碑。桑傑輸入了一個命令來測試進度。他似乎有些疲憊,在測試運行過程中他查看了自己的電子郵件。測試完成之後,他也並沒有在意。

  “嘿,”傑夫說。他打了一個響指,然後指向屏幕。雖然談話中充滿了玩笑和俏皮話,但當他和桑傑坐在電腦前時,他還是會變得固執、粗魯,意見也是經常不合。而桑傑則淡然處之,當他認為傑夫速度太快時,他會把手從鍵盤上拿開,攤開手指,好像在說,“停下來”(通常來說,傑夫是加速器,桑傑就是刹車)。這就像他們開始爭論一樣:在一起20年了,他們已經不記得要提高嗓門了。

  桑傑滾動著屏幕,讓一段新代碼進入視線。傑夫說:“比如,所有這些都可以變成例行公事,不是嗎?”

  桑傑表示同意,“嗯”。

  傑夫按壓著指關節,啪啪作響。“似乎可行,我們應該那樣做嗎?”

  桑傑顯得很謹慎。“不,我……”

  傑夫有些不高興的說:“這樣我們將會忽視一個問題?”

  “不,我的意思是,我們只想弄清楚正在發生的事情的類型。然後,我們可以做筆記,對吧?”

  傑夫高興地回答說:“好吧。”他的情緒很快變得輕鬆了,然後他們開始一起做筆記了。

  午餐時間快到了。他們工作了兩個小時,中間只休息了10分鍾,大部分時間都在討論。

  讓另一名程式員檢查你的代碼,已成為一種標準的開發慣例。但傑夫和桑傑則跳了過這一步,只是敷衍地在他們的日誌中輸入了“LGTM”(looks good to me),即“看起來還不錯”。表面上看,他們的工作都是一些微小的事情。但事實上,他們的代碼被用於Google整個公司範圍內。有時,傑夫回到家裡會告訴自己的女兒:“今天,桑傑和我把Google搜索的速度提升了10%。”

  2003年,通過MapReduce這款軟件,傑夫和桑傑曾賦予Google一次最大規模的升級。這是他們第三次有了重寫Google爬蟲和索引器的想法。每一次,他們都解決了一個重要的問題:在分佈於許多不同地區的、個別不可靠的計算機上協調工作。推廣他們的解決方案意味著,他們可以避免一次又一次地重溫這個問題。但同時,它也將創造出一種工具,任何Google的程式員都可以用它來操縱數據中心裡的機器,就好像它們是一台單一的、行星大小的計算機一樣。

  傑夫和桑傑開發的MapReduce對可能非常複雜的程式強加了順序。在MapReduce之前,每個程式員都必須弄清楚如何劃分和分發數據、分配工作,並自己解決硬件故障。而MapReduce則賦予程式員一種結構化的思考這些問題的方式。正如廚師的開工前準備一樣,在組合各種配料之前,要準備好這些配料。

  MapReduce要求程式員將他們的任務分成兩個階段。首先,一名編程人員告訴每台機器如何執行任務的“映射”階段(例如,計算一個單詞在網頁上出現的次數);其次,編寫指令“減少”所有機器的結果(例如,將它們加起來)。MapReduce通過這樣做,隱藏它們,來處理分發的細節。

  第二年,傑夫和桑傑根據MapReduce任務重寫了Google的爬蟲和索引系統。不久,當其他工程師意識到它的強大時,他們開始使用MapReduce來處理視頻,並在Google地圖上渲染內容。MapReduce如此簡潔,以至於新的任務一直不斷地自我提示。Google擁有所謂的“日使用曲線”——白天的流量比晚上多——MapReduce任務開始吸收空閑容量。

  早期曾有跡象表明,Google是一家人工智能內(AI)公司,假扮成一家搜索公司。2001年,與傑夫和桑傑在同一辦公室的諾姆·沙澤(Noam Shazeer),對Google從另一家公司授權獲得的拚寫檢查器感到沮喪:因為它總是犯一些令人尷尬的錯誤。例如,用戶明明想輸入“TurboTax”,它總是認為用戶想輸入“turbot ax.”。

  拚寫檢查器應該和字典一樣好,沙澤意識到,在互聯網上,Google已經訪問到了有史以來最大的字典。於是,他編寫了一個程式,利用網絡上文本的統計特性來確定哪些單詞可能拚錯了。該軟件能分清,“pritany spears”和“brinsley spears”都是指小甜甜Britney(Britney Spears)。

  當沙澤在Google每週一次的T.G.I.F.大會上演示這個程式時,員工們試圖從中找出一些毛病,但大多數都失敗了。通過與傑夫和另一位工程師喬治·哈里克(Georges Harik)合作,桑傑後來又在網頁廣告中使用了類似的技術。

  隨著越來越多的編碼人員使用MapReduce從Google的數據中提取各種規律和結論,使得轉錄用戶的語音郵件、回答他們的問題、自動完成他們的查詢,並在一百多種語言之間進行翻譯成為可能。這樣的系統就是使用相對簡單的機器學習算法開發的,但傑夫說,“雖然技術簡單,但只有當你有了大量的數據,才能做得更好。”

  隨著“數據、數據和數據“——通過BigTable、MapReduce和後續產品來存儲和處理——變成一項重要的任務之後,Google在全球範圍內的基礎設施才變得越來越無縫和靈活。如今,分佈式計算已經成為陳舊的概念了,雲計算和大數據正在推動Google的崛起。

  但是,通過讓普通的程式員在編寫分佈式程式時更加智能、易於管理,傑夫和桑傑讓Google對這類技術的掌握達到了一個新水平。事實上,用戶可能已經感覺到事情已經發生了變化:Google雲變得越來越智能。

  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)合作。當時,吳恩達在Google領導一個秘密的項目,在一個神經網絡上進行研究。

  傑夫在大學時代接觸過神經網絡,但那時候,人們還不能解決一些現實中的問題。吳恩達告訴傑夫,如今這種情況正在發生改變。在斯坦福大學,由於神經網絡能夠訪問到大量數據時,研究人員已經取得了一些令人興奮的結果。考慮到Google的規模,吳恩達認為,神經網絡不僅有用,而且是非常強大的。

  神經網絡與傳統的計算機程式有著很大的不同。神經網絡的行為不是由編碼人員以通常的方式指定的,相反,它可以利用輸入和反饋來“學習”。自大學畢業後,傑夫的神經網絡知識就沒有多大進步。但隨後,妻子海蒂(Heidi)就發現,他們的浴室中堆滿了相關書籍。

  後來,傑夫開始每週花一天的時間來做這個名為“Google大腦”(Google Brain)的項目。許多Google員工對這項技術表示懷疑,他當時的經理艾倫·尤斯塔斯(Alan Eustace)回憶說:“太浪費人才了。”當時,桑傑也不理解傑夫的舉動,他在心裡想:你從事基礎架構工作,跑到那邊幹什麼?

  在接下來7年的時間里,“Google大腦”團隊開發了神經網絡,該神經網絡在機器翻譯、語音和圖像識別方面超越了當前技術。最終,他們還取代了Google最重要的搜索結果排名和精準廣告算法,“Google大腦”也成為公司發展最快的團隊之一。2001年就已入職的Google工程師克萊爾·崔(Claire Cui)稱,傑夫的參與代表著Google在人工智能領域的一個轉折點:有些人相信它,有些人不相信,而傑夫給出了答案,它是可行的。

  人工智能在很大程度上依賴於規模,為此,傑夫又領導開發了TensorFlow,相當於人工智能時代的MapReduce。TensorFlow簡化了在一組計算機上分佈神經網絡的任務,將其變成一個大腦。2015年,當TensorFlow面向公眾發佈時,就成了人工智能的通用語言。近期,GoogleCEO桑達爾·皮查伊(Sundar Pichai)宣佈Google是一家“人工智能為先”的公司,並任命傑夫為人工智能戰略負責人。

  如今,傑夫每週花4天時間來運營“Google大腦”,指揮著3000人的工作。他出差發表演講,每週召開一次會議來研究一種新型計算機芯片(Tensor處理單元,專門為神經網絡設計),並幫助開發AutoML,後者是一套使用神經網絡設計其他神經網絡的系統。除此之外,他每週只能與桑傑溝通一次。

  工程業績往往會抹殺自己。如今,我們還記得18世紀偉大的探險家詹姆斯·庫克(James Cook)和喬治·溫哥華(George Vancouve),但已不記得約翰·哈里森(John Harrison)。哈里是一名鍾表匠,發明了航海精密計時器,解決了海上精確定位的問題。

  近期,傑夫和桑傑曾在他們經常光顧的一家墨西哥餐廳“Palo Alto Sol”享受美食。傑夫拿出手機問:“Gmail何時誕生?”手機回答說:“2004年4月1日。”對於傑夫不專心享受美食,桑傑似乎並不欣賞,但傑夫本人卻很得意。如今,通過一系列程式的無縫整合,Google可以通過說、聽和回答的方式,讓用戶通過手機連接到全球的數據中心。

  當前,他們在Google的職責各有不同。桑傑目前是一位“個人貢獻者”,一名編程人員,不管理任何人。對此,他感到很滿足。他說:“我不想要傑夫的工作。”目前,他正在開發一款軟件,允許工程師輕鬆整合和管理十幾款應用程式。如果把Google比作一所房子,傑夫是在建造一個附加產品,而桑傑則在支撐結構,加固房梁,擰緊螺絲。

  同時,在週一的編程大會上,他們已經啟動了新項目。這是一個人工智能項目,據傑夫稱,要培訓一個巨大的機器學習模型,能夠處理上千、甚至上百個不同的任務。對於該想法,傑夫已經考慮好多年。近期,他認為時機已成熟。他和桑傑想先建立一個原型,然後整個團隊再基於此進一步開發。

  傑夫的妻子海蒂說:“我認為他們還是想唸著對方。”當合作放緩時,他們就會在星期五一起吃晚餐。

  3月份的一個星期日,傑夫和桑傑在庫比蒂諾(Cupertino)郊外有一次會面。當時,天氣晴朗,在陽光的照射下也顯得很熱。傑夫開著一輛藍色的TeslaRoadster跑車,桑傑開著紅色的Model S。整個早上,桑傑在閱讀,傑夫在踢足球。小腿上的一個設備告訴他,他已經跑了7.1英里。在建立“3月指數”20年後,傑夫像一名退休的耐力運動員,他的皮膚被太陽曬壞了。而桑傑看起來並不顯老。

  他們走在一條6英里的環線道路上,穿過一片茂密的森林。傑夫帶路,他們在森林里回憶起Google的成長。桑傑會議說,在公司第一次發展壯大的時候,一個水管工在男廁所的一個空間位置上安裝了兩個坐便器。他說:“我記得傑夫當時的評價,兩個總比一個好!“說完就笑了。

  傑夫說:“這山要比我想像的陡。”

  而桑傑說:“我還想有人會說這是一個很平緩的徒步旅行。”

  傑夫接著說:“這可能就是為什麼那邊沒有自行車道的原因。”

  他們又重新爬回了樹林。在轉彎處,傑夫向樹林之外一瞥,說:“在某個時候,我們要好好看看。”

  這條路延伸到山頂上,又高又寬,沒有樹木遮擋,景色盡收眼底。儘管地平線上有一片霧靄,但他們向南仍可以看到聖克魯斯山,向東可以看到Mission Peak公園。傑夫說:“桑傑,那裡就是你的辦公室!”他們站在一起,眺望山穀。(堆堆 李明)

關注我們Facebook專頁
    相關新聞
      更多瀏覽