编程语言思考系列:为什么会有这么多的编程语言?

一.为什么会有这么多的编程语言?

不同的cpu有着不同的指令集,这些指令集都是二进制的0和1;后来有了汇编语言,可以认为是二进制指令的助记符表示;再后来有了高级编程语言,它们通过编译器又变回了汇编语言或者机器语言;紧接着一个又一个的高级编程语言诞生了,为什么会有这么多编程语言呢?

二.思考

因为编译原理和技术越来越成熟了。语言大体上有四个阶断
  
1、机器编码阶断,比如卡带编码。
2、汇编语言阶断。这算是比较低级的语言。
3、中级语言阶断,比如C语言。
4、高级言阶断,比如JAVA等等。
5、自然语言阶断,比如sql数据库查询语言。

整体来说,语言的发展就是机器能听懂和方便程序员的统一过程。

机器语言时代

所有语言的鼻祖的都是二元码,也就是机器码,最终都会翻译成机器码运行。但是二元码表示非常冗长。比如说大写字母 A 好了,以二元码表示成 01000001 ,如果是小写 a 呢,则是 01100001。

汇编语言时代

用纯数字的机器语言编程的难度可想而知,所以从数字到助记符号的转译很快随之出现,称作汇编语言。比如若是一组数字 0010 0000 可以让芯片把内部的一个存储单位,称作「寄存器 X」,加上一个值 Y,那么不妨就把这组数字和助记符「ADD」对应起来,上面的指令就可以写作「ADD X, Y」这样。一条条类似的指令写成一串,就是一个对于程序的描述。相对于纯数字来说,这是个质的飞跃——终于不必去扳开关了不是吗?而这样的一串字符,可以由专用的小程序来「翻译」成二进制的机器码,也就是真正可以输入处理器去按下晶体管的程序电子信号。当然,每种处理器的汇编语言仍旧是不同的。

高级语言时代

更多是考虑到程序的易读性等等。

不同的计算机语言拥有不同的「个性」,实际却都是对于最底层 0 与 1 的抽象和封装,只是方式与层级不一样——但人类对于这些方式与层级的选择态度,是非常难以改变的。也就是说,如果把语言抽象和封装的层级排成一列,那么每个人都能在这条线上找到自己的舒适区域(comfortable zone),呆在里面很舒服;抽象程度再高阶一些就会嫌不自由,再低一点却又觉得麻烦——如果这样说不够直观,那么不妨搬一个现成的例子:iOS 设备很好用,老太婆和小孩子都能搞定;但 Android 用户会说它不够「开放」(whatever that means),意思其实就是,认为它封装了太多东西,自己则希望掌控更多细节;可是除了刷 ROM 之外,多数 Android 用户从未给自己的手机写过任何一个程序——即便他对于某个理想中的 app 应该如何运作有着非常高深的见解。

三.这种发展的内在原因

一个简单的解释可以是:不同的领域有不同的需求!

对于科学和工程计算领域,要大量的处理数据的计算,如矩阵的计算,于是FORTRAN语言,就很好的适应了这一点;对于数据需要能够很好的查询、修改等操作,可能SQL语言就是一个不错的语言;对于一些底层操作的需求,c和c++可能就很好的能够适应这一点……

于是为了适应不同的应用场景,一个一个的编程语言诞生了。

可是又有了另外一个问题:那为什么不去改造一门语言,让它的功能无所不包,而是不停的创造新的编程语言呢?

一个很好的解释可以是:创造一门新的编程语言的成本有时候会比改进一门编程语言的成本更低!这里的成本,有一个基本假设:Programmer training is the dominant cost for a programming language。

(1)创造一门编程语言,有时候只是需要几个人去写写编译器,再考虑一下其他的需求即可;一旦一门新的编程语言诞生了,这门编程语言对于编程人员来说,是一门新的语言,这门语言的语法、API等等都是全新的,编程人员不会有其他的负担;

(2)而如果改造一门编程语言,需要曾经使用该语言的编程人员重新去适应新的改进,有时为了适应新的应用场景,可能的改变是巨大的。可以试想一下,如果将c++进行更新以适应web网页开发,必然需要改进很多;同样对一门语言的重大更新,还可能造成其他的影响。

(3)这也得出一个这样的结论:那些应用广泛的编程语言,可能很趋于更少的改变。(如果一门编程语言一直在不停的变来变去,干嘛还要去学它呢)。于是我们也理解了这样一个现象:对于中国这么大的国家,任何政策的微小变化,影响可能也是巨大的。

所以,与其对一门已有编程语言进行改进,不如重新发明一门编程语言来的清爽。

只要你能定义一个规则系统(无论多简单),就等于定义了一个编程语言。

而开发一门新的编程语言,为了使用者能够更快更好的学习,往往也会模仿已有语言的一些特性,所以我们看到的编程语言,长得往往都很像。即把一些语言特性像积木一样堆起来,比如函数式范式、面对对象范式。

一旦我们理解了为什么有这么多的编程语言,我们也不会再纠结于这么多的编程语言的选择,进而能够专心的根据不同的应用场景,选择合适的编程语言;刚开始学习不同的编程语言的时候,也许会有些混乱,可是学的多了过了混乱期,也就清楚了。

更重要的一点:有时间再去学学基础的东西,例如编译原理、汇编语言、计算机系统、算法等等知识,这些东西学的时候看似无用,一旦学明白了,后面再学习新的东西,会发现自己学的速度飞快。

四.我的思考

计算机世界的推动皆是因为具体的问题和需求来推动的,人的前进也是如此。

模拟自己置身于当时当地的遇到同样的问题,会怎么样去解决这个问题,你就可以切身处地的想明白为何会出现这门技术。

问题、需求、目的是推动这个社会不断向前发展的根本因素。

人类的社会发展也是如此,工业社会、信息社会等等,每一波浪潮都是因为人类自身发展的问题和需求。

参考资料

为什么会有这么多的编程语言?
http://www.cnblogs.com/wuguanglei/p/4302813.html

为什么现在会有这么多种编程语言?
https://www.zhihu.com/question/20104312

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值