我相信軟件開發(fā)人員都多多少少聽說過「規(guī)范」一詞缭受,如:"這段代碼很規(guī)范暮芭!"鹿驼,"這種寫法不遵守規(guī)范!"等辕宏,而隨著軟件行業(yè)的發(fā)展畜晰,各種「規(guī)范」也層出不窮,基礎(chǔ)點(diǎn)的有設(shè)計的規(guī)范如設(shè)計模式瑞筐,特定語言的規(guī)范如Java開發(fā)規(guī)范凄鼻,特定領(lǐng)域的規(guī)范如電商業(yè)務(wù)開發(fā)規(guī)范,細(xì)化點(diǎn)的有:公司的規(guī)范聚假,項(xiàng)目組的規(guī)范块蚌,甚至個性化一點(diǎn)的有個人自己的規(guī)范,前任開發(fā)人員留下來的規(guī)范等膘格∏头叮可能每個開發(fā)人員每天都會遇到各種與規(guī)范相關(guān)的抉擇,如:這些規(guī)范我應(yīng)不應(yīng)該遵守瘪贱,是不是還有些我不知道的規(guī)范需要遵守纱控,本篇想談的就是開發(fā)人員應(yīng)該如何看待并遵守規(guī)范
也許有人會說游岳,「這個還用想嗎?規(guī)范就是好的其徙,標(biāo)準(zhǔn)的胚迫,遵守就完了,想那么多干嘛唾那?」访锻,對于這種看法,我覺得不能說是完全錯闹获,因?yàn)樗辽俦韧耆恢酪?guī)范來得好期犬,但就像對一件事物的認(rèn)知經(jīng)常要經(jīng)歷「看山是山,看山不是山避诽,看山還是山」這三個階段龟虎,而認(rèn)為不管三七二十一,直接遵守規(guī)范的人應(yīng)該就處于「看山是山」這個第一階段:知道有規(guī)范這么個東西沙庐,覺得大概是好的鲤妥,那就應(yīng)該使勁用。但是拱雏,有心的人可能會多想一層:我為什么要遵守這些規(guī)范棉安?遵守了規(guī)范會帶來什么好處呢?
回答這個問題之前铸抑,我們先來看下「規(guī)范」這個詞本身的含義:
「規(guī)范」一詞本身可以指代一種「范式」或一種「標(biāo)準(zhǔn)」贡耽,表示的是對特定的事情,由前人總結(jié)出來的好的鹊汛,值得借鑒的行事準(zhǔn)則
其實(shí)通俗一點(diǎn)的意思就是前人總結(jié)的經(jīng)驗(yàn)心得蒲赂,即:在特定的場景下最好這樣做,回到為什么要遵守規(guī)范的問題刁憋,我們不妨反過來思考滥嘴,不遵循規(guī)范可以嗎?就如同剛進(jìn)入一個行業(yè)职祷,師傅把畢生經(jīng)驗(yàn)智慧傳授給你氏涩,但是你覺得太麻煩,要按自己的想法來有梆,最后的結(jié)果無外乎兩個:
- 碰得鼻青臉腫是尖,失敗而歸
- 環(huán)境變了,你還真就"亂拳打死師傅"泥耀,成功了
我想饺汹,大概率第一種的可能性比較大,而對于第二種情況痰催,要么是你運(yùn)氣比較好兜辞,要么你是不世之材迎瞧,注定改變行業(yè),創(chuàng)造規(guī)則逸吵,但這兩個可能性都很行坠琛;所以說遵守規(guī)范的好處就在于:當(dāng)我們對事物的認(rèn)知還不成熟的時候扫皱,這是成功概率最大足绅,失敗概率最小的一種做事方式,換句話說韩脑,你是菜鳥的時候就按高手總結(jié)的套路來氢妈,這個時候不用糾結(jié)太多,糾結(jié)也不一定有個所以然
而當(dāng)有一定的積累段多,有些人就會思考自己每天遵守的規(guī)范所代表的更深層次的含義首量,但由于還是一知半解,并未完全理清楚規(guī)范的本質(zhì)进苍,所以這個時候會比之前啥都不懂加缘,無腦遵守要來得糾結(jié),正所謂「看山不是山」琅捏,規(guī)范還是那些規(guī)范生百,只是你突然有些無所適從,不知道為什么要遵守柄延;一般這種情況就應(yīng)該多鍛煉多思考,多與高手溝通缀程,爭取早日達(dá)到第三階段:「看山還是山」搜吧,這個時候?qū)⑼黄泼悦#⑶覍σ?guī)范的表象到其背后的本質(zhì)都了然于胸杨凑,所謂「知其然滤奈,知其所以然」,這個時候設(shè)計開發(fā)不需要僵硬的去考慮遵循什么規(guī)范撩满,用什么設(shè)計模式蜒程,一切自然而然就呈現(xiàn)出合適的結(jié)果,即便最后發(fā)現(xiàn)出來的代碼好像不符合某些規(guī)范伺帘,大部分情況可能是這些規(guī)范不適用于你當(dāng)前的場景昭躺,也就是你自己已經(jīng)不知不覺針對這個場景創(chuàng)造出了更合適的規(guī)范
在平常的工作中,很多開發(fā)人員都停留在第一個階段伪嫁,這樣常常就導(dǎo)致一個現(xiàn)象领炫,為了遵守規(guī)范而遵守規(guī)范,如聽說要「面向抽象編程」张咳,那么好帝洪,所有的實(shí)現(xiàn)類上層都加一個接口似舵,包括很多根本無抽象需求的實(shí)現(xiàn)類;或者聽說「實(shí)現(xiàn)接口比繼承父類要好」葱峡,就完全拒絕繼承砚哗;更有甚者道聽途說了一些適用場景很窄或者完全不正確的所謂規(guī)范,不加思考砰奕,直接生搬硬套频祝,導(dǎo)致出來的代碼要么過度設(shè)計,要么匪夷所思脆淹,這都是沒有思考規(guī)范的本質(zhì)帶來的后果常空;其實(shí)規(guī)范這個東西就像是數(shù)學(xué)里的公理和定理,它們都有自己的適用范圍盖溺,使用合適了肯定會帶來正面效果漓糙,而不合適的使用會導(dǎo)致矛盾不好的結(jié)果;比如「開閉原則」這種就類似于一個普世的規(guī)范烘嘱,你應(yīng)該盡量和自己的設(shè)計開發(fā)思維融為一體昆禽,類似的有「遵循普遍接受的命名慣例」等,而像「枚舉比常量要好」蝇庭,「基本類型優(yōu)于裝箱類型」等就屬于有一定適用范圍的規(guī)范醉鳖,你應(yīng)該理解其背后的原理,再結(jié)合當(dāng)前場景判斷是否應(yīng)該遵守
說一千道一萬哮内,規(guī)范是死的盗棵,需求是活的,專業(yè)的軟件開發(fā)人員應(yīng)該盡量思考規(guī)范背后的本質(zhì)北发,這樣方可兵來將擋水來土掩纹因,反之若一味固守一套死規(guī)則,不知也不會變通琳拨,那就永遠(yuǎn)只能處于初級階段瞭恰,無法走得更遠(yuǎn)!