在软件世界中,铁打的二进制,流水的语言。从计算机诞生至今,不知诞生了多少门编程语言。译者查了一下 Wikipedia ,好家伙,名单上足足有几百种!但并不是所有的语言都能长期占据 Top 10。今天我们来讨论长期霸榜的三种编程语言:Java、JavaScript 和 C,因为经常有人们说这三种语言已经死了,即使没死也是快要死了。然而事实究竟如何呢?实际上,这几门语言就像题图的胡杨一样,特别是 C 语言,简直就是编程语言界的胡杨:胡杨生而千年不死,死而千年不倒,倒而千年不腐……
最近,我仔细研究了当某种编程语言、工具或趋势被宣布“死亡”时,它到底意味着什么。我认为,从技术行业的不同方面来谈论死亡,似乎既是个人作为开发者的身份和价值观的信号,也是对特定事物现实的准确描述。
为了关注这些争论和对话在实践中是如何发挥作用的,我决定研究一下三种编程语言,每一种语言都被人们描述为已经死亡或即将死亡。我的发现可能并不会让你感到惊讶,但它仍然突出了这一点:即个人或社区对一种语言的不同意见反映了他们作为软件工程师的需求与挑战。
就生存、繁荣或死亡而言,最大的争论之一就是 Java 。之所以如此,原因有很多。最大的一个简单事实就是它被广泛使用。由于有如此多的开发人员出于各种各样的原因使用这种语言,因此在开发者社区发现如此多样化的意见,也就不足为奇了。
另一个原因就是,Java 作为一种编程语言,已经非常成熟。无论它是在衰退还是在消亡,都仍然是一个备受争议的话题,但肯定不能说它正以任何显著的速度出现或增长。
Java 现在是行业主流的一部分。你可能会认为,它有望能支撑下去。但是,当你考虑到这是一个不仅仅包含变革和创新的行业,而是一个依赖于其价值的行业时,你就会开始发现 Java 占据有点奇怪的空间已经有一段时间了。
这几年来,Java 一直正在衰落。如果你去看一下 TIOBE 指数,就会发现,在这十年的中后期,它已经下降了几个百分点。例如,从 2016 年 5 月到 2017 年 5 月,该语言下降了 6%——这表明它正在被其他编程语言所取代。
Java 衰落的另一个原因是 Kotlin 的崛起。尽管长期以来,Java 一直是 Android 开发的定义语言,但近年来,随着 Kotlin 被更广泛地采用,它的地位受到了冲击。正如 Medium 的 2018 年的这篇博文所指出的那样:用 Java 开始一个新的 Android 项目并不一定是个好主意。
Java 的威胁,不仅来自 Kotlin,也来自 Scala。Scala 是另一种基于 JVM(Java 虚拟机)的编程语言。它既支持面向对象编程,也支持函数式编程,与 Java 相比,它具有许多性能优势,并且被广泛用于从机器学习到应用程序开发的各种用例中。
尽管 TIOBE 指数显示,Java 是一门正在衰落的语言,但它仍然稳居榜首。从 2016 年到 2017 年间,这个数字可能会大幅下降,但最近下降速度有所放缓:在 2018 年 10 月到 2019 年 10 月之间,它只下降了 0.92%。
从这个角度来看,那些认为 Java “已死”或“快死了”的观点,实在很奇怪。从事实上来说,Java 是地球上使用最广泛的编程语言。当你考虑到所有其他一切因素时,庞大的社区意味着更多的支持,一个由框架、库和其他工具组成的广泛生态系统(注意,Spring Boot 的增长是对微服务革命的回应)。所以,尽管 Java 的年龄看起来像是反对它的一个标志,但这也是为什么它仍然有很多生命力的原因。
在更基本的层面上,Java 是无处不在的,它被广泛应用于各种应用程序中。只要 Java 开发的应用程序还在使用,那么,我们就可以说,Java 仍然是有生命力的。这也意味着,Java 开发人员的需求还会持续很长一段时间。
Java 是非常活跃的,而且活得很好。但也有一点需要注意的是,归根结底,它并不是一种能够帮助你以创造性或创新的方式来解决问题的语言。它可以让你构建事物并启动项目,但它可以说是一个坚实的基础,你需要在这个基础上积累更多的专业知识,才能成为一名真正成功的工程师。
尽管 Java 可能是世界上使用最广泛的编程语言,但 JavaScript 是另一种无处不在的语言,它引发了各种各样的观点和争论。
其中原因之一是,有些人非常讨厌 JavaScript。人们对 Java 的一致看法是,它很好;但对 JavaScript 来说,情况就不是那么稳定了。
这很大程度上是因为 JavaScript 的发展。在很长一段时间里,它在 Web 开发领域一直处于 PHP 之后的位置,因为它是如此的不稳定,于是开发人员对它的态度有些轻蔑,好像它不是一种“真正的语言”一样。
不过,随着时间的推移,这种情况发生了变化,这在很大程度上要归功于 HTML5 和改进的 ES6 标准,但仍然有许多怪癖是开发人员所不喜欢的。特别是,如果你已习惯 Java 或 C 的话,那么 JavaScript 就不是什么好对付的东西。与那些语言不同,JavaScript 是一种解释性的编程语言,而不是编译的编程语言。
那么,为什么人们会认为 JavaScript 已经死了呢?
人们为什么会认为 JavaScript 已经死了,这里面有很多原因。一方面,模板、开箱即用的 CMS 和电子商务解决方案的兴起,意味着使用 JavaScript 进行“传统”的 Web 开发将变得不那么重要。从本质上讲,这种想法认为,进入的门槛更低,这意味着使用 JavaScript 进行 Web 开发的人将会更少。
另一方面,人们将 WebAssembly 的出现视为敲响了 JavaScript 的丧钟。WebAssembly(简称 Wasm)是“基于堆栈的虚拟机的二进制指令格式”(来自该项目的网站),这意味着代码可以被编译成可由浏览器读取的二进制格式。这意味着你可以将高级语言(如 Rust 等)带到浏览器中。那么,在某种程度上,你可能会认为 WebAssembly 将导致语言的发展,而这些语言在目前看来是非常小众的。
首先,让我们反驳上面的观点:首先,开箱即用的解决方案永远也不会取代 Web 开发人员。有人需要构建这些产品,即使组织选择使用它们,JavaScript 仍然是定制和重塑专用解决方案的语言,它非常有价值。
虽然开始一个 Web 项目并运行的门槛可能越来越低,但它肯定不会扼杀 JavaScript。你甚至可能会争辩道,随着人们开始学习网络的一些基本元素,网络资源也在不断增长。
关于 WebAssembly 的问题是:这对 JavaScript 来说,是一个稍微严重的威胁,但重要的是要记住,WebAssembly 从来就不是为了简单地模仿现有的 JavaScript 用例而设计的。正如这篇有用的文章所解释的那样:
“……它们解决了两个不同的问题:JavaScript 为 Web 和 DOM 添加了基本的交互性;而 WebAssembly 增加的是在 Web 上拥有健壮的图形引擎的能力。WebAssembly 并不能解决与 JavaScript 所面临的相同问题,因为它不了解 DOM。除非解决这一问题,否则它不可能取代 JavaScript。”
WebAssembly 甚至可以重新唤起人们对 JavaScript 的信心。通过解决许多开发人员抱怨的一些问题,这意味着,这门语言可以用于更适合用它来解决的问题。
但除此之外,还要有很多其他的原因,使得 JavaScript 离“死亡”还早。React 越来越受欢迎,Node.js 也是如此,尤其是 Node.js 影响很大,因为它将 JavaScript 的功能从浏览器扩展到了服务器。
结论:JavaScript 究竟是死的还是活的?无论人们多么讨厌 JavaScript,它仍然非常活跃,活得好好的。虽然有如此广泛的工具生态系统,它的使用方式可能也会改变,但这种语言将会留下来,并且有着光明的未来。
C 是最古老的编程语言之一(它即将迎来 50 岁生日)。C 是这样一种语言,帮助我们构建了今天所知的软件世界的基础,包括几乎所有的操作系统。但是,尽管它是技术版图的基本组成部分,但仍然有人抱怨说,C 已经不能胜任这项工作了……
如果你想了解关于人们对 C 的不同意见,你可能比 TechCrunch 上的这篇文章做得更糟。工程师 Jon Evans 解释道,“C 已经不再适合 C 所构建的这个世界了。”
“C 已经变成一个怪物。它为用户提供了太多的火炮,结果是他们搬起石头砸自己的脚。丰富的经验告诉我们,要编写大量没有安全漏洞的 C 代码是非常困难的,几乎是不可能的。”
安全方面的担忧也反映在其他地方,一位作者认为,“没有人在创造新的不安全语言。不能说这是因为 C 和 C++ 是完美的,这不合理;即使是最坚定的拥趸也知道,它们也有很多缺点。人们之所以不去创造新的不安全语言,是因为没有这方面的需求。未来是安全的语言。”
而 Rust 的兴起增加了这些担忧:有些人认为,对于更现代、更安全和更易用的底层系统编程来说,Rust 可能是 C 和 C++ 的替代品。
也许,C 之所以没有死掉的最明显的原因是,它对我们今天所用的如此之多的软件来说,都是不可或缺的。我们谈论的不仅仅是标准的遗留系统;C 语言在操作系统内部,允许我们与软件和机器进行交互。
经常有人反对 C 语言的一个常见理由是,Web 正在接管一切,就好像软件总体上正在提升抽象级别,这使得机器级别的语言几乎是多余的一样。除了那种愚蠢的说法(即网络是建立在什么基础之上)之外,随着物联网和嵌入式计算的快速发展,这只会让 C 语言变得更加重要。
让我们再看看 TIOBE 指数:C 排在第二位,与 2018 年 10 月的位置相同。就像 Java 一样,尽管谣言满天飞,它还是保持着自己的地位。此外,与 Java 不同的是,C 语言的评级实际上在过去一年中有所上升。可以肯定是,这一数字并不大,只有 0.82%,但它可靠的表现表明,它离死亡还很远。
C 活得很滋润呢。当然,它已经很老了,但它隐藏在我们现有软件的基础设施中实在太多了,以至于人们不能简单地将其丢弃。
这并不是说 C 语言没有缺陷。从安全性和可访问性的角度来看,我们可能会看到像 Rust 这样的语言逐渐流行开来,以应对 C 语言带来的一些挑战。
但同样需要考虑的一点是,对于那些希望深入了解编程的人来说,C 语言到底有多重要。即使它不一定具有广泛的用例,但它可以让开发人员和工程师深入了解代码在软件栈的不同级别上是如何工作的,这意味着 C 语言将永远是一种需要关注的语言。
结论:在作出判断之前,听取人们对编程语言的多种观点
从所有这些得出的明显结论是,人们不应该再如此固执己见。但我并不认为这样是正确的做法:人们应该继续坚持己见,保持争论。
势利和排斥是没有立足之地的,但任何人如果对某物的价值有看法的话,他当然有表达出来的自由。它可以帮助其他人以一种不可能通过文档或更典型的学习内容的方式来理解语言。重要的是,我们要以批判的眼光来看待观点:这个人想表达的是什么?他们的背景是什么?他们想干什么?
毕竟,有些事情远比争论什么东西是死还是活重要得多:构建伟大的软件,我们可以为成为其中一员而自豪。
作者介绍:Richard Gall,Packt Hub 的联合编辑。对政治、技术文化以及软件和商业如何相互改变感兴趣。
Copyright© 2013-2019