系统新模块增加需要哪些步骤_人工智能之父的问题解决策略:模块化
最近主題閱讀馬文·明斯基(Marvin Minsky) 和西摩·佩珀特(Seymour Papert)兩位人工智能大師,關于思維,關于教育的書籍。其中馬文被稱為「人工智能之父」。兩人都非常重視過程模塊化。
復雜問題的解決需要系統性,也很少一次做對,要通過調試改進。調試就是捉蟲(蟲是程序沒有按期望運行的部分)。對于捉蟲這種事來說,最糟糕的情況就是有好幾個蟲同時存在。
因此捉蟲最有效的方法就是讓每個單元小到不可能有超過一個的蟲(西摩·佩珀特,2019)。
那么,把過程打碎成自然的,功能性的單元,為這些單元之間劃定界限越明確,就越容易找到蟲(西摩·佩珀特,2019)。這是我們為什么要模塊化,以及模塊化的核心。
在我的《直面不確定性》一書中,第一個模型就是「模塊化思維」,我將全文放到公眾號,六千余字,當我們碰到復雜問題時,進行模塊化處理,問題就比原來簡單數倍。
屏幕閱讀長文太累,可以購買紙質書,各電商平臺和書店都能買到。
小時候家里有一臺雙桶洗衣機,雙桶顧名思義就是有兩個桶,一個桶負責洗滌,另一個桶負責脫水,脫水時得將衣服從洗衣桶中撈出放到脫水桶中。雖需人工介入,但比照現在的全自動洗衣機,操作相當簡單。這臺洗衣機只有兩個按鈕,一個是洗衣定時開關,另一個是脫水定時開關。
這樣將一個任務用兩個獨立單元實現不但界面簡單,還有其他很多好處,我會在后面詳細介紹。如果你仔細觀察,這樣的處理方式在生活中特別常見,我再舉一個例子。
有小孩的家庭會選購輔食機,輔食機有兩個功能,一是蒸熟食物,另一個是攪拌食物。(建議你在電商網站搜索“輔食機”三個字,找到輔食機的圖片獲得直觀感受。)要實現這兩個功能,對應著兩種方案,一種是在一個缸中完成蒸熟和攪拌,這是一體機。還有一種是分體式的, 和雙桶洗衣機原理相似,用兩個缸,一個缸中裝水,另一個缸中放食物,兩缸之間有個氣孔,裝水的缸有加熱功能,加熱時蒸汽跑到第二個缸中蒸熟食物。此外,給第二個缸底安裝一個攪拌器就能將食物攪碎。
第二種方案將一個任務分解成兩個不同的步驟,用兩套不同的裝置合作完成。就是模塊化的解決方式(跟玩積木很像,所以模塊化又叫積木化),這種對復雜任務分解成不同模塊,既能降低制造難度和生產成本,還提高了穩定性和生產效率(像雙桶洗衣機兩個桶就可以同時工作,一邊洗一邊脫水)。
為什么將一個整體分成多個單元可以提高效率、降低成本呢?
我們來看兩個鐘表匠的故事:
在古代有兩個鐘表匠,一個叫王二,另一個叫李三,他們兩人手藝都非常棒,能制作出由1000多個零件組成的手表。王二在做手表時,如果放下手中的活,比如去接客戶的訂貨電話,手表就會散架,以前的工作全白費了,他就得從頭開始組裝手表。
越多的顧客喜歡王二做的手表,就會給他打越多的電話,生意忙不過來本是好事,可手表匠王二卻高興不起來,因為他的工作不斷被打斷,也越難找到整塊不間斷的時間組裝好一只手表。
組裝工作被打斷這種情況李三同樣也遇到了,但李三提前對手表組裝工作做了規劃。他的方法是:先將十幾個零件組裝成一個構件,然后再用這些構件去組合成一只完整的手表。
因此當李三放下手中的活去接電話后,他不需要從頭開始組裝1000多個零件才能完成一只手表,他只需要重新組裝剛才沒有完成的那個構件。
假如這兩個鐘表匠在組裝零件時,每10次有一次被打斷,那么平均下來,王二完成一只手表花費的時間是李三所需時間的4000倍。
—— 本故事改編自西蒙的著名論文《復雜性的架構》
這個故事里是說的是獨立一個人,用這種先組裝構件,再合成整體的方式就能充分利用間斷時間提高效率。它更適合多人合作的情境,在明確的社會分工體系下,不同的人制作不同的構件,能在短時間內制作出復雜的產品。
可以說,要解決一個復雜的系統或復雜的過程,必然的也是唯一的方法就是對復雜系統或復雜過程進行分解,它是人類處理復雜性的原始努力。但是光分解還不行,還得有本事把他們整合在一起,保證功能的一體化,這個分解再整合的過程就是模塊化(Modularization)。
在模塊化系統中,每個模塊是系統的一個獨立單元,模塊內部各要素緊密相連,而與其他單元要素的聯系相對較弱。
比如上面我們說的輔食機就有兩個模塊,一個模塊加熱產生蒸汽,另一個模塊攪拌蒸熟后的食物,兩者之間靠一個通氣孔連接實現我們的需求。
由上面的幾個例子我們發現:
? 模塊化能幫助我們處理復雜的事情;
? 模塊化讓并行操作成為一種可能;
? 模塊化有利于我們應對不確定性。
這是模塊化帶給我們的三個好處。
模塊化既是分解又是整合
既然模塊化有這樣大的好處,那對一個系統或過程該如何模塊化呢?
前面我們說在模塊的過程中,首先要將一個復雜的任務分解為多個關聯較弱的單獨模塊,最后為實現整個系統的功能要求,還要將不同的模塊整合到一起。這就意味著你不但要制造出火車頭,火車的車廂,還得把它們連接起來組成能運輸東西的完整火車。請思考一下,如果你要設計一列火車,會怎么做?先設計什么,后設計什么,花點時間思考這個問題并寫下你的答案。
我們來看專家是如何思考這個問題的,現代模塊化理論的提出者,哈佛大學商學院鮑德溫教授認為模塊化系統應由下面三個要素組成:
? 設計規則:每個模塊間的相互依賴性形成一定的規則;
? 模塊:每個模塊都要遵循統一的設計規則,而內部可以獨立設計;
? 系統集成與檢測: 監測并協調各個模塊組件集合成整體后的不適合部分。
這里需注意一點,模塊是可以遞歸的,即能夠“大盒套小盒”,也就是說模塊還可以分解為多個子模塊,如有必要,子模塊仍然可以進一步分解。將復雜事物分層是幫助我們認清它的一個有效努力,但也不應分太多層,層數太多,設計規則會變復雜,最后整合時發生矛盾的可能性就成倍增加。
依據這個思路,我們嘗試回答前面設計火車的問題,首先從整體上規劃,明確火車功能,確定風格,接著考慮火車頭和車廂之間的連接方式。然后設計每個模塊(車頭和車廂),車頭在保證滿足功能的前提下有一定的靈活性,車廂內部風格也不一定要與車頭的一致。于是在統一的規則指導下,火車頭和車廂就可以交給不同的單位或個人設計。最后有了模塊細節后,還需要各方在一起碰方案,這就是開協調會,預先檢測和評估系統集成的效果。我們逐個分析這三個步驟:
第一步,設計規則
首先來看設計規則,在模塊化過程中,設計規則是綱領,是指導方針,鮑德溫教授說明確的規則有三種:
? 結構:確定系統有哪些模塊構成,即怎樣將模塊分解,分類,以及他們如何發揮各自作用;
? 界面:定義模塊的邊界,模塊排序方式,空間、時間的安排,模塊間的關系以及信息傳遞方式;
? 標準:檢驗模塊是否符合設計規則,對模塊性能測驗和評定。
除明確的規則外,還有一種“隱形的設計規則”,這種規則只在模塊內部有效,而對設計其他模塊沒有影響。而模塊內部的決策,可被代替或者事后再定,因此也就沒有必要與同它平行的模塊知道,我們選擇將它“隱藏起來”。
那可以通過什么方式獲得明確規定的規則呢,這其實是一個博弈的結果,而最好的博弈規則應是正和博弈,即參與雙方都能獲益,有三種方法:
一種是自上而下的制定,有點像計劃經濟,比如網友線下聚會,每個人可以看成是一個模塊,組織人員不問會員意見,規定會員按照地域坐在一起,山東的坐一桌,北京的坐一桌,河北的坐一桌。這就是典型的自上而下制定規則的方式。“”
還有一種就是自下而上,有點像自由的市場經濟,成員間相互協商,共同協調達成一致。比如有人提議大家根據愛好坐到一塊,喜歡騎車的在一塊,喜歡攝影的在一塊,喜歡閱讀的在一塊,大家有共同的興趣,有了共同話題。
第三種方式就是先規定一種方式,比如用第一種按地域的方式,主辦方觀察到相同地域沒有共同話題,大家很無聊,于是就迅速調整,按照愛好坐。這是先制定一種規則,然后根據反饋主動調整的方式,有點像軟件設計中的迭代。
三種規則的形成方式各有特色,不能簡單的判斷哪一種方式好,哪一種方式不好。可以根據系統的復雜程度,可控程度和所處階段靈活運用。規則設計的目標是追求最理想的模塊化結構,使整個系統做到最優。這里我再引入一個編程中的概念。學過編程的可能聽說過“高內聚低耦合”這個概念。即在編程中考慮模塊化時需盡量滿足:”高內聚”,模塊內部緊密聯系,功能完備,只要求實現一個主要功能;“低耦合”,與外部連接應盡量簡單,接口要少且標準統一,提高模塊的獨立性和復用性。
我們可以借鑒編程中的這個概念,在設計規則和分解模塊時,盡量做到“高內聚低耦合”。
第二步,操作模塊
規則有了,那具體如何操作模塊呢?鮑德溫教授的《設計規則》一書總結了六種不同的模塊操作程序:
1.分解:將任務或系統分解為多個模塊;
2.替代:用某個模塊去替代另一模塊;
3.排除:去除某個模塊;
4.擴展:增加某個模塊;
5.歸納:將多個模塊中相同要素歸納合并到一起,組成一個新的模塊,這意味將原來的隱藏信息移動到設計層級,使之對其他模塊組可見;有點像一個公司中,原來每個項目組都有一個人負責營銷,現在將各項目組營銷人員整合起來,組成一個新的營銷部門,負責所有項目組的營銷任務。
6.移植:系統中的某個模塊還負責其他同級模塊的一些功能,有掙脫該層級的需求,于是就將它升級到上一層。這就像在企業中,一個小組長是多面手,既管營銷,又管生產,都干的很好,小組長這個職位已經不能充分發揮它的才能,領導就升遷他做了副經理。
其中分解和替代是互補的,排除和擴展也是互補的,具體操作中還要滿足MECE(相互獨立,完全窮盡)原則。怎樣形象的理解和記憶這六個模塊操作程序呢,你可以假想擺積木。比如你將一個完整的形狀拆解為不同的積木塊(分解),找到新的積木來替換舊的積木(替代),將一個不好用的積木扔到一邊(排除),增加一個積木塊(擴展),將多個積木塊組合成一個新的形狀(歸納),讓這個剛組成的形狀成為另一個更大的形狀的一部分(移植)。
第三步,系統集成與檢測
模塊化系統中最后一個要素是系統集成與檢測。如果高質量的完成了規則設計和模塊操作,那么系統集成會很順利。但結果總跟預想的不一樣,因此需要對各模塊檢查驗收,以及協調和消除各模塊間的摩擦。一般來說,系統集成與檢測是平行于其他模塊的一個實現特殊功能的模塊。這有點像建筑施工中監理單位的工作,監理和施工單位是平行的,負責檢查各單位工作的完成質量和進度,也協調過程中遇到的問題,保證項目既快又好地竣工。
成為規則設計還是模塊供應者
由上面我們對模塊的分析就可以看出,在一個模塊化系統中,主要有兩種角色,一種是規則的設計者,還有一種是模塊的供應者。選擇做哪一種呢?有一句在管理界很流行的話:
一流的企業做標準,二流的企業做品牌,三流的企業做產品。
因此一流企業做標準,就是設計規則,但設計規則不是想設計就能設計的,它需要從更廣更高的維度看待整個系統,也需要更強的實力。如果實力不夠,就只能做品牌,做產品,做一個模塊供應者。
在合作中,設計規則的人有更大的話語權,成功后也能獲得更多的利益,同時也要承擔巨大的失敗風險。模塊供應者雖然在整個系統中話語權不及規則設計者。但如果你提供的是一個關鍵模塊,也能直接影響設計規則使其對自身有利。更重要的是,你面臨的不確定性要小,比較安全。
這有點像創業者和打工者的區別,創業者是一個規則設計者,有很大的自由度,但需要應對更多的不確定性,承擔更大的風險。而打工者在一個企業中是模塊的供應者,自由度小,但無需承擔大的風險,收入比較穩定。當然,從另一個角度或者更大的尺度來看,我們每個人既是模塊供應者,也是規則的設計者。
模塊化思維在生活中的體現
模塊化在生活中隨處可見,我們來看幾個具體例子:
一、韓信的模塊化帶兵
孫子兵法中《兵勢篇》中第一句:
凡治眾如治寡,分數是也。
什么意思呢,就是說如果你想率領大部隊和帶一個班一樣容易,憑借的是“分數”,分數就是對部隊編制,對人員進行模塊化,比如十個人組成一個班,三個班組成一個排,三個排再組成一個連……這樣就能在戰斗中讓每個模塊執行不同的作戰任務。
“韓信點兵,多多益善”為什么韓信帶兵多多益善,而劉邦說他最多能帶十萬兵,就是因為韓信善于“分數”,能將人員模塊化,給每個模塊安排不同的作戰任務。
二、星巴克門店的模塊化設計
星巴克是一個非常知名的咖啡餐飲品牌,門店數量僅次于麥當勞,是世界第二多連鎖門店的餐飲企業。1994年,星巴克在快速擴張過程中遇到了門店裝修難題,首先是速度,門店裝修進度太慢,跟不上開店速度,還有一個是風格,就是怎樣保證在品牌調性不變的基礎上,讓各門店看上去有些變化,沒那么單調。
怎么解決這個問題呢?困難的事要找專業的人來做。當時的星巴克的老總花150萬美元請來了門店設計專家萊特·馬西,馬西很有經驗,他也主持設計過迪士尼的各種門店。馬西根據星巴克的要求,同團隊合作獲得了一個方案,就是根據咖啡生產歷程,分為種植、烘焙、調制、飲用四個階段,每個階段對應一個主題色,比如生長種植階段對應著綠色,這樣就有四種主題色。另外,星巴克有三類不同樣式的家具,這樣就有四種主題顏色,三種家具樣式,排列組合后,門店裝修風格就有12種。
有了這12種風格后,星巴克門店裝修就很簡單了,只需要從倉庫中取用提前制作好的模塊,現場搭配。在使用了這種模塊化裝修方案后,單個門店的裝修時長從原來24周縮短到只需8周,裝修金額也從35萬美元減少到29萬美元。別看每家門店只省了6萬美元,但裝修時間卻縮短到原來的三分之一,店早開一天,就能早一天有銷售。而由于星巴克門店特別多,從1995年——2000年這5年間,就為星巴克省下了一億多美元。只花了150萬美金的設計費用,卻節約了一億多美金。這就是模塊化的力量。
三、模塊化寫作
再舉一個例子,這本書其實也是模塊化的產物。寫一本書并不是一個容易的工作,如果一開始我就想著要寫十幾萬字,就會被嚇到,可能就放棄了。
這本書怎么完成的呢?是我操作模塊的成果。在寫書稿前,我在微信公眾號行為設計學已經更新了幾十個模型,平時我還做筆記。有了這些基礎材料后,我再制定一個規則,也就是本書的主題,然后再設計結構,整本書的框架,章節安排等。有了這個總體設計規則后,具體寫作過程就相對容易了,每天抽出一點時間整理思路,尋找合適的素材,對素材模塊進行增加刪除,排列組合等操作,就形成了一本書。你看,一個本來很復雜,很難完成的任務,采用模塊化的方式后,完成起來好像簡單了許多。
這種模塊化的寫作方式也不是我創造的,很多大師級作家都用這種寫作方式。他們會積累很多知識卡片,而每個卡片就是一個模塊。
英國學者赫伯特·斯賓塞就很善于利用卡片,在他去世后,大家發現他花心血積累了幾十萬張卡片,這些卡片用了科學方法編排,能方便地查找。二十世紀著名的俄裔美籍作家納博科夫也異常熱愛卡片寫作,《納博科夫傳》開卷就展示了他用卡片寫作的場景照片,在一次BBC的采訪中,記者問他怎樣寫作,有什么創作方法時,納博科夫這樣回答:
我現在發現索引卡片真的是進行寫作的絕佳紙張,我并不從開頭寫起,一章接一章地寫到結尾。我只是對畫面上的空白進行填充,完成我腦海中相當清晰的拼圖玩具,這兒取出一塊,那兒取出一塊,拼出一角天空,再拼出山水景物,再拼出 —— 我不知道,也許是喝得醉醺醺的獵手。
中文世界里,錢鐘書也是卡片寫作的踐行者,與錢同時代的夏承熹曾有這樣一段話:“閱錢鐘書《談藝錄》,博文強記,殊堪愛佩。但疑其書乃積卡片而成,取證稠疊,無優游不迫之致。近人著書每多此病。”
他是在批評錢鐘書的文章“乃積卡片而成,取證稠疊”,也從側面印證了錢對卡片的嫻熟和喜愛。夏承熹雖批評錢的卡片寫作法,但錢的書籍廣受大眾喜愛,而夏的文章幾乎無人可知。
這也就是模塊化寫作的好處,它通過積累豐富的素材,以靈活的結構激發和促進作者遠距離聯想,創作出有新意有特色密度大的作品。如果你想要寫一本書,或一篇高質量的文章,請嘗試模塊化寫作,在平時有感想時就寫幾句,碰到相關的素材也收集下來,日積月累有了一定的卡片后,你發現寫作并沒有那么難。以前只能使用紙質卡片,整理查找都不太容易,我們現在有各種手機App,能隨時隨地方便的記錄,一張照片,一個想法,看到想到后馬上記錄下來,并打上標簽,以后查找也輕松。
模塊化是我們解決復雜問題的基本方法
模塊化是我們解決復雜問題的基本方法,它跟我們熟悉的拆解有些相似,但也不僅僅是簡單的拆解。模塊化不是將問題拆分 為若干獨立個體逐一解決, 而是在保持問題整體性的同時著手處理各部分。在模塊化過程中,首先要定一個規則,然后再根據規則,進行分解、替代、排除、擴展、歸納、移植等方式操作。最后還要對各模塊做檢測,以便于它們能系統性整合在一起。
模塊化只是解決問題的方法,我們不應為了模塊化而模塊化,我們的最終目標不是想要一列火車,而是為了將東西從一個地方運輸到另一個地方。
√ 公眾號「行為設計學」
非常理想,特別現實。產品化自己,建立睡覺時也能賺錢的認知財富系統,過一種幸福完整的人生。
感謝你的閱讀,你的點贊是對我的最大鼓勵。
總結
以上是生活随笔為你收集整理的系统新模块增加需要哪些步骤_人工智能之父的问题解决策略:模块化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring框架概述(快速入门)
- 下一篇: python turtle绘制柱状图_p