> 我应该学习哪种编程语言?
![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/how-to-choose-a-programming-language/1.jpg)
如果你看到这篇文章,很有可能,在你的职业生涯中,你至少有一次在思考应该选择哪种语言。或者你甚至在编程生涯开始之前就已经考虑了。很高兴你能看到这篇文章。
我本人经常地(甚至可能过多地)去思考这个问题。不仅如此,我还会在实践中尝试许多不同的技术,得到或好或坏的结果。
在过去的几年,我曾经使用过以下语言:
* Bash
* IBM RPG
* Java
* Scala
* C#
* C++
* Ruby
* JavaScript, CoffeeScript
* Clojure
* Objective-C
* Elixir
* GO
我说的使用并不是只读过一些教程,而是至少在一个生产项目上工作过一整年。
如果算上一些练习程序、学生项目、训练营和研讨会,我使用过更多:
* Pascal
* PHP
* Swift
* Kotlin
* Groovy
* Python
* TypeScript
* Crystal
* OCaml
* MATLAB
* Visual Basic
* Solidity
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/2.jpg)
尽管如此,我相信,针对如何选择一门新的编程语言,以及需要关注的重要的内容,我可以提出一些我自己的观点。
此外,根据 [CliftonStrengths assessment](https://www.gallupstrengthscenter.com/home/en-us/strengthsfinder) ,我非常擅长分析,所以我觉得自己在这方面更加胜任:
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/3.png)
我可以给你一个检查清单,包含一系列问题,你可以针对你想开始学习的任何新技术进行自测。
## 采用
- 什么样的公司使用它?
- 它究竟在哪些领域被使用?
- 它的一般用途是什么?
你必须考虑特定的技术应用于哪个领域。也许这主要是自动化的(例如 C++ )、 ML / AI ( Python )、底层的和服务器相关的东西( Go )、web 应用程序( Ruby )、企业项目( Java / c# ) 等等。
你需要考虑你的兴趣是什么,你是否想要在创业公司、小型软件公司、大公司、金融技术公司或政府机构工作,并在那里找到匹配的技术。
例如,如果你看到 .NET 主要用于企业领域,但你更喜欢小型公司,那么你可能会考虑使用 Ruby。
## 社区
### 开发者
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/4.jpg)
你是否曾经想过有多少特定技术的开发人员?是否有很多人使用 Rust 或 F# ?让我解释一下 —— 从别人那里得到支持。
在我看来,很多程序员在遇到任何问题时,通常都会使用 StackOverflow 或者在各种博客上寻找答案。如果某项特定技术的开发者寥寥无几,这一切都不太可能实现。他们可能会有不同的问题,而且不会有很多人在网上分享。
程序员越多,遇到过的问题就越多,在互联网上发布的解决方案也越多。如果你正在使用一些众所周知的语言,你可能还没有经历过这样的问题。尝试一些新奇的技术,你会立即开始与你不理解的错误作斗争,你自己解决不了,也没有人能帮助你。
### 招聘
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/5.png)
我知道开发人员很少考虑这方面的问题,尤其是当你是初学者时,但是当你考虑你的产品和公司时,你必须记住这一点。
有时候,你可能是 CTO、技术或团队负责人,你的职责是为项目挑选工具、技术和招募新人。很明显,当你选择一些花哨的语言(如 Elm)时,你可能很难找到有经验的人加入你。
当你在找一份新工作时,情况可能是类似的,你唯一拥有的技能是一些未知的、不那么流行的技术。你可能会发现重新安排工作机会并找到一份令你满意的工作是一个很大的问题。
## 支持者
### 创造者
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/6.jpg)
- 到底谁是创造者?
- 创造者如何对社区做出承诺?
- 创造者是否固执己见?
这也是技术的一个重要方面。它的创造者可以积极参与社区,但也可以退出社区。
以 Elixir 为例。Jose Valim 是 Elixir 语言的联合创始人和创建者,他确实参与了这种语言的开发。他在 GitHub 上尽可能多地回复,在 Elixir 论坛上给出反馈,甚至参加小型聚会和当地会议,鼓励人们使用 Elixir。
回想 2012 年,当我在 Scala 编程时, Scala 语言设计师马丁.奥德斯基( Martin Odersky )很少出现在一些小型社区,更不用说程序员会议了。当然,他有时也会做一些演讲,他并没有完全脱离开发人员,但是他和所有使用 Scala 的程序员之间似乎有很大的距离。幸运的是,根据我从同事那里了解到的情况,现在已经发生了变化,情况好多了。
当你查看 Ruby on Rails 时,你将看到一个非常固执但非常有魅力的领导者。他喜欢表达主观的观点。
### 公司
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/7.jpg)
- 支持该语言的主要公司有哪些?
- 语言将很快“消亡”的变化是什么?
- 在语言上投入了多少钱?
- 是否在持续迭代更新?
有时候,考虑哪些公司支持某种特定的语言是很重要的。是倡导 GO 的谷歌吗?或者是支持 React 的 Facebook 吗? Rust 由 Mozilla 支持, C# 来自微软, Swift 由苹果开发。另一方面, Clojure 和 Python 被认为是社区驱动的,这可能带来各自的优缺点。
考虑为支持语言扩展提供了多少资金是很重要的。如果你确信 Oracle 将年复一年地发展 Java ,那么你就不必担心你的未来、市场需求和工作机会。如果你看到 Angular 将每 6 个月发布一次,你就会觉得很安全,因为新特性将会频繁出现,你也可以安排必要的升级。
这就是为什么你也要考虑这个方面,这在一开始并不明显,需要一些研究。
## 库
- 有多少库可以使用?
- 不同的服务提供了哪些集成?
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/8.jpg)
举个例子,如果考虑 Ruby 或 JavaScript ,几乎可以 100%确定每个工具都与这些语言有一些集成。你不必担心围绕一些 API 编写自己的工具或封装器。 你会发现所有的库,甚至是官方库都可以与 Twitter、Twillio、GitHub、Dropbox 等集成。但是,如果你选择 Elixir, 那么你可能很难找到维护良好的社区库,更不用说官方库了。现在的情况比 4 年前要好,但有时这仍然是个问题,需要得到明确的验证。
因此,如果你计划构建一个严重依赖外部 API 并结合多种集成的工具,那么你可能需要考虑一些不那么生僻的技术来实现这一点。请注意,你的目标是构建产品并交付业务特性,而不是开发其他库或者集成 (当然,除非这是你的实际业务)。
## 薪水
- 这种语言的程序员薪水高吗?
- 这项技术的市场需求如何?
- 开发人员之间竞争激烈吗?
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/9.png)
### 目前情况如何?
Cobol 现在是一种报酬丰厚的技术,但你考虑过具体原因吗?是因为它很有前途,非常受欢迎,被广泛采用,还是因为它很老,但是很多系统都依赖它,没有专家?
你需要考虑,使用某种特定的语言会被支付多少薪水。你可能非常喜欢 Elm,但经过一些研究,希望不要太深入地研究它,会发现没有人愿意为它支付很多钱。
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/10.png)
### 趋势
有时,这种语言的报酬还不高,但考虑到市场需求,薪酬上涨还是很有希望的。以 Rust 为例。
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/11.png)
如果你坚信某门语言在未来会快速发展,你可以马上投入你的时间,一旦它流行起来,你就已经是专家了。这当然会带来风险,因为这项技术可能不会被很好地采用,但想象一下如果不这样做会发生什么。你将拥有别人没有的经验,你将能够成为一名专家。你是选择紧跟潮流,还是为你的未来做出选择。
## 复杂度
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/12.png)
这是一个非常个人的事情,但仍然值得考虑,检查一下你是否喜欢一种语言的语法。错误处理是如何完成的,你需要多少代码量来实现并发或者并行性,你可以多快地阅读和理解其他代码。
以 Ruby 或 Python 为例,它们是每一个说英语的人都能容易理解的语言。看看基于 C 的语言,你可能很难理解其中到底发生了什么。 Java 和 C# 也非常冗长,而 Clojure 有时可能过于复杂。
当然,随着时间的推移,你开始越来越多地理解任何语法,但在某些情况下,你可能对 Elixir 更有信心,而不是使用 Go。 在我看来,一门语言越底层,开发人员的灵活性和容忍度就越高它允许的抽象越多,表述性就越好。
## 工具
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/13.jpg)
除了有可用的库之外,语言中还有一个重要部分是支持开发的可用工具,包括不同的构建器、编译器、静态分析程序、格式化程序、测试和部署工具。
考虑一下引导单个项目、编码、测试并将其部署到生产环境中有多难。在编写代码库之后,发布新应用程序版本需要多少时间。迁移数据库、下载和升级依赖项或构建单个可执行包是否简单易行。
一段时间之后,你可能会有一组脚本来完成这项工作,但是要考虑初级人员或新手。他们能像你一样轻松地做所有这些事情吗?这些特性是语言本身提供的,还是每个开发人员都必须准备自己的工具?语法是一回事,但总有一天,你必须向全世界公开你的应用程序。这需要花费你多少代价?
## 总结
你看,有很多事情是需要考虑的。如果你的时间有限且昂贵,你可能要反思将把时间花在什么地方。
你刚刚读到的这些问题,一定会帮助你做出正确的选择,并对你的决定感到满意。
跟我聊聊你最近是否选择了一项新技术,你是如何分析它的,以及是否对自己的选择感到高兴。
![](https://raw.githubusercontent.com/studygolang/gctt-images2/blob/master/how-to-choose-a-programming-language/14.jpg)
via: https://blog.lelonek.me/how-to-choose-a-programming-language-7805da7ec588
作者:Kamil Lelonek 译者:iris55 校对:JYSDeveloper
本文由 GCTT 原创翻译,Go语言中文网 首发。也想加入译者行列,为开源做一些自己的贡献么?欢迎加入 GCTT!
翻译工作和译文发表仅用于学习和交流目的,翻译工作遵照 CC-BY-NC-SA 协议规定,如果我们的工作有侵犯到您的权益,请及时联系我们。
欢迎遵照 CC-BY-NC-SA 协议规定 转载,敬请在正文中标注并保留原文/译文链接和作者/译者等信息。
文章仅代表作者的知识和看法,如有不同观点,请楼下排队吐槽
有疑问加站长微信联系(非本文作者))