軟體工程只能是零碎工程 (轉)

gugu99發表於2007-08-16
軟體工程只能是零碎工程 (轉)[@more@]

  工程只能是零碎工程

 

  絕不相信任何觀念可以絕對地真確,唯一真確地,是自由競爭著的各種觀念
所構成的演化格局(哈耶克)
  ——作者按


  我一直在嘗試著用歷史的眼光來看待人類的軟體構造行為的發展歷程。對於
這句話,我必須做兩個簡明但非常必要的解釋。所謂“歷史的”,只是一種歷史
陳述,抑或事後的解釋,並非帶有預告意味,而後者恰恰是我要極力批判的。第
二個解釋,將針對“人類的軟體構造行為”(以下簡稱構造行為)。以物理、化
學等學科發展起來的工程學的特點是其基本的研究是客觀世界的物質;而軟
件構造卻是對人類智識的研究和加工。智識將體現在行為上,所以,構造行為是
軟體業需格外強調的東西。但,容易引起誤解的一點是,“人類的軟體構造行為”
並不等同於軟體工程,這是確鑿無疑的。因為軟體工程實際上涵蓋了構造行為,
涉及到質量、成本等多個方面,所以構造行為也只是其中零碎的一部分,而這恰
恰是我想在此表達的核心觀點,即軟體工程只能是零碎的,甚至於構造行為,也
是零碎的。

  為什麼零碎
  零碎的含義重在其不可計量的複雜的分散性。比如,一個蘋果被切成幾半,
並沒有形成零碎,因為它的各部分可計量,且其和還為1;而一個密切配合的團隊
被拆散,其結果就形成零碎,因為人的關係很複雜且很難量化,不應該把拆散後
的人的總和直觀地等同於拆散前。這兩個對應的比喻只是想清楚地界定零碎。以
此為標尺,就可以得出構造行為恰如其分的適合該標準的結論。首先,人類行為
是分散的,每個軟體工程師都在做著自己的零碎實驗,有著不同的感受和,
對此,很多具體的理論或者方法其實都是本著一個錯誤的前提,即假定人的同一
性。而這個假定作為總體論比較有代表性的觀點,是很值得懷疑的。每個人甚或
每個公司,作為小的單元,是不可能有多大同一性的,它們只能按一定抽象的規
則,用試錯法得出自己的方法。其次,技術是零碎的。承認這一點就等於
承認人類存在很多知識上的問題,因為僅僅在計算理論中就還有很多是我們所未
知的。既然未知,又怎能說它是一個完整的體系?而個人所做的,甚至於許多大
師所做的,也只不過是添磚加瓦而已,說他們的功能在於建構,是有點兒誇張的
溢美之辭。我只是認同,它們所新增的分量比一般人要沉得多。
  寫到這兒,我想以足夠引起許多人的反駁了。他們會問,誠如你所言,是什
麼合力使個人的(零碎)實驗,匯聚成今天的軟體生產力量?若作為基礎的計算
機技術都如此複雜,是不是我們就該持以悲觀的態度?

  零碎實驗的重要性
  下面我將著力回答這兩個問題,首先是第二個問題。
  在第二個問題背後,其實隱藏著一種更深的理想主義者的唯理主義觀點。他
們認為:人類是可以解決所有計算問題的,而軟體業的發展,必定存在著一種客
觀的規律。毫不隱瞞地說,我曾經也持這種觀點——我相信真理的客觀實在。但
是,今天我想說的是,如果你無法判別什麼是普適真理,就不要相信或接受任何
以真理之名而大行其道的理論。而我們能判別嗎?不能。所以絕不應相信。一旦
以真理為客觀的,就易陷入“歷史決定論”,以為構造行為的發展將循著一條既
定的(雖然是個人無法控制的)道路發展,或者人為地為其設立一個終極目的。
幸好,這樣的思潮在當今並不是很明顯,不過,當人類的軟體生產能力大大發展
時,很難說沒有人會聲稱總結出某些“最終性”的規律,並宣稱可以解決所有的
問題。對此,我的觀點非常明確,那就是我們必須樂觀地承認自己的無知——面
對複雜的,只有透過把它分散為零碎的系統進行研究,因此知識的積累是零
碎的——就算已研究透了一些部件,也無法宣稱發現了部件之間的所有關係。我
想,混沌理論和複雜性理論有助於我做此辯護,暫按此不表。另一個重要論據是,
透過與其它工程學科比較。為什麼在今天從藍圖到實物的過程中,機械工程,建
築工程實施得如此順利,而在軟體工程中又如此艱難呢?特別值得注意的一點是,
前者已經積累了足夠多的零碎實驗(但也不能宣稱解決了所有的問題),有了充
分多的試錯和調整行為。我還有第三條論據,它將依賴於後面提到的“演化模型”,
到那時,我想我的所有觀點才會顯得清晰。

  什麼環境適合於零碎實驗
  先前的第一個問題似乎又引出了另一個問題——如果構造行為是零散的,為
什麼我們通常看到的進步和發展卻呈現著整體性的態勢?這確實很有趣,甚至有
點難以理解,而我會盡力地自圓其說,我的最重要的依據是現代經濟學中的演化
的觀點。如前所述,每個人都在做著自己的零碎實驗。何謂零碎實驗?一言以蔽
之,即試錯和調整。而人們又是在何種環境中實驗的,或者說何種環境更有利於
實驗?我認為,這樣的環境有兩個特點:其一是融入傳統,其二是開放性。每個
人的行為無不受著傳統的影響,形成了一種路徑依賴。比如,大多數人並不知道
劃分模組的依據是什麼,卻自然地這麼實踐著;並不清除goto語句的淵源,卻明
白應避免使用它。正是傳統,使我們節約了很多資訊成本。而開放性,恰恰是現
代公司積極倡導的,比如溝通,交流。因為以別人之所知來彌補自己之所不知,
資訊成本比自己探索或創新要低得多。一方面繼承前人的零碎實驗結果,另一方
面又吸取別人的零碎實驗結果,於是形成了一種演化格局,一種擴充套件的秩序,正
是它們加速了人類社會的發展。

  用零碎實驗來檢驗規律
  此時,我想我應該揭開所為規律的本來面目,並在它與零碎工程之間搭設一
座橋樑。如此,也許對很多人的觀念會起到某些啟示作用。
  任何規律,判別其真偽的依據都是其有效性有多大——不僅是現在,還在將
來。那什麼樣的規律長久有效的可能性更大呢?比如我說“蘋果好吃”和“只有
紅的蘋果好吃”,顯然前者的解釋力會更大,因為如果一旦我發現綠的蘋果也好
吃,後者就被證偽。再比如比較“三個代表”和“毛主席的話永遠是對的”,顯
然還是前者的解釋力更大。因為一旦毛主席犯一個錯,就被證偽。從這兩個例子
中,可不加證明地推出一個結論,即規律越抽象,解釋力會更強。這個結論太重
要了,它說明了沒有一個規律可以被證明永遠有效,而有效性也只是相對的,這
取決於其抽象程度。而“紅的蘋果”,“毛主席”無疑太具體了。
  現代計算機技術中很多規律都是加了很多限定的,它們都是人類智慧的結晶,
企業或個人該如何對待呢?對於任何規律,都不能不加判別地吸收,特別是某些
限定條件太多的規律。只有利用自己或別人的零碎實驗,用試錯法來檢驗規律對
於自己的有效性,並不斷調整自己的方法,才有可能探尋到自己的軟體之道。而
我們也更應該相信,在良好的人類秩序中,規律會越來越抽象化,從而解釋力更
強,我們構造軟體的能力也會越來越強。

  總結
  我想改變什麼?這是寫完此文我問自己的第一個問題。由之而來的第二個問
題是,我可以改變什麼?
  看完此文,大家該下班的還是下班,該回家的還是回家,一切都以與我毫不
相干的方式展開,我真的達到了目的嗎?如果說我達到了,我想我是改變了某種
觀念,至少稍稍修改了別人的某種理解,不管有多麼細微,它都是有意義的。因
為,我深信只有觀念才能戰勝觀念,即使我錯了,也很樂意見到解釋力更強的觀
念出現。
  軟體工程的發展必須以無數零碎的發展為前提,在這個模型中,你我都身處
其中。所以,保護那些零碎實驗賴以生存的環境就太重要了。靠什麼保護?只有
靠制度。它將保護一套抽象的規則,其內容是最大限度地保障個體的自由和權利,
使他們把自己納入一種傳統之中,並保持開放的心態。這正是自發生成人類秩序
的途徑。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-961032/,如需轉載,請註明出處,否則將追究法律責任。

相關文章