當系統越來越複雜的時候,我們對它的掌控能力也就越來越弱了。乙個複雜的系統是非常不好把握的,人體就屬於這一類的系統。對於人的生理學研究,西醫和中醫是兩種截然不同的方法。那麼對應到我們的軟體系統來看,是否也有類似的情形出現呢?
在自然科學領域,科學家們認識到微觀與整體的矛盾,其「不相容原理(互剋性原理)」認為:「乙個系統的複雜性增大時,我們使它精確的能力必將減少,在達到一定的閾值以上時,複雜性和精確性將互相排斥。」不相容原理是符合矛盾對立統一規律的。許多事物過份追求精確反倒更模糊,適當模糊反而可以達到精確的目的。
上面的原理對於軟體系統來說是同樣成立的。
早在春秋戰國時期,我們的祖先就已經認識到精確與模糊的優劣。中醫界有一本非常權威的書《黃帝內經》,其中就提出「夫陰陽者,數之可十,推之可百,數之可千,推之可萬,天地陰陽者,不可以數推,以象之謂也。」
這句話提到了,萬物都由陰陽組成。最小的元素找到了,很自然就會認為逐步往上推演,由十到百,由百到千,由千到萬,這樣是不是可以將整個宇宙推出來呢。這個想法是不現實的。因為當複雜程度逐漸增大,很快就不是我們能推演的程度了。所以「天地陰陽者,不可以數推」。
我們經常會注意到這樣一種現象,在我們分析軟體的時候,將整個軟體劃分成乙個乙個的模組,然後經理將這些模組都分配下去。如果軟體系統比較小,這樣做是非常容易成功的,等到做了乙個幾萬行的小專案得到成功後,然後做幾十萬或者幾百萬的專案時同樣也會信心滿滿。
軟體工程師如此想到「幾十萬百萬的專案和幾萬的差不多,結構都是類似的,不就是分層分模組嗎,一樣可以搞定。至於時間,按照以前的經驗在乘上乙個倍數就可以了。」
殊不知,規模和所需的資源並不是按照線形關係增長的。下圖描述了規模與複雜程度之間的對應關係。
當規模達到一定的程度,耗費的資源就不是我們能夠想象得到的了。現在最龐大的系統莫過於vista,而它幾千萬行的**正是由數量驚人的資源堆積起來的,vista的不斷延期在it界也是人所共知。
針對上面所說的原理,其實在軟體行業一直沒有找到好的解決方法。若非如此,龐大的微軟帝國也不至於一再失控了。
軟體中沒有好的方法,畢竟軟體行業太年輕了。醫學界卻是探索了幾百萬年——真正的源頭我覺得應該是從上古時期的巫醫說起,而不僅僅是有文字記載的那麼區區幾千年。從醫學界可以借鑑什麼呢?下面來看看中醫的一些入門知識。
中醫將人體分為「心、肝、脾、肺、腎」五個子系統,這裡要強調的是這裡的名詞並不等同於西醫中的人體器官。比如說「肝」,實際上包括了現代醫學部分神經系統、消化系統、迴圈系統等的功能,「腎」實際上包括了內分泌系統,運動系統等的功能。
這五個子系統都具有自己的作用,但並不能將它們孤立起來研究。
不像西醫那樣,研究「心」的時候,拿把手術刀嘩啦一下把人的胸膛破開,然後仔細研究心臟的結構、質地、顏色。有人戲說西醫的「生理學」不是「生理學」,而應該是「死理學」。
如果將各個器官分開來研究,得到的結果很可能是片面,不準確的。
中醫在研究「心」的時候,會通過觀察人在各種活動的時候心會出現什麼樣的反應,通過五臟在完成生理功能的過程中和整體之間發生的各種關係和聯絡來研究。我們在受到驚嚇、恐慌和思慮的精神狀態下,會出現心慌、心悸等反應,故而中醫將神志歸為心。
崇拜自然科學的人可能會起來反駁,「中國字的「想」有問題,為什麼下面是乙個「心」?現代醫學早證明了,人思考問題是在用大腦而不是心。」原因在於中醫研究人體和西醫是不同的思路,中醫將所有和「心」相關的部分 劃為「心」這個子系統。
對於五臟的研究,內容確實太多了,這裡簡單介紹一下只是想說明中醫在研究人體這個複雜系統的時候,用了乙個非常有效的方法,就是劃分子系統。看上去比較兒戲,但簡單的五部分確實就能治病救人,容不得我們不信。
軟體中同樣存在子系統的概念,將複雜的劃分成簡單的分而治之方法是自然而然就可以想到的。不過軟體中關於子系統的劃分思路和西醫一脈相承。西醫將人體分成乙個個的器官研究,軟體將系統分成乙個個的模組開發。中醫最聰明,對於人體這個複雜系統也僅僅分為「五」個子系統。相比起現在軟體劃分子系統的方法卻是要高明得多了。
按目前劃分模組的方式來做軟體也是可行的,不過當規模擴大到幾百萬幾千萬,甚至上億的時候我們似乎就要考慮其他的思路。對於這點我考慮的不成熟,按下不表。等以後深入考慮後再來與大家分享。
上面說「天地陰陽者,不可以數推,以象之謂也」。什麼是以象之謂呢?
易經中的八個卦就是 象,天地之間的事物形形色色,數不勝數,如果我們想要將所有的事情分清楚那就會到達上面所說的臨界值,不能精確和複雜兼得。解釋臨界值之外的東西,易經中提供了乙個有效的方法,就是將事物抽象、歸納。最終易經用八個現象來表示世界永珍,其中運用推理、聯想、模擬、隱喻形成乙個開放系統。
中醫中的「心、肝、脾、肺、腎」用「火、木、土、金、水」五行來表示,這也是「以象之謂」。上面說中醫將人體系統劃分成五個子系統,這只是第一步,接下來將每乙個系統用乙個「象」來表示,用「象」之間相生相剋的關係來解釋子系統之間的互動。
五行本身和人體沒有什麼關係,但我們能用簡單的象來解釋複雜的系統。
將複雜的系統簡單化的最自然的想法就是細分,然後組合,但上面的分析說明系統的複雜程度和規模並不是線形的遞增關係,所以簡單的分而治之並不是萬能的。當系統的規模達到乙個臨界值後,我們只能採取「以象之謂」的方法。用更加抽象的隱喻來描述和規劃系統。
這篇文章沒有談到怎樣處理複雜的軟體系統,僅僅是提出複雜與精確之間的互斥關係,並嘗試用中醫的思路來**這個問題的解決方式。而最後提出的「以象之謂」也可以說是一種隱喻,這點正好是我今後要著重研究的方向。大家如果有什麼好的思路,可以拿出來一起討論討論。
讀易 9 用中醫看複雜系統
當系統越來越複雜的時候,我們對它的掌控能力也就越來越弱了。乙個複雜的系統是非常不好把握的,人體就屬於這一類的系統。對於人的生理學研究,西醫和中醫是兩種截然不同的方法。那麼對應到我們的軟體系統來看,是否也有類似的情形出現呢?在自然科學領域,科學家們認識到微觀與整體的矛盾,其 不相容原理 互剋性原理 認...
讀易 15 用軟體的角度理解易經
自從我學習程式設計開始,就不斷地聽到大家談論物件導向。在最開始接觸c 時,確實被它的oo特性迷住了,相比之前用過的c語言更加豐富多彩。想當初,經常因為寫出了乙個類而暗自自豪半天。現在做程式設計師也有些年頭了,回過頭來看以前似乎領悟到的oo思想又有了一些新的感悟。提起oo,大家都會想到class關鍵字...
讀易 18 企業組織結構剖析(坤)
很多人都在職場中謀求發展,從底層的員工到高層的老總,沒有人能夠擺脫企業環境給自己帶來的影響。環境對於我們的發展來說起著至關重要的作用,要想能獲得更好的發展,必須對自己周邊的環境瞭如指掌。企業中有哪些職位,自己又適合什麼樣的位置,或者需要怎樣的努力才能達成自己的目標。這些問題在大家一起 企業組織結構之...