“编程”到底是个什么“鬼”?

对于很多没有从事计算机行业,或者涉入不深的朋友来说,编程要么是一种神秘的行业,要么就是一种“残暴”的行业。因为在大多数人看来,为什么26个英文字母+10个阿拉伯数字+加减乘除,怎么就把阿波罗给送上月球了?真是太神奇了!

的确,乍一想确实很神奇。从这一期起,我们就来慢慢揭开“编程”的神秘面纱。

其实,一开始并没有当今这个“程序”这一说的,也就是只有硬件而没有软件。最原始的能跟“编程”扯上关系的硬件,莫过于“计算器”了。当时的计算设备,就跟现在的“计算器”差不多,你只要按下你要计算的数字,再按下计算符,就可以得到结果了。那么计算器的原理是什么哪?为什么不管多大的数,也不管多么复杂的计算,为什么我们算一天都不见得能算完,而这么小小的一个东东,却可以在瞬间完成几十亿位数的计算哪?

“编程”到底是个什么“鬼”?

这得感谢两位大神——牛顿和莱布尼茨。

“编程”到底是个什么“鬼”?

这两位大神发现了“二进制”这个好东西(吐槽一句:据说他们是根据中国的《八卦图》推测出来的,这也太气人了吧!)。咱们上小学的时候老师就给我们讲过二进制,但是缺不给大家讲清楚二进制的用途,哼~

让我们来重温一下二进制。在二进制里只有“0”和“1”这两个数字(PS:看起来真简单!),然后所有的数字都是用这两个数字的组合来表示的。比如,2可以表示为“10”,3就用“11”,4就用“100”来表示……以此类推。

莱布尼茨接着放“损招”——他规定了二进制的运算法则。0+0=0,0+1=1+0=1,1+1=10。简单地说,就是两个数只要有一个为1就变1,要是两个数都为1就进一位,后面补0——无聊!

所以,任何整数都可以用这种规则给计算出和。比如18+13就可以表示为:

“编程”到底是个什么“鬼”?

我们用计算器一转换,神奇的现象发生了——运算结果的“11111”转换为10进制居然是31,跟十进制的运算结果一样!有点儿意思了。

二进制能干什么哪?咱们人类肯定不直接用,否则太繁琐了!

但是这个东西被搞机械和电路的人给盯上了。在电路里,有开关这种最基本的元件。它不止能机械地控制灯的开和关,还能表示“开”和“关”这两种灯的状态。人们就用“0”表示灯开着,“1”表示灯关着。那“00”就表示两个灯都关着,“01”表示第一个灯关着,第二个灯开着……而“11”则表示两个灯全开着……以此类推。

更无聊!

不知道谁想到了一个“损招”,将二进制表示数字的方法和开关的开关给联系起来了。所以,我们用一个开关就可以表示“0”和“1”这两个数字,两个开关就可以表示“0”至“3”这四个数字……以此又类推。

更更无聊!

于是又不知道哪天一位无聊的电子机械师,开始玩两排灯泡对对碰的游戏。用两排灯(也就是开关)来模拟上面的二进制加法,也就是用灯泡亮和灭来模拟二进制运算。他居然成功了!

“编程”到底是个什么“鬼”?

于是他将控制两排灯泡的开关做到了一起,并做成了机械手柄。运算的时候他就手动打开或者关闭开关,看最后到底有哪些灯亮着,再将这些灯的开关状态转换为十进制数,就是运算结果了。

“编程”到底是个什么“鬼”?

别急!这就跟中国的算盘一样,当数字很小的时候,这么做的确很无聊。但当参与运算的数字逐渐变大时,情况就不一样了。我们会发现在纸上算不如挨个扳这些开关来得快。

于是,第一代的机械计算器就这么诞生了!

“编程”到底是个什么“鬼”?

后来,随着电子技术的发展,人们发现可以把这些机械式的“大个头”变成迷你的小电器,于是原来哪些手动开关,就变成了肉眼看不见的电信号,于是电子计算器就出现了。

这又跟计算机有什么关系哪?我们发现,计算器每次都只能执行一个操作,而很多时候为了完成一项计算任务,往往要经过多次计算。所以人们不得不用笔和纸将计算器的每次计算结果都记录下来,再重复录入进去进行计算。

“编程”到底是个什么“鬼”?

于是人们就在想,是不是可以让计算器自己将每次的计算结果记录下来,并且还把下一次要运算的操作记录下来,自行进行计算。于是,第一代计算机就这样诞生了!

“编程”到底是个什么“鬼”?

所以,编程最原始的意思就是将我们要计算的序列想办法输入到计算机里,让计算机帮我们计算出最终结果。只不过,当时的输入可不像现在这么方便简单,用小小的键盘噼里啪啦敲进去就可以了。当时需要这样做:

“编程”到底是个什么“鬼”?

辣个人手里拿的似森么?似仄个东西:

“编程”到底是个什么“鬼”?

对,你没看错,是打孔纸带。事先将要计算的东西按要求在纸带上打孔,然后塞到计算器里去运算。

“编程”到底是个什么“鬼”?

但我真的没骗你,编程就是从“打孔”开始的。

只是后来,人们终于忍无可忍了,才开始用肉眼和智商可识的“字母+数字+运算符”的方式将程序写出来,让计算机自己把可识别的字符组合转换为看不见的“纸带”输入给计算机。这才有了编程语言:

“编程”到底是个什么“鬼”?

这样的编程语言(汇编语言)依然是反人类的,所以人们对编程语言逐步优化,才有了后面的B语言->C语言,再到后来的什么C++、Java之类的高级语言:

“编程”到底是个什么“鬼”?

以上就是编程语言的发展历史和基本原理。后面我们再来接着唠~


分享到:


相關文章: