你就希望你的编程语言变得流行吗

原文:So You Want Your Programming Language to Be Popular
翻译:dreamana.com

关于作者

Antonio Cangiano 是 IBM 的软件开发及技术推广人员。 他撰写了《Ruby on Rails for Microsoft Developers》–由 Wrox 出版(2009)和《Technical Blogging》–由 The Pragmatic Bookshelf 出版(2012)。 他还是 Cognitive Class 的营销主管,Cognitive Class 是一项 IBM 教育计划,在他帮助下学员数从 0 增长到 100 万名。 你可以 在 Twitter 上关注他


有一些编程语言越来越流行,而有一些不会,为什么?流行的语言都比不起眼的语言更好吗?[1] 问题看起来并没有那么简单,我们一起来拿起长棍捅向这个马蜂窝。

定义流行

从一开始就不太顺利,其实在编程语言的流行度(或叫受欢迎程度)上并没有真正的共识。已经有人花许多精力将它们排名,基于 Google 搜索,StackOverflow 的提问,GitHub 代码仓库等。

在排名中,取决于你采用哪种探索方式以及怎样衡量它们,您最终会倾向于支持或反对某些语言。

例如,编程语言的流行度与 StackOverflow 上相关问题的数量之间存在明显的相关性。 但是,同样情况下,这指标将压制那些更简单、文档写得更好的语言。

如果您将 GitHub 代码仓库作为流行度的指标,那么您将压制那些将代码在托管到其他地方的语言。 同理,对于在开源世界中没有广泛使用的语言也一样。

庆幸的是,我们不需要精确的排名才能进行有意义的探讨。就本文而言,我们将“流行”大概定义为入选 TIOBE indexRedmonk index [2] 的前 20 名。

流行的编程语言更好吗?

流行语言不需要比不流行的语言更好。

我认为 Lisp 家族,在很多方面,都是最好的语言家族之一。根据我们上面的定义,它充其量最多只是流行的沾边。

不是想引战,我觉得有必要指出 PHP 是世界上最流行的编程语言之一。

仅靠技术优势并不能将赢家与输家区分开来,我们看看是什么的关系。

默认语言

列表中的几种最流行的语言,我将其定义为默认语言

默认语言是指在一个给定平台中的原生语言。

例如:

默认语言受欢迎是因为任何有兴趣在特定生态系统中开发的人都会默认使用它们。

与其他替代语言相比,它们具有巨大的优势。

使用其他语言需要研究和努力。从技术世界借用一个例子,BASH 可以说是比优秀的 ZSH 和 FISH shell 更受欢迎,仅仅是因为它是许多 *nix 系统上默认使用的。

技术巨头支持的语言

另一类流行的语言是靠技术巨头支持的语言。

注意不仅仅得到大型科技公司的支持就足够。试想一下 Google 和 Dart 。不,为了让它流行,公司必须在该语言上加大投入。

微软非常努力推动 C# ,它几乎成了 Windows 编程的默认语言。

大型标准库

除了根据位置优势去选择默认语言之外,大多数流行的语言都有一个大型标准库。

你起码要有一个标准库才能吸引初始种子开发人员群体,这些开发人员将会反过来帮助您发展库的生态系统。

Python 就是这方面的极好的例子。在早期,它的 “自带电池 (batteries included)” 理念就很有用。这是个很好的能发展成庞大代码库生态系统的种子。

通常那些刚冒出来的就在近年流行开来的新语言,通过提供大型标准库的方式影响现有的平台,随之而来就有一个规模不错的代码库生态系统。

最常见的例子就是用于 JVM 的语言,例如 Scala, Clojure 和 Groovy。

再过几年,Elixir 可能成为一个 BEAM(Erlang 虚拟机)上流行语言的例子。

范式转变

有时编程语言变得流行,是因为它们给业内特定的范式转变提供了答案。

OOP (例如:C++, Java),网页的出现 (例如:JavaScript, Perl, PHP),移动端编程 (例如:Objective-C, Swift),数据科学的出现 (例如 R), 等等浮现在脑海中。

范式转变不常发生,但当他们发生了,就给新语言敞开了大门。

目前,函数式编程语言有机会被广泛采用。在某种程度上,是因为它们在日益增长的并发及并行需求的世界中运作得很好。[3]

杀手级应用

这给了我们带来了另一个原因,为什么某些语言在采用方面取得成功。

在给定领域中拥有绝对的杀手级的应用程序。

Ruby 是这方面的典型代表。除了日本之外,在它在其他地方开始引起关注之前,它在很大程度上被忽视了十年左右。

然后 Rails 出现了 ——这对于 Web 开发来说是一个非常引人注目的方案。[4] 足够吸引人,他们愿意学习这种鲜为人知的语言 Ruby,仅仅因为 Rails。

与此同时,他们发现了这是一个不错的小语言。它的技术优点对于它的采用至关重要(以及 DHH 为 Rails 选择它的原因),但它们本身还不够。[5]

这不是一个太常见的场景,但这些为特定领域解决特定问题提供更好答案的语言,可以体验到巨大的人气增长。

还有什么能助力的?市场营销

市场营销有帮助。一个不羞于用好的技术推广的社区毫无疑问能帮助这语言变得流行。

请注意这里的“营销”是一个非常广义的术语。良好的文档是良好的营销。不必只为了开始使用就花费一个小时来安装的东西,也可以说是你的营销途径的一部分。

接受,包容,欢迎新人是良好的营销。写博客,组织会议,在其他会议上发表演讲,撰写优秀的书籍,都是一些营销导向型社区会所做事情的好例子。

还有什么?熟悉度

熟悉非常重要。如果您的编程语言与大多数开发人员习惯的那些完全不同,那么它将很难被广泛采用。

所以它必须遵守这条路线。它必须具有足够的创新性才能让它变得有价值,但是如果足够熟悉的话就不会让新开发者接触它时立即引起负面的反应。

这是许多 Lisp 语言不得不面对的斗争。大多数开发人员都熟悉 C 语法,但是,S-Expressions 对于许多人来说有点可怕和陌生。[6]

正因为如此,虽然函数式语言有机会,但这一次,这不会那么容易推广。

还有别的吗?时间

编程语言不会在一夜之间变得流行。无论你如何切分,它都需要数年时间。

大多数语言至少需要 10 年才能被广泛采用。 近年来采用率变得越来越快,但这个过程仍需要很长时间(数年)。

最明显的例外是 Swift,它在短短几年内迅速崛起。Swift 不仅是由 Apple 提供支持,而且还被指定为世界上最受欢迎的开发生态系统之一的默认语言。

因此,如果您是编程语言的开发人员或某个语言早期的采用者,您希望看到它变得更受欢迎的话,请耐心等待。你将长期处于这种状态。

流行度并不容易

让一门编程语言变得受欢迎真的很难。

竞争非常激烈,有如此之多可用的选项给开发人员去选择。

当我们无症状地接触所有编程语言时,就更难创造一些比它值得实现的东西。

开发人员需要令人心悦诚服的理由来跳船 (jump ship),又或是只考虑在您的语言和社区中投入时间。

考虑一下为什么程序员想要学习一种新的语言:

如果您的语言能够满足大部分需求,那么它将有机会。但这只能让你加入竞赛。

总结

综上所述,我认为这些都是需要考虑的关键因素:

对于大多数语言来说,前两个是不可能的,即便如此,很少有语言可以满足所有其余的要求。

然而,即使只拥有其中的一部分,也足以让您的语言有机会成为主流。

如果做不到,你仍可能会留下一种活跃的小众语言,这种语言将在未来几十年内得到许多开发者的青睐和欣赏。


  1. It’s worth noting that this same question can be posed in wildly different fields. What makes certain musicians popular? How about cars? In this article, though I will discuss my thoughts on programming languages in particular.  ^
  2. An alternative heuristic is to consider a language as being popular if there are multiple current books on the subject published by the most prominent tech publishers such as O’Reilly, Wrox, Addison-Wesley, No Starch, Manning, etc.  ^
  3. In part, because we have come to appreciate some of their features that were incorporated in more mainstream languages.  ^
  4. I don’t care what you think of Rails today. It has significantly affected the world of web development for the past ten years, almost regardless of the language you develop in.  ^
  5. I have said before elsewhere that Rails is both a blessing and a curse for Ruby. It’s a massive blessing because Ruby owes so much of its popularity to Rails. It’s a curse because such a focus on web development within its community has led to limited applicability outside of the realm of web development. Python was spared by such a fate.  ^
  6. It’s remarkable how popular Clojure has managed to become despite its Lisp syntax. A testament to how many other things they got right.  ^
  7. There is a fine line between being enthusiastic users and brigading other communities. Always be respectful of other communities and don’t arbitrarily spam your language around.  ^