计算机的三大原则
- 计算机是执行输入、运算、输出的机器 (函数,小时候见过的古老的稻谷机,这么看来,很多事物都可以看作遵循这一模式的机器了,优雅又和谐!)
- 程序是指令和数据的集合(硬件完了就是软件了)
- 计算机的处理方式有时与人们的思维习惯不同(比较倔强,只认二进制数字,本质上只会处理数字嘛)
软件是指令和数据的集合
int a, b, c;
a = 10;
b = 20;
c = Average(a, b);
虽然程序就是这样,但是那些稍微有些编程经验的人也许会说:代码清单所示的程序逻辑简单,而真正的程序是使用了各种各样的语法、比这复杂得多得多的东西,绝不是用指令和数据的集合就能解释清楚的。其实并不是像他们想的那样,无论是多么复杂的程序,都只不过是指令和数据的集合。
机器语言的程序通常使用编辑器查看是以16进制的一串串数据显示。
任选一个数值,这个数值代表什么呢?是表示赋值或加法等指令的种类呢,还是表示将成为指令执行对象的数据呢?也有这样的可能(不过这终归是想象),第一个数值C7表示指令,第二个数值45表示数据。在诸位所使用的Windows个人计算机中,应该会有若干个以.exe为扩展名的可执行程序文件。无论是哪个程序,其内容都是数值的罗列,每个数值要么是指令,要么是数据。
对计算机来说什么都是数字
计算机有计算机的处理方法,这是三大原则中的最后一点。计算机本身只不过是为我们处理特定工作的机器。如果计算机能自己干活的话,那么笔者一定会买几百台,让它们先替自己完成一整年的工作。但是,并没有这种会挣钱的计算机,计算机终究只是受人支配的工具。
迄今为止,使用计算机的目的就是为了提高手工作业的效率。例如,文字处理软件可以提高编写文档的效率;电子邮件可以提高传统邮件寄送的效率。总之,作为可以提高工作效率的工具,有些靠手工作业完成的业务可以直接交给计算机处理。但是也有很多手工作业无法直接由计算机处理。也就是说,在用计算机替代手工作业的过程中,要想顺应计算机的处理方法,有时就要违背人们的思维习惯。请诸位特别留心这一点。
用数字表示所有信息,这就是一个很具有代表性的计算机式的处理方法,这一点也正是和人类的思维习惯最不一样的地方。例如,人们会用“蓝色”“红色”之类的词语描述有关颜色的信息。可是换作计算机的话,就不得不用数字表示颜色信息。例如,用“0,0,255”表示蓝色,用“255,0,0”表示红色,用“255,0,255”表示由蓝色和红色混合而成的紫色。不光是颜色,计算机对文字的处理也是如此。计算机内部会先把文字转换成相应的数字再做处理,这样的数字叫作“字符编码”。总之计算机会把什么都用数字来表示(那么数学岂非是宇宙的语言呢!)。
熟悉计算机的人经常会说出一些令人费解的话,例如“在这里打开文件,获得文件句柄”“把用公钥加密后的文件用私钥解密”。那么,他们所说的“文件句柄”是什么呢?——是数字。“公钥”是什么呢?——是数字。“私钥”呢?——当然还是数字。无论计算机所处理的信息是什么形式,只要把它们都当成是数字就可以了。虽然这有些违背人们的思维习惯,但是处理数字对计算机来说却是非常简单的。
下面笔者就讲一件自己年轻时的糗事吧。事情发生在一次与老程序员探讨问题时,我问他:“用某某程序处理的某某数据,在计算机内部也是用数字表示的吧?”老程序员听后,吃惊得张开了嘴,回了一句:“这不是明摆着吗!”
只要理解了三大原则,即使遇到难懂的最新技术,也能轻松应对
有关计算机三大原则的说明到此结束。只要理解了这三大原则,即使遇到难懂的最新技术,也能轻松应对。下面就给诸位看一个具体的例子。这里摘录了一段有关.NET技术的介绍,.NET是微软公司率先提出的一种新技术。如果要正式地介绍.NET技术,就会像下面这样进行说明。
【有关.NET的说明之一】
微软公司率先提出了作为新一代互联网平台的.NET技术。作为.NET核心的XMLWeb服务使用通用技术SOAP、XML,促使企业间的计算机协同工作。真是不好理解的一段话啊。可是如果把.NET的核心技术对照着计算机三大原则再介绍一遍的话,就会像下面这样进行说明。
【有关.NET的说明之二】
计算机是执行程序的机器。程序是指令和数据的集合。为了使互联网上相互连接的计算机能通过程序协同工作,微软公司采用了SOAP以及XML规范。SOAP是关于调用指令的规范,XML则是定义数据格式的规范。只要定义出了指令和数据的规范,装有符合规范的程序的计算机自然就可以相互协作了。所谓计算机的协同工作指的是,输入到一台计算机中的数据,可以通过互联网传送到与这台计算机相连的其他计算机上执行运算,运算所输出的结果再返回给这台计算机。像这样部署在其他计算机上能执行某种运算的程序就叫作XML Web服务。这回怎么样?应该变得容易理解了吧?如果又想到了其他的问题,比如“为什么不得不遵循SOAP和XML的规范呢?”或者“实际看了看SOAP和XML的规范,才发现也很复杂。”那么就可以把答案归结为“因为那些都是适合计算机的处理方式”。
为了贴近人类,计算机在不断地进化
围绕着计算机的技术正在以狂奔般的速度不断进化,与其说是日新月异,倒不如说是“秒新分异”。虽然也许有人会觉得眼前的已经够用了,希望能停留在现有的技术水平上。但是计算机的进化是不会停止的,因为计算机还远远没有到达完善的地步。计算机进化的目的只有一个——与人类更加相近。要想贴近人类,就必须从计算机的处理方式中摒弃不符合人们思维习惯的部分。请对照着计算机三大原则之一的“计算机有自己的处理方式”来记忆这个结论。
诸位读者当中应该也有对编程感兴趣的人吧。编程方法也在进化,进化的成果是诞生了两种编程方法,面向组件编程(Component Based Programming)和面向对象编程(Object Oriented Programming)。这两者的进化目标一致,都是使程序员可以在编程中继续沿用人类创造事物时的方法。面向组件编程的方法是通过将组件(程序的零件)组装到一起完成程序;面向对象编程的方法是先如实地对现实世界的业务建模,之后再把模型搬到程序中。使用符合人类思维习惯的编程方法,可以实现高效率的开发。
但是,偏偏有这类程序员,他们对面向组件编程敬而远之,明明有各种各样现成的组件可供使用,却什么功能都要自己亲手做,仿佛不这样编程就不舒心。还有的程序员误认为面向对象编程难以理解。像这样的程序员人数还不少,特别是在昔日的计算机发烧友当中。总之就是因为他们太习惯于配合计算机的处理方式了,反倒认为计算机贴近人类这一发展趋势是在添乱。
笔者则认为,无论是刚入行的技术人员,还是有资历的老工程师,都应该由衷地欢迎技术的进化,坦率地接受新技术。如果是用祖传技艺制作出来的传统手工艺品的话,也许还有价值,但是没有人会稀罕靠一成不变的方法编写出的程序。
稍微预习一下第2章
作为第2章的预习,在本章的最后先来简单地介绍一下计算机(特别是个人计算机)硬件的组成要素。这里讲得不会很难,请先看一下图1.4,体会一下图中的要点。
如图所示,计算机内部主要由被称作IC的元件组成。虽然在IC家族当中有功能各异的各种IC,但是在这里希望诸位记住的只有三种:CPU(处理器)、内存以及I/O。CPU是计算机的大脑,在其内部可对数据执行运算并控制内存和I/O。内存用于存储指令和数据。I/O负责把键盘、鼠标、显示器等周边设备和主机连接在一起,实现数据的输入与输出。
(不好意思让我给画崩了,原图还是很美滴)
在诸位所使用的Windows个人计算机中,多数都只装有一枚名为Pentium(奔腾)的CPU吧。内存的数量则会根据所需存储的大小(少则32MB,多则256MB)装有多条。I/O也会根据周边设备的多少装配有多个。可以认为个人计算机背板上有多少个插孔就有多少个I/O。
只要用电路把CPU、内存以及I/O上的引脚相互连接起来,为每块IC提供电源,再为CPU提供时钟信号,硬件上的计算机就组装起来了,还是非常简单的吧。所谓时钟信号,就是由内含晶振[插图]的、被称作时钟发生器的元件发出的滴答滴答的电信号。如果是Pentium CPU的话,所使用的时钟信号会从几百MHz到2GHz不等。
诸位辛苦了,至此第1章就结束了。想必诸位都已经理解了计算机的三大原则以及计算机为什么要进化了吧。因为这些知识真的非常重要,所以如果第一遍没有读懂,就请再反复多读几遍。也可以叫上公司的同事、学校的同学一起讨论本章的内容。如果能让有资历的老工程师也加入讨论,那么效果会更加显著。在接下来的第2章中,我们将尝试着动手“制造”一台计算机。说是制造,也只不过是在纸上进行的“模拟体验”,而且笔者会带着诸位做,所以请不要担心。敬请期待!