計算機革命是有關我們如何去思考的方式, 以及我們如何去表達自己的思考的一個革命。- SICP
應當避免控制中的複雜性,将精力集中到資料的組織上,以反映所模拟世界裡的真實結構。- Joel Moses
一切工具都是為了解決人的問題,軟體也不例外。但人類世界的現實問題到軟體的解決方案的實作路徑跨越太大,無法一步躍遷,這就需要設計分解成一系列的躍遷步奏,這就是軟體設計的本質。
而程式設計的本質就是用程式設計語言對這一系列過程進行描述。是以程式設計語言是邏輯的載體和描述工具。
但就像一位大師說的“語言磨砺了我們的思維方式,也決定了我們的思考範圍”,是以不同的程式設計語言又反過來影響了軟體的定義。
從過程式範式來看,
軟體 = 資料 + 算法;
從面對對象範式來看,
軟體 = 對象 + 控制;
從函數式範式來看,
軟體 = 解釋 + 應用(eval-apply loop);
從邏輯範式來看,
軟體 = 邏輯 + 控制。
從數學模型來看,
軟體 = 計算模型 + 語義。
其中計算模型是對特定領域的數學抽象。語義是對特定領域的具象表達。
從計算機硬體模型來看,
軟體 = 資料 + 控制。
因為馮.諾依曼計算機模型的實體設計,資料和控制是分離的,運作在其之上的軟體,也必然受其影響。
而我們常說的軟體架構、架構和設計模式,它們的一個顯著差異就是,
- 軟體架構是從問題域對軟體進行描述;
- 設計模式是從軟體的解決方案域對軟體進行描述;
- 架構是對一系列設計模式進行邏輯和概念上的封裝。