|
英文原文:Software Development: Fast and Slow
本文作者 Michael Dubakov 從事軟件開(kāi)發(fā)方面的工作,他在讀了 Daniel Kahneman 的《思考,快與慢》后,思考了軟件開(kāi)發(fā)中的快與慢,并且把書(shū)中的一些思想應(yīng)用到實(shí)際的軟件開(kāi)發(fā)中。下面是筆者對(duì)原文的翻譯:
最近,我在閱讀 Daniel Kahneman 的《思考,快與慢》,這本書(shū)非常令人著迷。里面擁有大量的真知灼見(jiàn),給讀者帶來(lái)一場(chǎng)思維之旅。目前,我在一家軟件公司工作,書(shū)中所學(xué)到的部分自然而然地可以應(yīng)用到我們的工作中。下面,我將分享自己從這本書(shū)的所感、所知。
系統(tǒng) 1 和系統(tǒng) 2
這本書(shū)包括兩個(gè)部分,系統(tǒng) 1 和系統(tǒng) 2 。在書(shū)中,卡尼曼會(huì)帶領(lǐng)我們體驗(yàn)一次思維的終極之旅。他認(rèn)為,我們的大腦有快與慢兩種作決定的方式。常用的無(wú)意識(shí)的“系統(tǒng) 1”依賴(lài)情感、記憶和經(jīng)驗(yàn)迅速作出判斷,它見(jiàn)聞廣博,使我們能夠迅速對(duì)眼前的情況作出反應(yīng)。但系統(tǒng) 1 也很容易上當(dāng),它固守“眼見(jiàn)即為事實(shí)”的原則,任由損失厭惡和樂(lè)觀偏見(jiàn)之類(lèi)的錯(cuò)覺(jué)引導(dǎo)我們作出錯(cuò)誤的選擇。有意識(shí)的“系統(tǒng)2”通過(guò)調(diào)動(dòng)注意力來(lái)分析和解決問(wèn)題,并作出決定,它比較慢,不容易出錯(cuò),但它很懶惰,經(jīng)常走捷徑,直接采納系統(tǒng)1的直覺(jué)型判斷結(jié)果。
如果你是一名軟件工程師,你會(huì)快速抓住系統(tǒng) 1 和系統(tǒng) 2 的特質(zhì)。系統(tǒng) 1 相當(dāng)于緩存,而系統(tǒng) 2 則相當(dāng)于業(yè)務(wù)層。緩存是廉價(jià)和快速的,而業(yè)務(wù)操作則比較慢和昂貴。
下面我將會(huì)用書(shū)中的一些概念來(lái)理解軟件開(kāi)發(fā)中遇到的一些實(shí)例。
眼見(jiàn)為實(shí)(WYSIATI)
通常,人們不會(huì)懷疑他們所看到的事情(從廣義上來(lái)講)。而如果你有一些信息,你很有可能會(huì)產(chǎn)生質(zhì)疑,并且去查證。人們往往會(huì)基于現(xiàn)有的事實(shí)和有限的證據(jù)來(lái)做出決定。這樣很有可能會(huì)導(dǎo)致一個(gè)偏差:
在軟件開(kāi)發(fā)中,估算并不是件容易的事,我們有可能一直在犯錯(cuò),估算就是一個(gè)分布(Estimation is a distribution)。
過(guò)分自信
軟件估算是過(guò)度揮舞自信的產(chǎn)物。
如果你問(wèn)“我們需要整合 Twitter,需要顯示特定標(biāo)簽下的所有推文,完成這些需要多久?”開(kāi)發(fā)人員不會(huì)問(wèn)其他額外的問(wèn)題,通常都會(huì)直截了當(dāng)?shù)慕o出答案,2 天。這明顯是系統(tǒng) 1 里的心理反應(yīng)。而答案也非絕對(duì)正確,盡管缺乏信息,但這并不影響估算。開(kāi)發(fā)人員應(yīng)該聰明點(diǎn)和自信點(diǎn),但他們也應(yīng)該擺脫 WYSIATI,并且認(rèn)真仔細(xì)地思考一些未知數(shù)。
框架效應(yīng)
描述問(wèn)題的措辭很重要,同一個(gè)問(wèn)題,用不同的語(yǔ)言描述,很有可能會(huì)產(chǎn)生不同的解決方案和反應(yīng),看下面這兩個(gè)問(wèn)題:
你認(rèn)為,我們需要一個(gè)非常有經(jīng)驗(yàn)的開(kāi)發(fā)人員來(lái)解決這么簡(jiǎn)單的問(wèn)題嗎?
你認(rèn)為,我們需要一個(gè)非常有經(jīng)驗(yàn)的開(kāi)發(fā)人員來(lái)解決這么復(fù)雜的問(wèn)題嗎?
問(wèn)題好像被設(shè)置了框架一樣。第一個(gè)問(wèn)題,你很難去回答 Yes,相反,第二個(gè)卻很容易回答 Yes。
忽視基礎(chǔ)概率
有些事件可能會(huì)比其他的更容易些。然而,人們并不具備好的直覺(jué)和數(shù)據(jù)統(tǒng)計(jì)。
比方說(shuō),你的產(chǎn)品被 1000 家公司采用,你接收到一封客戶的郵件,該客戶認(rèn)為他們的想法很棒,而且必須馬上實(shí)施。存在這樣的爭(zhēng)論是很好的,而且非常有意義。你感受到了客戶的痛苦,并且集中全力快速啟動(dòng)新功能的開(kāi)發(fā)。好吧,你可能錯(cuò)過(guò)了什么,那就是,你有想過(guò)其他 999 位客戶是否需要嗎?或許他們就不需要這樣的解決方案呢。你忘記了產(chǎn)品要基于更大的客戶群,而對(duì)于單個(gè)請(qǐng)求是否要進(jìn)行重新審查。
在平時(shí)開(kāi)發(fā)中,這種錯(cuò)誤很常見(jiàn),并且我會(huì)反復(fù)提醒自己。現(xiàn)在,我會(huì)非常認(rèn)真仔細(xì)地考慮每一個(gè)請(qǐng)求。而不是沖動(dòng)。
回答一個(gè)簡(jiǎn)單的問(wèn)題
當(dāng)我們對(duì)一個(gè)復(fù)雜的問(wèn)題難以回答時(shí),我們通常都會(huì)用簡(jiǎn)單的思維來(lái)替代復(fù)雜,其實(shí)書(shū)中系統(tǒng) 1 就可以處理,大家來(lái)看下面這個(gè)例子。
你常常會(huì)聽(tīng)到這樣的問(wèn)題:“該項(xiàng)目在 3 個(gè)月內(nèi)會(huì)有哪些進(jìn)展?”對(duì)于這個(gè)問(wèn)題,你可以這樣理解:“這個(gè)項(xiàng)目會(huì)有哪些進(jìn)展?”。
通過(guò)做這樣的替換,你無(wú)需用系統(tǒng) 2 的思維來(lái)回答,直接使用系統(tǒng) 1 的就可以了。有趣地事,我們并未意識(shí)到替代,并且會(huì)很好地回答這個(gè)問(wèn)題。
情緒啟發(fā)式
人們的情緒往往會(huì)對(duì)決定產(chǎn)生很大的影響。例如,如果你喜歡 Node.js,那么你會(huì)很樂(lè)意采用它來(lái)開(kāi)發(fā)新的 Web 應(yīng)用程序,而如果你不喜歡 Node.js,你會(huì)列出許多反對(duì)的理由,并且支持使用另一門(mén)語(yǔ)言來(lái)開(kāi)發(fā)。
這種情緒化的啟發(fā)式是很難克服的。雖然有時(shí)候是不合理的,甚至是不理智的。有時(shí),這種基于直觀喜好的選擇并不是最好的。
我只是列舉了一些表面例子,但很顯然,在軟件開(kāi)發(fā)過(guò)程中,我們很容易基于這種情緒或某種偏見(jiàn)來(lái)做一些決定。
直覺(jué) vs. 模型
事實(shí)上,在我們決定一些東西的時(shí)候,可以應(yīng)用模型。
Kano 模型是一個(gè)非常好的例子,它可以幫助我們對(duì)新功能做出更加明智的決定。
模型似乎一直好于直覺(jué)。模型會(huì)迫使你去思考領(lǐng)域,問(wèn)題的方方面面,以及從各個(gè)不同的角度看它——使用系統(tǒng) 2 思維。
這里有一些簡(jiǎn)單的問(wèn)題:“下面,我們?cè)搹哪膫€(gè)功能做起?”,你可能會(huì)根據(jù)直覺(jué)回答說(shuō):“高級(jí)搜索”。但實(shí)際上,這個(gè)功能可能并不重要,而是有數(shù)十個(gè)更重要的功能。你可以構(gòu)建一個(gè)簡(jiǎn)單的模型,并且進(jìn)行評(píng)估。例如,在制作模型的時(shí)候,可以采用以下選項(xiàng)作為參數(shù):
- Kano 模型(基礎(chǔ)、delighter、性能)
- 投票:客戶的需求有多大。
- 頻率:客戶使用的頻率有多大。
- 傳播:有多少人會(huì)使用這個(gè)功能。
- 成就:(S, M, L, XL, …)
- 復(fù)雜性:它會(huì)增加使用的復(fù)雜性嗎?
通過(guò)制作這樣的模型,你會(huì)很容易做出決定。
模型除了可以應(yīng)用在軟件領(lǐng)域,它還可以應(yīng)用在許多地方。實(shí)踐告訴我們,直覺(jué)很少能帶來(lái)正確的決定和很好地解決問(wèn)題,除非你是史蒂夫·喬布斯。
it知識(shí)庫(kù):思考軟件開(kāi)發(fā)中的快與慢,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。