软件的本质

计算机革命是有关我们如何去思考的方式, 以及我们如何去表达自己的思考的一个革命。- SICP

应当避免控制中的复杂性,将精力集中到数据的组织上,以反映所模拟世界里的真实结构。- Joel Moses

一切工具都是为了解决人的问题,软件也不例外。但人类世界的现实问题到软件的解决方案的实现路径跨越太大,无法一步跃迁,这就需要设计分解成一系列的跃迁步奏,这就是软件设计的本质。

而编程的本质就是用编程语言对这一系列过程进行描述。所以编程语言是逻辑的载体和描述工具。

但就像一位大师说的“语言磨砺了我们的思维方式,也决定了我们的思考范围”,所以不同的编程语言又反过来影响了软件的定义。

从过程式范式来看,

软件 = 数据 + 算法;

从面对对象范式来看,

软件 = 对象 + 控制;

从函数式范式来看,

软件 = 解释 + 应用(eval-apply loop);

从逻辑范式来看,

软件 = 逻辑 + 控制。

从数学模型来看,

软件 = 计算模型 + 语义。
其中计算模型是对特定领域的数学抽象。语义是对特定领域的具象表达。

从计算机硬件模型来看,

软件 = 数据 + 控制。
因为冯.诺依曼计算机模型的物理设计,数据和控制是分离的,运行在其之上的软件,也必然受其影响。

而我们常说的软件架构、框架和设计模式,它们的一个显著差异就是,

软件架构是从问题域对软件进行描述;

设计模式是从软件的解决方案域对软件进行描述;

框架是对一系列设计模式进行逻辑和概念上的封装。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyyjx.html