- 原文地址:Green Vs. Brown Programming Languages
- 原文作者:Adam Gordon Bell
- 译文出自:掘金翻译计划
- 本文永久链接:github.com/xitu/gold-m…
- 译者:chzh9311
- 校对者:Kimhooo、PingHGao、PassionPenguin、Chorer
“绿色” 和 “棕色” 的编程语言
数据
Stack Overflow 的开发者调查 1 结果是了解开发者工作情况的重要信息来源。最近我分析了 2020 年的调查结果,希望以此确定我们应该在集成发行版的文档里添加什么语言。我发现了一些关于人们喜爱哪种编程语言的有趣结论,而这些结论似乎在很多关于编程语言偏好的讨论中都没有出现。
调查结果包含了最令人畏惧的编程语言和最受欢迎的编程语言这两组排名。它们来自同一个问题:
在过去的一年里,你主要的开发工作是用哪一种编程、脚本和标记语言完成的?在接下来的一年里,你又想用哪一种语言工作呢?(如果你已经在用这种语言工作而且希望能继续使用,请在那一行把两个框都勾上。)
令人畏惧的语言指的是你今年主要在用但不想再继续用下去的语言,而受欢迎的语言则指的是你主要在用而且希望继续使用的语言。这些结果很有趣,因为它们反映的观点来自主要使用这种语言的开发者们,应该不会受到 “我听说很棒” 这种心理的影响,也就是说,人们不会仅仅因为语言热门就给他们并不使用的语言打很高的分数。反之亦然:把语言放在令人畏惧列表上的也是正在使用它们的人。他们害怕这种语言不是因为听说它很复杂,而是确实在使用它的过程中感到痛苦。
最令人畏惧的语言榜单 TOP 15:
VBA、Objective-C、Perl、Assembly、C、PHP、Ruby、C++、Java、R、Haskell、Scala、HTML、Shell 和 SQL。
最受欢迎的语言榜单 TOP 15:
Rust、TypeScript、Python、Kotlin、Go、Julia、Dart、C#、Swift、JavaScript、SQL、Shell、HTML、Scala 和 Haskell。
这个列表蕴含了某种规律,你能发现吗?
在我参与之前写的代码是最糟糕的
旧的代码是最糟的。如果让你从一个已经开发了三年以上的代码库里给我找一个文件,你会发现很难追踪。最初只是一个很直接的文件获取层,却在开发过程中逐渐加入了特殊案例、性能优化以及各种由设置选项控制的分支。真实世界中的代码需要根据市场需求进行迭代,而在迭代的过程中,它就变得更加复杂且难以理解。这种现象背后的原因很简单,我最初是从 Joel Spolsky 口中听到的。
开发者们认为旧代码一团糟的原因可以追溯到一个最基本的编程法则:阅读代码比写代码要难。
—— Joel Spolsky,Things You Should Never Do, Part I
我们可以把它称为 Joel 定律。很多事情都遵从这个前提。为什么大多数开发者认为他们接手的代码是一团糟,还想要把它们删掉重写?这是因为从认知层面来说,写新的程序要比阅读写好的代码库轻松很多,至少在最开始是这样。为什么很多重写工作都难逃失败的厄运?因为大部分让代码看上去乱七八糟的语句实际上是至关重要的细微提升,这些提升是随着时间推移慢慢累积的。如果毫无规划地精简这些代码,你最后就不得不回到起点。
漫画作者:Scott Adams。
漫画中的对话内容:① 我接手的项目代码很糟糕。我需要从头开始重新写一遍。② 难道就没有一名工程师会说:“上一位伙计做的很棒。让我们把他的工作保留下来”?③ 希望你招过来取代我的白痴会这么说。
理解你正在写的代码是件很容易的事。你在不断地执行和改进这些代码。但是仅靠阅读去理解已经写完的代码就比较困难了。如果你回看自己写过的旧代码并发现它很难理解,这可能是因为你作为一名开发者已经有所成长,能够把它写得更好。但是也有可能代码本身就很复杂,可你却把理解这种复杂性的痛苦归咎于代码本身的质量问题。这会是 PR 持续积压问题的诱因吗?PR 检查是一项只读的工作,如果你脑中没有一个当前代码的运转模型,你就很难把它做好。
这就是你害怕它的原因
如果很多现实世界的代码会被冤枉成一团乱麻,编程语言也会被冤枉吗?如果你用 Go 写新的程序,却不得不维护一个有 20 年历史、十分庞杂的 C++ 代码库,你能把这两种语言公正地排名吗?我认为这就是调查问卷实际上在评估的:令人畏惧的语言通常被用于已存在的棕地项目 5,而受欢迎的语言则更多被用于崭新的绿地项目 6。让我们验证这一点。2
衡量棕色和绿色的语言
TIOBE 指数宣称可以通过“全世界范围内熟练的工程师、课程和岗位的数量”衡量编程语言。他们度量的方式可能会有些问题,但其准确度对我们的目标而言已经足够了。我们用了 2016 年 7 月份的 TIOBE 指数(这是在 Wayback Machine 中能获得的最早的数据)作为已有大量需要维护的代码的编程语言的代表。如果说 2016 年有什么很大的数据,比起对应的语言在 2016 年并不流行的假设,更有可能是人们在维护用这种语言编写的程序。
他们给出的 2016 年 7 月份编程语言排行榜的前 20 名是:Java,C,C++,Python,C#,PHP,JavaScript,VB.NET,Perl,Assembly,Ruby,Pascal,Swift,Objective-C,MATLAB,R,SQL,COBOL 和 Groovy。我们可以把这个排行作为更多被用于维护工作的语言清单。并把这些语言称为“棕色语言”。在 2016 年并未跻身 top 20 的语言则更多地被用于新的项目。我们把这些语言称为“绿色语言”。

在令人畏惧和受欢迎这两个列表中出现的 22 种语言里,63% 是棕色语言。