大多数人学习编程的操持开始于某一天的深夜谷歌搜索。
搜索的内容常日类似于“学习__”(自行脑补空格)
但是他们是若何决定搜索哪种措辞的呢?

“在硅谷他们总是对 Java 开玩笑。我想我该当学习 Java”
或者
Haskell。现在是如此之热。Haskell。
或者
Go 措辞的地鼠 logo 真 tm 可爱。
然后我们剩下的人可能会搜索:
我该当先学习哪种编程措辞?
险些没有问题会普遍到要用信息图表来展示。
但下图列举了一堆这样的问题:
图片来源 (http://carlcheo.com/startcoding)
决定你的第一个编程措辞是一个有趣的过程,有点像 “你属于昆汀·塔伦蒂诺的哪个角色?”的人格测验。
但是,在你以小孩玩泥巴的心态跑去学习 Ruby 之前,给你提个醒:这个赌注相称高。
它可能会耗费你上百个小时去练习,但你远远不会胜任你第一个编程措辞。
因此,你要考虑以下成分:
措辞的就业市场
措辞的长期前景
措辞的学习难度
你在学习期间能构建什么样的项目(并且与朋友分享,让你保持动力)
每年都会产生新的编程措辞,和这些编程措辞的新学术论文,以及新的网络漫画。
不信你看上个月的这篇佳作:
当你选择第一个编程措辞时,选项有很多。为了进一步缩小选择,这里是过去 12 年来最常见的,与学习编程有关的谷歌搜索:
Java 起起伏伏。
Python 逐渐上升为最受欢迎的选择。
但是躲不才面是一个小火车头,在过去几年的盛行度逐步地上升。而这个小火车头便是 JavaScript。
在评论辩论这些编程措辞之前,我先澄清:
我并不是要论证任何一种措辞在客不雅观上比任何其他措辞好
我认为开拓者们终极不应该只学习一种措辞
我要论证的是该当先学好一门措辞。你该当已经从标题中颠倒的笔墨猜出来了,这门措辞便是 JavaScript。
那就正式开始吧,首先我们来探索一下目前学校教授编程的方法。
打算机科学 101
大学一贯因此打算机科学的名义来教授编程的,而打算机科学常日被看做是数学的延伸,或者是电气工程学位的周边学科。
当然,你可能已经听说了:
“打算机科学教诲远远不能像学习画笔和颜料可以使人成为一个专业画家那样,使人成为一个专业的编程者。”- Eric S. Raymond
截止到 2016 年,很多大学仍旧把编程当成打算机科学,把打算机科学当成数学。
结果是许多入门级的编程课程专注于低层次的抽象措辞,如 C,或聚焦于数学编程的措辞,如 MATLAB。
而系主任常日会指着编程措辞的年度排行榜,如 TIOBE指数,或者来源于 IEEE 的结果(如下图),坚持保留这些课程。
大多数这些排行榜就跟10年前险些千篇一律。
但近几年还是发生了一些变革,乃至在学术届。
在 2014 年,Python 超过 Java 成为美国顶尖的打算机科学课程最盛行的传授教化措辞 。
并且另一改变也即将... 终极... 发生。
由于如果你看看从业职员实际利用的编程措辞,你会创造它的画面是酱婶的:
JavaScript 是目前最受欢迎的措辞,Stack Overflow 在 2016 年的调查显示,调查的回应者中有 49,397 的开拓者利用 JavaScript。
超过一半的开拓者利用 JavaScript。 它对前端 web 开拓非常主要,而且在后端开拓中的利用程度也日益增长。在游戏开拓和物联网等领域的利用也迅速扩展。
JavaScript 在招聘信息中被提到的次数也超过了除 Java 以外的其他编程措辞:
数据来源于天下上最大的招聘信息网络者,Indeed.com
我们建立关于 JavaScript 课程的开源社区(Free Code Camp)绝非有时。在过去的两年里,超过 5,000 个人利用 Free Code Camp 找到他们的第一份事情。
我并不是由于教 JavaScript 才宣扬它。我教 JavaScript 是由于 JavaScript 是开拓者找到第一份事情的最佳之路。
但是 JavaScript 适宜你么?它值得成为你第一个编程措辞么?让我们来探究一下前面提到的成分。
成分 #1:就业市场
如果你学习编程纯粹出于求知欲,那么请跳过这个成分。但是如果你像大多数学习编程的人一样,想利用这个技能找到一份事情,那么这是一个主要的考虑成分。
就像我之条件到的,Java 在招聘公告上提到的次数超过其他编程措辞。JavaScript 紧随其后,排名第二。
但关于 JavaScript 的一个事实是:只管 JavaScript 已经存在了 20 多年,它只在最近几年才被当作真正的工具,如 Netflix,Walmart,和 PayPal 等公司乐意用 JavaScript 构建全体运用程序。
因此,很多公司开始雇佣 JavaScript 开拓者,但是在就业市场中这样的开拓者很少。
数据来源:Indeed.com
对每一个公开的 Java 职位,有 2.7 个 Java 开拓者竞争。PHP 和 iOS 就业竞争同样激烈。
但是对付每一个公开的 JavaScript 职位,仅有 0.6 个 JavaScript 开拓者。对付具有 JavaScript 技能的开拓者来说,这是一个卖方市场。
成分 #2: 长期远景
均匀一个 JavaScript 项目收到的 pull request 是 Java,Python,或 Ruby 项目的两倍。而在这一点上,JavaScript 比其他的编程措辞增长的更快。
数据来源:GitHub 2016 10月的调查情形
JavaScript 的生态系统也得益于公司的大量投资资金和工程人才,如谷歌,微软,脸谱,和 Netflix 公司。
例如:TypeScript(一种 JavaScript 的静态类型的超集)已经有超过 100 个开源贡献者,他们中很多人是微软和谷歌的员工。
很难在 Java 上创造这种公司间的互助。通过收购 Sun Microsystems 拥有 Java 的 Oracle 公司常常起诉试图扩展 Java 的公司。
成分 #3: 学习难度
图片来源:XKCD 的风趣漫画。
大多数程序员都会赞许高等脚本措辞相对易学。JavaScript就属于这一类,就像 Python,Ruby。
只管大学仍旧把 Java,C++ 作为第一类措辞用来传授教化,但它们显然学习难度更高。
成分 #4: 你可以利用学习的措辞创建的工程
这才是 JavaScript 的最大亮点。JavaScript 能运行在任何一个有浏览器的设备上,就须要一个浏览器。基本上你可以用 JavaScript 构建任何东西,并能随时随地分享。
由于 JavaScript 的遍及,Stack Overflow 的创始人 Jeff Atwood 创造了他目前著名的法则:
任何可以用 JavaScript 编写的运用,终极都会利用 JavaScript 编写。
而且随着韶光的发展,Atwood 法则越来越有说服力。
Java曾经一样承诺过在任何地方运行。你大概记得 Java Applets。Oracle 已经在今年早些时候正式地停掉了它们。
Python 也遭受了同样的问题:
“我如何才能给我的朋友这个游戏呢?更好的是,是否有一种方法可以让我把这个放在我的手机上,这样我可以给学校的孩子们展示,而不须要他们安装呢?唔…”——James Hague 在 《让 Python 退休成为传授教化措辞》中写到。
比较之下,这里有构建在浏览器里的运用程序,它们由开源社区的成员在 CodePen 上创建。您在浏览器中就能点击并且利用这些运用程序:
1970 年代风格的 Simon game
Conway’s Game of Life
Star Wars-themed Wikipedia Search
A roguelike dungeon crawler game
先学好一门措辞。再学习第二个措辞
如果你一直地从一种措辞跳到其余一种措辞,你不会走的太远。
为了冲破这种限定,你须要学好第一个措辞。这样你的第二种措辞会更加随意马虎。
接下来,你就能学习更多措辞,从而打仗更多方面的知识,成为一个更全面的开拓者:
C 是学习打算机实际管理内存办法的绝佳措辞,并在高性能打算方面极为有用。
C++ 由于游戏开拓而伟大。
Python 在科学和统计方面棒呆了。
如果你想在大型科技公司事情,Java 很主要。
但是首先你得学习 JavaScript。
Ok,现在我要去考试测验那些不可能 —— 我要试着预见评论部分的可能涌现的异议。
异议 #1: 但是 JavaScript 不是很慢么?
在大多数实践意义上,JavaScript 是和其他高性能措辞一样快的措辞。
在数量级上,JavaScript (Node.js) 比起 Python,Ruby,PHP 不知道快到哪里去了。
而且它险些与高性能措辞如 C++,java,Go 一样快。
这里有最近最全面的综合的跨措辞平台的基准值:
异议 #2: 但是 JavaScript 不是静态类型
跟 Python,Ruby 一样,JavaScript 是动态类型的措辞,这样会很方便。但你可能会陷入困境。在这里我想把examplearray
认为数组。设置它的值,然后检讨其长度 - 含义是它包含元素的数目。
exampleArray = [1, 2]-> [1, 2]exampleArray.length-> 2
但是随后我欠妥心把它指定为字符串。
exampleArray = “text”-> “text”exampleArray.length-> 4
这些缺点会在动态类型措辞中的一贯存在。大多数开拓职员只是通过检讨到位,以防止这些缺点,并且相应地编写测试。
如果你一定要在第一个编程措辞中包含静态类型,那么我仍旧推举优先学习 JavaScript。合影你就可以很快地学会 TypeScript。
“Typescript 有一个学习曲线,但是如果你已经理解 JavaScript,那么 TypeScript 的学习曲线会非常平滑。” —— Alex Ewerlöf 在 TypeScript 写到。
异议 #3: 但我真的想做一个移动 app
但是我仍旧建议优先学习 JavaScript。
JavaScript 具有开拓本地移动运用 app 功能的工具,如 Angular Cordova和 React Native。
为了让你的移动运用程序实实在在做任何有趣的东西,它可能会须要一个适当的后端,需建立一个得当的 Web 开拓框架,像 Node.js + express.js。
而且,值得指出的是,移动运用开拓的最好的日子可能即将到来。
对付初学者,开拓者中险些一半的事情是 web 开拓,和利用移动 app 的人们一样多。比较之下,只有 8% 的事情涉及移动运用程序开拓。
49,525 人的职业,统计数据基于 2016 Stack Overflow 的调查相应人数。
“只有一个运用程序”的宏伟愿景并没有通过。相反,大部分智好手机的拥有者已经停滞下载新的 app。
当然,他们仍旧利用 App。常日是脸谱,谷歌舆图,还有其他的。大部分对移动 app 开拓者的需求集中在一些大的店主。
那些移动开拓事情的前景很难预测。多方面的发展,掩护和支配移动运用程序利用 JavaScript 更随意马虎。这样的公司如脸谱和谷歌都在大力投资利用 JavaScript 开拓更好的工具。
截至 2016,险些所有的开拓都是 Web 开拓。每一个打仗的大平台都是“网络”。不才一个设备的浪潮中,你会在家里交谈时,汽车可以接孩子放学 - 网络将会把他们链接在一起。
而这便是 JavaScript 的意义。
异议 #4: 难道 JavaScript 不是只花了 10 天写出来的玩具措辞么?
JavaScript 有一段诡异的历史。
毫无疑问,这是人们以 JavaScript 开玩笑的代价。
同样,人们对 C++ 既爱又恨。只管存在这种恨,但就像 JavaScript 一样,C++ 成功了,而且现在到处都在利用它。
以是,如果有人由于你在学习 JavaScript 而不是“本周精英措辞”而嘲笑你,你只须要记住创造 C++ 的那个人一句名言:
“只有两种编程措辞:一种是被人骂的,一种是没人用的。” — Bjarne Stroustrup