小白如何选择自己的第一门编程语言

前言:

大多数人的编程之旅都是从搜索引擎开始的。例如搜索“XX语言入门教程”。
但要怎么决定从哪门语言开始呢?或者当我们不知所措的时候,只能搜:”入门学什么编程语言比较好?”初学者顾虑的问题通常就那么几个,下面这张图很好地回答了这些疑惑:
alt

选择第一门编程语言的过程十分有趣,这就好像是个人的信仰选择问题一样。也许因为你像个孩子一样喜欢玩橡皮泥,稀里糊涂都打算开始学 Ruby 。我还是要提醒你,不要草率做决定。想要真正掌握你的第一门编程语言,你需要投入成千上百小时来学习实践。所以你要考虑清楚以下这几个方面:

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

主流编程语言的热度

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

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

Java 有起有落,而 Python 逐渐成为了最受欢迎的入门语言。除此之外,还有最近几年逐步火起来的JavaScript。(新手请注意,Java和JavaScript之间的区别就像是周杰和周杰伦之间的区别。)在我展开讨论之前,先明确几点:

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

高校的编程教学现状

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

计算机基础教学

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

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

即使在2016年的今天,许多大学还像教计算机科学一样教编程,像教数学一样教计算机编程。所以许多课程中编排的入门语言是 C 这样底层抽象的语言,或者是专门针对数学的 MATLAB 。一些专业权威的机构也推出了他们的编程语言年度排行榜,例如TIOBE Index,又或者是下面这个来自IEEE的榜单:

大多数这类榜单10年来都没有什么变化。但事实上不是这样的,包括在学术界。早在2014年,Python就超过了Java,成为了最受美国各大 CS (Computer Science)机构欢迎的教学语言。

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

多一半的开发者都在使用JavaScript。它最早只在前端开发应用,现在也逐步在后端流行开来。甚至开始延伸到游戏开发和物联网领域。工作岗位上对JavaScript的需求也仅次于Java(数据来自Indeed.com):

所以我推荐初学者将JavaScript作为自己的第一门语言。我再推荐一个免费的JavaScript开源社区FreeCodeCamp,这个社区已经帮助 5k+ 名JavaScript初学者找到了工作。

JavaScript 的市场分析

不过,JavaScript是否适合你?它是否值得你为之献出第一次?我们来继续分析:

事实一:岗位需求

如果你只是为了好奇好玩而学编程的话,可以忽略这一点。但如果你和大多数人一样,想通过掌握编程技能找到工作的话,这点对你就非常重要了。像我之前提到的,JavaScript是除Java之外需求量最大的编程语言。另外还有一点:JavaScript已经发展了20多年,而直到最近,一些诸如 Netflix , Walmart PayPal 一类的大公司才开始全栈应用JS构建他们的应用。所以就造成了市场上JavaScript开发者供不应求的状况(数据来自Indeed.com)。

从图上来看,每个Java岗位大概有2.7人在竞争, IOS PHP 也平均都有2人以上竞争。而通过计算,每个JavaScript岗位只有0.7,这就成了属于JavaScript开发者的卖家市场。为了更具说服力,特此补充国内的编程语言岗位情况(数据来源2015年8月 中国版的编程语言排行榜):

事实二:发展前景

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

JavaScript的整个生态体系也因为 Google , Microsoft , Facebook , Netflix 这类大公司的投资而受益匪浅。例如 TypeScript (一种JavaScript的超集,提供更丰富特性,可编译为普通JavaScript)有着超过100名开源贡献者,而这里面大多数都是微软和谷歌的员工。而且这类集团公司很少有使用Java的。因为Java的所有者 Oracle 经常会因为各种有关Java开发的原因起诉别的公司。

事实三:学习难度

大多数的程序员应该都会认同,高级的脚本语言通常比较好学。JavaScript当然属于此类,也包括Ruby和Python。即便很多大学课程教授的都是Java或 C++ ,这类语言也真的很难上手。

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

这是JavaScript最大的优势。JavaScript可以运行在任何有浏览器的设备上。你几乎可以用JS开发任何应用,而且很方便就能分享发布到任何地方。正是由于JavaScript无处不在,StackOverflow的联合创始人 Jeff Atwood 才说出他的那句经典定律:

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

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

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

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

相比之下,JavaScript要方便很多。下面的这些应用来自JavaScript开发者的开源项目,你只需要在浏览器里打开链接就能开始玩啦:

1970s style Simon game

Conway’s Game of Life

Star Wars-themed Wikipedia Search

A roguelike dungeon crawler game

先专注学好一门语言,再去学别的。如果你总是在各个语言之间摇摆不定,你很难取得什么实质上的进步。为了避免在入门阶段止步不前,你需要扎实学好你的第一门语言。之后再学习别的语言你就会感觉到异常轻松。等到那个阶段,你就可以逐步成长为一名掌握许多语言的全面的开发者啦:

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

小白的顾虑:

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

在很多实际运用场景中,JavaScript和一些高性能语言运行一样快。 Node.js 要比Python, Ruby, PHP 快上好几个数量级。甚至已经接近了C++, Java, Go 的性能。下面是一个比较全面的编程语言“跑分评测”:

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

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

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

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

1
2
3
4
exampleArray = "text"
-> "text"
exampleArray.length
-> 4

这一类错误在动态类型的语言中经常会遇到。大多数的开发者都会专门写一些检查和测试来避免此类错误的发生。如果你非要学一门静态语言的话,我依旧推荐你学习JavaScript,之后再开始学习TypeScript。

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

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

那你也还应该先学JavaScript呀~

JavaScript有一些很棒的工具可以开发原生的移动应用,例如Angular CordovaReact Native

为了让你的移动App真的像模像样,它至少得有个后端,你用一些合适的Web开发框架可以很轻松地实现,例如 Node.js + Express.js

而且移动开发的春天也正是 JavaScript 的流行带来的。在StackOverflow的调查中,有近一半的开发者的岗位都是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是全世界最好的语言是一个道理。

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

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

JavaScript 学习:

学习方法

成功案例

完整的 Web 开发学习

FreeCodeCamp 前端学习社区

原文链接:What programming language should you learn first?
作者:Quincy Larson (FreeCodeCamp 创始人)

Jason Xu wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!