《紐約客》特寫Jeff Dean與Sanjay:谷歌唯二11級工程師,同一臺電腦上寫程式碼
作者:《紐約客》 James Somers
翻譯:新浪科技 堆堆、李明
量子位 經授權轉載 | 公眾號 QbitAI
最近,《紐約客》雜誌寫了一篇長文,描述谷歌唯二11級工程師傑夫·迪恩(Jeff Dean)和桑傑·格瑪沃特(Sanjay Ghemawat)之間的深厚友情。
2000年,他們兩人就靠一起分析二進位制機器程式碼,解決了一場谷歌前所未遇的大危機。後來,他們還又合作多次重構谷歌搜尋引擎核心演算法,開發了MapReduce,把全球各處的谷歌伺服器整合成了“一臺行星那麼大的計算機”。
他們性格迥異,也有著獨特的合作方式:桑傑寫程式碼,傑夫在一旁點評提意見,就像駕駛員和副駕駛。
以下為文章全文,由新浪科技翻譯,量子位經授權轉載,稍作編輯:
2000年三月裡的某一天,谷歌內最優秀的六位工程師聚集在一間臨時“作戰室”內。公司正面臨一場前所未有的危機。
前一年十月,谷歌的負責爬取網頁內容並做索引的核心系統已經停止執行。所以當時,雖然使用者依然可以在谷歌網頁上輸入問題進行搜尋,但他們獲得的結果其實是五個月之前的了。
實際上,該問題的嚴重程度還不止如此。谷歌的聯合創始人拉里·佩奇(Larry Page)以及謝爾蓋·布林(Sergey Brin)當時正在與雅虎協商談判,計劃為其提供搜尋引擎支援,他們承諾提供比其擁有的搜尋引擎強大十倍的索引。這樣的索引需要跟上全球資訊網的發展速度,而後者在之前一年時間內規模增加了一倍。
如果他們失敗了,那麼與雅虎的談判有可能功虧一簣,谷歌也將燒掉所有資金,淡出大眾視野。
在樓梯旁的會議室裡,工程師們把門板放在鋸木架上,然後擺好了電腦。二十七歲的克雷格·西爾弗斯坦(Craig Silverstein)體型瘦削,嗓門洪亮。他就坐在遠處的牆邊。西爾弗斯坦是谷歌的第一位員工:在他加入谷歌時,谷歌的辦公室還設在布林的起居室裡,大部分程式設計都是他自己重寫的。
在接連四天四夜的奮戰之後,他和羅馬尼亞的系統工程師博格丹·科考塞爾(Bogdan Cocosel)依然毫無頭緒。“我們所做的分析毫無價值。”西爾弗斯坦回憶道,“所有東西都出問題了,而我們找不到原因。”
西爾弗斯坦幾乎沒有注意到自己左肩上方桑傑·格瑪沃特(Sanjay Ghemawat)的存在。桑傑是一個沉默寡言的麻省理工畢業生。他眉毛濃密,有著一頭烏黑的頭髮。
幾個月之前,桑傑才剛剛加入公司。他是和Digital Equipment Corporation(DEC)的同事——31歲的傑夫·迪恩(Jeff Dean)一起跳槽到谷歌的。傑夫又高又瘦,精力充沛,他比桑傑早十個月離開了DEC。兩人之間非常要好,願意合寫程式碼。
在作戰室裡,傑夫把他的椅子挪到了桑傑的桌子旁邊。桑傑敲程式碼的時候,傑夫就湊到他旁邊,像是新聞主持人耳畔叮囑的製片人一樣,糾正桑傑的程式碼。
傑夫和桑傑開始研究索引方面的問題。他們發現有一些詞消失了——搜尋“郵箱”的話,網頁不會顯示任何結果——而其他一些詞彙則是以亂序出現。幾天內,他們一直忙於尋找程式碼中的錯誤,沉浸在邏輯的世界裡。
他們核查了所有程式碼,但並未找到程式錯誤的根源。
有些時候,程式設計師會將他們的軟體概念化成一個多層級結構,從頂端的使用者介面往下延伸到基礎層級。為了探究該架構的底部(這也是軟體和硬體的交匯之處),這就需要關注程式碼存在所依靠的電力宇宙以及承載它的矽片。
作戰室第五天,傑夫和桑傑開始懷疑他們尋找的問題根源並非出在邏輯上,而是物理層面。他們將亂成一團的索引檔案轉為原始形式:二進位制碼。
他們要看到機器所看到的東西。
在桑傑的顯示器上,出現了由1和0組成的縱列,每一排都代表著索引詞。桑傑指出:一個本應該是0的數字卻是1。當傑夫和桑傑將所有誤分類的詞集中在一起之後,他們發現了一個規律——每個詞彙都出現了一種相同的小差錯。
機器的記憶體晶片不知怎麼回事似乎被破壞了。
桑傑看了看傑夫。
數月以來,谷歌內硬體故障的情況越來越多。隨著谷歌規模的擴大,計算基礎設施也在不斷髮展。計算機硬體鮮少會出現故障,除非你堆了太多——之後便會一直失靈。電線會老化、硬碟會散架、電腦主機板過熱等。許多機器在一開始就不能用,有一些機器也會莫名其妙地處理速度變緩。
陌生環境因素可能也會起到一定影響。當一顆超新星爆炸的時候,衝擊波會帶來高能量粒子,朝著各個方向散射。科學家們認為有一種微弱的可能,部分粒子可能會擊中地球上的計算機晶片,將0變為1。全球最穩固的計算機系統,例如NASA、金融公司等會採用特殊的硬體來預防這種情況。
但是谷歌在當時,運營模式依舊像是一個初創企業,它所購買的計算機缺乏這種特性。
這家公司已經到達了一個拐點。其計算叢集已經發展到了一個很大的規模,即便是不太可能會發生的硬體故障也是無可避免的。
傑夫和桑傑聯手寫程式碼來彌補機器出現的問題。很快,他們完成了新的索引,作戰室也就此解散了。西爾弗斯坦感到些許困惑,他很擅長找bug,這一工作的關鍵在於深入程式碼底層。傑夫和桑傑探索得更加深入。
直到三月的索引崩潰事件之前,谷歌系統採用的還是其創始人在史丹佛大學讀研時所寫的程式碼。
佩奇和布林並非專業的軟體工程師。他們是在搜尋技術領域進行試驗的學者。當他們的網路爬蟲崩潰時,沒有任何診斷資訊,只是一句——“Whoa, horsey!”佩奇和布林寫過一個名叫“BigFiles”的軟體,被谷歌早期員工稱為“BugFiles”。
他們重要的索引程式碼都需要數天時間才能執行完,如果出現問題,還需要從頭開始。用矽谷的話來說,谷歌無法“規模化”。
我們會說自己“搜尋網頁”,但其實並非如此。我們的搜尋引擎來回穿梭在網際網路的索引,就像一張地圖。
當谷歌在1996年還被叫作BackRub時,這張地圖小到足以適配佩奇寢室內安裝的計算機。到2000年3月,它已經龐大到當時沒有超級計算機能處理得了。
谷歌能做的唯一一點就是購買消費級機型,然後將其連線為一個艦隊。由於谷歌認為這些計算機一半價錢都用在了破爛上,所以他們會去訂購主機板和硬碟,自己組裝。
在加州聖克拉拉的一棟建築物裡,谷歌擁有1500個這種裝置,堆起來有六英尺高。由於硬體故障,只有1200個還能用。隨機發生的故障正在不斷破壞系統。為了存活下去,谷歌必須將其計算機整合成一個無縫連線、有適應能力的整體。
傑夫和桑傑一同負責這一任務。
曾在蘋果負責過Macintosh前身的韋恩·羅辛(Wayne Rosing)在2000年11月加入了谷歌,管理一個數百人的工程團隊。“他們都非常優秀。”他這樣說道。
他們連著每週工作90個小時寫程式碼,就為了單個硬碟的故障不會破壞整個系統。他們還在爬蟲過程中增設了檢查點,讓它出問題時能從中間開始重新執行。通過制定新的編碼以及壓縮體系,他們能夠高效增加系統的功率。他們是不知疲倦的優化者。
當車輛轉彎時,外面的車輪必須接觸到更多地面。與之類似,旋轉硬碟的外沿也必須比內沿的移動速度要快。谷歌將頻繁被訪問的資料移到外部,而保持內部空白。傑夫以及桑傑利用此空間來儲存常見搜尋查詢中被預先處理過的資料。
在2001年的四天內,他們證明了谷歌的索引可以採用快速隨機存取儲存器(RAM),而不必使用相對緩慢的硬碟。這一發現改變了公司的經濟情況。
佩奇和布林知道,使用者會爭相來使用能立即提供答案的服務。問題在於速度就意味著計算力,而計算力需要資金。傑夫和桑傑用軟體克服了這一困難。
羅辛在2005年離開之後,艾倫·尤斯塔斯(Alan Eustace)成為了工程團隊的負責人。“矛盾的是,為了解決一定規模的問題,你需要掌握最細微的細節。”尤斯塔斯說道。傑夫和桑傑能夠非常確切得掌握計算機的細節資訊。
傑夫曾經發布了一份清單,講的是“每一位程式設計師都應該知道的延遲值”。實際上,幾乎沒有一個程式設計師知道這些值意味著什麼:比如呼叫L1快取需要半納秒,順序讀取1MB資料需要250微秒。這些數字已經深深嵌入在了傑夫和桑傑的大腦中。他們帶頭重新編寫谷歌核心軟體時,系統的功率成量級增長。即便零件有的老舊或失靈,系統也依然存活了下來。
如今,谷歌的工程師會被分為很多級。
第一級就是IT支援人員,第二級是剛出大學的應屆生,第三級則是有碩士學位的畢業生。達到第四級需要幾年時間,或是需要擁有博士學位。大多數人止步於第五級。第六級的工程師——最頂尖的10%——非常厲害,他們可以說是一個專案成功的原因。第七級和第六級的工程師資歷都非常老了,首席工程師也就是第八級,他們通常會負責一個主要產品或基礎架構。傑出工程師為第九級,他們在業內備受尊崇。如果成為了谷歌研究員,那麼你就是十級工程師,這是一種終身榮譽。谷歌研究員在其各自領域都是全球的頂尖專家。
傑夫和桑傑就是谷歌的高階研究員——公司內絕無僅有的兩個十一級工程師。
谷歌的園區就坐落在距離裡山景城市中心幾分鐘車程的公路旁。園區內有一排低矮的建築物。
去年夏天的一個週一,早晨完成程式設計之後,傑夫和桑傑一起去園區內名為“Big Table”的自助餐廳就餐。該餐廳的名字是以他倆在2015年參與開發的系統來命名的,該系統可以將無數臺計算機當作是一個資料庫進行處理。
瘦瘦高高的桑傑穿著褐紅色的亨利衫、灰色的褲子,戴著一副線框眼鏡。他看到外邊的一個桌子,很快走過去,開啟傘,然後坐在陰涼處。他又將太陽下的另一把椅子搬過來。傑夫幾分鐘之後走了過來。
兩人就像是一對夫妻,各自講述一點過去的事情,就這麼拼湊出了過往的回憶。他們開始回憶起自己早期的專案。
“我們當時還是手打程式碼。”桑傑說道。他的眼鏡在陽光下萌生了一絲陰影。“我們會重新寫程式碼,然後就感覺——‘哦,這好像是我們上個月寫過的那個。’”
“或是索引資料略微不同。”傑夫補充道。
“略微不同。這就是我們發現問題的方式。”桑傑說道。
“這是關鍵。”傑夫說道。
“這是共有的模式。”桑傑說。
傑夫咬了一口他買的披薩,他的手指像水手的手指,骨節突出且有些粗糙。而桑傑的手指相比而言更顯纖細。桑傑在想他們是怎麼成為搭檔的。“我有點記不太清楚為什麼覺得我倆做搭檔更好了。”
“我們在谷歌之前就一起合作。”傑夫說。
“但我記不清為什麼我們要在一臺電腦上程式設計,而不是在兩臺電腦上工作。”桑傑說。
傑夫說:“在DEC工作的時候,我經常從我的實驗室走兩個街區到他的實驗室。兩個實驗室中間有一個冰淇淋店。”
“是冰淇淋店!”桑傑笑道。
桑傑一直未婚,他會在假期同傑夫、傑夫的妻子海蒂以及他的兩個女兒一起度假。傑夫的女兒們叫他桑傑叔叔,他們五個人經常在週五共進晚餐。桑傑和傑夫的大女兒會一起做烘焙。“我算是見證了他兩個女兒的成長。”桑傑自豪地說道。
在谷歌2004年IPO之後,他們搬到了僅隔四英里的房子裡。桑傑住在山景城一個三居室房子裡,而傑夫則自己設計了房屋,在地下室裡裝了一個蹦床。在設計房屋時,他發現自己雖然喜歡設計空間,但並沒有耐心去完成建築方面“適合桑傑的部分”:橫樑的細節、螺栓以及供電量等等。
“我不知道為什麼沒有更多的人像我們這樣合作。”桑傑在提及與搭檔一同程式設計時說道。
“你需要找到一個搭檔,他的思維方式與你相容,這樣你們兩個人就能夠優勢互補。”傑夫說道。
他倆將桌子往後移,在餐廳和谷歌員工中四處溜達,尋找軟質冰淇淋。傑夫更急於解釋,在他們走動的過程中,他分享了自己軟質冰淇淋的策略。“我負責壓。我想擠壓的方法能夠增加穩定性。”他說道。桑傑則為他的甜筒選了巧克力和香草味的混合冰淇淋。
在社會學家邁克爾·法瑞爾(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的資料收集程式。之後,該程式成為了流行病學家野外工作的標配工具,最終,它以十多種語言被複制發行了數十萬份。
△ 傑夫高中畢業時的照片,至今還掛在美國疾病預防控制中心維護的Epi Info網站上
傑夫的博士研究方向是編譯器,這種軟體可以將人類寫的程式碼轉化針對計算機優化的機器語言指令。“就有趣程度來說,編譯軟體要多無聊有多無聊。”Alan Eustace說道,但另一方面它又能讓你“非常接近機器”。
桑傑一邊用食指揉著太陽穴,一邊形容著傑夫,“當你在編寫程式碼時,他的腦海裡就能有一個模型。”他說道,“這些程式碼的效能會怎麼樣?他會半自動得思考所有極端情況。”
桑傑是17歲去康奈爾唸書時才第一次接觸電腦。他1966年出生在印第安納州西拉斐特,但在一個位於印度北部的工業城市長大。他的父親Mahipal是一位植物學教授,他的母親Shanta則在家照顧桑傑以及另外兩個兄妹。他們一家人都喜愛讀書,桑傑的哥哥成為了哈佛商學院有史以來最年輕的終身教職人員,現在則是紐約大學斯特恩商學院教授。
在MIT讀研究生期間,桑傑認識了一群關係親密的朋友。儘管如此,他卻從不去約會,現在約會的次數也是“屈指可數”。他說自己並不想結婚——他就是這麼想的。朋友在知悉之後決定不再就此事去打擾他,他的父母很早之前就接受了自己的兒子將會一直是單身漢的事實。
也許他喜歡清靜,在谷歌時,他就散發著一種神祕的氣息。
他雖然沉默寡言,但思想深邃——他是一個能進行深入思考,但思路依舊清晰的人。近二十年來,他一直在自己的桌上放著一堆Mead筆記本,上面滿是乾淨的清單以及示意圖。他喜歡用鋼筆寫草體字。他很少翻閱之前的筆記本,書寫只是為了思考。
在麻省理工,他的畢業導師是一位頗具影響力的電腦科學家Barbara Liskov。在她看來,最好的程式碼就像是寫作。它需要認真思考結構,每個詞都能物盡其用。程式設計也需要獲得讀者的共鳴。這就意味著程式碼不僅僅只是一種實現目的的手段,而它本身就是一項人工製品。
“我覺得桑傑最擅長的就是設計系統。”克雷格·西爾弗斯坦說道,“如果你看過桑傑寫的程式碼,你會發現它就和比例完美的雕塑一樣漂亮。”
在谷歌,傑夫的知名度要更高一些。員工間會流傳傑夫的傳說。但在那些瞭解傑夫和桑傑的人看來,桑傑也同樣是一位傑出的人才。
“傑夫擅長於想出新點子然後設計原型。”與他們共事很久的同事威爾遜·謝(Wilson Hsieh)說道,“桑傑擅長打造一個持久的產品。”
在生活中,傑夫性格更外向一些,桑傑則是偏內向。而在程式設計的世界裡,恰恰相反。傑夫的程式設計令人頭暈目眩——他能很快列出驚人的想法——但是,正因為想法之快,它會將閱讀程式碼的人拋在身後。而桑傑的程式碼則易於理解。
西爾弗斯坦表示:“一些人的程式碼鬆鬆垮垮。整個螢幕上的資訊寥寥無幾。你需要來回翻閱才能弄清楚。”還有一些人寫的程式碼非常密集:“你仔細閱讀之後,就會心想——我並不想閱讀這樣的內容。桑傑卻能夠在兩者之間取得更好的平衡。看他的程式碼,你的感覺就是——‘好的,我可以明白’,但你依然能發現這一頁上有很多內容。每當我想要在桑傑的程式碼上新增新功能時,似乎這些功能早就設計好了。我感覺自己像是Salieri,我能理解它的偉大,但我不明白這究竟是怎樣做到的。”
今年春天,某個週一的早晨,傑夫和桑傑站在谷歌人工智慧部門的小廚房內。在他們身後,一塊白板上寫滿了矩陣代數。桌上放著一份無監督對抗網路論文。
傑夫穿著一件褪色的T恤和牛仔褲,看上去像是一個在海灘消遣的人,而桑傑則穿著毛衣和灰色褲子。明亮的窗戶外是一棵高高矗立的松樹,再往外則是一塊田地。不論何時,傑夫在谷歌工作的地方總有意式咖啡機。
“我們快遲到了。”桑傑在咖啡機旁說道。已經是八點三十二分了。
喝完咖啡,他們就走向自己的電腦。傑夫從他的桌子那邊將椅子移到桑傑的桌子旁。
傑夫的桌子上一團亂,反觀桑傑的桌子卻是整潔無暇。傑夫將一隻腳搭在檔案櫃上,背靠椅子,而桑傑則在看著面前的螢幕。
他們面前共有四個視窗,左邊是一個網頁瀏覽器和一個終端,主要用於執行分析工具。右邊,文字編輯器Emacs中有兩個文件,一個是待辦事項和筆記,另一個文件則是五顏六色的程式碼。桑傑的一本筆記就放在計算機旁邊。
“好了,我們做些什麼?”桑傑問道。
“我想我們應該看看TensorFlow Lite的程式碼規模。”傑夫說道。
這是一個關於機器學習的新型軟體專案,傑夫和桑傑擔心專案有些“臃腫”。就像是書本編輯一樣,他們在尋找可以削減的地方。
“我想的是弄清楚速度有多慢。”桑傑說道。
“已經非常慢了。”傑夫說道,他往後靠了靠,神態輕鬆。
“這個是120kb。”桑傑說道,“大概是八秒左右吧。”
“12000個函式呼叫堆疊。”傑夫說道,“而不是kb。”
“額,kb的文字。”桑傑說道。
“好吧,我的錯。”傑夫說。
“我不太清楚我們應該挑選什麼樣的單元大小。”桑傑說,“半兆?”
“看上去不錯。”傑夫說。桑傑開始輸入程式碼,傑夫的目光則放在了螢幕上。“你剛才是說,如果這比我們抽樣的結果要大……”剩下一半話他還沒說完,桑傑就用程式碼回答了他的問題。
當桑傑工作的時候,他會聚精會神。他會將雙腳岔開到肩寬,似乎這就是他工作的姿勢。他的手指在鍵盤上輕微移動。幾位年輕的程式設計師加入進來。
很快,他們達到了一個小的里程碑。桑傑輸入了一個命令來測試進度。他似乎有些疲憊,在測試執行過程中他檢視了自己的電子郵件。測試完成之後,他也並沒有在意。
“嘿,”傑夫說。他打了一個響指,然後指向螢幕。
雖然談話中充滿了玩笑和俏皮話,但當他和桑傑坐在電腦前時,他還是會變得固執、粗魯,意見也是經常不合。而桑傑則淡然處之,當他認為傑夫速度太快時,他會把手從鍵盤上拿開,攤開手指,好像在說,“停下來”(通常來說,傑夫是加速器,桑傑就是剎車)。這就是他們在爭論了:在一起20年了,他們已經不記得要提高嗓門了。
桑傑滾動著螢幕,讓一段新程式碼進入視線。傑夫說:“比如,所有這些都可以變成例行程式,不是嗎?”
桑傑表示同意,“嗯”。
傑夫按壓著指關節,啪啪作響。“似乎可行,我們應該那樣做嗎?”
桑傑顯得很謹慎。“不,我……”
傑夫有些不高興的說:“這樣我們將會忽視一個問題?”
“不,我的意思是,我們只想弄清楚正在發生的事情的型別。然後,我們可以做筆記,對吧?”
傑夫高興地回答說:“好吧。”他的情緒很快變得輕鬆了,然後他們開始一起做筆記了。
午餐時間快到了。他們工作了兩個小時,中間休息了10分鐘,大部分時間都在討論。
讓另一名程式設計師檢查你的程式碼,已成為一種標準的開發慣例。但傑夫和桑傑則跳了過這一步,只是在他們的日誌中輸入了“LGTM”(looks good to me),即“看起來還不錯”。
表面上看,他們的工作都是一些微小的事情。但事實上,他們的程式碼被用於谷歌整個公司範圍內。有時,傑夫回到家裡會告訴自己的女兒:“今天,桑傑和我把谷歌搜尋的速度提升了10%。”
2003年,通過MapReduce軟體,傑夫和桑傑曾賦予谷歌一次最大規模的升級。、
他們第三次重寫谷歌爬蟲和索引器的時候,有了這個想法。每一次,他們都解決了一個重要的問題:在分佈於許多不同地區的、個別不可靠的計算機上協調工作。泛化他們的解決方案意味著,他們可以避免一次又一次地重溫這個問題。但同時,它也將創造出一種工具,任何谷歌的程式設計師都可以用它來操縱資料中心裡的機器,就好像它們是一臺單一的、行星大小的計算機一樣。
傑夫和桑傑開發的MapReduce對可能非常複雜的程式強加了順序。在MapReduce誕生之前,每個程式設計師都必須弄清楚如何劃分和分發資料、分配工作,並自己解決硬體故障。而MapReduce則賦予程式設計師一種結構化思考這些問題的方式。
正如廚師的開工前準備一樣,在組合各種配料之前,要準備好這些配料。
MapReduce要求程式設計師將他們的任務分成兩個階段。首先,一名程式設計人員告訴每臺機器如何執行任務的“對映(map)”階段(例如,計算一個單詞在網頁上出現的次數);其次,編寫指令“減少(reduce)”所有機器的結果(例如,將它們加起來)。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人的工作。他出差發表演講,每週召開一次會議來研究一種新型計算機晶片(TPU,專門為神經網路設計),並幫助開發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公園。
傑夫說:“桑傑,那裡就是你的辦公室!”他們站在一起,眺望山谷。
— 完 —
年度評選申請
加入社群
量子位AI社群開始招募啦,歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話介面回覆關鍵字“交流群”,獲取入群方式;
此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。
進專業群請在量子位公眾號(QbitAI)對話介面回覆關鍵字“專業群”,獲取入群方式。(專業群稽核較嚴,敬請諒解)
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話介面,回覆“招聘”兩個字。
量子位 QbitAI · 頭條號簽約作者
վ'ᴗ' ի 追蹤AI技術和產品新動態
相關文章
- Jeff Dean的激盪人生:我和Sanjay在同一臺電腦上寫程式碼
- 谷歌基情實錄:和Jeff Dean在同一臺電腦上寫程式碼谷歌
- 紐約客特寫: 全程還原Waymo與Uber的無人駕駛世紀之爭
- 谷歌唯二的 11 級工程師,清華 AI 研究院顧問委員,他是程式設計師眼中神一樣的人物...谷歌工程師AI程式設計師
- Jeff Dean與David Patterson:不思考體系結構的深度學習研究者不是好工程師深度學習工程師
- 測試工程師必須要會寫程式碼嗎?工程師
- 谷歌大神Jeff Dean領銜,萬字展望5大AI趨勢谷歌AI
- 谷歌大腦QT-Opt演算法,機器人探囊取物成功率96%,Jeff Dean大讚谷歌QT演算法機器人
- 工程師文件編寫注意事項(二〇二四 〇一)工程師
- Jeff Dean執筆谷歌團隊2017年終總結,乾貨滿滿谷歌
- 寫給前端工程師看的Docker教程-中級篇前端工程師Docker
- 谷歌拆分搜尋和AI部門:Jeff Dean任AI業務負責人谷歌AI
- 程式設計師如何寫出好程式碼?程式設計師
- 好程式設計師不寫程式碼程式設計師
- 何為程式碼質量?——用腦子寫程式碼
- 工程師們你們寫完程式碼後還做些什麼No.115工程師
- Mac電腦怎麼在ntfs硬碟上讀寫Mac硬碟
- 當程式設計師寫不出程式碼了……程式設計師
- 訂單交易平臺二(寫程式碼之前的準備工作)
- 程式設計師地鐵上寫程式碼被網友嘲諷太裝:訊號都不好,寫什麼程式碼!程式設計師
- 頂級公司程式設計師,一天只寫100行程式碼?程式設計師行程
- 寫ObjectiveC介面的時候懶蟲上腦,用 Golang 寫了個簡單的程式碼生成ObjectGolang
- 中國程式設計師與美國程式設計師寫程式碼的區別分析程式設計師
- 一枚Python資料工程師為媽媽寫的幾行程式碼Python工程師行程
- 寫給前端工程師的 Flutter 教程前端工程師Flutter
- 同一臺電腦配置兩個git賬號Git
- 如何寫工程程式碼——重新認識物件導向物件
- 編寫可閱讀的程式碼--基本規約
- 加入谷歌25週年,Jeff Dean開啟回憶殺:搬16次工位、掐點打咖啡谷歌
- 編寫 Netty / RPC 客戶端【框架程式碼分析】NettyRPC客戶端框架
- 前端工程程式碼規範(一)——命名規則與工程約定前端
- 菜雞程式設計師是如何寫程式碼的?程式設計師
- 程式設計師的工作就只有寫程式碼麼???程式設計師
- 盤點哪些比較糟糕的幾類程式碼,谷歌工程師程式碼也這樣?谷歌工程師
- Storm的wordcount程式碼編寫與分析ORM
- 架構師究竟要不要寫程式碼?架構
- 如何使用 Laravel Collections 類編寫神級程式碼Laravel
- Jeff Dean回憶谷歌趣事:吳恩達激勵自己繼續研究,Hinton曾是最強「實習生」谷歌吳恩達