譯者:張天軍
原文: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
別和Java搞混淆了,JavaScript是一門主要在客戶端運行的腳本語言,用來做前端開發的。Javascript兼容所有的瀏覽器,一般通過使用比如jQuery的庫和一些比如AngularJS,Ember.js,React等的前端框架來創建web應用。</p>
<p>由于Node.js平臺的出現,Javascript 現在也可以作為一門服務器端語言了,雖然Node.js相對來說比較新,但該社區正在獲得更多的關注。你也可以通過JavaScript的框架(比如:phonegap)來構建混合的移動應用,Facebook的React Native旨在讓開發者通過JavaScript開發本地語言的移動應用。</p>
<p>然而,由于JavaScript的 untyped ,導致debug很困難,所以也被認為是一門很難的語言。它也有一些有類型的語言版本,比如:微軟的TypeScript,或是React使用的JSX。</p>
</div>
Ruby
<p>為了讓開發更加開心和高效地開發而設計的語言,Ruby因Ruby on Rails框架而流行,Ruby on Rails 是一個一站式的 Web 開發框架,為了開發者開發的便利而優化。Ruby代碼閱讀起來更像是在讀英語,Rails的工具使得日常的開發任務更簡單(這些工具方便使用,無需繁瑣配置)。</p>
<p>Ruby 主要被用來做后端的開發,一些很流行的網站比如 Airbnb,Shopify,Bloomberg,Hulu,Slideshare,和更多的網站開始用Ruby on Rails構建后臺。</p>
</div>
Python
<p>Python 是另一門被強烈推薦給初學者的編程語言,是美國大學里入門編程語言最流行的。開發者可以用它來編寫桌面端和服務器端的應用,它也有用來數據挖掘的很好的工具。另外,Python在科學計算,數據分析,生物信息等學術領域也非常流行。</p>
<p>Google,Dropbox,Pinterest,Instagram,Reddit,BitTorrent,Civilization IV 和更多的公司已經開始用Python構建軟件了。</p>
</div>
PHP
<p>PHP是一門服務器端的腳本語言,由于易于其代碼掌握而通常被認為是對初學者友好的語言,PHP入門并不難。大部分網站曾經用過PHP構建,因為很大程度上這就是一門專門為Web開發設計的語言。<p>
<p>Facebook, Wikipedia, Yahoo!, Tumblr, WordPress等更多的網站曾用過PHP構建。</p>
</div>
靜態語言
用靜態的類型的語言構建的軟件通常以更易擴展,更穩定也更加好維護而著稱。靜態語言通常在通過類型檢查而捕獲錯誤方面更嚴格,需要更多的代碼來構建一個原型。游戲引擎,移動應用和企業級的后臺一般都是用靜態的類型語言構建的。
Java
<p>作為一門通用功能的語言,Java被用來構建Android應用,桌面應用和游戲。Java也通常被用作服務器端的開發語言用來開發企業級的后臺-90%的世界500強企業使用Java。</p>
<p>而且,Hadoop 也是一個基于Java的很流行的存儲和處理大數據的框架,它也被Yahoo,Facebook,and Amazon這樣的企業用于Web服務。</p>
</div>
C
C 通常被用于系統軟件的開發,也是操作系統的通用語言。
C語言幾乎影響了所有我們介紹的編程語言,尤其是Objective-C和C++。所以如果你很了解C語言,你在學習其他語言時就不會有什么困難。由于使用C完成一個簡單任務需要更復雜的代碼,初學者也許會發現如果他們如果把C作為入門語言,會很難保持學習的動力。然而C語言的有關知識會使一個程序員受益匪淺。
Objective-C / Swift (for iOS development)
<p>Objective-C 是在C語言上進行了一層封裝,使得它變成靜態,但同時也能用于動態類型。蘋果的Swift是一門設計成與Objective-C兼容的的靜態語言,但它的靜態類型使得他更不容易出錯。<p>
<p>受Python的啟發,Swift是想成為編程新手易于掌握的語言,也是按照能修復一些Objective-C的問題的方向設計的。</p>
</div>
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
<p>SQL,也叫結構化查詢語言,是一種和數據庫交流的查詢語言。盡管SQL不能被用來構建應用,但它被用來管理應用中的關系型數據管理系統的數據。</p>
</div>
工作機會
現在你對編程語言有了一點了解,也許還稍微有些難懂。但不是所有的編程語言都有同樣的需求和薪水。如果你學習編程的目標是尋找工作機會,你是不會輕易因這中語言難學而被別人勸阻的,以下幾點也許能幫你搞清你應該學習那種語言。
來自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編程課程,該課程有一對一的專門老師教導。點擊了解更多一對一編程教學來發現更多信息吧!