大家或許都聽(tīng)說(shuō)過(guò)這么個(gè)說(shuō)法:如果有人打壞了一幢建筑物的窗戶(hù)玻璃,而這扇窗戶(hù)又得不到及時(shí)的維修,別人就可能受到某些示范性的縱容去打爛更多的窗戶(hù)。
這便是所謂的“破窗效應(yīng)”膘婶,它有真實(shí)的理論由來(lái):美國(guó)斯坦福大學(xué)心理學(xué)家菲利普·津巴多于1969年進(jìn)行了一項(xiàng)實(shí)驗(yàn),他找來(lái)兩輛一模一樣的汽車(chē)蛀醉,把其中的一輛停在加州帕洛阿爾托的中產(chǎn)階級(jí)社區(qū)悬襟,而另一輛停在相對(duì)雜亂的紐約布朗克斯區(qū)。停在布朗克斯的那輛滞欠,他把車(chē)牌摘掉古胆,把頂棚打開(kāi)肆良,結(jié)果當(dāng)天就被偷走了筛璧。而放在帕洛阿爾托的那一輛,一個(gè)星期也無(wú)人理睬惹恃。后來(lái)夭谤,用錘子把那輛車(chē)的玻璃敲了個(gè)大洞,結(jié)果呢巫糙,僅僅過(guò)了幾個(gè)小時(shí)朗儒,它就不見(jiàn)了。
“破窗戶(hù)理論”當(dāng)時(shí)啟發(fā)了紐約和其他大城市的警察部門(mén),他們對(duì)一些輕微的案件嚴(yán)加處理醉锄,以防止大案的發(fā)生乏悄,這也起到了作用。然而恳不,破窗效應(yīng)同樣影響著軟件和項(xiàng)目的發(fā)展檩小。
有許多因素可以促生軟件腐爛,其中最重要的一個(gè)似乎是開(kāi)發(fā)項(xiàng)目時(shí)的心理(或文化)烟勋,即使你的團(tuán)隊(duì)只有一個(gè)人规求,你開(kāi)發(fā)項(xiàng)目時(shí)的心理也可能是非常微妙的事情,盡管制定了最好的計(jì)劃卵惦,擁有最好的開(kāi)發(fā)者阻肿,項(xiàng)目在其生命周期中仍會(huì)遭遇毀滅和衰敗。而另外有一些項(xiàng)目沮尿,盡管遇到巨大的困難和接連而來(lái)的挫折丛塌,卻成功地?fù)魯∽匀粺o(wú)序的傾向,取得了相當(dāng)好的結(jié)果畜疾。
造成這樣巨大的差異姨伤,往往可能是因?yàn)閷?duì)待“破窗戶(hù)”(低劣的設(shè)計(jì)、錯(cuò)誤的決策庸疾、或者是糟糕的代碼)的態(tài)度乍楚。想一想你的項(xiàng)目是何時(shí)被打破第一扇窗戶(hù)的?
1届慈、新員工的代碼未經(jīng)復(fù)查或?qū)徍吮愫喜⒌搅四愕捻?xiàng)目中徒溪。
2、規(guī)劃好的項(xiàng)目進(jìn)度金顿,因?yàn)榘l(fā)布日期的提前臊泌,不得不新增人手,或者倉(cāng)促實(shí)現(xiàn)揍拆,不經(jīng)意間就會(huì)丟棄(或者不考慮引進(jìn))稍顯繁瑣卻合理的設(shè)計(jì)規(guī)則渠概,導(dǎo)致項(xiàng)目中充斥著所謂“臨時(shí)實(shí)現(xiàn)”和“臨時(shí)代碼”(可能當(dāng)時(shí)心里告誡自己會(huì)很快改掉,但隨著項(xiàng)目的發(fā)展嫂拴,心理上的變化播揪,你會(huì)發(fā)現(xiàn)那段糟糕的代碼一直呆到了軟件的發(fā)布)。
3筒狠、需求的改變猪狈,暴露了現(xiàn)有設(shè)計(jì)的缺陷,由于你的偷懶辩恼、將就雇庙,或者項(xiàng)目經(jīng)理在背后的催促谓形,時(shí)間來(lái)不及的自我安慰,最終打破了這個(gè)“窗戶(hù)”疆前。
4寒跳、團(tuán)隊(duì)成員之間沒(méi)有充分的溝通,沒(méi)有合理的目標(biāo)或約定竹椒,導(dǎo)致項(xiàng)目中充斥了重復(fù)或相似功能的代碼冯袍。
……
破窗戶(hù)不可怕,可怕的是你容忍它碾牌,不去及時(shí)修復(fù)它康愤,更可怕的是這正是帶來(lái)更多破窗戶(hù)的開(kāi)始。
我屋子角的沙發(fā)上干凈舶吗、整潔時(shí)征冷,周末我便會(huì)有興致捧本書(shū)過(guò)去沉浸一會(huì)。如果上面堆了些書(shū)包和衣服誓琼,下次我就會(huì)不以為然地丟下另外一些東西检激,當(dāng)看到一堆(而不是幾個(gè))凌亂的東西時(shí),我想要整理的動(dòng)力就會(huì)降低腹侣,除非是有人要來(lái)做客或者再也忍受不了來(lái)個(gè)大掃除叔收。
開(kāi)發(fā)軟件具有相同的情景。簡(jiǎn)潔漂亮的代碼使人心情愉悅傲隶,帶來(lái)創(chuàng)作的欲望和美的享受饺律。臃腫和雜亂的代碼,會(huì)使你降低自己的標(biāo)準(zhǔn)跺株,甚至心里已經(jīng)開(kāi)始推卸責(zé)任了:“反正已經(jīng)這么亂了复濒,我這樣還好吧”。但是項(xiàng)目工程不像是房間來(lái)個(gè)大掃除那么簡(jiǎn)單的乒省,當(dāng)你不得不來(lái)個(gè)徹底“大掃除”時(shí)巧颈,你的痛苦便來(lái)了,首先你要熟悉并掌控各部分功能袖扛,不然很容易引入潛在的bug砸泛;其次你得循循漸進(jìn),一步步來(lái)重構(gòu)蛆封,一步步來(lái)測(cè)試唇礁,這可能需要花費(fèi)平時(shí)修補(bǔ)的數(shù)倍時(shí)間,這也正是競(jìng)爭(zhēng)對(duì)手追趕或拉開(kāi)距離的好時(shí)機(jī)娶吞;如果“壞窗戶(hù)”隨著上一個(gè)版本已經(jīng)發(fā)布出去垒迂,那么你還可能要面對(duì)版本兼容這個(gè)惡魔。
作為對(duì)照妒蛇,《The Pragmatic Programmer》中有這么個(gè)滅火的故事机断。一個(gè)富得讓人討厭的富翁,擁有一所舒適绣夺、漂亮的房子吏奸,里面滿(mǎn)是無(wú)價(jià)的古董、藝術(shù)品等貴重的物品陶耍。有一天奋蔚,一副掛毯掛得離他的臥室壁爐太近了一點(diǎn),著火了烈钞。消防人員沖進(jìn)來(lái)救火和他的房子泊碑,但他們拖著粗大、骯臟的消防水管沖到房間門(mén)口卻停住了——他們要在前門(mén)和著火處之間鋪上墊子毯欣。
這的確是一個(gè)極端的事例馒过,但我們必須以這種方式對(duì)待軟件。一扇破窗戶(hù)(一段設(shè)計(jì)低劣的代碼酗钞,團(tuán)隊(duì)必須在整個(gè)項(xiàng)目開(kāi)發(fā)過(guò)程中忍受的一項(xiàng)糟糕的管理決策)腹忽,就足以使項(xiàng)目開(kāi)始衰敗。同樣的道理砚作,如果你發(fā)現(xiàn)所在的團(tuán)隊(duì)和項(xiàng)目的代碼合理窘奏、優(yōu)雅,你就很可能會(huì)格外注意不去弄臟他葫录,就和那些消防員一樣着裹,即使有火在咆哮(最后的期限、發(fā)布日期米同、會(huì)展演示等)求冷,你也不會(huì)想成為第一個(gè)弄臟東西的人。
其實(shí)窍霞,拖延和懶惰一樣也是我們思想里的破窗戶(hù)匠题。對(duì)順手整理沙發(fā)上的物品拖延,導(dǎo)致某段時(shí)間不能享受沙發(fā)舒適帶來(lái)的好興致但金;對(duì)手頭的壞代碼拖延韭山,導(dǎo)致某段時(shí)間要承受更多的壓力回來(lái)修復(fù)它;對(duì)內(nèi)心深處的聲音或焦慮拖延冷溃,可能導(dǎo)致窮盡一生去追尋或彌補(bǔ)也未必钱磅。
本篇為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)標(biāo)明出處似枕。