开发者，原来你最讨厌的编程语言和技术是……
原来 Perl、PHP 已经到了这个地步……
编程语言 开发者
101.68.66.194
引战贴
来自浙江杭州的 Chrome 73.0|Mac 10.14 用户
2019-04-30T17:04:40.000
原来 Perl、PHP 已经到了这个地步……
![](/data/attachment/album/201711/05/100744xl8tk2bmz811b6z1.png)


在 [Stack Overflow Jobs](https://stackoverflow.com/jobs) 上，你可以创建你自己的<ruby> <a href="https://stackoverflow.blog/2016/10/11/bye-bye-bullets-the-stack-overflow-developer-story-is-the-new-technical-resume/">  开发者故事 </a> <rp>  （ </rp> <rt>  Developer Story </rt> <rp>  ） </rp></ruby>来展示你的成就，表现你的职业生涯进步。在创建开发者故事时，你可以对你使用的技术/编程语言添加喜欢或**不喜欢**的标签，如下图：


![你可以对你使用的技术/编程语言添加喜欢或不喜欢的标签](/data/attachment/album/201711/05/100746v5am47q5z5fagmqg.png)


这就给了我们一个机会可以观察到这数十万开发者的喜好和厌恶。有许多方法可以评估一个语言的流行程度，举个栗子说，我们经常使用 [Stack Overflow 访问数或问题查看数](/article-8865-1.html)来评估这样的趋势。但是，当技术人员在他们的简历中表达他们**不喜欢**某种技术时，这个数据集就是一个找出技术人群不喜欢某种技术的独有方式。


（我[两年前曾经在我的个人博客](http://varianceexplained.org/r/polarizing-technologies/)上发表过一些这类分析，不过这篇文章使用了更新的数据集，以及有更多可视化结果和说明。）


### 编程语言


作为测量每个编程语言有多流行的指标，我们将看看它出现在某人“不喜欢”标签的时间与其出现在其他人的“喜欢”或“不喜欢”标签的频率相比。那么 50% 就意味着该语言喜欢与不喜欢各占一半，而 1% 则意味着 99 个人喜欢它而剩下 1 个人不喜欢它。（我们使用了[这篇文章](http://varianceexplained.org/r/empirical_bayes_baseball/)中描述的<ruby> 经验贝叶斯 <rp>  （ </rp> <rt>  empirical Bayes </rt> <rp>  ） </rp></ruby>方法来计算平均值，并使用[这个方法](http://varianceexplained.org/r/credible_intervals_baseball/)来计算得到 95% 置信区间）


让我们开始看看选出的语言列表（而不是像 Android 这样的平台或像 jQuery 这样的库），所有这些都曾在开发者故事中至少提及了 2000 次以上。


![每个语言有多不招人喜欢](/data/attachment/album/201711/05/100746zdm37arhal7ktarz.png)


最不喜欢的语言是 Perl、Delphi 和 VBA ，它们远远把其它语言抛下。接着的第二梯队是 PHP、Objective-C、 Coffeescript 和 Ruby。我们的团队很高兴地看到，R 语言相对于喜欢它的人数来说，对它不喜欢的人数是最少的。


如果你读过我们另外一些关于编程语言增长或萎缩的文章，你也许会注意到那些较少被不喜欢的语言往往是增长较快的。 在 Stack Overflow 上，R、Python、Typescript、Go 和 Rust 全是快速增长的编程语言（我们之前专门对 [Python](/article-8865-1.html) 和 [R](https://stackoverflow.blog/2017/10/10/impressive-growth-r/) 做过分析），而且它们全都属于看法比较<ruby> 分化 <rp>  （ </rp> <rt>  polarizing </rt> <rp>  ） </rp></ruby>的语言。类似的，大量萎缩的语言，比如 Perl、Objective-C 和 Ruby，如我们[之前观察](https://stackoverflow.blog/2017/08/01/flash-dead-technologies-might-next/)到的那样，在我们网站上它处于快速萎缩状况。


我们可以通过将每种语言的规模和增长与不喜欢它的人的百分比进行比较来进行调查，橙色点代表最不喜欢的语言。 为了使我们的分析与前几个帖子保持一致，我们将统计数据限制在高收入国家（如美国，英国，德国和加拿大）。


![语言的增长率与对该语言的不喜欢进行对比](/data/attachment/album/201711/05/100748ylwxicsoqc5lxlbs.png)


一般来说，编程语言的增长率和它有多不招人喜欢方面存在相关性。几乎每个在开发者故事中提及不喜欢的比率超过 3% 的语言都在 Stack Overflow 流量上处于萎缩状态（除了十分两极化的 VBA，它仍有轻度增长）。而不喜欢数量较少的语言，如 R、Rust、 Typescript 和 Kotlin，它们全处于快速增长领域（Typescript 和 Kotlin 增长的太快，以至于都跑出了上图范围）。


一个突出的编程语言是函数式编程语言 Clojure；几乎没有人表示过不喜欢它，但是它仍然处于快速萎缩中（根据[问题查看情况](https://insights.stackoverflow.com/trends?tags=clojure)，它在去年才开始萎缩）。另外一个例外是 MATLAB，它处于快速萎缩，但是没有很多人表示过不喜欢它。这可能是由于调查样本的数据所限：任何一个 Web 开发人员都可能对 PHP、C# 或 Ruby 有意见，但是不从事数据分析的人没理由对 MATLAB 不满意。（这也可能是 R 较少被提及“不喜欢”的部分原因）


我们不一定说这里存在因果关系——部分程序员不喜欢就会导致该语言会被抛弃。 另一种可能是，如果人们觉得这种语言已经越来越不流行，那么人们就会觉得很自然地表达他们也不喜欢了。 同样可以想象的是，开发人员经常使用这个字段来记录他们曾经使用的技术，但是不会再使用该技术了。 这将导致那些自然而然地“被替代的”技术就一直停留在“不喜欢”标签里面。


### 最不喜欢的和最喜欢的


上面的分析仅考虑了编程语言，不涉及操作系统、平台或库（框架）。那么就整体而言，最不喜欢的技术是什么？为了专注于我们有足够数据的更主要的技术，我们其限制为至少提及了 1000 次的技术。


![最不喜欢的技术](/data/attachment/album/201711/05/100748zrgpr9vpuav14rv2.png)


最不喜欢的其中有几个是微软的技术，特别是 IE 和 VB，以及 “微软” 标签（“评估” 也出现在这个列表中，但是没那么糟糕）。[有个好消息是](https://stackoverflow.blog/2017/08/01/flash-dead-technologies-might-next/)，大多数人都不喜欢 Flash。此外，较老的语言，比如 COBOL、 Fortran 和 Pascal 也出现在此处。


值得再次强调的是，这不是对技术及其品质或受欢迎程度的批评。 这只是衡量哪些技术激起了强烈的消极情绪，至少在一部分愿意公开分享其感受的开发人员中如此。


我们也集中观察了那些最流行的技术、那些最不可能被不喜欢的技术（这次，由于喜欢标签出现的比较多，我们仅关注那些被提及至少 10000 次的）。


![哪些技术最令人喜欢](/data/attachment/album/201711/05/100749nkhee9m04jme08el.png)


Git 也许是许多开发者的沮丧源头（绝对包括我！），但人们很少在简历中承认这一点，这是因为它是我们的开发者故事中最受欢迎的标签之一。 R 也出现在了这个列表，但它并不是唯一一个没有争议的与数据科学相关的语言。 机器学习被 23000 人所喜欢，而且很少被人不喜欢。 诸如 Python-3.X、CSS3 和 HTML5 等标签可能表明开发者很少指定他们不喜欢技术的特定版本（如果他们会指定的话）。 当然，[jQuery 在 Stack Overflow 上一直是如此受欢迎](http://i.stack.imgur.com/ssRUr.gif)。


### 分化的标签网络


我们可以把所有这些标签组合成一个网络。在最近的一篇文章中，[Julia Silge 展示了我们如何构建一个代表整个软件生态系统的技术网络](https://stackoverflow.blog/2017/10/03/mapping-ecosystems-software-development/)。 如果我们根据每个标签不喜欢的程度对节点进行着色，我们可以了解该生态系统的哪些部分比其它部分更有争议。


![分化的标签网络](/data/attachment/album/201711/05/100751enf9qdfvfrx8ukcu.png)


通过将开发者故事的标签放置到次生态系统中，该网络揭示了哪些类型的标签趋于两级分化。 在微软（以 C＃ 和 .NET 为中心，左上角），PHP（与 WordPress 和 Drupal 一起，左下角）以及移动开发（特别是 Objective-C，右下角）的子生态系统中都有一些意见分化的标签聚合。 在操作系统聚合中（右下），我们可以看到诸如 OSX 之类的系统，以及特别是 Windows 都有不喜欢的人，但是像 Linux、Ubuntu 和 Unix 这样的标签却没有。


### 竞争


如果某人喜欢某个特定的标签，是否意味着通常他们喜欢或不喜欢另外的标签呢？


我们可以使用出现在特定喜欢标签之间的 [phi 系数](https://en.wikipedia.org/wiki/Phi_coefficient)来衡量它。 （当计算这些相关性时，我们只考虑那些至少有一个不喜欢标签的人。）


![技术竞争程度](/data/attachment/album/201711/05/100751r2bbx0arkbxl2qwc.png)


这突出显示了软件生态系统的一些“竞争”：Linux 和 OSX vs Windows，Git vs SVN，vim vs emacs 以及（对我来说）R vs SAS。 这些配对中的大多数并不代表“相反”的技术，而是反映了两种解决类似问题的方法。 它们中的许多表明了从以前流行的技术发展到更现代的技术（SVN 由 Git 取代，XML 由 JSON 取代，VB 由 C＃ 取代）。 这对于人们想在简历中列出的内容是有意义的；开发者通常会表明他们不愿意使用他们认为过时的东西。


### 总结


我对“语言战争”没有任何兴趣，我也不会对用户分享的喜欢或不喜欢的任何技术进行裁断。 对微软技术的两级分化的看法通常会鼓励我分享我的个人经验。 我是一个 Mac 和 UNIX 终身拥趸，几乎我所有的大学和研究生的编程学习都围绕着 Python 和 R。尽管如此，我很高兴能够加入一个 .NET 栈的公司，我很高兴我来了 —— 因为我喜欢这个团队、产品和数据。 我不能代表其他人说话，但我很高兴自己可以从事于自己想做的事情，而不是那些不想要做的事情。


如果您有兴趣分享您喜欢和不喜欢的技术，并想找到您职业生涯的下一份工作，那么您可以[创建自己的开发者故事](http://stackoverflow.com/users/story/join)。


想找一份你喜欢的技术的工作？ 在 [Stack Overflow Jobs](https://stackoverflow.com/jobs) 找到你的下一份工作，在那里你可以搜索你喜欢做的技术工作。

