王懷民院士:軟件開發(fā)將從開源范式轉(zhuǎn)向群智范式
2023-10-26
來(lái)自:
沈陽(yáng)卡斯特科技發(fā)展有限公司
瀏覽次數(shù):790
過(guò)去我們?cè)谟?jì)算機(jī)上開發(fā)軟件,在計(jì)算機(jī)上運(yùn)行軟件,后來(lái)發(fā)展到互聯(lián)網(wǎng)時(shí)代,通過(guò)網(wǎng)絡(luò)開發(fā)軟件,通過(guò)網(wǎng)絡(luò)運(yùn)行和提供軟件服務(wù)。而到了今天,當(dāng)數(shù)字產(chǎn)業(yè)化、產(chǎn)業(yè)數(shù)字化滲透到更多領(lǐng)域時(shí)。
在20世紀(jì)60年代的科學(xué)研究方法領(lǐng)域,《科學(xué)革命的結(jié)構(gòu)》一書曾提到所謂的范式或者范例變革??茖W(xué)研究有范式之規(guī),往往一個(gè)范式確定下來(lái)后,大量的科學(xué)家就會(huì)在約定的范式中開展科學(xué)研究,直到這種范式不能適應(yīng)科學(xué)的發(fā)展,才會(huì)迎來(lái)科學(xué)研究范式的變革。比如,業(yè)界經(jīng)常談到的范式,還有現(xiàn)在談得很多的AI范式,即用人工智能進(jìn)行科學(xué)研究等,就是這種變革的體現(xiàn)。事實(shí)上,在軟件領(lǐng)域同樣有程序范式、數(shù)據(jù)范式等類似說(shuō)法,這是從20世紀(jì)60—70年代后開始出現(xiàn)的說(shuō)法。今天,又到了范式變革的時(shí)代。有必要從軟件開發(fā)的視角,對(duì)科學(xué)研究進(jìn)程中的一些重要范式進(jìn)行比較,以此探究我們應(yīng)該以怎樣的范式應(yīng)對(duì)開源帶給業(yè)界的機(jī)遇與挑戰(zhàn)。工程范式帶來(lái)的變化,是將軟件或者程序從個(gè)體創(chuàng)作上升為群體化大規(guī)模生產(chǎn)的軟件開發(fā)模式。在此之前,軟件開發(fā)如同在作坊中進(jìn)行個(gè)體創(chuàng)作,像繪畫、雕刻、木工等一樣,是個(gè)體創(chuàng)作的產(chǎn)品,是人文成果。直到20世紀(jì)40—50年代,甚至20世紀(jì)60—70年代,業(yè)內(nèi)開發(fā)軟件時(shí)往往是先在腦海中設(shè)想軟件跑通的情景,然后再調(diào)試部署到計(jì)算機(jī)上。那時(shí)的軟硬件規(guī)模很小,從第一步到最后一步如何執(zhí)行都可以在腦海中預(yù)演。但是隨著數(shù)字計(jì)算機(jī)的出現(xiàn),軟件開發(fā)的效率和質(zhì)量成為突出問題。例如,20世紀(jì)60年代,為了推動(dòng)IBM360系列計(jì)算機(jī)在商業(yè)領(lǐng)域應(yīng)用時(shí)可以適應(yīng)各種外部硬件的需求,IBM開發(fā)出可移植、適應(yīng)不同設(shè)備的操作系統(tǒng)。計(jì)算機(jī)操作系統(tǒng)的研發(fā)和應(yīng)用在軟件史上具有里程碑意義,給軟件界留下了影響至今的操作系統(tǒng)關(guān)鍵技術(shù);同時(shí),也給軟件開發(fā)變革帶來(lái)一個(gè)重要啟示,即軟件開發(fā)所消耗的人力資源遠(yuǎn)遠(yuǎn)超出預(yù)期,軟件質(zhì)量的可靠性、可控性遠(yuǎn)遠(yuǎn)超出軟件架構(gòu)師和程序員的預(yù)期。人們發(fā)現(xiàn),原來(lái)軟件也是如此復(fù)雜和不可控的。所以在那個(gè)時(shí)代,處于工業(yè)化生產(chǎn)浪潮中的人們普遍認(rèn)為西方成熟的工業(yè)化流程能夠保證工業(yè)品的質(zhì)量,于是順勢(shì)形成用保證工業(yè)品批量化大規(guī)模生產(chǎn)的方法來(lái)組織新軟件開發(fā)的發(fā)展思路,這就是所謂的工程范式。1968年,北大西洋公約組織在一次工作會(huì)議上提出“軟件工程”的概念。北約是軍事組織,冷戰(zhàn)時(shí)期為應(yīng)對(duì)軍事挑戰(zhàn)、爭(zhēng)取在軍事領(lǐng)域地位而積極尋求新型信息技術(shù)的支持,因而對(duì)軟件的復(fù)雜性以及保證軟件開發(fā)的效率和質(zhì)量有著迫切的需求。在此背景下,北約投資并組織了一批計(jì)算機(jī)專家,研究如何解決或提高軟件開發(fā)的質(zhì)量問題,于是就有了工程范式基本理念的產(chǎn)生和實(shí)踐。我們將軟件工程所遵循的軟件開發(fā)理念和方法,稱為軟件開發(fā)的工程范式。理解這個(gè)范式理念,要從工業(yè)化大生產(chǎn)出發(fā),首先是從工程技術(shù)中借鑒有效的產(chǎn)品開發(fā)組織模式,把人組織好,按照可控制、可預(yù)期的流程來(lái)設(shè)計(jì)和生產(chǎn)軟件;其次是參照工業(yè)化帶來(lái)自動(dòng)化的經(jīng)驗(yàn),盡可能地研發(fā)軟件開發(fā)工具,使軟件開發(fā)的質(zhì)量和效率得以保證。由此,軟件開發(fā)有了各類V模型,從需求分析開始,然后進(jìn)行系統(tǒng)設(shè)計(jì)、程序設(shè)計(jì)、模塊測(cè)試、單元測(cè)試、集成測(cè)試、確認(rèn)測(cè)試,最后再交付給用戶一個(gè)滿足需求的軟件。與此同時(shí),一個(gè)機(jī)構(gòu)能不能有效地開發(fā)軟件,對(duì)機(jī)構(gòu)的軟件開發(fā)能力成熟度該如何評(píng)估,軟件能力成熟度模型(CMM)就出現(xiàn)了,這是一種用于評(píng)價(jià)軟件承包能力并幫助其改善軟件質(zhì)量的方法。再以自動(dòng)化為例。20世紀(jì)60年代,高級(jí)語(yǔ)言逐步成熟,業(yè)內(nèi)人員可以用更接近于人類學(xué)習(xí)或者訓(xùn)練成本較低的高級(jí)語(yǔ)言寫程序,然后通過(guò)編譯器將其自動(dòng)轉(zhuǎn)變?yōu)闄C(jī)器可執(zhí)行的代碼。在那一時(shí)間段,產(chǎn)生了源代碼和目標(biāo)代碼,源代碼和目標(biāo)代碼的變換過(guò)程就是由計(jì)算機(jī)工具,即我們所熟悉的編譯器完成的。這些如今司空見慣的技術(shù)工具,在20世紀(jì)60年代,是巨大的技術(shù)突破。更進(jìn)一步的是,軟件質(zhì)量行不行的問題,直接拉升了軟件測(cè)試的工作量,通過(guò)自動(dòng)測(cè)試,可以評(píng)估軟件是不是能夠確保某一個(gè)特定的功能性和非功能性的實(shí)現(xiàn),這就促進(jìn)了用自動(dòng)驗(yàn)證方法進(jìn)行軟件驗(yàn)證等一系列技術(shù)的發(fā)展。可以從以下三方面理解工程范式的理念。一是要把一個(gè)軟件的需求說(shuō)清楚,以確保軟件開發(fā)的過(guò)程和質(zhì)量。IBM360計(jì)算機(jī)就是為解決工程師頭腦中的技術(shù)沒有被描述,因而無(wú)法保證軟件開發(fā)質(zhì)量的問題。所以,給出明確的用戶需求描述,是保證軟件開發(fā)過(guò)程和質(zhì)量的前提。二是軟件質(zhì)量,就是開發(fā)出來(lái)的軟件能夠滿足需求規(guī)格說(shuō)明的程度,滿足的程度越質(zhì)量越好。三是軟件開發(fā)效率,就是在需求確定的情況下,用更少的投資、更少的人力、更少的時(shí)間,更快地開發(fā)軟件。那么,實(shí)現(xiàn)上述理念的方法是什么?就是組織工程師按照一個(gè)規(guī)范流程開發(fā)一套軟件技術(shù),并用支持工具保證軟件開發(fā)所有階段的自動(dòng)化。更進(jìn)一步,當(dāng)時(shí)提高軟件開發(fā)效率的一個(gè)重要手段,是用計(jì)算機(jī)來(lái)幫助開發(fā)軟件。隨著IBM360計(jì)算機(jī)的廣泛使用,軟件開發(fā)效率大幅提升,改進(jìn)能力逐漸提高,激發(fā)了計(jì)算機(jī)應(yīng)用在更多領(lǐng)域的推廣。但當(dāng)人們對(duì)開發(fā)軟件的復(fù)雜程度和質(zhì)量有了更高要求時(shí),突然發(fā)現(xiàn)按照這種方法開發(fā)軟件,與制造一輛汽車等其他有形工業(yè)產(chǎn)品并不一樣,工程范式軟件開發(fā)方法在開發(fā)效率和質(zhì)量上面臨一系列問題。1995年,IT研究咨詢公司Standish Group對(duì)美國(guó)境內(nèi)8000個(gè)軟件項(xiàng)目進(jìn)行調(diào)查分析發(fā)現(xiàn),83%的項(xiàng)目無(wú)法在既定時(shí)間內(nèi)開發(fā)完成,開發(fā)周期平均超222%,52.7% 的項(xiàng)目預(yù)算超出原計(jì)劃的189%,31.1%的項(xiàng)目在執(zhí)行過(guò)程中因無(wú)法控制質(zhì)量和成本而被取消。隨著軟件復(fù)雜程度變得更高,互聯(lián)網(wǎng)時(shí)代到來(lái)了,軟件開發(fā)面臨著更大的挑戰(zhàn)。出現(xiàn)上述情況,業(yè)界有以下四點(diǎn)分析。一是工程范式遇到理論瓶頸。軟件開發(fā)需要我們明確需求,但當(dāng)軟件需要應(yīng)對(duì)越來(lái)越多的問題、互聯(lián)網(wǎng)時(shí)代迅猛到來(lái)的時(shí)候,我們突然發(fā)現(xiàn)自身把一個(gè)問題說(shuō)清楚的能力十分有限,過(guò)去把一個(gè)問題說(shuō)清楚要以數(shù)學(xué)形式來(lái)表達(dá),但實(shí)現(xiàn)這個(gè)能力在理論上存在界限;還有將需求用工具自動(dòng)轉(zhuǎn)化為可執(zhí)行代碼,同樣有計(jì)算性和可判定性的瓶頸問題;此外,還存在變換的復(fù)雜性問題。大家發(fā)現(xiàn),這一系列問題在理論上是不可逾越的。二是工程范式的效率問題。實(shí)踐證明,軟件開發(fā)效率怎么也趕不上“摩爾定律”帶來(lái)的計(jì)算基礎(chǔ)設(shè)施硬件發(fā)展的速度(處理器的性能大約每?jī)赡攴槐?,同時(shí)價(jià)格下降為之前的一半)。三是協(xié)同瓶頸。面對(duì)越來(lái)越復(fù)雜的軟件,使用更多人力并不能效率提高,可能還會(huì)降低效率,甚至可能導(dǎo)致軟件開發(fā)失敗。四是網(wǎng)絡(luò)時(shí)代到來(lái)后,業(yè)內(nèi)在開發(fā)系統(tǒng)軟件時(shí)發(fā)現(xiàn),過(guò)去開發(fā)軟件需要先確認(rèn)需求,但在互聯(lián)網(wǎng)時(shí)代,開發(fā)軟件并不知道面對(duì)的用戶是誰(shuí)。只有當(dāng)軟件開發(fā)完成面世后被用戶所接受,才可以驗(yàn)證出軟件適合的用戶群體。這些新情況,都給原有的軟件開發(fā)方式帶來(lái)巨大挑戰(zhàn)。
二、開源范式:自下而上,關(guān)聯(lián)涌現(xiàn)
互聯(lián)網(wǎng)時(shí)代的到來(lái),給軟件開發(fā)也帶來(lái)了重要變化。20世紀(jì)90年代,乃至過(guò)去的20年,促進(jìn)軟件迅速發(fā)展的方法不是我們所期待且矚目的工程化方法,而是一個(gè)不被學(xué)術(shù)界甚至產(chǎn)業(yè)界關(guān)注的“下里巴人”狀態(tài)。它帶來(lái)了從群體化生產(chǎn)到大規(guī)模群體創(chuàng)作的變化,我們稱之為開源范式。這種范式的起因是1974年貝爾實(shí)驗(yàn)室向大學(xué)免費(fèi)開放Unix源代碼系統(tǒng)。美國(guó)政府為保護(hù)在新興計(jì)算機(jī)市場(chǎng)和軟件市場(chǎng)的競(jìng)爭(zhēng)優(yōu)勢(shì),于是支持Unix操作系統(tǒng)免費(fèi)授權(quán)給大學(xué)或研究機(jī)構(gòu)做研究使用。隨著Unix的自由發(fā)展、版本變多,AT&T開始重視Unix的商業(yè)利益,因此就出現(xiàn)版權(quán)回收問題,比如IBM等被授權(quán)的Unix商業(yè)版本代碼不再能被自由傳播,就出現(xiàn)了所謂的開源狀態(tài),出現(xiàn)了開放軟件基金會(huì)。 20世紀(jì)90年代的軟件系統(tǒng)格局由兩部分組成,一是個(gè)人計(jì)算機(jī)占統(tǒng)治地位后,商業(yè)閉源軟件成為主流,而另一個(gè)支流是在學(xué)術(shù)界傳播和發(fā)展的Linux開源軟件。開源范式支持在不確定的網(wǎng)絡(luò)世界通過(guò)眾多的開發(fā)者帶來(lái)豐富變化和競(jìng)爭(zhēng),并自然演化出得到用戶歡迎的軟件制品。Linux正是通過(guò)開源范式帶來(lái)的易變性和多樣性,才更能應(yīng)對(duì)未來(lái)操作系統(tǒng)發(fā)展的不確定性,當(dāng)智能手機(jī)、云計(jì)算、物聯(lián)網(wǎng)等新的需求涌現(xiàn)時(shí),Linux的眾多衍生系統(tǒng)就具有更強(qiáng)大的生存能力和市場(chǎng)競(jìng)爭(zhēng)力。
開源時(shí)代的到來(lái),主要是因?yàn)殚_源在互聯(lián)網(wǎng)時(shí)代成為科技領(lǐng)域創(chuàng)新的主要驅(qū)動(dòng)力。開源領(lǐng)域代碼生長(zhǎng)迅速,到1993年,Linux已經(jīng)從當(dāng)初只有一個(gè)代碼,增長(zhǎng)到大概10萬(wàn)行代碼;再到現(xiàn)階段,僅華為開放參與的代碼規(guī)模就已經(jīng)超過(guò)3300萬(wàn)行,涉及的工程師超過(guò)3萬(wàn)人,僅去年一年提交的代碼就有120多萬(wàn)個(gè)。這種聚集起如此廣泛的開發(fā)者和貢獻(xiàn)者的開源狀態(tài),支撐起至少500個(gè)版本的開源操作系統(tǒng)被商業(yè)化使用。超級(jí)計(jì)算機(jī)TOP500強(qiáng)幾乎均采用Linux作為其操作系統(tǒng),而云計(jì)算操作系統(tǒng)也無(wú)一例外都使用開源系統(tǒng)。如今的智能手機(jī)、機(jī)器學(xué)習(xí)、大模型同樣是開源系統(tǒng)狀態(tài)。大模型領(lǐng)域中開源軟件的應(yīng)用非常活躍,由此帶動(dòng)了中國(guó)大模型不斷涌現(xiàn)。開源之所以取得成功,是因?yàn)樗ㄟ^(guò)多樣性來(lái)應(yīng)對(duì)不確定性。20世紀(jì)80年代,在個(gè)人計(jì)算機(jī)時(shí)代,計(jì)算機(jī)發(fā)展的確定性使得微軟以給企業(yè)操作系統(tǒng)發(fā)放閉源許可證的方式,獲得對(duì)操作系統(tǒng)和軟件的定義權(quán)。作為當(dāng)時(shí)生產(chǎn)力的代表,微軟以其確定性視野定義了當(dāng)時(shí)的互聯(lián)網(wǎng)時(shí)代,也正因如此,無(wú)論操作系統(tǒng)版本如何演化,都完全由這家公司來(lái)控制。考慮控制成本,市場(chǎng)主導(dǎo)者就不會(huì)開發(fā)更多的版本分支,一個(gè)操作系統(tǒng)版本就能解決所有問題。當(dāng)軟件、操作系統(tǒng)的每個(gè)分支均由微軟一家開發(fā)時(shí),那么這家公司以企業(yè)化的方式組織數(shù)千個(gè)工程師,耗時(shí)幾年全力開發(fā)一個(gè)新版本即可控制市場(chǎng)。還好,這種情況在互聯(lián)網(wǎng)時(shí)代發(fā)生了變化。按照GPR模型,每個(gè)人都可以基于軟件內(nèi)核進(jìn)行修改,修改后再反饋回來(lái),這是一種雙性范式。GPR下的內(nèi)核可由軟件下載方按照自己的理解書寫新的版本,如此就可以產(chǎn)生相當(dāng)多的分支,在不確定性的互聯(lián)網(wǎng)時(shí)代,開源給軟件、操作系統(tǒng)等在各個(gè)領(lǐng)域的探索提供了巨大的可能。也就是說(shuō),適應(yīng)互聯(lián)網(wǎng)不確定性的軟件可能版本數(shù)量變多了,可成本卻降低了,這或許就是開源成功背后的邏輯。相較于工程范式,開源范式有很多理念上和方法上的革命性變化。一是從需求看,開源軟件沒有明確的用戶。在互聯(lián)網(wǎng)時(shí)代,互聯(lián)網(wǎng)軟件并不知道自己的用戶在哪里,用戶就是開發(fā)者自己,開發(fā)者基于他所理解的世界進(jìn)行創(chuàng)作,而不以明確需求為開發(fā)前提,這不像過(guò)去工程范式要求的那樣,開發(fā)軟件之前要明確它的用戶群體。二是從質(zhì)量看,什么是好的軟件,開源社區(qū)中反響熱烈的軟件就是好的軟件。三是從效率看,什么是效率,開源社區(qū)中有人提出問題后,響應(yīng)快就是效率高。不過(guò),開源模式同樣有其問題。開源時(shí)代的組織模式是自組織模式,工具主要是版本控制。實(shí)踐中,軟件開發(fā)的版本控制很復(fù)雜,而如此多的版本控制更是災(zāi)難性問題。另一個(gè)問題就是軟件發(fā)布?,F(xiàn)在開源技術(shù)發(fā)展如火如荼,當(dāng)互聯(lián)網(wǎng)在全世界廣泛部署,,由少數(shù)人、學(xué)術(shù)界走向全社會(huì),成為一種通過(guò)互聯(lián)網(wǎng)傳播的開發(fā)模式。這個(gè)模式是適應(yīng)變異和競(jìng)爭(zhēng)的軟件開發(fā)范式,可以稱之為自下而上的開發(fā)方式,和自上而下的開發(fā)方式形成了鮮明對(duì)照。開源對(duì)中國(guó)軟件發(fā)展產(chǎn)生了巨大的影響,也就是在開源大發(fā)展的階段,中國(guó)軟件終于獲得了觸達(dá)基礎(chǔ)軟件核心技術(shù)實(shí)現(xiàn)的機(jī)會(huì)。工程范式和開源范式都存在各自的問題。工程范式強(qiáng)調(diào)確定性,需要有確定的需求和確定的用戶,按照給定的時(shí)間和預(yù)算,最終提交給軟件使用者。工程范式強(qiáng)調(diào)的是要聚焦交付給用戶的軟件產(chǎn)品,而開源范式是一個(gè)自組織甚至是無(wú)組織的群體,最終實(shí)現(xiàn)的是程序員或者程序設(shè)計(jì)者的個(gè)人作品,軟件發(fā)布不對(duì)最終結(jié)果做確定性承諾。工程范式更加強(qiáng)調(diào)圍繞質(zhì)量和需求這樣一個(gè)匯聚開發(fā)者智力的生產(chǎn)控制過(guò)程,而開源范式則是一個(gè)鼓勵(lì)自由創(chuàng)作的過(guò)程。當(dāng)然,確定性和不確定性沒有好壞之分,當(dāng)我們能夠看到確定性的時(shí)候應(yīng)該用工程化的方法來(lái)達(dá)成,當(dāng)我們的目標(biāo)不那么明晰時(shí)可以鼓勵(lì)更多的可能性探索。那么,實(shí)踐中如何平衡軟件需求的確定性和不確定性之間的矛盾,進(jìn)而更有效地、可預(yù)期地組織軟件開發(fā)群體的智力?這就需要探索一個(gè)更加平衡的方式——群智范式。