2021年12月25日 星期六

考古:再訪物件導向


Simula 的兩位創造者 (source)



呃,這份投影片已經是七年前做的了 ... 真是充滿著資訊量與中二

近幾個月同事們進行著一個名為「再想一下」,每週半小時的公司內部技術分享會,討論的講題從 CSS Tricks、React 18、H264 ... 到這兩週都在討論 Monad 跟 Y Combinator(我到底聽了什麼 😨),其中有前端同事寫了幾篇初探 Python OOP 的文章,引起了許多討論,也勾起了我當年考古 OO 的回憶,於是便翻出了這份投影片,並且再稍微考古一下。

依稀記得最初的物件導向,其實是希望每個物件就像 micro computer 般能夠自動運作,然後透過建立成千上萬的物件,讓他們自動進行互動,就能夠(爽快地)完成任務。在這次的考古過程中,很幸運地發現了這篇寫於 2019 的優質考古文:OOP Before OOP with Simula。(點了連結以後,不回來繼續看本文也無所謂了)

當年的考古,我著重在「原來五六十年前就已經有物件導向的概念」、「看看這些語法跟現在根本沒差多少」、「噢噢,古早的人在寫程式解這些問題(核子反應爐模擬)」,雖然想要快速掌握 OO 發展的脈絡,在有限的時間與經驗之下,也只能看一些簡略的介紹,或是去設法咀嚼一些指標人物說過的話,當下並不真的全然理解。

再次的考古,由於已經有了以前(殘缺)的大局觀,所以已經不再需要迫切地看很多東西,可以細看自己覺得有興趣的一小部分就好。對於 Simula 來講,我覺得有體悟的是「simulation」這一個 context,在需要做 simulation 的情況下,你會怎麼去設計一個程式語言或者說是框架,來協助你執行任務?根據 Simula 的創造者 Ole-Johan Dahl (OJD) 的 The Birth of Object Orientation: the Simula Languages 一文,有提到許多有趣的事情:
  • 其實 Simula 的另一位創造者  Kristen Nygaard (KN) 當年在 Simula Project 時負責的事情比較偏向 operation research,且他也是蒙地卡羅演算法的發明人,這很有「simulation」的味道對吧!這也是他創造新語言的動機
  • 語言的設計跟實作主要是 OJD 負責的
  • 他們發表了兩版 Simula:Simula I 與 Simula 67。前者為 simulation 與教學用途,後者其實已經希望是 general purpose 的 language
  • Simula I 就已經有類似 co-routine 的概念以協助做模擬

從現在的角度來看,SImula 67 已經非常的物件導向了。它具有的特性我也無須贅述,我比較在意的是 Simula I 作為一個模擬器語言的完成度,以及他能夠如何優雅地完成任務。我認為 OOP Before OOP with Simula 這篇文章作者給的 例子 很好,就簡單定義了這些物件,然後建立後就讓他們自己去跑。這似乎解釋了為什麼我會對 OO 有印象是「一個一個的 micro computers」😼

近年工作下來,我發現我對 OO 設計的關注度下降非常多,因為怎麼弄好 dependency、怎麼分離關注點、怎麼測試、怎麼封裝抽象概念、如何設計演算法、如何決定服務架構、如何維運系統 ...,依據外部商業需求及內部產品技術發展需求,把一些基本 concerns 處理好並且配合願意改進的心態,其實程式寫起來就往往夠好了。

就這樣,如果近年有 OO 方面必讀的好書,或是值得 follow 的觀念,也歡迎大家推薦給我 ✋

難道下一篇是再訪 Haskell 嗎 XDDDD



沒有留言:

張貼留言