自学编程 什么是编程?

crazyjin · 2019年03月05日 · 423 次阅读

请先阅读《什么是计算机?》

生活中的程序和编程

大部分人应该都学过做菜吧。以前学做菜都需要人教,现在学做菜很方面,在网上找一个菜谱照着做就行了。下面就是一个网络上找来的菜谱,回锅肉的做法:

回锅肉菜谱

学做这道回锅肉的时候你只需要准备好材料,然后按照菜谱一步一步地操作就行了。我们可以把这个菜谱叫做做回锅肉的“程序”。执行这道程序的是人,而产出是一盘火锅肉。如果有一天你发明了一道菜,你也可以把这道菜的制作过程编成一道菜谱,编成做这道菜的程序。这样别人就可以按照你的程序做出同样的菜来了。

当然,不只是做菜才会有程序。你去某个政府部门办事的时候,他们会告诉你:先去A部门登记拿材料,再去B部门盖一个章,然后再回来。你问他为什么,他大概会告诉你:程序就是这样的,得按程序来办。这也是程序,编写这道程序的人是政府管理者,执行这个程序的是政府部门行政人员。

电脑中的程序和编程

现在个人电脑和智能手机中,社交工具、浏览器、杀毒软件、游戏这些都是可执行的程序。甚至操作系统本身也是一个程序。

《什么是计算机?》中有讲到,最初的现代意义的计算机被设计用来计算炮弹飞行的轨迹。然而炮弹飞行轨迹的计算是一个非常复杂计算过程,而计算机只能执行简单的加、减、乘、除、开根号等指令,所以就需要有人告诉计算机如何去完成这个复杂的计算。于是操作人员只能把复杂的计算分解,然后重新设计成一系列计算机可以按指定顺序执行的简单的指令,这个过程就叫做编程。分解、重新设计后得到的描述如何完成一个复杂计算的一系列有序指令的集合被称为程序。“编程”也被叫做“计算机程序设计”。

计算机程序设计的发展

计算机程序设计的发展和计算机的发展紧密相关。虽然只有短短的70多年,但却有着异常丰富的历史细节。这里只选取编程语言进化中的三个阶段来讲。通过编程语言,程序员才能告知计算机如何完成一个复杂的计算。

机器语言

在最初的程序设计中,程序设计者使用的编程语言就是计算机可以直接执行的指令,被称为机器语言。

二进制代码

上图是一小段机器语言代码,只由0和1组成。这是因为计算机只认识0和1。你没有看错,计算机只认识0和1。从第一台冯诺伊曼结构的计算机被设计出来到现在,70多年的时间里,这一点一直没有改变。你现在从屏幕上看到任何文字、图像、视频在计算机中都是由0和1来表示的。不过现在已经很难在电脑中显示二进制的代码了,更多的是以十六进制显示。下面是一小段以十六进制显示的代码:

十六进制代码

注意,虽然你看到的是十六进制的符号,但是这些符号在计算机中仍然由二进制的0和1表示。这些0和1控制着屏幕上的一个个像素点和色彩,从而显示出各种各样的文字和图像。

汇编语言

虽然机器语言计算机可以直接理解,但是不便程序设计者书写、阅读。程序员们用一些简短的英文单词来代替机器语言中的一个个二进制指令,使得设计程序更加方面,从而形成了汇编语言。下面是一段汇编语言编写的代码:

汇编代码

汇编语言虽然方便了程序设计者,但是计算机并不能直接理解,所以在运行程序之前仍然要将其转换成机器语言。上图中的每一个指令,比如movq、pushq、jmp,最终都会被替换二进制指令。最初的替换工作是由人来完成的,后来发展成由计算机程序来完成。这种程序在现在的计算机变种中仍被使用,这就是汇编器。

高级语言

汇编语言虽然比机器语言更方便,但是它仍然有很多缺点。比如,由于有很多公司开发了自己的计算机,而这些计算机的指令又都不一样,所以对应的汇编语言(由开发计算机的公司提供)也不一样。这就导致了在A型计算机上开发的程序无法在B型计算机上运行。此外,汇编代码虽然比起二进制代码更易于书写和阅读,但是它仍然非常的臃肿,很难快速地表达出计算过程。因此,为了克服这些缺点,人们又设计了更简洁、表达能力更强、更贴近于人的思维模式、更容易移植的编程语言。这些语言被称为高级语言。这里仅以C语言为例:

C语言小程序

这是一个短小的由C语言编写的程序,它计算从0加到100,并将结果打印到屏幕上。它对应的汇编程序如下图:

汇编语言代码

高级语言比汇编语言更加的短小、简洁,更易于阅读和理解。但高级语言编写的程序不能直接由计算机执行,它们必须先转换成汇编程序,再由汇编器转换成机器语言程序。将高级语言编写的程序转换成汇编程序的过程称之为编译。编译的过程类似于从汉语到英语的翻译过程。这个过程比较麻烦,由一个被称为编译器的程序来完成。C语言是计算机程序设计语言发展过程中的一种非常重要的语言,1972诞生至今仍然被广泛应用在很多重要领域。很多现在流行的编程语言都是由C语言派生出来的。比如C++、Java、C#、Javascript、Go等等。

总结

虽然计算机和计算机编程语言不断发展,但是计算机程序设计的基本概念并没有发生变化。编程仍然是最初的概念:把复杂的计算分解,然后重新设计成一系列计算机可以按指定顺序执行的简单指令。发生变化的是:我们使用更简洁、表达能力更强的编程语言来编写程序,并且将编译和汇编的过程交给了程序来完成;通用的计算已经被封装成了标准库,通常情况下程序员不必再去关心这些计算细节,比如:打开一个窗口、读取一个文件、输出一段文字、等等。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册