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