目标
计算机世界并非如此神秘。相反,计算机是非常“确定”的一个系统,即在任何时候,在相同的方法、相同的状态下(当然还包括相同的起始条件),同样的问题必然获得相同的结果。其实,计算机并不是什么电子天才,相反,它只是一个电子傻瓜,只会精确地按照我们的要求去执行任务,它本身是没有什么心智的。事实上,计算机这样一个复杂的机体,是由一堆简单的部件,经过精心的组合而成。
本专栏强调的是理解,而不是死记硬背;强调的是软件与硬件结合,而不是软件与硬件的分别教授与学习。本着将软件硬件教学齐头并进的思路,从硬件的基本构件一直讲到软件的高级程序设计与构造,这样能够在学习过程中将软硬件融会贯通、相互印证,从而提高学习的广度、深度和效果,并为后续的计算机专业课如操作系统、计算机系统设计与结构、算法设计与分析、高可靠软件工程理论等打下基础。
最大的特点是提倡层次转换概念,即从问题开始到计算机运算出结果可分为七个层次。通过七个层次的转换,即可完成从问题到结果的转变。这七个层次及其转换是:问题到算法的转换、算法到程序设计语言的转换、程序到指令集结构(ISA)的转换、指令集结构到微观结构的转换、微观结构到电路的转换和电路到电路组件的转换。
经验与体会
为未来做准备:深入底层:系统运行的性能不仅仅取决于编写程序的水平,如果缺乏对系统底层知识的了解,则在面对一些性能问题时会一筹莫展。作为高级程序员,要编写高效率代码,仅仅掌握高级语言本身是不够的。除此之外,我们还需要了解与设备相关的知识(甚至是引脚的定义)。在高级语言编程课中,编译器这个“保护层”将计算机底层的“丑陋细节”都隐藏了。
两个反复出现的理念
一是“抽象”,二是“在脑子里不要对硬件和软件做任何区分”。
学会“抽象”能让我们站在更高的层次看问题,从而将事物的本质表现出来,而将其中的细节隐藏起来;能让我们更有效地利用时间和大脑;能让我们在分析问题时不至于陷入泥潭。此外,我们不仅要具备抽象的能力,还要具备“分解抽象”的能力,这样才能保证问题的顺利解决。这个过程有可以称为“解析”,即从抽象回到具体的过程。抽象技能相当重要,抽象的层次越高越好,它与工作效率成正比。
硬件和软件只是计算机系统中两个组成部分的名称而已;对设计者来说,具体将计算机的某个功能划分给哪部分来实现,以及他们之间如何协同工作,原则只有一个:让计算机工作的最棒。
计算机系统简述
计算机,它是指这样一种机制,即同时在做着两方面的事情:即控制着信息的处理过程,同时也是信息处理过程的具体执行者。所谓“控制信息的处理过程”,指的是它必须决策下一个执行任务是什么,而“处理过程”的执行者,意味着他必须具备“加”、“减”、“乘”等运算能力以产生执行结果。该机制更准确的称谓是“中央处理器(Central Processing Unit,CPU)”。
而大多数人更熟悉“计算机”这个词,它包含了比处理器更多的意思。一个计算机系统由更多的部件组成,除了处理器之外,还包含键盘(用来输入命令)、鼠标(用来点击菜单)、显示器(用来显示计算机系统产生的信息)、打印机(用来打印信息的拷贝)、内存(用来临时存储信息)、磁盘和CD-ROM(用来永久存储信息及很多可以执行的程序或软件)。这些附件的部件更方便了计算机最终用户的使用。
两个非常重要的思想
第一:所有的计算机(不管是最大的还是最小的、最快的还是最慢的、最昂贵的还是最廉价的),只要给予足够的时间和内存,它们所能完成的计算任务是相同的。换句话说,最快的计算机能够完成的事情,最慢的计算机也能完成,只是更慢一些而已;而一个便宜的计算机所不能完成的事情(如果有足够内存的话),对于一个更昂贵的计算机来说,同样也是无法完成的。总之,所有的计算机能够完成相同的事情。只是有些计算机可能做的更快些,但绝不会做的更多。
第二,我们用英语或其他语言给出了一个问题,然而计算机却能通过电子运转(运行程序)来解决这个问题,太奇妙了!至于怎样把用人类语言描述的问题转换成能够影响电子运转的电压,需要一系列的、系统的转换过程。
计算机:通用计算设备
计算机是特别的,要学习计算机的基本原理,必须先了解计算机是怎样工作的?答案在于计算机被称为“通用计算设备(universal computational device)”。
在现代计算机出现之前,曾经出现了很多能计算的机器,其中,有些是模拟机—即机器产生的结果是用可测量的模拟量来表示的(如电压、距离等)。例如:滑动计算尺。模拟机器的缺陷主要是难以提高其精度。于是,数字机出现了,数字机(digital machine)通过一组固定的、有限的数字和字符来完成操作。如:数字手表。但计算机就不一样了。你需要告诉计算机的是“方法”和“任务”,如怎样做加法、怎样做乘法等。而假如你有新的计算任务要实现,就不需要购买或设计新机器了,所要做的唯一事情,就是在原来的计算机上增加一些新的指令或程序即可,这就是为什么我们称计算机为“通用计算设备”的原因。
通用计算的思想产生要归功于Alan Turing(阿兰·图灵)。1937年,他提出了一个大胆的设想:任何计算都可以由这样一台机器来完成,这个机器就是图灵机。他为这类机器给出了一个清晰的数学描述,但没有为之建造一台真正的机器。世界上真正可运行的数字计算机是在1946年才出现的(ENIAC—美国宾夕法尼亚大学)。在计算机领域上,有一个最高奖—图灵奖,相当于“诺贝尔奖”。
图灵机的“黑箱模型”
图灵提出:任何计算都可以通过某种图灵机来完成,我们称这个论题为“图灵论题”。虽然图灵论题从来没有被严格证明过,但众多的证据都表明它是正确的。