原文: What Programming Language Should I Learn First in 2024? [Solved]

大多数人的编程之旅都是从搜索引擎开始的。

例如搜索“XXX 语言教程”。

但要怎么决定从哪门语言开始呢?

“硅谷的人总是开 Java 的玩笑,我想应该先学 Java。”

或者:

"Haskell!现在 Haskell 这么火!"

又或者:

"一定要学 Go!你看它的吉祥物多么可爱!"

image-15

或者当我们不知所措的时候,只能搜:

"入门学什么编程语言比较好?"

人们顾虑的问题通常就那么几个,下面这张信息图很好地回答了这些疑惑:

v2-d5279a67971e0d64ff2fa29eb0501789_hd
Image credit

选择第一门编程语言的过程十分有趣,这就好像是个人的信仰选择问题一样。

也许因为你像个孩子一样喜欢玩橡皮泥,稀里糊涂都打算开始学 Ruby。我还是要提醒你,不要草率做决定。

想要真正掌握你的第一门编程语言,你需要投入成千上百小时来学习实践。

所以你要考虑清楚以下这几个方面:

  • 这门语言的岗位需求大不大
  • 这门语言有没有发展前景
  • 语言的学习难度
  • 在学习过程中你能运用它开发什么样的练手项目(把你的成果分享给周围的朋友才能激励你坚持学习下去)

每年都会有新的编程语言出现,以及随着而来的学术论文亦或者是搞笑段子:

v2-6a8dc1c8a42520a03d612928988d7c04_hd

第一门编程语言可选择的范围很广。下面这张图很清晰地显示了过去几年中几门语言学习的 Google 搜索热度变化:

v2-693368bd57c79ee3487e36fe016885fd_hd

Java 有起有落,而 Python 逐渐成为了最受欢迎的入门语言。除此之外,还有最近几年逐步火起来的 JavaScript。

在我展开讨论之前,先明确几点:

  • 我并不会在这里争论哪门语言要比哪门优越
  • 我认同一名合格的程序员最终应该掌握不止一门编程语言
  • 我想说明的是,对于刚入门的初学者来说,还是应该先专注于一门语言的学习。而这门语言,我想你可能早就在标题中发现了——就是 JavaScript

我们先来聊聊现在学校里的编程教学是什么情况。

计算机基础教学

v2-94f1beeccb3bfc6cfec2c81c1acfe46d_hd

一般在大学教授编程课程的都是计算机系,而计算机专业一般数学和电子方面的内容又比较多。当然你可能早就听说过:

计算机科学的教育无法使任何人成为专业的程序员,就好像学习怎么使用刷子和颜料无法让任何人成为画家一样—— Eric S. Raymond(《大教堂与集市》作者)

即使在 2020 年的今天,许多大学还像教计算机科学一样教编程,像教数学一样教计算机科学。

所以许多课程中编排的入门语言是 C 这样底层抽象的语言,或者是专门针对数学的 MATLAB.

一些专业权威的机构也推出了他们的编程语言年度排行榜,例如 TIOBE Index,又或者是下面这个来自 IEEE的榜单:

image-16

大多数这类榜单 10 年来都没有什么变化。

但事实上不是这样的,包括在学术界。

早在 2014 年,Python 就超过了 Java,成为了最受美国各大 CS(Computer Science)机构欢迎的教学语言。

image-17

而在实际上的生产工作中,也发生了和权威机构发布的完全不一样的变化(数据来自 87,354 名开发者参与的 Stack Overflow 2019 年度调查):

image-36

多一半的开发者都在使用 JavaScript。它最早只在前端开发应用,现在也逐步在后端流行开来。甚至开始延伸到游戏开发和物联网领域。

工作岗位上对 JavaScript 的需求也仅次于 Java(数据来自 Indeed.com):

image-19

所以我们也围绕 JavaScript 技术栈建立了我们的开源社区。在过去的五年里,有超过 40,000 名学员通过在 freeCodeCamp 学习找到了编程相关的工作。

不过 JavaScript 真的也适合你么?它值得你为之献出第一次么?我们来继续分析:

事实一:岗位需求

如果你只是为了好奇好玩而学编程的话,可以忽略这一点。但如果你和大多数人一样,想通过掌握编程技能找到工作的话,这点对你就非常重要了。

像我之前提到的,JavaScript 是除 Java 之外需求量最大的编程语言。

另外还有一点:JavaScript 已经发展了 20 多年,而直到最近,一些诸如 Netflix, Walmart 和 PayPal 一类的大公司才开始全栈应用 JS 构建他们的应用。

所以就造成了市场上 JavaScript 开发者供不应求的状况(数据来自 Indeed.com)。

image-20

从图上来看,每个 Java 岗位大概有 2.7 人在竞争,IOS 和 PHP 也平均都有 2 人以上竞争。

而通过计算,每个 JavaScript 岗位只有 0.7,这就成了属于 JS 开发者的卖家市场。

译者注:为了更具说服力,特此补充国内的编程语言岗位情况(数据来源 2019 年 9 月中国编程语言排行榜):

image-35

事实二:发展前景

在 GitHub 上,平均每个 JavaScript 的项目收到的 pull requests 要比其他语言多两倍以上。其增长速度也远超别的流行语言。

v2-d90e80afd63f1087f50c70bf10a41665_hd

JavaScript 的整个生态体系也因为 Google, Microsoft, Facebook, Netflix 这类大公司的投资而受益匪浅。

例如 TypeScript(一种 JavaScript 的超集,提供更丰富特性,可编译为普通 JS)有着超过 100 名开源贡献者,而这里面大多数都是微软和谷歌的员工。

而且这类集团公司很少有使用 Java 的。因为 Java 的所有者 Oracle 经常会因为各种有关 Java 开发的原因起诉别的公司。

事实三:学习难度

image-21

大多数的程序员应该都会认同,高级的脚本语言通常比较好学。JavaScript 当然属于此类,也包括 Ruby 和 Python.

即便很多大学课程教授的都是 Java 或 C++,这类语言也真的很难上手。

事实四:你能实践的练手项目

这是 JavaScript 最大的优势。JS 可以运行在任何有浏览器的设备上。你几乎可以用 JS 开发任何应用,而且很方便就能分享发布到任何地方。

正是由于 JavaScript 无处不在,Stack Overflow 的联合创始人 Jeff Atwood 才说出他的那句经典定律:

任何可以用 JavaScript 写成的应用,最终都会使用 JavaScript 写成。

现实也在不断的佐证,证据在此

Java 也曾号称是跨平台语言。可也许你了解到,Oracle 官方在今年早些时候终止了Java Applets 的支持。

Python 也经常会遇到类似的问题:

我怎么才能把我写的这个游戏发给我的朋友?或者能够不安装什么应用就在手机上运行么? — James Hague in Retiring Python as a Teaching Language

相比之下,JS 要方便很多。下面的这些应用都来自我们开源社区的学员,你只需要在浏览器里打开链接就能开始玩啦:

image-22
1970s style Simon game
v2-a1da22984966e4030f5968fd3962ff6d_hd
Conway’s Game of Life
image-23
Star Wars-themed Wikipedia Search
image-24
A roguelike dungeon crawler game


先专注学好一门语言,再去学别的。

如果你总是在各个语言之间摇摆不定,你很难取得什么实质上的进步

为了避免在入门阶段止步不前,你需要扎实学好你的第一门语言。之后再学习别的语言你就会感觉到异常轻松。

等到那个阶段,你就可以逐步成长为一名掌握许多语言的全面的开发者啦:

  • C 对于你理解计算机原理特别有帮助,例如内存管理之类的。在高性能计算中非常有用。
  • C++ 在游戏开发中运用广泛
  • Python 在科学研究和数据分析中应用广泛
  • 如果你想在大型的科技公司中工作,Java 就非常重要。

但还是先学会 JavaScript 再说吧:)

我知道评论里会有很多人要和我吵起来。虽然我知道这不可能,但我还是要试着说服你一下:

Q1:JavaScript 运行速度不是很慢么?

在很多实际运用场景中,JavaScript 和一些高性能语言运行一样快。

Node.js 要比 Python、Ruby、PHP 快上好几个数量级。

甚至已经接近了 C++, Java, Go 的性能。

下面是一个比较全面的编程语言“跑分评测”:

image-25


Q2:JavaScript 连静态语言都不是!

和 Python/Ruby 一样,JavaScript 属于动态语言,使用起来也很方便。举个例子,假如我想把变量 exampleArray 设为数组,我会先给它赋值,然后通过 length 函数来获取数组中元素的数量。

exampleArray = [1, 2]
-> [1, 2]
exampleArray.length
-> 2

但假如我不小心赋值给了它一个字符串,代码照样运行不会报错,可并不是我想要的结果:

exampleArray = "text"
-> "text"
exampleArray.length
-> 4

这一类错误在动态类型的语言中经常会遇到。大多数的开发者都会专门写一些检查和测试来避免此类错误的发生。

如果你非要学一门静态语言的话,我依旧推荐你学习 JavaScript,之后再开始学习 TypeScript。

TypeScript 是有学习曲线的,但在掌握了 JavaScript 之后,你的学习会很顺利。— Alex Ewerlöf on TypeScript

Q3:我想要学的是怎么开发移动 App

那你也还应该先学 JavaScript 呀~

  1. JavaScript 有一些很棒的工具可以开发原生的移动应用,例如 Angular CordovaReact Native.
  2. 为了让你的移动 App 真的像模像样,它至少得有个后端,你用一些合适的 Web 开发框架可以很轻松地实现,例如 Node.js+Express.js

而且移动开发的春天也正是 JS 的流行带来的。

在 Stack Overflow的调查中,有近一半的开发者的岗位都是 Web 开发,移动开发岗只占了 8%。

image-26

“为某事专门下一个 App”的境况也已不再,大多数的智能手机用户开始趋于不下载新的 App 了

当然——人们还在用着 App。绝大多数都是大厂的微信、支付宝一类(原文:Mostly Facebook, Google Maps, and handful of others)。市场对移动开发的需求也越来越小。

移动开发的前景也难以预期。而且在许多方面,使用 JavaScript 来开发维护和部署移动应用要更加轻松简单。所以像 Facebook 和 Google 这样的公司在研发更好的 JavaScript 工具上投入的越来越多。

在 2016 年,几乎所有的开发都和 Web 开发有关。所有的事情都依附着互联网这个大平台。而且下一波将要崛起的设备——家庭智能、自动驾驶汽车等也都需要依附于网络。

Q4:JavaScript 不是一个只花 10 天写着玩的语言么?

JavaScript 有一段简史

人们也经常会拿 JavaScript 开各种各样的玩笑

同样人们也喜欢吐槽 C++,可不管有多少人吐槽,C++ 依然很成功。

译者注:这就和 “PHP 是全世界最好的语言”是一个道理。

所以如果再有人在你面前说 JS 怎么怎么不好的话,请记住 C++ 之父的那句名言:

世界上只有两种编程语言:一种是天天被人喷的,另一种是没人用的。— Bjarne Stroustrup