一、热身问答

1、硬件和软件的区别是什么?
2、存储字符串“中国”需要几个字节?
3、什么是编码(Code)?

解答:
1、硬件是看得见摸得着的设备,比如计算机主机、显
示器、键盘等。而软件是计算机所执行的程序,即
指令和数据。软件本身是看不见的。
2、在 GBK 字符编码下,存储“中国”需要 4 个字节。
3、通常将为了便于计算机处理而经过数字化处理的信
息称作编码。
解释:
1、硬件(Hardware)代表“硬的东西”,而软件(Software) 代表“软的东西”。是硬的还是软的取决于眼睛能否看 得到,或者实际上能否用手摸到。
2、存储汉字时,字符编码不同,汉字所占用的字节数也 就不同。在 GBK 字符编码下,一个汉字占用 2 个字 节。而在 UTF-8 字符编码下,一个汉字占用 3 个字节。
3、计算机内部会把所有的信息都当成数字来处理,尽管 有些信息本来不是数字。用于表示字符的数字是“字符 编码”,用于表示颜色的数字是“颜色编码”。

二、计算机三个基本性的基础

  1. 计算机是执行输入、运算、输出的机器
  2. 程序是指令和数据的集合
  3. 计算机的处理方式有时与人们的思维习惯不同

三、输入、运算、输出是硬件的基础

从硬件上来看,可以说计算机是执 行输入、运算、输出三种操作的机器。计算机的硬件由大量的 IC (Integrated Circuit,集成电路)组成。每块 IC 上都带 有许多引脚。这些引脚有的用于输入,有的用于输出。IC 会在其内部 对外部输入的信息进行运算,并把运算结果输出到外部。运算这个词 听起来也许有些难以理解,但实际上就是计算的意思。计算机所做的 事就是“输入”数据 1 和 2,然后对它们执行加法“运算”,最后“输 出”计算结果 3。

Android硬编码软编码 速度对比_Android硬编码软编码 速度对比


小型的 IC 自不必说,就连在观察银行的在线系统这类巨型系统 时,或是编写复杂的程序时,也要时常把输入、运算、输出这三者想 成是一套流程,这一点很重要。其实计算机就是台简单的机器,因为 它只能做这三件事。

“你说得不对,计算机能做的事远比这些多得多。”也许会有人这 样反驳笔者。的确,计算机可以做各种各样的事,比如玩游戏、处理 文字、核算报表、绘图、收发电子邮件、浏览网页,等等。但是无论 是多么复杂的功能,都是通过组合一个又一个由输入、运算、输出构 成的流程单位来实现的,这是毋庸置疑的事实。如果打算用计算机做 点什么的话,就要考虑该如何进行输入、如何获取输出以及进行怎样 的运算才能从输入得到输出。

输入、运算、输出三者必须成套出现,缺一不可。这样说的原因 有几点。首先,现在的计算机还没有发展到能通过自发的思考创造出 信息的地步。因此不输入信息,计算机就不能工作。所以,输入是必 不可少的。其次,计算机不可能不执行任何运算。如果只是使输入的 信息绕过运算环节直接输出,那么这就是电线而不是计算机了。可以说 不进行运算,计算机也就没有什么存在的意义。最后,输入的信息如果 经过了运算,那么运算结果就必然要输出。如果不输出结果,那么这也 不是计算机而只是堆积信息的垃圾箱了。因此,输出也必不可少。

Android硬编码软编码 速度对比_Android硬编码软编码 速度对比_02

四、软件是指令和数据的集合

下面介绍软件,即程序的基础。所谓程序,其实非常简单,只不 过是指令和数据的集合。无论程序多么高深、多么复杂,其内容也都是 指令和数据。所谓指令,就是控制计算机进行输入、运算、输出的命令。 把向计算机发出的指令一条条列出来,就得到了程序。这里成套出现的 输入、运算、输出,就是之前在硬件的基础一节中说明过的流程。向计算机发出的指令与计算机硬件上的行为一一对应是理所当然的。

在程序设计中,会为一组指令赋予一个名字,可以称之为“函 数”“语句”“方法”“子例程”“子程序”等。这里稍微说些题外话,在 计算机行业,明明是同一个东西,却可以用各种各样的术语来指代它, 这种现象请诸位注意。如果只想用一个名字的话,一般情况下笔者推 荐称之为函数,因为这个名字通俗易懂。

程序中的数据分为两类,一类是作为指令执行对象的输入数据, 一类是从指令的执行结果得到的输出数据。在编程时程序员会为数据 赋予名字,称其为“变量”。看到变量和函数,诸位也许会联想到数学 吧。正如数学中函数的表记方法那样,在很多编程语言中都使用着类 似于下面的这种语法。

y = f(x)

这句话表示若把变量 x 输入到函数 f 中,经过函数内部的某种运算 后,其结果就会输出到变量 y 中。因为计算机是先把所有的信息都表 示成数字后才对其进行运算的,所以编程语言的语法类似数学算式也 就不足为奇了。但是在程序中有一点与数学不同的是,变量和函数的 名字都可以由一个以上的字符构成,比如下面这种情况。

output = operate(input)

也就是说,使用由多个字符构成的长名字也是可以的。甚至可以 说,写成这样的情况更加普遍。

下面我们就举一个例子作为证据来证明程序是指令和数据的集合。 请诸位看代码。这里列出了一段用名为 C 语言的编程语言编写 的程序。C 语言中要在每条指令的末尾写一个分号“;”。第一行的“int a, b, c;”表示接下来要使用名为 a、b、c 的整数变量,其中 int 是 integer(整数)的缩写,用于告诉计算机“要用的是整数”。下一行的 “a = 10”表示把整数 10 赋值给变量 a。同样地,“b = 20;”表示把整数 20 赋值给变量 b。等号“=”是赋值给变量的指令。再来看最后一行的 “c = Average(a, b);”,这一行表示把变量 a 和 b 传给函数的参数,并将 运算结果赋值给变量 c。其中使用了一个名为 Average 的神秘函数,它 的作用是返回两个参数的平均值。通过上面这个例子,诸位就应该能 明白程序确实只是由指令和数据构成的了吧。

int a, b ,c; 
a = 10; 
b = 20; 
c = Average(a, b);

虽然程序就是这样,但是那些稍微有些编程经验的人也许会说:代码所示的程序逻辑简单,而真正的程序是使用了各种各样的语 法、比这复杂得多得多的东西,绝不是用指令和数据的集合就能解释 清楚的。其实并不是像他们想的那样,无论是多么复杂的程序,都只 不过是指令和数据的集合。下面我们再拿出一个证据。

在一般的编程过程中,都要先编译再执行。所谓编译就是把用 C 语 言等编程语言编写的文件(源文件)转换成用机器语言(原生代码)编写 的文件。假设我们先把代码保存到文件 MyProg.c 中,然后经过编译就可以生成可执行的程序文件 MyProg.exe 了。接下来使用 能查看文件内容的工具查看 MyProg.exe,其内容应该与代码类似。可以看到里面仅仅是数值的罗列(这里用十六进制数表示)。

C7 45 FC 01 00 00 00 C7 45 F8 02 00 00 00 8B 45 
F8 50 8B 4D FC 51 E8 82 FF FF FF 83 C4 08 89 45 
F4 8B 55 F4 52 68 1C 30 42 00 E8 B9 03 00 00 83

请选择一个代码中的数值,随便哪个都可以。这个数值代 表什么呢?是表示赋值或加法等指令的种类呢,还是表示将成为指令执 行对象的数据呢?也有这样的可能(不过这终归是想象),第一个数值 C7 表示指令,第二个数值 45 表示数据。在诸位所使用的 Windows 个人 计算机中,应该会有若干个以 .exe 为扩展名的可执行程序文件。无论是 哪个程序,其内容都是数值的罗列,每个数值要么是指令,要么是数据。

五、对计算机来说什么都是数字

计算机有计算机的处理方法,这是三大原则中的最后一点。计算 机本身只不过是为我们处理特定工作的机器。如果计算机能自己干活 的话,那么笔者一定会买几百台,让它们先替自己完成一整年的工作。 但是,并没有这种会挣钱的计算机,计算机终究只是受人支配的工具。

迄今为止,使用计算机的目的就是为了提高手工作业的效率。例 如,文字处理软件可以提高编写文档的效率;电子邮件可以提高传统邮 件寄送的效率。总之,作为可以提高工作效率的工具,有些靠手工作 业完成的业务可以直接交给计算机处理。但是也有很多手工作业无法 直接由计算机处理。也就是说,在用计算机替代手工作业的过程中, 要想顺应计算机的处理方法,有时就要违背人们的思维习惯。请诸位 特别留心这一点。

用数字表示所有信息,这就是一个很具有代表性的计算机式的处 理方法,这一点也正是和人类的思维习惯最不一样的地方。例如,人 们会用“蓝色”“红色”之类的词语描述有关颜色的信息。可是换作计 算机的话,就不得不用数字表示颜色信息。例如,用“0,0,255”表示蓝 色,用“255,0,0”表示红色,用“255,0,255”表示由蓝色和红色混合而 成的紫色。不光是颜色,计算机对文字的处理也是如此。计算机内部 会先把文字转换成相应的数字再做处理,这样的数字叫作“字符编码”。 总之计算机会把什么都用数字来表示。

熟悉计算机的人经常会说出一些令人费解的话,例如“在这里打开 文件,获得文件句柄”“把用公钥加密后的文件用私钥解密”。那么, 他们所说的“文件句柄”是什么呢?——是数字。“公钥”是什么 呢?——是数字。“私钥”呢?——当然还是数字。无论计算机所处理 的信息是什么形式,只要把它们都当成是数字就可以了。虽然这有些 违背人们的思维习惯,但是处理数字对计算机来说却是非常简单的。

六、只要理解了三大原则,即使遇到难懂的最新技术,也能轻松应对

有关计算机三大原则的说明到此结束。只要理解了这三大原则,即 使遇到难懂的最新技术,也能轻松应对。下面就给诸位看一个具体的例 子。这里摘录了一段有关 .NET 技术的介绍,.NET 是微软公司率先提出 的一种新技术。如果要正式地介绍 .NET 技术,就会像下面这样进行说明。

【有关 .NET 的说明之一】
微软公司率先提出了作为新一代互联网平台的 .NET 技术。作为 .NET 核心的 XML Web 服务使用通用技术 SOAP、XML,促使企业间 的计算机协同工作。

真是不好理解的一段话啊。可是如果把 .NET 的核心技术对照着计 算机三大原则再介绍一遍的话,就会像下面这样进行说明。

【有关 .NET 的说明之二】
计算机是执行程序的机器。程序是指令和数据的集合。为了使互 联网上相互连接的计算机能通过程序协同工作,微软公司采用了 SOAP 以及 XML 规范。SOAP 是关于调用指令的规范,XML 则是定义数据 格式的规范。

只要定义出了指令和数据的规范,装有符合规范的程序的计算机 自然就可以相互协作了。所谓计算机的协同工作指的是,输入到一台 计算机中的数据,可以通过互联网传送到与这台计算机相连的其他计 算机上执行运算,运算所输出的结果再返回给这台计算机。像这样部 署在其他计算机上能执行某种运算的程序就叫作 XML Web 服务。

七、为了贴近人类,计算机在不断地进化

围绕着计算机的技术正在以狂奔般的速度不断进化,与其说是日 新月异,倒不如说是“秒新分异”。虽然也许有人会觉得眼前的已经够用了,希望能停留在现有的技术水平上。但是计算机的进化是不会停 止的,因为计算机还远远没有到达完善的地步。

计算机进化的目的只有一个——与人类更加相近。要想贴近人类,就 必须从计算机的处理方式中摒弃不符合人们思维习惯的部分。请对照着 计算机三大原则之一的“计算机有自己的处理方式”来记忆这个结论。

举例来说,键盘这种不好用的输入设备进化成了好用的鼠标。平 面的 2D(二维)游戏进化成了立体的 3D(三维)游戏。无论是哪一种 进化,都是为了使计算机的处理方式更加贴近人类。

这样发展下去的话,也许计算机进化的最终形态就是机器人了, 有着与人类一样的外表,可以使用人类的语言。例如在 1985 年茨城县 筑波市举办的筑波世博会上,就展示出了一台用 CCD 照相机识别乐 谱,弹奏钢琴的机器人。也许有人会觉得:“数码音乐什么的用个人计 算机不是也能完成吗?”但是这个发明的意义在于机器人能和人类做相 同的事了。就在不久前,本田公司开发出的两足步行机器人也成为了 热议的话题。也许又有人会觉得:“为什么非要特地用两只脚行走呢, 装上轮子能动起来不也一样吗?”但是这个发明的意义还是在于机器人 能和人类做相同的事了。有乐谱和钢琴就能演奏,人能走的道路或台 阶它也能走,这样的机器人无疑才能更加方便地应用于人类社会。

若与十几年前相比,诸位身边的个人计算机也在逐渐贴近人类。 20 世纪 80 年代中期盛行的个人计算机操作系统是 MS-DOS,其操作方 法是靠在全黑的画面上敲入字符,把命令传给计算机。进入 90 年代 后,MS-DOS 进化成了 Windows,用户可以在图形界面上通过鼠标的 操作直观地下达命令(如图 1.3 所示)。开发出 Windows 的美国微软公 司,正将目标锁定在用户体验(User Experience)上,旨在开发出超过 现有 Windows、更加贴近人类的用户界面(计算机的操作方法)。

Windows XP 和 Office XP 末尾的 XP,代表的就是 Experience(体验)。 Windows 若能这样不断进化下去,早晚会有一天,面向个人计算机的 语音输入和手写输入等技术将变得极为普及。

Android硬编码软编码 速度对比_赋值_03


诸位读者当中应该也有对编程感兴趣的人吧。编程方法也在进化, 进化的成果是诞生了两种编程方法,面向组件编程(Component Based Programming)和面向对象编程(Object Oriented Programming)。这两者 的进化目标一致,都是使程序员可以在编程中继续沿用人类创造事物 时的方法。面向组件编程的方法是通过将组件(程序的零件)组装到一 起完成程序;面向对象编程的方法是先如实地对现实世界的业务建模, 之后再把模型搬到程序中。使用符合人类思维习惯的编程方法,可以 实现高效率的开发。

但是,偏偏有这类程序员,他们对面向组件编程敬而远之,明明 有各种各样现成的组件可供使用,却什么功能都要自己亲手做,仿佛 不这样编程就不舒心。还有的程序员误认为面向对象编程难以理解。 像这样的程序员人数还不少,特别是在昔日的计算机发烧友当中。总 之就是因为他们太习惯于配合计算机的处理方式了,反倒认为计算机 贴近人类这一发展趋势是在添乱。

笔者则认为,无论是刚入行的技术人员,还是有资历的老工程师, 都应该由衷地欢迎技术的进化,坦率地接受新技术。如果是用祖传技 艺制作出来的传统手工艺品的话,也许还有价值,但是没有人会稀罕 靠一成不变的方法编写出的程序。