聊一聊程序員的認(rèn)知偏見
我會(huì)根據(jù)事情的真相,再三權(quán)衡,最后做出一個(gè)理性、正確的決定。
但,事實(shí)上基本上沒人能做到每一個(gè)決定都是理性而正確,即便是公司高管,我也不例外 。
?
其實(shí)我們的大腦在你不知不覺的時(shí)候幫我們做了很多決定。
這些決策都是基于不完善的信息和當(dāng)時(shí)我們的心情,而忽視了關(guān)鍵的事實(shí)。
?
我們的大腦不是軟件,出現(xiàn)了bug,可以進(jìn)行debug,最后找到錯(cuò)誤的代碼。
但我們大腦卻在時(shí)時(shí)刻刻出現(xiàn)著bug,常見的bug就是認(rèn)知偏見。
認(rèn)知偏見有很多種,在Wikipedia列舉了大約90種常見認(rèn)知偏見。
?
下面我會(huì)從認(rèn)知偏見這個(gè)角度展示出程序員群體最常見的錯(cuò)誤“代碼”。
讓你更加清楚了解這些偏見對(duì)我們思維和行動(dòng)的影響。
思維定勢(shì)
給大家舉2個(gè)例子。
一、
19世紀(jì)中葉,美國(guó)加州傳來發(fā)現(xiàn)金礦的消息。許多人認(rèn)為這是一個(gè)千載難逢的發(fā)財(cái)機(jī)會(huì),蜂擁而至,許多不幸的淘金者不但沒有圓致富夢(mèng),反而被折磨得半死。有個(gè)叫默克爾的人,通過賣水卻在很短的時(shí)間靠賣水賺到幾千美元,這在當(dāng)時(shí)是一筆非??捎^的財(cái)富了。
二、
我們公司大樓的2,3兩層是食堂,每次吃完飯。電梯口烏央烏央全是人,等著電梯,堪比擠東京的地鐵,像我這種中年發(fā)福的男人是擠不上去的。于是我就想了一個(gè)辦法,樓梯走到1樓,明顯感覺少了很多,只有零星幾個(gè)人,然后就非常容易的搭上電梯。
由此可見,當(dāng)我們苦苦不得其解,其實(shí)只要稍微轉(zhuǎn)變下思維,問題就迎刃而解。
?
在項(xiàng)目的開發(fā)過程中,經(jīng)常聽到有程序員跟我反饋,按需求上理解就應(yīng)該這樣設(shè)計(jì),領(lǐng)導(dǎo)給了規(guī)范就應(yīng)該這樣。
程序猿在工作的過程中就非常容易受這樣或那樣的要求的限定,久而久之便形成了思維定勢(shì),這樣的定勢(shì)一但形成就很難突破,本能的堅(jiān)定的認(rèn)為按照要求完成一定不會(huì)錯(cuò),不會(huì)錯(cuò)但不一定是對(duì)的或最好最高效的。
?
因?yàn)槟愕念I(lǐng)導(dǎo)也會(huì)受他們自己的思維所限,所制定的要求只是相對(duì)理想但永遠(yuǎn)不會(huì)是最理想,這也是為什么所有的企業(yè)都提暢創(chuàng)新,想要?jiǎng)?chuàng)新最理想的狀態(tài),需要我們每一個(gè)程序猿在工作中不斷的思考,不斷的突破,不斷的共享,不斷的修改規(guī)則和要求,從而才能實(shí)現(xiàn)創(chuàng)新,提高效率,與此同時(shí)你個(gè)人也會(huì)在這個(gè)不斷改變的過程中,收獲工作以外的成就感和價(jià)值感。
?
以我自己為例。
2015年的時(shí)候,我離開老東家,來到???。
剛來第一個(gè)月里,一般情況下就是熟悉團(tuán)隊(duì)氛圍和公司制度、文化的階段,而我發(fā)現(xiàn)代碼中的兼容性、擴(kuò)展性都比較差,而且耦合特別大。就強(qiáng)制要求自己每天早上非常早的就來公司,晚上幾乎11、12點(diǎn)下班,在一個(gè)月時(shí)間內(nèi)就輸出了一份軟件架構(gòu)方案,遞到了領(lǐng)導(dǎo)的手上。
最后雖然方案還是有漏洞,但是大的問題沒有,在第二年就慢慢切換使用我設(shè)計(jì)的架構(gòu)
原先的軟件架構(gòu)一直問題比較大,為什么直到我的出現(xiàn)才完成了重構(gòu)?
你可能會(huì)說,其他人的能力沒你強(qiáng),心有余力不足。
但我覺得最大的問題是出在了思維定勢(shì)。團(tuán)隊(duì)的每個(gè)人都習(xí)慣了這套代碼,只會(huì)想到怎樣去讓自己新增代碼更好的適配當(dāng)前架構(gòu),并沒有聯(lián)想到重新設(shè)計(jì)架構(gòu)。
以偏概全
極其不可能的巧合事件其實(shí)每天都在發(fā)生。
就2020年來說吧,從年初爆發(fā)的疫情,到全球經(jīng)濟(jì)下行的壓力,大家都成為了歷史的見證者。
雖然這次疫情可能是人類歷史以來最為嚴(yán)重的疫情,但是拉到地球生命時(shí)間線上看,這樣的事件肯定并不少見。
我們會(huì)覺得很反常,因?yàn)樵谖覀兊挠洃浿谢蛘呶覀兏改傅挠洃浿校ㄉ踔磷娓改傅挠洃浿校?,這些災(zāi)難從沒發(fā)生過。但是,這不意味著不會(huì)發(fā)生,也不能阻止它們一下子連續(xù)發(fā)生好幾次。
給大家一個(gè)數(shù)據(jù)。
美國(guó)人每年被雷電劈死的概率大概為600萬分之一。這個(gè)數(shù)字聽起來應(yīng)該很小吧,但是仍然有幾十個(gè)人死于雷電。
再給大家一個(gè)數(shù)據(jù)。
美國(guó)人每年死于墜床的概率大概為40萬分之一。這個(gè)數(shù)字看起來也挺小的吧,而且你可能認(rèn)為不算是危險(xiǎn)的事情。雖然非常罕見,但每年都有上百人死于墜床。
?
這些事情都警示著每一個(gè)程序員,不要把未觀察到的、或者是概率及其小的事情認(rèn)為是不可能。
?
任何你忽視的細(xì)節(jié)都可能讓你的軟件在未來的某個(gè)時(shí)刻出現(xiàn)莫名其妙的崩潰。
?
你應(yīng)該在設(shè)計(jì)代碼時(shí),仔細(xì)思考一下你可能遺漏的點(diǎn),可能沒有想到的點(diǎn)。花時(shí)間檢查一下“不可能”異常值或者“極其不可能的”case。
如果它們真的發(fā)生了,你將會(huì)消耗10倍甚至100倍的時(shí)間和精力去解決它。
所以,記住:很少并不意味著沒有。
需要定論
?
對(duì)于沒有結(jié)局的電視劇,沒有找到真兇的偵探電影。
大家是什么感覺?是不是非常的不舒服。
其實(shí)這是我們大腦給我們強(qiáng)烈的信號(hào),對(duì)于這種疑問和不確定性感到極不舒適。
我們會(huì)竭盡全力解決還未有定論的問題,最終得出結(jié)論。
但是你有沒有想過不確定性也是一件好事:讓你的選擇是開放的。
強(qiáng)行給出不成熟的定論,會(huì)迫使你放棄選擇,易于犯錯(cuò)。
舉一個(gè)例子。
當(dāng)領(lǐng)導(dǎo)交給你一個(gè)新需求時(shí),你經(jīng)過簡(jiǎn)單的思考,就給出了開發(fā)截止時(shí)間,這就是嚴(yán)重錯(cuò)誤。
你并沒有經(jīng)過嚴(yán)格評(píng)估,沒有考慮項(xiàng)目?jī)?nèi)的不確定性,就草率的給出deadline,這其實(shí)一種自我掩飾,最終倒霉的還是你自己。
你應(yīng)該怎么做?你可以告訴領(lǐng)導(dǎo),這個(gè)需求工作量我會(huì)在半天內(nèi)評(píng)估出來,然后會(huì)告知您每個(gè)細(xì)節(jié)的開發(fā)時(shí)間。
這樣的行為是不是更加有理有據(jù)。
所以我們需要適應(yīng)不確定性。
在項(xiàng)目開發(fā)中,有太多的不確定因素,我們不知道項(xiàng)目究竟結(jié)束是哪一天。不知道是否有疑難bug暫時(shí)無法解決。有太多的不確定因素干擾著項(xiàng)目。
隨著項(xiàng)目的進(jìn)行,這些不確定終于找到了答案,慢慢的走向確定。
難道我們就不能做點(diǎn)什么嗎?
當(dāng)然啦,我們可以采取一些措施減少這種不確定。
例如,我們可以對(duì)需求進(jìn)行詳細(xì)的設(shè)計(jì),論證;可以對(duì)代碼進(jìn)行嚴(yán)密的概要設(shè)計(jì),等等。
雖然,措施多多少少有點(diǎn)作用,但是總是會(huì)遺漏,無法考慮全面,當(dāng)然也就無法根治問題。
這不是壞事,這個(gè)從不確定到確定的過程,就是探索事物的過程,也是成長(zhǎng)的過程。
最關(guān)鍵的是擺正心態(tài),不要著急。
基本歸因錯(cuò)誤
這個(gè)其實(shí)涉及到了心理學(xué)的概念,以下截自百度百科。
基本歸因錯(cuò)誤描繪人們?cè)诳疾炷承┬袨榛蚝蠊脑驎r(shí)高估傾向性因素(譴責(zé)或贊譽(yù)他人)、低估情景性因素(譴責(zé)或贊譽(yù)環(huán)境)的雙重傾向。
什么意思?
就是人們傾向于把別人的行為歸因于他們的個(gè)性,而不去考慮行為發(fā)生時(shí)的場(chǎng)景。
舉個(gè)例子,比如A小姐,平時(shí)活潑、開朗,外向型性格,那么,如果有人告訴你她去喝酒應(yīng)酬的時(shí)候喝多了,失態(tài)了。
你會(huì)認(rèn)為這有可能發(fā)生,甚至?xí)钚牌湟欢òl(fā)生過。
如果有人告訴你她見客戶的時(shí)候很害羞、很內(nèi)向,倒水的時(shí)候手都緊張的發(fā)抖,你一定不會(huì)相信。
你會(huì)認(rèn)為一個(gè)外向的人不會(huì)突然內(nèi)向或特別緊張。
你會(huì)自然的認(rèn)為外向型的人就做外向型的事,內(nèi)向型的人就做內(nèi)向型的事,這是一種偏見,其實(shí),這是錯(cuò)誤的。
還有一個(gè)更簡(jiǎn)單的例子,人基本都會(huì)把面善的人認(rèn)為是好人,而把面惡的人認(rèn)為是壞人。
生活中,我們經(jīng)常以貌取人,也是源自歸因的錯(cuò)誤。
總的來說,基本歸因偏差又分三種。
一種是內(nèi)部歸因,是指事情發(fā)生了,當(dāng)事人會(huì)把所有問題指向自己。
外部歸因則是指事情發(fā)生了,當(dāng)事人習(xí)慣把事情發(fā)生因素歸納總結(jié)為外部因素。
而綜合歸因則是事情發(fā)生了,當(dāng)事人會(huì)內(nèi)外綜合進(jìn)行評(píng)價(jià)。
所以有的人他覺得自己從來不會(huì)錯(cuò),其實(shí)是指他是習(xí)慣性外部歸因,比如說他沒有升職或者原地踏步,他會(huì)責(zé)怪是自己沒有關(guān)系沒有背景,所以導(dǎo)致升不上去。
而內(nèi)部歸因的人則習(xí)慣性把因素指向自己,比如同樣是升職沒有升上去,他會(huì)認(rèn)為所有的問題都是發(fā)生在自己身上,因?yàn)樽约翰粔蚺Γ穗H關(guān)系不夠好,所以才導(dǎo)致自己不能升職。
總的來說,習(xí)慣外部歸因的人總是喜歡抱怨,最后容易變成憤青;
而習(xí)慣內(nèi)部歸因的人則相對(duì)對(duì)自己較為苛刻,最后讓自己背負(fù)巨大的壓力。
所以我們要想最為客觀看待一件事情,我們必須學(xué)會(huì)內(nèi)外結(jié)合,既采用綜合歸因,我們才能得到較為準(zhǔn)確的信息,也才能更好的幫助我們自己成長(zhǎng),獲取更為立體的信息。
自私的偏見
在項(xiàng)目開發(fā)中,大家有沒有遇到這種情況。
有一些技術(shù)相對(duì)比較好的程序員在開發(fā)過程中會(huì)使用一些相對(duì)難于理解的技術(shù)實(shí)現(xiàn),或者是一些語法新特性,也可能是一些新的庫。
往往使用這些技術(shù)開發(fā)出來的功能只有作者本人能理解代碼的邏輯實(shí)現(xiàn),小組中的其他成員很難理解,甚至不理解。
這一發(fā)展形成了技術(shù)壁壘 因此別人無法去涉及這業(yè)務(wù), 隨著業(yè)務(wù)的不斷發(fā)展, 壁壘就會(huì)越來越高。
雖然這種技術(shù)壁壘可以保證你在項(xiàng)目中的地位,但是這是自私的行為。
一旦這塊業(yè)務(wù)發(fā)生了bug,即使你忙的不可開交,你還是推卸不掉。
因?yàn)闆]人懂,只有你去解決,別人根本幫不了你。
如果業(yè)務(wù)是經(jīng)常變動(dòng)的,可想而知你會(huì)多么痛苦。
更大的危害是,這中自私的行為阻礙了你的職業(yè)發(fā)展,因?yàn)榧夹g(shù)壁壘不光阻擋了其他人的進(jìn)入, 同樣也阻擋了你出去。
由于你無法從這個(gè)壁壘脫身,導(dǎo)致很多機(jī)會(huì)都給了其他人, 你只能眼巴巴的看著,時(shí)間久了, 你也只是成為了最熟悉這一塊業(yè)務(wù)的程序員而已。
?
我面試過很多工作5年左右的程序員,他們往往在一個(gè)業(yè)務(wù)上做了很久,但技術(shù)能力很是一般。
為什么呢?
因?yàn)樗麄儗?duì)自己的業(yè)務(wù)熟悉了,太安逸了,在自己業(yè)務(wù)領(lǐng)域舒適著做個(gè)溫水青蛙。
最后一跳槽,原形畢露,毫無競(jìng)爭(zhēng)力。
說到底是在自己負(fù)責(zé)的業(yè)務(wù)上設(shè)置了業(yè)務(wù)壁壘,殊不知是自私導(dǎo)致。
試問一下,如果新來的小伙伴問你業(yè)務(wù)代碼,你會(huì)不會(huì)耐心跟對(duì)方講解清楚,有沒有讓對(duì)方完全理解。如果沒有,其實(shí)你在建立自己的商業(yè)壁壘。
如果讀者你有這樣的行為,請(qǐng)立即停止,請(qǐng)丟掉自私心理。
你需要將自己的技術(shù)和業(yè)務(wù)經(jīng)驗(yàn),毫無保留的分享給你的同伴或者下屬。讓他們能夠成長(zhǎng),甚至超越你。
當(dāng)有新需求,或者出現(xiàn)bug時(shí),你的同事能夠幫你分擔(dān),能夠團(tuán)隊(duì)協(xié)作。同時(shí)你有更多的時(shí)間接觸新技術(shù)提升自己。
?
還有一種人 ,如果項(xiàng)目成功,最大的功能都是他的,一直強(qiáng)調(diào)自己對(duì)項(xiàng)目的貢獻(xiàn)很大,而受到領(lǐng)導(dǎo)的不公。而項(xiàng)目一旦失敗,推卸責(zé)任,所有的失敗都與他無關(guān)。
這種行為,是一種個(gè)人防御機(jī)制,也是一種自私的偏見。
記住無論失敗,團(tuán)隊(duì)所有的人承擔(dān)。
最后,既然選擇做程序員這條道路,自私的心理就應(yīng)該丟掉。這樣才能讓你走的更遠(yuǎn)。
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:
長(zhǎng)按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!