【51CTO外电头条】某些语言在出现之后逐渐成为业界的骄子,而另一些则自诞生以来始终默默无闻,难以跻身主流之列。编程语言新生儿们到底因何成功,又是怎样失败的呢?
51CTO推荐专题:51CTO编程语言排行榜
我们身边如今正充斥着大量不同种类的编程语言,数量之多甚至难于统计,而其中绝大部分我们都不曾耳闻。但在这里我们要讨论的是,为什么会这样?为什么某些语言获得主流认可,在业界内大红大紫,而有些则始终默默无闻?
在阅读了由Cristina Videira Lopes撰写的博文后,我对这一话题很感兴趣,正是她在文章中对这一话题发起分析。Lopes指出,只有极少数成功的现代语言在学术界站稳了脚跟,而她作为学术界中的一员,对这一现状深感失望。
她的这种反应是否正常?根据Lopes的说法,当下几乎任何人都有能力创造出新的编程语言——情况也确实如此,从业余编程爱好者到大型企业,关注IT行业的每个人都在打造新语言方面跃跃欲试。与上个世纪七十年代不同,如今创建一套编程语言已经算不上什么浩大的工程。尽管如此,这些语言新生儿们大多数无法取得成功,它们最终的结果要么是成为纯粹的内部试点项目,要么是沦为实验探索好奇心的理论性产物。
为什么会这样?编程语言到底要怎样才能取得成功,那些成功的语言与默默无闻的其它语言相比又具有哪些独特的优势呢?通过对以往数款成功语言的简要调研,我们从中找到了一些端倪。
成功的语言令人感到熟悉与亲切
我们目前手头常用的数种语言已经完全能够应对工作中的各类需求。开发人员中很少有人愿意彻底放弃自己固有的知识基础,从零开始涉猎一门全新的编程语言。出于这一原因,新的语言不应该与原有主流语言之间存在过大的差异。推出一套新的标准库当然很正常,但新语言的核心语法必须令人感到熟悉与亲切。
也就是说,新语言应该至少在某种程度上类似于C语言。毫无疑问,这种设定会令那些讨厌C语言、想到大括号及其难以捉摸的执行机制就犯恶心的程序员们感到极度痛恨;然而C语言已经存在了35年了,在它身后还有一众包括C++、Java、JavaScript以及其它类C型语言的追随者,这一切都表明我们如今真的很难找出一位完全不了解C语言及其描述风格的程序员。
某些现代语言的确选择了不同的发展方向,Python就是其中最典型的例子。不过Python所使用的独特语法并不是为了哗众取宠或是故意显得特立独行,这一切与语言自己的特点与功能息息相关。这很重要,你可以是个古怪的人,但不能为了古怪而让自己显得古怪,在这一点上大多数不成功的独特语言都未能拥有像Python那样的说服力。
此外,新语言应该支持大家熟悉的编程风格。创新没有问题,但最好别在大家所熟知的方面搞创新。我们可以想象,一种不从某种角度提供面向对象特性的语言,根本不可能在今天的IT环境之下走得很远。
当我们在自己的语言中引入全新概念时,最好抱持着婴儿学步的态度。多种主流语言已经开始从函数型程序设计中汲取灵感,例如闭包以及高阶函数等内容,而这些也的确赢得了广泛赞誉。但需要强调的一点是,纯函数型语言仍然很不受欢迎。开发人员喜欢创新型理念,但绝不希望自己为了适应一款新语言而被迫从自己最熟悉的安乐窝中搬出来。
成功的语言必须开源
别再纠结于专有语言了,那些时光已然一去不复返。Visual Basic虽然也在磕磕绊绊中一路走来,但根据我最近所做的调查,所有新型尖端语言都选择了开源——甚至由微软推出的F#也未能例外。
现代开发人员不喜欢那种由单独一家供应商推出、各个方面都深为掣肘的编程语言。开源给了开发人员们一种保证,令他们在当下所编写的代码不至于被未来可能出现的工具、语言或许可内容变化所影响。这种保障成果一以贯之的机制成为开发者们最为看重的优势。
但开发者层面的优势并不是开源的全部好处,设计者们同样能从中获得种种裨益。与大多数软件不同,编译器用户群体很明显完全是由开发人员构成的。他们中的每一位成员都有能力及机会对语言及其附属工具做出改进,这一点非常重要。除此之外,这种态势还能有效帮助语言开发者对现有标准库进行扩充,这也正是Java大获成功的先见之明所在。
这倒不是说编程语言本身不能用来创造商业价值。免费的C与C++编译器都已经存在了几十年,而英特尔公司也始终利用它们所带来的高性能优化编译器创造着不菲的经济收入。但这种经营模式只适用于已经步入运转正轨的语言,对于一种新型语言来说,要想在当今的市场环境中赢得广泛接受及赞赏,最基本的原则就是必须完全免费及开放。至于“专业级”市场,我们稍后再进行讨论。
利基是语言获得成功的必要前提
像C++及Java这样的语言之所以能获得成功,是因为它们在业界整体当中找到了自己的立足点。无论大家在开发工作中偏向哪个领域,这些语言都能够为我们提供一定帮助,让自己成为我们工作当中不可或缺的一部分。
但在这种形势下,固有主流语言的地位同样难以撼动。我们已经有了Java——真的还需要再接纳一款相似的语言吗?由于开发人员对于常用语言的依赖性相当巨大,新的通用语言几乎不可能获得与老前辈们平起平坐的竞争机会,因为利基——也就是特定需求市场已经趋近饱和。
举例来说,Perl最初是作为一款增强型shell脚本工具为系统管理员提供便利的;但由于原始目标市场空间狭小,它最终凭借着自身丰富的文字处理工具在CGI脚本领域大展拳脚,并最终成功以此为基础顺利转型。
与此类似,Ruby在刚刚诞生时对自身的发展定位与Perl颇为类似,只是在功能方面更加强大。这种思路当然不错,但Ruby始终未能借此一鸣惊人。直到Rails框架的出现才使其真正步入热门工具的行列,并成为Web应用程序开发领域的一朵奇葩。
C#的利基在于Windows开发,这与编程语言界的老前辈Visual Basic如出一辙。但C#作为由供应商推出的一款针对性语言,之所以能够获得成功完全要感谢Windows运行环境的超高普及度。与之相对应,谷歌费力开发出的语言虽然同样出身供应商,却始终无法获得与之相仿的成功。
通过对当前十大尖端语言的观察,我发现其中绝大部分都迎合了特定领域中某些特定情况的实际需求。其中一些被设计用于Web应用程序,其它一些能够有效解决并行计算方面的棘手问题,还有一些则专攻科学应用领域。总而言之,没有任何一款语言妄图替代目前主流的通用型语言,看来开发者们已经意识到人类固有的惰性是语言新生儿们的最大天敌。
编程语言要获得成功还需要一点运气
当然,对于某些家伙鼓吹的“我们已经不需要任何新的编程语言”的说法,我个人表示强烈反对。不过根据当前的形势来看,主流市场似乎明显不打算接纳任何新的语言成员。一款新的语言要想获得成功,必须更令受众感到亲切熟悉、又具备必要的创新特色——更重要的是,不要太过野心勃勃。一口吃成胖子的想法无异于痴人说梦。
至于学术界为什么从客观角度上没有推出更多语言,我想这大概和每个人的天性有关。沉闷而规则严谨的语言往往令许多不那么硬派的开发人员们避之而唯恐不速——Ada就是一个很好的例子。正如Lopes在她的文章中所说,不少当下常用的主流语言在刚刚发布最初版本时,还只是一套在一个月时间里东拼西凑搭配出来的粗糙半成品。
至少从实际情况分析,一款语言究竟能否取得成功,运气因素仍然是相当重要的,这与唱片工业中的成功个案不谋而合。不过对于一款语言来说,在市场上获得认同及接纳仍然比歌星的成名之路来得容易些、顺畅些。
无论成功的关键性要素到底是什么,只要仍然有人热爱编程语言、关注编程语言(就像Lopes那样),新的语言就仍然会不断出现。至于它们能否脱离摇篮茁壮成长,那又是另一回事了。
原文链接:http://www.infoworld.com/d/application-development/why-new-programing-languages-succeed-or-fail-188648?page=0,0
【编辑推荐】