编程语言历史漫谈:高级语言怎么来的?

网友投稿 2019-01-19 21:19

追溯编程语言发展史,我们不得不了解一下计算机的原理。

  • 手工开关阶段

计算机内部都是一些电子元件,通过电路的高低电平来代表“0”和“1”,电子元件的各种组合可以实现不同运算,电子元件连接到外面的开关。计算机有一个很大的操作空间,通过控制横竖排列的开关,就能完成一组对应的运算。计算完成后,通过观察输出设备(就是一些灯泡)的亮(1)和灭(0),再进行一层转化,就是结果啦。于是,早期的计算机拥有了第一批程序员(computers),大多由女性手工完成开关切换。有图为证:

https://cdn.china-scratch.com/timg/190121/21193432F-0.jpg

  • 穿孔打卡时代

手工开关要求程序员坐在终端前操作,非常不方便,聪(lan)明(duo)的程序员们设计了穿孔打卡的方法,将开关需要的状态提前在一张卡纸上描述出来,卡被穿孔或不穿孔就对应开关的开或关状态。然后用一个机器读取卡纸的指令,再送到计算机。之后还有输出也通过穿孔打卡,程序员拿到输出的卡纸,再进行翻译。这时候的编程虽然已经方便了很多,仍然很繁琐。程序员需要自己做二进制翻译,才能完成跟计算机的对话。很低级对吗?

https://cdn.china-scratch.com/timg/190121/2119345O8-1.jpg

  • 第一个编译器(翻译器)的诞生

刚刚提到,早期的程序员主要是女性,我们暂且认为这事儿太需要精细操作,五大三粗的男性干不来。而这世上从来不缺伟大的女性!Grace Hopper姐姐被安排为美国的第一台通用计算机马克一号(Mark I)做程序设计,并在二战后加入UNIVAC开发团队。这位姐姐觉得每天去读写机器码太无聊,她开始研究使用接近英文写作的方式来编写程序,并四处寻求经费,终于发明了第一个编译器A-0。编译器本身就是一个用机器语言编写的软件系统,它能够把英文程序翻译成二进制机器代码,这样完美替代了程序员最不爱做的低级部分。

https://cdn.china-scratch.com/timg/190121/2119351549-2.jpg

从此以后,编程语言从低级向高级发展的脚步越来越快。随着计算机硬件的飞速发展,一代又一代充满智慧不断追求高效的计算机科学家们开发出各种高级语言,将更为底层的操作标准化封装起来。编程开始普及,因为高级语言非常接近人类的自然语言,甚至不需要了解计算机的底层原理就可以去完成自己想要的程序。于是乎,还出现了各种图形化编程,比如Scratch和AppInventor。下图是一个编程语言的大致阶梯图。

https://cdn.china-scratch.com/timg/190121/2119356316-3.jpg

低级和高级的区别,其实是底层和上层的区别,是与人类自身语言接近度的区别,并不是编程水平的区别。显而易见,高级语言虽然容易上手,可以更快速得实现任务,但是由于跟机器本身隔得太远,要做对硬件的操作几乎不太现实;同时,高级语言执行起来通常会比较慢。所以,虽然C/C++已经流行这么多年,仍然是所有追求性能的研发领域(底层系统,游戏开发,人工智能算法实现)使用率最高的语言。就跟它们自己的阶梯划分一样,底层语言是一个系统的地基,只要地基扎实,上层随便造。

有家长问,是不是应该直接学C/C++呢?近年来的信奥竞赛更是让大家对C++的学习趋之若鹜。我想说的是,不要急。学编程本来就是一个手段,是理论到实践的飞跃。既然高层语言接近人类语言,而Scratch等图形化编程本来就是设计出来给初学者用的,那为何要直接跳过这么好的兴趣向导和资源来直接学枯燥的文本编程呢?Scratch设计出来的讲故事,做动画,设计游戏,这些元素通通都是孩子们特别需要的。他们会自发地想要去做,而不是任务驱动。这些图形化编程的学习,绝对不是浪费时间。当孩子进阶到一定程度,再去学习Python或C++或更为底层的语言,才能体会到区别,发现自己的潜力。

真心希望每位学习编程的孩子都能从中体会到快乐,而不是刷题和比赛的压力。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com