編碼規(guī)范可能只是一塊遮羞的破布。。。
分享王工的一篇文章,前方觀點可能與你有沖突
據(jù)說,趙國的首都邯鄲的人走路的姿態(tài)很好看,動作非常優(yōu)雅、輕快。燕國有一個少年聽到這個傳說,非常羨慕邯鄲人,就走了很遠的路去趙國,想學習邯鄲人走路的方法。剛開始,他整天站在街頭,仔細研究每個人走路的姿態(tài),再慢慢模仿他們,可是都沒有成功。后來,他想可能是受到過去走路習慣的影響,所以,他決定要忘掉以前走路的方法。從那時候起,他更專心研究邯鄲人走路的姿勢,不過,再怎么努力他還是學不會,最后他只好放棄??墒?,因為他把以前走路的方法忘得一干二凈,已經不知道該怎么走路,只好一路爬著回去。http://www.hydcd.com/cy/gushi/0236hd.htm
不知不覺間,代碼也寫了二十余載,我已成精了。借著過來人的身份和語氣,有一件事情我一直都特別喜歡吐槽:無論過去多少年,中國的嵌入式軟件開發(fā)者群體似乎一直對一個叫做“編碼規(guī)范”的東西趨之若鶩,仿佛是什么了不得的武林秘籍,學會了就可以叱咤武林讓讓人不敢小覷;又亦或是什么內功心法,需要每日研讀或與它人細細品讀交流,以求它日可以參透其中奧秘,從此內力大增,用心跳就可以虐死對手。
君不見,曾幾何時《某為編程規(guī)范》在網(wǎng)上被廣泛傳抄,互聯(lián)網(wǎng)時代雖然無法“洛陽紙貴”,卻曾經引得某公司的公關部門到處發(fā)函讓站長們刪帖;時過境遷,雖然某為的編程規(guī)范也不至于熱度全無,但對冠名于國外大廠大公司的編碼規(guī)范的追捧卻已悄然成為當下的熱門——仿佛如果說不出自己使用的規(guī)范來自哪個大門派,都不好意思跟人家打招呼。
可拉倒吧!
在兄弟們浪費太多時間之前,可曾了解過自己苦苦追尋和模仿的究竟是個什么東西?
【編碼規(guī)范的本質是什么?】要理解編碼規(guī)范的本質,其實并不復雜:
- 編碼規(guī)范是在一定范圍內強制推行的編碼習慣;這里的編碼習慣通常來自于對團隊有控制力的一個或者少數(shù)幾個人。
這里,你會很容易注意到三個關鍵字:“一定范圍”、“強制推行”和“編碼習慣”。抓住這三點,編碼規(guī)范的本質就像“任意不在同一直線上的三點確定一個平面”一樣——沒得跑了。
首先來說說這個“編碼習慣”,其實很好理解,它就是字面意思——一個人寫代碼時候的某種習慣,高情商叫風格,低情商叫“我就愛這么干,別問我為啥,我要么不知道,要么等我編個理由告訴你”。總之呢,編碼習慣帶有強烈的主觀性、基本上可以認為缺乏強有力的客觀依據(jù),在穩(wěn)定性和一致性方面其實就是水中花鏡中月——不能說完全沒有,只能說毫無可信度。
不信么?今天你看了一個大牛的代碼,覺得:
“哇!好牛逼”,“大牛這么做一定有什么深意”
然后不自覺的就學著人家的編碼規(guī)范來了。過了幾天,你可能又碰到了另外的大牛,或者是什么明星開源項目……咋說呢……如果用男女關系來形容兄弟們的行為,那就是妥妥的渣男/渣女——沒得洗。
你跟我說說,哪兒來的穩(wěn)定性和一致性?還不如先問問“你是誰的粉”比較靠譜。
很多時候,一個程序員自己的編碼習慣可能一輩子都沒有鯉魚躍龍門——成為編碼規(guī)范的機會;但如果有朝一日,你滿足了以下兩個條件,你的編碼習慣就是妥妥的編碼規(guī)范了:
- 擁有了一個完全由自己掌控的團隊或者項目;
- 擁有了執(zhí)行決定的強制力;(比如KPI審核,扣工資之類)
此時,只要你樂意,完全可以在“你控制的范圍內”“強制”推行你自己的編碼習慣——恭喜你,一個只屬于你的編碼規(guī)范就誕生了。
【編碼規(guī)范的“原罪”】搞懂了編碼規(guī)范誕生的原因,接下來很自然的,就要聊一聊伴隨編碼規(guī)范一起誕生的“原罪”了。
要理解什么是編碼規(guī)范的原罪,首先必須要講清楚“編碼規(guī)范”(或者說“遵守編碼規(guī)范”)的意義。然而,有些東西你非要向字典一樣去從正面解釋往往非常抽象,但稍微打個比方,就簡單明朗了——實際上:
編碼規(guī)范的作用幾乎完全等效于人類自然語言文字中的書法。
簡單說,編碼習慣就是關于“你如何寫字的”,而編碼規(guī)范就是“一群人所遵守的書法風格”。這么一比方,也許你立馬注意到了:
- 無論是編碼規(guī)范還是編碼習慣,都只跟描述“你寫字丑不丑”、“漂不漂亮”的一個“主觀性非常強的”、甚至還帶有“藝術性玄學”的評價標準有關;
- 我們日常寫代碼其實可以類比為寫文章,這意味著:
- 你可以用非常漂亮的手寫體寫出狗屁不通的文章;
- 你也可以在趕時間的情況下,用一種只有自己看得懂的方式,快速而高效的寫出優(yōu)秀的作品;
- 書法除了草書,往往暗示著——費時間;何況草書往往暗示著,除了那幾個評論家,普通人基本看不懂。
- 書法好壞和寫文章所需的遣詞造句的技法,以及文章整體的修辭、結構安排完全無關。
說的再直白一點:當你在追求“如何寫出精修文章時”,追求“書法”,是淺薄的,而且毫無意義的。當你在追求如何寫出好的程序時,你需要的是數(shù)據(jù)結構、算法、操作系統(tǒng)、軟件工程、設計模式、開發(fā)思維之類的知識,而不是關于如何把代碼寫的多么漂亮,多么“規(guī)范”的書法——或者說表面功夫。認真說起來,連這里“怎樣算作代碼寫的規(guī)范”,從一開始就只是某幾個人的主觀概念罷了。
正如景秀文章往往也是用賞心悅目的書法寫出來的;注重表面的編碼規(guī)范也并非是什么大罪大惡需要我們棄之如糞土。要知道這其中區(qū)別,就必須要談一談編碼規(guī)范的原罪。
- 原罪1:膚淺引戰(zhàn)的導火索