机器语言这个问题应该从机器语言是怎么工作说起的 。
在计算机的太古宙时代,在制造一台计算机之前,首先要做的是为它建造一座能够容纳它的大房子 。然后还要配接上水电资源,因为它运行起来就要耗费半座城市的电能,散热也得跟上 。
而能够操纵这样的由电子管组成的怪兽的人,则是看起来低调神秘的科学怪人,他们在一卷纸带上打上不规则的孔,送入机器,然后等着这台怪兽一阵轰鸣之后在纸带上输出结果 。
而这样的机器也仅能进行算术运算,那些穿孔纸带组成的神秘符号,就是机器语言 。
下面看一段机器语言的代码吧:
A10010 8B160210 01D0 A10410要是有谁一眼就能说出它的功能,那么请接受我双膝跪地顶礼膜拜 。如果看不明白,也没关系,后面语言越高级越容易看明白 。
上面的每一条语句就是CPU可执行的一条指令 。CPU常被比喻成计算机的大脑,因为指令的计算最终是由它来完成的 。
而指令通常包括运算和赋值,往往单条指令的动作都是简单的,只做一件事情 。我们通过把多条指令按顺序排列让CPU执行,以此来实现复杂的逻辑 。

文章插图
汇编语言可想而知,如果要这样写代码,人类还怎么进步?于是科学家们就做了一下改进,让代码好懂了些,这就有了汇编语言 。
将上面机器的代码翻译成汇编语言:
mov AX, X mov DX, Y add AX, DX mov Z, AX 在这里我们可以看到,神秘的字母和数字组合转化成了有意义的单词和字母了 。学过汇编语言的同学们自不必说,没学过的也可以大略猜测到,mov应该就是move的缩写,是搬运、赋值;add就更好理解,加法 。而汇编的特点是它虽然比机器语言更好理解了些,但它和机器语言也是逐条对应的 。要想实现复杂的逻辑控制,写出来的代码仍然很不好理解 。
科学家们再一次对编程语言进行了改进,而这一次则是飞跃 。
高级语言诞生于1957年的Fortran,以及1960年左右发布的COBOL,被认为是最早的计算机实用编程高级语言 。它们相对于汇编语言的改进在于,语句不再和机器指令对应,而是更接近自然语言 。
所以高级语言中的“高级”二字,并不是说新的编程语言有多么先进,而是说它们在系统中处于更高一级的抽象 。高级语言的代码更适合于人类编写与阅读了 。
例如前述的机器语言和汇编语言代码,如果用Fortran语言写出来,就是这样:
Z = X + Y怎么样?即使不懂编程,也能看出来是什么意思吧,这类似一个数学算式了 。当然,在计算机语句里,这是一条赋值语句,和数学语境中的等式还是有所不同的 。而高级语言需要通过编译器,将文本符号翻译成机器可以执行的指令集 。编译的过程一般分为四个过程,分别是预处理、编译、汇编、链接,最后得到可执行文件 。
可以使用近似于自然语言的方式写程序,这显然有助于编程技术的推广,也推动了计算机的普及和软件的快速发展 。
可是编程的效率提高之后,另一个问题也随之而来 。那就是代码缺少规范,只要能实现功能,大家可以随心所欲地写代码 。尤其是对goto语句的滥用,导致代码混杂扭曲,因此这样的代码也被称为“面条式代码” 。
当软件需求进一步膨胀时,这样的编程效率又跟不上发展了 。由此在20世60年代爆发了软件危机 。1968年北约在联邦德国的国际学术会议上正式提出了这个名词 。
软件危机的意思就是说,大家照这样去写代码,那么再过几十年,全人类都去当程序员也生产不出实际需要的软件来 。确实有点危言耸听,但我们知道现在并没有出现那么骇人的景象,这都要感谢科学家们在编程思想上的进步 。
结构化编程同样是在1968年,荷兰计算机科学家Dijkstra在写给ACM通讯的一封信中,声明应该在程序中废除goto语句,只需要使用三种基本结构就可以完成所有的程序功能 。
这封信就是著名的“GoTo letter”,由这封信开始掀起了结构化编程的浪潮,Dijkstra也因为他在计算机技术上的卓越贡献,在1972年获得了图灵奖 。

文章插图
Dijkstra老爷子
Dijkstra提出的三种基本程序结构,分别是顺序、选择、循环 。
顺序 就是从第一条语句开始,直到执行至最后一条语句结束,中间每一条语句都要被执行到 。
推荐阅读
- 全国最大的县城是哪里?
- 健康黑码是怎么回事?
- 斗地主记牌的最好方法是什么?
- 土笋冻里面的虫子是啥?
- 药流之前会检查艾滋吗
- 刺泡孕妇可以吃吗
- 女人老的快是什么原因
- 女性脚累是什么原因
- 纪晓岚在古代是什么官 纪晓岚一年俸禄是多少
- 药流的孕囊是什么样的
