意識(shí)是一個(gè)思考問題的方式逊彭,缺乏意識(shí)就比較容易出現(xiàn)問題傅是,增強(qiáng)意識(shí)能夠有效避免掉進(jìn)對(duì)應(yīng)的坑中匪燕,通過知識(shí)遷移的方式闡述質(zhì)量意識(shí),鍛煉一下自己知識(shí)遷移能力喧笔。
軟件熵
熱力學(xué)定理說帽驯,封閉系統(tǒng)中的熵(混亂無序),在沒有外力的作用下书闸,只會(huì)隨著時(shí)間的增加保持不變或者增加界拦。遷移到其他領(lǐng)域內(nèi),事物沒有外力(維修)作用下梗劫,都會(huì)變老變舊享甸。
此思想運(yùn)用到計(jì)算機(jī)軟件,同樣遵循熵的原理梳侨。軟件在發(fā)展過程中蛉威,更新添加新功能不可避免,這些會(huì)增加軟件的復(fù)雜性(熵)走哺,這樣軟件也會(huì)隨著時(shí)間的推移變壞蚯嫌。在此過程中,我們會(huì)采用很多實(shí)踐活動(dòng)比如:代碼評(píng)審、架構(gòu)重構(gòu)择示、單元測(cè)試束凑、持續(xù)集成等等,最終都是為了降低軟件的復(fù)雜性(熵)栅盲。有經(jīng)驗(yàn)的工程師會(huì)有比較深刻的體會(huì)汪诉,維護(hù)一個(gè)高熵軟件比較痛苦,如果不進(jìn)行降低軟件的熵谈秫,隨意讓其發(fā)展扒寄,最終會(huì)復(fù)雜和脆弱到誰都不愿意或者不敢碰的程度,最終導(dǎo)致系統(tǒng)被廢棄拟烫。
破窗效應(yīng)
? ? ? ? 環(huán)境中的不良現(xiàn)象如果被放任存在该编,會(huì)誘使人們仿效,甚至變本加厲硕淑。一幢有少許破窗的建筑為例课竣,如果那些窗不被修理好,可能將會(huì)有破壞者破壞更多的窗戶置媳。最終他們甚至?xí)J入建筑內(nèi)稠氮,如果發(fā)現(xiàn)無人居住,也許就在那里定居或者縱火半开。一面墻,如果出現(xiàn)一些涂鴉沒有被清洗掉赃份,很快的寂拆,墻上就布滿了亂七八糟、不堪入目的東西抓韩;一條人行道有些許紙屑纠永,不久后就會(huì)有更多垃圾,最終人們會(huì)視若理所當(dāng)然地將垃圾順手丟棄在地上谒拴。這個(gè)現(xiàn)象尝江,就是犯罪心理學(xué)中的破窗效應(yīng)。
?? ? ? 軟件設(shè)計(jì)中也存在類似的現(xiàn)象英上,當(dāng)我們面對(duì)設(shè)計(jì)良好炭序,干凈整潔的代碼的時(shí)候,即使在工期與業(yè)務(wù)壓力大的時(shí)候我們也不愿意破壞代碼整潔性苍日,設(shè)想同事的代碼都遵守規(guī)范惭聂、注釋良好,如果你做不好相恃,必然遭到同事的鄙視辜纲。相反如果我們面對(duì)的是糟糕的設(shè)計(jì)、邏輯晦澀難懂、并且代碼不按照規(guī)范來耕腾,比較容易產(chǎn)生破罐子破摔的心理见剩,很快整個(gè)系統(tǒng)的代碼就會(huì)變得越來越糟糕,軟件的熵愈來愈高扫俺。
為了保持代碼質(zhì)量可持續(xù)苍苞,我們不能容忍破窗效應(yīng)在軟件開發(fā)過程中發(fā)生,還要勇于修復(fù)第一扇窗的勇氣與魄力牵舵。
技術(shù)債
出自于沃德·坎寧安之口柒啤,他首次將技術(shù)的復(fù)雜比作為負(fù)債,簡(jiǎn)稱技術(shù)負(fù)債(技術(shù)債)畸颅。軟件開發(fā)本來就是一項(xiàng)很復(fù)雜的工程没炒,所以很多人都軟件開發(fā)當(dāng)作軟件工程看待送火。開發(fā)出來的軟件是用來服務(wù)于各個(gè)領(lǐng)域(金融弃衍,醫(yī)療镜盯,購物等),我們程序員不一定能完全了解某個(gè)領(lǐng)域(術(shù)業(yè)有專攻)艺糜,所以就沒法很好的把控這個(gè)領(lǐng)域的軟件架構(gòu)破停,必然就會(huì)產(chǎn)生技術(shù)負(fù)債。技術(shù)債是無法避免的晤碘,只是產(chǎn)生技術(shù)債或多或少的問題宠蚂。
技術(shù)債可以分為三類:文檔負(fù)債(包括需求分析負(fù)債求厕、開發(fā)文檔負(fù)債、測(cè)試文檔負(fù)債)项栏;代碼負(fù)債(架構(gòu)負(fù)債、編碼負(fù)債列另、業(yè)務(wù)負(fù)債)阴绢;管理負(fù)債(工期負(fù)債旱函、人員負(fù)債、協(xié)同負(fù)債券腔、成本負(fù)債)。技術(shù)債是躲不掉的烟瞧,不還技術(shù)債的代價(jià)更高。
總之砾赔,軟件熵不可避免,需要建立軟件熵意識(shí)专普,做好架構(gòu)設(shè)計(jì)、評(píng)審、單元測(cè)試偶摔、CR瘸味、持續(xù)集成等手段降低軟件熵;在軟件開發(fā)過程中不要制造破窗效應(yīng),也不要容忍破窗效應(yīng);建立技術(shù)債意識(shí)瑰煎,迭代開發(fā)過程中要預(yù)留時(shí)間償還技術(shù)債铺然,不讓技術(shù)債隨意膨脹。