大多数人的编程之旅都是从搜索引擎开始的。
例如搜索“XXX 语言教程”。
但要怎么决定从哪门语言开始呢?
“硅谷的人总是开 Java 的玩笑,我想应该先学 Java。”
或者:
"Haskell!现在 Haskell 这么火!"
又或者:
"一定要学 Go!你看它的吉祥物多么可爱!"
或者当我们不知所措的时候,只能搜:
"入门学什么编程语言比较好?"
人们顾虑的问题通常就那么几个,下面这张信息图很好地回答了这些疑惑:
Image credit
选择第一门编程语言的过程十分有趣,这就好像是个人的信仰选择问题一样。
也许因为你像个孩子一样喜欢玩橡皮泥,稀里糊涂都打算开始学 Ruby。我还是要提醒你,不要草率做决定。
想要真正掌握你的第一门编程语言,你需要投入成千上百小时来学习实践。
所以你要考虑清楚以下这几个方面:
每年都会有新的编程语言出现,以及随着而来的学术论文亦或者是搞笑段子:
第一门编程语言可选择的范围很广。下面这张图很清晰地显示了过去几年中几门语言学习的 Google 搜索热度变化:
Java 有起有落,而 Python 逐渐成为了最受欢迎的入门语言。除此之外,还有最近几年逐步火起来的 JavaScript。
在我展开讨论之前,先明确几点:
我们先来聊聊现在学校里的编程教学是什么情况。
一般在大学教授编程课程的都是计算机系,而计算机专业一般数学和电子方面的内容又比较多。当然你可能早就听说过:
计算机科学的教育无法使任何人成为专业的程序员,就好像学习怎么使用刷子和颜料无法让任何人成为画家一样—— Eric S. Raymond(《大教堂与集市》作者)
即使在 2020 年的今天,许多大学还像教计算机科学一样教编程,像教数学一样教计算机科学。
所以许多课程中编排的入门语言是 C 这样底层抽象的语言,或者是专门针对数学的 MATLAB.
一些专业权威的机构也推出了他们的编程语言年度排行榜,例如 TIOBE Index,又或者是下面这个来自 IEEE的榜单:
大多数这类榜单 10 年来都没有什么变化。
但事实上不是这样的,包括在学术界。
早在 2014 年,Python 就超过了 Java,成为了最受美国各大 CS(Computer Science)机构欢迎的教学语言。
而在实际上的生产工作中,也发生了和权威机构发布的完全不一样的变化(数据来自 87,354 名开发者参与的 Stack Overflow 2019 年度调查):
多一半的开发者都在使用 JavaScript。它最早只在前端开发应用,现在也逐步在后端流行开来。甚至开始延伸到游戏开发和物联网领域。
工作岗位上对 JavaScript 的需求也仅次于 Java(数据来自 Indeed.com):
所以我们也围绕 JavaScript 技术栈建立了我们的开源社区。在过去的五年里,有超过 40,000 名学员通过在 freeCodeCamp 学习找到了编程相关的工作。
不过 JavaScript 真的也适合你么?它值得你为之献出第一次么?我们来继续分析:
如果你只是为了好奇好玩而学编程的话,可以忽略这一点。但如果你和大多数人一样,想通过掌握编程技能找到工作的话,这点对你就非常重要了。
像我之前提到的,JavaScript 是除 Java 之外需求量最大的编程语言。
另外还有一点:JavaScript 已经发展了 20 多年,而直到最近,一些诸如 Netflix, Walmart 和 PayPal 一类的大公司才开始全栈应用 JS 构建他们的应用。
所以就造成了市场上 JavaScript 开发者供不应求的状况(数据来自 Indeed.com)。
从图上来看,每个 Java 岗位大概有 2.7 人在竞争,IOS 和 PHP 也平均都有 2 人以上竞争。
而通过计算,每个 JavaScript 岗位只有 0.7,这就成了属于 JS 开发者的卖家市场。
译者注:为了更具说服力,特此补充国内的编程语言岗位情况(数据来源 2019 年 9 月中国编程语言排行榜):
在 GitHub 上,平均每个 JavaScript 的项目收到的 pull requests 要比其他语言多两倍以上。其增长速度也远超别的流行语言。
JavaScript 的整个生态体系也因为 Google, Microsoft, Facebook, Netflix 这类大公司的投资而受益匪浅。
例如 TypeScript(一种 JavaScript 的超集,提供更丰富特性,可编译为普通 JS)有着超过 100 名开源贡献者,而这里面大多数都是微软和谷歌的员工。
而且这类集团公司很少有使用 Java 的。因为 Java 的所有者 Oracle 经常会因为各种有关 Java 开发的原因起诉别的公司。
大多数的程序员应该都会认同,高级的脚本语言通常比较好学。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 要方便很多。下面的这些应用都来自我们开源社区的学员,你只需要在浏览器里打开链接就能开始玩啦:
1970s style Simon game
Conway’s Game of Life
Star Wars-themed Wikipedia Search
A roguelike dungeon crawler game
如果你总是在各个语言之间摇摆不定,你很难取得什么实质上的进步。
为了避免在入门阶段止步不前,你需要扎实学好你的第一门语言。之后再学习别的语言你就会感觉到异常轻松。
等到那个阶段,你就可以逐步成长为一名掌握许多语言的全面的开发者啦:
但还是先学会 JavaScript 再说吧:)
我知道评论里会有很多人要和我吵起来。虽然我知道这不可能,但我还是要试着说服你一下:
Q1:JavaScript 运行速度不是很慢么?
在很多实际运用场景中,JavaScript 和一些高性能语言运行一样快。
Node.js 要比 Python、Ruby、PHP 快上好几个数量级。
甚至已经接近了 C++, Java, Go 的性能。
下面是一个比较全面的编程语言“跑分评测”:
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 呀~
而且移动开发的春天也正是 JS 的流行带来的。
在 Stack Overflow的调查中,有近一半的开发者的岗位都是 Web 开发,移动开发岗只占了 8%。
“为某事专门下一个 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