如何选择下一个语言 - 续

前不久写了一个小文 如何选择(第一)下一个语言 给大家提供了一种选择计算机语言的思路。那篇文章更多是从纯技术层面分析的,今天这一篇我来给大家提供另一种思路:生态和未来。

为什么选择“二外”

大部分时候,我们选择第一门语言比较简单/被动,特别是在我们还没有什么技术审美和偏好的时候,无外乎:

  • 工作的公司用什么语言?
  • 学校的课题组用什么语言?
  • 大作业用什么语言?
  • 行业标准用什么语言?

举个例子,工作的公司基本用Python,数据相关的行业生态Python是主流,所以Python就理所当然的成了第一门语言。

可是,当我们进入一个行业一段时间,逐渐了解行业痛点,而且慢慢产生技术审美以后,就会产生选择第二门语言的需求和冲动。可能是因为行业本身就是混合多种语言,比如量化交易行业除了Python,还充满了大量Java和C++程序;也可能以为看到语言本身的限制,比如Python在某些情况下,性能成为瓶颈,需要结合其他语言进行混合编程,如 Cython 或者 Rust 之类;还有可能仅仅因为对其他技术和生态的好奇和审美,比如我觉得 Rust 很好的结合底层和强大的类ML类型系统,我不喜欢Java的啰嗦和虚拟机重量,就会选择 Rust

选择一个什么样的“二外”

不过这里我们从另外的角度看看,选择第二个语言需要考虑那些问题(技术相关请看之前的文章)。

选择语言应该综合如下三个方面:业务、趋势、生态。不应单独考虑,而是综合考虑选择。

夹带私货 - 一个存放系统化交易业务相关库的仓库:Awesome Systematic Trading

业务

你的二外不应该完全脱离你的业务专精。比如你是做数据科学的,目前在使用PythonJava可能是你最好的二外,因为大数据的基础设施目前绝大部分是基于Java的,学习Java可以最大程度的帮助你,而选择 C++ 可能就不是很合适。

在比如,我做系统化交易,Python是常用语言,但是经常会遇到性能瓶颈,需要混合编程,比如使用Cython或者C语言,那么C或者C++是一个不错的选择,因为可以直接服务我的业务痛点,而选择 Java 就不合适。

趋势和成本

计算机语言其实也有市场。选择第二门语言,其实是一种投资,有时间成本。是投资就要考虑回报,回报有长期和短期之分,但是无论如何都应该考虑语言的趋势。

在哪里看语言趋势呢?

  1. TIOBE Index

TIOBE Index

上图列出了排名前五的语言的趋势图,C++,Java 都在走下坡路,Js在震动,Python显著增长。金融领域有个名词叫:趋势交易。就是假设过去看涨的股票,未来还会继续增长;反之亦然。

显然,单看趋势应该选择Python。那如果我已经是一个 Python程序员了,应该如何选择?继续看。

  1. Stack Overflow 调研报告

Stack Overflow 是程序员的问答社区,每年它会做一个开发人员调研,会调研开发人员对不同技术、框架、语言的喜好程度以及他们的流行程度。

比如下面是程序员最爱的语言排行榜:

Most loved languages

Most wanted languages

你看,你可能看到了一些“陌生”的名字:Rust, Clojure, F# 等等。而且Stack Overflow 还会告诉你:Rust已经连续6年是最爱的语言了(小知识 Rust 1.0 版本是2015年发行的)。而 Python 是程序员最想要学的语言,且连续5年都是如此。

这个调研中 RustPython 无疑是胜利者。

TIOBE Index排行中的前10名,Java, C++, Js,就好比蓝筹股,选择学习会不有太大问题,但是未来收益不一定可观;而RustGo这样的受欢迎语言就像小盘股,目前仍然相对小众,但是未来趋势良好,收益可观。

需要注意的是,学习“蓝筹股”语言成本可能较高,且不容易“出头”,因为他们通常已经存在了超过20年,拥有复杂的生态系统和错综复杂的历史包袱,有大量相关从业人员。而学习“小盘股”则可能成本较低,容易出头,你可以参与尚在起步阶段的项目,付出较小的成本,就有可能成为该领域的专家。

当然,与购买小盘股类似,学习这类语言需要承担风险,就是语言渐渐被社区和工业界抛弃了。

生态

生态是另一个重要的考量指标。我举个例子,在web前端,JavaScript 占有统治地位,如果你做前端几乎没太多选择。虽然,从审美的角度看你有一些其他选择:TypeScript, Reason 等等,但是 JS 仍然他们的基础。

刨除上述特殊情况,应该根据判断一个语言的生态和特性,是不是可以应用到你正在从事的业务领域。包括:

  • 语言的特性是不是合适?
  • 是不是已经有一些相关的探索项目?
  • 是不是已经有用很多成熟的相关项目?

写在最后

语言的审美也很重要,你需要找到一门自己写起来很舒服,或者自己觉得设计的很优雅的语言,而不是人云亦云。须知:任何领域深耕都会有所成就。

以上。
泛程序员