程式設計師的“認知失調”

大利貓發表於2017-09-12

“不可能啊”、“一定是伺服器的原因”、“我的程式不應該有問題啊”,這些年工作聽到的最多的就是這些話了,程式設計師都是比較自信的,總是覺得自己的程式肯定沒問題。

程式設計師的“認知失調”

程式就是程式設計師的自我延伸,花了幾個小時甚至幾天時間構建的結果,最後它以“正確”的形象印入你的意識裡,你自然不希望別人找出什麼紕漏,即便找出什麼紕漏了,自己也意識到了“不足”,感情上很難接受,所以大部分人都會習慣性的“辯護”,甚至試圖找一些迂迴手段證明自己是對的。實際上很多時候,只要我們稍微迴歸一下,跳出自我守護的那一畝田地,也許我門就會很輕易的發現:我們的確錯了。

心理學上有一個學術名詞叫做“認知失調”,所謂認知失調就是指在一個人的認知系統裡即將出現新的認知與就舊認知(舊的信念,自我建立的理論)產生衝突引起的心理上的不適,為了調節這種不適感,一方面為舊的認知辯護,另一方面希望在新的認知和舊的認知上找到共存的平衡。例如,你告訴吸菸者吸菸有害健康,應該要戒菸;吸菸者就會出現認知失調,但是他們很快就會從中解脫出來,因為他們會以“吸菸能減輕壓力,令他們輕鬆”的理由來說服自己。

認知失調是一種很常見的心理現象。在我們設計到實現我們的程式的過程中,我們在心理上已經慢慢的建立了自己對程式的相信。再到程式碼審查階段或測試階段,總會有人指出其中不完美之處,於是出現了認知失調,所以我們會習慣性的“辯護”。一個開發團隊中,要形成良好的氛圍,首先要克服認知失調現象,提高程式設計師的認知是比較重要的。

我們的前輩們很早就意識到這個問題了,並且有些程式開發組已經克服了這種認知的侷限。遠在計算機剛剛成為可能之初,我們的前輩馮.諾依曼很早就意識到了,自己在檢查自己的工作方面的能力的確不足,他或許是第一位能夠認識到這一點的程式設計師。而在他的朋友中,有人回憶,馮.諾依曼總是和別人說他自己是一名蹩腳的程式設計師,並且總是不厭其煩的請人幫他讀程式,希望能發現一些錯誤和紕漏。在今天我們看來,馮.諾依曼無疑是一個天才,就是這樣一位天才的程式設計師都能有會不足之處。我們又有什麼不能面對自己的錯誤呢?

再來轉述一個故事。比爾是早期空間跟蹤系統的一名成員。他負責寫一個模擬器,對整個網路中的空間跟蹤站以及實時輸入進行模擬。這個模擬器的核心是一個非常緊湊的迴圈。實際上,它只有13條指令。比爾研究了很多個小時以後,覺得自己終於又些信心了,但是他還是希望找到一些要求比較苛刻的人來幫他檢查程式。

比爾找到了馬裡琳,她願意細讀她的程式,他也讀她的程式,這是他們工作組裡再平常不過的事了。這種相互批評的方式能讓當事人不會感到自己在接受別人的批評。而比爾認為自己這方面訓練有素,沒必要通過這種交換來保護自己的自尊心。在他的程式開發價值觀裡,那種隱祕的、保守的開發方式很不好,只有開放的、分享的開發方式是好的。在他的程式中可能發現錯誤是人人可見的簡單事實,暴露這些錯誤,不過是為了將來更好的改進,所以並非是對他個人的攻擊。

在這個例子中,比爾經歷了他程式開發生涯中最“糟糕”的一天。經歷反覆的檢查,馬裡琳發現了很多錯誤,隨著錯誤一個一個的被發現,比爾反而變得越來越開心。要是比爾和我們大多數程式設計師一樣,肯定是開始在為自己辯解了。最後,在他們的一次學術會議上,他向全世界公佈了一個驚為天人的事實:13行程式碼中,馬裡琳成功發現了17個錯誤。他認定那天並非他寫程式的“良辰吉日”。在那天剩下的時間裡,他乾脆把程式放到一邊,然後向周圍的人講訴這一小插曲中的每一個寧人捧腹的細節。

同時,馬裡琳並沒有覺的自己發現這麼多錯誤而竊喜,而是清醒的認識到:她發現17個錯誤,那麼是不是還有可能有更多的錯誤。她經過長時間的修改之後,和比爾一樣,同樣找來另一位閱讀者。那天下班前,一邊是比爾繼續向周圍同事講述這件快事,另一邊是馬裡琳和其他人一起又發現了3個錯誤。

故事的最後,當這段程式載入到計算機後,哪怕是經歷任何“魔鬼似的”測試也沒有發現任何錯誤。實際上,這個模擬器已經被至少十個以上的計算機中心使用,至少九年之內沒有發現其他錯誤。對於每個發現的錯誤,比爾並不認為是對自己自尊的傷害,事實上,這種自尊恰恰體現了一個人的愚蠢;否則試想一下這個故事的結局會是怎樣?

兩個故事說明認知的重要,最後總結幾條觀點:

1 每個程式設計師的會出現認知失調的現象。應該正常對待。

2 再牛逼的人都會有自己的認知盲區,需要別人去發現。

3 理性對待別人發現的錯誤。

相關文章