最不受欢迎/最令人畏惧的编程语言有哪些?(上)

图片[1]-最不受欢迎/最令人畏惧的编程语言有哪些?(上)-唐朝资源网

作者|MikeLoukides

译者|Sambodhi

企划|Tina

这是O’Reilly发布的“TheLeastLikedProgrammingLanguages”(作者:MikeLoukides)中文文章的英文翻译版本。日文原版的翻译得到O’ReillyMedia,Ina.的授权。版权所有,未经书面许可,任何部份不得以任何方式使用、复制、修改。

最不受欢迎/最令人惧怕的编程语言有什么?这种编程语言为何令人惧怕?对它们的评价是否公平?

在StackOverflow的2020年度开发者调查中运行r语言脚本没反映,有一张表格,显示的是“最受欢迎、最令人惧怕和最想要的编程语言”。最受欢迎的和最想要的编程语言,嗯,是有点无趣。倒是哪个最令人惧怕的就有意思多了。正如托尔斯泰(Tolstoy)所说的:“幸福的家庭都是相像的,而不幸的家庭则各有各的不幸。”(Allhappyfamiliesarealike;eachunhappyfamilyisunhappyinitsownway.)

这么运行r语言脚本没反映,这种令人不快的、不受欢迎的编程语言都是什么呢?为何程序员这么惧怕使用这种编程语言呢?假如有机会的话,很难不会加入一些理论,甚至说一些不明智的话。或则为一些由于错误的缘由而不喜欢的编程语言辩护。

更确切地说,StackOverflow统计的是“正使用该语言或技术进行开发,但没有表示有兴趣继续使用的开发人员的比率。”这听起来没有“恐惧”那么可怕;“没有表示有兴趣继续使用一种语言的工具”这一提法的本身就是一种相当模糊的惧怕暗示。我做过的好多事情我都不想再做了,包括编撰形成shell脚本的troof宏。但我们不用担忧这个,对吧?

最不受欢迎的语言列表与最广泛使用的语言列表相像,如RedMonk、Tiobe和O’ReillyLearning上的搜索结果所示。这一点也不奇怪;C++之父BjarneStroustrup曾说,“世界上只有两种语言,一种遭受非议,另一种没人使用。”(Thereareonlytwokindsoflanguages:theonespeoplecomplainaboutandtheonesnobodyuses.)这话说得很有道理,起码在这项调查中是这样。假如你有数百万用户,要做到让好多人不喜欢你并不难。为此,在不受欢迎的语言列表中见到C这样的多年老牌语言和像Java这样的新秀也就不奇怪了。

KevlinHenney和我觉得,最不受欢迎的语言列表也反映了从事小型遗留项目的程序员的意见,而不是短程序。不喜欢某一门编程语言的诱因可能是“道德连坐”:由于不喜欢一个庞大的、过时的、文档最少的代码库,以及每次修补一个Bug还会破坏其他东西的构架风格。为此,在榜单上看见以前被广泛使用但却不再受欢迎的编程语言也就不足为奇了。人们也很容易爱上一门奇特的语言,这些语言对于某个项目来说十分完美,但你再也见不到它了。(就拿我来说,这些语言是Icon。你试试吧,你可能会喜欢这门语言。但它却不在任何人的清单上。)

最令人吃惊的是当一种语言不合时宜的时侯:当它比你预期的显著更多或更少不受欢迎时。这就是我要思索的问题。为此,在进行了初步的讨论过后,下边是一些讨论的结果:

Java

自诞生以来,Java就始终是人们爱恨交加的语言。我出席过USENIX大会,在大会上,JamesGosling第一次提到Java(远在1.0之前),人们离开大会室后都在谈论Java是有多么可怕——那时侯并没有人真正使用过Java语言,由于它还没有发布。在这项调查中,Java排行第9位。鉴于Java的名声,给出这样的排行应当早已很够意思了。

假如这个列表中有一种编程语言与小型项目相关,那就是Java。关于Java有好多令人厌恶的地方:虽然其中好多都与Java成长过程中程序员产生的不良习惯有关,而不是与语言本身有关。假如你发觉自己在滥用设计模式,请后退一步瞧瞧自己在做哪些;把所有东西都弄成设计模式就是一个讯号,表明你并没有理解模式究竟是拿来干哪些的。(假如你须要备考的话,可以参阅《深入浅出设计模式》(HeadFirstDesignPatterns)或“四大金钢”合著的精典书籍《设计模式:可复用面向对象软件的基础》(DesignPatterns:ElementsofReusableObject-OrientedSoftware)。假如你开始编撰FactoryFactoryFactory,请停出来好好走一走。假如你正在编撰,那就无需这样做了。但Java并不会让你如此做的。描述性的名称还是挺好的;长得离谱的名称(以及深得离谱的包层次结构)却并非这么。我总是企图在每行代码上都有一个连贯的看法。你不能在名子只有半局长的时侯如此做。但这不是Java的错,而是Java程序员的一种文化怪癖。

Java是繁琐的,但这不一定就是个问题。正如一位并非Java爱好者的人以前告诉我的那样,类开始时的所有申明实际上都是文档,而文档在小型项目尤为重要。一旦你晓得了数据结构是哪些,你就可以挺好地推测这个类是做哪些的。我发觉Java比大多数其他语言更容易阅读和理解,部份缘由在于它十分明晰——大多数优秀的程序员意识到,她们花在阅读他人的代码上的时间要比编撰自己的代码要多。

Ruby

当我发觉Ruby在榜单上竟然排行第7位时,让我感到震惊。Ruby比Java更不受待见吗?这是为何?我用Ruby编撰过一些有趣的程序;在很大程度上,它是一种“按我的意思去做,而不是按我说的去做”的编程语言,15年前,就是这个承诺让好多程序员爱上了这门语言。

但若果我们把Ruby置于小型系统的环境中给以考虑的话,它还是有意义的。编撰模棱两可的代码并不难,起码对于通常的观察者来说是这样。假如一个函数或方式被打上“猴补丁”而形成一些非标准行为,这么就很容易与之发生冲突,而这种更改却甚少被记录出来。元编程在Rails等框架得到了出众的应用,而且我仍然对Ruby库中的神奇功能方面倍感困惑。这种功能都不利于小型项目。

评注:猴补丁(monkeypatch),是一种很脏的编程方法,用堆砌代码的方式更改进程逻辑。这些方法也叫野鸭双关。猴补丁意思是用类似双关的方法堆砌出和常规进程相左的进程逻辑,这些方法只会在运行时刻生效。猴补丁的出现说明进程本身设计有缺陷,它用在网页和数据库上就是SQL注入功击,UnixShell的flag使用不当也会形成类似的安全问题,例如将文档命名为“-x”形式,命令行就可能将文档名认作一个传递的参数而导致运行异常。

许多年前,我在Ruby或Rails大会上曾看到有人这样说:“没有任何小型项目,Ruby中的所有东西都能降低90%的代码行数。”我仍然觉得LOC是一个可笑的指标(今译:LOC,lengthofthecode,即代码的宽度)。即使你相信Ruby真的降低了90%的代码行(总之我不信),一个大数量的10%依然是一个很大的数字,非常是假如你有责任消化这种代码,包括背后发生的事情。Ruby很有趣,我如今还用它来编撰快速脚本(尽管我基本上早已改用Python来做了),但它会是小型项目的首选语言吗?那可能会让我担心地走掉。

R

R在“最令人惧怕的名单”中排在第10名。我觉得这是由于一种误读。R既是也不是一种通用编程语言。一些统计学家告诉我,“你们程序员不明白,R是一个统计工作台,并不是一种编程语言。它不是Python的哪些奇特版本。”我曾多次用过R,但当我读完VinceBuffalo的《BioinformaticsDataSkills》(今译:暂无英文版)中有关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的好理由。像列表解析(listcomprehensions)这样的功能就清除了许多与传统控制结构相关的簿记。Python既适用于快速而棘手的任务,也适用于小型项目。假如我想用电子表格做点哪些,我几乎总是使用Python。(我吗?数据透视表?)而像Jupyter这样的工具可以很便捷地记录你的实验过程。

从“大项目”的角度来看,Python很容易阅读;不会由于嵌套的花括弧而令人倍感眼花,但是因为包含了解析(comprehension)、映射(map)和其他功能,嵌套的级别也更少。它具有合理的面向对象的特点(虽然公认有些怪异)。我又回到了一些旧的循环脚本,而且常常才能完全不使用循环就编撰它们。假如你想把一个连贯的看法放到一条线上,那就是所有可能世界中最好的。《Python之禅》(TheZenofPython)中有一个重要的标语是“明了优于委婉”(Explicitisbetterthanimplicit);你甚少会去推测他人是哪些意思,或则企图破译“发生的”一些意想不到的魔法。Python获得了最受欢迎的编程语言的称号,最大限度地降低人们的痛恨。它拥有一系列平衡的特点,这促使它成为大型项目和小型项目的理想选择。

JavaScript

对于排行第16位的JavaScript,我们该怎么看待呢?我是没哪些好说的。这是一种以随机和无序的方法发展上去的语言,程序员最终认识到它的强悍和高效,这在很大程度上要归于DougCrockford的精典专著《JavaScript语言精萃》(JavaScript:TheGoodParts)。一种像JavaScript一样被广泛使用的语言,在最令人惧怕的的语言排名榜上只排在第16位,它肯定是做对了哪些。但我不一定要喜欢它。

其实还有好多要说的。毫无疑惑,VBA是最不受欢迎的语言。我承认我完全不了解Objective-C(排行第2),我从来没有任何理由去使用这门语言。虽然我很早曾经就厌恶Perl,但令我震惊的是,Perl是这么不受人们待见(排行第3),但有些创口永远不会结疤。瞧瞧Perl7发布几年后会发生哪些,这将是一件有趣的事情。汇编语言(排行第4)是一种明天习得的品位(但是不是一门单一的语言)。假如你不学着去爱它,你还会看不起它。假如你不喜欢它,你真的不应当去使用它。你几乎总是可以防止使用汇编语言,但当你须要直接使用硬件时,你就别无选择。C和C++(排行分别为第5和第8)给了你很大的空间,但对于几乎任何项目,它们都能让你尽可能接近硬件,而无需担忧使用汇编语言的问题。它们是消失在过去呢,还是会永远与我们同在呢?我猜是前者;须要C的性能和普遍性的项目实在太多了。它是现代计算机中几乎所有重要内容的基础。

猜想编程语言以及人们喜欢或厌恶它们的缘由是一件很有趣的事。它可能有用,也可能没用。但我所说的不一定有用,你听听就好,别当真。

参考阅读:

明日荐文

点击下方图片即可阅读

绩效不及格被劝退,50岁IT技术主管删掉公司全部储存信息后被判坐牢

图片[2]-最不受欢迎/最令人畏惧的编程语言有哪些?(上)-唐朝资源网

你也「在看」吗?

© 版权声明
THE END
喜欢就支持一下吧
点赞185 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片