咱們在谷歌所作事情中另一個讓我感到異常有效、有用的制度是嚴格的編碼規範。程序員
在到Google工做以前,我一直認爲編碼規範沒有什麼用處。我堅信這些規範都是官僚制度下產生的浪費你們的編程時間、影響人們開發效率的東西。編程
我是大錯特錯了。編碼
在谷歌,我能夠查看任何的代碼,進入全部谷歌的代碼庫,我有權查看它們。事實上,這種權限是不多人能擁有的。可是,讓我感到驚訝的倒是,如此多的編碼規範—縮進,命名,文件結構,註釋風格—這一切讓我出乎意料的輕鬆的閱讀任意一段代碼,並輕易的看懂它們。這讓我震驚—由於我覺得這些規範是微不足道的東西。它們不可能有這麼大的做用—但它們卻起到了這麼大的做用。當你發現只經過看程序的基本語法結構就能讀懂一段代碼,這種時間上的節省不能不讓人震撼!spa
反對編碼規範的人不少,下面是一些常見的理由,對於這些理由,我之前是深信不疑。設計
我是一個優秀的程序員,我不肯意浪費時間幹這些愚蠢的事。個人技術很好,我能夠寫出清晰的、易於理解的代碼。爲何我要浪費時間遵照這些愚蠢的規範?答案是:統一是有價值的。就像我前面說的—你看到的任何的一行代碼—不管是由你寫的,仍是由你身邊的同事,仍是由一個跟你相差11個時區的距離人寫的—它們都有統一的結構,相同的命名規範—這帶來的效果是巨大的。你只須要花這麼少的功夫就能看懂一個你不熟悉(或徹底未見過)的程序,由於你一見它們就會以爲面熟。orm
這種話很滑稽,但它反映了一種常見的抱怨。咱們程序員對於本身的編碼風格一般懷有很高的自負。我寫出的的代碼的確能反映出個人一些特質,它是我思考的一種體現。它是個人技能和創造力的印證。若是你強迫我遵照什麼愚蠢的規範,這是在打壓個人創造力。可問題是,你的風格里的重要的部分,它對你的思想和創造力的體現,並非藏身於這些微不足道的句法形式裏。(若是是的話,那麼,你是一個至關糟糕的程序員。)規範事實上可讓人們能夠更容易的看出你的創造力—由於他們看明白了你的做品,人們對你的認識不會因不熟悉的編碼形式而受到干擾。ci
若是你使用的編碼規範並非爲你的項目專門設計的,它對你的項目也許並非最佳方案。這沒事。一樣,這只是語法:非最優並不表示是很差。對你的項目來講它不是最理想的,但並不能代表它不值得遵照。不錯,對於你的項目,你並無從中得到該有的好處,但對於一個大型公司來講,它帶來的好處是巨大的。除此以外,專門針對某個項目制定編碼規範通常效果會更好。一個項目擁有本身的編碼風格無可厚非。可是,根據個人經驗,在一個大型公司裏,你最好有一個統一的編碼規範,特定項目能夠擴展本身特定的項目方言和結構。開發
這應該是最多見的抱怨類型了。它是其它幾種反對聲音的混合體,但它卻有自身態度的直接表現。有一部分反對者深信,他們是比制定編碼規範的人更好的程序員,俯身屈從這些小學生制定的規範,將會下降代碼的質量。對於此,客氣點說,就是胡扯。純屬傲慢自大,荒唐好笑。事實上他們的意思就是,沒有人配得上給他們制定規範,對他們的代碼的任何改動都是一種破壞。若是參照任何一種合理的編碼規範,你都不能寫出合格的代碼,那隻能說你是個爛程序員。it
當你按照某種編碼規範進行編程時,必然會有某些地方讓你搖頭不爽。確定會在某些地方你的編碼風格會優於這些規範。可是,這不重要。在某些地方,編碼規範也有優於你的編程風格的時候。可是,這也不重要。只要這規範不是徹底的不可理喻,在程序的可理解性上獲得的好處會大大的補償你的損失。效率
可是,若是編碼規範真的是徹底不可理喻呢?
若是是這樣,那就麻煩了:你被糟蹋了。但這並非由於這荒謬的編碼規範。這是由於你在跟一羣蠢貨一塊兒工做。想經過把編碼規範制定的足夠荒謬來阻止一個優秀的程序員寫出優秀的代碼,這須要努力。這須要一個執著的、冷靜的、進了水的大腦。若是這羣蠢貨能強行頒佈不可用的編碼規範,那他們就能幹出其它不少傻事情。若是你爲這羣蠢貨幹活,你的確被糟蹋了—不論你幹什麼、有沒有規範。(我並非說罕有公司被一羣蠢貨管理;事實很不幸,咱們這個世界歷來就不缺蠢貨,並且不少蠢貨都擁有本身的公司。)