程式設計師的「認知失調」

2022-01-26 13:17:38 字數 1912 閱讀 4712

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

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

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

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

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

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

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

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

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

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

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

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

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

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

程式設計師的自我認知

文章本身也是乙個人接受輸入 對輸入進行加工處理 並通過文字進行輸出的過程 看到這句話讓我想到了編碼時使用的函式 方法不也是這麼乙個過程嗎?不禁感慨,大道至簡 萬物想通!乙個函式包括輸入 處理和輸出三個部分,可以用模型簡單表示為 但轉念一想,人其實比函式或方法本身要複雜的多,不能簡單的與函式做比對,具...

android 程式設計師認知 單例模式

class single public static single getinstance 為什麼方法是靜態的 不能new物件卻想呼叫類中方法,方法必然是靜態的,靜態方法只能呼叫靜態成員,所以物件也是靜態的。為什麼物件的訪問修飾符是private,不能是public 嗎?不能,如果訪問修飾符是pub...

程式設計師何苦為難程式設計師

職場上有很多辛酸事,很多合夥人出局的故事,很多技術骨幹被裁員的故事。說來模板都類似,曾經是名校畢業,曾經是優秀員工,曾經被領導表揚,曾經業績突出,然而突然有一天,因為種種原因,被裁員了,想申訴,想求解釋,結論是,能力不匹配,未能與企業一起成長云云。這有兩說,一說是企業冷血,卸磨殺驢,嫌棄老人成本太高...