昨天是QCon2016北京站的第一天,众多国际国内一线讲师登台演讲。主会场的第一场演讲来自《七周七并发模型》的作者:Paul Butcher。 今天,世界上最为流行的编程语言都非常相似,像 Java、JavaScript、C 、C#、Ruby、Python 和 PHP 等,用一种语言写的和用另外一种语言写的看起来很像。但情况并非总是如此:在上个世纪90年代,曾发生过一场编程语言的革命,Java、JavaScript、Ruby、PHP 和 Python 都是在那十年诞生的。而现在,我们正在经历另一场语言革命。未来的十年,我们使用的语言不再是今天的这些。 Paul在演讲中探讨了这场革命背后的驱动力量,以及革命会给开发者带来什么样的影响。InfoQ第一时间根据会场实录整理了这篇文章,分享于你。 福利:关注InfoQ公众号,回复「七周七并发」,下载Paul Butcher的演讲PPT。
有的时候我们的计算编程出现崩溃的现象,有些时候我的赛车也会翻车。
今天我给大家介绍的是:编程语言随着时代的变迁发展的过程。要注意的是,这种演变是以跳跃式的形式出现,并不是一个延续性的旅程。
所以我希望给大家解释一下,为什么这样?请先看一下历史的演变。
我当时看了很多《BYTE》杂志,我还研究了这本杂志的所有封面,我发现这些封面都和编程语言有关。1979年,这本杂志是关于这个编码「LISP」。
这两种语言是我们今天都不怎么使用了。 1981年,封面又变成了另外一个编程语言:「SMALLTALK」。 这是在《BYTE》杂志上出现的第一个、今天仍在广为使用的编程语言:C语言。出现于1983年的封面上。
1987年,《BYTE》封面出现了Prolog编程语言。
因为在八十年代的时候,我们还在猜测哪种编程语言会在未来能够广为使用,我们猜的是这几种,但是猜错了,这些语言在今天并不怎么使用了。 1988年的时候,《BYTE》出现了这种编程语言:
有趣的是,如果我们看一下整个编程语言的发展史,找出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的排名。
再看一下2015年的情况,有些非常有意思的情况发生了。
还有一些事情也在发生,有些语言在2010年根本就不存在,但在过去五年被开发出来、并迅速发展,尤其是一些非常年轻的语言已经获得了很高的流行度。这是另外一个标志,让我们知道现在在进行一个很大的转变。 我还想指出一些问题:首先,支持功能性编程的语言流行度也越来越高。 其次,这些主题都是JavaScript的替代语言,它们可以说是JavaScript的增强版。
为了回答这个问题,我们来看一小段Java的代码。
下面这个是在Clojure写的一个功能。它是一个功能性的编程,它的代码更加简单了,更加简洁了。 如果大家不是很了解Clojure,简单解释一下,Sum和Reduce的是一个函数,比前面的Java不仅更加的简洁,而且还有其他的一些很好的属性。Java有Accumulator,使得做并行计算是很困难的。但在Clojure中可以轻松实现并行计算。同样的一个功能,但是仅仅把Reduce就成了fold,一个很小的改变就可以使得代码可以更好的以并行的方式去运行,速度可以加快四倍。 这是一个很有意思的例子,很简单。如果说稍微复杂一点的话,比如下面是Java代码并行计算的去统计字数。
我们再看一看在同样的一个统计功能,在Clojure里面一共是七行。
下一个语言是我们在未来五年会使用的,目前没有任何答案。 但我可以看到的是,有一些潜在的语言,它们都是有可能去获胜的。回想大家看到杂志《BYTE》的封面,上世纪80年代也是在做和现在一样的事情,也许现在最佳的编程语言还没有被发明出来。 那么,这对我们有什么影响呢? 我认为首先,最好的应对方式就是去学习新的编程语言! 不管你学习哪一个新的语言,就去学吧!学习一项新的编程语言,就会使得你的眼光更加的放宽,它会教给你更多的东西,使得你更好的为未来准备,你也可以自己去预测未来会使哪个语言获胜。 第二个建议是再去学习另外一个新的编程语言。 因为我们知道,在短期内我们看到很多编程语言的交错。如果你学了更多的语言,你就能更好地去开阔你的视野,加深你对编程语言的理解,更好地了解自己或未来发展的方向。 第三,我们要学习功能性编程。 虽然现在很多语言在竞争,它们都想成为下一个王者。但是这些语言都是有不同程度的功能性的。但是我想鼓励大家,不管大家学习什么样的语言,你要知道它可以功能性的编程。 最后,去学习并发并行的编程。 以前我们用单核CPU,这样的时代已经过去了,我们现在需要更多的利用多CPU或者CPU多核,以实现更好的性能。 再次感谢主办方InfoQ中国,谢谢大家的聆听。
QCon北京2016正在火热进行中, 4.21~4.23,关注InfoQ公众号, 回复「QCon2016」, 获得在线直播地址,第一时间看QCon!
|