选择什么编程语言与框架一直都是容易引起争论的话题。

因为编程语言与框架数量众多,每一种热门语言与框架都有各自的特点与一众忠实的追随者。

如果一不小心触及到别人的饭碗,只要喊一句万能的 “PHP是世界上最好的语言!” 就能全身而退。

如何选择编程语言

先从 TIOBE 排名PYPL 上看看,目前编程语言的排名是如何的。

选择排名靠前的编程语言通常是一个好选择。因为排名越靠前意味着该语言使用者越多,有更庞大的社区和第三方开发库支持,你可以更容易地找到解决方案,无需重新开发轮子。

但这次我们不单纯靠排名来选择编程语言,而是先对语言进行一个分类,然后在每个分类中选择一个编程语言。

“那不是要学很多门语言?” “是的。”

因为目前没有一种编程语言可以满足所有的需求,我们要在每个领域中选择一个最热门且最有发展潜力的语言作为我们的主力。

语言分类

首先我们可以将语言分类为易读和高性能两类。

Readability vs Efficiency

如上图所示,目前没有可以同时满足超高性能和易用性的编程语言,所以当你选择易用性通常会牺牲性能,反之亦然。

  • 舒适易用:Python, Javascript(Typescript)/Node.js, Ruby…

  • 兼顾性能与开发效率:Java, Go, C#, Kotlin, Dart…

  • 高性能:C/C++, Rust…

当然也有一些语言试图寻找性能与易用性的平衡,如:Kotlin、Go。

或通过多语言组合实现高性能与易用性,如:Python + C/C++,Typescript + Rust。

Concurrency

自从 CPU 性能不可提升,多核处理成为了评价一个语言的一种指标。

大部分老牌语言诞生初期是不存在多核处理的,这个时间点要追溯到 2005 年前后,但这不影响这些主流语言实现多核处理。

多进程、多线程的功能使得利用多核处理变得并不困难,但是线程之间的通信、数据同步等问题也随之出现。而在这方便专为多核处理诞生的 Go 语言就比较擅长了。

  • 多核处理麻烦,且效果差:Node.js, Python, Ruby…

  • 多核处理麻烦,但效果不错:C/C++, Java, C#…

  • 多核处理简单,且效果好:Go…

最后,通过应用领域去划分语言。这种分类方式比较难以界定,因为目前主流语言都具有一定的通用性,那个语言能做的事情这个语言也能做。

而且容易牵扯出很多特定领域才会出现的语言,但这类语言我们除非有需求,否则不做考虑。

  • 网页前端:JavaScript/Typescript…

  • 服务端:Java, Go, Python, Node.js, Rust…

  • 移动端:JavaScript, Swift(OC), Kotlin(Java), Dart…

  • 人工智能:Python…

  • 云计算:Go, C/C++, Rust, Java…

  • 区块链:Go, Javascript…

  • 桌面端:JavaScript, C#, Dart…

  • 终端工具:Python, Node.js, Go, Rust…

小结

综上所述,我们最后要选择的语言应该是该分类中最好的,且通过几门语言的选择涵盖所有的领域。

选择一门拥有极致性能,极小内存占用的语言,且能保证一定开发效率的语言:Rust

选择一门网页前端语言,且能满足可扩展、可维护性:Typescript

选择一门高并发、易维护,且易于搭建微服务的语言:Go

选择一门人工智能语言,且可以自建服务:Python

选择一门跨平台应用搭建语言:Dart

选择一门基于 JVM 的语言:Kotlin

框架推荐

框架的概念很宽泛,这里框架主要指 Web 框架或 App 框架。

Rust 目前比较热门的框架有 Rocket 和 Actix,如果对性能有要求,可以考虑使用 Actix。

Typescript 的前端框架有 React、Angular、Vue 等,如果使用 Node.js 则考虑使用 Nest.js。

Go 比较热门的框架有 Gin、 Echo、Beego 等,如果比较能接受 Go 语言的思想选择 Gin。

Python 的框架都比较有名,就算不会 Python 也听过 Django 和 Flask 的大名,但如果希望快速搭建 API 服务选择 FastAPI。

Dart 选择 Flutter 做移动端和其他平台的 App 开发框架。

Kotlin 因为兼容 Java 选择 Spring Boot。