1.1 编程语言简史
Programming Language,即“编程语言”或者“程序设计语言”。这种语言不同于汉语、英语等语言。后者是随着人类文化发展而演化的语言,称为“自然语言”。而编程语言是“人造”的,属于“人工语言”(或“人造语言”),是用来定义计算机程序的形式语言。
世界上第一台电子数字计算设备是1937年设计的“阿塔纳索夫-贝瑞计算机”(Atanasoff-Berry Computer,通常简称ABC计算机)。当然,ABC计算机并不能进行编程,它能做的就是求解线性方程组,也不是冯·诺伊曼结构的。20世纪40年代以后,逐渐发展出来的电子计算机都是冯·诺伊曼结构的,并延续至今。
相对于计算机的发展,编程语言出现得更早。从19世纪初起,“程序”就被用在提花织机、音乐盒和钢琴等机器上。只是到后来,随着电子计算机的飞速发展,“软件”已经成为不可或缺的组成部分,“编程语言”才与电子计算机密切绑定在一起。
现在,人类所使用的编程语言有多少种?
难以统计!
在《维基百科》上列出了目前已知的编程语言(https://en.wikipedia.org/wiki/List_of_programming_languages)。为什么需要这么多编程语言呢?比较有说服力的回答可能是“不同的语言解决不同的问题”,以及“开发者有自己的喜好”。不管什么理由,现实就是人类创造了多种多样的编程语言。
所以,在下述“编程语言极简史”中只能选择所谓的“主流语言”了。
❖ 1950年以前是编程语言的“史前”年代。虽然已经有了用“打孔卡”方式编程(见图1-1-1)的记载,但并没有被广泛采用。
图1-1-1 80列、矩形孔的标准IBM打孔卡(源自《维基百科》网站)
❖ 1957年,Fortran诞生,它是世界上第一个被正式采用并流传至今的高级编程语言。发明者是John Warner Backus,此处应当献上敬意和崇拜(以下列出的各项语言发明者,亦或该语言发明团队的负责人、主要设计者,为了简便,统一称为“发明者”,并且都要献上敬意和崇拜)。
❖ 1958年,LISP诞生。发明者John McCarthy。
❖ 1964年,BASIC诞生。发明者John G.Kemeny 和Thomas E.Kurtz。
❖ 1970年,Pascal诞生。发明者Niklaus Emil Wirth。此外,他还是Algol W、Modula、Oberon、Euler等语言的发明者。
❖ 1972年,C诞生。发明者Dennis Ritchie 和Ken Thompson。
❖ 1983年,C++诞生。发明者Bjarne Stroustrup。
❖ 1986年,Objective-C诞生。发明者Tom Love 和Brad Cox。
❖ 1987年,Perl诞生。发明者Larry Wall。
❖ 1991年,本书的主角Python诞生。发明者Guido van Rossum。有打油诗赞到:Python诞生,天降大任,开源开放,简洁优雅,独步天下,人工智能,“唯我不败”。请牢记这个值得纪念的年份和“仁慈的独裁者”(BDFL)。
❖ 1993年,Ruby诞生。发明者松本行弘。
❖ 1995年,Java诞生。发明者James Gosling。
❖ 1995年,JavaScript诞生。发明者Brendan Eich。注意,JavaScript与Java在名字上和语法上虽然相似,但它们是两种完全不同的编程语言。
❖ 1995年,PHP诞生。发明者Rasmus Lerdorf。
❖ 2001年,C#诞生。发明者Microsoft 公司。
❖ 2009年,Go诞生。发明者Robert Griesemer、Rob Pike、Ken Thompson。
❖ 2011年,Rust诞生。发明者Graydon Hoare。
❖ 2014年,Swift诞生。发明者Chris Lattner。
图1-1-2是一些编程语言的拟人化。
图1-1-2 如果编程语言是人
(源自http://kokizzu.blogspot.com/2017/01/if-programming-language-were-humans.html以一种娱乐的心态看看编程语言,让枯燥的编程工作也变得愉悦)
本“编程语言极简史”就停止在了2014年,但是这并不意味着以后没有新的语言出现。还有很多语言没有被写在上述列表中,并不是它不重要或者没用途,而是使用了很“世俗”的观点选择了所谓的“主流语言”罢了。事实上,每种编程语言都有其存在的合理性,也有其应用的领域。
有些机构还会给出“编程语言排行榜”。或许每个人对这种排行榜有不同的解读,并不意味着排名靠后的是“劣等”语言。学习者不能将排行榜作为选择学习某种语言的依据。
那么,根据什么来选择学习某种编程语言呢?
本书作者提供如下参考:依据一,项目需要;依据二,时代发展需要。
依据一就不需要阐述了。依据二貌似有点“空泛”,事实上静心思考,就能理解。如今是什么时代?可能有各种回答方式,从靠近编程的角度来看,可以用“人工智能”时代来概括。
问:在“人工智能”时代,程序开发工作是否重要?
答:当然重要,虽然有媒体热炒“机器人替代程序员”,但“机器人”的程序是谁写的?追根溯源都是要人来做,“机器人”的智能还要靠“人工”。
问:学什么语言能参与这项工作?
答:Python。因为目前它是人工智能领域应用最多的语言。
决定了,学Python。
“历史是过去的现实,现实是未来的历史”。编程语言的发展史也紧扣社会的发展。如果读者把“编程语言极简史”与相应的社会经济发展状况对应,更能理解如何选择学习某种语言了。
编程语言除了跟时代相关,其实还有“高低”之分,但无“贵贱”之别。