这是本什么样的书
这是一本有一定专业深度,但整体比较易读的计算机科普读物。从开关、导线、灯泡、继电器到计算机,这是电气时代到数字时代、计算机时代的过渡。
我们所生活的时代已经和从前是如此的不一样。从前,家家户户守着田地耕种过活。而随着工业化的深入,我们的生产生活方式都发生了变化。大量的农民纷纷涌入城市,投身工业建设的队伍中。
现如今,我们甚至离初步工业化的那个时代都已经走出甚远了。在人类的历史上已经发生三次工业革命了。每一次工业革命带来的改变都是翻天覆地的。它不止是科学技术的革新,更是无数人生活生产方式的巨大变革。
第一次蒸汽革命已经离我们太遥远了,而第二次电气革命的产物如今仍然充斥着我们生活的各个角落。重点是第三次计算机革命究竟为我们的生活带来了怎样的改变,这一点是21世纪的我们要认识到的,因为它所带来的变化仍然在指引和改造着我们的生活。
想知道我们的生活,我们的社会究竟还会向着怎样的方向发展和变化,我们必须要对计算机世界的基础原理和基本逻辑有所了解。
生产技术的进步,不仅仅带来,让人们从用锄头播种,到如今用播种机,无人机播种,这样浅显的改变。它带来的改变还包括社会分工的变化。因为新的社会分工形式出现,人们必须或主动或被动的调整自己生活的方式来适应它。
每个人都要在社会中找到自己的位置来融入社会之中。而不同的位置所对应的生活状态是不一样的,可以说是天差地远。如果你并不满意自己如今的生活状态,那么你完全可以对未来保佑期待。
因为我们的社会正在不停的变化当中,也许你所希望的那个生活状态所对应的位置和角色正在被创造出来。如果你提前的对这种变化的趋势有所预见,那么你就能够调整好自己的姿态,站在前列迎接它的到来。就算你对如今的生活状态很满意,但是很遗憾的说时代不会允许你在原地踏步。所以,生活在21世纪的我们应该对这个计算机时代有所了解。
了解一个时代,从塑造这个时代的技术出发是最合适的了。无论你从事着管理工作,工程工作,还是一个商人。我都推荐你读一读这本书。如果你本身对计算机技术的形成和发展感兴趣,那么你也可以从这本书的内容中得以窥见计算机奥义的一角。
如果你没有学习过电气工程的一些基础知识,那么对于各个计算机功能模块的组合原理部分可能会阅读困难。如果你没有学习过编程相关的一些知识,那么对于书中介绍计算机语言的原理部分也会难以理解。但是你可以不去管这些技术细节,仅仅对计算机的大致发展脉络有所了解就行了。就像你使用手机,并不需要去清楚内部软件硬件的构造,你只需要能够用它打电话就行了。相信仅仅是这一部分,也能对你有所启发。
当然,如果你想更为系统的学习计算机知识,这本书也可以作为你的入门读物,帮助你搭建理解计算机的认知框架。在这个基础上接着再搭配数字电路和计算机编程的教材进行学习,知其然亦知其所以然,学习起来会更轻松。面上不要追逐打闹,否则极易造成伤害事故。
从模拟电路到简单计算器的搭建
从利用模拟电路的基础原理传递信息过渡到数字电路的基础搭建。
我们可以用很多种外在的形式来表达我们内心的意图。比如声音、肢体、文字书写还有图画等等,这种形式可以统称为语言。声音语言,文字语言、肢体语言都可以这样理解。同样的一种思想内容,可以借由不同的外在载体来进行表达。比如文字书写的“我爱你”和口语说出的“我爱你”,这就是文字语言和口语语言之间的转化。
基于这样的思想,我们还可以把很多东西编辑成语言,并规定一套新编的语言和通用语言之间的转化标准。比如摩尔斯密码,盲文。
电路有通和断两种状态,我们将其定义为0和1,或者点和线。在此基础上进行组合,我们可以用电路的状态来进行信息的传递。
于是一个由灯泡、开关、导线和电源组成的简易通讯装置就构建出来了。搭配一个密码本,就可以在电路的两头进行通讯了。
但是随着通讯两端距离的延长,导线是无法做到无限延长的。因此就需要有一个中继站来维持信号的传递。继电器正是基于这样的需求应运而生。它与后来的晶体管一样,都是用来放大电路信号的。
这里就涉及到继电器的工作原理、电路的一些基本概念,比如电流、电阻、接地、公共端等。在《编码》这本书中都有简单的介绍。
到这里,我们都是用电路在进行简单的通讯工作。进一步,我们要用电路来帮助我们进行计算。
能进行逻辑运算的电路
这里计算的意思是逻辑判断。正如电路最简单的状态就是通和断,它们可以对应在逻辑中的是和否。
在串联电路中,电路各元器件都要导通,对应逻辑中是的状态,最终电路才能导通,电路连接的灯泡才会亮起。这里可以对应逻辑判断中的“全1出1,有0出0”,也就是逻辑门中“与”门的逻辑。
在并联中则不然,只需要有一条通路导通,其它的通路断开,电路最终也能导通运行。这里可以对应逻辑门中“有1出1,全0出0”也就是逻辑门中或门的逻辑。
最后再搭建一个“有1出0,全0出1”的反向器就构成了逻辑门中基础的与或非三门。
(书中有介绍如何基于继电器的基础原理构建反向器,而在晶体管中,则可以利用其正向导通,反向截止的特性。)
到这里,数字电路才算是真正的搭建起来,但是它的内容也开始变得复杂起来了。在书中有一些基于此原理进行一些简单计算电路搭建的案例,尽管这些简单的计算电路对于完全普通人来说理解起来也没有那么简单。
总之,走到这一步之后,我们可以用电路来进行逻辑的运算。当然,这里它还不能进行智能化的运算,它仅仅只能作为计算辅助的工具而已,就像我们借助纸和笔进行复杂的数学计算一样。
加法的计算
到这里,我们的电路可以进行简单的逻辑运算。而我们的数学加减法运算就是逻辑运算的一种特定形式。
于是自然的,我们也会想到能不能用电路来进行加减法运算呢?
首先是电路归根结底只有通和断两种状态,而我们的数字有很多很多。这两者怎么关联起来呢?在这里我们要了解数字进制的转换关系,也就是二进制到十进制的转换。
解决了数字进制的转换,我们可以先将十进制的加减法转化成二进制的加减法。用电路实现二进制加法其实很简单。我们设置A和B两个端口用来输入计算数字,然后设置一个C的端口用来表示输出。
A=0,B=1,则C=1
A=1,B=0,则C=1
A=0,B=0,则C=0
这就是有1出1,全0出0,这个电路的搭建在前面已经能够很简单的实现了。
比较复杂的问题是A=1,B=1的情况。这种情况下A、B、C三个端口就不够用了。我们需要多一个输出的端口来显示进位。
这个进位的端口只有在A、B输出都为1的时候才会为1,而当A、B都为1的时候原来的输入端口为0。我们姑且把这个进位的端口称为D端口。
新的问题来了,就是在实际的计算种,进位的D端口还需要和这个位置原本的数字相加才能得出最终结果。这里需要再设置一个加法的电路逻辑。
到这里,加法的计算电路基本能够搭建完成了。
减法的计算
减法的计算又是怎么回事呢?在电路逻辑上我们可以重新搭建一个减法计算的电路。让他实现A=1,B=0,则C=0,A=1,B=1,则C=0这样的计算逻辑。
但是当A=0,B=1这种情况出现的时候,计算的结果就是负数了。这又是一种对于电路来说比较复杂的情况了。
A减B和B减A得出来的数字绝对值是一定的,只是A和B的顺序,决定了结果是否带有负号。
基于此,我们完全可以设置一个表示符号的输出E,当E为1的时候,表示结果为负数。
小数的表示
小数在电路中要怎么表示呢?这是我们用电路搭建计算机的又一个难题。
我们习惯把数字看作是连续的,任意给出两个有理数,都可以找出一个位于他们中间的数。但是数字计算机只能处理离散数据。
这里我们需要用到基于科学计数法的方式来对小数数字进行转化,经过数学的转化,让他们变成电路可以理解的二进制数,然后才能进行计算。
比如BCD码、浮点格式等。
乘法和除法?
加法器和减法器的电路设计只是为了告诉我们电路可以进行逻辑运算,而加法减法都是逻辑运算的一种典型形式。通过逻辑的转换,我们可以把加法减法转化成电路可以理解并计算的形式。而惩罚和出发实际上也就是基于加法和减法的一种逻辑计算。我们同样可以利用逻辑转换的方式,将其变成电路能够理解的形式,然后让电路来帮助我们进行计算。
存储
反馈与触发器
触发器的构建是基于继电器内部基本原理进行特殊连接形成的一种能让信号在其内部循环的电路。
首先我们利用继电器搭建一个特殊的电路,这样能够帮助我们理解触发器的原理。我们可以利用继电器搭建一个只要电路闭合,在弹簧的作用下,触发器的触点会在接通和断开两个位置来回摆动的电路。这种电路也被称为蜂鸣器、反向器、振荡器。也可以用两个或非门的特殊逻辑连接来构成这样的电路。
在这个电路的基础上进行拓展,能够得到一个简单的R-S触发器电路。进一步拓展就得到了D型触发器。
这个电路的最终用途是用来存储。它通常有两个输入,即数据端和保持位。当保持位激活为1时,数据断的输入会被电路保存。保持位激活,数据断输入1则电路输出结果为1,反之为0。
这样的好处是在电路保存下数据端的输入后,保持位不再进行激活,那么即使数据端的输入发生变化,输出也能够稳定的保持为上一次数据输入的结果。
这总存储是临时性存储的基础原理。之所以是零时性存储,是因为这些数据在电路彻底断电之后会失效。
基于这个最基础的存储电路原理,我们可以搭建存临时性的存储阵列来存储大量信息。
永久性存储
计算机种永久性的存储采用的不是电路逻辑反馈的存储方式,而是用另外的硬件设备进行存储。具体来说,是利用磁化技术对磁盘进行磁化,再次激活后,磁盘中的磁条会切割磁感线产生电压,并且根据磁化的程度释放不同程度的电压,以此向外传递信息。
三、智能化
在基础的逻辑计算和基础的存储手段都有所了解之后,我们可以进行这正意义上的计算机搭建了。
输入设备
如今的家庭电脑中常见的输入设备鼠标和键盘,其实它们的原理也并不简单。首先,键盘上的字母、符号如何转化成机器语言呢?这是借助ASCII码的标准规定进行转换的。每一个字母和符号都对应一连串的二进制数。
输出设备
输出设备,在前面的电路中,我们一直默认是用小灯泡代替。但是今天我们的电脑屏幕并不是这样。但屏幕现实的基础原理,也是一个个细微“灯泡”亮或者不亮来构成的。一个个亮和不亮的像素点,构成了我们看到的图形显示。
程序
基于上述的描述,你一定觉得计机的搭建是如此庞大的工程。我要告诉你,事实正是如此。
实际上,最开始的电子管计算机本身就庞大无比。早期的计算机输入很多都是通过一个个手拨的开关来进行操作的,而它们输出显示的也只是利用灯泡来进行0和1的显示。
将人们交流所用的语言和计算机能理解的语言进行转化,需要耗费大量的工作。
好在有了存储设备之后,我们可以将这些程序化的工作事先编入存储设备,这样我们使用计算机设备就变得简单多了。这是冯诺依曼的首创。
他说:“计算机中应当拥有尽可能大量的存储器,这些存储器用来存储程序代码和程序执行中产生的数据。”自此计算机发展历史掀开新的篇章。
从真空管到晶体管
书中有一个形象的比喻:“使用机器编码写程序就如同用牙签吃东西,伸出手臂使用较大的力气刺向食物,但是每次只能获取到小小的一块,这个过程是辛苦且漫长的。”
中国人熟知的九九乘法表,在西方并无人知晓。也因此,他们十分讨厌乘法的运算。为了避免讨厌的乘法运算,他们用数学转化的方法来简化乘法的计算。差分法乃至于差分机差不多就是这样出现的。
或许也正是如此,对于如何将相对复杂的各类问题,化简成为计算机能够用0和1来进行表述和处理的简单问题,西方人是有丰富经验的。
半导体
半导体是如今计算机硬件构成中重要得到组成部分。半导体本身并不具备良好的导电特性,但是在其中参入一些杂质,却能够对其导电性质进行改变。
加入不同的杂志,让半导体具有不同的导电属性,这也就有了N型的半导体和P型的半导体。将它们结合在一起,形成PN结,再进一步用PN结组成三极管,以基极较小的电压控制集电极到发射极较大的电压输出,这和继电器元件的初衷是一样的。事实上,晶体管和继电器最初都是为了放大而产生的。
晶体管开创了固态电子器件的时代,它不再需要真空,而是使用固体制造。它除了体积比真空管小,晶体管电路运行需要的电量也更小,且更持久耐用。
晶体管的某些组合具有特定功能,可以重复利用。比如一对晶体管可以连接成门,而门又可以连接成振荡器、加法器、选择器以及解码器等。振荡器可以组成存储阵列……
我们把晶体管预先连接成常见的构件,再用来组装计算机会更容易。
(如果完全从零开始搭建计算机的话,这将是一个无比庞大的工程。)
集成电路需要经过非常复杂的工艺流程才能制造出来,开发一种新的集成电路很贵,但是可以从大量生产中获得效益——产量越大,价格就越便宜。
1965年,戈登 E 摩尔发现从1959年以后,技术在以这样一种方式发展:同一块芯片上可以集成的晶体管数目每年翻一倍,他预测这种趋势会持续。(实际上的发展速度比他预测的慢一点,所以摩尔定律被修正为:每18个月同一块芯片上集成的集体管数目会翻一倍。)
计算机的局限
当电路出现的时候,使用电路来传递信息、使用电路来辅助计算、存储电路的发现,每一段都是计算机发展历史的大进步。计算机的硬件发展从最早的电子管,到后来的晶体管,再到如今的大规模集成电路,这让计算机处理信息的速度有了质的飞跃。
不了解计算机的人会过分的迷信计算机的功能。而事实上,计算机的功能从来都是没有变过。它以前无法完成的功能,现在乃至以后都不可能会完成。现在和未来计算机能够完成的功能,在它诞生之初就能完成。这是图灵的经典理论。
事实也正是如此。但是计算的发展过程中的一个重要变量是速度。比如图像的显示和处理,放在最早的初代计算机上也能完成,但是它处理的速度过慢,以至于无法在我们的视网膜上形成流畅完整的图像。