圖片來源: Flickr,,本作品來自 CC BY-NC 2.0 TW 授權
對於現在的我們來說,不同的工程師一起編輯程式,同樣的指令在不同的地方都能理解並執行,這件事情看起來再正常不過了。但是,最初在寫程式的時候,可沒這麼簡單!
程式撰寫之所以成為我們如今熟悉的樣子,主要歸功於「資料抽象化」(Data Abstraction)這個概念。
資料抽象化可以理解為在解決問題時,有時可以忽略其他比較不重要的細節,以免讓問題變得更複雜或造成干擾。例如全世界有上百種語言,但是大家都看得懂「表情符號」。表情符號可以連結到各種不同的語言,當今天看到一個「笑臉」的表情符號,各國都可以將其轉化成對應的語言,而不需要在意拚字、筆畫等問題,而這件事情就是「資料抽象化」。而在軟體工程中,這樣的概念就相當重要。
那麼,這個劃時代的想法一開始是如何出現的?又是如何改變電腦科學的?就讓我們一起看看 2008 年圖靈獎得主芭芭拉·利斯科夫(Barbara Liskov)的故事。
美國第一批女博士!熱愛數學的工程師
芭芭拉·利斯科夫出生於 1939 年 11 月 7 日加州洛杉磯,她非常熱愛數學,1961 年成功在加州大學柏克萊分校取得了數學學士學位,同時輔修物理。然而,畢業之後投入職場時,利斯科夫沒找到跟數學相關的有趣工作,反而有個來自 Mitre 的程式設計師職位找上了她。
在成為程式設計師之前,利斯科夫跟電腦根本不熟,入職之後也沒有任何訓練,畢竟當時一切都剛剛開始起步,公司只能想辦法僱用可能有辦法勝任的人。進入公司後,利斯科夫開始學習透過 FORTRAN 來編寫程式,在過程中,她發現自己非常喜歡也相當擅長這個領域。
自學了一段時間過後,利斯科夫決定繼續進修,以便更快學到程式相關的知識。在當時,有相關課程的學校其實很少,利斯科夫最終選擇去史丹佛,並且與 AI 之父約翰·麥卡錫(John McCarthy)一起工作。
當時的電腦還不太聰明,而利斯科夫則嘗試讓電腦學會如何下西洋棋,最後,她以一個西洋棋殘局(endgame)的程式獲得了博士學位。
開發 Venus 系統,讓多人協作程式成為可能
博士畢業之後,利斯科夫再度回到了 Mitre,不過這時的她,成為了研究員而非軟體工程師。第一個大任務,就是想辦法開發出一套系統,能讓不同的人同時使用同一台電腦工作,因為當時的電腦實在太過昂貴,不可能人人一機。
最後,利斯科夫成功開發出「Venus operating system」的系統,這套系統在一台電腦上能同時支援五到六名開發人員, 讓不同用戶分別連接到不同的虛擬機,就算在寫程式的過程出錯了,也不會危害到整個系統,只會影響單一虛擬機。
接下來,才是最大的挑戰──「軟體危機」(software crisis)。
之所以會有「軟體危機」,是因為大家根本就不知道要怎麼建構軟體系統。聽起來可能有點荒謬,但在 60、70 年代,儘管硬體設備不斷更新,軟體卻遇到了瓶頸,許多公司投入了大筆經費,最後卻生出了完全不能用的軟體,即便有好的電腦也無用武之地。
當時軟體危機主要面臨到的幾個問題,如運算時間過長、軟體效率很低、軟體質量差、軟體經常不符合要求、項目難以管理、代碼難以維護等等。最主要原因就是運算能力的提高大大超過了工程師能有效使用的能力。
統合資料抽象化概念,成功解決軟體危機!
要解決問題前,一定要先做功課,利斯科夫在研究論文的過程中,發現它們主要在探討兩個問題:「程式究竟該如何設計?」以及「程式應該怎樣架構?」。
為了打造出好的程式架構,人們想像出了「模組」(module)的概念,所謂模組,就像是一個黑盒子,上面有介面,任何人都可以調控它,但不需要知道裡面究竟是怎麼運作的。它的強大之處在於只要模組之間相容,就可以將不同模組分配給不同工程師,最後再將它們組在一起就行了。
1972 年,利斯科夫進入了 MIT。在自由的研究氛圍之下,她將模組與資料抽象的概念連結在一起,統合了模組化程式設計、資料抽象化、多型(Polymorphism)等概念,開始與夥伴嘗試研發一種全新的程式語言。
資料抽象化由很多組資料同時運行,程式透過資料抽象化運作的過程,來檢視與修改資料的狀態。利斯科夫與學生們在 1978 年成功研發了全新的程式語言「CLU」,這種語言使用了新的邏輯,更成為 Java 等程式語言的基礎。
多年來,利斯科夫仍不斷鑽研程式,並構思出了「里氏替換原則」(Liskov substitution principle,LSP),告訴大家該如何定義子型態,以避免可能發生的 bug。
里氏替換原則也是五大物件導向設計(SOLID)原則之一,重點在於其具有「繼承關係」,也就是說子型態必須遵從父型態的行為進行設計。在這樣的原則下,可以避免掉程式設計中的很多 bug ,也可以避免出現相容性問題。
而現在,利斯科夫所提出的資料抽象化概念早已深植在每一位程式設計師的心中,成為現代程式設計不可或缺的重要概念。
本著作係採用 創用 CC 姓名標示─非商業性─禁止改作 3.0 台灣 授權條款 授權.
本授權條款允許使用者重製、散布、傳輸著作,但不得為商業目的之使用,亦不得修改該著作。 使用時必須按照著作人指定的方式表彰其姓名。
閱讀授權標章或
授權條款法律文字。