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