译注:猴补丁(monkeypatch),是一种很脏的编程技巧,用拼凑代码的方法修改进程逻辑。这种技巧也叫鸭子双关。猴补丁意思是用类似双关的技巧拼凑出和常规进程相左的进程逻辑,这种技巧只会在运行时刻生效。猴补丁的出现说明进程本身设计有缺陷,它用在网页和数据库上就是 SQL 注入攻击,Unix Shell 的 flag 使用不当也会产生类似的安全问题,比如将文档命名为“-x”形式,命令行就可能将文档名认作一个传递的参数而造成运行异常。
许多年前,我在 Ruby 或 Rails 会议上曾听到有人这样说:“没有任何大型项目,Ruby 中的所有东西都能减少 90% 的代码行数。”我一直认为 LOC 是一个愚蠢的指标(译注:LOC,length of the code,即代码的长度)。就算你相信 Ruby 真的减少了 90% 的代码行(反正我不信),一个大数目的 10% 仍然是一个很大的数字,特别是如果你有责任消化这些代码,包括背后发生的事情。Ruby 很有趣,我现在还用它来编写快速脚本(虽然我基本上已经改用 Python 来做了),但它会是大型项目的首选语言吗?那可能会让我害怕地跑掉。
R
R 在“最令人畏惧的名单”中排在第 10 名。我认为这是因为一种误解。R 既是也不是一种通用编程语言。一些统计学家告诉我,“你们程序员不明白,R 是一个统计工作台,并不是一种编程语言。它不是 Python 的什么怪异版本。”我曾多次用过 R,但当我读完 Vince Buffalo 的《Bioinformatics Data Skills》(译注:暂无中文版)中有关 R 的教程后,我终于“明白了”(至少是部分明白了)。循环和 if 语句在该教程的最后只有几页,而不是你最先学习的概念之一。为什么要这样?因为如果你正确地使用 R,你就不会需要它们了。它的设计目的是让你不必使用它们。如果你使用的是更传统的语言,你可能会发现自己在与这门语言作斗争,而不是使用它。条件逻辑和迭代的实现有更好的方法。
它还有助于使用最好的工具和库:RStudio 是一个非常好的 R 集成开发环境,而 Tidyverse 是一组用于处理数据很棒的库。然而具有讽刺意味的是,这甚至可能是问题的一部分:有了优秀的图形库和 Web 框架,R 突然看起来不太像一个专门的统计工作台,而更像一个通用的工作台了。
许多程序员似乎正在用另一种眼光看待 R——也许是为了分析 COVID 数据?在 2020 年 7 月的报告中,R 从 Tiobe 指数的第 20 位跃升至第 8 位。这是一个巨大的变化。不管是什么原因,如果你用它工作,而不是反对它,那么 R 将是一个更愉快的环境。它是非常有意见的,而且这些意见是统计学家的意见,不是程序员的意见。
Python
Python 在这个榜单上排在第 23 位。对于一个使用如此广泛的编程语言来说,这个排名是非常低的。Python 很容易让人喜欢;我之所以喜欢 Python 仅仅是因为它去掉了花括号。但除此之外,它还有什么值得人们去喜欢呢?我总是讲“不要选择语言,要选择库”,而 Python 就有很棒的库,尤其是在数值计算方面。Pandas、Numpy、Scipy 和 scikit-learn 都是人们喜欢 Python 的好理由。像列表解析(list comprehensions)这样的功能就消除了许多与传统控制结构相关的簿记。Python 既适用于快速而棘手的任务,也适用于大型项目。如果我想用电子表格做点什么,我几乎总是使用 Python。(我吗?数据透视表?)而像 Jupyter 这样的工具可以很方便地记录你的实验过程。
从“大项目”的角度来看,Python 很容易阅读;不会因为嵌套的花括号而令人感到眼花,而且由于包含了解析(comprehension)、映射(map)和其他功能,嵌套的级别也更少。它具有合理的面向对象的特性(尽管公认有些古怪)。我又回到了一些旧的循环脚本,并且经常能够完全不使用循环就编写它们。如果你想把一个连贯的想法放在一条线上,那就是所有可能世界中最好的。《Python 之禅》(The Zen of Python)中有一个重要的口号是“明了优于隐晦”(Explicit is better than implicit);你很少会去猜测别人是什么意思,或者试图破译“发生的”一些意想不到的魔法。Python 获得了最受欢迎的编程语言的称号,最大限度地减少人们的反感。它拥有一系列平衡的特性,这使得它成为小型项目和大型项目的理想选择。
Javascript
对于排名第 16 位的 Javascript,我们该如何看待呢?我是没什么好说的。这是一种以随机和无序的方式发展起来的语言,程序员最终认识到它的强大和高效,这在很大程度上要归于 Doug Crockford 的经典著作《Javascript 语言精粹》(Javascript: The Good Parts)。一种像 Javascript 一样被广泛使用的语言,在最令人畏惧的的语言排行榜上只排在第 16 位,它肯定是做对了什么。但我不一定要喜欢它。
当然还有很多要说的。毫无疑问,VBA 是最不受欢迎的语言。我承认我完全不了解 Objective-C(排名第 2),我从来没有任何理由去使用这门语言。尽管我很早以前就讨厌 Perl,但令我惊讶的是,Perl 是如此不受人们待见(排名第 3),但有些伤口永远不会愈合。看看 Perl 7 发布几年后会发生什么,这将是一件有趣的事情。汇编语言(排名第 4)是一种后天习得的品味(而且不是一门单一的语言)。如果你不学着去爱它,你就会讨厌它。如果你不喜欢它,你真的不应该去使用它。你几乎总是可以避免使用汇编语言,但当你需要直接使用硬件时,你就别无选择。C 和 C++(排名分别为第 5 和第 8)给了你很大的空间,但对于几乎任何项目,它们都能让你尽可能接近硬件,而无需担心使用汇编语言的问题。它们是消失在过去呢,还是会永远与我们同在呢?我猜是后者;需要 C 的性能和普遍性的项目实在太多了。它是现代计算机中几乎所有重要内容的基础。
猜测编程语言以及人们喜欢或讨厌它们的原因是一件很有趣的事。它可能有用,也可能没用。但我所说的不一定有用,你听听就好,别当真。
参考阅读:
https://www.oreilly.com/radar/the-least-liked-programming-languages/
关注我并转发此篇文章,私信我“领取资料”,即可免费获得InfoQ价值4999元迷你书,点击文末「了解更多」,即可移步InfoQ官网,获取最新资讯~
java编程语言(为什么Java、Python会成为程序员最害怕的编程语言?)
