要回答这个问题,首先我们需要定义什么是软件,什么是硬件。咱们不去翻那些各类专业知识,站在一个有过基本编程经验的程序员角度来说,很感性的认知就是软件是由编程语言写出来的虚拟逻辑,硬件则是看得见摸得着的芯片机器。
然而虚拟是如何控制现实的?程序逻辑是一个看不见摸不着的东西。它是施展了什么魔法才能控制现实中的具体物质?举个例子,咱们对着一块铁板,无论你内心念多少咒语,它也不会动起来。因为咱们缺少能跟它交互的媒介。说回这里,我们还记得高中信息技术教材上写得计算机历史吗?最早的程序是用打孔纸带输送进计算机的!
可能当年我们看到打孔纸带这个词,也就是一眼过去了。但是今天回头来看这个东西,我们可以从中推理出很多东西出来。首先,打孔纸带它是一个实物,它是一个看的见摸得着的东西。那么我们能说打孔纸带是一个程序是一个软件吗?显然不是,软件永远都是摸不着的。因为软件代表的是一种运算逻辑,它是一个信息。信息是摸不着的,但是信息它得有载体!纸张可以用来承载文字,而文字的组合则是一种信息。换句话说,最早的计算机,通过打孔纸带来表述计算逻辑。现代计算机又用什么来作为信息的载体呢?没错,各种存储设备就是信息的载体。
讲到这里,我们对于软件的本质可能有点明白了,但是对于软件如何控制硬件,仍然没有什么头绪。要回答这个问题,我们需要换一个角度。我们都使用过电,比如电灯。用手按一下电灯开关,它就会通电或者断电,从而灯泡的物理形态发生了变化。仔细想一想,我们用手去控制电灯开关,是不是相当于向灯泡输入了一个信息?开关的闭合就是bool变量的true\false。而这个信息的承载媒介就是灯的开关!那么现在我们至少已经知道了一个东西,就是虚拟的信息通过具体的媒介,确实是可以控制现实中的物质的。
问题到这里还没结束,就是灯泡它只能亮或者不亮,它离计算机能执行各种逻辑运算并输出运算结果还差的远呢。计算机的特点是只要是人想的出来的逻辑,你就能通过编程语言表达出来并且让计算机按这个逻辑来执行。而人能想出来的逻辑过程是无穷的,所以计算机从宏观层面来看也能支持无穷多种的逻辑运算。但是显然计算机必须是由一些最简单的基本的东西组合出来从而可以执行千变万化的逻辑运算,否则它的制造过程也无法想象。不要觉得这不可能,因为这个无穷的宇宙就是由最基本的粒子组成的,计算机同样也可以用这种方式来设计。只不过它需要用到一种特殊的材料,是什么呢?
再次回到咱们的高中信息教材翻看计算机发展史,其中有一个很常见的词,叫半导体。为什么计算机需要用半导体材料呢?一块铁不能用来制造CPU吗?还真不能。在高中物理课程上,我们同样学习过半导体的概念。半导体材料的核心特点就是在满足某些条件的时候,它的导电性质会发生变化。注意变化这个词,一个宏观上最终能千遍万化的东西,如果你往下去剖析它的构成,一定会发现这个变化的根源来自一个自身就可以变化形态的物件。因此半导体的这个可以自身变化形态的材料特性,就是构成计算机能执行千变万化运算逻辑的核心。
回到正题,对半导体而言,施加不同的电流或电压,它会变得通电或不通电。所谓通不通即是电流经过它之后还能不能继续传下去。电流通过半导体传出来,这个结果就是一个输出,能否传出来,可以用01表示。而是否对半导体施加能改变其导电性质的电压,同样可以用01表示。于是这天然就是一个输入输出的计算过程。我们常说计算机只懂01,是因为构成计算机最基本的物质材料半导体只有01两种状态。我们只需要基于半导体这个性质去排布电路,就能形成各种逻辑运算单元。而这,最终形成了CPU,也就是计算机能运算逻辑的核心零件。