“這代碼真垃圾”,當(dāng)我們翻查一些代碼尋找一個(gè)特別討厭的bug時(shí),同事大聲這樣說(shuō)。“是嗎”,我回答到。
像這樣的譴責(zé),以及其它一些類似的話,在辦公室里經(jīng)常會(huì)聽(tīng)到,而且頻率在增加。而最令人不安的是,這代碼并不是特別的糟糕。我這話是什么意思?不能把它們寫(xiě)的更好嗎?當(dāng)然!大多數(shù)的代碼都有改善的空間——只要有足夠的時(shí)間和資源。垃圾代碼確實(shí)有,我們都看得見(jiàn),而且都是我們自己寫(xiě)的,但這并不是問(wèn)題。
問(wèn)題是我們有一個(gè)不良的“這代碼真垃圾”文化。
這是一種我感覺(jué)在web開(kāi)發(fā)社區(qū)中越來(lái)越常見(jiàn)的文化。接著上面的例子,我請(qǐng)同事解釋一下,解釋為什么這代碼很垃圾,我得不到一個(gè)直接的答復(fù)。
“這還不垃圾,你看這代碼”,他回答說(shuō),那種趾高氣揚(yáng)我需要仰頭才能看到他,緊鄒的眉頭就好象是說(shuō),如果不能看出這代碼有多爛,那就是個(gè)傻子。結(jié)果你知道怎么著?我開(kāi)始感覺(jué)有點(diǎn)傻了。我差點(diǎn)就忍不住開(kāi)始跟著他一起嘲笑,認(rèn)定這代碼真的有多爛,多糟糕。
在我繼續(xù)下面的內(nèi)容之前,我發(fā)現(xiàn)上面的內(nèi)容并沒(méi)有在最好的光線下描繪我的同事。所以,讓我彌補(bǔ)一下。他是個(gè)非常好的小伙。坦白的說(shuō),他是我見(jiàn)過(guò)的最和善的小伙之一。他友善,有一個(gè)他很愛(ài)的家庭,他跑馬拉松,樂(lè)于助人,聰明,等等等等。還有一點(diǎn)要說(shuō)明:他是一個(gè)經(jīng)驗(yàn)不多的新手。他還在學(xué)一些基礎(chǔ)的開(kāi)發(fā)知識(shí)。這沒(méi)什么好羞愧的,我們都經(jīng)歷過(guò)這個(gè)階段。那么,為什么這樣一個(gè)友善、聰明的小伙,在他參與的第一個(gè)大型web項(xiàng)目上,他的第一反應(yīng)就是去指責(zé)一些代碼很垃圾?——他甚至還沒(méi)有真正的去理解它。
生活規(guī)律:垃圾往下倒。
這個(gè)問(wèn)題并不單獨(dú)出現(xiàn)在程序員新手中。很多精明人士都有這習(xí)慣。你也許是一個(gè)奇才,一個(gè)久經(jīng)考驗(yàn)的程序員,但如果有這樣一種習(xí)慣,整個(gè)團(tuán)隊(duì)和項(xiàng)目都會(huì)受到負(fù)面影響。因?yàn)樾率謧儼涯惝?dāng)作知識(shí)和經(jīng)驗(yàn)的源泉。越多的人擁抱這種“這代碼真垃圾”文化,這種文化就會(huì)越被認(rèn)可,越成為模仿的對(duì)象。很快,程序員開(kāi)始變的不是積極在項(xiàng)目上出力,而是去貶低別人在項(xiàng)目上的貢獻(xiàn)。最大嘴、最反面的程序員很快就成了最受尊敬的人。所有人都受折磨,項(xiàng)目受影響,而一部分人卻能能得到贊美,為倒是都是垃圾而感到心滿意足。
我們應(yīng)該怎么做?
沒(méi)有人想顯得愚蠢,沒(méi)有人想自己的工作被認(rèn)為劣質(zhì)。一旦“這代碼真垃圾”文化開(kāi)始傳播,唯一能確保自己在別人之上的辦法就是貶低別人。最終,這變成了一種負(fù)能量,而不是想著去解決問(wèn)題。
那么,對(duì)這樣的一種特殊現(xiàn)象有什么解決方法?阻止它。不要不加思索的否定別人的代碼——在沒(méi)有原因、沒(méi)有理解的情況下。有很多的方式可以處理那些看起來(lái)有問(wèn)題的代碼。如果發(fā)現(xiàn)代碼中有異味,想辦法改進(jìn)它。從理解這些代碼開(kāi)始,在此基礎(chǔ)上修正。如果你發(fā)現(xiàn)項(xiàng)目中有一些不良風(fēng)氣,不要跟隨。如果有人對(duì)你說(shuō)“這代碼真垃圾”,問(wèn)他為什么,然后了解查明,去做一些事情讓它變的不垃圾。向最初寫(xiě)這些代碼的人了解,也許他們這樣寫(xiě)代碼是有原因的。幫助他們,而不是詆毀他們。
下一次,當(dāng)我發(fā)現(xiàn)從顯示器里飄出可疑的異味時(shí),我會(huì)轉(zhuǎn)身問(wèn)我的同事,“我們?nèi)绾胃倪M(jìn)這段它?”因?yàn)?,我們要面?duì)它們,有時(shí)候代碼會(huì)很垃圾,但這不意味著我們也去變成垃圾。
英文原文:Code culture problem