Program Arcade Games
With Python And Pygame

Chapter 2: 计算机语言是什么?

Video: What is a computer language?

计算机语言是如何创造出拉的?为什么计算机需要使用它们?为什么世界上有这么多不同的计算机语言?

学习基本的编程并不需要理解这些问题,就好像学开车不许要理解引擎如何工作一个道理。 然后,为了能够把编程水平提升一个更高级的等级,这个章节提供了一个简要的阐述作为起步。

2.1 编程的简单历史

计算机是电子化的,也是数字化的. 对一台计算机来说,任何事物都是以导线间的电压差计量的,要么没有电压,要么有一些电压。 没有电压意味着一个0,一些电压意味着一个1。如果不把多个0和1组合起来,计算机是不会数到更高的数的。

在早期的时候,0和1们是通过开关载入到计算机的内存中的。 图例2.1, 维基百科上, 展示了一台Altair 8800。前方面板上的开关就是用来载入的。灯泡用来显示输出。那时候可没有显示器。

fig.altair
Figure 2.1: Altair 8800

每一组开和关代表了一个数字。每一个数字代表了被计算机使用的数据或者指令。 这样只用0和1表示数字的系统叫做二进制系统。这种计算机语言叫做1GL,也是第一代计算机语言。

二进制数通常用四个为一组来表示数字。例如:

1010 0010 0011

数据和计算机指令都是以二进制存储起来的。机器语言是指能被计算机解读成指令的二进制数字。 并不是所有的二进制数都属于机器语言。 包括像文档,数据库,金融图表这类数据也是以二进制数存储在电脑上。当然,这些数据不属于让计算机来执行的指令。

通过开关来键入程序的一个好处就是使用十六进制数字。人们平时使用的十进制数只能表示0-9。而16进制数要用到数字0-9和字母A-F来组成4个开关一组的数字,表示范围为0-15。 可以通过下面的表格来了解下二进制,十进制,和十六进制是如何关联起来的。

二进制十进制十六进制
000
111
1022
1133
10044
10155
11066
11177
100088
100199
101010A
101111B
110012C
110113D
111014E
111115F
1 00001610
1 00011711
Video: Decimal, binary, and hexadecimal systems

为了使输入程序更容易,后来的计算机允许用户通过汇编语言来键入程序。每一条命令通过助记词来输入,然后一个叫做编译器的程序会把这些助记词写成的代码转换成对应指令所使用的数字。 这种语言叫做2GL语言,也就是第二代语言。

图例2.2展示了一个汇编程序的局部,这也要 感谢 维基百科.

fig.assembly
Figure 2.2: Example assembly language

尽管这已经是一种进步,但是输入程序依然不够简单。 再下一代的计算机语言就允许高度的抽象化了。 最早的三种第三代语言如 (COBOL, FORTRAN and LISP) 都让人更容易编写程序且易于理解了。

第二和第三代语言都使用了一个叫做编译器的程序。 编译器能够把用户输入的信息(称作源代码)转换成机器代码。 计算机然后去运行机器码。源代码并不会执行。

如果一个程序里有许多段代码,它们可以通过一个叫做链接器的程序链接在一起。 链接器把多个编译器生成的机器码链接成一个最终的程序。 这是最终用户去运行的程序,源代码是不需要的。

fig.compiler_and_linker
Figure 2.3: Compilers and linkers

编译器成机器码的一个弊端是程序可能只能运行在指定的某种机器上。 给Windows编译的程序不能运行在苹果的Mac电脑和Linux电脑上。

因为整个编译和链接的步骤对新手来说可能有些复杂,所以有些语言使用解释器. 解释器在查看源代码的同时会立即解释并运行机器语言的代码。 它也允许同样的程序运行在Windows,Mac,Unix这样不同的机器上,前提是每个平台都有解释器。

使用解释器的缺点是是运行起来比机器语言要慢。

fig.interpreter
Figure 2.4: Interpreter

Python就是这样一种解释型语言。所以比起C来更容易上手,但是运行起来要慢一些,而且需要Python解释器才能工作。

编程语言如 Java写的程序运行在一种叫做Java虚拟机 (JVM) 的系统上并把程序编译成机器码,而不是运行在真正的机器上。 另一种也是这么做的广受欢迎的语言是C#, 它用了一种公用语言基础架构(CLI) ,运行在一种叫做虚拟执行系统(VES)的虚拟机上。 关于这些的更多讨论已经超出了这本书的范畴,可以请有兴趣的读者自行查阅。

现今有非常多种的计算机语言。因为计算机需要完成不同类型的任务,所以不同的语言被开发出来专攻指定的任务。 像C适合关于操作系统和小型嵌入式设备的应用。 其他语言比如PHP擅长创建网页。 Python是一种通用型语言,以其简单易用性著称。

Tiobe公司致力于追踪不同编程语言的受欢迎程度,其指数 会每月公布。关注这个榜单和求职的网站如DICE有助于了解最新最热门的语言的需求情况。

庆幸的是,几乎所有语言都有一些相同的元素,一旦掌握了某一种语言,其理论概念也可用于其他语言,易于学习。

如果想了解计算机更有趣的历史,我推荐观看Robert X Cringley的 Triumph of the Nerds,是一个分成三部分的关于计算机起源的系列故事。 电影非常地欢乐,适合全家一起来观摩。 同时我也推荐一本书 Accidental Empires,如果你对阅读比电影更敢兴趣的话。

这些视频之后发生了什么?它们根本都没有包含因特网的诞生!那么也请查阅同由robert X Cringely领衔的Nerds 2.0.1

2.2 复习

2.2.1 选择题小测验

Click here for a multiple-choice quiz.

2.2.2 练习表

Click here for the chapter worksheet.

2.2.3 实验

Click here for the chapter lab.


You are not logged in. Log in here and track your progress.