為什么90%的“碼農(nóng)”做不了“架構(gòu)師”?
選擇有時(shí)候比努力重要,真正厲害的人不僅僅是埋頭苦干,而是會(huì)利用好的思維方式、好的方法,看穿事物的本質(zhì),順勢(shì)而為,找到事情的最優(yōu)解,并懂得舉一反三。
圖片來(lái)自 Pexels
架構(gòu)師是程序員的目標(biāo)之一,但大多數(shù)程序員無(wú)法成為架構(gòu)師。真正厲害的架構(gòu)師具備什么樣的思維方式,到底強(qiáng)在哪?今天,韓帥為你揭秘。
世界上所有的道理都是相通的,而有一些相似到令人吃驚,模型思考者和架構(gòu)師就是如此。
《模型思考者》是密西根大學(xué)教授斯科特·佩奇的一本書(shū),這本書(shū)的目的是教大家如何理解和應(yīng)對(duì)這個(gè)復(fù)雜的世界。
目前這本書(shū)的中文版還沒(méi)正式出版,得到萬(wàn)維鋼精英日課中有 15 節(jié)課程講解。
這一篇文章是篇讀書(shū)筆記,內(nèi)容來(lái)自榮華老師的文章,還有萬(wàn)維鋼精英日課中對(duì)《模型思考者》的講解,結(jié)合一些自己的理解和思考。
學(xué)習(xí)了這些后,我的學(xué)習(xí)和成長(zhǎng)都有了框架有了方向,如果你覺(jué)得很有收獲,可以閱讀原著,歡迎留言區(qū)交流。
什么是架構(gòu)?
ISO/IEC 42010:20072 中對(duì)架構(gòu)的定義如下:
The fundamental organization of a system, embodied in its components, their relationships to each other and the enviroment, and the principles governing its design and evolution.
ISO/IEC 42010
這里定義了架構(gòu)的三要素:
- 職責(zé)明確的模塊或者組件
- 組件間明確的關(guān)聯(lián)關(guān)系
- 約束和指導(dǎo)原則
越是簡(jiǎn)單抽象的定義,越是美,越是通用。小到一個(gè)玩具,大到一個(gè)國(guó)家的運(yùn)作都可以隱含著這樣的內(nèi)容。
舉兩個(gè)簡(jiǎn)單的例子,我們來(lái)一起看他們的三要素分別是什么。
軟件架構(gòu):
- 模塊:模型、域
- 關(guān)系:一對(duì)一、一對(duì)多(模型);依賴(域)
- 原則:?jiǎn)我宦氊?zé)、開(kāi)閉原則、里氏替換原則等等
組織架構(gòu):
- 模塊:部門(mén)
- 關(guān)系:管理 or 上報(bào)
- 原則:各種管理原則、財(cái)務(wù)原則
從不同的角度來(lái)豐富架構(gòu)的定義:
- 架構(gòu)的原則是簡(jiǎn)單,但不能有遺漏。
- 架構(gòu)的目的是解決問(wèn)題。問(wèn)題的尺度上,可以大到國(guó)家戰(zhàn)略問(wèn)題、經(jīng)濟(jì)問(wèn)題、民生問(wèn)題,也可以小到一只鋼筆如何均勻地吐墨;時(shí)間上,可以是當(dāng)下的問(wèn)題,也可以是預(yù)期以后會(huì)發(fā)生的問(wèn)題。
- 架構(gòu)不是一成不變的,它只適合于特定的場(chǎng)景。過(guò)去的架構(gòu)不一定適合現(xiàn)在,當(dāng)下的架構(gòu)不一定能預(yù)測(cè)未來(lái)。
什么是架構(gòu)師?
架構(gòu)師是一個(gè)角色,定義角色其實(shí)是定義職責(zé),架構(gòu)師的職責(zé)是:識(shí)別并定義問(wèn)題,創(chuàng)建、選擇或調(diào)整架構(gòu),從而找到最優(yōu)的方案,解決問(wèn)題。
這其實(shí)也是架構(gòu)師做事的一般套路:定義問(wèn)題→確定架構(gòu)→提出方案→落地拿結(jié)果。
這四步中,越是前面的步驟,越是重要,越是抽象,也越是困難,越能體現(xiàn)架構(gòu)師的功力。
什么是問(wèn)題
問(wèn)題的定義很寬泛,生存或是毀滅?這是一個(gè)問(wèn)題。晚上去吃燒烤不?也是一個(gè)問(wèn)題。
架構(gòu)師常說(shuō),我的架構(gòu)解決了什么問(wèn)題,這里的問(wèn)題不是一般性的問(wèn)題,而是特指馬克思哲學(xué)中的矛盾(矛盾的定義也很寬泛,注意這里是馬克思哲學(xué)中的矛盾)。
問(wèn)題就是事物的矛盾。哪里有沒(méi)有解決的矛盾,哪里就有問(wèn)題。
——毛澤東
任何事物都是作為矛盾統(tǒng)一體而存在的,矛盾是事物發(fā)展的源泉和動(dòng)力。
——馬克思
架構(gòu)師要定義和解決的問(wèn)題,就是特定領(lǐng)域中的矛盾,解決了矛盾,就得到了發(fā)展,取得了收益。
既然架構(gòu)師眼中的問(wèn)題就是馬克思哲學(xué)中的矛盾,我們就可以從馬克思哲學(xué)中學(xué)習(xí)定義問(wèn)題的系統(tǒng)方法,比如矛盾分主要矛盾、次要矛盾。
主要矛盾指在事物發(fā)展過(guò)程中處于支配地位,對(duì)事物發(fā)展起決定作用的矛盾;次要矛盾指處于從屬地位、對(duì)事物發(fā)展不起決定作用的矛盾;主次矛盾相互依賴、相互影響,并在一定條件下相互轉(zhuǎn)化。
當(dāng)我們面對(duì)復(fù)雜的問(wèn)題時(shí)要不斷反思,這是不是主要問(wèn)題?是不是當(dāng)下最主要的問(wèn)題?
如何區(qū)分問(wèn)題、手段、挑戰(zhàn)
我們述職或晉升時(shí)常常要說(shuō)問(wèn)題、手段、挑戰(zhàn),但這些概念總是混淆在一起,很難區(qū)分一件事情是問(wèn)題還是手段。
其實(shí)問(wèn)題、手段、挑戰(zhàn)都是一回事,都是矛盾,只是層次不同,比如:
每一個(gè)問(wèn)題可以向下不斷展開(kāi)不斷細(xì)化,下一級(jí)的問(wèn)題是上一級(jí)問(wèn)題的具體解決手段,當(dāng)你把“提升性能”當(dāng)做你 Owner 的問(wèn)題時(shí),提升幀率、提高頁(yè)面秒開(kāi)率、優(yōu)化啟動(dòng)耗時(shí)就成為了你的具體解決手段。
而手段的下一級(jí)問(wèn)題,就是你將面臨的挑戰(zhàn),比如你要優(yōu)化網(wǎng)絡(luò)耗時(shí),你要面臨的挑戰(zhàn)就有弱網(wǎng)環(huán)境、一些國(guó)家區(qū)域的帶寬問(wèn)題等等。
同理,當(dāng)你把“提升用戶體驗(yàn)”當(dāng)做你 Owner 的問(wèn)題,“提升性能”就變成了你的具體手段,幀率、秒開(kāi)率、啟動(dòng)耗時(shí)就成為了挑戰(zhàn)。
如何定義問(wèn)題
The significant problems we face cannot be solved at the same level of thinking we were at when we created them.
——愛(ài)因斯坦
榮華老師把愛(ài)因斯坦這種思想定義為升層思考:我們不能只局限于問(wèn)題本身,還需要看到問(wèn)題背后的問(wèn)題,然后才能更容易找到更多的解決方案。
亨利福特說(shuō),如果我問(wèn)客戶需要什么,他們會(huì)告訴我,他們需要一匹更快的馬。
從亨利福特的這句話,我們可以提煉出一個(gè)最直接的問(wèn)題:客戶需要一匹更快的馬。
立足這個(gè)問(wèn)題本身去找解決方案,可能永遠(yuǎn)交不出滿意的答卷:尋找更好的品種,更科學(xué)的訓(xùn)馬方式。
思考問(wèn)題背后的問(wèn)題,為什么客戶需要一匹更快的馬?可能客戶想要更快的日常交通方式,上升了一個(gè)層次后,我們立刻找到了更好的解決方案:造車。
閱讀了本段內(nèi)容,相信你不僅僅理解了什么是架構(gòu)師,也理解了架構(gòu)師的做事套路和思考方式。
什么是模型?
《模型思考者》中對(duì)模型的定義是這樣的:
模型是對(duì)真實(shí)世界的抽象,明確定義了各種元素、以及元素之間的關(guān)系,可以用來(lái)做邏輯推導(dǎo)。
對(duì)比架構(gòu)三要素和模型的定義,相同點(diǎn)是都有元素(組件),以及元素(組件)間的關(guān)系。
不同的是,架構(gòu)強(qiáng)調(diào)約束和指導(dǎo)原則,用來(lái)指導(dǎo)我們?nèi)绾巫鍪?模型強(qiáng)調(diào)邏輯推導(dǎo)能力,指導(dǎo)我們?cè)诂F(xiàn)有規(guī)律下尋找答案或?qū)で笞顑?yōu)解。
舉個(gè)使用模型解決問(wèn)題的例子:如果你是一位高中班主任,想要提高班級(jí)中考試成績(jī)大于 90 分的人數(shù),你應(yīng)該怎么做?
首先要找到正確的模型。關(guān)鍵元素有兩個(gè):考試成績(jī)、相應(yīng)的學(xué)生人數(shù),這兩個(gè)元素之間的關(guān)系是正態(tài)分布函數(shù),所以應(yīng)該使用的是正態(tài)分布模型。
然后使用模型做推導(dǎo),找到問(wèn)題的最優(yōu)解。正態(tài)分布函數(shù)有兩個(gè)關(guān)鍵變量:均值、方差,只要這兩個(gè)變量確定了,正態(tài)分布就唯一確定了。
想要提高班級(jí)中考試成績(jī)大于 90 分的人數(shù),我們有兩個(gè)選擇,提高均值,或者提高方差。
即使忽略提高方差帶來(lái)的負(fù)面影響(成績(jī)差的同學(xué)也更多了),提高方差帶來(lái)的正面影響也遠(yuǎn)遠(yuǎn)遜色于提高均值,特別是當(dāng)均值接近 90 分時(shí),均值哪怕提高 1 分,大于 90 分的人數(shù)都有巨大提升。
最后根據(jù)推導(dǎo)結(jié)果,確定具體落地方案。放棄提高方差的方法,比如給成績(jī)好的同學(xué)特別的照顧,把成績(jī)不好的同學(xué)座位調(diào)到后排。多采取提升均值的方法,比如培養(yǎng)班級(jí)的學(xué)習(xí)氛圍,成立學(xué)習(xí)小組等等。
什么是模型思考者?
參考架構(gòu)師,用模型思考者的做事方式來(lái)給它下定義:
面對(duì)問(wèn)題,能看穿客觀事物的本質(zhì),選取或構(gòu)建合適的模型,推導(dǎo)出問(wèn)題的最優(yōu)解。
就像架構(gòu)和模型的定義類似,只是突出的重點(diǎn)不同一樣,架構(gòu)師和模型思考者的定義也很類似,重點(diǎn)也不同。
架構(gòu)師的重點(diǎn)是定義問(wèn)題、解決問(wèn)題、推動(dòng)事物發(fā)展;模型思考者的重點(diǎn)是看穿事物的本質(zhì),遵循規(guī)律,找到最優(yōu)解。
接下來(lái)介紹幾個(gè)驚艷的模型:
認(rèn)知模型(認(rèn)知金字塔)
這個(gè)模型揭示的是認(rèn)知的本質(zhì),給出了一條提升認(rèn)知的最佳實(shí)踐。
模型解釋:
金字塔的最底層是數(shù)據(jù)。數(shù)據(jù)代表各種事件和現(xiàn)象。數(shù)據(jù)本身沒(méi)有組織和結(jié)構(gòu),也沒(méi)有意義。數(shù)據(jù)只能告訴你發(fā)生了什么,并不能讓你理解為什么會(huì)發(fā)生。
數(shù)據(jù)的上一層是信息。信息是結(jié)構(gòu)化的數(shù)據(jù)。信息是很有用的,可以用來(lái)做分析和解讀。
信息再往上一層是知識(shí)。知識(shí)能把信息組織起來(lái),告訴我們事件之間的邏輯聯(lián)系。有云導(dǎo)致下雨,因?yàn)橄掠晁蕴鞖庾兊脹隹欤@都是知識(shí)。成語(yǔ)典故和思維套路都是知識(shí)。模型,則可以說(shuō)是一種高級(jí)知識(shí),能解釋一些事情,還能做預(yù)測(cè)。
認(rèn)知金字塔的最上一層,是智慧。智慧是識(shí)別和選擇相關(guān)知識(shí)的能力。你可能掌握很多模型,但是具體到這個(gè)問(wèn)題到底該用哪個(gè)模型,敢不敢用這個(gè)模型,就是智慧。
來(lái)源:得到付費(fèi)課程《精英日課》 作者:萬(wàn)維鋼
模型的應(yīng)用:
- 信息焦慮:處在信息時(shí)代,很多人都有信息焦慮,生怕自己每天閱讀的信息不夠多而被時(shí)代拋下,每天疲于輸入新的信息,沒(méi)時(shí)間思考總結(jié),結(jié)果隨著信息的遺忘,什么也沒(méi)留下。
其實(shí)相比于信息,模型并沒(méi)有那么多,我們應(yīng)該花更多的時(shí)間總結(jié)模型,明確模型的使用范圍(智慧)。
- 數(shù)據(jù)分析:開(kāi)發(fā)完一個(gè)功能,加一些埋點(diǎn),跑 SQL 能拿到數(shù)據(jù),做報(bào)表能拿到信息,針對(duì)報(bào)表所做的分析屬于知識(shí)。
反思一下自己,有多少埋點(diǎn)還沒(méi)跑數(shù)據(jù),有多少數(shù)據(jù)還沒(méi)結(jié)構(gòu)化為信息?多少信息還沒(méi)做分析?多少分析還沒(méi)做下一步?jīng)Q策?
- 指導(dǎo)投資:DALIO 的《原則》一書(shū)中提到了橋水基金掙錢(qián)方法:不斷采集市場(chǎng)數(shù)據(jù),使用計(jì)算機(jī)加工數(shù)據(jù)抽象模型,根據(jù)模型自動(dòng)做投資決策。計(jì)算機(jī)的這個(gè)行為,不就是模型思考者嗎?
索洛模型(經(jīng)濟(jì)增長(zhǎng)模型)
這是個(gè)拿了諾貝爾經(jīng)濟(jì)學(xué)獎(jiǎng)的模型,揭示的是經(jīng)濟(jì)增長(zhǎng)的本質(zhì)。
模型解釋(摘抄自得到精英日課):
- O 代表經(jīng)濟(jì)產(chǎn)出,A 代表技術(shù)進(jìn)步,L 代表勞動(dòng)力,s 代表儲(chǔ)蓄率,d 代表折舊率。
- O 與 L 成線性關(guān)系:索洛考慮勞動(dòng)力有兩個(gè)作用:他們不僅僅是去工廠上班工作,他們還要拿工資,拿了工資會(huì)存錢(qián),存的這個(gè)錢(qián)可以用來(lái)投資。
經(jīng)濟(jì)產(chǎn)出跟勞動(dòng)力工作是平方根關(guān)系,跟勞動(dòng)力的投資也是平方根關(guān)系,所以跟勞動(dòng)力本身就成了正比關(guān)系。
- O 與 A 成平方關(guān)系:你的技術(shù)更先進(jìn),你的產(chǎn)出就比別人的產(chǎn)出更值錢(qián)。
A 代表了你的技術(shù)附加值。為什么經(jīng)濟(jì)產(chǎn)出和 A² 成正比?因?yàn)?A 有兩個(gè)效應(yīng)。一個(gè)是 A 能直接增加產(chǎn)出,一個(gè)是因?yàn)?A 增加了產(chǎn)出,會(huì)導(dǎo)致相對(duì)于同樣的折舊,投資也會(huì)增加。如果你能把技術(shù)附加值變成兩倍,你的總產(chǎn)出就會(huì)變成四倍。
來(lái)源:得到付費(fèi)課程《精英日課》 作者:萬(wàn)維鋼
模型的應(yīng)用:
- 單純的投資行為,會(huì)被折舊追平,是邊際效應(yīng)遞減的過(guò)程,不可持續(xù)。
- 勞動(dòng)力對(duì)經(jīng)濟(jì)增長(zhǎng)的影響是線性的,但是技術(shù)進(jìn)步的影響是平方的,面對(duì)我國(guó)人口問(wèn)題,追求技術(shù)進(jìn)步是唯一出路,技術(shù)進(jìn)步是真正的增長(zhǎng)之本。
其他的模型
《模型思考者》中有許多許多模型,每個(gè)模型有詳細(xì)的解釋,以及模型的適用場(chǎng)景。
比如:適用于市場(chǎng)營(yíng)銷、病毒傳播領(lǐng)域的“傳播模型”,研究穩(wěn)態(tài)與“宿命”的“馬爾可夫模型”,大家感興趣可以閱讀原著。
總結(jié)
架構(gòu)師和模型思考者是非常相似的兩套做事方法,對(duì)于所研究的系統(tǒng):
- 當(dāng)我們可以對(duì)系統(tǒng)做修改時(shí),可以用架構(gòu)師思維,定義問(wèn)題、解決問(wèn)題,推動(dòng)系統(tǒng)一步步完善。
- 當(dāng)我們無(wú)法影響系統(tǒng)運(yùn)行機(jī)制時(shí),要用模型思考者思維,洞見(jiàn)其本質(zhì),順勢(shì)而為,找到最優(yōu)解。
參考文章:
- 榮華老師的多篇文章點(diǎn)擊“閱讀原文”即可在線閱讀
- 萬(wàn)維鋼精英日課,《模型思考者》系列課程