“旁觀者效應”是如何毀掉我們的程式碼的
旁觀者效應
1964年,紐約昆斯區,28歲的Kitty Genovese在經受了長達35分鐘的性侵犯後最終被謀殺致死,共有38個本地區人性正常的居民經過,但沒有一人提供幫助。
這個故事例證了‘旁觀者效應’中的一個不幸的心理特:援助的機率與旁觀者人數成反比。旁觀者數量越多,他們當中任何一人進行援助的可能性越低。
作為程式設計師,我們幾乎每天都能看到“旁觀者效應”在起作用。如果你的程式碼庫已經有了相當的體積和年月,你很可能知道它們會存在一些問題,比如缺乏封裝或模組分離,類繼承結構過於複雜,方法太長——讀起來就像是Stephen King最近寫的小說,未經測試或無法通過測試等等——但沒人想去做點什麼。
“旁觀者效應”的問題根源
問題的根源是缺乏物主(所有者)身份。我們總是在假設別人會來修補這些問題。如果這些問題出現在我們的程式碼庫中,我們很可能對之無動於衷,因為“這事兒跟我無關”。程式設計師對這樣的問題通常的反應:這是別的程式設計師造成的問題,我才不管呢。這種“這事兒跟我無關”的態度很流行。
可是,這事兒事實上跟你有關。
外差因素(Externalities)的負面效應
經濟學上有個詞叫做“外差因素(Externalities)”,它形象的描繪了這樣一個情況:A人從某件事情上獲利,但B人卻要為此買單或部分的買單。你作為B人,免不了會遇到要去修改A人所寫的恐怖的類程式碼。你以為這個類應該是經過精心設計的,你以為它們都有相應的功能測試程式碼。但事實上,你為了一個小小的修改做了大量的工作。你的老闆會奇怪,這樣一個簡單的任務為什麼需要這麼多的時間。別人犯下的愚蠢錯誤最終卻要你來擦屁股——這就是“外差因素(Externalities)”的負面效應。
培養物主身份
糾正“外差因素“的負面作用的方法很簡單:接受問題的所有者身份——不論問題是不是由你造成的。為什麼要在意這個問題是誰的責任呢?造成這些問題的人很可能早就不知去向了。還在等待他們來修改這些問題嗎?你永遠都等不到。我們應該這樣去想:除了我,沒有人會來修改這些程式碼。
一旦你這樣做了,一種所有者的身份就開始出現了。當你花了很大的功夫修改好了這些問題,而問題再次出現時,這些問題自然歸你所有了,因為你為它們付出了汗水。
這樣一來,我們就會開始”義務“的改進我們的程式碼庫。你開啟一段有問題的程式碼,你憂心忡忡的研究它,你憂心忡忡的心情很快雲消霧散了,因為你發現有另外一個”聖人“已經把它修復了——多麼美好的世界呀!這樣的事情之所以能發生,是因為每個人都找到了自己的責任感。這是最美好的時刻。
行動起來!馬上!
感覺如何?在接下來的一週裡找一天時間,翻出一段程式碼,就當是走錯了路,拐進了一條本不想走到衚衕,修改一下。提交你的修改,並附加這樣的註釋:
/* JKH 09/12/2012 - 重構了有問題的事務處理。如果這是你喜歡的,請將此做法傳遞! */
相關文章
- 旁觀者
- 我們是如何使用 Electron 構建 Linux 桌面應用程式的Linux
- 如何結構化我們的程式碼
- 我們應該如何編寫高質量的前端程式碼前端
- 大前端摧毀了原生開發者的一切,但是我們應該開心前端
- 解碼eBPF可觀測性:eBPF如何改變我們所知的觀測性eBPF
- 如何優化我們的程式碼(vue專案)優化Vue
- 別讓“防禦性程式設計”毀了我們的職業程式設計
- Nginx 是如何解決驚群效應的?Nginx
- 太多指令碼將會毀掉持續交付指令碼
- 哥們,B/S瞭解嗎?——啥玩意,我是敲程式碼的
- 我們團隊是如何落地DDD的(1)
- 如何優雅的替換掉程式碼中的ifelse
- 我在工作中是如何優化程式碼的優化
- 我是如何將業務程式碼寫優雅的
- 我們正在錯誤的組織程式碼!
- 觀看轉變:我們如何觀看體育報告
- 那些被遊戲公司成就的和毀掉的IP遊戲
- 我們是如何設計儲存4億個電話號碼的
- 稀缺:我們是如何陷入貧窮與忙碌的
- 簡單的3步,重構我們的程式碼
- 我是如何學習小程式的
- 面試時如何擺脫嘴笨帶來的困擾?能力表達正在摧毀我們的前途面試
- 我們是如何解決偶發性的502錯誤的
- Button 的 "進化之旅" | 我們是如何設計 Compose API 的API
- 使用這11個程式碼,可以大大地簡化我們的程式碼。
- 記一次旁觀他人的技術面試面試
- 這是一段關乎你的程式碼:你的未來 我們正在參與
- 郵件營銷軟體是如何建立品牌效應的
- 我是如何評估面試者的軟技能的?面試
- 沒辦法,我必須幹掉他們團隊的 Leader
- 我們應該如何給需求排序?排序
- 程式碼管理流程你們是怎麼做的
- 我們公司是如何做到高效並行測試的?並行
- 我們的口號是什麼?
- 我是如何提高自己的「程式設計能力」的?程式設計
- 觀點|螞蟻金服玉伯:我們是如何從前端技術進化到體驗科技的?前端
- 我們是程式設計師(譯文)程式設計師
- 如何應用“防呆法”的原理於我們的工作上?