编译 | Aileen,yawei,彭晗,蒋宝尚,钱天培
大多数人学习编程的旅程都是从深夜的一次度娘搜索开始的。
比如很多情况下会是搜索:“学习__(某种编程语言)”
但是他们是如何决定他们想要学习的语言种类的呢?
有些人这么想,“在硅谷,他们老用Java打趣。或许我也该去学学。”
或者是:
“Haskell现在这么火热,就Haskell吧。”
还有一些人是这样:
“给GO 代言的那只地鼠萌萌哒,学Go吧。”
Go的代言地鼠
至于剩下的那群人,可能会搜索以下内容:
“我应该先学习哪一门编程语言?”
这问题被问得太多了,现在可都有专门的图表供查询答案了。
图表:“我该先学哪门编程语言?”答案自测
决定你所学的第一门编程语言可能是一个有趣的过程----就像是玩“你是金庸小说里的哪个角色?”
但如果你只是因为小时候喜欢玩泥巴,所以就去学Ruby的话,我可得提醒你,这可不是个小决定。(注:Ruby因其功能简单但应用灵活而常被比作橡皮泥)
你将会花数百个小时来学习你的第一门编程语言(而且这也只是入门所需罢了),所以你需要慎重考虑以下几点:
这门语言的就业市场
这门语言的长远发展前景
学习这门语言的难易程度
你可以用这门语言开发什么项目(而且和你的朋友们分享,以便你能保持足够的学习动力)
每一年都会有新的编程语言涌现而出,随之而来的是关于这些新语言的学术论文,以及网络漫画。
一点也不夸张,就来看看这幅上个月新出的漫画吧,画的还不错的:
图表:这幅漫画通过描述一个王子救公主的故事调侃了每种编程语言的特点
当谈到第一门编程语言该学什么的时候,这选项可多了去了。将范围缩小一点,这里是过去12年,与学习编程相关的最常见的谷歌搜索结果:
图表:一些学习编程语言相关的谷歌搜索的频率变化趋势
Java的搜索频率时高时低。
Python逐渐成为最受欢迎的选择。
但是藏在这些下面的一个小不点儿,在过去的几年慢慢地在积累人气。它就是Java。(作者把Java比作欧美儿童绘本the Little Engine That Could中努力向上的小火车。)
在我谈论这些编程语言以前,让我先澄清一下:
客观来说我不认为任何一种语言会优于其他语言
我赞成程序员应该学会多门编程语言
我认为首先他们应该学好一种语言。而且——你能从我标题猜到——这种语言应该是Java。
让我们先从学校如何教编程谈起。
计算机科学入门
图表:学生所写程序质量与学习时间的关系
按照惯例,编程教学通常被归在计算机科学的范畴下。而计算机科学则通常被看作是数学的延伸或者是与和电子工程学位的密不可分联系。
当然,你现在可能也听过:
“计算机科学教育不能让任何人成为编程专家,这就好比光学习画笔和颜料不能让人成为画家一样。”
——Eric S. Raymond
截止到2016年,很多大学仍然认为编程就是计算机科学的一部分,而计算机科学就是数学的一部分。
因此,很多入门性的编程课程侧重于低层次的抽象语言,比如C,或者是侧重于数学运算的语言,如MATLAB。
而计算机学院的老大们也依然持之以恒地根据年度编程语言排行榜来选择他们的教学语言, 比如TIOBE Index,或者是这张IEEE的:
图表:各种编程语言受欢迎程度排行榜
大多数排行榜看起来几乎和十年前几乎一模一样。
但即使在学术界,不同编程语言的地位也已发生了翻天覆地的变化。
在2014年,Python取代了Java成为在美国顶尖计算机科学项目里最为流行的教学语言。
图表:美国顶尖计算机科学项目所用教学语言排行
而另一个变化也必将会发生。
因为如果你看看工业界实际使用的语言,情况则大不相同:
图表:在Stack Overflow2016年的程序员调查中,Java成为最受欢迎的编程语言
超过半数的程序员使用Java。Java对web的前端开发尤为重要,并且对于相应的后端开发也越来越重要。而且,它正迅速地扩展到游戏开发和物联网领域。
招聘启事中提及Java的次数也多于除了Java外的其他语言:
图表:招聘启事中每个编程语言被提及的频率
我们开设我们开源社区的Java课程也并非偶然。在过去的两年中,超过5000人通过Free Code Camp得到他们第一份程序员工作。
我提倡Java并不是因为我在教它。我教授Java是因为这是获得第一份程序员工作最可靠的途径。
但是Java适合你么?它是否值得成为你的第一个编程语言?让我们再来探讨我之前提到的那些因素吧。
因素一:就业市场
如果你学习编程纯粹是出于求知的好奇心,那么你可以跳过这个因素。但是如果你像大多数学习编程的人一样,想要用这项技能去找工作,这会是一份十分重要的考量。
正如我前面提到的,在招聘启事中,Java是被提及最多的编程语言。Java则紧随其后位列第二。
但是Java的情况是这样的:尽管它存在了将近20年,也只是最近才成为一个正式的编程工具。现今像Netflix,Walmart和PayPal这样的公司已经在用Java编写他们所有的应用程序了。
因此,大量的公司正在招聘Java开发人员,但是在就业市场上并没有这么多会Java的程序员。
图表:不同编程语言对应岗位数量与程序员数量之比
每一个Java岗位平均有2.7个Java开发者竞争。PHP和iOS的竞争也是同等激烈。
但是对于每一个Java岗位,平均只有0.6个Java开发者来竞争。对于具备Java的开发者来说他们十分抢手。
因素二:长远发展前景
平均每个Java项目的Pull requests是每个Java,Python或者是Ruby项目的两倍。除此之外,Java的增长速度比其他流行语言都快。(译者注:Github的使用者在对项目作出修改后需要通过pull requests来让其他合作人审核。)
图表:Github每种编程语言所编写项目的pull requests总量
Java良好的发展环境还受益于来自Google,Microsoft, Facebook, and Netflix等公司大量的投资资金和天赋异禀的工程人才。
例如,Type(一个静态类型的Java的超集)有超过100个开源贡献者,他们中很多都是微软和谷歌的员工,并拿着工资的。
对于Java来说,这种类型的公司间的合作就很少有了。甲骨文(通过对Sun Microsystems的兼并获得了Java业务)经常对那些试图扩展它的公司提出起诉。(译者注;甲骨文公司,全称甲骨文股份有限公司,是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩)
因素三:学习难易程度
图表:这是一幅模仿XKCD的漫画,描绘了学习各个编程语言的难易程度。
(译者注;XKCD被其作者兰道尔·门罗定义为一部“关于浪漫、讽刺、数学和语言的网络漫画”,被网友誉为深度宅向网络漫画。)
大多数程序员都同意高级脚本语言相对容易学习。 Java以及Python和Ruby都属于这个类别。
尽管在大学, 学生学到的第一门编程语言仍然是像Java和C ++这样的语言,但这几门语言可难学多了 。
因素四:你可以用它构建哪些项目
这是Java真正牛逼的地方。 Java可以在任何具有浏览器的设备上运行(设备的浏览器是运行Java的平台)。你可以使用Java构建任何东西,并在任何地方分享它。
因为Java的广泛应用,Stack Overflow的联合创始人阿特伍德提出了著名的阿特伍德定律:
“任何可以用Java来写的应用,最终都将用Java来写。”
每过一个月,阿特伍德定律的地位就更加稳固。
Java曾经承诺:它在任何地方都能运行。 你可能还记得Java Applet。甲骨文在今年早些时候正式宣布了放弃Java Applet。
Python也遇到了同样的问题:“我怎么把我编写的游戏分享给我的朋友?更好的是,有没有一种方式,能让我将这种游戏安装在我的手机上,以至于我可以在学校通过手机向孩子们展示,而孩子们没有必要安装它。“ – 在放弃用Python作为教学语言后, James Hague如是说。
与之成对比的是,我们开源社区的成员在Codepen的浏览器中编写了一些app。您可以点击并直接在浏览器中使用这些app:
如果你不停地从一种语言跳到另一种语言,你最终将什么都学不好。想要摆脱菜鸟阶段,你就需要熟练掌握你的第一门语言,然后你学习第二门语言的时候就会变得很轻松。
再之后,你可以扩大你的知识范围,并通过学习大量的语言成为一个更全面的开发人员
学习C语言能帮助你了解计算机内存管理方式,而且C语言在高性能计算中非常有用
C ++非常适合游戏开发。
Python适合用于理科和统计学 。
如果你想在大型科技公司工作,Java是很重要的。
但是,你还是要先学习Java!
好的,现在我要来挑战不可能了!
IT行业的道路固然是充满了阳光了,一路上充满了美景,但是也充满了艰苦和崎岖,在突破了之后一路的阴霾,云霄之上,必然是一番广阔的云海。
给正在学习或者即将学习Java的同学推荐一下,Java要学到什么程度才能找工作,或者说Java最新的学习路线
不管是自学还是报班,学习不要走马观花的学,每个知识重点大纲,就是学习路线都是根据每一天市场上多数公司用到的新技术整理,在学习的时候还需要结合练习题来做