計算機革命是有關咱們如何去思考的方式, 以及咱們如何去表達本身的思考的一個革命。- SICP算法
應當避免控制中的複雜性,將精力集中到數據的組織上,以反映所模擬世界裏的真實結構。- Joel Moses編程
一切工具都是爲了解決人的問題,軟件也不例外。但人類世界的現實問題到軟件的解決方案的實現路徑跨越太大,沒法一步躍遷,這就須要設計分解成一系列的躍遷步奏,這就是軟件設計的本質。設計模式
而編程的本質就是用編程語言對這一系列過程進行描述。因此編程語言是邏輯的載體和描述工具。架構
但就像一位大師說的「語言磨礪了咱們的思惟方式,也決定了咱們的思考範圍」,因此不一樣的編程語言又反過來影響了軟件的定義。app
從過程式範式來看,框架
軟件 = 數據 + 算法;編程語言
從面對對象範式來看,函數
軟件 = 對象 + 控制;工具
從函數式範式來看,oop
軟件 = 解釋 + 應用(eval-apply loop);
從邏輯範式來看,
軟件 = 邏輯 + 控制。
從數學模型來看,
軟件 = 計算模型 + 語義。
其中計算模型是對特定領域的數學抽象。語義是對特定領域的具象表達。
從計算機硬件模型來看,
軟件 = 數據 + 控制。
由於馮.諾依曼計算機模型的物理設計,數據和控制是分離的,運行在其之上的軟件,也必然受其影響。
而咱們常說的軟件架構、設計模式、框架和庫,它們的一個顯著差別就是,