2015年程式語言“錢途”盤點

199it發表於2015-12-08

  科學技術工程數學(STEM)人才供不應求、薪水豐厚,這早已不是什麼新聞。2007年至2012年,美國網上釋出的軟體工作崗位增加了31%,增長速度是總體工作崗位的近3倍。美國勞工統計局估計,從2012年至2022年,軟體開發員崗位會繼續以22%的速度增加,截至2014年5月,應用軟體開發員的中位數年薪就達到95510美元。

  如果你打算學習如何編寫程式碼,會發現程式語言的絕對數量多得驚人,到底該學習哪門語言呢?本文比較了與不同程式語言有關的薪水、人氣和就業前景,希望對你有一些幫助。

  程式語言概述

  在我們開始比較程式語言之前,不妨先看一下將要介紹的幾門語言。

  動態型別語言

  通常認為動態型別語言對非程式設計人員來說更容易學用,因為它們很靈活。你不需要編寫太多行程式碼,就能迅速從頭開始構建起一個應用程式;也沒有硬性規定表明如何編寫程式碼,才能讓程式碼以你想要的方式執行。動態型別語言常常是解釋型(非編譯),這意味著執行中的應用程式可迅速體現你所作的變化,可以為你節省時間。

  一般來說,Web應用程式通常是用動態語言編寫的。

  JavaScript

173936dkuk7gahqu5dh773

  別將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

173937i64bj7svo9d1jl9z

  Ruby旨在讓開發員在高效工作的同時享有樂趣,它因Ruby on Rails框架而流行起來,這種全堆疊Web框架經過了優化,確保程式設計過程中不失樂趣。由於Ruby與英語語法很相似,Rails又有讓常見開發任務“在預設情況下”更容易完成的工具,許多人會建議將Ruby選為你的第一種程式語言。

  Ruby最常用於後端開發;像Airbnb、Shopify、彭博社(Bloomberg)、Hulu、Slideshare及更多熱門網站就是用Ruby on Rails構建的。

  Python

173937qn4skk45hx54ff9h

  Python是強烈建議初學者上手的另一種語言,它也是美國知名大學最流行的入門語言。開發員使用Python來構建桌面應用程式和Web應用程式,它還有用於資料探勘的優秀工具。此外,Python在學術界尤其備受歡迎,用於科學計算、資料分析和生物資訊學等領域。

  谷歌、Dropbox、Pinterest、Instagram、Reddit、BitTorrent、Civilization IV及更多網站就是用Python構建的。

  PHP

173938bcq5mf2x52ggm4kf

  PHP是一種伺服器端指令碼語言,通常被認為適合初學者上手,因為PHP程式碼要完成的任務比較容易概念化,所以學起來不難上手。大多數網站是用PHP構建的,因為這種語言專門面向Web。

  Facebook、維基百科、雅虎、Tumblr、WordPress及更多網站就是用PHP構建的。

  靜態型別語言

  眾所周知,用靜態型別語言構建的應用程式更易於擴充套件、更穩定、更易於維護。靜態語言通常比較苛嚴(通過型別檢查來發現錯誤),需要編寫更多的程式碼來構建原型。遊戲引擎、移動應用程式和企業級後端通常是用靜態型別語言構建的。

  Java

173938p8r5wbffmrdr5t56

  作為一種通用語言,Java用來構建安卓應用程式、桌面應用程式和遊戲。Java還常常用作一種伺服器端語言,面向企業級後端開發:《財富》500強公司中90%使用Java。

  此外,Hadoop是一種廣為流行的基於Java的框架,用來儲存和處理大資料,雅虎、Facebook和亞馬遜網路服務(AWS)等知名企業實施了該框架。

  C

  C常常用來編寫系統軟體,是諸多作業系統的通用語。

  C影響了我們在本文中要介紹的幾乎所有程式語言,尤其是Objective-C和C++。所以,如果你很熟悉C,其他流行語言學起來恐怕難度不大。由於C需要編寫更復雜的程式碼來執行簡單任務,如果初學者選擇它作為第一種語言,可能很難保持十足的勁頭。不過,掌握C方面的知識對於程式設計工作肯定大有幫助。

  Objective-C / Swift(面向iOS開發)

173938ufxv2icaxudi7g7i

  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

173938hpriz31fi15prnr2

  SQL(結構化查詢語言)是一種用來與資料庫進行聯絡的查詢語言。雖然SQL無法用來構建應用程式,但可以用來管理使用關聯式資料庫管理系統(RDBMS)的應用程式中的資料。

  就業機會

  好了,現在你對程式語言有了一點了解,可能對它們所謂的難度也有了一點了解。不過,並非所有語言都有一樣的需求或薪水。如果你學習程式設計的目的是獲得就業機會,也不會被別人說某種語言學起起來多難打消念頭,下面這些可以幫助你弄清楚應該學哪種語言。

  從來自indeed.com網站分析招聘廣告的薪水估計數來看,我們基本上可以將程式語言分為六檔:

173938ricmahybaucmhcyj

  從這個結果來看,似乎Objective C的吸金能力最強,而Java、Ruby、Python、C++和C也是不錯的選擇。此外,如果薪水是你關注的方面,那麼JavaScript、C#、SQL和PHP似乎不是理想的選擇。

  平均薪水會受到許多因素的影響,比如需求(有多少工作崗位)、供給(有多少開發員掌握該語言),以及資歷(初級開發員的薪水自然低於高階開發員),所以有必要在下任何結論之前,更深入地分析一下這些因素。

  就業趨勢

  憑藉你熟悉的那種程式語言,找到工作的可能性有多大?這裡簡要分析了來自indeed.com的就業趨勢:

173938zlsvnxkmrvon6kff

  我們可以從中看到,Java、JavaScript和SQL這三類開發員供不應求。尤其是,JavaScript在這幾年的發展相當迅猛,它在2010年超過了C#,如今與Java不相上下。

  相比其他語言,面向C#開發員的工作崗位仍很多;對其他開發員的需求似乎相差無幾。C++開發員的相對需求有所減少。

  不過,如果你的目的是供職於初創公司,那麼來自indeed.com的就業趨勢不是準確的指標。AngelList可以說是初創公司釋出工作崗位的首選網站,於是我們根據AngelList上的軟體開發員廣告,分析一下對程式設計技能的需求。

173939ox5zkxagkykl9f89

  同樣,JavaScript是需求量最大的技能,但初創公司似乎更青睞Python和Ruby(on Rails),而不是Java、C、C++或C#。

  開發員供給市場

  不妨看一下線上程式設計教練平臺Codementor上的教練們擅長哪種語言:

173939f1vn0nrat1axw7i0

  當然,這絕對無法正確反映實際市場,但是應該讓你可以大致瞭解情況。如你所見,Objective-C專家非常稀缺,不過這一段時間來,移動應用程式行業一直很火爆。由於優秀的Objective-C開發員供不應求,他們的薪水自然比較高。

  另一方面,PHP方面的人才似乎供給充足,這意味著僱主們會有更多的選擇,因而在薪水方面有更大的議價能力,但是我們發現它的需求量不如Java、SQL或JavaScript來得大。因此,PHP開發員的薪水較低。

  JavaScript的情況比較特殊。儘管人才供給最多,但它在薪水檔次中並非墊底,我們會在文章後面分析一下JavaScript。

  薪水區間

  你已大致瞭解了每種語言的供需情況,不妨根據來自工作廣告的薪水資訊,看一下你有望獲得的潛在薪水。資料基於來自gooroo.io的資料,薪水通常作為每份工作廣告提供的薪水區間的平均值而獲得。

173939x3jj1syjdbypoaz1

  你在這裡可以看到,熟悉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是庫,而不是框架):

173939v491pss64ztsuo0g

  當然,這僅僅供你瞭解概況,indeed.com的估計數略有不同。不過,我們可以從這裡看到,熟知這些框架的開發員的薪水平均超過102000美元。只有掌握了JavaScript才能學習這些框架,因而掌握JavaScript是一項相當有“錢途”的技能。

  再不妨看一下對掌握這些框架的開發員的需求:

173939narrrpa8i0r0nr1r

  Node.js是一種後端平臺,如果如果僅僅說到前端框架,你能看到AngularJS顯然是贏家,需求猛增。因而,如果你想從事前端JavaScript開發,也許應該學習AngularJS。

  另一方面,React是一項相當新的技術,所以它仍處於起勢的階段,可能會變得更搶手。從indeed.com來看,React開發員的平均薪水為117000美元。

  程式設計資源

  如果你對開發界有所瞭解,那麼可能知道得到其他開發員的幫助確實很重要、很有幫助,如果你打算自學的話更是如此。

  加入相互幫助的社群無疑會你讓未來的開發工作變得更輕鬆。

  StackOverflow

  StackOverflow是全球廣大開發員使用的最大的開發者社群,旨在幫助其他程式設計員或得到他們的幫助,所以我們自然會分析一種程式語言有多流行,同時也會分析這些語言的相應社群幫助有多大。

  語言的人氣

  從StackOverflow上的標籤關注者(tag follower)來看,我們能看出一種語言在當下的總人氣:

173939okqabeog0o0q2gal

  我們在分析就業趨勢後已經知道,Java和JavaScript開發員的需求量最大,所以它們的標籤關注者最多也就不足為奇。尤其是,Java仍是StackOverflow中使用最多的標籤,不過JavaScript似乎很有希望超過它。

  SQL、Ruby和Objective-C的關注者數量最少。由於蘋果釋出了Swift,Objective-C在今後幾年可能發展有限。

  StackOverflow回答率

  StackOverflow有一條不成文的規定:你提出的問題得“措辭得當”,否則別人懶得回答。考慮到這一點,不妨看一下就每種語言而言你的問題被回答的可能性有多大:

173939pgnhzz80nwb8wgr0

  從上述資訊來看,雖然較少的StackOverflow使用者關注C、SQL和C++,但60%以上的相關問題得到了回答。那些懂行的人可能認為,C和C++是高階語言,這意味著提問題的使用者可能在程式設計方面比較有經驗,知道如何以更適當的措辭提問題。另一方面,SQL並不用來構建應用程式。

  值得一提的是,StackOverflow上的Python專家非常樂於助人。誰都知道初學者正確地提問題有難度;如上所述,Python常常是推薦初學者上手的語言。不過,儘管如此,儘管是一種比較受歡迎的語言,Python在30天內的回答率仍超過60%。(Python的頭號回答者Martijn Pieters也是Codementor程式設計教練。)
另一方面,雖然PHP是一種受到廣泛關注的語言,卻是回答率最低的語言之一。這意味著,許多人在提PHP方面的問題,但不是很多人的問題得到了回答。

  Github

  一旦你從事開發工作,最終會明白:儘量最好為你自己的專案使用現有的解決方案。你通常可以從開源專案得到現有解決方案,而Github就是絕佳去處。使用者可以啟動自己喜歡的專案,專案的星數越多,它可能越有用。

  因而,分析來自Github的資料後,我們還能確定使用不同型別的語言開發專案的相對容易程度。我們還了解了一種語言在多快地推出創新的新技術。言歸正傳,下面這個簡單圖形可以表明Github流行專案的分佈情況:

173940vdl9z6d4g326zf64

  很顯然,JavaScript是最耀眼的新工具,即使你不考慮所有的風格指南和教程。眾所周知,JavaScript是一種發展極快的語言,就框架和新技術而言流失率很高,以至於開發員可能覺得難以跟上JavaScript不斷創新的步伐。此外,除了Node.js平臺外,JavaScript主要用於前端開發,所以它與Ruby、Python、Java和PHP之類的其他後端語言並不直接“競爭”。有鑑於此,難怪JavaScript與其他程式語言之間會存在如此大的差距。

  另一方面,Ruby和Objective-C也有許多開發工具和資源。有意思的是,我們在 StackOverflow比較中可以看出,這兩種語言都不如Java之類的語言來得流行,但開發員通常覺得開源專案更有用。如果你仔細看一下用每種語言編寫的總體專案,這對Objective-C來說尤為如此:

173940zzktdxtyk9bdxktv

  此外,用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。實際上,許多開發員顯然很討厭它。

173940gicc319ck3k3k9x3

  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可能是不錯的起點(如果你喜歡數學更是如此)。

  總之,你在今年應該學習哪種程式語言最終將取決於你想要做什麼。

相關文章