喬云
摘 要 隨著計(jì)算機(jī)產(chǎn)業(yè)的發(fā)展,大量的IT企業(yè)紛紛涌現(xiàn),程序員這種職業(yè)越來(lái)越常見(jiàn)。但是良好的編程習(xí)慣卻是每個(gè)程序員都應(yīng)該具備的工作素質(zhì)。不好的編程習(xí)慣在軟件開(kāi)發(fā)過(guò)程中留下很多的隱患,造成很多的資源浪費(fèi),加大了軟件維護(hù)的成本,有些甚至制約了整個(gè)系統(tǒng)的生命力。探討糟糕的編程習(xí)慣帶來(lái)的危害,并希望能引起廣大程序員的共鳴,共同關(guān)注代碼習(xí)慣的養(yǎng)成。
關(guān)鍵詞 代碼習(xí)慣 軟件開(kāi)發(fā) 編程習(xí)慣 危害
中圖分類(lèi)號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A
0緒論
隨著計(jì)算機(jī)以及智能手機(jī)的發(fā)展,軟件應(yīng)用已經(jīng)完全進(jìn)入人們的日常生活,與之相對(duì)應(yīng)的,產(chǎn)生了大量的軟件開(kāi)發(fā)、升級(jí)、維護(hù)工作,而在這龐大的工作之余,缺陷的修改、版本的維護(hù)、版本回退、客戶(hù)的個(gè)性化需求,還有由于開(kāi)發(fā)團(tuán)隊(duì)的人員變動(dòng)等等因素引起的代碼維護(hù)問(wèn)題,對(duì)任何一個(gè)程序員來(lái)說(shuō),都是不可避免的問(wèn)題。每個(gè)程序員都不可避免的要去讀別人的代碼,改別人的代碼,所以,面對(duì)糟糕的代碼就像面對(duì)一個(gè)打結(jié)的毛線(xiàn)團(tuán),處處不敢動(dòng),處處看不透。也許本來(lái)是來(lái)改bug的,結(jié)果卻留下了更大的隱患。所以良好的編程習(xí)慣,是每個(gè)程序員都應(yīng)該具備的工作素質(zhì)
1常見(jiàn)的錯(cuò)誤代碼習(xí)慣以及其危害
1.1堅(jiān)決不動(dòng)原代碼,永遠(yuǎn)添加新方法
這種情況在開(kāi)發(fā)團(tuán)隊(duì)人員變動(dòng)大的情況下非常常見(jiàn)。因?yàn)樽畛醯拈_(kāi)發(fā)人員都不在了,后來(lái)的程序員是在一個(gè)很大的代碼平臺(tái)上做后續(xù)的開(kāi)發(fā)。這種情況下要做的第一件事當(dāng)時(shí)是讀代碼,但是讀起來(lái)卻費(fèi)時(shí)費(fèi)力,而每每要調(diào)整或者實(shí)現(xiàn)的功能看起來(lái)卻又不復(fù)雜,所以就更加懶得讀,所以直接添加了新方法,將調(diào)用接口改到新方法上了事。當(dāng)然還有一種情況就是不敢去動(dòng)原方法,因?yàn)椴恢烙袔滋幷{(diào)用這個(gè)方法,怕出現(xiàn)牽一發(fā)動(dòng)全身的情況,一個(gè)小修改,導(dǎo)致其他的問(wèn)題,所以最穩(wěn)妥的就是添加新方法。但是這種代碼習(xí)慣的危害顯而易見(jiàn):
(1)增大了后續(xù)的維護(hù)成本。面對(duì)一個(gè)功能類(lèi)似的程序和面對(duì)一堆功能類(lèi)似的程序,哪個(gè)更輕松是顯而易見(jiàn)的,而且,這樣的解放方法會(huì)讓其他的程序員迷惑,功能類(lèi)似,卻個(gè)個(gè)不同,調(diào)用的人迷茫,維護(hù)的人困惑。
(2)嚴(yán)重的代碼冗余。代碼冗余的危害是眾所周知的,暫且不提效率問(wèn)題以及無(wú)意間的代碼耦合等等,單說(shuō)無(wú)用的代碼,卻增大了系統(tǒng)崩潰的可能性,就可以直接說(shuō)明精簡(jiǎn)代碼的必要性了。
(3)降低了軟件的可維護(hù)性,養(yǎng)成糟糕的代碼習(xí)慣。這樣的維護(hù)方式維護(hù)起來(lái)的代碼就像是一個(gè)亂搭起來(lái)棚子,沒(méi)有一處敢輕易的修改,系統(tǒng)脆弱,而且隨著時(shí)間的推移,其維護(hù)越來(lái)越困難,而且也養(yǎng)成的很不好的代碼習(xí)慣,不讀代碼,圖一時(shí)清閑,埋下大的隱患。
1.2無(wú)規(guī)范,無(wú)備注
關(guān)于代碼的規(guī)范已經(jīng)是老生常談了,相信每一個(gè)老程序員都會(huì)告訴你一大堆代碼規(guī)范的好處,易讀,便于維護(hù),不易出現(xiàn)混亂與bug,有助于促進(jìn)團(tuán)隊(duì)合作,方便代碼審查等等。同時(shí)代碼備注同樣的重要。而且是代碼不可或缺的一部分,或者換句話(huà)說(shuō),是規(guī)范的代碼不可獲取的一部分。我們寫(xiě)一個(gè)方法或一個(gè)類(lèi),通過(guò)標(biāo)準(zhǔn)的備注告訴以后的自己或者將來(lái)的維護(hù)人員這段代碼做了什么或者定義了什么,用到了什么對(duì)象,輸出了什么對(duì)象,易讀性和效率是不是大大的提高了?而且也可以避免出現(xiàn)大量的相同定義、相同方法。我們?cè)陂_(kāi)發(fā)中使用到的大量的幫助文檔,就是這些標(biāo)準(zhǔn)的備注,我們?cè)陂_(kāi)發(fā)中享受了前人優(yōu)秀備注帶來(lái)的好處,為什么不能也把自己的代碼變成可方便別人的代碼,況且,與人方便,與己方便呢。但是很多剛?cè)胄械某绦騿T不喜歡在代碼里加備注,覺(jué)得麻煩,覺(jué)得自己完成了自己的模塊,自己清楚就行,哪里需要給自己留說(shuō)明。卻忘了軟件是個(gè)整體,模塊,類(lèi),方法之間的相互調(diào)用本就稀松平常,況且,躺在代碼行里的備注永遠(yuǎn)躺在代碼行里,而躺在腦海中的備注卻會(huì)在日復(fù)一日的工作中去留無(wú)蹤。無(wú)備注,無(wú)規(guī)范完全是害人害己的代碼習(xí)慣。
1.3無(wú)視架構(gòu),恣意發(fā)揮
代碼就是要實(shí)現(xiàn)功能,這本身沒(méi)有錯(cuò),但是有些人完全無(wú)視架構(gòu),不管是表現(xiàn)層,還是業(yè)務(wù)邏輯層,反正要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),就寫(xiě)sql。有些代碼甚至在頁(yè)面上都有直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的方法。架構(gòu)混亂,一樣導(dǎo)致代碼難讀,不可復(fù)用,甚至影響安全性。
1.4其他錯(cuò)誤的代碼習(xí)慣
還有很多錯(cuò)誤的代碼習(xí)慣,如:學(xué)會(huì)一招,就開(kāi)始一招鮮吃遍天,不管方法是不是適合系統(tǒng),硬塞方法進(jìn)去。再比如有的程序員隨意修改別人和過(guò)往的代碼,不去問(wèn),不去好好的讀,上手就大刀闊斧,一路改,一路留bug,不問(wèn)前人為什么這么寫(xiě),抬手就給改了,導(dǎo)致到處是隱患,到處留后門(mén)。再比如,不愛(ài)自查代碼,增大代碼測(cè)試壓力,而且容易遺留問(wèn)題。
2結(jié)論
以上是從事了五年的軟件開(kāi)發(fā)所汲取經(jīng)驗(yàn)和教訓(xùn),要杜絕這樣的現(xiàn)象,除了要加強(qiáng)管理,程序員的自我修煉也顯得尤其重要。其實(shí)很多人并不是故意要這樣,而是受自身的限制。作為管理者要不斷地教育和敦促程序員,程序員也要注意不斷地學(xué)習(xí),培養(yǎng)自己的編程意識(shí)和素質(zhì),同樣要培養(yǎng)自己對(duì)產(chǎn)品負(fù)責(zé),對(duì)項(xiàng)目負(fù)責(zé),對(duì)同事負(fù)責(zé),對(duì)自己的工作負(fù)責(zé)的態(tài)度和榮譽(yù)感。
參考文獻(xiàn)
[1] 劉玉.當(dāng)代程序員的基本素質(zhì)與能力[J].河北職業(yè)技術(shù)學(xué)院學(xué)報(bào),2004(03).
[2] 左輕侯.如何成為一名優(yōu)秀的程序員[J].程序員,2006(03).
[3] 蘇亞麗,李淑英,陳剛.論程序設(shè)計(jì)中良好編程風(fēng)格的運(yùn)用與分析[J].玉溪師范學(xué)院學(xué)報(bào),2010(08).