物件導向的哲學源頭與軟體工業本質與未來趨勢 – BradCox

banq發表於2019-12-21

亞里斯多德以來,哲學家一直在與存在概念作鬥爭。為什麼我們要研究觀察我們在世界上看到的東西?這些事物是如何在那裡的?有目的嗎?它們會永遠存在嗎?我們是由與其他所有事物一樣的東西構成的,還是我們擁有其他物體所缺乏的仇恨或靈魂?
1714年,戈特弗裡德·萊布尼茲(Gottfried Leibniz)出版了《拉莫納多洛基》(La Monadologie),他在其中提出,事物物件是由不可分割的實體(稱為Monads單子或原子)構成的。您看不到Monads單子內部,它具有控制其動作和激情的內部狀態。Monad可以原子方式建立或銷燬,但不能部分建造或部分消滅,因為它們是“沒有零件的簡單物質”。(banq注:這裡有微事務概念,事務的原子性是要麼全部建立,要麼全部不建立,不會部分建立,這也是DDD聚合的重要定義)
這並不代表形而上學探索的頂峰。實際上,到20世紀,馬丁·海德格爾徹底顛覆了整個領域。在他1927年的《存在與時間》簡介中,他提出了你不能問“什麼是存在”的問題,因為問題本身以對“是”一詞的理解為前提(banq注:海德格爾的Being很難有中文詞語對應,被誤翻譯成 “存在”,其實還有“是”的作用,“什麼是存在” 等同於詢問 “什麼是是”?),換句話說,它依賴於對存在的理解。我們對存在存在( being of Being)的理解可以置於其中。

因此,海德格爾發起了現在所謂的現代詮釋學,其中,“事實(真相)”不是在我們的經驗之外代表了一個基本的真實世界,而是一種根據我們的經驗,觀點和歷史提供的有效解釋。(banq注:世界是完全主觀的,沒有置於我們主觀認識之外的真實世界,康德認為客體不可知,我們以為的真相都是自以為是的真相,對這些真相的執著好像是對真理追求,其實是對自以為是的真理的追求)。

當然,計算機計算會花費了很長時間,而沒有人質疑它與現實之間的關係。計算機被視為純邏輯領域,在其中執行機械計算指令的過程或例程(圖靈學校)或對經過數學轉換的資料起作用(教會學校)。這兩種範例都沒有對所作用的資料本身的含義或解釋保持沉默,這些資料業務含義留給使用者解讀。(banq注:電腦科學只是一種形式邏輯,正如對人的說話內容不在意,而是注重說話的形式,如音調、場景和上下文和動機)

存在being的概念在形式上被邏輯學家識別為一種本體論ontology,但海德格爾稱之為本體Ontics。(海德格爾說,本體論Ontology是對Being的研究,而Ontics本體只是在一個接受了存在being的系統內的事物的研究。banq注:Ontology與Ontics區別是“是”與“是什麼”的區別,前者研究“是”,後者研究“確定了“是”,但它是什麼呢?注重什麼東西”)。
存在being概念首先緩慢地進入計算領域,然後一次性所有進入了計算領域。體現在:一開始Simula(第一個物件導向的程式語言)透過引入軟體"類Class"打破了計算機外部事物與計算機編寫程式之間的障礙。(banq注:計算機提供了“是”這個計算的形式,而現實世界提供了“什麼物件”,用於計算的內容)。
現在,程式設計師已經可以說“計算機中這段程式碼是一顆星星(banq注:一顆星星表示什麼物件或東西,代表計算機外部的、業務領域中的事物))”,或表示是一個動物細胞或一個僱員,他們可以說“所有[模擬]星星都具有有關自身的資訊”,“所有[模擬]星星都可以執行這些業務操作”。
(banq注:使用計算軟體的類class概念代表現實世界實體,而不是使用資料結構表達現實世界實體,是有其哲學邏輯推理背景的,不是一種拍腦袋形象比喻或模擬,喜歡形象比喻思維的人認為“class類=現實中某個實體物件”是一種比喻,比喻不是科學哲學思維,是文學思維)

Xerox PARC的研究人員在Alan Kay的Dynabook概念和Smalltalk程式設計環境的背景下提出了這些想法,並最終在1981年8月發行的Byte雜誌上釋出了有關其“物件導向”程式設計系統的資訊。Smalltalk中的Object清楚地反映了萊布尼茲(Leibnizian)Monadic對世界的模擬:可以建立或銷燬物件(單子或原子),不管它們存在或不存在。它們封裝了私有資料,這些私有資料是從外部無法訪問的,但是可以透過提供的函式方法或行為被訪問,包括透過接收訊息來更改其內部狀態。至關重要的是,物件本身決定了接收訊息時的處理方式,在命名過程時如果未找到物件時,這就決定了某種程度的間接性和隔離性。

充分利用這種軟體結構方式意味著對軟體的設計和構建方式有完全不同的思考。丹尼爾·羅布森(Daniel Robson)是Smalltalk上的Byte問題的撰稿人之一,他承認,接觸新鮮事物要比從軟體的程式觀點轉變正規化容易。

……關於如何以物件導向的方式建立軟體系統的基本思想對於那些對軟體系統的本質沒有先入之見的人來說更為自然。

物件導向的程式設計消除了我們要為其構建軟體的事物(業務領域或需求)與所構建軟體之間的概念障礙。現實世界中的所有人員,流程,組織,人工製品和自然資源都可以具有物件形式的類似軟體化身,可以透過在軟體系統內傳送訊息來進行互動。在1980年代,一小批程式設計師,作家和教育工作者發現,這不僅意味著改變了軟體的編寫方式,而且還改變了人們對軟體以及軟體建立環境的看法。

布拉德·考克斯就是其中之一。從表面上看,Objective-C看起來像是一種工具,用於設計在內部執行C程式的物件,實際上就是這樣做的。但是,Objective-C誕生於對軟體的需求,就像英特爾對硬體所做的那樣,並且希望在類似於積體電路的元件模型中實現商品化演算法和資料結構。

在《物件導向程式設計:一種進化方法》中,Cox提出了“軟體IC”的願景。與K&R與C或Stroustrup的書與C ++一樣,對本書與Objective-C進行通常的比較是不公平的。K&R是該工具的使用者手冊,而C ++書籍則是有效利用複雜設計系統的指南。OOP:aEA的宣言不僅僅體現了一種完全不同的方式來籌集資金,人員配備和交付軟體產品。

對於Cox來說,工業革命主要不是關於機械以及蒸汽和煤炭動力的利用(banq注:第一次工業革命是蒸汽機的發明,這種思考帶有生產工具等所謂外部客觀事物決定一切的哲學觀),真正工業革命是依靠規模化的工業流程來代替手工、紡織工藝。而工業流程則依賴於標準化的、可互換的零件之間明確規定的介面。以前,槍匠採用端到端的工藝製作一次性步槍,而惠特尼則主張將步槍由標準元件組裝而成。然後,如果野戰中的螺栓失效,您只需要更換螺栓,而不是更換整個步槍即可。(banq注:槍的威力不在於火藥發明或牛頓力學本身,這些都只是基礎外部條件,戰爭需要規模化低成本大批次生產槍支,捱打者表面上是被槍支這樣的東西事物打敗的,其實是被“標準化批次化”打敗的)。

Cox對軟體生產採用了物件導向的方式,與Ivar Jacobson對業務流程進行了基於物件的方式幾乎相同。他希望程式設計師設計物件,併發布描述物件如何工作的資料表。整合商將瀏覽這些資料表,併購買可以連線在一起的物件,以構建可解決其問題的高階元件。

十年後,Cox必須接受,雖然他與他人共同創立了一家公司以推廣Objective-C,但該公司獲得了財務上的成功,但與軟體業的英特爾相距甚遠。為了找出原因,我們回顧了他的另一本書的故事,《Superdistribution: Objects as Property on the Electronic Frontier(超級分發:電子疆界上的的物件》)。(banq注:超級分發是一種“標準化批次化”)

同樣,Eli Whitney的故事和關於“軟體工業革命”的討論浮出水面。但是現在我們遇到了擴充套件軟體元件銷售的難題:在大多數情況下,我們不按部門出售軟體。大部分成本由最初的建設承擔,隨後的副本免費。在擴大我們的圖形應用程式的生產之前,我們不能僅僅購買幾個Window物件來煩惱:我們要麼許可無限的Windows(可能還許可了GUI工具包的其餘部分),要麼不許可。

考克斯倡導物件導向的經濟。當我使用我的應用程式時,我的計算機會註冊該使用情況並嚮應用程式作者進行小額付款。但是,該應用程式還利用了GUI工具箱物件,部分付款已從應用程式作者轉移到工具箱作者。如果該工具包使用一些基礎資料結構,則需要另外付款。

現在開發很便宜,因為當開發人員僅在自己的計算機上使用幾個物件時,他們支付的費用就會減少。但是,當他們分發應用程式時,越來越多的使用者開始使用它,他們的收入和透過“上游”的份額都會隨著應用程式使用規模的增加而增加。

如Superdistribution一書中所述,物件導向的經濟學要求使用自定義硬體來安全地跟蹤物件的使用情況並進行正確的小額付款。使用區塊鏈智慧合約語言Solidity編寫的dApp可以在以太坊網路上以智慧合約評估的形式使用了小額支付。我們具有實施超級分發思想的技術能力,但仍然存在要收取大量建立軟體元件費用的問題。

成功地促進大規模軟體元件分發的唯一創新是免費軟體許可證,許可證沒有規定向其創造者付款。“Superdistribution”一書仍然值得一讀,而軟體工業革命背後的思想仍然對我們領域有很多啟發。


HackerNews的討論



 

相關文章