編碼規(guī)范是技術(shù)上的遮羞布
每個(gè)程序員都知道,在一個(gè)軟件公司里,你需要有一套嚴(yán)謹(jǐn)?shù)木幋a規(guī)范。每個(gè)程序員也都知道,為了能按自己的編程習(xí)慣制訂這套規(guī)范,每個(gè)程序員都在而抗?fàn)帯傔M(jìn)入一個(gè)新公司時(shí),每個(gè)程序員都會(huì)內(nèi)心里絕望,對(duì)那套由某些強(qiáng)勢(shì)架構(gòu)師獨(dú)斷指定的編碼規(guī)范恐懼不已。
扔掉編碼規(guī)范吧,讓程序員自由發(fā)揮,你會(huì)得到更多的好處。從加強(qiáng)代碼統(tǒng)一性上獲得的這點(diǎn)勝利根本解決不了問(wèn)題。編碼規(guī)范就是技術(shù)上的遮羞布。在 nearForm 公司,我從來(lái)沒(méi)有想過(guò)要制定一個(gè)這樣的規(guī)范,因?yàn)槲蚁M總€(gè)人都只需按照自己喜歡的方式編程。
這世界太吵鬧了。JavaScript的復(fù)興要為此負(fù)全責(zé)。尤其有一個(gè)“特征”:可有可無(wú)的分號(hào)。無(wú)數(shù)的主張,猜想和反對(duì)聲鋪天蓋地。停止,去實(shí)際寫(xiě)些代碼好嗎。你知道我在說(shuō)誰(shuí)。
本意是好的,各路程序員大仙發(fā)布各種JavaScript編碼規(guī)范和風(fēng)格指導(dǎo)。你們?nèi)e(cuò)了。請(qǐng)停止這種要去拯救這個(gè)世界的行為。
編碼規(guī)范從何來(lái)?過(guò)程是這樣的:在你開(kāi)始編碼時(shí),你跟本不知道會(huì)做出什么。這充滿樂(lè)趣,這是一場(chǎng)游戲,直到你弄瞎一只眼睛。一旦你被自己垃圾的代碼傷了太多次,你開(kāi)始知道你是個(gè)菜鳥(niǎo)。于是你開(kāi)始走上了通往編程大師的道路,你貪婪的咀嚼《代碼大全》, 《程序員修煉之道》,當(dāng)然,還有 Joel。
之后,事情開(kāi)始發(fā)生了。在通往朝圣的路上,你參透了真經(jīng)。滿腹的技藝讓你成為了編程巨星。你的開(kāi)發(fā)效率整整翻了一倍。現(xiàn)在,你要向世界傳播。讓你有今天成就 的知識(shí)也同樣能拯救他人。你籠絡(luò)人心,你傳道,你糾纏不休。你訓(xùn)導(dǎo)你的老板要采用最好的實(shí)踐方法和開(kāi)發(fā)規(guī)范。而最不可饒恕的,你竟然開(kāi)始寫(xiě)博客了。
大多數(shù)程序員從來(lái)不發(fā)聲。那些喜歡弄出聲響的,都晉升了。你晉升了。你把你絕頂聰明的想法強(qiáng)加給他人。你編寫(xiě)了一套編碼規(guī)范,你讓它成為了法律。
可之后,一切如舊。同樣苦干,同樣最后期限迫在眉睫,同樣bug無(wú)數(shù),同樣悲慘結(jié)局。銀彈跟本不存在。
幾年后,你不再編碼,你成為了管理者。你仍然認(rèn)定編碼規(guī)范,條律,制度的至關(guān)重要。關(guān)鍵就在于正確的實(shí)施。你從來(lái)都沒(méi)有真正的做到過(guò),但你堅(jiān)持要實(shí)現(xiàn)這個(gè)目標(biāo)。不僅如此,你變本加厲。代碼量化標(biāo)準(zhǔn)!作為一個(gè)管理者,你成了痛苦的化身。
也許事情可能會(huì)向另外一個(gè)方向發(fā)展。也許你重新回去編程,或從未離去。經(jīng)過(guò)一段時(shí)間,你發(fā)現(xiàn)自己如此無(wú)知,所有你的夢(mèng)想都建立在沙灘上。你放棄了,你放棄了給程序員制訂枷鎖。這是另一層次的參悟。
至此,你認(rèn)識(shí)到,人不是機(jī)器。人需要把智慧發(fā)揮到極致。你應(yīng)該丟掉枷鎖,獲取最大創(chuàng)造。
可為什么那些最聰明的程序員的做法卻完全的相反?為什么他們喜歡控制其它程序員?是什么讓他們?nèi)绱霜?dú)裁?
首先,你想把你的經(jīng)驗(yàn)傳授給他人。但并非每個(gè)人的思維都跟你一樣。人的大腦是十分怪異的。
第二,控制別人的感覺(jué)良好。但這不可能真正有效的。你不能命令程序員去做什么。貓不是圈養(yǎng)出來(lái)的。
第三,你逃避責(zé)任。團(tuán)隊(duì)中的所有人都這樣。我們遵守了規(guī)范!項(xiàng)目失敗了。沒(méi)錯(cuò),可是我們是遵守了規(guī)范!
第四,好的意愿;最佳實(shí)踐;很專業(yè);很技術(shù)——誘人的開(kāi)發(fā)過(guò)程。你仍在追逐你8歲時(shí)想摘到的那顆星星。但是,編程大師如何判斷一件事的成敗?看結(jié)果,這是唯一的標(biāo)準(zhǔn)。
第五,理想主義,你認(rèn)為你理解整個(gè)世界,整個(gè)世界要尊崇你的意志。我們?nèi)祟愑行┦虑榉浅5脑谛?hellip;.但那是在一萬(wàn)次的失敗之后,一萬(wàn)次重復(fù)的失敗。軟件工程就是其中之一,不是有了規(guī)范就萬(wàn)事大吉的。
而最糟糕的不是這些。萬(wàn)惡之首是,只要你具有上面的任何一點(diǎn),你最終就會(huì)制定出一套編碼規(guī)范。
編碼規(guī)范真正的罪惡在于,它們?cè)趥愕男模瑐麄€(gè)團(tuán)隊(duì)的心。它們是一種耳語(yǔ)在說(shuō)你不夠優(yōu)秀。他們不信任你。沒(méi)有監(jiān)管,你會(huì)搞的一團(tuán)糟。
一年前我們開(kāi)創(chuàng) nearForm 公司,我們最在意的一件事就是要為客戶寫(xiě)出最優(yōu)秀的程序。在早先,我們嘗試過(guò)所有的開(kāi)發(fā)過(guò)程、方法、制度規(guī)范。所有都讓人討厭。沒(méi)有一樣真正起到作用。
于是我們開(kāi)始實(shí)施這樣的原則:相信我們的程序員是最有智慧的。這起作用了。
我希望所有人都能寫(xiě)出整潔優(yōu)秀的代碼。你自己判斷這指的是什么。如果在代碼臟亂、變量名不一致的情況下你還能安穩(wěn)的睡大覺(jué),這你自己決定。但你知道,也許這只是一個(gè)100行的用node.js寫(xiě)微型server,無(wú)關(guān)緊要。這你自己決定。
這你的責(zé)任,因?yàn)槟阋幻绦騿T。
原文鏈接:www.richardrodger.com/2012/11/03/why-i-have-given-up-on-coding-standards/
譯文鏈接:http://www.aqee.net/why-i-have-given-up-on-coding-standards/