為什么谷歌要執(zhí)行嚴(yán)格的代碼編寫規(guī)范
發(fā)布時(shí)間:2013-09-28 21:53:05 作者:佚名
我要評(píng)論

我們?cè)诠雀杷鍪虑橹辛硗庖粋€(gè)讓我感到異常有效、有用的制度是嚴(yán)格的編碼規(guī)范
本篇是谷歌是如何做代碼審查的的續(xù)篇。
我們?cè)诠雀杷鍪虑橹辛硗庖粋€(gè)讓我感到異常有效、有用的制度是嚴(yán)格的編碼規(guī)范。
在到Google工作之前,我一直認(rèn)為編碼規(guī)范沒(méi)有什么用處。我堅(jiān)信這些規(guī)范都是官僚制度下產(chǎn)生的浪費(fèi)大家的編程時(shí)間、影響人們開(kāi)發(fā)效率的東西。
我是大錯(cuò)特錯(cuò)了。
在谷歌,我可以查看任何的代碼,進(jìn)入所有谷歌的代碼庫(kù),我有權(quán)查看它們。事實(shí)上,這種權(quán)限是很少人能擁有的。但是,讓我感到驚訝的卻是,如此多的編碼規(guī)范—縮進(jìn),命名,文件結(jié)構(gòu),注釋風(fēng)格—這一切讓我出乎意料的輕松的閱讀任意一段代碼,并輕易的看懂它們。這讓我震驚—因?yàn)槲乙詾檫@些規(guī)范是微不足道的東西。它們不可能有這么大的作用—但它們卻起到了這么大的作用。當(dāng)你發(fā)現(xiàn)只通過(guò)看程序的基本語(yǔ)法結(jié)構(gòu)就能讀懂一段代碼,這種時(shí)間上的節(jié)省不能不讓人震撼!
反對(duì)編碼規(guī)范的人很多,下面是一些常見(jiàn)的理由,對(duì)于這些理由,我以前是深信不疑。
這是浪費(fèi)時(shí)間!
我是一個(gè)優(yōu)秀的程序員,我不愿意浪費(fèi)時(shí)間干這些愚蠢的事。我的技術(shù)很好,我可以寫出清晰的、易于理解的代碼。為什么我要浪費(fèi)時(shí)間遵守這些愚蠢的規(guī)范?答案是:統(tǒng)一是有價(jià)值的。就像我前面說(shuō)的—你看到的任何的一行代碼—不論是由你寫的,還是由你身邊的同事,還是由一個(gè)跟你相差11個(gè)時(shí)區(qū)的距離人寫的—它們都有統(tǒng)一的結(jié)構(gòu),相同的命名規(guī)范—這帶來(lái)的效果是巨大的。你只需要花這么少的功夫就能看懂一個(gè)你不熟悉(或完全未見(jiàn)過(guò))的程序,因?yàn)槟阋灰?jiàn)它們就會(huì)覺(jué)得面熟。
我是個(gè)藝術(shù)家!
這種話很滑稽,但它反映了一種常見(jiàn)的抱怨。我們程序員對(duì)于自己的編碼風(fēng)格通常懷有很高的自負(fù)。我寫出的的代碼的確能反映出我的一些特質(zhì),它是我思考的一種體現(xiàn)。它是我的技能和創(chuàng)造力的印證。如果你強(qiáng)迫我遵守什么愚蠢的規(guī)范,這是在打壓我的創(chuàng)造力。可問(wèn)題是,你的風(fēng)格里的重要的部分,它對(duì)你的思想和創(chuàng)造力的體現(xiàn),并不是藏身于這些微不足道的句法形式里。(如果是的話,那么,你是一個(gè)相當(dāng)糟糕的程序員。)規(guī)范事實(shí)上可以讓人們可以更容易的看出你的創(chuàng)造力—因?yàn)樗麄兛疵靼琢四愕淖髌?,人們?duì)你的認(rèn)識(shí)不會(huì)因不熟悉的編碼形式而受到干擾。
所有人都能穿的鞋不會(huì)合任何人的腳!
如果你使用的編碼規(guī)范并不是為你的項(xiàng)目專門設(shè)計(jì)的,它對(duì)你的項(xiàng)目也許并不是最佳方案。這沒(méi)事。同樣,這只是語(yǔ)法:非最優(yōu)并不表示是不好。對(duì)你的項(xiàng)目來(lái)說(shuō)它不是最理想的,但并不能表明它不值得遵守。不錯(cuò),對(duì)于你的項(xiàng)目,你并沒(méi)有從中獲得該有的好處,但對(duì)于一個(gè)大型公司來(lái)說(shuō),它帶來(lái)的好處是巨大的。除此之外,專門針對(duì)某個(gè)項(xiàng)目制定編碼規(guī)范一般效果會(huì)更好。一個(gè)項(xiàng)目擁有自己的編碼風(fēng)格無(wú)可厚非。但是,根據(jù)我的經(jīng)驗(yàn),在一個(gè)大型公司里,你最好有一個(gè)統(tǒng)一的編碼規(guī)范,特定項(xiàng)目可以擴(kuò)展自己特定的項(xiàng)目方言和結(jié)構(gòu)。
我善長(zhǎng)制定編碼規(guī)范!
這應(yīng)該是最常見(jiàn)的抱怨類型了。它是其它幾種反對(duì)聲音的混合體,但它卻有自身態(tài)度的直接表現(xiàn)。有一部分反對(duì)者深信,他們是比制定編碼規(guī)范的人更好的程序員,俯身屈從這些小學(xué)生制定的規(guī)范,將會(huì)降低代碼的質(zhì)量。對(duì)于此,客氣點(diǎn)說(shuō),就是胡扯。純屬傲慢自大,荒唐可笑。事實(shí)上他們的意思就是,沒(méi)有人配得上給他們制定規(guī)范,對(duì)他們的代碼的任何改動(dòng)都是一種破壞。如果參照任何一種合理的編碼規(guī)范,你都不能寫出合格的代碼,那只能說(shuō)你是個(gè)爛程序員。
當(dāng)你按照某種編碼規(guī)范進(jìn)行編程時(shí),必然會(huì)有某些地方讓你搖頭不爽??隙〞?huì)在某些地方你的編碼風(fēng)格會(huì)優(yōu)于這些規(guī)范。但是,這不重要。在某些地方,編碼規(guī)范也有優(yōu)于你的編程風(fēng)格的時(shí)候。但是,這也不重要。只要這規(guī)范不是完全的不可理喻,在程序的可理解性上得到的好處會(huì)大大的補(bǔ)償你的損失。
但是,如果編碼規(guī)范真的是完全不可理喻呢?
如果是這樣,那就麻煩了:你被糟蹋了。但這并不是因?yàn)檫@荒謬的編碼規(guī)范。這是因?yàn)槟阍诟蝗捍镭浺黄鸸ぷ?。想通過(guò)把編碼規(guī)范制定的足夠荒謬來(lái)阻止一個(gè)優(yōu)秀的程序員寫出優(yōu)秀的代碼,這需要努力。這需要一個(gè)執(zhí)著的、冷靜的、進(jìn)了水的大腦。如果這群蠢貨能強(qiáng)行頒布不可用的編碼規(guī)范,那他們就能干出其它很多傻事情。如果你為這群蠢貨干活,你的確被糟蹋了—不論你干什么、有沒(méi)有規(guī)范。(我并不是說(shuō)罕有公司被一群蠢貨管理;事實(shí)很不幸,我們這個(gè)世界從來(lái)就不缺蠢貨,而且很多蠢貨都擁有自己的公司。)
英文原文:Stuff Everyone Should Do (part 2): Coding Standards
我們?cè)诠雀杷鍪虑橹辛硗庖粋€(gè)讓我感到異常有效、有用的制度是嚴(yán)格的編碼規(guī)范。
在到Google工作之前,我一直認(rèn)為編碼規(guī)范沒(méi)有什么用處。我堅(jiān)信這些規(guī)范都是官僚制度下產(chǎn)生的浪費(fèi)大家的編程時(shí)間、影響人們開(kāi)發(fā)效率的東西。
我是大錯(cuò)特錯(cuò)了。
在谷歌,我可以查看任何的代碼,進(jìn)入所有谷歌的代碼庫(kù),我有權(quán)查看它們。事實(shí)上,這種權(quán)限是很少人能擁有的。但是,讓我感到驚訝的卻是,如此多的編碼規(guī)范—縮進(jìn),命名,文件結(jié)構(gòu),注釋風(fēng)格—這一切讓我出乎意料的輕松的閱讀任意一段代碼,并輕易的看懂它們。這讓我震驚—因?yàn)槲乙詾檫@些規(guī)范是微不足道的東西。它們不可能有這么大的作用—但它們卻起到了這么大的作用。當(dāng)你發(fā)現(xiàn)只通過(guò)看程序的基本語(yǔ)法結(jié)構(gòu)就能讀懂一段代碼,這種時(shí)間上的節(jié)省不能不讓人震撼!
反對(duì)編碼規(guī)范的人很多,下面是一些常見(jiàn)的理由,對(duì)于這些理由,我以前是深信不疑。
這是浪費(fèi)時(shí)間!
我是一個(gè)優(yōu)秀的程序員,我不愿意浪費(fèi)時(shí)間干這些愚蠢的事。我的技術(shù)很好,我可以寫出清晰的、易于理解的代碼。為什么我要浪費(fèi)時(shí)間遵守這些愚蠢的規(guī)范?答案是:統(tǒng)一是有價(jià)值的。就像我前面說(shuō)的—你看到的任何的一行代碼—不論是由你寫的,還是由你身邊的同事,還是由一個(gè)跟你相差11個(gè)時(shí)區(qū)的距離人寫的—它們都有統(tǒng)一的結(jié)構(gòu),相同的命名規(guī)范—這帶來(lái)的效果是巨大的。你只需要花這么少的功夫就能看懂一個(gè)你不熟悉(或完全未見(jiàn)過(guò))的程序,因?yàn)槟阋灰?jiàn)它們就會(huì)覺(jué)得面熟。
我是個(gè)藝術(shù)家!
這種話很滑稽,但它反映了一種常見(jiàn)的抱怨。我們程序員對(duì)于自己的編碼風(fēng)格通常懷有很高的自負(fù)。我寫出的的代碼的確能反映出我的一些特質(zhì),它是我思考的一種體現(xiàn)。它是我的技能和創(chuàng)造力的印證。如果你強(qiáng)迫我遵守什么愚蠢的規(guī)范,這是在打壓我的創(chuàng)造力。可問(wèn)題是,你的風(fēng)格里的重要的部分,它對(duì)你的思想和創(chuàng)造力的體現(xiàn),并不是藏身于這些微不足道的句法形式里。(如果是的話,那么,你是一個(gè)相當(dāng)糟糕的程序員。)規(guī)范事實(shí)上可以讓人們可以更容易的看出你的創(chuàng)造力—因?yàn)樗麄兛疵靼琢四愕淖髌?,人們?duì)你的認(rèn)識(shí)不會(huì)因不熟悉的編碼形式而受到干擾。
所有人都能穿的鞋不會(huì)合任何人的腳!
如果你使用的編碼規(guī)范并不是為你的項(xiàng)目專門設(shè)計(jì)的,它對(duì)你的項(xiàng)目也許并不是最佳方案。這沒(méi)事。同樣,這只是語(yǔ)法:非最優(yōu)并不表示是不好。對(duì)你的項(xiàng)目來(lái)說(shuō)它不是最理想的,但并不能表明它不值得遵守。不錯(cuò),對(duì)于你的項(xiàng)目,你并沒(méi)有從中獲得該有的好處,但對(duì)于一個(gè)大型公司來(lái)說(shuō),它帶來(lái)的好處是巨大的。除此之外,專門針對(duì)某個(gè)項(xiàng)目制定編碼規(guī)范一般效果會(huì)更好。一個(gè)項(xiàng)目擁有自己的編碼風(fēng)格無(wú)可厚非。但是,根據(jù)我的經(jīng)驗(yàn),在一個(gè)大型公司里,你最好有一個(gè)統(tǒng)一的編碼規(guī)范,特定項(xiàng)目可以擴(kuò)展自己特定的項(xiàng)目方言和結(jié)構(gòu)。
我善長(zhǎng)制定編碼規(guī)范!
這應(yīng)該是最常見(jiàn)的抱怨類型了。它是其它幾種反對(duì)聲音的混合體,但它卻有自身態(tài)度的直接表現(xiàn)。有一部分反對(duì)者深信,他們是比制定編碼規(guī)范的人更好的程序員,俯身屈從這些小學(xué)生制定的規(guī)范,將會(huì)降低代碼的質(zhì)量。對(duì)于此,客氣點(diǎn)說(shuō),就是胡扯。純屬傲慢自大,荒唐可笑。事實(shí)上他們的意思就是,沒(méi)有人配得上給他們制定規(guī)范,對(duì)他們的代碼的任何改動(dòng)都是一種破壞。如果參照任何一種合理的編碼規(guī)范,你都不能寫出合格的代碼,那只能說(shuō)你是個(gè)爛程序員。
當(dāng)你按照某種編碼規(guī)范進(jìn)行編程時(shí),必然會(huì)有某些地方讓你搖頭不爽??隙〞?huì)在某些地方你的編碼風(fēng)格會(huì)優(yōu)于這些規(guī)范。但是,這不重要。在某些地方,編碼規(guī)范也有優(yōu)于你的編程風(fēng)格的時(shí)候。但是,這也不重要。只要這規(guī)范不是完全的不可理喻,在程序的可理解性上得到的好處會(huì)大大的補(bǔ)償你的損失。
但是,如果編碼規(guī)范真的是完全不可理喻呢?
如果是這樣,那就麻煩了:你被糟蹋了。但這并不是因?yàn)檫@荒謬的編碼規(guī)范。這是因?yàn)槟阍诟蝗捍镭浺黄鸸ぷ?。想通過(guò)把編碼規(guī)范制定的足夠荒謬來(lái)阻止一個(gè)優(yōu)秀的程序員寫出優(yōu)秀的代碼,這需要努力。這需要一個(gè)執(zhí)著的、冷靜的、進(jìn)了水的大腦。如果這群蠢貨能強(qiáng)行頒布不可用的編碼規(guī)范,那他們就能干出其它很多傻事情。如果你為這群蠢貨干活,你的確被糟蹋了—不論你干什么、有沒(méi)有規(guī)范。(我并不是說(shuō)罕有公司被一群蠢貨管理;事實(shí)很不幸,我們這個(gè)世界從來(lái)就不缺蠢貨,而且很多蠢貨都擁有自己的公司。)
英文原文:Stuff Everyone Should Do (part 2): Coding Standards
相關(guān)文章
- 站點(diǎn)出于隱私的考慮不希望百度保留快照,網(wǎng)上也在不停地討論如何禁止百度保留快照的方法,那么,到底該如何禁止百度保留快照呢?本文將提供noarchive代碼禁止百度保留快照2015-12-30
2016網(wǎng)站運(yùn)營(yíng)必備插件代碼匯總
網(wǎng)站的運(yùn)營(yíng),發(fā)展到今天,網(wǎng)站通用部分的功能,很多已經(jīng)有了非常成熟的產(chǎn)品插件可以使用,比起獨(dú)立開(kāi)發(fā)的耗時(shí)、維護(hù),以及還有產(chǎn)品不成熟的風(fēng)險(xiǎn),這些網(wǎng)站的功能插件確實(shí)非2015-12-21移動(dòng)建站再現(xiàn)大招 只需要在網(wǎng)站加入一行代碼就能把PC網(wǎng)站搬到手機(jī)上
只需要在網(wǎng)站加入一行代碼,在幾個(gè)小時(shí)之內(nèi)就能擁有一個(gè)精美的手機(jī)網(wǎng)站?!這是搜狐快站最新推出的快適配即可實(shí)現(xiàn)的神奇功能。下面我們來(lái)看看它是如何使用的2014-10-24- 在CSS建站中,無(wú)論其代碼長(zhǎng)度還是文件大小都會(huì)影響到網(wǎng)頁(yè)的正確展示盒速度。那么如何來(lái)進(jìn)行CSS的優(yōu)化和驗(yàn)證呢?如果你的css水平不能夠達(dá)到自檢的程度,那么今天就和筆者一2014-10-11
SEO優(yōu)化之HTML代碼優(yōu)化最重要的5個(gè)標(biāo)簽
眾所周知,HTML代碼一直是搜索引擎抓取的重點(diǎn)。搜索引擎會(huì)將HTML中的某些元素標(biāo)簽作為影響網(wǎng)頁(yè)排名的重要依據(jù)2014-04-15SEO優(yōu)化的發(fā)展趨勢(shì)和4點(diǎn)新思路
隨著360搜索引擎的出現(xiàn),在短短一年內(nèi)360占有的份額達(dá)到了10%以上,百度為了在眾多搜索引擎中占有不敗之位,在不斷的改革中。那么針對(duì)seo未來(lái)發(fā)展之路該走向何方2014-03-16cnzz統(tǒng)計(jì)代碼引起的Bad Request - Request Too Long的原因分析
用Chrome打開(kāi)某些博客文章時(shí),會(huì)出現(xiàn)Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long.的錯(cuò)誤頁(yè)面2014-01-24- 百度在搜索結(jié)果中偏愛(ài)自己的產(chǎn)品是無(wú)用質(zhì)疑的,所以,越來(lái)越多的站長(zhǎng)決定給網(wǎng)站頁(yè)面加上百度分享代碼2013-09-24
Web開(kāi)發(fā):關(guān)于16進(jìn)制顏色代碼你又知道多少
RGB:RGB色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過(guò)對(duì)紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化以及它們相互之間的疊加來(lái)得到各式各樣的顏色的,RGB即是代表紅、綠、藍(lán)三個(gè)通道2013-08-23SEO統(tǒng)計(jì)數(shù)據(jù)分析:Google排名高的網(wǎng)頁(yè)特點(diǎn)有哪些?
什么樣的網(wǎng)頁(yè)排名較高呢?本文將提供SEO統(tǒng)計(jì)數(shù)據(jù)分析Google排名高的網(wǎng)頁(yè)特點(diǎn)匯總供大家了解,希望對(duì)大家有所幫助和啟發(fā)2016-01-28