如果我们把人类的现代文明看作一辆汽车,那么软件开发行业就像汽车的发动机,编程语言就像发动机的燃料。那么问题来了,你应该学哪种编程语言?
学习一门新的编程语言在时间、精力和脑力上的投入都非常巨大,但它可以提高你的软件开发技能,并给你的职业生涯带来提升,正如我在另一篇博客中所写的:
博客网址:https://medium.com/@md.kamaruzzaman/5-reasons-to-learn-a-new-programming-language-in-2020-bfc9a4b9a763
通常,你应该选择一种能有助于你事业发展的编程语言。另外,你还可以学习一门受欢迎程度正在上升的语言。
我对主流编程语言非常尊重。但在这里,我列出现代编程语言,这些语言可以提高你的工作效率,使你成为一个更好的开发人员。此外,我还将涉及更广泛的领域:系统编程,应用程序开发,网络开发,科学计算。
「现代编程语言」这个词是模棱两可的。许多人认为像 Python、JavaScript 这样的语言是现代编程语言。但同时,他们认为 Java 是一种古老的编程语言。事实上,它们都出现在同一时间:1995 年。
大多数主流的编程语言是在上个世纪发展起来的,主要是在 20 世纪 70 年代(例如 C)、20 世纪 80 年代(例如 C++)、20 世纪 90 年代(例如 Java、Python、JavaScript)。这些语言不是为了利用现代软件开发生态系统而设计的。尽管其中的许多语言中有改进特性,比如并发性和自我调整,但是它们也提供了向后兼容性,并且不能丢弃旧的、过时的特性。
在这一点上,Python 做的很好,它在 Python 2 和 Python 3 之间做了一个明确的划分。这些语言通常提供 10 种方法来做同样的事情,而不关心开发人员用起来是否方便。根据 StackOverflow developer 的调查,大多数主流的旧编程语言都在「最可怕的语言」类别中占据了榜首:
我将以第一款 iPhone 发布的时候,也就是 2007 年 6 月 29 日作为新旧编程语言之间的界限时间点。在 iPhone 发布之后,一切都发生了变化。在这个列表中,我主要考虑 2007 年后的编程语言。
首先,开发现代编程语言是为了充分利用现代计算机硬件(多核 CPU、GPU、TPU)、移动设备、大数据集、快速网络、容器和云。此外,大多数现代编程语言使用起来都更容易,主要体现在:
- 简洁的代码
- 内置的并发支持
- 空指针安全
- 类型推断
- 更简单的特性集
- 低认知负荷
- 混合所有编程范例的优秀特性
其次,列表中的许多编程语言都具有破坏性,将永远改变软件行业。其中一些已经成为主流编程语言,而另一些则等待取得突破。至少作为第二种编程语言来学习这些语言是明智的。
在之前的一篇博文「20 个 2020 年软件发展趋势预测」中,我预测了 2020 年许多现代编程语言的突破:
文章网址:https://towardsdatascience.com/20-predictions-about-software-development-trends-in-2020-afb8b110d9a0
Rust
系统编程语言是由 C、C++等主导的,尽管它们可以完全控制程序和硬件,但它们缺乏内存安全性。即使它们支持并发性,但是在比你保证并发安全性的情况下,使用 C/C++编写并发程序是很有挑战性的。其他流行的编程语言是可解释性的语言,如 Java、Python、Haskell,它们提供安全性,但需要很多的运行时间或虚拟机。由于运行时很大,像 Java 这样的语言不适合系统编程。
有很多人尝试过将 C/C++的特性和 Haskell,Java 的安全性结合起来,但目前看来,Rust 是第一个实现这一目的的产品级编程语言。
Graydon Hoare 最早将 Rust 作为一个副产品开发出来。他受到了研究性的编程语言 Cyclone 的启发。Rust 是开源的,Mozilla 与许多其他公司和社区一起进行语言开发。Rust 于 2015 年首次发布,很快就引起了社会各界的关注。在以前的文章中,我深入研究了 Rust,并论证了为什么在大数据域中使用 Rust 来代替 C++、Java 是一个更好的选择:
文章网址:https://towardsdatascience.com/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842
主要特性:
- 通过所有权和借用的概念提供内存安全性和并发安全性。
- 内存安全和并发安全的编译时间保证,即如果一个程序代码编译了,那么它既是内存安全的,也没有数据竞争。这是 Rust 最吸引人的特点。
- 它还提供了 ML,Haskell 的表示方式。Rust 具有不变的数据结构和函数式编程特性,提供函数式并发和数据并发。
- Rust 的速度非常快。
- 由于没有运行时,Rust 提供了对现代硬件(TPU、GPU、多核 CPU)的完全控制。
- Rust 有 LLVM 支持。
受欢迎程度:
自 2015 年首次亮相以来,Rust 一直被开发者所喜爱,并在 StackOverflow 开发者调查中连续四年(2016、2017、2018、2019)被评为很受欢迎的语言:
根据 GitHub Octoverse 的说法,Rust 是仅次于 Dart 的增长第二快的语言:
流行编程语言网站 PyPl 也将 Rust 排在第 18 位,并呈上升趋势:
对比它提供的功能集,难怪像微软、亚马逊、谷歌这样的科技巨头最终宣布将 Rust 作为一种长期的系统编程语言。
在过去的 5 年里,Rust 的吸引力每年都在增加:
主要用在:
- 系统编程
- 无服务器计算
- 业务应用程序
主要竞争语言:
- C
- C++
- Go
- Swift
Go
谷歌是比较大的网络公司之一。本世纪初,Google 面临着两个扩展问题:开发扩展和应用程序扩展。开发扩展意味着他们不能通过增加开发人员来增加更多的功能,应用程序扩展意味着他们无法轻松开发一个可以扩展到「Google」级机器集群的应用程序。2007 年左右,谷歌开始创建一种新的「实用」编程语言,这种语言可以解决这两个问题。在 Rob Pike(UTF-8)和 Ken Thompson(UNIX 操作系统)中,两个世界上最有才华的软件工程师创建了一种新的语言。
2012 年,谷歌发布了 Go 编程语言的第一个官方版本。Go 是一种系统编程语言,但不同于 Rust。它也有一个运行时和垃圾收集器(几兆字节),但与 Java 或 Python 不同的是,这个运行时包含了生成的代码。最后,Go 生成一个本机二进制代码,可以在没有附加依赖项或运行时的情况下在计算机中运行。
主要特性:
- Go 具有一流的并发支持。它不通过线程和锁提供「共享内存」并发性,因为编程难度要大得多。相反,它提供了基于 CSP 的消息传递并发性。Go 使用「Goroutine」(轻量级绿色线程)和「Channel」进行消息传递。
- Go 最具杀伤力的特点是简单,它是最简单的系统编程语言,一个萌新软件开发人员可以在几天内编写出高效的代码。一些比较大的云原生项目(Kubernetes,Docker)是用 Go 编写的。
- GO 也有嵌入式垃圾收集器,这意味着开发人员不需要担心像 C/C++那样的内存管理问题。
- 谷歌在 Go 上投入了大量资金,因此,Go 拥有大量的工具支持。对于新的 Go 开发人员来说,有一个庞大的工具生态系统。
- 通常,开发人员花费 20% 的时间编写新代码,80% 的时间维护现有代码。由于其简单性,Go 在语言维护领域表现出色。如今,Go 在商业应用程序中得到了广泛的应用。
受欢迎程度:
自 Go 首次问世以来,软件开发社区已经欣然接受了它。在 2009 年(首次亮相)和 2018 年,Go 通过 TIOBE 指数进入编程语言名人堂排行榜。难怪 Go 的成功为 Rust 这样的新一代编程语言铺平了道路。
Go 已经是一种主流编程语言。最近,Go 团队宣布了「Go 2」的计划,目的只是让语言更加稳固。
在几乎所有流行编程语言比较网站,Go 的排名很高,超过了许多现有的语言。以下是 2019 年 12 月的 TIOBE 指数评级,Go 排名第 15 位:
根据 Stackoverflow 的调查,Go 是十大很受欢迎的编程语言之一:
根据 GitHub Octoverse 的统计,Go 也是增长最快的十大语言之一:
谷歌还显示,过去五年里,Go 的吸引力不断增强:
主要用例:
- 系统编程
- 无服务器计算
- 业务应用程序
- 云本机开发
主要竞争语言:
- C
- C++
- Rust
- Python
- Java
Kotlin
Java 是企业软件开发中无可争议的王者。近年来,Java 已经受到了很多批评:冗长,需要大量的样板编码,复杂,容易发生意外。然而,关于 Java 虚拟机(JVM)的争论很少。JVM 是软件工程领域的杰作,它提供了一个经过时间考验的运行时。在上一篇文章中,我详细讨论了 JVM 的优点:
文章网址:https://towardsdatascience.com/programming-language-that-rules-the-data-intensive-big-data-fast-data-frameworks-6cd7d5f754b0
多年来,像 Scala 这样的 JVM 语言试图回答 Java 的缺点,并希望成为更好的 Java,但是失败了。最后,Kotlin 出现了,寻找更好 Java 的旅程似乎已经结束。Jet Brains(流行 IDE IntelliJ 背后的公司)开发了 Kotlin,它运行在 JVM 上,解决了 Java 的缺点,并提供了许多现代特性。与 Scala 不同,Kotlin 比 Java 简单得多,并在 JVM 中提供 Go 或 Python 式的开发效率。
谷歌宣布 Kotlin 是开发 Android 的一流语言,并提高了 Kotlin 在社区的接受度。同样流行的 Java 企业框架 Spring 也从 2017 年开始在 Spring 生态系统中支持 Kotlin。
主要特性:
- Kotlin 的 USP 是它的语言设计。我总是将 Kotlin 看作 JVM 上的 Go/Python,因为它的代码简洁明了。因此,Kotlin 的生产效率很高。
- 与许多其他现代语言一样,Kotlin 提供了空指针安全、类型推断等功能。
- 因为 Kotlin 在 JVM 中运行,因此你可以使用现存的 Java 库庞大的生态系统。
- Kotlin 是开发 Android 应用程序的一流语言,已经超越 Java 成为开发 Android 应用程序的第一语言。
- Kotlin 有 JetBrains 和开源的支持。所以,Kotlin 有很好的工具支持。
- 有两个有趣的项目:Kotlin Native(将 Kotlin 编译为本机代码)和 Kotlin.js(Kotlin 转换为 JavaScript)。如果他们成功了,那么 Kotlin 可以在 JVM 之外使用。
- Kotlin 还提供了一种编写 DSL(领域特定语言)的简单方法。
受欢迎程度:
自 2015 年首次发布以来,Kotlin 的受欢迎程度正在飙升。根据 Stack Overflow,Kotlin 是 2019 年第四受欢迎的编程语言:
Kotlin 也是增长比较快的编程语言之一,排名第四:
热门编程语言排名网站 PyPl 将 Kotlin 列为第 12 位很受欢迎的编程语言,并有很高的上升趋势:
自从谷歌宣布 Kotlin 是开发 Android 应用程序的一流语言以来,Kotlin 的受欢迎程度快速上升,如下图所示:
主要用例:
- 企业应用程序
- Android应用程序开发
主要竞争语言:
- Java
- Scala
- Python
- Go
TypeScript
JavaScript 是一种优秀的语言,但 2015 年以前的 JavaScript 有许多缺点。甚至著名的软件工程师 Douglas Crockford 也写过一本书《JavaScript: The Good Parts》,并暗示 JavaScript 有很多不好的部分。由于没有模块化和「回调地狱」,开发人员不喜欢维护特别大的 JavaScript 项目。
Google 甚至开发了一个平台,将 Java 代码转换为 JavaScript 代码(GWT)。许多公司或个人试图开发更好的 JavaScript,例如 CoffeeScript、Flow、ClojureScript,但微软的 TypeScript 无疑是其中最突出的。由 Delphi 的创建者 Anders Hejlsberg 领导的一组微软工程师创建了 TypeScript,把它作为 JavaScript 的静态类型的模块化超集。
在编译期间,TypeScript 被编译为 JavaScript。2014 年首次发布以来,TypeScript 迅速引起社会关注。当时谷歌还计划开发一个静态类型的 JavaScript 超集。谷歌对 TypeScript 印象深刻,他们没有开发新的语言,而是与微软合作改进 TypeScript。
Google 使用 TypeScript 作为其 SPA 框架 Angular2+ 的主要编程语言。另外,流行的 SPA 框架 React 提供了对 TypeScript 的支持。另一个流行的 JavaScript 框架 Vue.js 声明他们将使用 TypeScript 开发新的 Vue.js 3:
此外,node.js 的创建者 Ryan Dahl 决定使用 TypeScript 开发一个安全的 node.js 替代品 Deno。
主要特性:
- 与列表中的 Go 或 Kotlin 一样,TypeScript 的主要特性是语言设计。凭借其清晰干净的代码,它是比较优雅的编程语言之一。就开发人员的生产力而言,它与 JVM 上的 Kotlin 或 Go/Python 不相上下。TypeScript 是最高效的 JavaScript 超集。
- TypeScript 是 JavaScript 的强类型超集。它特别适合大型项目,并被正确地称为「大规模的 JavaScript」。
- 「三大」单页应用程序框架(Angular、React、Vue.js)为 TypeScript 提供了极好的支持。在 Angular 中,TypeScript 是首选的编程语言。在 React 和 Vue.js 中,TypeScript 越来越流行。
- 两个比较大的科技巨头:微软和谷歌正在合作开发 TypeScript,它得到了一个充满活力的开源社区的支持。因此,对 TypeScript 的工具支持是很好的支持之一。
- 由于 TypeScript 是 JavaScript 的超集,它可以在 JavaScript 所有的地方运行。TypeScript 可以在浏览器、服务器、移动设备、物联网设备和云上运行。
受欢迎程度:
开发人员喜欢 TypeScript 优雅的语言设计。在 Stackoverflow 开发者调查中,它在很受欢迎的语言类别中与 Python 并列第二:
TypeScript 是增长很快的 Web 编程语言之一,在 GitHub Octoverse 上排名第五:
根据 GitHub 贡献,TypeScript 也进入了前 10 名(排名第 7):
TypeScript 在过去的一年中吸引了越来越多的眼球,这反映在 Google 趋势上:
主要用例:
- Web 用户界面开发
- 服务器端开发
主要竞争语言:
- JavaScript
- Dart
Swift
Steve Jobs 拒绝在 iOS 中支持 Java(和 JVM),因为他认为 Java 将不再是一种主要的编程语言。我们现在知道 Steve Jobs 对 Java 的评价是错误的,但是 iOS 仍然不支持 Java。相反,苹果选择 Objective-C 作为 iOS 中的主流编程语言。Objective-C 是一门很难掌握的语言。而且,它具备现代编程语言所要求的高开发效率。
在苹果,Chris Lattner 和其他人开发了 Swift ,它是一种多范式、通用、可编译的编程语言,为 Objective-C 提供了一种替代方案。Swift 的第一个稳定版本于 2014 年发布。Swift 还支持 LLVM 编译器工具链(也由 Chris Lattner 开发)。Swift 与 Objective-C 代码库具有良好的互操作性,并且已经成为 iOS 应用程序开发的主要编程语言。
主要特性:
- Swift 的一个致命优点是它的语言设计。它使用更简单、简洁和干净的语法,为 Objective-C 提供了一个更高效的替代方案。
- Swift 还提供了现代程序语言的特性:null 安全性。
- Swift 是一种编译语言,它和 C++一样快。
- Swift 支持 LLVM 编译器工具链。因此,我们可以在服务器端甚至浏览器编程(使用 WebAssembly)中使用 Swift。
- Swift 提供自动参考计数(ARC)支持,这样可以限制内存管理不当。
受欢迎程度:
和许多其他现代语言一样,开发人员也非常喜欢 Swift。根据 StackOverflow 的调查,Swift 在很受欢迎的编程语言中排名第六:
在 TIOBE 的编程语言排行榜中,Swift 在 2019 年已升至第 10 位。考虑到这门语言才 5 岁,这是一个相当了不起的成就:
Google trends 还显示,Swift 的受欢迎程度先急剧上升,随后在最后几次饱和中趋势略有下降:
主要用例:
- iOS 应用程序开发
- 系统编程
- 客户端开发(通过 WebAssembly)
主要竞争语言:
- Objective-C
- Rust
- Go
Dart
Dart 也是 Google 发布的编程语言。Google 是网络和安卓领域的关键玩家,在网络和应用程序开发领域开发自己的编程语言也就不足为奇了。
Dart 是一种支持强类型和面向对象编程的通用编程语言。Dart 也可以被转换成 JavaScript,并且可以运行在 JavaScript 运行着的任何地方(例如 Web、移动、服务器)。
主要特性:
- 与 Go 一样,Dart 也非常注重开发人员的工作效率。Dart 由于其干净、简单、简洁的语法,极大地提高了生产效率,深受开发人员的喜爱。
- Dart 还提供强大的类和面向对象的编程。
- Dart 是少数支持 JIT 编译和 AOT 编译的语言之一。因此,Dart 可以以 JavaScript 运行时(V8 引擎)为目标,Dart 可以编译成快速的本机代码(AOT 编译)。
- 跨平台的原生应用开发平台 Flutter 选择 Dart 作为编程语言来开发 iOS 和 Android 应用。从那以后,Dart 变得越来越流行。
- 与 Go 一样,Dart 也有出色的工具支持和 Flutter 巨大的生态系统。Flutter 的日益流行只会增加 Dart 的流行程度。
受欢迎程度:
根据 Github Octoverse,Dart 是 2019 年增长很快的编程语言,去年它的受欢迎程度翻了五倍:
根据 TIOBE,Dart 居于第 23 位,仅仅 4 年时间,它已经超越了其它很多编程语言:
它也是 StackOverflow 开发者调查中排名第 12 位的很受欢迎的编程语言之一:
除了 Flutter,Dart 的受欢迎程度在过去两年也经历了巨大的改善,这一点在 Google 中很明显:
主要用例:
- 应用程序开发
- 前端开发
主要竞争语言:
- JavaScript
- TypeScript
Julia
前面列出的编程语言都是由大公司开发的,但 Julia 不是。在技术计算中,通常使用 Python、Matlab 等动态语言。这些语言提供易于使用的语法,但不适合大规模的技术计算,他们使用 C/C++库来处理 CPU 密集型任务。由于代码是在两种语言之间转换的,因此总会有一些性能损失。
为了解决这个问题,麻省理工学院的一组研究人员计划从头开始创建一种新的语言,它利用了现代硬件的优势,并结合了其他语言的最佳部分。他们在麻省理工学院创新实验室完成这项工作,还发表了以下宣言:
Julia 是一种动态的高级编程语言,为并发、并行和分布式计算提供一流的支持。Julia 的第一个稳定版本于 2018 年发布,很快就得到了社区和业界的青睐。Julia 可以应用于科学计算、人工智能等许多领域,最终解决「两种语言」的问题。
特性:
- 和 Rust 一样,Julia 的主要特点是语言的设计。它试图在不牺牲性能的情况下,结合现有的编程语言在高性能和科学计算中的一些最佳特性。到目前为止,它做得很好。
- Julia 是一种可选类型的动态编程语言。因此,Julia 很容易学习,而且效率很高。
- 它以多分派编程范式为核心。
- 它内置了对并发、并行和分布式计算的支持。
- 它还为 I/O 密集型任务提供异步 I/O。
- 它速度非常快,可以用于需要数百万线程的科学计算。
受欢迎程度:
在许多领域,Julia 主要与 Python 竞争。由于 Python 是很流行的编程语言之一,Julia 成为主流还需要几年时间。
Julia 相对年轻(只有一岁),但在 TIOBE index 中仍排在第 43 位:
Google Trends 也显示出过去的时间里,程序员对 Julia 的稳定兴趣。
但考虑到 Julia 背后的功能集和公司数量,如 NSF、DARPA、NASA、Intel,Julia 何时取得突破只是个时间问题。
主要用例:
- 科学计算
- 高性能计算
- 数据科学
- 可视化
主要竞争语言:
- Python
- Matlab