在上一篇文章中提到過,我已經不在Google工做了。我尚未想清楚應該去哪裏—有兩三個很是好的工做機會擺在我面前。由於在這段作決定時間裏,我再也不受僱於任何人,我想能夠寫一些專業性的東西,一些頗有趣,但也會在同事和管理工做中致使關係緊張的東西。程序員
本文做者 Mark CC編程
Google是一個很是優秀的公司。他們作出了不少使人稱讚的東西—既是公司外部,人們能夠看到的東西,也是公司內部。有一些在公司內部並不屬於保密的事情,在外部並無給予足夠普遍的討論。這就是我今天要說的。segmentfault
讓Google的程序如此優秀的一個最重要的事情看起來是很是的簡單:代碼審查。並非只有Google作這個事情—代碼審查已經被普遍的承認爲一種很是好的作法,不少人都在這樣作。但我尚未看到第二家這樣大的公司能把這種事情運用的如此廣泛。在Google,沒有程序,任何產品、任何項目的程序代碼,能夠在沒有通過有效的代碼審查前提交到代碼庫裏的。架構
全部人都要通過代碼審查。而且很正規的:這種事情應該成爲任何重要的軟件開發工做中一個基本制度。並不單指產品程序——全部東西。它不須要不少的工做,但它的效果是巨大的。學習
從代碼審查裏能獲得什麼?編碼
很顯然:在代碼提交前,用第二羣眼睛檢查一遍,防止bug混入。這是對其最多見的理解,是對代碼審查的好處的最普遍的認識。可是,依個人經驗來看,這反卻是它最不重要的一點。人們確實在代碼審查中找到了bug。但是,這些在代碼審查中能發現的絕大部分bug,很顯然,都是微不足道的bug,程序的做者花幾分鐘的時間就能發現它們。真正須要花時間去發現的bug不是在代碼審查裏能找到的。spa
代碼審查的最大的功用是純社會性的。若是你在編程,並且知道將會有同事檢查你的代碼,你編程態度就徹底不同了。你寫出的代碼將更加整潔,有更好的註釋,更好的程序結構——由於你知道,那個你很在乎的人將會查看你的程序。沒有代碼審查,你知道人們最終仍是會看你的程序。但這種事情不是當即發生的事,它不會給你帶來同等的緊迫感,它不會給你相同的我的評判的那種感覺。翻譯
還有一個很是重要的好處。代碼審查能傳播知識。在不少的開發團隊裏,常常每個人負責一個核心模塊,每一個人都只關注他本身的那個模塊。除非是同事的模塊影響了本身的程序,他們從不相互交流。這種狀況的後果是,每一個模塊只有一我的熟悉裏面的代碼。若是這我的休假或——希望不是——辭職了,其餘人則一籌莫展。經過代碼審查,至少會有兩我的熟悉這些程序——做者,以及審查者。審查者並不能像程序的做者同樣對程序十分了解——但他會熟悉程序的設計和架構,這是極其重要的。設計
固然,沒有什麼事情能簡單的作下來的。依個人經驗,在你能正確的進行代碼審查前,你須要花時間鍛鍊學習。我發現人們在代碼審查時常常會犯一些錯誤,致使很多麻煩——尤爲在一些缺少經驗的審查者中常常的出現,他們給了人們一個很糟的代碼審查的體驗,成爲了人們接受代碼審查制度的一個障礙。code
最重要的一個原則:代碼審查用意是在代碼提交前找到其中的問題——你要發現是它的正確。在代碼審查中最常犯的錯誤——幾乎每一個新手都會犯的錯誤——是,審查者根據本身的編程習慣來評判別人的代碼。
對於一個問題,一般咱們能找出十幾種方法去解決。對於一種解決方案,咱們能有百萬種編碼方案來實現它。做爲一個審查者,你的任務不是來確保被審查的代碼都採用的是你的編碼風格——由於它不可能跟你寫的同樣。做爲一段代碼的審查者的任務是確保由做者本身寫出的代碼是正確的。一旦這個原則被打破,你最終將會倍感折磨,深受挫折——這可不是咱們想要的結果。
問題在於,這種錯誤是如此的廣泛而易犯。若是你是個程序員,當你遇到一個問題,你能想到一種解決方案——你就把你想到的方案做爲標準答案。但事情不是這樣的——做爲一個好的審查者,你須要明白這個道理。
代碼審查的第二個易犯的毛病是,人們以爲有壓力,感受非要說點什麼纔好。你知道做者用了大量的時間和精力來實現這些程序——不應說點什麼嗎?
不,你不須要。
只說一句「哇,不錯呀」,任什麼時候候都不會不合適。若是你老是力圖找出一點什麼東西來批評,你這樣作的結果只會損害本身的威望。當你不厭其煩的找出一些東西來,只是爲了說些什麼,被審查人就會知道,你說這些話只是爲了填補寂靜。你的評論將再也不被人重視。
第三是速度。你不能匆匆忙忙的進行一次代碼審查——但你也要能迅速的完成。你的同伴在等你。若是你和你的同事並不想花太多時間進行代碼複查,大家很快的完成,那被審查者會以爲很沮喪,這種代碼審查帶來的只有失望的感受。就好象是打攪了你們,使你們放下手頭的工做來進行審查。事情不應是這樣。你並不須要推掉手頭上的任何事情來作代碼審查。但若是中途耽誤了幾個小時,你中間還要休息一會,喝杯茶,衝個澡,或談會兒閒話。當你回到審查現場,你能夠繼續下去,把事情作完。若是你如此處理,那麼別人就不用在那裏乾等着你。
原文 Things Everyone Should Do: Code Review
翻譯 外刊IT評論
修訂 SegmentFault