保持干凈
Google崇尚“有序混亂”的概念,這種思想擴(kuò)展到我們的工作場所,由此造成的情形說好聽點(diǎn)兒是“凌亂”,說難聽點(diǎn)兒就是“豬窩”。
衣帽間里有淋浴和桑拿設(shè)施。一進(jìn)來,房間里就充斥著各種氣味,臟兮兮的運(yùn)動衫、磨損的護(hù)膝、沾著泥土的冰球和沒了頭的冰球桿、防滑層黏合劑、除臭劑分配器、扯碎的內(nèi)衣以及難聞的須后水都混合起來。Google后來在衣帽間里提供了毛巾,還安裝了瑞典生產(chǎn)的低耗能洗衣機(jī),不過洗衣機(jī)要一個星期才會完成一個循環(huán) 它采用一套成熟的機(jī)制,會在即將洗完的時候發(fā)出通知,洗衣機(jī)不洗運(yùn)動襪和發(fā)霉的毛巾。你可以想象一個兄弟會的怪人跑到保險(xiǎn)公司里要求享受棚戶區(qū)居民的權(quán)利時的場景。
只有工程部門還在一絲不茍地保持衛(wèi)生。不是說他們的空間真正干凈 他們在生活中顯然都是野生動物 而是說他們工作原理上的干凈。
在諸如源頭控制和編譯器警告等方面,烏爾斯堅(jiān)持采用了他在工業(yè)安裝方案中學(xué)來的最佳做法。
烏爾斯對我說:“我們必須保證在編譯器發(fā)出警告的情況下,它會立即停止工作,這樣你就無法坐視不理?!彼麑⒆钪匾脑囟ㄐ偷揭粋€風(fēng)格指南中,并授權(quán)給克雷格·西爾弗斯坦貫徹執(zhí)行。
克雷格告訴過我說:“我不想要什么風(fēng)格指南,但是烏爾斯對此堅(jiān)定不移?!?/p>
最主要的問題是使用哪種編程語言??死赘裣胧褂肅語言,而烏爾斯更傾向于C++。最后采用了烏爾斯的選擇,不過烏爾斯同意Google編碼器將不使用“C++中不好的部分”。
我曾經(jīng)問過克雷格:“C++中不好的部分是指什么?”
克雷格板著臉說:“大部分?!?/p>
克雷格認(rèn)為Google需要一種凝聚力,以此避免多余的努力和無謂的爭論,從而維護(hù)標(biāo)準(zhǔn),抓住重點(diǎn)并在回顧總結(jié)時提供反饋。他把形成那種凝聚力作為奮斗目標(biāo),他想要成為“無所不知的人”。
克雷格回憶時說道:“當(dāng)我們有大約100人的時候,我還得到處走動,去跟每個人談話。我會說, 你的工作還好嗎?需要什么幫助嗎? 一些人對此很反感, 這個家伙總是打擾我。他想干嗎? 烏爾斯不得不把我拉到一邊讓我不要再問?!笨死赘褚庾R到,“他們并不需要受到那么多關(guān)注。大家彼此相隔不遠(yuǎn),他們知道該和誰說話,大家的溝通交流十分通暢。”
更重要的事情就是編碼了。無論什么時候,只要有人檢查代碼庫變化 無論變化多么小 克雷格都會開始瀏覽每個自動警報(bào),尋找潛在問題。但是一個單獨(dú)的校對程序跟不上設(shè)計(jì)的產(chǎn)出增長。因此,烏爾斯創(chuàng)立了一個正式的代碼檢查程序。
克雷格對我說:“你要去找一個好的工程實(shí)踐作為文化運(yùn)營的試金石,而對于我們來說,這個試金石就是代碼檢驗(yàn)。”要開啟一個代碼檢驗(yàn)進(jìn)程,編碼器會向在線設(shè)計(jì)文件發(fā)送一個指針。任何人都可以對此進(jìn)行評論,但是正式審核員必須要對審核結(jié)果簽字確認(rèn)。
由此帶來的好處顯而易見。工程師羅恩·多林告訴我說:“在一開始發(fā)現(xiàn)問題比后來發(fā)現(xiàn)要省心一百倍?!?/p>
隨著Google的成長,并不是所有人都認(rèn)同他們的代碼需要證明或者他們有責(zé)任檢查其他人的工作??死赘窕貞洉r說:“我們添加了一個程序,可以阻止沒經(jīng)過檢驗(yàn)就提交的代碼,不過要是你撒謊的話,這個程序也沒辦法?!?/p>
為了應(yīng)付這個程序,大家會對代碼進(jìn)行粗略的檢驗(yàn)??死赘窀嬖V我說:“我發(fā)出了龐大的代碼,他們又發(fā)了回來并說 看起來不錯 。我覺著他們不應(yīng)該這么簡單地評價我發(fā)出的代碼?!?/p>