為什么軟件團(tuán)隊(duì)要有編碼規(guī)則? Why coding standard?

第一個(gè)問題


幾乎所有人類慌闭,在接觸到一個(gè)需要遵循的新行為準(zhǔn)則的時(shí)候,都會問一個(gè)問題:“為什么我們要遵守這個(gè)第献?”或者是其某種更具排斥性的變體:“這東西到底有什么用贡必?不遵守這個(gè)又會怎么樣?”

“為什么過馬路要走人行橫道庸毫?”

“為什么開車不能闖紅燈仔拟?”

“為什么醫(yī)生要勤洗手消毒?”

“為什么生熟菜板和刀具要分開使用飒赃?”

……

從心理學(xué)上講利花,任何新的制度限制,哪怕只是一點(diǎn)點(diǎn)小的操作方式改動载佳,都會在初期給你帶來很強(qiáng)大的排異心態(tài)(本寶寶就是不想把玩具收回箱子里……)炒事。其原因是新的規(guī)范將你拖離了自己熟悉的舒適區(qū),帶來了強(qiáng)烈的不安全感蔫慧。

簡單說就是不習(xí)慣挠乳,不舒服。(嗯姑躲,真正的公主睡扬,哪怕壓在這二十層床墊子和二十床鴨絨被下面的一粒豌豆,她都能感覺出來黍析。)


寶寶就不想吃卖怜!

而在產(chǎn)品研發(fā)中,看起來更有水準(zhǔn)的質(zhì)問會來自于有經(jīng)驗(yàn)的工程師:

“創(chuàng)意源于自由阐枣,這東西會限制更靈活的程序?qū)崿F(xiàn)”

“我這樣做雖然不符合規(guī)范马靠,但絕對的高效和沒問題”

“我的經(jīng)驗(yàn)足以避免和處理這些問題,沒必要設(shè)立什么規(guī)范”

……

好吧蔼两,你是否已經(jīng)聽出了你身邊諸位大神們?nèi)缦碌臐撘庾R甩鳄?

“你們這些愚蠢的人類才需要遵守規(guī)范”

“編碼規(guī)范是新人的腳手架,對我這樣會飛的人沒什么用”

“我已經(jīng)這么忙了還搞這些雞毛蒜皮的【馬賽克】浪費(fèi)時(shí)間宪哩。你【馬賽克】是仇家派來折騰我的么娩贷?”

……

有一篇來自于谷歌前計(jì)算機(jī)科學(xué)家 Mark Chu-Carroll的短文能夠很好的回應(yīng)這些murmur。有興趣可以點(diǎn)擊去接受一次噴洗锁孟。

Stuff Everyone Should Do (part 2): Coding Standards(中文譯文在這里)彬祖。

好的茁瘦,把頭發(fā)吹干,看看使用編碼規(guī)范的最簡單的理據(jù)储笑。



編碼規(guī)范的簡單經(jīng)濟(jì)原理


最簡單的理據(jù)甜熔,往往來自于最樸素的經(jīng)濟(jì)追求:這里有利潤

分析編碼規(guī)范的成本很直接突倍。編寫推廣學(xué)習(xí)腔稀、部署改進(jìn)工具,代碼走查關(guān)注是否違例羽历,所有這些花費(fèi)在編碼規(guī)范上的時(shí)間的綜合焊虏,就是編碼規(guī)范的成本。

而從編碼規(guī)范中獲得的收益相對間接和持久秕磷,是通過對你投入軟件活動中的時(shí)間的精簡诵闭,通過軟件活動中的一系列溝通活動和質(zhì)量成果逐漸展現(xiàn)出來。

很確定的是澎嚣,堅(jiān)持編碼規(guī)范所帶來的收益能夠遠(yuǎn)遠(yuǎn)高于它的成本疏尿。它為你節(jié)約的時(shí)間,能遠(yuǎn)遠(yuǎn)大于你花在它上面的時(shí)間易桃。

能賺錢的就是好生意褥琐!

這絕對是一筆好生意。

能提高代碼可讀性晤郑。

遵守相同編碼規(guī)范的代碼敌呈,常常看起來就像是一個(gè)人寫出來的一樣造寝。具有相同的風(fēng)格是降低學(xué)習(xí)曲線的有效方式驱富。當(dāng)你新到一個(gè)具有編碼規(guī)范的公司,讀懂某幾個(gè)函數(shù)或模塊的寫作方式后匹舞,常常代表你可以快速讀懂相同規(guī)范的所有代碼了。

能減少人與人之間的溝通成本

理解并遵守相同編碼規(guī)范的人线脚,就像在講同一種語言赐稽,溝通會快速而準(zhǔn)確。而在發(fā)生編碼風(fēng)格沖突的時(shí)候(不用懷疑浑侥,程序員之間的風(fēng)格沖突是永恒的……)姊舵,編碼規(guī)范將會作為仲裁的最終依據(jù),減少溝通的無效消耗寓落。

能提高代碼質(zhì)量

合理的編碼規(guī)范幾乎每一條都會針對一個(gè)在編程世界里常見的技術(shù)問題括丁。在實(shí)踐中應(yīng)用編碼規(guī)范,就像是常備了一位高水準(zhǔn)的代碼審查者伶选,能幫助你規(guī)避很大比例的常見問題史飞。

簡單的來說尖昏,在一句If語句中錯(cuò)誤的使用了賦值(=)而不是判等(==),可能會帶來一個(gè)隱藏超過一年的bug构资,在特定的客戶機(jī)房抽诉,花費(fèi)你超過一個(gè)月的調(diào)試時(shí)間才能解決。釋放一塊內(nèi)存后指針沒有清零吐绵,可能會帶來內(nèi)存的第二次釋放導(dǎo)致系統(tǒng)崩潰迹淌。變量沒有初始化,可能會在函數(shù)棧的多次值傳遞后己单,將程序引入一個(gè)未知的隨機(jī)態(tài)……

這許許多多的常見錯(cuò)誤唉窃,都可以通過在頭腦中的強(qiáng)烈規(guī)范意識,以及嚴(yán)格的代碼規(guī)范審查所避免纹笼。(我不太喜歡用“低級錯(cuò)誤“這個(gè)詞纹份,因?yàn)閷?shí)際上幾乎所有的程序錯(cuò)誤都是”低級錯(cuò)誤“。)

能為團(tuán)隊(duì)工作建立腳手架

團(tuán)隊(duì)允乐,需要規(guī)范矮嫉。

在所有的團(tuán)隊(duì)中,不是每一個(gè)成員牍疏,都擁有相同的知識領(lǐng)域蠢笋、教育程度、行業(yè)背景鳞陨、項(xiàng)目經(jīng)驗(yàn)昨寞,從而不是每一個(gè)成員,有著相同的思維深度厦滤、隱喻哲學(xué)和學(xué)習(xí)能力援岩。

建立合理的規(guī)范,可以建立團(tuán)隊(duì)在技術(shù)上溝通的模式掏导,前文已提及享怀,更重要的是,還可從團(tuán)隊(duì)內(nèi)部趟咆,重(chóng)用已有的程序智慧添瓷,為成員提供了有高度的腳手架,避免成員個(gè)體在程序設(shè)計(jì)上特定弱點(diǎn)所帶來的質(zhì)量短板值纱。

團(tuán)隊(duì)中個(gè)人的優(yōu)勢能力決定了團(tuán)隊(duì)的質(zhì)量能力的上限鳞贷,而編碼規(guī)范的執(zhí)行,則決定了團(tuán)隊(duì)代碼質(zhì)量的下限虐唠。

能節(jié)約智力投入

還記得在你在遙遠(yuǎn)的中學(xué)時(shí)期嗎搀愧?英文考試的倒數(shù)第二題永遠(yuǎn)是找茬題:給十多行英文讓你找錯(cuò)。

很快你就自己總結(jié)了一個(gè)檢查表,包括在試卷上出現(xiàn)過的所有錯(cuò)誤類型(單復(fù)數(shù)錯(cuò)誤咱筛、時(shí)態(tài)錯(cuò)誤搓幌、介詞錯(cuò)誤……),此后考試時(shí)對每一行都遍歷一遍檢查表眷蚓,基本上快準(zhǔn)狠鼻种。自然而然的找你妹的題就變成了完全不花智商的按圖索驥送分題。

編碼規(guī)范就是這樣的一個(gè)檢查表沙热,它必然是程序世界和公司經(jīng)驗(yàn)的知識沉淀物叉钥,它能幫助你減少思考的密集程度,將最重要的智力資源投入到真正需要你去設(shè)計(jì)和關(guān)注的核心點(diǎn)上篙贸。

你不用再在多種程序風(fēng)格中進(jìn)行翻譯和映射投队,因?yàn)橹挥幸环N程序風(fēng)格。你看一眼函數(shù)名就知道它是做什么用的來自于什么模塊爵川,你看一眼變量名就知道它是什么內(nèi)容大概應(yīng)該是什么類型敷鸦。

你不用再去思考變量的初值,因?yàn)樽兞康某踔悼傇诙x的時(shí)候有說明寝贡,對整數(shù)來說大多是0扒披,對指針來說大多是NULL。

你不用再去思考來自于外部的一個(gè)buffer是否需要你去釋放圃泡,或者你定義的buffer應(yīng)該在什么地方去釋放碟案。

……

是的,我們希望在一切在程序世界里可能有爭議的地方颇蜡,或者完全沒有爭議的地方价说,都有我們自己的規(guī)定和習(xí)俗。

讓軟件工程師在最常見的程序過程中沿襲習(xí)俗风秤,在關(guān)鍵和艱難的創(chuàng)新點(diǎn)上靈活創(chuàng)新鳖目,繼而充分的用80%以上的智力來解決20%的核心問題。這才是對軟件工程師團(tuán)隊(duì)的最大效率提升缤弦。(請把你積攢的每一點(diǎn)怒氣都用在釋放大招上A炻酢)



巴比倫之塔


110V和220V的電壓哪一個(gè)更科學(xué)合理??不同的人有不同的理據(jù)碍沐,不同的國家有著不同的標(biāo)準(zhǔn)惦费。沒有誰能說服誰。

同樣抢韭,縮進(jìn)是4個(gè)空格還是2個(gè)空格?函數(shù)體左邊花括號應(yīng)該在行尾還是在行首恍箭?注釋應(yīng)該用“/**/”還是用“//”?

這些問題軟件行業(yè)中有著永恒的爭論刻恭。這些爭論是宗教狂熱信仰式的,也許直到人類滅絕或太陽熄滅也不會有結(jié)論。

可能采用這些爭論中的任何一個(gè)答案都是okay的鳍贾,或從成本收益的角度判斷鞍匾,其區(qū)別微乎其微。為了建設(shè)團(tuán)隊(duì)內(nèi)部溝通的巴比倫之塔骑科,為了代碼的可讀性橡淑,公司、項(xiàng)目咆爽、模塊梁棠,其內(nèi)部一定要有統(tǒng)一的答案。

略帶諷刺意味的是斗埂,常作為全人類之間無障礙溝通標(biāo)志的巴比倫之塔符糊,居然也有巴別塔,巴貝塔呛凶、巴比倫塔男娄、通天塔等多個(gè)中文名。但對于一條具體的編碼規(guī)范漾稀,我們不能留下任何爭論模闲,只能有確定的結(jié)論。即崭捍,我們需要選擇一個(gè)答案執(zhí)行尸折。

在執(zhí)行過程中,如果你對已經(jīng)制定的編碼規(guī)范還有任何疑惑缕贡,唯一的處理方式是:給出足夠強(qiáng)的理由翁授,說服所有人,修改或者拋棄晾咪。當(dāng)你找到的理據(jù)不夠強(qiáng)大還無法說服大家時(shí)收擦,請把那個(gè)撅著嘴的小孩放在心里,嚴(yán)格遵守團(tuán)隊(duì)現(xiàn)有的規(guī)范谍倦。

它一定能幫到你塞赂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昼蛀,隨后出現(xiàn)的幾起案子宴猾,更是在濱河造成了極大的恐慌,老刑警劉巖叼旋,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仇哆,死亡現(xiàn)場離奇詭異,居然都是意外死亡夫植,警方通過查閱死者的電腦和手機(jī)讹剔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門油讯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人延欠,你說我怎么就攤上這事陌兑。” “怎么了由捎?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵兔综,是天一觀的道長。 經(jīng)常有香客問我狞玛,道長软驰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任为居,我火速辦了婚禮碌宴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒙畴。我一直安慰自己贰镣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布膳凝。 她就那樣靜靜地躺著碑隆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹬音。 梳的紋絲不亂的頭發(fā)上上煤,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機(jī)與錄音著淆,去河邊找鬼劫狠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛永部,可吹牛的內(nèi)容都是我干的独泞。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼苔埋,長吁一口氣:“原來是場噩夢啊……” “哼懦砂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起组橄,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤荞膘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后玉工,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羽资,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年遵班,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了削罩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞄勾。...
    茶點(diǎn)故事閱讀 38,768評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弥激,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愿阐,我是刑警寧澤微服,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站缨历,受9級特大地震影響以蕴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辛孵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一丛肮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魄缚,春花似錦宝与、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嚼隘,卻和暖如春诽里,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飞蛹。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工谤狡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卧檐。 一個(gè)月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓墓懂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泄隔。 傳聞我的和親對象是個(gè)殘疾皇子拒贱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,851評論 25 707
  • 1月25日,我的一天之2017年的第1次寫計(jì)劃佛嬉。 (啦啦啦逻澳,啦啦啦,我又回來了E弧) 今天我就來講講斜做,在2017年,...
    Sernedipity閱讀 338評論 0 3
  • 分享一篇不錯(cuò)的文章湾揽。
    梅梅吖閱讀 313評論 0 0
  • 劉伶醉 文/米修 朝廷問策瓤逼,劉伶上書建議無為而治笼吟,晉武帝嗤之。...
    一休知米閱讀 1,692評論 1 5
  • 這篇文章主要包括iOS藍(lán)牙開發(fā)的簡介以及如果進(jìn)行藍(lán)牙開發(fā), 具體的藍(lán)牙知識不再詳細(xì)介紹了. iOS藍(lán)牙開發(fā)的實(shí)現(xiàn)基...
    superLee閱讀 676評論 3 11