写在前面的话:偶尔听到有人为哪门编程语言孰优孰劣争辩;有时也听到有人为了选择用哪门编程语言而困惑。有的人可能会告诉我们:“不要去纠结哪门哪门编程语言了,有那个时间还不如去学习一下那门语言。”可是仍然觉得这样的回复无法让人内心平静,为了能够从心底里不去纠结这些问题,我认为应该理解一个基本的问题:为什么会有这么多的编程语言?恰好最近看coursera里面Stanford University的professor Alex Aiken讲解的Compilers一课里讲到这样一个问题:The Economy of Programming Language,里面的观点还是很有启发意义。
====正文开始=====
不同的cpu有着不同的指令集,这些指令集都是二进制的0和1;后来有了汇编语言,可以认为是二进制指令的助记符表示;再后来有了高级编程语言,它们通过编译器又变回了汇编语言或者机器语言;紧接着一个又一个的高级编程语言诞生了,为什么会有这么多编程语言呢?
一个简单的解释可以是:不同的领域有不同的需求!
对于科学和工程计算领域,要大量的处理数据的计算,如矩阵的计算,于是FORTRAN语言,就很好的适应了这一点;对于数据需要能够很好的查询、修改等操作,可能SQL语言就是一个不错的语言;对于一些底层操作的需求,c和c++可能就很好的能够适应这一点……
于是为了适应不同的应用场景,一个一个的编程语言诞生了。
可是又有了另外一个问题:那为什么不去改造一门语言,让它的功能无所不包,而是不停的创造新的编程语言呢?
一个很好的解释可以是:创造一门新的编程语言的成本有时候会比改进一门编程语言的成本更低!这里的成本,有一个基本假设:Programmer training is the dominant cost for a programming language。
(1)创造一门编程语言,有时候只是需要几个人去写写编译器,再考虑一下其他的需求即可;一旦一门新的编程语言诞生了,这门编程语言对于编程人员来说,是一门新的语言,这门语言的语法、API等等都是全新的,编程人员不会有其他的负担;
(2)而如果改造一门编程语言,需要曾经使用该语言的编程人员重新去适应新的改进,有时为了适应新的应用场景,可能的改变是巨大的。可以试想一下,如果将c++进行更新以适应web网页开发,必然需要改进很多;同样对一门语言的重大更新,还可能造成其他的影响。
(3)这也得出一个这样的结论:那些应用广泛的编程语言,可能很趋于更少的改变。(如果一门编程语言一直在不停的变来变去,干嘛还要去学它呢)。于是我们也理解了这样一个现象:对于中国这么大的国家,任何政策的微小变化,影响可能也是巨大的。
所以,与其对一门已有编程语言进行改进,不如重新发明一门编程语言来的清爽。
而开发一门新的编程语言,为了使用者能够更快更好的学习,往往也会模仿已有语言的一些特性,所以我们看到的编程语言,长得往往都很像。
一旦我们理解了为什么有这么多的编程语言,我们也不会再纠结于这么多的编程语言的选择,进而能够专心的根据不同的应用场景,选择合适的编程语言;刚开始学习不同的编程语言的时候,也许会有些混乱,可是学的多了过了混乱期,也就清楚了。
更重要的一点:有时间再去学学基础的东西,例如编译原理、汇编语言、计算机系统、算法等等知识,这些东西学的时候看似无用,一旦学明白了,后面再学习新的东西,会发现自己学的速度飞快。
路漫漫其修远兮,吾将上下而求索!
(完)
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
- 本文为原创文章,欢迎转载,后续本博客会不断更新,因此请保留该文档信息。
- 本文地址:http://www.cnblogs.com/wuguanglei/p/4302813.html