從人類的發展史看軟體及軟體工程的未來
摘 要: 透過人類數千萬年的發展史,可以看到一條清晰的、刻在時間軸上的演變脈絡。該脈絡不僅訴說著人類過去的發展,而且也指出了人類命運的走向。軟體和軟體工程作為人類曆史發展過程中出現的一種重要工具,自然也會在在這條脈絡中留下自己的痕迹,而這條演變脈絡對人類命運走向的指導作用自然也適用於軟體與軟體工程。本文正是從這個廣闊的視角去看待軟體與軟體工程的未來與前景,並對此進行一點粗淺的探索。
關鍵詞: 軟體,軟體工程,人類,發展史
See the Future of Software and Software Engineering through Human History
(School of Software, Shanghai Jiao Tong University, Shanghai 200240, China)
Abstract A careful examination of human history reveals a clear thread of human development. Carved on the limitless time line, this thread not only records the past process of human evolution, but also points out the direction of human
destiny. As important inventions and tools, software and software engineering also leave her trail in this human development thread. Thus, we can look at software and software engineering from the perspective of human evolution history and gain some unique
insights.
Key words Software, software engineering, human history
1. 引 言
國內外的相關機構預測軟體工程的未來時,通常會基於現狀和未來的趨勢來進行研究。而面對現今世界紛繁複雜的技術與架構,這種基於現狀的研究方法面臨著重重困難,而想要對軟體工程的走向進行準確定位則更具挑戰性。
本文認為有一種方法可以被用來更好地理解軟體及軟體工程的未來。軟體是人類的一種工具,軟體工程是人類創造工具的一種體系, 如果將軟體工程放入到整個人類的發展史來進行考察,會發現其脈絡變得更為清晰和可尋。
在接下來的分析和預測中會貫徹一個基本的鏈式原則:即人類社會的變化引發軟體需求的變化,軟體需求的變化引發軟體的演化,而軟體的演化必然導致軟體工程的進一步變化。因此本文會從人類的發展,電腦世界的演化和軟體工程的發展這三個方面來對未來進行預測。為便於深入理解,圖1給出了整個課題的基本架構。其中,藍色實線代錶鏈式原則,虛線代表設想,並按章節劃為三大部分。
圖1 課題架構
2. 人類的發展與未來
2.1 人類發展史的啟示
整個人類的發展史篇章浩大,不可能一一盡述,本課題的目標是利用關鍵點來理清發展的基本脈絡。表一根據目前被普遍接受的進化論理論,將人類發展史中的一些重要轉折點,按照時間順序,時間差和事件名稱列表如下。轉折點的篩選原則是促使人類發生重大和深遠變革的事件。
表1 人類發展轉折點
序號 |
時間 |
時間差 (與上一事件) |
曆史性事件 |
1 |
6500萬年前 |
|
恐龍滅絕 |
2 |
2500萬年前 |
4000萬年 |
原始猿類出現 |
3 |
600萬年前 |
1900萬年 |
非洲南方古猿出現 |
4 |
20萬年前 |
580萬年 |
智人出現 |
5 |
1萬年前 |
19萬年 |
新石器時代 |
6 |
5千年前 |
5千年 |
銅器使用 |
7 |
1400年前 |
3600年 |
鐵器使用 |
8 |
公元1500年左右 |
2900年 |
地理大發現 |
9 |
公元1830年左右 |
330年 |
工業大革命 |
10 |
公元1950左右 |
120年 |
資訊時代 |
利用表1已經可以初步看到人類發展的一些重要特徵。首先,曆史性事件發生的時間間隔越來越短,頻率越來越快,從千萬年到百萬年,十萬年,再到千年百年層級,加速度異常驚人;其次,1-4這四個事件的誘因在於氣候和環境的變化,而隨後的5-10這6個事件則歸根於人類利用工具的能力發生了巨變。尤其是在1950年後的幾十年間,人類更像是進入了一個混沌的世界,從原子彈到登月,從個人電腦到互連網,人類加速進行著一連串的亞重量級的變化,電腦在其中扮演了重要的角色,但主因依然取決於人類利用工具技術的提高。
如果我們進一步地,利用表1,將時間和事件分別做為橫縱軸,繪製成圖,可發現更多特徵。圖2是將事件做為橫軸,時間做為縱軸繪製成的曲線,曲線在智人出現這一點後幾乎變成了一條平行線,這似乎是意味人類的發展在智人出現後已經進入了一種近乎靜止的死亡態;
圖2 人類發展史I
圖3是將時間做為橫軸,事件做為縱軸繪製成的曲線,類似地,在智人出現這一點後,曲線幾乎變成了一根近乎垂直的直線,這似乎意味人類有可能在未來的某點突然走向崩潰。
圖3 人類發展史Ⅱ
但問題顯然不是那麼簡單,對圖4的觀察發現,(圖4)頂部的這條曲線與圖2相同,顯示在人類進入智人時代後,發展急劇加速,如果仍用千萬年的時間尺度來衡量,曲線在時間軸上幾乎顯現不出任何變化,近乎一根靜止的直線。事實上,如果此點之後不變換時間尺度的話,不論人類隨後發生多少曆史性事件,它們將永遠凝聚在智人這一點上,也就產生了圖2和圖3的停滯和崩潰態。 幸運的是,人類並沒有終止在這一點上,而是採用一種逐點深入的模式實現了持續突破。
圖4 人類發展史Ⅲ
以圖4中部這條曲線為例可看到,如果將時間度量單位從千萬年縮短為十萬年,則在智人這一點上,一個新的空間被開啟,由此出現了另一條類似的曲線。同樣圖4下部曲線顯示,在鐵器使用後,當人類發展再度進入一個極點時,又一個新的空間被開啟,同時度量尺度也從十萬年層級進入到千年層級。
2.2 人類發展的極限
當人類以縮短髮展周期,逐點深入的方式實現持續突破時,也導致了人類的一種宿命── 可以看到,當前隨著人類的發展不斷加速,曆史性事件發生的時間間隔已經從千年層級縮短到百年層級。以這樣的趨勢,在未來,人類發展周期甚至可以達到年月星期的層級。然而,當人類發展進入到日的層級時,將面臨巨大的挑戰。想象一下,如果人們每天清晨醒來,都發現社會已經發生一次巨變,而周圍的一切都已陌生時,這是怎樣一種情景。
再次審視圖2,3和4,更深入地去看待這種宿命。事實上, 人類發展的曲線已經揭示了以下幾點:
(1) 人類的發展在不斷加速;
(2) 在智人出現前,人類的發展有賴於環境和生物體自身的緩慢變化;而在智人出現後,人類的每一次大發展都深刻依賴於創造和利用工具技術的飛躍;
(3) 由於發展的加速,人類的發展是一種極不平衡的模式,在這種模式下,人類多次面臨極點,但每次人類成功突破了極點,擺脫了長期衰退和突然死亡的宿命;
(4) 智人出現後,人類的突破遵循同樣的模式—即利用工具技術無形中將時間域的顆粒細分,以實現在空間域和對象域的放大和延伸;
(5) 這種模式面臨一個嚴峻的瓶頸,即人類生命體自身的局限,人類的成長遵循著太陽系幾十億年來特有的重複持續時間,人類在達到月周日層級的發展速度後,生命體本身已經到達一種承受的極限。可以看到,人類孕育新生命是基於年月的層級,而最基本的新陳代謝周期也基於日的層級,這些都是生命體為了適應太陽系和地球的生存環境經過千萬年的演化而形成的屬性。如果在不久的未來,人類社會突破的時間域顆粒縮小到時分秒,則可能的突破模式有:
a. 生物技術的巨大突破。人類孕育新生命和基本新陳代謝的周期不再局限於年月日,而達到時分秒的層級,這種突破實際上推翻了千萬年來的生命體模型,穩定性很難保證;
b. 電腦和人工智慧的巨大突破。人類早已意識到自身能力的局限性,而一直試圖創造更為完美的類生命體來體現自我的意志,讓人類脫身成為新的上帝的角色。電腦機技術給了這種夢想實現的可能性,但毫無疑問,這必須與生物技術有效結合。
c. 人類突破了光速的限制,創造出新的時間概念,時間域不再是人類發展的最大瓶頸。這種突破模式有賴於物理學,電腦技術和空間技術的重大突破,有一定的可能性,但難度很大;
d. 除此之外,還存在另一種可能,即人類社會採用另一種未知的發展模式,而不再過度依賴於工具技術的提高。例如採用崩潰洗盤再發展的模式。
對比人類所創造出的4種革命性的工具:貨幣, 電腦及其網路,現代交通工具,核武器。後三種工具分別給b,c,d三種突破模型提供了可能性。
3. 軟體與軟體工程的發展
3.1 電腦及其軟體的發展
軟體的發展和電腦的演化密不可分,這裡分別從三個方面來考察電腦世界的演化史。
圖5 電腦世界演化史
從圖5上可看到:
(1) 在硬體領域,電腦在1971年左右演化到大規模整合電路時,己進入到相對穩定的階段,電腦的核心元件在隨後的繁榮階段並沒有發生革命性的變化,但依靠整合度的提高,在計算能力和儲存容量上發生了飛躍,另一個重要的現象是目前的電腦開始出現了種群化差異,巨型化,微型化,網路化,智能化分別用於滿足人類需求的不同方面。最後一個特徵是,第五六代電腦(光子,超導和神經網路電腦)在經曆了二十多年的緩慢發展後,取得了一定的進展,但仍處於實驗階段。
(2) 在電腦和軟體語言方面,同樣也是在60年代末70年代初開始進入了一個穩定期,結構化程式設計和物件導向語言幾乎在同時誕生,並不斷髮展,並依然佔據著整個軟體世界的大半江山。同時,一千多種進階語言出現標誌著軟體語言也出現了種群化的特徵,近十年來,軟體開發和軟體語言出現了幾個新的方向:面向方面,模型驅動,面向服務和網路協同,這也是為了滿足人類需求的不同方面。
(3) 電腦功能方面的演化則更耐人尋味,最初的電腦和軟體只是為瞭解決計算和資料存放區的問題,隨後逐步深入到工業和企業管理的每一個角落,隨後又進入到個人和娛樂領域,INTERNET的發展則進一步讓軟體逐步搭建起一個虛擬世界,事實上,如章節1.2中所提到的,電腦及其軟體已經自然而然的開始協助人類突破下一個時間域的極限,前面所提到的b型突破模型:即電腦與人工智慧和生物技術的結合,創造出新的類生命體,很有可能在近幾十年內實現。
為了進一步看清電腦及其軟體當前所處的階段,可對比生物界的演化來進行分析。
圖6 生物界演化史
對比圖5和圖6,電子管電腦、晶體管電腦、整合電路電腦可分別對應於生物界的生物單分子、生物高分子和原核生物階段,最初的大規模整合電路可看作為真核生物,當電腦出現種群化特徵時,電腦世界如同生物界向植物和動物過渡一樣,出現了多種走向,有巨型,微型,網路和智能各種趨勢,但電腦及其軟體仍處於多樣化繁衍的起點,對比生物界,可看到,電腦及其軟體有一個重要的階段尚需跨越,即無性繁殖向有性繁殖的階段。
3.2 軟體工程的發展
進一步地,結合人類發展史和電腦世界演化史來考察軟體工程的發展史。
表2 軟體工程過程模型
表2將軟體工程的主要過程模型做了一個簡要的匯總,並將所有的軟體工程模型劃分為三大領域和五個階段,三大領域分別為:
1) 慣例模型:瀑布模型,增量模型,演化過程模型和統一過程模型是其中的代表;
2) 敏捷過程模型:極限編程(XP)是其中的代表;
3) 新過程模型和研究領域:模型驅動開發和雲端運算是其中的代表;
而在五個關鍵性階段中,鏈式原則貫穿始終。
1) 第一階段:瀑布模型。軟體的工業化和類生命性最終導致了瀑布模型的出現,瀑布模型構建了軟體世界中一個最基本的生命週期理念。同時有趣的是,瀑布模型和大規模整合電路、結構化程式設計語言以及物件導向語言一起出現在1970年前後,耐人尋味;
2) 第二階段:演化過程模型。如同生物的演化並非一蹴而就,成熟的軟體也應是通過多個細小的生命重複持續時間迭代而成,演化過程模型的出現再次驗證了軟體所特有的類生命特徵;
3) 第三階段:統一過程階段。 統一過程模型和CMM/CMMI的提出,反映了人類的一個基本需求,即在高速變化的環境中試圖追求內部的相對穩定,這同時也標誌著軟體工程進入到相對成熟和穩定的階段;
4) 第四階段:慣例模型和敏捷過程模型並存階段。敏捷過程反映了人類的另一個基本需求—隨變順變應變。當軟體工程演化到這一階段時,如同生物界和電腦世界演化一樣,實際上已經開始顯現種群化的特徵;
5) 第五階段:模型驅動和雲端運算階段。模型驅動是為了滿足軟體工業自動化的需求,雲端運算則基於Internet,強調面向服務與計算資源整合。這兩個概念提出已久,而真正啟動才剛剛開始,距離成熟有待時日。但也進一步證明了軟體工程開始進入種群化階段。
需要指出的一點是,由於軟體工程的發展遵循鏈式原則,軟體工程的發展也總是滯後於軟體的發展,通常是在軟體的某項語言、技術或工具進入穩定期後,軟體工程才會有相應新的思想出現。
例如,軟體的進階語言在1954年已出現,而軟體工程在1968年才剛剛提出;當軟體進入結構化程式階段時,瀑布模型剛剛顯現;當軟體物件導向技術逐漸成熟時,演化過程模型開始出現;當物件導向技術開始和網路緊密結合時,統一和敏捷過程才開始出現。
可以預見的是,未來軟體發展和軟體工程發展之間的間隔會逐步縮短,5-10年的滯後期有可縮短到2-3年。
4. 軟體與軟體工程的未來
在完成了對人類社會、電腦世界和軟體工程世界的發展曆程的分析和回顧後,綜合以上的因素,可以對軟體和軟體工程的未來有一個較為合理的展望。
4.1 種群化與隨變
在分析電腦硬體發展,語言發展,軟體工程發展時,一個非常明顯趨勢的是,軟體和軟體工程都將步入一個種群化的世界。
種群化產生的主要原因,一是人類社會的加速發展導致
需求多樣化和外部環境的加速變化,從而產生適應不同需求
和環境的軟體及軟體工程;二是電腦及其網路承載著人類
是實現時間域新突破的曆史使命,從而必然具有類似於生命
體演化的種群性特徵。
另一個可能的預期是,隨著人類社會變化的進一步加速,強調快速隨變的敏捷過程有可能在未來的競爭中佔據越來越重要的地位。
4.2 從無性繁殖到有性繁殖
在2.1中可以看到,類似於生物界的演化,電腦世界在進入到種群化階段後,下一個需要實現的重大突破是從無性繁殖到有性繁殖。
眾所周知,在生命世界中,除病毒外,絕大部分都是由細胞組成的。而此類生物在進化過程中,存在兩種截然不同的繁殖方式,無性繁殖和有性繁殖。
無性繁殖在進化的低級階段產生,採用簡單的分裂方式進行繁殖,產生的生命體相對穩定,進化以變異為基礎進行,繁殖速度驚人。但對環境變化的適應能力較差。
有性繁殖在進化的進階階段產生,有性繁殖使後代在性狀上產生分離,實現後代性狀的多樣性變異,同時繼承父母雙發優良基因的後代獲得更大的生存幾率,對環境變化的適應性要遠遠優於無性繁殖。
再次透析軟體與軟體工程的發展,當軟體進入到物件導向的階段時,人類就已經利用“類”這個概念創造為軟體創造出了一個最原始的細胞,軟體大師們曾本能地嘗試用單類繼承和多類繼承兩種來構造軟體的核心,不行的是,多類繼承在穩定性上存在諸多無法解決的問題,最終單類繼承加介面的方式佔據了主流。
結合3.1基本可以認定,目前的軟體體系仍處於無性繁殖向有性繁殖過渡的初始階段。軟體體系的變異主要採用重構或介面或服務的方式實現。而在未來,要想實現生命世界的”適者生存”式的變異和自我進化,對於軟體的最基本單元“類”,也許最佳的模式既不是單類繼承,也非多類繼承,而是一父一母的雙類繼承,同時變異時採取類似人類染色體似的變異法則,只允許同種群間的單個或極少部分染色體結合發生變異,這樣既保證了一定程度的穩定性,又提供了更優良的變異,如此才能讓電腦及其軟體真正實現生命世界進階階段的有性繁殖。
4.3 協同與自動化世界
當今的電腦及其軟體距離智能生命體尚有待時日,但在高速運算,海量儲存以及網路協同方面已經呈現出超越當前一切已知生命體的特徵,尤其是網路協同,從某種意義上講,已經協助人類開啟了一個新的空間,雲端運算、知識搜尋、面向服務和虛擬世界會在未來有很大的發展空間。
在另一個方面,軟體的工業化特徵也導致了模型驅動的出現,這種將模型與自動化相結合思想,在抽象世界、工具運用和工業自動化間找到很好的平衡點,在未來應該會有持續的發展。但像搭積木似平民化軟體生產仍有待時日,因為這需要整個世界的工業化水平達到一個新的水平。
4.4 平台相關與無關
在一個種群化和工業化的電腦世界裡,平台相關和平台無關的技術都會得到持續的發展,但可以預見的是,為適應網路化和自動化的需求,平台無關和構件重用的技術會得到更長足的發展,而高內聚低耦合這一偉大的思想將貫穿始終。
4.5 垃圾處理工程
人類和軟體技術發展的速度越快,產生知識垃圾的速度也會越快,而人類從海量垃圾中篩選價值資料的需求也會更強烈。因此,在未來的軟體和軟體工程世界中,有可能會出現一項垃圾處理工程,以協助人類智能地搜尋和篩選知識,分類處理無價值的垃圾資料。
4.6 後人工智慧
電腦及軟體發展在進入到穩定期後似乎遇到了一個不可調和的矛盾,首先電腦的工業化特徵要求軟體具有較高的穩定性和再生性,而軟體的類生命性又渴望軟體具有很好的自學習和變異能力,兩者具有一定地衝突性。
值得欣慰的是,當前電腦及其軟體世界所發生的種群性變化,可以較好的解決這一矛盾。如同生物界一樣,低等生物具備很好的穩定性和再生性,而高等的有性繁殖生物具備很好的變異性和自學習能力,工業和智能在這裡找到了很好的平衡點。
展望未來的智能電腦和軟體工程,除了無性到有性的重大突破,還可以發現一下幾個突破點。
(1) 輸入輸出工程。電腦在未來的輸入輸出形式會極大豐富,與生物技術的結合,與網路虛擬世界的結合,與其他工業化產品的結合,有可能誕生新的交叉行業——輸入輸出工程。
(2) 離散控制。離散控制,協同工作,這是網路世界帶來的挑戰,這種控制和協同還包括種群化的電腦世界中不同層次間的溝通和合作
(3) 模糊計算。在精確計算上,電腦系統已經站到了一個新的高度,而在模糊計算上,電腦及其軟體仍遠遠落後於人腦,這是一塊重要但有待持續關注的領域,有理由相信,這個領域的發展也能帶來軟體及軟體工程領域新的變革。
(4) 變異和自學習控制。一旦軟體實現了自變異並具備了自學習能力,如何創造一種機制控制這種變異和自學習向著良性的方向發展也會變成一個重要的課題。
4.7 電腦藝術與意識工程
當人類的節奏逐步加快,當電腦逐步進入到每個人的生活,並創造出一個虛擬與網路的世界時,那些延續了數千年的藝術形式正發生漸漸地變化,在未來,當一個貫穿了人類意識的類生命世界逐步強大起來時,藝術也會隨之發生變化,新的對於“美”的追求,新的意識與思想交流方式,最終會導致藝術世界發生巨大的變化。如何展現新的藝術形式,如何把握電腦的意識並有效實現人與電腦的意識溝通,有希望在未來成為一個重要的課題。
4.8 下一個上帝
如果人類發展有幸逃過1.2中的d類模式,人類完全有可能將自己置身於一個新上帝的角色,創造出另一個新的電腦世界。按照當前人類的發展趨勢,網路技術已經協助人類開啟一個新的突破口,生物技術和智能電腦應該是在網路技術走向瓶頸後下一步的突破點。而科幻世界中的具備獨立意識機器人,機器人三原則和發生劇變的奇點應當是再之後的事情。
一個有趣的現象是,當人類將自我的壽命從原始社會15歲提升到65歲時,人類卻將整個社會的發展周期從百年縮短到幾十年的層級,未來的人類將有可能在一生中目睹整個社會發生幾次甚至幾十次的劇變。
結束語
通過對人類的發展史分析,找出了人類發展的特定規律,並利用鏈式原則,可將其運用到對軟體和軟體工程的預測上。
進一步對比電腦世界和生物界的演化史,找出其間的的異同以及內在的規律。其後對於軟體工程發展的歸納和分析,再次驗證了這些潛在的規律。
最後對於軟體和軟體工程的未來,做出七項預測,可協助和促進軟體及軟體工程研究和發展。
參 考 文 獻
1. Roger s. Pressman. Software Engineering: A Practitioner's Approach, Six Edition, 2005
2. Frederick Phillips Brooks, Jr. The Mythical Man-Month, 1995.
3. Stephen R Schach. Object Oriented and Classical Software Engineering, 2005.
4. Alistair Cockburn. Agile Software Development, 2000
5. Kent Beck. Extreme Programming Explained: Embrace Change, 2000
6. Bertrand Russell. A History of Western Philosophy, 1945
7. Roger Lewin. Human evolution: an illustrated introduction, 2005
8. Wikipedia. History of programming languages, 2009
9. Ulf Hashagen. History of computing: Software Issues, 2002
10. Tetsuo Tamai, Yohsuke Torimitsu. Software Lifetime and its Evolution Process over Generations, 1992
11. Timo Olavi Vuorisalo, Pia Kristina Mutikainen. Life history evolution in plants, 1999