知者无畏--一个真实的簿世界-第4章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
颐巧涎У牡谝患虑榫褪亲黾蛹醴ǎ晕颐侨衔谝桓瞿茏黾蛹醴ǖ亩饔Ω镁褪羌扑慊伞�
1642年,19岁的法国人巴斯卡成功地制造了一台能做加法和减法的计算器(真是自古英雄出少年啊)。这是计算工具发展史上的一个辉煌的成就。虽然巴斯卡的加法器并不比现代塑料〃加法机〃先进多少,但是巴斯卡的工作是开创性的。就在制造这台加法器的过程中,他提出了一个极为有意义的设想,即利用纯粹机械的装置来代替人们的思考和记忆,机器也能思考吗,机器也能有记忆吗?现在我们当然都知道答案是肯定的,但是在1642年,不要说答案了,提出这个问题的人真是非常非常了不起。
下面该另一个天才登场了,这回是英国人,数学家巴贝奇,他在1822年设计制造了“差分机”,这是一种可以实现多种运算的数字计算机。但是更让人吃惊的是他随后设计的“分析机”;在“分析机”的设计中,他几乎设想出了现代数字计算机的所有重要特点:运算单元、存储单元、输入和输出电路。他甚至还提出了最有创造性的概念,即自动制定指令序列的概念,计算机借此可以从上一步自动运行到下一步。这一系列的设想都是在现代电子计算机诞生百余年前做出的!看来每一个时代都会有一些远远超过本时代的天才存在,他们的价值往往需要经过很长时间之后才能被我们这些凡夫俗子所认识。
不幸的是(也许对于我们应该是幸运?看看1822年的中国,当巴贝奇设计他的分析机的时候,我们在干什么),由于制造工艺的限制,更主要的是由于他的思想远远超过了社会经济发展的需要,所以分析机从来没有被制造出来。巴贝奇的天才思想直到20世纪才由冯诺伊曼重新提出,并且构成了我们今天这个行业的基础——存储程序类电子计算机。
计算机在本世纪初出现实际上是必然的,除了科学技术的发展这一根本性的因素外,有两个条件的具备直接导致了计算机的诞生。首先是高速的开关设备,实际上,要想实现自动计算,一种高速计数的的方法是必不可少的,早期机械式计算机失败的本质原因就是采用机械方式技术和进行计算,速度受到的限制太大了。第二个原因是经济或者经济发展的需要,在没有需求的情况下,任何人都不会耗费巨资制造一个没有实际用途的设备。
亚诺什?诺伊曼1903年出生于布达佩斯,他是一个典型的天才儿童。当他几乎还在吃婴儿食物的时候就已经开始如饥似渴地学习科学和世界历史了。当他在高中学习的时候,数学家就已经把他当作同事了。他20来岁的时候,获得了博士学位,在柏林和汉堡大学,发表了引起全世界注意的论文,其中包括一篇他用数学处理量子力学的论文。普林斯顿大学的聘请使他1930年跨过大西洋,移居美国。在1933年,这位30岁的冯?诺伊曼成了普林斯顿高级研究院最年轻的教授。普林斯顿高级研究院里面有许多伟大的天才,包括爱因斯坦。
在美国,冯?诺伊曼因为慷慨地与他人分享自己凭借聪明才智所取得的成果而获得了良好声誉。人们发现他能够解决别人无法解决的数学和物理学难题,而且他通常好像并不介意谁获得了荣誉;他的快乐在于思考。他的记忆力超乎常人但却有选择性他能够整段整段地背诵小时候看过的书籍,但是却很难记住人的名字。
1944年,在一个火车站站台上与赫尔曼?戈德斯坦的偶然相遇把冯?诺伊曼与电子计算机联系起来。戈德斯坦是一位数学家,也是美国军方电子计算机工程的联络官,他认出了冯?诺伊曼并介绍了自己。冯?诺伊曼同意到宾夕法尼亚大学的穆尔工程学校参观电子数字积分计算机(ENIAC)。ENIAC高10英尺,长100英尺,由1。7万个电子管组成。看上去比一只恐龙还要大,但是它的记忆容量还比不上一只小虫。让它执行一项新的任务意味着大量重新编程的人工劳动,操作人员飞快地跑来跑去,转换开关并重新连接电缆。ENIAC的设计者普雷斯佩尔?埃克特和他的搭档约翰?莫奇利热烈欢迎对此感到十分好奇、来访的冯?诺伊曼充当顾问。他们即将完成INIAC的建造工作并正在设计它的第二代产品,最后定名为电子离散变量运算计算机(IDVAC)。
埃克特、莫奇利和戈德斯坦与冯?诺伊曼会面后地几个月,这种可存储程序计算机的蓝图就形成了。计算机的核心由5部分组成,冯?诺伊曼称它们为中央控制器、中央运算器、输入、输出设备和存储器。存储器能够同时记住程序指令和正在处理的数据。后来,埃克特和莫奇利为EDVAC申请专利时说,这些概念是他们自己思考的结果,但是专利申请并没有获得批准。他们的确是建造EDVAC的电子行家,而冯?诺伊曼显然是制造EDVAC的主要逻辑学家。他在一份达101页的〃报告草稿〃中描述了这种能够存储程序的计算机。
当埃克特和莫奇利成立了公司并寻求将他们的计算机转变为财富时,冯?诺伊曼却尽可能多地使公众了解计算机领域的重大突破。他不希望把科学创造的这种神奇的工具变成一个由少数人掌握的秘密,并因此影响公众对它的了解。他想方设法从军方和私人企业那里获得资金以后,在普林斯顿高等研究院的地下室里开始了自己的计算机工程。他和他的小组在那里建造的计算机,加上他们撰写并广泛分发的研究报告,使这间地下室逐渐赢得了〃冯?诺伊曼建筑〃的称号。在本世纪此后的几十年里,大多数的计算机都与他们建造的这一台在某些方面有些相似之处。
事实上,电脑的发展过程和人脑的形成过程有某种相似之处。我们在学会复杂的思维之前,首先接触到的是数字的概念,通过计数学会了加减法,然后才是更加复杂的算术和语言。最早的电脑只能进行简单的加减法,在半个多世纪的发展历程之后,电脑已经能够表达非常复杂的语言和思想了,自然语言理解也从实验室开始走向实用阶段。而最新的IBM“深蓝”已经可以在国际象棋领域打败卡斯帕罗夫。
二进制、十进制、位、字和字节
电脑的基础是二进制,那么,什么是二进制呢;为什么需要二进制呢?在早期设计的机械计算装置中;使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算装置可能更加接近人类的思想方式。比如说一个计算设备有十个齿轮,它们级连起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格。这就是一个简单的十位十进制的数据表示设备了,可以表示0到999999999的数字。
配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。这种通过不同的位置上面不同的符号表示数值的方法就是进制表示方法。常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。
电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。
常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。二进制的“00101000”直接可以转换成16进制的“38”。
一个字是电脑中的基本存储单元,根据计算机字长的不同,字具有不同的位数,现代电脑的字长一般是32位的,也就是说,一个字的位数是32。字节是8位的数据单元,一个字节可以表示0-255的数据。对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。
语言、汇编语言、高级语言和其他
电脑能理解的东西只有二进制的序列,在这里我们要熟悉一下一些最基本的概念了。什么是语言,语言是一种表达的形式,语言是有结构的,比如说主语、谓语等,语言还是有意义的,语言是对事物或者某种行为的描述。语言的存在有一个最基本的条件,就是需要有两个交流的主体,在我们日常的交流中,是说话的双方,或者书的作者和读者(就是我和你),在计算机的世界中,就是程序员和计算机。
根据说话的双方和所说的东西,我们可以将计算机语言分成下面几大类:
* 机器语言:
使用这种语言说话的双方是计算机和史前的程序员,在这里史前程序员直接告诉计算机把什么数据放到什么地方,进行什么样的计算等等,这种语言说出来的话就是一串串的二进制数,比如说:
“00 E9 B3 00”的意思就是
“把寄存器CL的内容加上寄存器CH的内容,结果放到CL中,在寄存器BL中放入0”
* 汇编语言:
和机器语言没有什么本质的区别,唯一不同的是,程序员不用直接说出二进制的数字了,他可以使用一些简单的英文单词或者缩写来表示自己的意思。比如说刚才的机器语言片段,用汇编语言来说就是下面这个样子:
“ADD CL,CH”
“MOV BL,00”
由于计算机能够理解的只有二进制数字,所以在程序员使用的汇编语言和计算机使用的二进制机器语言之间需要翻译(程序),我们把汇编语言翻译成机器语言的程序叫做汇编程序,把机器语言翻译成汇编语言的程序叫做反汇编程序。
* 高级语言:
使用机器语言或者汇编语言写程序是一件非常非常困难的事情,如果没有高级语言的出现,现在我们绝对不会有多姿多彩的因特网,也不会有VCD、DVD等数字化的娱乐的出现,实际上,如果没有逻辑性更强,更接近人类思维习惯的高级语言出现,使用穿孔纸带和直接针对寄存器的操作指令,编写长达几百万行仍然可以正常运行的程序是不可想象的。
所谓的高级语言,是在汇编语言(机器语言)和人类所使用的自然语言之间的一种折衷,可以叫做严格(受限)自然语言,通过抽象出变量、语句以及随后出现的结构、对象的概念,可以让程序员用接近正常思维的方式来表示现实世界的逻辑和流程。
高级语言的代表有早期的FORTRAN(公式翻译语言)、COBOL(商用计算机语言),中期的C、PL/1、PASCAL、BASIC和比较新的JAVA、C++、ADA等。
高级语言和机器语言之间同样需要翻译,我们把高级语言翻译到机器语言的程序叫做编译器,而进行反向翻译的程序非常难以编写,需要进行这种翻译的时候一般都是人工通过经验进行的,我们把这种反向的翻译称为“逆向工程”。
高级语言的表达能力和机器语言是完全一样的(语言的表达能力,是指某种语言能否完整的描述某个事物或者某种行为,比如说,一种语言如果没有相对时间的概念,没有词汇可以表示“先”、“后”,那么,这种语言就不具有表达下面这个行动的能力:“先把鸡蛋放在碗里,然后再把盐放进去”)。科学家已经从理论上证明,一种语言�