“旁觀者效應(yīng)”是如何毀掉我們的代碼的
1964年,紐約昆斯區(qū),28歲的Kitty Genovese在經(jīng)受了長達(dá)35分鐘的性侵犯后最終被謀殺致死,共有38個本地區(qū)人性正常的居民經(jīng)過,但沒有一人提供幫助。
旁觀者效應(yīng)
圖片來源: Abu Badali, CC 2.5, via wikimedia
這個故事例證了‘旁觀者效應(yīng)’中的一個不幸的心理特征:援助的幾率與旁觀者人數(shù)成反比。旁觀者數(shù)量越多,他們當(dāng)中任何一人進(jìn)行援助的可能性越低。
作為程序員,我們幾乎每天都能看到“旁觀者效應(yīng)”在起作用。如果你的代碼庫已經(jīng)有了相當(dāng)?shù)捏w積和年月,你很可能知道它們會存在一些問題,比如缺乏封裝或模塊分離,類繼承結(jié)構(gòu)過于復(fù)雜,方法太長——讀起來就像是Stephen King最近寫的小說,未經(jīng)測試或無法通過測試等等——但沒人想去做點什么。
“旁觀者效應(yīng)”的問題根源
問題的根源是缺乏物主(所有者)身份。我們總是在假設(shè)別人會來修補(bǔ)這些問題。如果這些問題出現(xiàn)在我們的代碼庫中,我們很可能對之無動于衷,因為“這事兒跟我無關(guān)”。程序員對這樣的問題通常的反應(yīng):這是別的程序員造成的問題,我才不管呢。這種“這事兒跟我無關(guān)”的態(tài)度很流行。
可是,這事兒事實上跟你有關(guān)。
外差因素(Externalities)的負(fù)面效應(yīng)
經(jīng)濟(jì)學(xué)上有個詞叫做“外差因素(Externalities)”,它形象的描繪了這樣一個情況:A人從某件事情上獲利,但B人卻要為此買單或部分的買單。你作為B人,免不了會遇到要去修改A人所寫的恐怖的類代碼。你以為這個類應(yīng)該是經(jīng)過精心設(shè)計的,你以為它們都有相應(yīng)的功能測試代碼。但事實上,你為了一個小小的修改做了大量的工作。你的老板會奇怪,這樣一個簡單的任務(wù)為什么需要這么多的時間。別人犯下的愚蠢錯誤最終卻要你來擦屁股——這就是“外差因素(Externalities)”的負(fù)面效應(yīng)。
培養(yǎng)物主身份
糾正“外差因素“的負(fù)面作用的方法很簡單:接受問題的所有者身份——不論問題是不是由你造成的。為什么要在意這個問題是誰的責(zé)任呢?造成這些問題的人很可能早就不知去向了。還在等待他們來修改這些問題嗎?你永遠(yuǎn)都等不到。我們應(yīng)該這樣去想:除了我,沒有人會來修改這些代碼。
一旦你這樣做了,一種所有者的身份就開始出現(xiàn)了。當(dāng)你花了很大的功夫修改好了這些問題,而問題再次出現(xiàn)時,這些問題自然歸你所有了,因為你為它們付出了汗水。
這樣一來,我們就會開始”義務(wù)“的改進(jìn)我們的代碼庫。你打開一段有問題的代碼,你憂心忡忡的研究它,你憂心忡忡的心情很快云消霧散了,因為你發(fā)現(xiàn)有另外一個”圣人“已經(jīng)把它修復(fù)了——多么美好的世界呀!這樣的事情之所以能發(fā)生,是因為每個人都找到了自己的責(zé)任感。這是最美好的時刻。
行動起來!馬上!
感覺如何?在接下來的一周里找一天時間,翻出一段代碼,就當(dāng)是走錯了路,拐進(jìn)了一條本不想走到胡同,修改一下。提交你的修改,并附加這樣的注釋:
- /*
- JKH 09/12/2012 - 重構(gòu)了有問題的事務(wù)處理。如果這是你喜歡的,請將此做法傳遞!
- */
英文原文:How the Bystander Effect is Ruining Your Code
譯文鏈接:http://www.aqee.net/how-the-bystander-effect-is-ruining-your-code/