2015年編程語言“錢途”盤點
科學技術工程數學(STEM)人才供不應求、薪水豐厚,這早已不是什么新聞。2007 年至 2012 年,美國網上發布的軟件工作崗位增加了 31%,增長速度是總體工作崗位的近 3 倍。美國勞工統計局估計,從 2012 年至 2022 年,軟件開發員崗位會繼續以 22% 的速度增加,截至 2014 年 5 月,應用軟件開發員的中位數年薪就達到 95510 美元。
如果你打算學習如何編寫代碼,會發現編程語言的絕對數量多得驚人,到底該學習哪門語言呢?本文比較了與不同編程語言有關的薪水、人氣和就業前景,希望對你有一些幫助。
編程語言概述
在我們開始比較編程語言之前,不妨先看一下將要介紹的幾門語言。
動態類型語言
通常認為動態類型語言對非編程人員來說更容易學用,因為它們很靈活。你不需要編寫太多行代碼,就能迅速從頭開始構建起一個應用程序;也沒有硬性 規定表明如何編寫代碼,才能讓代碼以你想要的方式運行。動態類型語言常常是解釋型(非編譯),這意味著運行中的應用程序可迅速體現你所作的變化,可以為你 節省時間。
一般來說,Web 應用程序通常是用動態語言編寫的。
JavaScript
別將 JavaScript 與 Java 混為一談;JavaScript 主要是一種客戶端腳本語言,用于前端開發。JavaScript 在所有瀏覽器之間相互兼容,用來構建交互式 Web 應用程序,常常通過代碼庫(比如 jQuery)和前端框架(比如 AngularJS、Ember.js、React 及更多框架)來構建。
JavaScript 現在還可以通過 Node.js 平臺,用作一種服務器端語言。雖然 Node.js 比較新,但社區的發展勢頭很猛。你還可以通過使用 PhoneGap 之類的框架,借助 JavaScript 來構建混合移動應用程序,而 非死book 的 React Native 旨在讓你可以借助 JavaScript 來構建原生移動應用程序。
捎帶提一下,非死book 的 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。
非死book、維基百科、雅虎、Tumblr、WordPress 及更多網站就是用 PHP 構建的。
靜態類型語言
眾所周知,用靜態類型語言構建的應用程序更易于擴展、更穩定、更易于維護。靜態語言通常比較苛嚴(通過類型檢查來發現錯誤),需要編寫更多的代碼來構建原型。游戲引擎、移動應用程序和企業級后端通常是用靜態類型語言構建的。
Java
作為一種通用語言,Java 用來構建安卓應用程序、桌面應用程序和游戲。Java 還常常用作一種服務器端語言,面向企業級后端開發:《財富》500 強公司中 90% 使用 Java。
此外,Hadoop 是一種廣為流行的基于 Java 的框架,用來存儲和處理大數據,雅虎、非死book 和亞馬遜網絡服務(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++功能強、速度快,所以連 非死book 也用它開發了幾個高性能高可靠性的組件。
許多款軟件是用 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++開發本身――它們就是為了幫助普通開發而編寫的工具(比如說,最常用的 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 的人氣有所影響――Node.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 那樣迅猛發展,或者在人氣和需求方面迎來同樣的迅猛增長,但是它繼續很強大――不用說,谷歌是建立在 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,不管你喜不喜歡它。
此外,如果你想挖掘網站分析數據,或者你有興趣成為數據科學家,那么學 Python 這種語言很不錯。如果你想供職于大企業,那么 Java 是不二的選擇。如果你對構建應用程序其實不是很感興趣,而對就業機會比較有興趣,那么 SQL 可能是不錯的起點(如果你喜歡數學更是如此)。
總之,你在今年應該學習哪種編程語言最終將取決于你想要做什么。