听《七周七并发模型》作者Paul 讲:编程语言演变对开发者的意义
昨天是QCon2016北京站的第一天,众多国际国内一线讲师登台演讲。主会场的第一场演讲来自《七周七并发模型》的作者:Paul Butcher。
今天,世界上最为流行的编程语言都非常相似,像 Java、JavaScript、C++、C#、Ruby、Python 和 PHP 等,用一种语言写的和用另外一种语言写的看起来很像。但情况并非总是如此:在上个世纪90年代,曾发生过一场编程语言的革命,Java、JavaScript、Ruby、PHP 和 Python 都是在那十年诞生的。而现在,我们正在经历另一场语言革命。未来的十年,我们使用的语言不再是今天的这些。
Paul在演讲中探讨了这场革命背后的驱动力量,以及革命会给开发者带来什么样的影响。InfoQ第一时间根据会场实录整理了这篇文章,分享于你。
福利:关注InfoQ公众号,回复「七周七并发」,下载Paul Butcher的演讲PPT。
作为程序员,编程确实是我的热情所在,我非常热爱这个职业。事实上,我这辈子有两个热情:第一个,计算机编程;另外一个就是赛车。赛车是我的一个玩具,我挣的钱都花在这些赛车上了。(笑)
其实赛车和计算机编程有很多相似之处。作为程序员,我们非常关心我们的成绩,希望我们的程序跑得更快;同样,作为赛车手,我也非常在意我的速度,我希望我的赛车能够跑得更快:它们是一种并行关系。
有的时候我们的计算编程出现崩溃的现象,有些时候我的赛车也会翻车。
今天我给大家介绍的是:编程语言随着时代的变迁发展的过程。要注意的是,这种演变是以跳跃式的形式出现,并不是一个延续性的旅程。
我记得出现上一次跳跃式的发展是在上世纪90年代中期,已经很久之前的事了。虽然今天我们正在使用的这些语言很久没有发生巨大变化了,但是我今天想强调的是:另一起巨大的变革正在来临,我们现在正处在变革之中。
所以我希望给大家解释一下,为什么这样?请先看一下历史的演变。
1979年、我10岁的时候,我开始了我的编程生涯。那个时候,我们还没有互联网,如果我们希望能够学习新的技术,新的语言编程,必须通过看杂志、读报纸、看论文等。当时,最知名的杂志叫做《BYTE》。
我当时看了很多《BYTE》杂志,我还研究了这本杂志的所有封面,我发现这些封面都和编程语言有关。1979年,这本杂志是关于这个编码「LISP」。
这两种语言是我们今天都不怎么使用了。
1981年,封面又变成了另外一个编程语言:「SMALLTALK」。
也是我们现在不怎么使用的语言了。
这是在《BYTE》杂志上出现的第一个、今天仍在广为使用的编程语言:C语言。出现于1983年的封面上。
后来又出现了「MODULA-2」编程语言,同样已经不怎么使用了。
1987年,《BYTE》封面出现了Prolog编程语言。
因为在八十年代的时候,我们还在猜测哪种编程语言会在未来能够广为使用,我们猜的是这几种,但是猜错了,这些语言在今天并不怎么使用了。
1988年的时候,《BYTE》出现了这种编程语言:
这是微软发布的一系列编程语言:BASIC 6.0、CS1、FORTRAN 4.1等。对于我们今天所使用的Java、PHP,80年代的我们并不知道它们今天会流行开来。
上面的图是根据TIOBE(一个流行指数)排出的、不同编程语言在网络上的流行度。(我还用了必应和Google来进一步了解哪种语言更加受欢迎。)今年2月份的时候,最受欢迎的语言是Java,之后是C、C++、C#、Python、PHP等其他语言。大家对这个结果应该并不意外,这些语言的流行度应该就是这样排的,这也符合我的预期。
有趣的是,如果我们看一下整个编程语言的发展史,找出2016年、2011年、2008年最受欢迎的编程语言。那么会发现,我们今天所使用的大多数的语言、其实都没有包含在1966年前50广泛使用的语言当中,有些语言甚至都还没有存在。
如果我们看一下在1966年、1991年的这两列序列,大家会疑惑:当时排位第一的语言现在在哪儿呢?第四、第五到第十位广为使用的编程语言,1991年又到哪儿去了?都没有出现!所以当时,编程语言的世界已经发生了翻天覆地的变化。
我再来给大家展示另外一些排名。
上图是Redmonk的排名,它和TIOBE比较类似,专注于哪种语言最受欢迎。它也会关注各种源代码,看一下哪种语言在这两边能够广泛得使用。
大家可以看一下,并不是特别不一样,第一个还是JavaScript、PHP、Python,都在TIOBE的指数上。再来看一下这些语言是什么时候发明出来的?大家可能会觉得比较惊讶,一些非常重要的事件发生在1994年、1995年、1996年的时候。我们当今所使用的很多语言,都是在90年代中期的时候所发明出来。所以在90年代中期的时候发生了什么大事件呢?它是如何进一步改变了整个编程界,答案就是网络。
1995年,网络开始成为普及,这进一步改变了我们编程的方法。时至今日,我们几乎每个人所处的世界也都受到了互联网的影响。
如果我们看2015年从11到第20位最受欢迎的编程语言,如Swift、Groovy,在今天得到了广泛的普及。所以又一个大的趋势出现了,我们又经历了一个巨大的变革和转折。问题是:这到底是什么样的变革,又是什么驱动了整个变革?
我跟大家分享一个观点。看下面这个图表,同样来自于Rodmonk的排名。
这是五年前、2010年编程语言世界的样子。数据来自于StackOverflow,横轴越向右越流行,向左就是不那么流行。
再看一下2015年的情况,有些非常有意思的情况发生了。
有些语言在2015年有很大的变化:它们在2010年并不怎么流行,但到了2015年已经往前进了,变得更加流行,向上又走了很长的距离,仅仅用了5年的时间。
还有一些事情也在发生,有些语言在2010年根本就不存在,但在过去五年被开发出来、并迅速发展,尤其是一些非常年轻的语言已经获得了很高的流行度。这是另外一个标志,让我们知道现在在进行一个很大的转变。
我还想指出一些问题:首先,支持功能性编程的语言流行度也越来越高。
事实上还有其他的一些语言,可以根据JavaScript来编写,它们也是逐渐的在向右上角、更流行的角度在迈进。
最后我想说的是,有些语言是很流行的,它们可以去支持并行和并发,比如CUDA等。
总之,语言的流行度和三点有关:第一个是客户端网页编程,第二个是功能性编程,第三个是并发和并行的编程。
我不想谈客户端这一块,因为它流行的原因是很明显的。我想重点谈谈第二的功能性编程和第三并行并发的流程,它们为什么会流行呢?这两点究竟有什么特别之处,能带来更多的编程语言的革新呢?
为了回答这个问题,我们来看一小段Java的代码。
下面这个是在Clojure写的一个功能。它是一个功能性的编程,它的代码更加简单了,更加简洁了。
这是一个很有意思的例子,很简单。如果说稍微复杂一点的话,比如下面是Java代码并行计算的去统计字数。
这是在我的《七周七并发模型》这本书中摘录的。代码不需要大家去一一读,太多了,但是大家可以大致看一看,这些代码是不是看起来很复杂。但这个还不是全部的代码,你还需要下一页:
我们为了去统计字数,需要写四页的代码,就为了在Java里面并行的统计字数。
我们再看一看在同样的一个统计功能,在Clojure里面一共是七行。
它相当于刚才四页的代码,这就解释了为什么功能性的代码是非常重要的。因为它可以做更多的命令式的编程,它没有太多可变的变量,代表了它更可靠,不会有太多的Bug。因为我们看到前面是用了很多的,也许写的时候就写错了,人总免不了犯错误。这就是为什么功能性编程更加的流行,为什么并发和并行是很重要的。
我们刚才看到这么多的编程语言,究竟哪个编程语言会成为下一个Java?
下一个语言是我们在未来五年会使用的,目前没有任何答案。
但我可以看到的是,有一些潜在的语言,它们都是有可能去获胜的。回想大家看到杂志《BYTE》的封面,上世纪80年代也是在做和现在一样的事情,也许现在最佳的编程语言还没有被发明出来。
那么,这对我们有什么影响呢?
我认为首先,最好的应对方式就是去学习新的编程语言!
不管你学习哪一个新的语言,就去学吧!学习一项新的编程语言,就会使得你的眼光更加的放宽,它会教给你更多的东西,使得你更好的为未来准备,你也可以自己去预测未来会使哪个语言获胜。
第二个建议是再去学习另外一个新的编程语言。
因为我们知道,在短期内我们看到很多编程语言的交错。如果你学了更多的语言,你就能更好地去开阔你的视野,加深你对编程语言的理解,更好地了解自己或未来发展的方向。
第三,我们要学习功能性编程。
虽然现在很多语言在竞争,它们都想成为下一个王者。但是这些语言都是有不同程度的功能性的。但是我想鼓励大家,不管大家学习什么样的语言,你要知道它可以功能性的编程。
最后,去学习并发并行的编程。
以前我们用单核CPU,这样的时代已经过去了,我们现在需要更多的利用多CPU或者CPU多核,以实现更好的性能。
再次感谢主办方InfoQ中国,谢谢大家的聆听。
▽
QCon北京2016正在火热进行中,
4.21~4.23,关注InfoQ公众号,
回复「QCon2016」,
获得在线直播地址,第一时间看QCon!
▽
延展阅读(点击标题):
本文系InfoQ原创首发,未经授权谢绝转载。