「好了,我們做些什麼?」桑傑問道。
「我想我們應該看看TensorFlow Lite的代碼規模。」傑夫說道。
這是一個關於機器學習的新型軟體項目,傑夫和桑傑擔心項目有些「臃腫」。就像是書本編輯一樣,他們在尋找可以削減的地方。針對這項任務他們開發了一個新的工具可以自行進行優化。
「我想的是弄清楚速度有多慢。」桑傑說道。
「已經非常慢了。」傑夫說道,他往後靠了靠,神態輕鬆。
「這個是120個千字節。」桑傑說道,「大概是八秒左右吧。」
「12000個函數調用堆棧。」傑夫說道,「而不是千字節。」
「額,文本千字節。」桑傑說道。
「好吧,我的錯。」傑夫說。
「我不太清楚我們應該挑選什麼樣的單元大小。」桑傑說,「一半兆位?」
「看上去不錯。」傑夫說。桑傑開始輸入代碼,傑夫的目光則放在了屏幕上。「你剛才是說,如果這比我們抽樣的結果要大……」剩下一半話他還沒說完,桑傑就用代碼回答了他的問題。
當桑傑工作的時候,他會聚精會神。他會將雙腳岔開到肩寬,似乎這就是他工作的姿勢。他的手指在鍵盤上輕微移動。幾位年輕的程式設計師走了進來。
很快,他們達到了一個小的裡程碑。桑傑輸入了一個命令來測試進度。他似乎有些疲憊,在測試運行過程中他查看了自己的電子郵件。測試完成之後,他也並沒有在意。
「嘿,」傑夫說。他打了一個響指,然後指向屏幕。雖然談話中充滿了玩笑和俏皮話,但當他和桑傑坐在電腦前時,他還是會變得固執、粗魯,意見也是經常不合。而桑傑則淡然處之,當他認為傑夫速度太快時,他會把手從鍵盤上拿開,攤開手指,好像在說,「停下來」(通常來說,傑夫是加速器,桑傑就是剎車)。這就像他們開始爭論一樣:在一起20年了,他們已經不記得要提高嗓門了。
桑傑滾動著屏幕,讓一段新代碼進入視線。傑夫說:「比如,所有這些都可以變成例行公事,不是嗎?」
桑傑表示同意,「嗯」。
傑夫按壓著指關節,啪啪作響。「似乎可行,我們應該那樣做嗎?」
桑傑顯得很謹慎。「不,我……」
傑夫有些不高興的說:「這樣我們將會忽視一個問題?」
「不,我的意思是,我們只想弄清楚正在發生的事情的類型。然後,我們可以做筆記,對吧?」
傑夫高興地回答說:「好吧。」他的情緒很快變得輕鬆了,然後他們開始一起做筆記了。
午餐時間快到了。他們工作了兩個小時,中間只休息了10分鐘,大部分時間都在討論。
讓另一名程式設計師檢查你的代碼,已成為一種標準的開發慣例。但傑夫和桑傑則跳了過這一步,只是敷衍地在他們的日誌中輸入了「LGTM」(looks good to me),即「看起來還不錯」。表面上看,他們的工作都是一些微小的事情。但事實上,他們的代碼被用於谷歌整個公司範圍內。有時,傑夫回到家裡會告訴自己的女兒:「今天,桑傑和我把谷歌搜索的速度提升了10%。」
2003年,通過MapReduce這款軟體,傑夫和桑傑曾賦予谷歌一次最大規模的升級。這是他們第三次有了重寫谷歌爬蟲和索引器的想法。每一次,他們都解決了一個重要的問題:在分布於許多不同地區的、個別不可靠的計算機上協調工作。推廣他們的解決方案意味著,他們可以避免一次又一次地重溫這個問題。但同時,它也將創造出一種工具,任何谷歌的程式設計師都可以用它來操縱數據中心裡的機器,就好像它們是一臺單一的、行星大小的計算機一樣。