#你应该先学习哪种编程语言?(tpircSavaJ:答回)

原文链接:What programming language should you learn first? ʇdıɹɔsɐʌɐɾ :ɹǝʍsuɐ 作者:Quincy Larson 译者: merlinyx

大多数人的编程学习之旅始于一次深夜的谷歌搜索。
通常他们搜的是“学xx”。
但是他们如何决定要搜索哪种语言呢?

“他们在硅谷总开Java的玩笑。我想我应该学这个。”

要么:

“Haskell。现在超火的。Haskell。”

要么:

“Go的地鼠标志太可爱啦!”

然后是其他人。我们很可能搜的是像 “我应该先学习哪种编程语言?” 这样的。
这些问题太经常被问到了,以至于我们有很全的信息图作为回答。这是其中之一:

来源:http://carlcheo.com/startcoding

决定你的第一种编程语言可以是一个有趣的过程 – 有点像“你是哪个昆汀·塔伦蒂诺角色?”的那种人格测试。

但是,在你因为小时候喜欢玩Play-Doh就开始学习Ruby之前,让我提醒你:这其中的风险相当高。

你要花费数百小时去练习才能堪堪上手你的第一种编程语言。

所以你应该考虑以下因素:

  • 语言的就业市场
  • 语言的长期前景
  • 语言学习的容易程度
  • 你在学习的时候可以做什么项目(和朋友分享,让你可以保持积极性)

每年都有新的编程语言,和相关的新论文。还有新的网络漫画。

讲真是这样的。下面这幅是上个月的精品:

每当我们要选择第一种编程语言,我们从来不缺选项。为了缩小范围,下面是过去12年中与学习编程相关的最常见的谷歌搜索:

Java有起有落。
Python逐渐成为最受欢迎的选择。
但是藏在这些语言下面的是那个小“引擎”,在过去几年慢慢积攒人气。它就是JavaScript。

在讨论这些编程语言之前,让我澄清一下:

  • 我不是在说任何一种语言客观上比任何其他更好。
  • 我同意开发者最终应该学习不止一种语言。
  • 但我认为他们应该先学好一种语言。而且 – 你可能从我的标题里上下颠倒的文字已经猜到 – 这种语言应该是JavaScript。

让我们先了解一下现在学校教编程的方式:

计算机科学101

传统上,大学在计算机科学的大伞下教编程,这通常被看作是数学的延伸,或者是电气工程学位的关联内容。

当然,你也许现在已经听过了:

“计算机科学教育不能让任何人成为专业程序员,就像只是学习画笔和颜料不能让人成为专业画家。” – Eric S. Raymond

截至2016年,许多大学仍然把编程当作计算机科学对待,而把计算机科学当数学对待。

因此,许多入门编程课都侧重于低层的抽象语言,比如C,或者数学成分重的语言,比如MATLAB。

而学校系主任还是喜欢一成不变,可以看看年度编程语言排行榜,如TIOBE索引,或者这个IEEE的榜单:  

大多数排行榜看起来几乎与10年前相同。

但是也有变化确实发生了。即使是在学术界。

在2014年,Python超越了Java,成为顶尖美国计算机科学课程的最流行教学语言。

而另一个变化一定也会…最终…发生。

因为如果你看看业界实际使用的语言,会看到一个非常不同的情况:

StackOverflow2016年的调查显示,JavaScript是迄今为止最流行的语言,为49,397名参与调查的开发者使用。

超过一半的开发人员使用JavaScript。它对前端开发很关键,也对后端开发越来越重要。它迅速扩展到游戏开发和物联网等领域。

工作发布网站提到JavaScript也比除Java以外的任何编程语言要多:

数据来自世界上最大的职位发布整合平台Indeed.com

围绕JavaScript建立我们的开源社区课程并不是偶然。在过去两年中,有超过5000人使用Free Code Camp获得第一个开发工作。

我不是因为我教Javascript而推崇它。我教JavaScript因为它是获得第一个开发者工作的最可靠的路径。

但是JavaScript适合你吗?它是否值得成为你的第一个编程语言?让我们来探讨我之前提到的那些因素。

因素一:就业市场

如果你纯粹出于好奇心而学习编程,你可以跳过这一段。但如果你 – 像绝大多数学习编程的人一样 – 想使用这种技能来找到工作,这是一个重要的考虑因素。

正如我前面提到的,Java在工作发布网站被提到次数最多。 JavaScript是第二位。

但JavaScript有一点不同:即使已经存在了20年,它也只在最近才成为一个让Netflix,沃尔玛和PayPal这样的大公司用来构建整个应用程序的重要工具。

因此,很多公司正在招聘JavaScript开发人员,但是找这份工作的人却在就业市场上不是很多。

数据来自Indeed.com

平均有2.7个Java开发人员竞争一个Java开发者职位。PHP和iOS工作的竞争同样激烈。

但是每个JavaScript职位只有0.6个JavaScript开发人员竞争。对于拥有JavaScript技能的开发者来说,这其实是一个卖家市场。

因素二:长期前景

JavaScript项目的pull请求数量是Java,Python或Ruby项目的两倍。除此之外,JavaScript的增长速度比任何其他流行语言都快。

来源:https://octoverse.github.com

JavaScript的生态系统也受益于大量来自谷歌、微软、脸书和Netflix等公司的投资和工程人才。

例如TypeScript(一个静态类型的JavaScript超集)有超过100个开源贡献者,其中许多是微软和Google的员工,他们拿着工资去开发这个。

这种类型的公司间的合作很少与Java有关。甲骨文 – 通过收购Sun Microsystems而实际上拥有Java – 通常会起诉试图扩展Java的公司。

因素三:学习难度

这是一个XKCD讽刺漫画。

大多数程序员都同意高级脚本语言相对容易学习。JavaScript属于这个类别,还有Python和Ruby。

虽然大学仍然把像Java和C++这样的语言作为第一语言去教,他们实际上相当难学。

因素四:可以用它做的项目

这是JavaScript真正闪耀的地方。JavaScript可在任何装有浏览器的设备上运行,就在浏览器中。你可以用JavaScript构建任何东西,分享在任何地方。

由于JavaScript的普及,Stack Overflow的联合创始人Jeff Atwood说出了一句现在非常有名的条律:

“任何可以用JavaScript编写的应用程序,最终都会用JavaScript编写。”

每过一个月,Atwood定律都仍然成立。

Java也曾承诺在任何地方都能运行。你可能记得Java Applets。甲骨文今年早些时候正式停了它。

Python也遇到了同样的问题:

“我怎么才能把我做的这个游戏给我的朋友?更重要的是,有没有一种方式可以让我把这个放在我的手机上,这样我就可以把它给学校同学看,不用麻烦他们安装? 嗯……” – James Hague,《让作为教学语言的Python退休》

相比之下,这里有一些应用程序,是我们的开源社区的成员在CodePen上写在他们浏览器里的。你可以点击并直接在浏览器中使用:

20世纪70年代风格的西蒙游戏

康威的生命游戏

星球大战主题的维基百科搜索

一个类Rogue地牢探索游戏

学好一门语言。然后学习第二个。

如果你一直从一种语言跳到另一种,你不会走很远。

为了继续深入学习,你需要学好你的第一种编程语言。然后你学第二种语言将会变得非常,非常容易。

从那里,你可以走不同分支,通过学习许多语言成为一个更全面的开发人员:

  • C是一个了解计算机如何在内存管理方面工作的好方法,它在高性能计算中很有用。
  • C++是游戏开发的首选。
  • Python是科学和统计学的首选。
  • 如果你想在大型科技公司工作,Java是很重要的。

但是先学JavaScript.


好的,现在我要尝试一件不可能的事情 – 我会尝试去预计评论区的反对意见。

反对一:但JavaScript不是很慢嘛?

对于大多数实际目的而言,JavaScript与高性能语言一样快。

JavaScript(Node.js)比Python,Ruby和PHP快几个数量级。

它也几乎和C++,Java和Go等高性能语言一样快。

下面是最全面的最近的跨语言基准的结果:

反对二:但是JavaScript不是静态类型的

像Python和Ruby一样,JavaScript是动态类型化的,这是很方便的。

但你可能会碰上麻烦。这里我想让exampleArray成为一个数组。我设置它的值,然后看它的长度 – 它所包含的元素数量。

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

但是之后我不小心赋给它一个字符串。

exampleArray =“text”  
- >“text”  
exampleArray.length  
- > 4

这些类型的错误总是在动态类型语言中发生。大多数开发者只是把检查放到位来阻止这些错误,并写相应的测试。

如果你绝对必须在你的第一种编程语言有静态类型,那么我仍然建议你先学习JavaScript。你之后可以快速学会TypeScript。

“Typescript有一个学习曲线,但如果你已经知道JavaScript,这个学习曲线将会很平滑。” – Alex Ewerlöf谈TypeScript

反对三:但我真的想做一个移动应用

我仍然建议先学习JavaScript。

  1. JavaScript提供了一些用于制作原生移动应用的工具,例如Angular Cordova和React Native
  2. 为了让你的移动应用能实际去做各种有趣的事情,它可能需要一个适当的后端,这个后端你会想要用一个适当的Web开发框架构建,比如Node.js + Express.js。

此外,值得指出的是,移动应用程序开发的黄金时期可能还没来。

对于初学者,也对于使用移动应用的人们来说,所有开发人员工作中有近一半是Web开发。相比之下,只有8%的工作涉及移动应用程序开发。
!()[ogit74i74.bkt.clouddn.com/1*6RsFHNgrzFyX-9p37FVtpA.jpeg]    49,525个开发者的职业分布,数据来自2016年StackOverflow调查的回答。

“这个也有移动应用”的宏伟愿景还没有到来。实际上,大多数智能手机用户已停止下载新应用。

当然 – 他们仍然使用应用。主要是脸书、谷歌地图和少数的其他应用。因此,对移动应用开发者的大部分需求集中在少数大型雇主。

这些移动开发工作的前景难以预测。开发、维护和分发移动应用程序的许多方面用Javascript都会更容易。因此,像脸书和谷歌这样的公司正大量投资于使用JavaScript构建这些工具的更好的工具。

截至2016年,几乎所有的开发都是web开发。一切都涉及到这个“网络”的大平台。下一波的你会在家与之对话的设备,以及从学校接你孩子的汽车 - 他们都会被网络连接在一起。

毫无疑问,这指向JavaScript。  

反对四:JavaScript不是一个在10天内写出来的一个只是玩玩的语言吗?

JavaScript有一个古怪的历史

你肯定会听到人们开它的玩笑。

我们也对C++又爱又恨。就像JavaScript一样,尽管这种恨存在,但是C++已经成功,而且现在它几乎无处不在。   所以如果有人曾经为难你因为你学JavaScript而不是什么“本周的精英语言”,只要记住C++创造者的名言:

“世界上只有两种编程语言:那些人们总是吐槽的,和没人使用的。” – Bjarne Stroustrup