2015年编程语言“钱途”盘点
如果你打算学习如何编写代码,会发现编程语言的绝对数量多得惊人,到底该学习哪门语言呢?本文比较了与不同编程语言有关的薪水、人气和就业前景,希望对你有一些帮助。
编程语言概述
在我们开始比较编程语言之前,不妨先看一下将要介绍的几门语言。
动态类型语言
通常认为动态类型语言对非编程人员来说更容易学用,因为它们很灵活。你不需要编写太多行代码,就能迅速从头开始构建起一个应用程序;也没有硬性 规定表明如何编写代码,才能让代码以你想要的方式运行。动态类型语言常常是解释型(非编译),这意味着运行中的应用程序可迅速体现你所作的变化,可以为你 节省时间。
一般来说,Web 应用程序通常是用动态语言编写的。
JavaScript
别将 JavaScript 与 Java 混为一谈;JavaScript 主要是一种客户端脚本语言,用于前端开发。JavaScript 在所有浏览器之间相互兼容,用来构建交互式 Web 应用程序,常常通过代码库(比如 jQuery)和前端框架(比如 AngularJS、Ember.js、React 及更多框架)来构建。
JavaScript 现在还可以通过 Node.js 平台,用作一种服务器端语言。虽然 Node.js 比较新,但社区的发展势头很猛。你还可以通过使用 PhoneGap 之类的框架,借助 JavaScript 来构建混合移动应用程序,而 Facebook 的 React Native 旨在让你可以借助 JavaScript 来构建原生移动应用程序。
捎带提一下,Facebook 的 React 还支持 JSX,这种 JavaScript 语法扩展可以像 JavaScript 那样编译。
Ruby
Ruby 旨在让开发员在高效工作的同时享有乐趣,它因 Ruby on Rails 框架而流行起来,这种全堆栈 Web 框架经过了优化,确保编程过程中不失乐趣。由于 Ruby 与英语语法很相似,Rails 又有让常见开发任务“在默认情况下”更容易完成的工具,许多人会建议将 Ruby 选为你的第一种编程语言。
Ruby 最常用于后端开发;像 Airbnb、Shopify、彭博社(Bloomberg)、Hulu、Slideshare 及更多热门网站就是用 Ruby on Rails 构建的。
Python
Python 是强烈建议初学者上手的另一种语言,它也是美国知名大学最流行的入门语言。开发员使用 Python 来构建桌面应用程序和 Web 应用程序,它还有用于数据挖掘的优秀工具。此外,Python 在学术界尤其备受欢迎,用于科学计算、数据分析和生物信息学等领域。
谷歌、Dropbox、Pinterest、Instagram、Reddit、BitTorrent、Civilization IV 及更多网站就是用 Python 构建的。
PHP
PHP 是一种服务器端脚本语言,通常被认为适合初学者上手,因为 PHP 代码要完成的任务比较容易概念化,所以学起来不难上手。大多数网站是用 PHP 构建的,因为这种语言专门面向 Web。
Facebook、维基百科、雅虎、Tumblr、WordPress 及更多网站就是用 PHP 构建的。
静态类型语言
众所周知,用静态类型语言构建的应用程序更易于扩展、更稳定、更易于维护。静态语言通常比较苛严(通过类型检查来发现错误),需要编写更多的代码来构建原型。游戏引擎、移动应用程序和企业级后端通常是用静态类型语言构建的。
Java
作为一种通用语言,Java 用来构建安卓应用程序、桌面应用程序和游戏。Java 还常常用作一种服务器端语言,面向企业级后端开发:《财富》500 强公司中 90% 使用 Java。
此外,Hadoop 是一种广为流行的基于 Java 的框架,用来存储和处理大数据,雅虎、Facebook 和亚马逊网络服务(AWS)等知名企业实施了该框架。
C
C 常常用来编写系统软件,是诸多操作系统的通用语。
C 影响了我们在本文中要介绍的几乎所有编程语言,尤其是 Objective-C 和C++。所以,如果你很熟悉C,其他流行语言学起来恐怕难度不大。由于C需要编写更复杂的代码来执行简单任务,如果初学者选择它作为第一种语言,可能很 难保持十足的劲头。不过,掌握C方面的知识对于编程工作肯定大有帮助。
Objective-C / Swift(面向 iOS 开发)
Objective-C 是基于C语言上的一层,让它具有静态性,但它也可以用于动态类型。苹果的 Swift 是一种静态语言,旨在与 Objective-C 兼容,但其静态类型让它对错误有更强的适应性。
Swift 的灵感源自 Python,旨在让编程新手易学易用。由于 Swift 比较新,我们在本文中主要介绍 Objective-C。
C++
C++是一种基于C的强大语言。它是为编写系统软件而设计的,不过也用来构建游戏/游戏引擎、桌面应用程序、移动应用程序和 Web 应用程序。C++功能强、速度快,所以连 Facebook 也用它开发了几个高性能高可靠性的组件。
许多款软件是用 C++ 构建的,包括 Adobe Systems、Amazon、Paypal、Chrome 及更多软件。C++酷似C,通常被认为初学者自学起来比较难。
C#
C#是为了用于微软的 .NET 框架而开发的,这种框架目前主要在微软 Windows 上运行。
C#用于 Web 开发、游戏开发和一般的微软开发。虽然微软在过去并不以跨平台兼容出名,不过初创公司 Xamarin 也在开发一个名为 Mono 的开源项目,旨在将 C# 移植到其他平台上,为广大 Linux 开发员带去更好的开发工具。最近,你还可以通过 Xamarin,使用 C# 来构建面向 iOS 和安卓的原生移动应用程序。
其他语言
SQL
SQL(结构化查询语言)是一种用来与数据库进行联系的查询语言。虽然 SQL 无法用来构建应用程序,但可以用来管理使用关系数据库管理系统(RDBMS)的应用程序中的数据。
就业机会
好了,现在你对编程语言有了一点了解,可能对它们所谓的难度也有了一点了解。不过,并非所有语言都有一样的需求或薪水。如果你学习编程的目的是获得就业机会,也不会被别人说某种语言学起起来多难打消念头,下面这些可以帮助你弄清楚应该学哪种语言。
从来自 indeed.com 网站分析招聘广告的薪水估计数来看,我们基本上可以将编程语言分为六档:
从这个结果来看,似乎 Objective C 的吸金能力最强,而 Java、Ruby、Python、C++和C也是不错的选择。此外,如果薪水是你关注的方面,那么 JavaScript、C#、SQL 和 PHP 似乎不是理想的选择。
平均薪水会受到许多因素的影响,比如需求(有多少工作岗位)、供给(有多少开发员掌握该语言),以及资历(初级开发员的薪水自然低于高级开发员),所以有必要在下任何结论之前,更深入地分析一下这些因素。
就业趋势
凭借你熟悉的那种编程语言,找到工作的可能性有多大?这里简要分析了来自 indeed.com 的就业趋势:
我们可以从中看到,Java、JavaScript 和 SQL 这三类开发员供不应求。尤其是,JavaScript 在这几年的发展相当迅猛,它在 2010 年超过了C#,如今与 Java 不相上下。
相比其他语言,面向 C# 开发员的工作岗位仍很多;对其他开发员的需求似乎相差无几。C++开发员的相对需求有所减少。
不过,如果你的目的是供职于初创公司,那么来自 indeed.com 的就业趋势不是准确的指标。AngelList 可以说是初创公司发布工作岗位的首选网站,于是我们根据 AngelList 上的软件开发员广告,分析一下对编程技能的需求。
同样,JavaScript 是需求量最大的技能,但初创公司似乎更青睐 Python 和 Ruby(on Rails),而不是 Java、C、C++或C#。
开发员供给市场
不妨看一下在线编程教练平台 Codementor 上的教练们擅长哪种语言:
当然,这绝对无法正确反映实际市场,但是应该让你可以大致了解情况。如你所见,Objective-C 专家非常稀缺,不过这一段时间来,移动应用程序行业一直很火爆。由于优秀的 Objective-C 开发员供不应求,他们的薪水自然比较高。
另一方面,PHP 方面的人才似乎供给充足,这意味着雇主们会有更多的选择,因而在薪水方面有更大的议价能力,但是我们发现它的需求量不如 Java、SQL 或 JavaScript 来得大。因此,PHP 开发员的薪水较低。
JavaScript 的情况比较特殊。尽管人才供给最多,但它在薪水档次中并非垫底,我们会在文章后面分析一下 JavaScript。
薪水区间
你已大致了解了每种语言的供需情况,不妨根据来自工作广告的薪水信息,看一下你有望获得的潜在薪水。数据基于来自 gooroo.io 的数据,薪水通常作为每份工作广告提供的薪水区间的平均值而获得。
你在这里可以看到,熟悉 Python、Ruby、C++或 Objective C 的开发员似乎有更高的起薪,但是涨薪空间也比较有限。Python 和 C++ 往往处于潜在薪水区间的较高端。
Java 和 JavaScript 的最低所出薪水与最高所出薪水之间的差异都很大。尤其是,截至 2015 年 4 月,JavaScript 为熟练开发员提供的潜在薪水最高,目前为 188168 美元。
特殊情况:JavaScript 框架
从上述数据来看,我们知道,JavaScript 开发员需求量很大,他们也有最高的潜在薪水,所以 JavaScript 开发员之间的标准差相当大。因而,仅仅拿 JavaScript 语言与其他编程语言作一番比较无法准确反映出如果你掌握 JavaScript,能拿多少薪水。
正如在编程语言概述中提到的,JavaScript 是一个大类。许多框架是为了便于前端网站开发而开发的,所以如果你光知道 JavaScript 和 jQuery,所拿的薪水可能不如熟知 JavaScript 框架的其他 JavaScript 开发员。
不妨看一下美国不同 JavaScript 框架开发员的平均薪水(React 和 Backbone 是库,而不是框架):
当然,这仅仅供你了解概况,indeed.com 的估计数略有不同。不过,我们可以从这里看到,熟知这些框架的开发员的薪水平均超过 102000 美元。只有掌握了 JavaScript 才能学习这些框架,因而掌握 JavaScript 是一项相当有“钱途”的技能。
再不妨看一下对掌握这些框架的开发员的需求:
Node.js 是一种后端平台,如果如果仅仅说到前端框架,你能看到 AngularJS 显然是赢家,需求猛增。因而,如果你想从事前端 JavaScript 开发,也许应该学习 AngularJS。
另一方面,React 是一项相当新的技术,所以它仍处于起势的阶段,可能会变得更抢手。从 indeed.com 来看,React 开发员的平均薪水为 117000 美元。
编程资源
如果你对开发界有所了解,那么可能知道得到其他开发员的帮助确实很重要、很有帮助,如果你打算自学的话更是如此。
加入相互帮助的社区无疑会你让未来的开发工作变得更轻松。
StackOverflow
StackOverflow 是全球广大开发员使用的最大的开发者社区,旨在帮助其他编程员或得到他们的帮助,所以我们自然会分析一种编程语言有多流行,同时也会分析这些语言的相应社区帮助有多大。
语言的人气
从 StackOverflow 上的标签关注者(tag follower)来看,我们能看出一种语言在当下的总人气:
我们在分析就业趋势后已经知道,Java 和 JavaScript 开发员的需求量最大,所以它们的标签关注者最多也就不足为奇。尤其是,Java 仍是 StackOverflow 中使用最多的标签,不过 JavaScript 似乎很有希望超过它。
SQL、Ruby 和 Objective-C 的关注者数量最少。由于苹果发布了 Swift,Objective-C 在今后几年可能发展有限。
StackOverflow 回答率
StackOverflow 有一条不成文的规定:你提出的问题得“措辞得当”,否则别人懒得回答。考虑到这一点,不妨看一下就每种语言而言你的问题被回答的可能性有多大:
从上述信息来看,虽然较少的 StackOverflow 用户关注C、SQL 和C++,但 60% 以上的相关问题得到了回答。那些懂行的人可能认为,C和 C++ 是高级语言,这意味着提问题的用户可能在编程方面比较有经验,知道如何以更适当的措辞提问题。另一方面,SQL 并不用来构建应用程序。
值得一提的是,StackOverflow 上的 Python 专家非常乐于助人。谁都知道初学者正确地提问题有难度;如上所述,Python 常常是推荐初学者上手的语言。不过,尽管如此,尽管是一种比较受欢迎的语言,Python 在 30 天内的回答率仍超过 60%。(Python 的头号回答者 Martijn Pieters 也是 Codementor 编程教练。)
另一方面,虽然 PHP 是一种受到广泛关注的语言,却是回答率最低的语言之一。这意味着,许多人在提 PHP 方面的问题,但不是很多人的问题得到了回答。
Github
一旦你从事开发工作,最终会明白:尽量最好为你自己的项目使用现有的解决方案。你通常可以从开源项目得到现有解决方案,而 Github 就是绝佳去处。用户可以启动自己喜欢的项目,项目的星数越多,它可能越有用。
因而,分析来自 Github 的数据后,我们还能确定使用不同类型的语言开发项目的相对容易程度。我们还了解了一种语言在多快地推出创新的新技术。言归正传,下面这个简单图形可以表明 Github 流行项目的分布情况:
很显然,JavaScript 是最耀眼的新工具,即使你不考虑所有的风格指南和教程。众所周知,JavaScript 是一种发展极快的语言,就框架和新技术而言流失率很高,以至于开发员可能觉得难以跟上 JavaScript 不断创新的步伐。此外,除了 Node.js 平台外,JavaScript 主要用于前端开发,所以它与 Ruby、Python、Java 和 PHP 之类的其他后端语言并不直接“竞争”。有鉴于此,难怪 JavaScript 与其他编程语言之间会存在如此大的差距。
另一方面,Ruby 和 Objective-C 也有许多开发工具和资源。有意思的是,我们在 StackOverflow 比较中可以看出,这两种语言都不如 Java 之类的语言来得流行,但开发员通常觉得开源项目更有用。如果你仔细看一下用每种语言编写的总体项目,这对 Objective-C 来说尤为如此:
此外,用C/C++编写的大多数开源项目并非面向C/C++开发本身DD它们就是为了帮助普通开发而编写的工具(比如说,最常用的 Python 解释器是 CPython,它是用C编写的)。正如在编程语言引言部分中提到,C/C++用来开发系统应用程序,所以 Github 上的开源项目是系统应用程序有其道理。不过,你可以从开源项目中学到好多东西。
最后,尽管是一种广泛使用的语言,但 PHP 在可用资源方面处于落后。至于C#,微软并不以开源做法出名。
各种编程语言的前景
一种编程语言在未来有多重要?从目前已了解的趋势来看,我们可以得到下列结论:
JavaScript
毫无疑问,JavaScript 只会变得越来越流行,尤其是鉴于它可用于后端开发,甚至有可能构建原生移动应用程序(通过 React Native)。JavaScript 继续以相当快的步伐获得更多的工具和更新版,所以可以预计它在将来仍会极其重要。
Ruby
初创公司钟爱 Ruby on Rails。Airbnb、Twitch 和 Hulu 等许多知名网站都是用 Rails 构建的,这意味着它们会需要 Ruby 开发员。此外,由于开发员以使用 Rails 为乐,又很容易上手,Rails 会继续受到编程新手们的追捧。
话虽如此,强势崛起的 Node.js 肯定会对 Ruby on Rails 的人气有所影响DDNode.js 在 Github 上已经赶超 Rails。虽然这并不绝对表明 Node.js 会赶超 Rails,但是我们应该指出,几年前,Rails 同样赶超了 Python 最大的后端开发 Web 框架 Django,而 Rails 的星数多过 Django。
此外,“同构”(isomorphic)应用程序这股新趋势可能会影响 Rails 的采用,因为据说这种开发方法可改善 Web 应用程序的性能。同构应用程序基本上需要在 Node.js 平台上运行,这个平台是用 JavaScript 编写的。只要精通一种语言(JavaScript)的好处也许会让一些潜在的新手不学 Ruby。谷歌的 Go 也是得到一些人关注的另一种后端语言。
然而,由于 Rails 继续经常得到更新版,它在一段时期内仍然很重要,尤其是由于它有一个忠诚的社区,成千上万的实用工具有助于简化开发工作。因而,尽管人气下降,但 Ruby 仍会坚守地盘。
Python
Python 颇受学术研究人员和数据科学家的欢迎;如前所述,许多学校选择通过 Python 让初学者学习编程知识。这意味着,Python 会继续稳步发展,依然很重要。因此,虽然 Python 不会像 JavaScript 那样迅猛发展,或者在人气和需求方面迎来同样的迅猛增长,但是它继续很强大DD不用说,谷歌是建立在 Python 上的。
PHP
这几年来,后端开发趋势一直离 PHP 渐行渐远,可是世界上 80% 的网站仍是用 PHP 构建的,这毕竟是一种为 Web 设计的语言。
不过,如果你上网搜索一下初学者应该学哪种编程语言,会发现开发员一般不推荐学 PHP。实际上,许多开发员显然很讨厌它。
PHP 社区在竭力摆脱名声欠佳的形象,为此推出了新的准则,教人们如何正确编写 PHP 代码,并开发了新工具,但总的来说,截至 2015 年,PHP 的未来似乎相当停滞不前(至少在美国是这样)。
Java
安卓对于 Java 继续是最受欢迎的编程语言起到了很大的推动作用,而大多数企业也喜欢 Java,因为它比较稳定、比较容易扩展。
随着 Spark(使用 Scala 语言)和 Cassandra(支持其他语言)这两种大数据管理框架日渐崛起,很难说 Hadoop 保持最流行的大数据管理框架这个头号还会多久,不过考虑到大企业通常不太愿意求变,Hadoop 不会消失。Java 编程语言同样如此。
因此,在未来几年,Java 会依然很强大,将是最重要的编程语言之一。
Objective-C
由于苹果发布了 Swift,Objective-C 只用于苹果产品,预计 Objective-C 在将来不会继续流行。不过,这并不意味着你在今年不该学 Objective-C,因为大多数面向 iOS 开发的开源项目仍是用 Objective-C 编写的。通常来说,使用你不了解的语言可不是什么好主意。
C
相比其他编程语言,C相当低级,但由于它是操作系统的通用语,仍会继续流行,因为许多开发工具是用C编写的,Linux 也是用C编写的。
SQL
SQL 是数据库管理员几乎普遍知道的语言。曾经一度,随着 MongoDB 和 Redis 等 NoSQL 服务大行其道,non-SQL 使用大数据计算平台(比如 Hadoop、Spark 和 Cassandra),SQL 似乎沦为边缘化。许多人哀号 SQL 将消亡。
显然不再是这样。因而,连 NoSQL 也不得不将自己定位成“不只是 SQL”(Not Only SQL)。
由于大数据的兴起,加上管理大数据有难度,SQL 比以往更炙手可热(你已经从就业趋势中知道这一点)。谷歌最近也更新了其 BigQuery 服务,所以现在每秒每张表最多能消化吸收 100000 行,而 BigQuery 就使用 SQL。自版本 1.3 以来,Spark 也有 Spark SQL 模块。
总之,SQL 再次体现其重要性,因为管理(不是存储)大数据离不开它。因而,不仅 SQL 无所不在,可以说 SQL 在未来一段时间会继续很重要。
C++
从性能和功能方面来看,C++仍被认为是最强大的语言(即使相比 Rust),它在某些领域可能会继续很重要,比如需要高性能的(比如游戏引擎)。最新标准(C++14)的重大修订版预计会在 2017 年发布,所以它仍是一种不断发展的语言。
将来,Rust 在系统编程的一些方面有可能会取代C++,因为 Rust 旨在能够开发出比 C++ 更安全的软件。此处(https://www.codementor.io/rust/tutorial/steve-klabnik-rust-vs-c-go-ocaml-erlang)进一步介绍了 Rust 与其他语言相比如何。眼下也是学习 Rust 的大好时机。
C#
在过去,局限于微软平台和作为闭源语言对 C# 很不利,但是 Mono 基本上解决了那些问题(不过 Mono 存在性能问题,最近的更新版有所改进)。
用过 C# 的开发员似乎很喜欢 C# 编程语言,所以它有强大的社区。不用说,C#是 Unity 3D 的主要语言,这种颇受欢迎的游戏引擎还可以用在 iOS 和 Linux 等操作系统上。
关于这一点,C#在美国之外的国家(比如英国)也比较受欢迎,用于企业开发。很显然,微软会让 C# 存活一阵子,确保它对 .NET 平台来说很重要。
结束语
编程初学者应该学习哪种语言?很显然,如果你想从事 Web 开发,免不了要学习 JavaScript,不管你喜不喜欢它。