珠算口诀
公元前1100年,人类发明了算盘,这也许是已知的最早的计算机和编程语言。
算盘占地约0.05平方米,虽然无法上网,但也不耗电。
如果有一只麒麟臂,珠算口诀的编程效率还是比较可观的,能解决基本的算账问题。
纸带打孔
1945年,美国人莫奇利和埃克特的团队研制出世界首台通用可编程的数字电子计算机,即大名鼎鼎的ENIAC,它是现代电子计算机的先驱。
ENIAC
ENIAC占地面积约167平方米,高2.4米;功耗约150千瓦(75台空调),重约27吨。
计算速度为每秒5000次加法或385次乘法。
编程方法为纸带打孔,类似高考选择题答题卡。
一位女程序员正在编程
ENIAC的第一次测试是计算氢弹相关数据,这次测试的输入、输出数据是一百万张卡片。
看来IBM确实是计算机的鼻祖啊!
磁环阵列
在二十世纪六十年代的阿波罗登月计划中,NASA用到了磁环绳索阵列存储器(Core rope memory),我称它为“晒萝卜”。
磁环阵列
它首次用于火星探测飞船,随后应用于阿波罗载人飞船的导航计算机中。
导线穿过磁环,磁环会改变其电压,穿过就是“1”,没穿过就是“0”。
程序一旦编好就无法更改。当然,导航代码(姿态解算、位置估计等)在中途也确实没有修改的必要。
磁环阵列比纸带要可靠得多,甚至比磁带更可靠,因此载人航天选择了它。
导航计算机Block II版本使用了36864个16bit的“磁环阵列”,可以想象编制这样的程序是一件多么浩大的工程。
这堆萝卜作为飞船的导航程序,引导飞船往返于地球月球之间。
机器语言
在显示器上编写机器语言比纸带打孔或编织磁环都更方便快捷,但它是随着磁盘技术进步而来的。
如果没有磁盘存储器,二进制就只能用打孔或者磁环这种类机械的方法实现。
因此,纸带打孔实质上也是“机器语言”,它是机器语言的一种实现方式。
现在,我们电脑硬盘中所存储的图片、电影,都是以“机器语言”的形式存储的,只不过不再是打孔或磁环,而是“电”信号或“磁”信号。
机器语言就是直接写二进制或十六进制数:
MIPS架构下“跳转到地址1024”的机器码
咱还是不要写机器码了,有点怕。
汇编语言
汇编语言比机器语言更贴近人类的认知习惯,用相应的“助记符”表示相应的操作。
在不同的设备中,汇编语言对应着不同的机器语言指令,除非巧合,一般不通用。
比如,X86架构下,将立即数01100001加载入AL寄存器的机器代码是:
10110000 01100001
转换为十六进制为:
B0 61
汇编代码为:
MOV AL, 61h
你看,汇编语言大大减轻了程序员读写程序的压力。
高级语言
随后出现的高级语言,在汇编语言的基础上进一步封装,更加符合人类的阅读、思考习惯。
比如,在C语言中,上面的汇编代码可以用如下的C代码实现:
AL = 0x61;
是不是轻松加愉快!
那么,你在使用哪种语言,又更喜欢哪种语言呢?说说你对编程语言演进的感受呗。