通常,我们认为
程序 = 数据结构 + 算法
算法是对解决问题方案的准确而完整的描述,利用计算机有序地安排处理各种结构的数据实现算法的就是程序了,这很符合人类世界的认知。
那么,对于计算机来说,程序是什么?其实,计算机它就是机器,一个容纳数据和操作数据的机器,所以,实质上
程序 = 数据 + 指令
说明一下,指令简单来说就是计算机能够自动独立完成的一个基本动作,计算机有各种指令,这是由于指令也是用数据的形式描述的。
计算机是如何表示和识别数据的?
计算机的工作是依赖电信号的,电路的通断两种状态正好可以对应一位的二进制数,这个特点符合二进制数据,事实上计算机都以二进制的形式处理数据。
为了描述的方便,计算机底层数据划分如下:
现在发散思维,想象一下数据结构是怎么复杂起来的?列如,首先来一个基本类型数组,那么它的每一个元素都是一个简单的数值,元素有序地排成一列,结构就像一串糖葫芦一样。现在要把数组弄得复杂一点,把每个元素改为数组可不可以?还是可以,这个时候数组其实就变得像包装成一箱的饮料一样,但还是可以按序访问每个值,本质上还是线性数据。要是结合其他基本结构呢?例如,可以把数组放到结构体或链表中,也可以把链表放到数组中,而且组合的结构还可以再组合……这样数据结构当然会越来越复杂。
一个人可以在一个房子和各种家具等物体组成的家里,而人、大大小小的各种房子、道路、各种交通设施等等构成了一座城市,在城市里找一个人比在家里找一个人难得多啊!说到城市的构成,不妨倒过来看,一个城市可以有各种建筑、人和其他动植物等,这种思维用到程序设计中不就是面向对象的编程思想吗?
深入计算机底层后,你将不再认为计算机很神秘。我们将现实的事物抽象为计算机可以进行各种运算的数据,并把它们的关系按序编排为程序,这样计算机才能够完成复杂的工作。程序由设计到实现的任何一个细节都是人们处理好的,如果疏漏了一个细节,程序就不能正常运行。由此可见,计算机本身没什么的,真正厉害的是人,是一代又一代的编程大师们!