不要以為我上面寫的東西不是**,稍微調整下細節,這串**是可以在電腦上真實跑起來的,是不是特別簡單啊?你還敢說自己不懂程式設計麼?還會懼怕程式設計麼?
但是也不要把程式設計想的太簡單了,上面的程式表達的只是乙個十分粗略的做飯過程,或者說乙個做飯的思路,真正要把做飯的程式實現出來,還要考慮很多的問題,比如如何在程式中表達我要做辣椒炒肉、紅燒獅子頭、剁椒魚頭等等好幾個菜呢?這裡就涉及到「抽象」的概念,我們需要把很多相似的步驟都抽象成一種行為,然後不斷重複這種行為:
做飯 = ,
買菜() {},
煮飯() {},
做菜(菜品)
}選單 = 辣椒炒肉、紅燒獅子頭、剁椒魚頭;
做飯->開始(選單);
好了,上面的**相信也不是很難理解,我們把做飯分為三個事情,「煮飯」、「買菜」和「做菜」,首先我們想好了乙個「選單」,然後抽象了乙個「做菜」的方法,這個方法裡面包含了「洗菜」、「切菜」和「炒菜」三個步驟,每一道菜都會執行這三個步驟。
如果沒有這層抽象會有什麼問題?你會發現你的**是這麼寫的:
做飯 = ,
買菜() {},
洗菜() {},
切菜() {},
做菜() {},
}做飯->煮飯();
做飯->買菜();
做飯->洗菜(辣椒炒肉);
做飯->切菜(辣椒炒肉);
做飯->炒菜(辣椒炒肉);
做飯->洗菜(紅燒獅子頭);
做飯->切菜(紅燒獅子頭);
做飯->炒菜(紅燒獅子頭);
做飯->洗菜(剁椒魚頭);
做飯->切菜(剁椒魚頭);
做飯->炒菜(剁椒魚頭);
**本身沒有什麼問題,但是看起來會十分冗長,如果你今天要做 10 個菜,那麼**就得寫 10 遍;可如果你用到了抽象思維,你就只需要去擴充套件「選單」就行了,因為在程式裡有乙個叫做 「逐一」的邏輯。
程式裡面涉及到的邏輯並不多,諸如「條件判斷」、「迴圈」、「遍歷/逐一」等,很少,但是也就是這麼幾個少量的邏輯,構築了豐富多彩的網路世界。
簡化根本複雜性,消除偶發複雜性
根本複雜性 essential complexity 指的是問題與生俱來的,無法避免的困難。比如,協調全國的空中交通就是乙個 天生的 複雜問題,必須實時跟蹤每架飛機的位置 包括飛行高度 航速 航向和目的地,才能預防空中和地面上的衝突。像天氣驟變這樣的情況會令航班計畫全盤失效,航班時刻表必須適應不斷變...
複雜性思考
複雜性思考 基本資訊 原書名 think complexity 原出版社 o reilly media 譯者 張龍 叢書名 o reilly精品圖書系列 出版社 機械工業出版社 isbn 9787111419990 出版日期 2013 年5月 開本 16開 頁碼 117 版次 1 1 所屬分類 計算...
嵌入式程式設計複雜性
嵌入式往往沒有作業系統支撐,或者因為有作業系統支撐,但因為種種的限制,作業系統提供的功能少得可憐。所以,很多 不能像pc程式設計那樣天馬行空,任意馳騁。今天就聊聊記憶體分配的問題,記憶體碎片,可能大家都不陌生。然而在嵌入式系統裡,最怕的就是記憶體碎片,也是系統穩定的頭號殺手。我曾經做了乙個專案,系統...