軟體工程 與 軟體工藝 ,孰是孰非

2021-03-31 17:09:51 字數 1634 閱讀 8286

近來"軟體工程"與"軟體工藝"是非曲直之爭頗為激烈,"軟體工程"支持者大罵"軟體工藝"離經背道,"軟體工藝"支持者口口聲聲要放棄"軟體工程"。自《software craft**anship》的中譯本《軟體工藝》出版後,在國內軟體界也掀起了一陣漣漪。本文闡述本人的一家之見,希望有助於平息不必要之爭論。

計算機界的泰山北斗fred brooks在其2023年的著名**《no silver bullet - essence and accident in software engineering》(《沒有銀彈-軟體工程中的根本和次要問題》)中,論述了軟體工程試**決兩種型別的問題,一種是由軟體開發內在本質所固有的複雜性、一致性、可變性及不可見性所決定的問題,故稱為根本問題(essence),這些根本問題決定了不存在一種單純的技術或管理上的進步,能在短時間內(10年)顯著提公升軟體開發的效率和質量。近20年過去了,brooks的這個論斷似乎是正確的。另一種問題是諸如解決軟體構建等的次要問題(accident),之所以是次要問題,是由於解決這些問題只能提公升整個軟體開發過程的很小一部分效率。可見,和很多人一樣,brooks眼中的"軟體工程"的含義十分寬廣,軟體開發中幾乎一切的技術及管理問題都可以納入"軟體工程"的範疇。這個承載著軟體開發方法的方方面面的軟體工程,我姑且稱之為"廣義軟體工程"。

pete mcbreen在《software craft**anship》(國內有人在"craft**anship"的翻譯問題上爭論得不可開交,有人說翻譯成"工藝"不好, software engineering和software craft**anship其實都是隱喻,乙個代名詞而已,在這個問題上爭論不休大可不必,關鍵是中譯本內容應盡量反映原文意思)一書中提倡以"軟體工藝"這個新的隱喻代替"軟體工程"隱喻,因為"軟體工程"隱喻會導致人們鍾情於"'有組織、可計量'的軟體開發過程",迷信那些高成本的所謂標準軟體開發過程,使軟體開發方法僵硬化、信條化,而"軟體工藝"隱喻會引導人們重新重視人的因素,強調個體經驗、技藝的重要性。在我看來,pete mcbreen在書中多處批判的軟體工程,套用fred brooks的語彙,就是只專注於那些確定的、可計量的次要問題,而忽略軟體開發本身所固有的複雜的、一致的、可變的、不可見的根本問題的軟體工程,我姑且稱之為"狹義軟體工程"。而軟體工藝最關注的問題實際就是軟體工程中的根本問題,正因為其內在的複雜性、一致性、可變性和不可見性,人們甚至還不能對這些問題進行清晰的描述和分析,也就更無法確定化、可計量化, "狹義軟體工程"對於這些"模糊不清"的問題要麼視而不見,要麼覺得無足輕重,而實際這些根本問題才是決定軟體開發專案成敗的關鍵。

因而,軟體工藝所批判的是厚此而薄彼、捨本而逐末的"狹義軟體工程",而不是fred brooks以及很多人眼中的"廣義軟體工程",因為"廣義軟體工程"承認軟體開發的不確定性、模糊性,並承認這些不確定性和模糊性是軟體開發本身的固有屬性,因而不存在一種包治百病的靈丹妙藥(即fred brooks所說的"銀彈")。軟體工藝希望以另一種隱喻以避免軟體工程隱喻所帶來的一些危害,它提出了一條不同的思路,提供了一套不同的方法,在"廣義軟體工程"的大舞台上,應該有它的用武之地。

"軟體工程"與"軟體工藝"之間門派之爭的問題在於,人們對"軟體工程"本身的含義、範圍有不同的理解,爭來爭去孰知爭的不是同一樣東西,此軟體工程不是彼軟體工程也!

語言是思想的鏡子,它只能區域性地反映思想,並把思想的一部分放大了、一部分縮小了、一部分歪曲了,甚至會反過來欺騙了思想本身。看來在軟體工程的根本問題當中,人類語言的侷限性也許佔了一席之地。

工程工藝化與軟體工程

今天參加了乙個與自己毫不相干的關於施工工程規範化的會議,與會人員除了我和我的乙個同事外,全是工程實踐人員,所謂隔行如隔山,雖然在會上,大家對於自己在施工工程的心得體會大談其道,眉飛色舞,口沫似濺,但是對於我而言,也僅僅如此而已。軟體工程的提出是 年,從起產生到現在也有 年了,但是到今天依然是百花齊放...

軟體工程 軟體工程概述

一.軟體 定義 計算機系統中的程式及其文件 程式 計算任務的處理物件和處理規則的描述 文件 為了便於了解程式所需的闡明性資料 特點 軟體的種類 按功能劃分 系統軟體 支援軟體 應用軟體 二.軟體工程的起源和概念 早期電腦程式 現在人們認為 在資訊產業中,微電子是基礎,計算機和網路是載體,軟體是核心 ...

軟體工程 軟體工程的概述

軟體工程是研究和應用如何以系統性的 規範化的 可定量的過程化方法去開發和維護軟體,以及如何把經過時間考 驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來的學科,它涉及到程式語言 資料庫 軟體 開發工具 系統平台 標準 設計模式等方面。先從軟體工程的第一章開始說起 軟體工程的概述,這一章是...