Monday, December 10, 2001

軟體系統的秩序起源--《建築的永恆之道》評介之續篇

  這一回,就如之前規劃的,來聊聊“軟體構築”。更精確地說,是軟體系統中,秩序的來源。

  大體上,這篇文章會由我認知到這些想法的時間先後來描述:

~~

   大部分的程式員,只要從事過幾個軟體系統的構築,在經過多次日以繼夜與軟體臭蟲纏鬥的歷練之後,相信很容易就能體認什麼叫做 garbage in garbage out--電腦是個沒有自己想法的傻蛋,它只會依計行事,它只能根據程式員編撰的指令列表,逐一地執行指令,不多也不少。

  「軟體系統的秩序是程式員從外頭強加進來的」

  這就和每一個精密的人造製品,如鐘錶、手機、電腦等一樣,也如同每座偉大的建築物般,不用費太多想像,就可以知道其幕後必有設計者設計出這些東西。

   X    X    X    X    X    X

  只要構築過幾個中型以上的軟體系統,就會發現,我們很難真正對這些系統的每一個細節都顧慮到:

  隨著軟體系統規模的加大,緊接而來的複雜度滋長,是非常可怕的,所以每個優秀的程式設計師都很能體認,人類的腦容量在面對大型軟體系統時顯得十分卑微。
  但是一個又一個重量級的軟體系統還是被完成了!難道就只靠善盡一些分析、設計的方法、流程等軟體管理方法。就能維持住我們挹注到系統中的秩序?人們真的就只靠自己對每一個細節的精確掌握就防堵了因開發過程中導致的“軟體熵”快速滋長?
  晚近的軟體工程都非常強調軟體構築是一個反覆的過程:分析一些後再設計一些或撰一些程式碼;設計一些後,在撰碼之前,也可能再作分析的工作;撰過一些碼了,也可能再去作分析、設計的工作。整個過程充滿著意外、挫折、驚喜與學習。

  「軟體系統與其建構者在互動中而滋長出秩序」

  雖然很多人也許不願意承認,但軟體系統中的秩序並非只是單純地由程式師從外界引入。即使在構築的過程,軟體系統也透過人和外界環境產生豐富的互動。有時陷入混亂;有時軟體的完成,甚至還有水到渠成之感呢。

   X    X    X    X    X    X

  在生物學上,有一個貫穿這個學門的通則,這對生物學這門充滿例外和驚奇的領域來說,的確是十分罕見的,這項一般性原理就是 Darwin 所提出的《天擇》

  「軟體系統的秩序也可經由“天擇”產生」

  天擇是生物演化的機制,而由John H. Holland 所提出的遺傳演算法作了第一次在電腦上實現天擇演化的示範。
  現在,天擇已經被借用到許多軟體系統裡,以解決一些關於設計、模式識別及特徵搜尋等問題。並將這門研究統稱為“演化式計算”。

  演化式計算解決問題的方式和傳統軟體如作業系統的設計方式雖然有很明顯的差距。但他們對於軟體系統秩序的來源,都較傾向於“由外而內”。
  傳統軟體系統的秩序是程式員由外界給定的;演化式軟體系統的秩序是經由天擇選出後再注入系統的,而挑選的標準大致還是程式員由外指定的。

   X    X    X    X    X    X

  在許多情況下,我們對問題沒有一個明確的解法,而演化式計算的方法又顯得太過緩慢及浪費計算資源。

  有一個做法是,先找出系統中的交互關係,據以建立軟體模型,然後讓這個模型設計自己,使解答經由“自我組織”的方式“突現”出來。

  對我而言,軟體秩序中最難有直覺性認知的來源就是這種被 Kauffman 稱為自在的秩序(order for free)的自我組織原理。

  「自我組織也可為軟體系統產生自發的秩序。」

  非常複雜的系統通常具備收斂性的變化流程:恆定性或微擾下的穩定性背後之基本原理,也是許多複雜系統的自然特徵。

  自我組織是自然界中最普遍的秩序原理,對物理學家而言,一點也不陌生。而天擇及自我組織聯手造就了生命系統的秩序。

  英國神學家Paley曾想像有個人,在路上撿到了一只錶,這人發現「在事物裡有一個秩序原理,這個原理將這個錶的零件安排成目前的形式」根本不可能。因為「他從來沒見過由秩序原理製造的錶;也不能想像所謂秩序原理究竟是什麼,除非指的是鐘錶匠的智慧。」
  Kauffman的錶是從內部經“自在的秩序”設計出來的。Paley 的錶是由外部的鐘錶匠設計的。Darwin的錶是以時間過程中純粹偶然事件的累積設計的。

~~

  呵!遲了一個禮拜才整理出來,實在是最近比較忙,一不小心時間就從指縫溜了過去。

  所幸,還是整理出來了,對自己雖有個交代,內文脈絡卻顯得不大連貫。倉促行文,諸位看官就把它當作消遣,看看就好 :p