簡化根本複雜性,消除偶發複雜性

2021-07-04 14:08:43 字數 703 閱讀 5426

根本複雜性(essential complexity)指的是問題與生俱來的,無法避免的困難。比如,協調全國的空中交通就是乙個「天生的」複雜問題,必須實時跟蹤每架飛機的位置(包括飛行高度)、航速、航向和目的地,才能預防空中和地面上的衝突。像天氣驟變這樣的情況會令航班計畫全盤失效,航班時刻表必須適應不斷變化的環境才能避免乘客滯留。

與之相反,偶發複雜性(accidental complexity)是人們解決根本複雜性的過程中衍生的。目前陳舊的空中交管系統,就是乙個偶發複雜性例子。系統設計的初衷是管理數以千計的飛機參與的交通活動,即解決根本複雜性,但是解決方案本身帶來了新的問題。事實上,目前正在服役的空中交管系統,其複雜臃腫己經到了難以改善的地步。在全球多數地區,空中交管系統仍然使用三十多年前的技術。

許多軟體框架和廠商提供的「解決方案」都表現出偶發複雜性的症狀。解決特定問題的框架很管用,但設計過度的框架增加的複雜性反而超過了它應該緩解的複雜性。

開發人員痴迷於複雜的問題,好比飛蛾喜歡撲火。誰能拒絕迅速解決複雜問題帶來的快感?消除偶發複雜性,抽絲剝繭制訂解決方案,才是真正的挑戰。

該怎麼做呢?應該盡量選擇源自實際專案的框架,警惕那些象牙塔裡的產品;分析方案中有多少**直接用來解決業務問題,有多少只是用來實現使用者與應用之間的互動;謹慎使用軟體廠商在幕後推動的方案,它們並非一無是處,但是往往包含偶發複雜性;要量體裁衣,為問題制訂「合身」的解決方案。

架構師的責任在於解決問題的根本複雜性,同時避免引入偶發複雜性。

複雜性思考

複雜性思考 基本資訊 原書名 think complexity 原出版社 o reilly media 譯者 張龍 叢書名 o reilly精品圖書系列 出版社 機械工業出版社 isbn 9787111419990 出版日期 2013 年5月 開本 16開 頁碼 117 版次 1 1 所屬分類 計算...

排序演算法複雜性

穩定排序與不穩定排序 假設 ki kj 且排序前序列中 ri 領先於 rj 若在排序後的序列中 ri 仍領先於 rj 則稱排序方法是穩定的。若在排序後的序列中 rj 仍領先於 ri 則稱排序方法是不穩定的。演算法的複雜性 體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間 ...

程式設計的複雜性

不要以為我上面寫的東西不是 稍微調整下細節,這串 是可以在電腦上真實跑起來的,是不是特別簡單啊?你還敢說自己不懂程式設計麼?還會懼怕程式設計麼?但是也不要把程式設計想的太簡單了,上面的程式表達的只是乙個十分粗略的做飯過程,或者說乙個做飯的思路,真正要把做飯的程式實現出來,還要考慮很多的問題,比如如何...