摘要:養成二階思維的習慣是一個漫長、痛苦的程序,但堅持下來,總會識訓很大,
本文分享自華為云社區《二階思維》,作者:元閏子,
事情往往不是你想象的那樣,有時候,看似解決了問題,卻在不經意間,引發了更嚴重的后果,幫助我們思考、決策、解決問題的最有效方法是,運用二階思維,
什么是二階思維?
一階思維是單純而膚淺的,幾乎人人都能做到;二階思維則是深邃、復雜而迂回的,能做到的人少之又少,—— 霍華德·馬克斯
我們的每一個行動都會導致一個后果,而每個后果,都會有進一步導致其他的后果,由行動直接導致的后果,我們稱為一階后果(First-Order Consequences);由一階后果導致的,二階、三階… 后果,這里,我們統稱為二階后果(Second-Order Consequences),
好的一階后果,不見得會有好的二階后果,很多時候,它們是反的,
二階思維(Second-Order Thinking),簡單來說,就是做事情不能只看一階后果,還要考慮二階后果,相對于一階思維,它更強調對問題的深入思考,從邏輯、系統、因果、時間等多種維度來綜合考慮,
霍華德·馬克斯在《投資最重要的事》中有舉到一個股票投資的例子:
一階思維的人,會這么想:“公司的前景是光明的,這表示股票會上漲”,
二階思維的人,則會考慮到:
- 未來可能出現的結果會在什么范圍之內?
- 我認為會出現什么樣的結果?
- 我正確的概率有多大?
- 人們的共識是什么?
- 我的預期與人們的共識有多大差異?
- 資產的當前價格與大眾所認為的未來價格以及我所認為的未來價格相符的程度如何?
- 價格中所反映的共識心理是過于樂觀,還是過于悲觀?
- 如果大眾的看法是正確的,那么資產價格將會發生怎樣的改變?如果我是正確的,那么資產價格又會怎樣?
顯然,二階思維與一階思維之間有著巨大的作業量差異,二階思維對人的要求更高,實踐起來也更復雜,
二階思維有什么用?
沒有考慮二階或者三階后果,是造成眾多痛苦而糟糕的決策的重要原因之一,—— 雷伊·達里奧
善用二階思維,能幫助我們更好地決策、更好地找到問題根本從而解決問題,
更好地決策
以軟體開發中需求管理為例,我們總說以客戶為中心,那么,一階思維者的做法,很有可能是,將客戶/產品經理所提的每個需求都納入到版本中,這種不假思索的做法,看似滿足了客戶的所有訴求,實際危害更大,它忽略了最重要的一點,開發的人力是有限的,從而很容易導致版本無法按時交付,
更好的方法是,運用二階思維來進行需求的管理,
我們可以從多個維度來決策一個需求是否應該被納入版本,比如,該需求能給客戶帶來多大的收益?在哪些場景下才有收益?沒有它系統能不能正常運行?需求的作業量有多大?當前開發人力能不能滿足?
這樣,我們就能大致估算出每個需求的價值,然后對需求做價值的優先排序,最后根據當前的開發人力做需求裁剪,確保在交付時間點到時,我們能夠為客戶提供一個可用的、價值最大的軟體系統,
更好地找到問題根源
在決策中,我們用的是正向的二階思維,也即,從眼前一步步往后推演出未來的各種可能性,
而在找問題根源時,我們用的是逆向的二階思維,也即,從眼前要解決的問題開始,分析產生這個問題的原因,然后不斷擴展、推演,一直找到問題根源,
比如,在《深入理解計算機系統的數值型別》中,有一個 double 轉型為 float 的例子:
// Java public static void main(String[] args) { double d1 = 3.267393471324506; System.out.print("double d1: "); System.out.println(d1); System.out.print("float d1: "); System.out.println((float) d1); } // 輸出結果 double d1: 3.267393471324506 float d1: 3.2673936
從結果來看,轉型的規則并不是簡單的四舍五入,如果是一階思維者,很容易會這樣想,浮點數的轉換應該存在精度丟失,然后就結束了,
如果是二階思維者,你一定會有這樣的疑問,為什么會得到這樣的轉換結果?
那么,接下來,你很可能就會這樣干:
- 查閱 《Java 語言規范》,發現 double 到 float 的近似規則是 Round-to-even,但 3.267393471324506 到 3.2673936 也不符合這個規則,然后想,有沒可能近似規則是用在二進制的表示上?
- 繼續查閱 《Java 語言規范》,發現計算機的浮點數實作都遵循著《IEEE Standard 754 Floating-Point Representation》 規范,
- 接著,從 《IEEE Standard 754 Floating-Point Representation》找到了 double 和 float 在二進制表示上差異,并發現 double 轉型 float 時會出現截斷,
- 對比 3.267393471324506 到 3.2673936 的二進制表示,發現截斷后,再通過 Round-to-even 來近似,就能得出正確的結果,
看,經過這樣的層層追溯,我們最終找到了問題的答案!
怎樣鍛煉二階思維?
經濟領域中,最關鍵的是不管別人對你說什么,你總要問:“然后呢?”, 這個方法可以應用于幾乎其他所有領域,所以,你必須經常問:“然后呢?”—— 沃倫.巴菲特
二階思維并不是與生俱來的,它更像是一種習慣,需要我們不斷地實踐、總結、養成,
總要問:然后呢?
當你決定做一件事情前,總要問自己:“然后呢”?
這時,可以拿出你的筆,在紙上列出一階后果、二階后果、三階后果、…,把所能想到的可能性都顯現地列舉出來,以幫助我們更好地決策,
比如,作為架構師的你,想在業務服務和資料庫之間加上一層快取,來優化資料讀性能,那么,在系統設計時,你不能僅僅看到這一點,而應該運用二階思維,盡可能地,把增加快取之后可能出現的現象/結果,都列出來,分析一遍:
凡事從時間維度多加考慮
在做決策前,在時間維度上多加考慮,如果做了這件事,10 小時之后會怎樣?10 天之后會怎樣?10 周之后會怎樣?10 個月之后會怎樣?10 年之后會怎樣?
比如,在《一步步降低軟體復雜性》提到的 戰術編程 與 戰略編程 的例子,我們總是偏向戰術編程,因為它能夠節省大量開發時間,更快地完成需求交付,但是,當你從時間的維度來考慮時,結果就會有所不同:
另一個典型的例子是,背單詞,我們總認為每天背 10 個單詞好像沒有多大用處,要是真能堅持下來,1 年就能認識 3650 個單詞,2 年就是 7300 個單詞,10 年后是 3 萬多個,所以,不要低估時間的力量,
多問幾個:為什么?
接觸一個知識,碰到一個問題,多問幾個:“為什么”?
要養成問 “為什么” 的習慣,通過質疑,不斷找到現象或問題的根本所在,
對于一個知識,如果沒有經過深度思考,只能算暫時記住,并不能納入到你的知識體系中,
比如,對于 SSL/TLS 協議建立連接的程序,如果只是流于表面地把它背下來,可能你會因此通過面試,卻無法深入理解其背后所涉及的密碼學、數字證書、網路通信等原理知識(詳見《假如讓你來設計SSL/TLS協議》),
對于一個問題,如果沒有定位到根因,臨時的規避做法,往往會導致更嚴重的后果,
比如,在一個分布式系統中,當出現服務請求超時現象時,一階思維者的做法,很有可能是,通過增加請求超時時長來規避問題,然而,出現請求超時的原因有很多,如果是下游服務處理不過來導致的,增加超時時長只會讓問題愈發惡劣,更好的做法是增加流控機制,
所以,多問幾個“為什么”,找到根源,才能更好地解決問題,
最后
相比一階思維,二階思維能夠讓我們更好地做出決策、找到問題的根源,但這需要更深入的思考,耗費的時間和精力也會更多,
這與人類的天然惰性是相違背的,就像在《懶惰》里提到的,“讀書很容易,但思考很難”,
好訊息是,二階思維是一種習慣,能夠通過不斷地練習來養成,本文列出了 3 個比較容易實踐的鍛煉方法:
- 做一件事前,總是問:“然后呢?”;
- 凡事從時間維度多加考慮;
- 遇到知識/問題,多問幾個:“為什么?”,
養成二階思維的習慣是一個漫長、痛苦的程序,但堅持下來,總會識訓很大,
參考
[1] Second-Order Thinking: What Smart People Use to Outperform, Mental Models
[2] 二階思維Second-Order Thinking——讓你脫穎而出的思維方式, 芒格學院
[3] 投資最重要的事情, 霍華德·馬克斯
[4] 深入理解計算機系統的數值型別, 元閏子
[5] 懶惰, 元閏子
[6] 假如讓你來設計SSL/TLS協議, 元閏子
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538165.html
標籤:其他
