1. 程式人生 > >谷歌工程師文化中的幾個核心原則

谷歌工程師文化中的幾個核心原則

每週,一組谷歌員工都會在廁所的牆壁上貼上一頁來分享本週的測試小建議。有時這頁紙會討論依賴注入,並提供一個簡單的示例展示如何用不同語言使用它;有時它可能會分享如何安裝一個用於測量團隊程式碼庫測試覆蓋率的軟體。

“Testing on the Toilet”起初是個奇怪又有趣的方式,來教給工程師在工作中會用到的一些新的東西,這也被突出為Google文化中的核心力量:向工程師組織有效的傳播一系列最佳實踐。

我大學畢業後便加入Google的搜尋質量團隊,在2006年中旬到2008年中旬在其工作,在這期間,公司的規模從8000人上漲到20000人。在我的第一個專案,我同兩位極具天賦的工程師一起工作,短短六個月,我們原型化、測試並啟動了網站的新功能,每天向數百萬使用者在google.com上展示相關搜尋。作為團隊的新員工,自始至終最突出的感受是:

在這樣的環境中,公司是如何能使像我這樣的新工程師快速成長起來?

如果不是因為Google工程文化的關鍵要素,對於我們這樣規模的團隊來說,在如此短時間內釋出新特性是極為困難的。這裡的文化要素讓我能夠迅速地獲得Google的程式碼庫、工具和基礎設施。這也是使公司能夠達到今天50000員工規模的根本原因。

一些前谷歌員工可能抱怨公司變得遲緩和官僚,但是不可否認它已經獲得很高的成就和很大的規模,在《財富》評選的100家最適合工作的公司中名列前茅。

下面是我從谷歌工程文化中獲得的六個核心原則,希望你也能夠從中獲益:

1.把工程資源用於共享工具和抽象概念。

在早期谷歌在工具和抽象概念上大力投資,例如Protocol Buffers,MapReduce,BigTable和其他在工程中自始至終都會用到的東西。解決問題好的態度並使得每個人能夠接受已經帶來巨大的收益。每個團隊都花費較少的心理週期選擇使用哪個工具,專注於工具的團隊能夠更關注提升工程生產力,和改善已經使用的工具和服務。每個團隊可能使用截然不同的工具鏈,這也意味著當你學習了基本單元結構後,更容易理解許多專案背後的設計。這個方法的負面影響就是有些時候你可能感覺你的case是被強行塞入一個特別的良好支援的工具,即使它不是最好的。

2.在新工程師培訓中投資可重複使用的訓練材料。

我在谷歌能夠迅速變得如此高產的一個原因是公司在培訓材料上面花了大力去投資,其稱之為Codelabs,Codelabs包括了公司的核心抽象模型,解釋它們為什麼被設計出來,突出程式碼庫的相關片段,以及通過實現練習驗證理解它們。如果沒有它,我將會花更多的時間來學習各種我需要去了解的各種技術,這也意味著我的隊員要花費更多的精力向我去解釋它們。我在谷歌這樣積極的經歷,強有力的影響了我在後來的Quora新人培訓過程中大力推崇Codelabs使用的決定。

3.標準化編碼約定。

每個關於空格、大小寫、行長度、是否使用智慧指標等約定,可能似乎是不重要的,但是到了谷歌這樣的大規模時會帶來巨大的影響。我不是第一次承認,當代碼校驗人員挑刺我的程式碼令我感到十分不愉快,就因為我沒有正確的縮排或在行長度超出了規定的兩個字元。但是因為大家都遵循同樣的約定,使得瀏覽程式碼變得大大容易。當更換團隊或在跨部門專案中工作時,這幾乎沒有額外支出去學習新團隊的約定。當團隊規模很小時,約定是那種很容易被忽視的東西,但是在程式碼和團隊規模逐漸壯大在這方面越來越做出改變,這樣你事實上希望從始至終都是一致。如果可能早期在約定一致性上保持一致,或者使用谷歌開源的風格指南。

4.通過程式碼複審(Code Review)提升程式碼質量。

對每次改變進行程式碼複審減緩了迭代更新的速度,但是提升了程式碼質量,新工程師收到反饋後,他們需要迅速的採取最佳的實踐並專注於公認的程式碼質量等級。總體的程式碼質量越高,也就意味著新工程師在模仿周圍人員的程式碼同時,初期就會寫出更加簡潔的程式碼。因此,程式碼複審有助於公司在較大規模上位置較高的軟體質量。

5.用正確資料解決很多問題。

谷歌研發主管Peter Norvig經常談到在解決複雜問題上“不合理的資料有效性”。正確的資料能夠幫助你瞭解使用者,劃分辦公室政治,解決爭論,並讓你跟上進度。開發日誌和資料基礎工具,如Sawzall和MapReduce,使谷歌的工程師從大量資料中篩選出來變為可能。

6.自動化測試來衡量你的程式碼。

谷歌有十分強烈的單元測試文化,“廁所測試”就是一個例子,差不多我每做一次程式碼的改動都伴隨一個單元測試,程式碼複審員將會嚴格地檢查他們。這讓開發變慢,但它也意味著成百上千的工程師可以改變程式碼庫中的同一部分而不會犧牲過多的質量和可靠性。谷歌以同樣的方式在共享工具上進行投入,它也會共享測試框架,並通過最好的測試實踐讓大家寫測試變得更容易。

當我後來在Ooyala和Quora幫助他們構建團隊和產品時,谷歌的工作強烈地讓我思考,在哪些地方什麼會形成良好的工程文化。然而,在谷歌這樣規模的公司工作好,並不一定意味著,會在不同機構不同發展時期的工作同樣會好。

每個工程決策都包括一系列權衡,谷歌工程文化只是提供了一部分權衡,希望可以從這裡學到一些對你價值的。