1.1 程序
1.1.1语言的演变
在“互联网+”时代,人类简单重复性的劳动或思考活动正在逐步被计算机取代,计算机正在持续改变着我们的工作方式和学习方式,进而影响着我们的思维。提起“计算机”就自然会联想到“程序”,程序似乎成了计算机的代名词。在经历了七十余年的飞速发展后,计算机已远远不是它最初的样子,编程也已不再仅仅是程序员和工程师的专属了。如何在“互联网+”时代提高自身竞争力?学习编程是一个有效的方法,也是一个新的机遇。
编程其实就是用计算机语言把人类的需求表达出来。计算机语言(ComputerLanguage)是人与计算机之间交流的媒介。计算机语言经历了从机器语言、汇编语言,再到高级语言的演变过程。
机器语言是一种指令集的体系,它是用二进制代码0和1构成的指令集合,是计算机唯一可以直接识别和执行的语言。机器语言具有计算机可以直接执行、简洁、运算速度快等优点,但是它难于辨别和记忆,不易阅读和修改,非常容易出错。程序的测试和调试都比较困难,此外对机器的依赖性也很强,于是汇编语言就产生了。
汇编语言为了解决机器语言难以理解和记忆的缺点,用易于理解和记忆的名称和符号表示机器指令中的操作码,这样符号代替了二进制码,机器语言就变成了汇编语言。汇编语言也称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由程序翻译成机器语言,这种起到翻译作用的程序叫做汇编程序,这种翻译的过程称为汇编。汇编语言与处理器关系密切,因此它的通用性和可移植性较差。但这并不意味着汇编已无用武之地。由于汇编更接近机器语言,生成的程序与其他的语言相比具有更高的运行速度,占用更小的内存,因此在一些对于时效性要求很高的程序、许多大型程序的核心模块以及工业控制方面大量应用。
| 操作:寄存器BX的内容送到AX中 1 1000100111011000 机器指令 2 MOV AX, BX 汇编指令 3 AX = BX 高级语言 |
图1.1 机器指令到高级语言
高级语言主要是相对于汇编语言而言的。它是一种既接近于自然语言,又可以使用数学表达式的编程语言。高级语言用人们更易理解的方式编写程序,基本脱离了计算机的硬件系统,可方便地表示数据的运算和程序的控制结构,能更好地描述各种算法,而且容易学习和掌握。例如:在高级语言中表示“将BX的内容送到AX”,使用的代码为:AX=BX。
高级语言编写的程序称为高级语言源程序,但是高级语言并不是特指某一种具体的语言,而是包括很多种编程语言,如流行的Java,C,C++,C#,Pascal,Python语言等等,这些语言的语法以及命令格式都不尽相同。
1.1.2 高级语言的运行机制
计处机不能直接识别除机器语言以外的其它语言,因此高级语言编写的程序需要先“翻译”为机器语言,然后再交给计算机去执行。
比如,我们向计算机发出一条打印命令“print(520)”,由于计算机只能识别01指令,所以该命令并不能直接被执行,需要先经过“翻译”后才能被执行。这里能把高级语言的命令翻译为机器语言的程序就称为“编译器”。编译器翻译的方式有两种:编译和解释,二者区别在于翻译时间点不同。

图1.2 高级语言编译为机器语言
那么,到底什么是编译型语言和解释型语言呢?
1. 编译型语言
编译型高级语言是通过专门的编译器,将高级语言代码(源代码)一次性地翻译成可执行的机器码(目标代码)的编程语言,这个翻译过程就叫做编译(Compile)。编译生成的目标代码可以在特定的平台上独立运行。常用的编译型语言有C、C++、FORTRAN等。
编译程序对源程序进行解释的方法相当于日常生活中的“整文翻译”。在编译程序的执行过程中,要对源程序扫描一遍或几遍,最终形成一个可在具体计算机上执行的目标程序。编译后生成的目标程序是计算机可以直接运行的二进制文件。这样每次运行程序时,都可以直接运行该二进制文件,而不需要再次重新编译了。
举例:比如C语言程序的执行过程,要先将后缀为.c的源文件通过编译链接为后缀为.exe的可执行文件才能运行。
编译型语言具有如下特点:
(1)可独立运行,源代码经过编译形成的目标程序可脱离开发环境独立运行;
(2)运行效率高,编译过程包含程序的优化过程,编译的机器码运行效率较高;
(3)可移植性较差,编译型语言依赖编译器,与特定平台相关。

图1.3 编译型语言的执行方式
2. 解释型语言
解释型语言是通过解释器对高级语言代码(源程序)逐行翻译成机器码并执行的语言。每次执行程序都要进行一次翻译,因此解释型语言的程序运行效率较低,不能脱离解释器独立运行。常用的解释型语言有Basic、Python等。
解释程序对源程序进行翻译的方法相当于日常生活中的“同声传译”。解释程序对源程序的语句从头到尾逐句扫描、逐句翻译、并且翻译一句执行一句,因而这种翻译方式并不形成机器语言形式的目标程序。 每次执行程序都需要重新进行解释。
举例:比如Python程序执行过程,我们写好代码直接运行即可(运行前有解释的过程)。
解释型语言具有如下特点:
(1)易于修改和测试,逐句解释过程中便于对代码的修改和测试;
(2)可移植性较好,只要有解释环境,可在不同的操作系统上运行;
(3)在运行时要先进行解释,语言执行效率较低。

图1.4 解释型语言的执行方式

