By oflyhigh on Skatehive
好多年前,我和朋友在设计一款开发板时,为了赋予它更多功能,特意设计了一组4位的拨码开关。开发板会根据开关的位置组合,产生16种可选状态(虽然实际没用上那么多)。现在回想起来,这大概是潜意识里受到了计算机诞生之初编程方式的影响吧。 没错,在计算机诞生之初,并没有所谓“程序”的概念。想让它干活,就得在不同的电子元件之间重新连线,或者改变拨码开关的状态、插拔跳线。通过这些物理操作,计算机才明白它该做什么。 这种操作无疑是低效、难以维护且难以重复的。所以后来出现了打孔编程:在一串卡片上打孔或不打孔来代表0和1,计算机通过读取孔位来判断如何运算。嗯,这比重新连线确实先进了一大截。 说到打孔,我想起大学时寝室楼里的磁卡公共电话。那时的电话机也是通过读取和增加卡片上的圆孔(或磁记号)来判断和扣除余额的。结果有些“狡诈”的家伙通过各种手段欺骗电话机,弄出了可以无限通话的磁卡,简直让人羡慕嫉妒恨呀。 读卡和打卡毕竟需要机械部件,效率有限。既然目的是输入二进制数据,后来干脆就直接把数据写入计算机的存储器里——和机器的交互瞬间更上一层楼,效率倍增。 记得当年和朋友一起搞单片机时,就是通过编程器直接往单片机的ROM中写入程序数据。不过,我们的数据虽然也是一堆0和1,但那是用汇编、Keil C等语言编写,经编译后生成的。 而早期的计算机先驱们,可是直接手写一连串的0和1!对这些神级人物,我除了仰望,还是仰望。 (图源 :pixabay) 程序员都是聪明、勤奋且“懒惰”的。你可能觉得矛盾,其实一点也不。他们的“懒惰”指的是总想改进方法以提升效率——为了达到“偷懒”的目的,结果效率是高了,程序员们却越来越累啦。 既然0、1等二进制流可以代表不同的操作、地址、寄存器和数据,那何不把它们都字符化呢?于是,汇编语言诞生了! 说到汇编语言,O哥读大学时,这门课可是拿了高分的。另外最引以为傲的一件事,就是用汇编做了一套键盘记录器,偷偷记录电脑上别人都敲了什么。 哈哈,O哥可不是要干坏事,单纯就是觉得好玩而已。不过后来操作系统从DOS进化到Windows,引入了内核保护模式,O哥的键盘记录器也就毫无用武之地啦。 汇编语言极大地降低了编程难度,但对许多人来说门槛依然很高。所以后来又有了Basic、C语言、Pascal,当年这些被称为“高级语言”。嗯,现在看起来似乎也没那么高级了。 这些语言学起来确实简单多了,