2010年8月编程语言榜: 纯面向对象语言前景黯淡?
TIOBE 8月编程语言排行榜于近日发布,本期最大变动是Smalltalk排名跌出Top50,Smalltalk是公认最早的纯面向对象编程语言之一。
值得注意的是,在几个月前,另一个知名纯面向对象语言Eiffel也同样被挤出Top50。这是否从某种程度上意味着一个趋势:编程语言越来越多的走向多范式(Multi-paradigm),兼顾面向对象和面向过程功能。
在7月排行榜,我们兴奋的看到C#排名首次超越(Visual) Basic,而在本期榜单上,(Visual) Basic又重新回到C#前面。
排名攀升最为强劲的语言是:Objective-C、Go和MATLAB。
【Smalltalk小百科】
Smalltalk 被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。由Alan Kay,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:Objective-C,Actor, Java 和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如Design Patterns, Extreme Programming(XP)和Refactoring等。
【更新】日前,《程序员》杂志专门举办了“编程语言研讨会”,以TIOBE编程榜为参考,邀请了各编程语言社区的资深专家,共同探讨编程语言那些事。部分精彩讨论摘录如下:
编程排行榜的价值
参加讨论的各位专家都认为,TIOBE排行榜总体上能够反映编程语言的大趋势。但可能由于数据源取样的问题,JavaScript和shell的排名没有反映出这两种语言真实的使用广泛性。每个开发人员都可能会用到它们,但很多情况下不会作为一种技能放到招聘和应聘信息里去。
那么,这个国外编制的编程语言排行榜所反映的趋势,是否和国内的情况一致呢?专家们也取得了共识:与国外相比,前十名编程语言的总体情况与国内差别不大。具体而言,排名较前的Objective-C、Perl相对来说在国内应用比较少,如果拿国内的数据进行分析,排名应该会在Delphi和JavaScript之后。而由于国内Flash程序员较多,ActionScript的使用者比较多,它可能会进入前十名。
CSDN总编刘江补充说,从国内外语言趋势的趋同性,还可以反映出国内技术社区水平与多年前相比有所提高,变得更加成熟了。Python资深开发者黄冬也表示,像Erlang、Scala、Ruby这些国外比较潮的语言在国内也受到追捧,证明了这一点。
编程语言的大趋势
与会者分析了Tiobe近十年各种编程语言的消长。从左面的走势图可以看出,排在最前的Java、C和C++的排名一直是比较稳定的,但总份额一直在下降。也就是说,原来处于主导地位的语言,正在逐渐被新兴的语言所取代。如果加上早年前五位的Visual Basic和Perl,这种趋势就更加明显。PHP、C#、Python、Objective-C是新兴语言的代表。近来排行榜上最明显的变化一个是Objective-C的飙升,另一个是C#超越了Visual Basic。
从语言分类来看,总体上,以PHP、JavaScript等为代表的动态语言的前景看好;函数式语言越来越受到重视,但过程式语言和面向对象语言的地位也不可取代。更多语言在向多范型的方向发展。
IBM中国研发中心高级工程师王尧对此有不同看法。他认为,如果从语言特性来看,编程语言的总体变化并不大。值得关注的永远是那么几门,可能有时候这门语言稍微上升点,有时候稍微下降点,从语言特性来说也没有看到有什么新的特性出来,不管是什么泛型、函数式还是动态语言都是很多年前就已经出现的内容,只不过语言之间在不断互相学习而已。可能相对来说,Python算比较新的语言,现在位于排行榜第七位,但也是熬了多少年才熬到这个地位,它本身并没有什么特别的东西。
一直在关注Hashell的韩祝鹏说:“语言在从实验室和理论走到实际应用中,再在业界有机会爆发,需要一个很长的时间。从排行榜上也可以看出,排在前列的几乎没有十年以内的编程语言(最晚的C#诞生于2000年),很多都是二三十年的老家伙了。有一些语言特性,比如说Class的出现,再比如Template的出现,确实是石破天惊的变化,但也是多年前的事了。”
北理工教师金旭亮认为,各种编程语言在互相融合,互相取长补短,静态的和动态的融合,函数式语言和面向对象语言的融合,这都非常典型的现象。而微软就是走这条路的。C#之父最近做了个演讲,这三个趋势分别是声明式编程、动态、并发。(参见本期赵劼的文章“编程语言的发展趋势及未来方向”)
影响编程语言的关键因素
韩祝鹏表示,编程排行榜的走势可以反映出,业界的关注点是从传统的桌面平台和企业级开发,然后转到Web开发,PHP、Python和Ruby的兴起是代表,现在移动平台上面的开发又成为新的热点,Objective-C的崛起是代表。
王尧认为,平台的变迁之路不是那么简单的。Web和native客户端的竞争一直在进行,可能会长期并存。Web流行的时候,大家把包括实时应用的各种应用都往Web迁,但是后来发现Web有局限性,因为Web在这方面的界面表现能力无论如何是不能跟native相比的,所以后来就开始有一些矫正,于是客户端又开始有一些复兴。当然客户端现在不可能再超过Web了。尽管现在网络技术已经能做到Web是零客户端,它不需要维护,但现在native客户端也可以做到接近零维护,你可以让它自动升级。从这点来说,客户端模式正在比以前增长,在这种前提下,桌面级的应用还会有很大空间。C++、Delphi最近又有所回潮,也反映了这一点。
Thoughtworks高级咨询师任发科对此表示认同,桌面的应用开发便捷性要比Web开发高得多。所以在一定时间内,会比较稳定地占据一席之地。
黄冬谈到:“当某一种技术处在应用潮流的前端时,必然会带来一波不同的语言,所以依照现在的形势,包括云计算技术等,我认为它势必会带来适合于做这种计算的一波前端,或者说是服务器端的语言。比如说,要做云计算,很有可能并不会提升C语言的市场占有度,因为不管是从服务器端,还是到客户端来讲,云计算可能对C语言产生的需求都不足。而云计算带动的一定是动态语言,而且这种语言的特性一定是:非常容易互嵌、适合于网络。Java当年之所以会兴起,正是适应了跨平台方面的需求,PHP和Ruby的兴起是与Web有关系。另外,现在移动终端设备上还缺乏一门有效的解释型语言,也许JavaScript有机会。”
王尧认为,影响编程语言趋势的因素无非就两个:第一个因素就是计算模型,但计算模型的变化非常缓慢,可能十年八年才会有一次变革,而且就算有变化,对语言的影响也不是很大。第二个因素就是硬件设备,移动设备确实带来了Objective-C的极大发展,这是我们看到的唯一趋势。但是如果再往深探究一下,Objective-C也没有什么新的语言特性,跟C++差不多,它的那些特性早在C++诞生的时候就已经被反复讨论过了,只是后来一直没有活跃起来。无非是它封闭在Mac这个圈子里面太久,现在随着Apple产品大行其道,Objective-C也突然就涨起来了,但是作为一种语言特性它没有什么特别的地方。如果当初Apple不是选择了Objective-C,而选择了C++来作为它的开发语言,现在肯定是另一番场景。语言本身的理论,在40年前该有的都有了。
与会专家还谈到,在国内,影响编程语言的因素还有教育体系和语言本身是否易学易用。当然,由于市场经济和社会的发展,现在年轻人选择编程语言时也越来越主动和理性。
对于语言未来的发展,黄冬认为,与单一供应商和专有平台绑定太紧的语言,比如C#、Objective-C、Delphi,可能前景都不会太乐观。而JavaScript和HTML会有较大潜力。王尧则透露了Delphi的下一步主攻方向是Mac平台的消息。他还认为,Web不可能成为一统天下的平台,因为从哲学上看,不可能用一种方式解决所有问题。韩祝鹏则认为,JavaScript虽然优势很多,但是现在太乱,需要变革。