不知道你有沒(méi)有想過(guò),公共澡堂里面淋浴頭之間的距離是如何被決定的?現(xiàn)在我們假設(shè)自己是承包澡堂項(xiàng)目的工程團(tuán)隊(duì),嘗試用最簡(jiǎn)單的方式來(lái)確定這個(gè)數(shù)值。
最直觀的想法是:假設(shè)將直立的人內(nèi)嵌在一個(gè)圓柱體里面,可以得到這個(gè)圓柱體的半徑d。我們通過(guò)調(diào)查,獲得一部分人的d值,取其平均值,設(shè)為Avg(d)。那么,Avg(d)加上一個(gè)特定距離就可以是淋浴頭之間的距離。這里我們先假設(shè)這個(gè)特定距離是1米。
于是我們得出一個(gè)很簡(jiǎn)單的模型
淋浴頭之間的間距 = Avg(d) + 1
這里我們利用模型對(duì)一個(gè)問(wèn)題做出了決策。先不評(píng)價(jià)它的好壞,它確實(shí)針對(duì)這個(gè)問(wèn)題給出了解決方案。
生活中利用模型解決問(wèn)題的例子無(wú)處不在。單純從工程上來(lái)說(shuō),所有問(wèn)題都是要用模型來(lái)解決的。
對(duì)于模型的定義有很多,我在這里給出我的一家之言。模型是過(guò)往經(jīng)驗(yàn)的集合,用于幫助針對(duì)當(dāng)下問(wèn)題做出決策。舉個(gè)大家都比較熟悉的例子,統(tǒng)計(jì)學(xué)里面的線性回歸就是根據(jù)很多收集到的過(guò)往的數(shù)據(jù)點(diǎn)建模,得出參數(shù)x和值y的線性關(guān)系。通過(guò)建立出來(lái)的模型,可以評(píng)價(jià)、選擇參數(shù)x。
模型的正確性
天底下沒(méi)有正確的模型,所有的模型都是錯(cuò)的。模型只有好與壞的區(qū)別。因?yàn)檫^(guò)往經(jīng)驗(yàn)的產(chǎn)生(例如數(shù)據(jù))是伴隨著各種各樣不同的因素產(chǎn)生的,其中包括內(nèi)在因素和外在因素兩種。而在幾乎所有情況下,我們是無(wú)法嚴(yán)格證明所有因素已經(jīng)被我們所考慮了的。
例如,在剛才的淋浴頭模型里面,我們是否考慮到了:
- 人在洗澡這個(gè)特定環(huán)境下時(shí),周圍人與他的距離多遠(yuǎn)才算舒適?
- 性別對(duì)這些數(shù)值是否有影響?
- 年齡呢?
就算這些都被考慮了,被根據(jù)數(shù)據(jù)統(tǒng)計(jì)出來(lái)了的,我們還是無(wú)法嚴(yán)格證明我們窮舉了所有的因素。另外,我們還面臨著
- 精度丟失問(wèn)題
- 樣本不足問(wèn)題
- 數(shù)據(jù)真實(shí)性問(wèn)題
- ……
所以,我們是找不到正確的模型的,只能找到更好的模型。例如,考慮了性別的情況下,得出的淋浴頭之間距離的模型應(yīng)該會(huì)比我們最初得出來(lái)的模型好。因?yàn)樗紤]了更多的因素。
自底向上的模型構(gòu)建方式
剛才提到,模型是過(guò)往經(jīng)驗(yàn)的集合。將過(guò)往經(jīng)驗(yàn)看成點(diǎn),以某種形式連接在一起,就形成了一個(gè)模型。
你應(yīng)該注意到了,我提到的是以某種形式連接在一起。所以,對(duì)于同樣的經(jīng)驗(yàn)集合,我們有很多種連線的方式。即,對(duì)于同一個(gè)經(jīng)驗(yàn)集合,我們可以有很多種建模方式。
一個(gè)模型也可以由多個(gè)已有模型建立起來(lái)。這時(shí)候,已有模型也可以看成是點(diǎn),連接在一起之后,就形成了新的模型。例如,加減乘除可以看做是四個(gè)二元運(yùn)算的模型,那么根據(jù)他們我們可以構(gòu)建二元運(yùn)算模型。
a + b, a - b, a * b, a / b 得出 a ? b
這是一種自底向上構(gòu)建模型的方式。
自底向上構(gòu)建模型的方式就是學(xué)習(xí)的方式,也可以論證為什么基礎(chǔ)知識(shí)不扎實(shí)是無(wú)法理解高級(jí)知識(shí)的。
拿軟件行業(yè)做例子。在軟件行業(yè)里,有一種職稱叫做架構(gòu)師。架構(gòu)師可能不做實(shí)際的編碼工作,而是做系統(tǒng)宏觀的設(shè)計(jì)。有些學(xué)生就會(huì)說(shuō),“不就是畫圖么,我也會(huì)”!這是不正確的。
優(yōu)秀的架構(gòu)師都是從基礎(chǔ)編碼做起的。他們需要有計(jì)算機(jī)專業(yè)的專業(yè)基礎(chǔ)知識(shí),如計(jì)算機(jī)體系結(jié)構(gòu)知識(shí)、計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)知識(shí)、算法基本知識(shí)等。這些知識(shí)實(shí)際上就是我們所說(shuō)的那些點(diǎn)。他們從最底層做起,一步步地向上建立模型,才能夠有能力對(duì)一個(gè)大規(guī)模系統(tǒng)進(jìn)行建模??梢哉f(shuō),他們的能力提升,就是一個(gè)不斷建模的過(guò)程。
水平模型建立方式
對(duì)于一個(gè)現(xiàn)有模型A,我們可以根據(jù)它做修改,產(chǎn)生一個(gè)相似的兄弟模型B。
例如,除法二元運(yùn)算模型的形態(tài)是被除數(shù) / 除數(shù) = 商 ... 余數(shù)
,那么我們稍加修改就可以得出取模運(yùn)算模型被除數(shù) % 除數(shù) = 余數(shù)
,同樣也是個(gè)二元運(yùn)算模型。
水平模型建立方式可以說(shuō)是很多互聯(lián)網(wǎng)產(chǎn)品的思路。它們先根據(jù)自己的理解找到競(jìng)品的模型(先不論它是不是找了差勁的模型),然后分析出該模型的問(wèn)題,對(duì)其進(jìn)行微調(diào)加以改進(jìn)。
例如,微信最初可以說(shuō)就是由WhatsApp的模型修改而來(lái)的。雖然到現(xiàn)在他們已經(jīng)完全不一樣了。
自頂向下的模型建立方式
對(duì)于一個(gè)現(xiàn)有模型A,我們可以根據(jù)它做細(xì)化,產(chǎn)生一個(gè)新的子模型B。這時(shí)候我們稱模型A是模型B的元模型(Meta Model)。與兄弟模型之間的關(guān)系不同,元模型可以描述子模型。
對(duì)于熟悉面向?qū)ο蟪绦蛟O(shè)計(jì)的人來(lái)說(shuō),我需要提醒一下,這里面存在的不是繼承關(guān)系。繼承關(guān)系的場(chǎng)景下,子類包含父類。但是在元模型產(chǎn)生的子模型并不能包含元模型,而是元模型的一部分。因此,我們可以說(shuō),是元模型細(xì)分出了子模型。
例如,二元運(yùn)算模型a?b
也可以細(xì)分出取模運(yùn)算模型a%b
。然而,這次我們得出取模運(yùn)算模型的方式和之前的方式是完全不同的。
例子:軟件開發(fā)元模型
軟件開發(fā)流程有許多的模型。例如,瀑布流模型、增量模型、迭代模型、螺旋模型等。
這些模型有一個(gè)共同的元模型,它非常的簡(jiǎn)單:將普通人類的理解完全正確地翻譯為機(jī)器的理解

你會(huì)發(fā)現(xiàn),瀑布流模型、增量模型之類的模型,都是可以被這個(gè)模型所描述的。
同樣,敏捷開發(fā)的12項(xiàng)原則也是可以被這個(gè)模型所描述的,因?yàn)樗鼈兌际菫檫@個(gè)模型服務(wù)的。
創(chuàng)新的本質(zhì):創(chuàng)造模型
我對(duì)創(chuàng)新的描述就是創(chuàng)造新的模型。
對(duì)于采用自底向上法得出的模型,我們可以說(shuō)是基于大量數(shù)據(jù)總結(jié)得出的創(chuàng)新。大數(shù)據(jù)是個(gè)最好的例子,無(wú)數(shù)企業(yè)在大數(shù)據(jù)幫助下取得的成功印證了這一點(diǎn)。
對(duì)于采用水平模型建立方式得出的模型,大多“性能”都不太好。因?yàn)槟憧赡苷义e(cuò)了原有模型存在的問(wèn)題,并且你的改進(jìn)可能也不高明。
對(duì)于采用自頂向下法得出的模型,在我看來(lái)就是聰明人才能做得出的事情。Facebook就是這樣一家在技術(shù)上擅長(zhǎng)使用自頂向下法來(lái)創(chuàng)新的公司。他們所創(chuàng)造出的技術(shù)產(chǎn)品遵循著其"Move fast and break things"的原則,總是能創(chuàng)造出截然不同的模型。
例如,F(xiàn)acebook的React.js這個(gè)產(chǎn)品,打破了一個(gè)最傳統(tǒng)的軟件設(shè)計(jì)理念 —— Separation of concerns(我不知道怎么翻譯比較好)??此剖谴蚱片F(xiàn)有模型,但是實(shí)際上這個(gè)突破來(lái)自于同一個(gè)元模型 —— 模塊化設(shè)計(jì)原則。當(dāng)然了,每個(gè)人的理解角度可以是不一樣的,關(guān)于這點(diǎn),我們可以多多討論。
總結(jié):從今天開始利用模型思維
我曾經(jīng)在Coursera上面完成過(guò)Model Thinking這門課,這門課對(duì)我的影響可以說(shuō)超過(guò)任何一門學(xué)校里面教授的課程。如果大家有興趣,可以去學(xué)習(xí)這門課。
模型可以讓人更好地理解、闡述這個(gè)世界。模型讓你有能力同時(shí)快速地掌握多類事物的運(yùn)作規(guī)則,融會(huì)貫通之,也由此能產(chǎn)生創(chuàng)新。
你會(huì)發(fā)現(xiàn),那些處于最高層的模型,其實(shí)就是哲學(xué)。