查看原文
其他

还在纠结该从哪门编程语言学起?先来聊聊JavaScript

2017-03-10 大数据文摘 大数据文摘


大数据文摘作品,转载要求见文末

编译 | Aileen,yawei彭晗,蒋宝尚,钱天培


-------------------

【数据科学实训营】开课在即,

小班手把手实战辅导,

云平台7*24小时练习,

掌握数据科学家必备技能。

报名优惠最后一天,

详情见文末。

------------------


大多数人学习编程的旅程都是从深夜的一次度娘搜索开始的。

比如很多情况下会是搜索:“学习__(某种编程语言)”

但是他们是如何决定他们想要学习的语言种类的呢?

有些人这么想,“在硅谷,他们老用Java打趣。或许我也该去学学。”

或者是:

“Haskell现在这么火热,就Haskell吧。”

还有一些人是这样:

“给GO 代言的那只地鼠萌萌哒,学Go吧。”

Go的代言地鼠

至于剩下的那群人,可能会搜索以下内容:

“我应该先学习哪一门编程语言?”

这问题被问得太多了,现在可都有专门的图表供查询答案了。

图表:“我该先学哪门编程语言?”答案自测

决定你所学的第一门编程语言可能是一个有趣的过程----就像是玩“你是金庸小说里的哪个角色?”

但如果你只是因为小时候喜欢玩泥巴,所以就去学Ruby的话,我可得提醒你,这可不是个小决定。(注:Ruby因其功能简单但应用灵活而常被比作橡皮泥)

你将会花数百个小时来学习你的第一门编程语言(而且这也只是入门所需罢了),所以你需要慎重考虑以下几点:

  • 这门语言的就业市场

  • 这门语言的长远发展前景

  • 学习这门语言的难易程度

  • 你可以用这门语言开发什么项目(而且和你的朋友们分享,以便你能保持足够的学习动力)

每一年都会有新的编程语言涌现而出,随之而来的是关于这些新语言的学术论文,以及网络漫画。

一点也不夸张,就来看看这幅上个月新出的漫画吧,画的还不错的:

图表:这幅漫画通过描述一个王子救公主的故事调侃了每种编程语言的特点

当谈到第一门编程语言该学什么的时候,这选项可多了去了。将范围缩小一点,这里是过去12年,与学习编程相关的最常见的谷歌搜索结果:

图表:一些学习编程语言相关的谷歌搜索的频率变化趋势

Java的搜索频率时高时低。

Python逐渐成为最受欢迎的选择。

但是藏在这些下面的一个小不点儿,在过去的几年慢慢地在积累人气。它就是JavaScript。(作者把JavaScript比作欧美儿童绘本the Little Engine That Could中努力向上的小火车。)

在我谈论这些编程语言以前,让我先澄清一下:

  • 客观来说我不认为任何一种语言会优于其他语言

  • 我赞成程序员应该学会多门编程语言

  • 我认为首先他们应该学好一种语言。而且——你能从我标题猜到——这种语言应该是JavaScript。

让我们先从学校如何教编程谈起。


计算机科学入门


图表:学生所写程序质量与学习时间的关系

按照惯例,编程教学通常被归在计算机科学的范畴下 。而计算机科学则通常被看作是数学的延伸或者是与和电子工程学位的密不可分联系。

当然,你现在可能也听过:

“计算机科学教育不能让任何人成为编程专家,这就好比光学习画笔和颜料不能让人成为画家一样。”

——Eric S. Raymond

截止到2016年,很多大学仍然认为编程就是计算机科学的一部分,而计算机科学就是数学的一部分。

因此,很多入门性的编程课程侧重于低层次的抽象语言,比如C,或者是侧重于数学运算的语言,如MATLAB。

而计算机学院的老大们也依然持之以恒地根据年度编程语言排行榜来选择他们的教学语言, 比如TIOBE Index,或者是这张IEEE的:

图表:各种编程语言受欢迎程度排行榜

大多数排行榜看起来几乎和十年前几乎一模一样。

但即使在学术界,不同编程语言的地位也已发生了翻天覆地的变化。

在2014年,Python取代了Java成为在美国顶尖计算机科学项目里最为流行的教学语言。

图表:美国顶尖计算机科学项目所用教学语言排行

而另一个变化也必将会发生。

因为如果你看看工业界实际使用的语言,情况则大不相同:

图表:在Stack Overflow2016年的程序员调查中,JavaScript成为最受欢迎的编程语言

超过半数的程序员使用JavaScript。JavaScript对web的前端开发尤为重要,并且对于相应的后端开发也越来越重要。而且,它正迅速地扩展到游戏开发和物联网领域。

招聘启事中提及JavaScript的次数也多于除了Java外的其他语言:

图表:招聘启事中每个编程语言被提及的频率

我们开设我们开源社区的JavaScript课程也并非偶然。在过去的两年中,超过5000人通过Free Code Camp得到他们第一份程序员工作。

我提倡JavaScript并不是因为我在教它。我教授JavaScript是因为这是获得第一份程序员工作最可靠的途径。

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


因素一:就业市场

如果你学习编程纯粹是出于求知的好奇心,那么你可以跳过这个因素。但是如果你像大多数学习编程的人一样,想要用这项技能去找工作,这会是一份十分重要的考量。

正如我前面提到的,在招聘启事中,Java是被提及最多的编程语言。JavaScript则紧随其后位列第二。

但是JavaScript的情况是这样的:尽管它存在了将近20年,也只是最近才成为一个正式的编程工具。现今像Netflix,Walmart和PayPal这样的公司已经在用JavaScript编写他们所有的应用程序了。

因此,大量的公司正在招聘JavaScript开发人员,但是在就业市场上并没有这么多会JavaScript的程序员。

图表:不同编程语言对应岗位数量与程序员数量之比

每一个Java岗位平均有2.7个Java开发者竞争。PHP和iOS的竞争也是同等激烈。

但是对于每一个JavaScript岗位,平均只有0.6个JavaScript开发者来竞争。对于具备JavaScript的开发者来说他们十分抢手。


因素二:长远发展前景

平均每个JavaScript项目的Pull requests是每个Java,Python或者是Ruby项目的两倍。除此之外,JavaScript的增长速度比其他流行语言都快。(译者注:Github的使用者在对项目作出修改后需要通过pull requests来让其他合作人审核。)

图表:Github每种编程语言所编写项目的pull requests总量

JavaScript良好的发展环境还受益于来自Google,Microsoft, Facebook, and Netflix等公司大量的投资资金和天赋异禀的工程人才。

例如,TypeScript(一个静态类型的JavaScript的超集)有超过100个开源贡献者,他们中很多都是微软和谷歌的员工,并拿着工资的 。

对于Java来说,这种类型的公司间的合作就很少有了。甲骨文(通过对Sun Microsystems的兼并获得了Java业务)经常对那些试图扩展它的公司提出起诉。(译者注;甲骨文公司,全称甲骨文股份有限公司,是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩)


因素三:学习难易程度


图表:这是一幅模仿XKCD的漫画,描绘了学习各个编程语言的难易程度。

(译者注;XKCD被其作者兰道尔·门罗定义为一部“关于浪漫、讽刺、数学和语言的网络漫画”,被网友誉为深度宅向网络漫画。)

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

尽管在大学, 学生学到的第一门编程语言仍然是像Java和C ++这样的语言,但这几门语言可难学多了 。


因素四:你可以用它构建哪些项目

这是JavaScript真正牛逼的地方。 JavaScript可以在任何具有浏览器的设备上运行(设备的浏览器是运行JavaScript的平台)。 你可以使用JavaScript构建任何东西,并在任何地方分享它。

因为JavaScript的广泛应用,Stack Overflow的联合创始人阿特伍德提出了著名的阿特伍德定律:

“任何可以用JavaScript来写的应用,最终都将用JavaScript来写。”

每过一个月,阿特伍德定律的地位就更加稳固。

Java曾经承诺:它在任何地方都能运行。 你可能还记得Java Applet。 甲骨文在今年早些时候正式宣布了放弃Java Applet。

Python也遇到了同样的问题:“我怎么把我编写的游戏分享给我的朋友? 更好的是,有没有一种方式,能让我将这种游戏安装在我的手机上,以至于我可以在学校通过手机向孩子们展示,而孩子们没有必要安装它。“ – 在放弃用Python作为教学语言后, James Hague如是说。

与之成对比的是,我们开源社区的成员在Codepen的浏览器中编写了一些app。您可以点击并直接在浏览器中使用这些app:

http://s.codepen.io/adambeagle/debug/qOamaz


http://s.codepen.io/safx/debug/Ewcym


http://s.codepen.io/duttakapil/debug/BKGjOa


http://s.codepen.io/Megabyteceer/debug/qbXJMQ

先学好一门编程语言,然后再学习第二门语言。

如果你不停地从一种语言跳到另一种语言,你最终将什么都学不好。想要摆脱菜鸟阶段,你就需要熟练掌握你的第一门语言,然后你学习第二门语言的时候就会变得很轻松。

再之后,你可以扩大你的知识范围,并通过学习大量的语言成为一个更全面的开发人员

• 学习C语言能帮助你了解计算机内存管理方式,而且C语言在高性能计算中非常有用

• C ++非常适合游戏开发。

• Python适合用于理科和统计学 。

• 如果你想在大型科技公司工作,Java是很重要的。


但是,你还是要先学习JavaScript!

好的,现在我要来挑战不可能了!

——我将会回答一些来自评论区或是我预计大家会有的反对意见。


反对一:JavaScript难道不是运行地很慢吗?

从实用角度讲,JavaScript与高性能语言一样快。

它也几乎和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了,那就容易多了。” – AlexEwerlöf就学习TypeScript如是说


反对3:但我真的想做一个手机app

我仍然建议先学习JavaScript。

  1. JavaScript提供了一些用于专门制作手机app的工具,例如Angular Cordova和React Native。

  2. 为了编出真正有趣的app,你可能需要用到一个适当的后端,而这就需要用到一个适合的Web开发框架,如Node.js + Express.js。

此外,值得指出的是,手机app开发的黄金时期已经到头了。

首先,虽然人们用着手机app,但所有开发人员工作中有近一半是Web开发。 相比之下,手机app开发的工作只有少的可怜的8% 。

图表:2016年Stack Overflow调查中,49,525名程序员所从事的职业方向。

做什么事都有会一个应用程序来帮你”的宏伟愿景一直没有实现。事与愿违,现在大多数智能手机用户已停止下载新app了。

当然 - 他们仍然使用app。 但这些app主要是Facebook,Google地图和其他少数几个。 因此,对手机app开发者的大部分需求集中在少数大型雇主身上。

这些移动开发工作的前景难以预测。 而使用JavaScript可以更轻松地开发,维护以及推广手机app 。 因此,像Facebook和Google这样的公司正大量投资使用JavaScript开发app的更好的工具。

截至2016年,几乎所有的开发都是web开发。 一切都涉及到web这个大平台。在下一轮科技浪潮中即将出现的家用装备,以及从学校接你孩子回家的新型汽车,都将被网络连接在一起 。

这意味着我们需要JavaScript。


反对#4:JavaScript不是10天就被写好的小玩意儿吗?

JavaScript有一个离奇的历史。

你无疑会听到人们开JavaScript的玩笑,说这门语言来的太廉价了。(译者注:JavaScript是在10天内被开发出来的。)

好吧。很多人都喜欢找C ++的茬。 像JavaScript一样,即使被人讨厌,C ++也已经成功了,而且 它的应用几乎无处不在。

所以,如果有人曾经责难你怎么学了JavaScript而不是某一门本周精选编程语言,只要记住创建C ++那家伙的名言:

“世界上只有两类编程语言:人们抱怨的和压根没人用的。”

—— Bjarne Stroustrup

2014年,Python成为在美国顶尖计算机科学项目里最为流行的教学语言。

来参加数据科学实训营,用Python系统学习数据科学!(戳阅读原文了解更多)

寒小阳、加号、常老师3位资深讲师,

3位班主任与10+助教,

使用7*24小时云实验平台,

大型互联网公司真实案例,

14次直播教学 + 17次小班手把手实战辅导

——3月18日开课,今天报名优惠最后一天!

👇长按图片识别二维码,获取课程详情并报名

【课程咨询】

 请联系客服“牛妞”微信(ID:shujupeixun)

■ 电话15510583388


原文连接:

https://medium.freecodecamp.com/what-programming-language-should-i-learn-first-%CA%87d%C4%B1%C9%B9%C9%94s%C9%90%CA%8C%C9%90%C9%BE-%C9%B9%C7%9D%CA%8Dsu%C9%90-19a33b0a467d#.2342dsmbo



关于转载如需转载,请在开篇显著位置注明作者和出处(转自:大数据文摘 | bigdatadigest),并在文章结尾放置大数据文摘醒目二维码。无原创标识文章请按照转载要求编辑,可直接转载,转载后请将转载链接发送给我们;有原创标识文章,请发送【文章名称-待授权公众号名称及ID】给我们申请白名单授权。未经许可的转载以及改编者,我们将依法追究其法律责任。联系邮箱:zz@bigdatadigest.cn。
志愿者介绍

回复“志愿者”了解如何加入我们


往期精彩文章


点击图片阅读文章

手把手 | 用R分析宋词三百首 自己动手写个“机器诗人”

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存