被軟件所推動(dòng)的軟件工程發(fā)展史

首先,這是一篇讀書筆記。最近我讀完了一本朋友推薦的好書《工程學(xué)——無盡的前沿》,是由美籍華人物理學(xué)家歐陽瑩之寫的。雖然書中有很多值得細(xì)細(xì)品讀的段落,但是在這本書中我最關(guān)心的,還是關(guān)于軟件工程的段落。因?yàn)槲铱吹竭^一些爭論:“軟件工程”是不是屬于“工程學(xué)”的范疇?

軟件工程是不是工程學(xué)的一種?

有人曾經(jīng)說過:“就像社會(huì)工程學(xué)(Social Engineering)不是工程學(xué)一樣,軟件工程學(xué)(Software Engineering)也不是工程學(xué)!”

有興趣的朋友,可以參考這三個(gè)討論:
在quora上的討論:Is software engineering an engineering discipline or not?
在stackexchange上的討論:# Is software development an engineering discipline?
在reddit上的討論:Is "software engineering" really engineering?

在讀完本書后,我相當(dāng)確信,軟件工程肯定是工程學(xué)的分支之一,因?yàn)闀械膬啥蚊枋觯?/p>


土木工程師克拉克(Frederick Clarke)把廣義的工程學(xué)很恰當(dāng)?shù)孛枋鰹椋骸八?fù)有微妙而艱難的使命,要把科學(xué)抽象轉(zhuǎn)化為世俗生活中的實(shí)踐語言;這也許是世界上要求最為全面的任務(wù)。因?yàn)樗枰斫?strong>兩個(gè)不同的領(lǐng)域——不僅有科學(xué)賴以安身立命的純理論,還有人類社會(huì)中所有復(fù)雜事物的目標(biāo)、動(dòng)力和渴望。工程師必須同時(shí)是一位哲學(xué)家、人文主義者和精明務(wù)實(shí)、身手不凡的匠人。他必須是一位足以知道應(yīng)該信仰什么的哲學(xué)家,足以知道該追求什么的人文主義者,以及足以知道該制作什么的工匠。”


無論是前一段較為感性的定義,還是后一段較為理性的分析,都非常符合我對(duì)于軟件工程的理解。(ps. 由此可以看出,產(chǎn)品經(jīng)理也是軟件工程師的一種)但是,為什么業(yè)界會(huì)出現(xiàn)這樣的爭論呢?在我看來,這與軟件工程的發(fā)展歷程有關(guān)。

軟件工程的發(fā)展歷程

早期的軟件工程,是來源于軟件危機(jī),為了解決危機(jī),軟件開發(fā)者開始向傳統(tǒng)的工程學(xué)尋求方法論。但是,軟件工程的發(fā)展實(shí)在是太快了,越來越不像傳統(tǒng)工程了。

例如:敏捷軟件開發(fā)和開源軟件工程。

敏捷軟件開發(fā),本質(zhì)上是對(duì)于傳統(tǒng)瀑布模型的一場反抗。而瀑布模型,才是直接從工程學(xué)的理念傳承下來的。

敏捷的模型,基于一個(gè)完全不同的假設(shè):我們無法(也不應(yīng)該)在系統(tǒng)開發(fā)之前,分析所有需求。我們可以在系統(tǒng)有了第一個(gè)原型之后,再反復(fù)迭代。(參考:分析癱瘓)

至于開源軟件的開發(fā),就更加驚人了,傳統(tǒng)工程學(xué)所以理解的“嚴(yán)密組織,科學(xué)管理”被進(jìn)一步顛覆了。一個(gè)松散的組織,一群自由來去的愛好者,在一個(gè)并不明確的目標(biāo)下工作——“Just for Fun”。但是卻創(chuàng)造出驚人的開源軟件,不僅僅包含了諸多創(chuàng)新,而且質(zhì)量非常優(yōu)秀。

到了現(xiàn)在,敏捷、DevOps、開源、云計(jì)算、AI,各種各樣的思潮不斷涌現(xiàn),軟件工程已經(jīng)漸行漸遠(yuǎn),越來越不像“那些工程”了。

如何研究軟件工程的發(fā)展歷程?

這篇文章,同時(shí)有可能是一本書《軟件工程發(fā)展史》的前言。因?yàn)槟壳拔宜苷业降能浖こ滔嚓P(guān)書籍,都沒有深入分析過:為何軟件工程,會(huì)這樣發(fā)展。所以,我感到相當(dāng)?shù)牟粷M意!

我最喜歡的歷史學(xué)家錢穆先生,在《國史大綱》的前言中說道:“治國史之第一任務(wù),在能于國家民族之內(nèi)部自身,求得其獨(dú)特精神之所在。”

按照同樣的思路來看軟件工程發(fā)展史,也不能僅僅把一堆事件、方法、技術(shù)羅列出來,而是要尋求發(fā)展背后的獨(dú)特的“精神”所在。是什么在推動(dòng)著軟件工程,一直不斷的向前發(fā)展?

我想提出的一種歷史研究的思路是:雖然不能簡單的斷定因果,但是可以做依賴分析。在歷史發(fā)展的過程中,一個(gè)事物的誕生,雖然我們不能找全所有的充分必要條件,但是必要條件(前置依賴項(xiàng)),是可以找到的。

從現(xiàn)代軟件工程的特征,回望發(fā)展歷程,我們找到了以下依賴項(xiàng):

  1. 計(jì)算機(jī) --> 軟件 --> 軟件工程
  2. 工程學(xué) --> 軟件工程 --> 現(xiàn)代軟件工程
  3. 網(wǎng)絡(luò) --> 互聯(lián)網(wǎng) --> 開源軟件 --> 基于開源的軟件工程 --> 可信軟件工程
  4. 計(jì)算機(jī)網(wǎng)絡(luò) --> 互聯(lián)網(wǎng) --> 云計(jì)算 --> 基于云的軟件架構(gòu) --> DevOps

這里列出的各條線索,也許可以隨后可以畫出一個(gè)更加清晰的,依賴發(fā)展時(shí)間線。簡單的總結(jié),我們可以說:軟件的飛速發(fā)展,推動(dòng)了軟件工程的飛速發(fā)展。因?yàn)檐浖_發(fā)所用到的工具,所依賴的環(huán)境、操作系統(tǒng)、框架和類庫,也是軟件。因此,軟件開發(fā)人員會(huì)在工作中,不斷的改造,完善,創(chuàng)新著自己的工具(這在其他領(lǐng)域,卻非常罕見),這就是導(dǎo)致了軟件工程,得以飛速發(fā)展的原動(dòng)力。

當(dāng)然,詳細(xì)的討論,可能真的得寫出一本書來了。

軟件與軟件工程的發(fā)展反哺工程學(xué)

雖然軟件工程脫胎于工程學(xué),但是現(xiàn)在的趨勢卻是:越來越多的工程領(lǐng)域,開始使用軟件,并且開始吸納現(xiàn)代軟件工程中的思想,這就形成了一種反哺。

傳統(tǒng)的系統(tǒng)工程思維,往往是“左移”。測試左移,設(shè)計(jì)左移,越是重要的決策,越是早做,因?yàn)樵酵碜觯鷥r(jià)越大。既然犯錯(cuò)誤的代價(jià)很大,那就盡量不犯錯(cuò)。

但是,我們也可以從另一個(gè)思路來解決問題:既然我們無法避免犯錯(cuò),那就用模擬的方式,用自動(dòng)化測試的方式,用快速迭代的方式,降低決策成本,降低試錯(cuò)的成本。

這兩種思路,并非簡單的你對(duì)我錯(cuò),而是需要在一個(gè)更大的模型中,綜合考慮、選擇運(yùn)用。

總結(jié)

在工程學(xué)的大家庭里,軟件工程學(xué)從早期的求助、借鑒于傳統(tǒng)工程學(xué),逐漸發(fā)展壯大,到現(xiàn)在的反哺、增強(qiáng)其他領(lǐng)域的工程學(xué)。軟件工程,注定會(huì)成為工程學(xué)中越來越強(qiáng)壯的一員。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 軟件工程的研究領(lǐng)域包括軟件的開發(fā)方法、軟件周期以及軟件工程的實(shí)踐等。 軟件危機(jī)與軟件工程的起源 1. 計(jì)算機(jī)系統(tǒng)的...
    程序猿陳嘉閱讀 4,621評(píng)論 0 7
  • 互聯(lián)網(wǎng)提供了低成本的萬物互聯(lián)的物質(zhì)基礎(chǔ),當(dāng)然這其中最重要的是人與人的互聯(lián)。這種低成本的信息交流方式,可以有效解決傳...
    邵棟閱讀 2,959評(píng)論 2 8
  • From MBAlib 軟件工程(Software Engineering,SE) 目錄 1 什么是軟件工程2 軟...
    Aieru閱讀 2,200評(píng)論 0 0
  • 在我的性格特質(zhì)當(dāng)中,自信這部分是我想要加強(qiáng)的部分,但是這個(gè)自信不簡單的盲目自信,而是在真正明白自己能力之后的真實(shí)自...
    吳伯符閱讀 243評(píng)論 0 2
  • 姓名:游向囯 公司:海南蔚藍(lán)時(shí)代實(shí)業(yè)有限公司 組別:上海第361期感動(dòng)一組 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》大綱1遍 共...
    莜面山藥蛋閱讀 89評(píng)論 0 0