好多年前,我和朋友在设计一款开发板时,为了赋予它更多功能,特意设计了一组4位的拨码开关。开发板会根据开关的位置组合,产生16种可选状态(虽然实际没用上那么多)。现在回想起来,这大概是潜意识里受到了计算机诞生之初编程方式的影响吧。
没错,在计算机诞生之初,并没有所谓“程序”的概念。想让它干活,就得在不同的电子元件之间重新连线,或者改变拨码开关的状态、插拔跳线。通过这些物理操作,计算机才明白它该做什么。
这种操作无疑是低效、难以维护且难以重复的。所以后来出现了打孔编程:在一串卡片上打孔或不打孔来代表0和1,计算机通过读取孔位来判断如何运算。嗯,这比重新连线确实先进了一大截。
说到打孔,我想起大学时寝室楼里的磁卡公共电话。那时的电话机也是通过读取和增加卡片上的圆孔(或磁记号)来判断和扣除余额的。结果有些“狡诈”的家伙通过各种手段欺骗电话机,弄出了可以无限通话的磁卡,简直让人羡慕嫉妒恨呀。
读卡和打卡毕竟需要机械部件,效率有限。既然目的是输入二进制数据,后来干脆就直接把数据写入计算机的存储器里——和机器的交互瞬间更上一层楼,效率倍增。
记得当年和朋友一起搞单片机时,就是通过编程器直接往单片机的ROM中写入程序数据。不过,我们的数据虽然也是一堆0和1,但那是用汇编、Keil C等语言编写,经编译后生成的。
而早期的计算机先驱们,可是直接手写一连串的0和1!对这些神级人物,我除了仰望,还是仰望。
(图源 :pixabay)
程序员都是聪明、勤奋且“懒惰”的。你可能觉得矛盾,其实一点也不。他们的“懒惰”指的是总想改进方法以提升效率——为了达到“偷懒”的目的,结果效率是高了,程序员们却越来越累啦。
既然0、1等二进制流可以代表不同的操作、地址、寄存器和数据,那何不把它们都字符化呢?于是,汇编语言诞生了!
说到汇编语言,O哥读大学时,这门课可是拿了高分的。另外最引以为傲的一件事,就是用汇编做了一套键盘记录器,偷偷记录电脑上别人都敲了什么。
哈哈,O哥可不是要干坏事,单纯就是觉得好玩而已。不过后来操作系统从DOS进化到Windows,引入了内核保护模式,O哥的键盘记录器也就毫无用武之地啦。
汇编语言极大地降低了编程难度,但对许多人来说门槛依然很高。所以后来又有了Basic、C语言、Pascal,当年这些被称为“高级语言”。嗯,现在看起来似乎也没那么高级了。
这些语言学起来确实简单多了,但像指针、位移、内存溢出等概念,还是会让很多人抓狂。所以在那个时代,程序员的行业壁垒很高,非科班出身或没有长期浸润的人,很难写出好程序。
(图源 :pixabay)
C++、Java这些面向对象语言的出现,本以为会是一场革命,但在我看来,进步固然有,却远未达到“革命”的地步。直到Python崛起,易学易用,几乎人人都可以写上几行代码来指挥电脑,让它去做我们想做的事情。
后来尽管涌现了许多新语言,号称在安全性、易用性或效率上有显著提升,但依然算不上颠覆。
在我看来,计算机编程史上称得上“革命”的大概只有这几次:
- 从纯硬件连线到打孔编程
- 从打孔编程到汇编语言
- 从汇编到高级语言
而此刻,我们正迎来编程史上的第四次革命——AI编程!
很多年前,人们对高级语言的最大期望就是能像使用自然语言一样编程,比如直接说“从0-10这些整数中随机选一个”。遗憾的是,传统高级语言再“高级”,也始终无法直接听懂这句话。
但今天,AI编程可以轻易做到这点。不仅是这种小任务,哪怕是极其复杂的逻辑,只要利用自然语言和AI充分沟通,它也能完成得很好。这就是人类自计算机诞生以来,延续了一个世纪的终极梦想啊。
(图源 :pixabay)
当然,尽管我只谈了编程,但AI变革的可不止这一档子事。从艺术创作到医药研发,从子女教育到国防科技,似乎所有领域都有AI的身影,也都在发生着剧变。
AI革命,将和农业革命、工业革命、信息革命一样彻底改变世界。谁先拥抱AI革命,谁就会成为历史大潮中的弄潮儿;反之,大概就会被拍在沙滩上了。
这绝不是危言耸听,这是正在发生的事实。