軟件的本質

計算機革命是有關咱們如何去思考的方式, 以及咱們如何去表達本身的思考的一個革命。- SICP算法

應當避免控制中的複雜性,將精力集中到數據的組織上,以反映所模擬世界裏的真實結構。- Joel Moses編程

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

而編程的本質就是用編程語言對這一系列過程進行描述。因此編程語言是邏輯的載體和描述工具。架構

但就像一位大師說的「語言磨礪了咱們的思惟方式,也決定了咱們的思考範圍」,因此不一樣的編程語言又反過來影響了軟件的定義。app

從過程式範式來看,框架

軟件 = 數據 + 算法;編程語言

從面對對象範式來看,函數

軟件 = 對象 + 控制;工具

從函數式範式來看,oop

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

從邏輯範式來看,

軟件 = 邏輯 + 控制。

從數學模型來看,

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

從計算機硬件模型來看,

軟件 = 數據 + 控制。
由於馮.諾依曼計算機模型的物理設計,數據和控制是分離的,運行在其之上的軟件,也必然受其影響。

而咱們常說的軟件架構、設計模式、框架和庫,它們的一個顯著差別就是,

  • 軟件架構是從問題域對軟件進行描述;
  • 設計模式是從解決方案域對軟件進行描述;
  • 框架是對一系列設計模式進行邏輯和概念上的封裝;
  • 從調用關係上來講,框架:don't call us, we'll call you;庫: call me please。
相關文章
相關標籤/搜索