天天看點

軟體的本質

計算機革命是有關我們如何去思考的方式, 以及我們如何去表達自己的思考的一個革命。- SICP
應當避免控制中的複雜性,将精力集中到資料的組織上,以反映所模拟世界裡的真實結構。- Joel Moses

一切工具都是為了解決人的問題,軟體也不例外。但人類世界的現實問題到軟體的解決方案的實作路徑跨越太大,無法一步躍遷,這就需要設計分解成一系列的躍遷步奏,這就是軟體設計的本質。

而程式設計的本質就是用程式設計語言對這一系列過程進行描述。是以程式設計語言是邏輯的載體和描述工具。

但就像一位大師說的“語言磨砺了我們的思維方式,也決定了我們的思考範圍”,是以不同的程式設計語言又反過來影響了軟體的定義。

從過程式範式來看,

軟體 = 資料 + 算法;

從面對對象範式來看,

軟體 = 對象 + 控制;

從函數式範式來看,

軟體 = 解釋 + 應用(eval-apply loop);

從邏輯範式來看,

軟體 = 邏輯 + 控制。

從數學模型來看,

軟體 = 計算模型 + 語義。

其中計算模型是對特定領域的數學抽象。語義是對特定領域的具象表達。

從計算機硬體模型來看,

軟體 = 資料 + 控制。

因為馮.諾依曼計算機模型的實體設計,資料和控制是分離的,運作在其之上的軟體,也必然受其影響。

而我們常說的軟體架構、架構和設計模式,它們的一個顯著差異就是,

  • 軟體架構是從問題域對軟體進行描述;
  • 設計模式是從軟體的解決方案域對軟體進行描述;
  • 架構是對一系列設計模式進行邏輯和概念上的封裝。