2016年,有哪些适合你学习的编程语言?
译者:张天军
原文: What Programming Language Should a Beginner Learn in 2016?
本文为极客学院Wiki组织翻译,转载请注明出处。
时间:2016.3.18
简介
众所周知,理工类的人才一直是很紧缺并且有不错收入的。而且,从2007年到2012年,美国的在线招聘对软件方面的工作的需求涨了31%,这几乎是平均水平的3倍。美国劳工部的数据预计,软件开发的工作从2012年到2022年要继续涨22%,软件开发者的年收入中位数在2014年5月达到95,510美元。
如果你正考虑学习编程,各种编程语言的介绍可能让你难以招架 — 到底应该学哪门编程语言呢?希望这篇文章能从各种编程语言的收入,流行度,未来的前景方面给你一些启发。
以下是一个有趣的问答,也许能帮助你选择哪种语言是2016年适合你学习的语言。
编程语言一览
在我们对比各种语言之前,首先让我们来看一下包含了哪些语言。
动态语言
动态语言通常被人们认为更加适合初学者学习,因为它们更加多样化也更加有趣。你可以很快地用相对少的代码构建一个应用程序,在你希望用代码实现某个你想要的功能时,没有太多的强制规则限制。
由于动态语言通常是很高级的语言,你只需要话很少的时间去掌握编程语言的细节,从而让更多的精力集中于学习编程概念上,由于初学者对于能让学习成果立竿见影感到很有动力,这也是动态语言在初学者中很流行的另一个原因。
JavaScript
![](http://img0.tuicool.com/Af6VnmE.png!web)
别和Java搞混淆了,JavaScript是一门主要在客户端运行的脚本语言,用来做前端开发的。Javascript兼容所有的浏览器,一般通过使用比如jQuery的库和一些比如AngularJS,Ember.js,React等的前端框架来创建web应用。
由于Node.js平台的出现,Javascript 现在也可以作为一门服务器端语言了,虽然Node.js相对来说比较新,但该社区正在获得更多的关注。你也可以通过JavaScript的框架(比如:phonegap)来构建混合的移动应用,Facebook的React Native旨在让开发者通过JavaScript开发本地语言的移动应用。
然而,由于JavaScript的 untyped ,导致debug很困难,所以也被认为是一门很难的语言。它也有一些有类型的语言版本,比如:微软的TypeScript,或是React使用的JSX。
Ruby
![](http://img0.tuicool.com/3EzueaI.png!web)
为了让开发更加开心和高效地开发而设计的语言,Ruby因Ruby on Rails框架而流行,Ruby on Rails 是一个一站式的 Web 开发框架,为了开发者开发的便利而优化。Ruby代码阅读起来更像是在读英语,Rails的工具使得日常的开发任务更简单(这些工具方便使用,无需繁琐配置)。
Ruby 主要被用来做后端的开发,一些很流行的网站比如 Airbnb,Shopify,Bloomberg,Hulu,Slideshare,和更多的网站开始用Ruby on Rails构建后台。
Python
![](http://img2.tuicool.com/fmuaqmU.png!web)
Python 是另一门被强烈推荐给初学者的编程语言,是美国大学里入门编程语言最流行的。开发者可以用它来编写桌面端和服务器端的应用,它也有用来数据挖掘的很好的工具。另外,Python在科学计算,数据分析,生物信息等学术领域也非常流行。
Google,Dropbox,Pinterest,Instagram,Reddit,BitTorrent,Civilization IV 和更多的公司已经开始用Python构建软件了。
PHP
![](http://img1.tuicool.com/ZniaAzE.png!web)
PHP是一门服务器端的脚本语言,由于易于其代码掌握而通常被认为是对初学者友好的语言,PHP入门并不难。大部分网站曾经用过PHP构建,因为很大程度上这就是一门专门为Web开发设计的语言。
Facebook, Wikipedia, Yahoo!, Tumblr, WordPress等更多的网站曾用过PHP构建。
静态语言
用静态的类型的语言构建的软件通常以更易扩展,更稳定也更加好维护而著称。静态语言通常在通过类型检查而捕获错误方面更严格,需要更多的代码来构建一个原型。游戏引擎,移动应用和企业级的后台一般都是用静态的类型语言构建的。
Java
![](http://img1.tuicool.com/IFnqm2V.png!web)
作为一门通用功能的语言,Java被用来构建Android应用,桌面应用和游戏。Java也通常被用作服务器端的开发语言用来开发企业级的后台-90%的世界500强企业使用Java。
而且,Hadoop 也是一个基于Java的很流行的存储和处理大数据的框架,它也被Yahoo,Facebook,and Amazon这样的企业用于Web服务。
C
C 通常被用于系统软件的开发,也是操作系统的通用语言。
C语言几乎影响了所有我们介绍的编程语言,尤其是Objective-C和C++。所以如果你很了解C语言,你在学习其他语言时就不会有什么困难。由于使用C完成一个简单任务需要更复杂的代码,初学者也许会发现如果他们如果把C作为入门语言,会很难保持学习的动力。然而C语言的有关知识会使一个程序员受益匪浅。
Objective-C / Swift (for iOS development)
![](http://img1.tuicool.com/JNrYrmb.png!web)
Objective-C 是在C语言上进行了一层封装,使得它变成静态,但同时也能用于动态类型。苹果的Swift是一门设计成与Objective-C兼容的的静态语言,但它的静态类型使得他更不容易出错。
受Python的启发,Swift是想成为编程新手易于掌握的语言,也是按照能修复一些Objective-C的问题的方向设计的。
C++
C++是一门基于C的强大语言。它是设计用来编写系统软件的,但也用来编写游戏或者是游戏引擎,桌面应用,移动应用和web应用。C++非常强大和快速,所以以至于Facebook用它开发了一些高性能的,可靠的组件。
许多软件的部分是用C++来构建的,包括Adobe系统,Amazon,Paypal,Chrome等等。想C一样,C++通常被认为是初学自学比较难的,所以如果你决定把C++作为你学习的第一门百年城语言,最好是通过在一些分享会上找个好的导师,或是找一个C++的编程老师教导一下。
C
C# 是被设计成在.NET框架在开发的一门语言,主要在微软的Windows上运行。
C# 被用来进行web开发,游戏开发和一些微软通用的开发。尽管微软在过去并不提倡跨平台兼容,Xamarin一直致力于一个名为Mono开源项目,这个项目目的是把C#移植到其他平台上和给Linux开发者提供更好的开发工具。你现在也可以通过Xamarin使用C#为iOS和Android构建本地移动应用。
其他
SQL
![](http://img2.tuicool.com/YFvUFjV.png!web)
SQL,也叫结构化查询语言,是一种和数据库交流的查询语言。尽管SQL不能被用来构建应用,但它被用来管理应用中的关系型数据管理系统的数据。
工作机会
现在你对编程语言有了一点了解,也许还稍微有些难懂。但不是所有的编程语言都有同样的需求和薪水。如果你学习编程的目标是寻找工作机会,你是不会轻易因这中语言难学而被别人劝阻的,以下几点也许能帮你搞清你应该学习那种语言。
来自indeed.com的招聘广告基于薪水的数据,我们大概能把编程语言分为9个梯度:
基于这些结果,显示出Swift能给你最多的收入,然而Java,Ruby,Python,C++也是不错的选择。另外,如果你考虑的是收入,那似乎JavaScript,C#,SQL和PHP不是理想的选择...不是吗?
平均工资会受到很多因素,比如的需求(工作的招聘有多少),比如供给(有多少开发者了解这门语言)和经验(一个初级开发者比高级开发者挣的少)的影响。所以在我们得出结论之前多考虑这些因素不失为一个好主意。
工作趋势
你有多大可能用你知道的这门语言找到工作?一下是一些indeed.com提供的工作趋势图。
我们能从此图看到Java,JavaScript和SQL开发者的需求量很高。JavaScript尤其在过去的几年里有着明显的增长,由于它在2010年的增长,如今已经和Java并驾齐驱了。
关于C#开发者的招聘海报相对于其他语言还是很多的,对其他语言的开发者的需求似乎很接近。C++开发者会发现其相关需求有所下降。
但是,如果你的目标是在一家创业公司工作,那么也许来自indeed.com的有关工作趋势的数据并不能给你一个好的建议。AngelList是一个获得关于工作信息更好的去处,那么让我们来看一下AngelList发布的关于不同编程语言的软件开发者的市场需求吧。
JavaScript再一次地成为需求最大的编程语言,但是相比于Java,C,C++,C#而言,创业公司似乎更加青睐Python和Ruby(on Rails)。
软件开发者的市场供应情况
让我们看一下Codementor提供的开发者所掌握的语言种类的数据吧:
当然,这绝不是对实际市场的准确描述,但这也能给你一个关于市场上具体情况的大概了解。我们可以发现,虽然移动应用开发已经爆炸式增长了一段时间,但精通Objective-C的专家却寥寥无几。由于市场上缺乏好的Objective-C的开发者,他们的薪水也就自然水涨船高了。
另一方面,市场上的PHP开发者似乎有着一个健康的供应数量,这就意味着雇主可以有更多的选择,并且能在薪水方面有讨价还价的余地,但我们也发现它并没有如同Java,SQL或是JavaScript一样的市场需求。因此PHP开发者挣的相对少一些。
JavaScript是一个特例。尽管供给最大,但它并不在收入最低的梯队里,文章后面我们会对JavaScript进一步观察。
薪资范围
现在你已经对每种语言的市场供需有了大概了解,让我们基于招聘广告薪水的有关信息,再来看看你的薪资潜力有多大。这个数据来自于 gooroo.io ,从中我们了解到一种语言的薪水高低是从该语言的单个招聘广告的薪水演化而来。
从这我们能发现那些会Ruby,C++或者Java的开发者似乎有着更高的起薪。Python和Ruby的薪水潜力似乎是最大的,这也就意味着优秀的Ruby/Python开发者更加稀缺,需求量也更大。JavaScript在薪水潜力方面似乎经历了一个大下滑,在2015年4月的时候它高达188,168美元的年薪,但是现在只有大约124,000美元的年薪。然而JavaScript保持了一个特例,我们稍后会加以阐述。
特例:JavaScript框架
仅仅比较把JavaScript开发人员挣的收入同其他编程语言做比较的这种行为其实好比管中窥豹。
如同我们在编程语言一览众提到过的,JavaScript是一个大类。许多框架被开发出来用于网站的前端开发,所以你如果仅仅了解JavaScript和jQuery,你可能就比那些会开发JavaScript框架的开发者挣的少。
让我们看看在美国不同的JavaScript框架的开发者的平均薪水情况吧(React和Backbone是库,而非框架,Nodejs更像是一个开发环境);
平均工资现在看起来并不糟糕。特别是React,有着一个非常漂亮的数据。当然这只是为你提供一个想法,indeed.com提供的数据可能略微不同,平均至少105,000美元。但你必须会JavaScript才能学习这些技术,这也使得JavaScript成为一种收入不错的技能。
让我们看看有关这些框架的相应的开发者的需求吧:
Node.js是做后端开发的,所以如果仅仅是对前端框架而言,你会发现AngularJS是需求最旺盛的赢家。因此,如果你想做前端开发,你应该学学AngularJS。
另一方面,React是一门相对新的技术,发展势头很猛,早期和AngularJS分庭抗礼。它可能仍在以迅猛的势头发展,有可能以后会需求更广,这是由于React的性能总体比AngularJS要好。
编程资源
如果你对开发者的世界有一些了解,那么你很可能知道其他开发者对你的帮助是至关重要的,尤其是如果你打算自学编程。
如果你成为开发者社区的一员,这绝对会使你开发的过程更加顺畅。
StackOverflow
StackOverflow 是全世界开发者所使用的最大的能互相取得帮助的开发者社区,所以我们自然会对于一门编程语言的流行度和体量做一个检测,也会关注这门语言的社区能给开发者有多大的帮助。
语言的受欢迎程度
基于StackOverflow上的关注者,我们能断定一门语言的大体受欢迎程度:
我们已经可以从职位需求趋势中了解Java和JavaScript开发者的需求量最高,所以它们的关注者最多也不足为奇。JavaScript是StackOverflow上关注量最多的,已经超过Java。
SQL,Ruby和Swift的关注着最少,很可能是因为Ruby主要是只能用于web开发,而Swift是一门相对新的开发语言。
StackOverflow的问题回答率
StackOverflow有一个不成文的规定,那就是你必须措辞“正确”地提问,否则人们就不会回答你的问题。牢记这条原则,让我们看看每种语言的提问的回答率:
基于以上信息,尽管只有相对少的StackOverflow的用户关注C,SQL和C++,但超过60%的相关问题也得到了答案。那些知情者可能会争论说C和C++是很先进的语言,从而问问题的用户很可能是更有编程经验的,也知道怎样措辞提问。另一方面来说,SQL并不是用来构建应用的一门语言。
值得一提的是那些Python和Ruby的开发者在StackOverflow上得到了很多的支持。初学者一般都不太会正确地提问,如果之前提到的那样,Python和Ruby的是初学者的最佳入门语言。然而,除了这两门语言是相对流行的语言之外,他们大概都有接近30天内60%的问题回答率。(Python的头号问题回答者是Martijn Pieters,他也是一个很好的编程导师。)
另一方面,PHP作为一门被广泛关注的语言,却有着最低的问题回答率。这意味着很多人问有关PHP的问题,但能得到答案的人却不多。
GitHub
一旦你进入开发者的行当,你将不可避免地发现到:最好是尽可能地在你的项目中使用已经存在的解决方案。你一般从一些开源的项目中或者这些解决方法,GitHub是获取这些开源项目的一种途径。用户可以给他们所喜欢的项目打分,越多的分数意味着这个项目可能越有用。
因此,可以从GitHub存在的数据中我们也可以决定使用不同种类的语言来使得开发相对容易一些。我们也能对一门语言在一些新技术的改革方面的速度有个了解。不用大费周章,这里既有一个相对简单的图表来展示GitHub上的流行项目;
很明显,JavaScript有着最新最亮的工具,即使你不考虑各种文档,学习手册和入门教程。JavaScript还是以极度的快速变化著称的语言,它的框架变化率很高,一些新的技术会使开发者觉得很难跟上JavaScript不断革新的步伐。另外,它也不是直接和像Ruby,Python,Java和PHP一样的后端开发语言直接较量。正是如此,JavaScript会和其他语言有如此大的鸿沟也就不足为奇了。
Ruby和Objective-C在另一方面来说也有很多工具和资源来进行开发。有趣的是,我们在StackOverflow的比较中发现这两种语言都不如Java那么广泛的受欢迎,但是开发者通常发现一些关于他们的开源项目很有用。如果你查看用各种语言写的开源项目的话,这对于Objective-C来说尤为如此。
除此之外,大部分的用C/C++写的开源项目不是仅仅为了C/C++项目本身用的,而是为开发提供了一种通用的工具(例如:适用范围最广的Python解释器是CPython,这就是用C写的)。之前的语言简介里提到的C/C++大部分都用于系统应用的开发,所以那些GitHub上的开源项目是系统工具也就说得通了。另外,你还可以从开源项目中学到很多东西。
最后,PHP尽管是一门应用广泛的语言,但因在学习资源方面的缺乏而给它拖后腿了。至于说C#,微软已经在为它的开源服务而加大力度了,所以在不久的将来,我们很可能会在GitHub上看到C#更多的出现。
每种语言的未来前景
到底一门编程语言在未来将会导致多大的关系呢?首先,一门语言的未来很大程度上取决于它的社区的成长情况,因为新鲜血液的注入率和吸收率是保持这门语言流行并且持续获得资源的关键。因此,让我们来看看人们对那些语言的学习最为关注:
似乎Python, JavaScript, C#和 Swift的受关注度增长最为迅速。基于现阶段我们了解的趋势,我们可以得出以下结论:
JavaScript
毋庸置疑,JavaScript的关注度即将增长,尤其是现在它也可以用来开发后台,甚至能用来构建本地语言的移动应用(通过使用React Native)。JavaScript将持续地获得更多的开发工具,并且以相当快的速度升级着,所以你可以料想到它将在仍然会极度的重要。
Ruby
创业公司喜爱Ruby on Rails。许多著名的网站比如:Airbnb, Twitch, Hulu等,都用Rails构建网站,这也意味着他们需要Ruby的开发者。另外,既然觉得使用Rails开发很有趣并且它也很容易学会,Rails将会继续在编程新人中很流行。
那就意味着Node.js的崛起必然会对Ruby on Rails的流行度有一个冲击-Node.js已经在GitHub上超越Rails了。当然这也不是Node.js超越Rails绝对的迹象,我们应该注意到前些年Rails也超越了Python的最大的后端开发的web框架:Django,GitHub上Rails比Django的评分更高。
甚而有之,一种新的“同态”应用软件的趋势很可能会影响到Rails的普及,这种趋势提倡改善web应用的性能。同态应用需要在Node.js的平台上运行-这就是要使用同样在前端使用的JavaScript语言。这样只需要通晓一门语言(JavaScript)的要求可能会使一些想学Ruby的新人转而学JavaScript。Google的Go语言也是另一门后端的开发语言,它也正在得到越来越多的关注。
然而,既然Rails能持续获得更新,它仍将保持关注度,尤其是因为他有一个忠实的社区提供海量且有用的开发工具来使得开发变得更容易。因此,抛开受欢迎成都不谈,Ruby也将在未来一段时间内榜上有名。
Python
Python在学院派学者和数据科学家中很流行,如同之前提到的,许多学校向初学者推荐Python。这意味着Python将持续稳定增长并且保持相关度。然而Python的进化速度并不快,也没有JavaScript那样的爆炸性的需求增长,所以它讲持续的稳健自己的地位,尤其是在数据科学家们的高要求之下。
PHP
这些年后端开发的趋势已经从PHP转到别的语言上了,但是如今80%的线上网站仍然是用PHP构建的-它毕竟是一门专为web开发设计的语言。
然而,如果你用Google搜索初学者应该学哪门语言,你也许会发现那些开发者一般不推荐你学习PHP。事实上,许多开发者显然很讨厌PHP。
PHP社区正试图用新的关于“怎样正确地使用新的开发工具编写PHP程序的教程”来摆脱它的坏名声,但是总体来说PHP的未来似乎相对停滞不前,至少在2015年的美国是这样。希望PHP7能使它的社区重新焕发活力,即使众所周知这个社区相对分散。
Java
Android 使得Java在流行语言中有了大爆发,大多是企业因Java的稳定和扩展性而对它钟爱有加。
随着Spark(用Scala语言)和Cassandra(支持其他语言)处理大数据的框架的崛起,将很难说Hadoop作为最流行的大数据系统还能统治多久了,但是根据企业出来的数据大小,Hadoop并不会消亡。同样的情况也适合Java,由于Java有一些极佳的后台开发工具并且Java更多的为企业开发着想。
因此,Java在未来几年将继续作为最流行的编程语言而坚挺下去。
Objective-C/Swift
由于苹果发布的Swift和Objective-C仅仅只服务于苹果的产品,我们不能期望Objective-C在未来能坚持多久。然而只要你继续使用苹果的产品,Swift就必然将在来未来流行。
然而,这也不意味着你在2016年就不应该学习Objective-C,由于大部分的iOS的开源项目都仍是用Objective-C编写的。所以总体上来看,使用一些你不了解的东西并不是一个明智的选择,如果你会了Swift,那么学习Objective-C并不是难事,反之亦然。
C
C相对与其他编程语言来说是一门相对低级的编程语言,但既然它是操作系统的构建语言,它就依然会存在下去,因为许多开发工具仍然是用C写的,Linux也是用C写的。
SQL
SQL 几乎是所有的数据库管理员都了解的语言。一段时间里,SQL似乎在例如MongoDB和Redis这种NoSQL服务兴起的时候被遗忘了,随着大数据计算平台如Hadoop,Spark和Cassandra的non-SQL的使用,许多人叫嚣着说SQL语言将要灭亡了。
很明显并不是这样。其实,即使NoSQL仍然需要重新定位自己为“不仅仅是SQL”。
随着大数据的兴起,管理大数据的难度也陡然上升,SQL比以往更加炙手可热了(你已经了解了工作机会的趋势)。Google最近也升级了它的BigQuery服务,使得它每秒每张表能处理高达100,000行的记录,BigQuery用的就是SQL。Spark自从1.3版本后也有了Spark的SQL模块。
总而言之,SQL又活跃起来了,这是因为需要用它来管理而非存储大数据。因此,虽然不是说SQL在哪都会用到,但是说SQL在相当长的一段时间内会榜上有名也不足为过。
C++
C++仍然被认为是在性能和能力范围方面最出色的编程语言(即使是相对与Rust来说),C++很可能在一些对性能要求很高的领域(比如:游戏引擎)仍然流行。一个先今主要的标准(C++14)被认为将在2017年发布,所以它仍是一门在进化的语言。
在未来,Rust也许将会在系统编程的某些领域取代C++,由于Rust旨在相对于C++能够编写出更少缺陷的软件。如果你是一个高级的开发者,现在也许是一个学习Rust的好时机。
C
由于微软平台的限制和不开源,这没有给C#帮助,但是Mono几乎解决了这些问题(尽管Mono有一些性能问题,最近的更新已经解决了这些问题)。
C#的开发者似乎很喜欢C#这门语言,所以它有着很强的社区支持。更别说C#是Unity 3D的主要开发语言了,Unity 3D是一个相当火爆的游戏引擎,它可以兼容iOShe Linux等系统。Unity3D作为一个独立游戏引擎的崛起使得C#的未来更加光明,Unity3D也能用来开发虚拟现实的应用。由于虚拟现实是很有前景的,所以C#一定会有一个相当好的未来。
值得一提的是,C#在一些比如美国,英国的国家,做企业级开发也很流行。很明显微软将会是C#保持活力并且使它在.NET平台上存活,微软已经大胆地开源了这个项目,使得开发者能更容易地了解和利用这个平台。
结论
到底编程初学者应该学哪门语言呢?很显然,如果你希望做web开发,你就不可避免地要学习JavaScript,无论你是否喜欢它。如果你希望做web的后台开发,你还必须学习一些SQL语言。
进一步说,如果你想从一些网站上爬虫数据或者你对数据科学比较感兴趣,Python可能是一个不错的选择。如果你想为企业开发工作,那么Java是一个好的去处。如果你对构建产品不是那么感兴趣,而对工作机会更加青睐,也许SQL是你不错的开始(尤其是如果你很喜欢数学的话);
总而言之,2016年应该学哪门语言将最终取决于你具体想干什么。
如果你想学习怎样编程,并且能确定你已经掌握了有关学习资料的话。可以关注Udemy的#1编程课程,该课程有一对一的专门老师教导。点击了解更多 一对一编程教学 来发现更多信息吧!