我應該從哪一門編程語言上車?

本文翻譯自what-programming-language-should-i-learn-first。做者開宗明義,直指結果,JavaScript是最適合初學者的語言。
本文從屬於筆者的程序員知識圖譜與體系結構。此外推薦閱讀個人編程之路——知識管理與知識體系前端入門與最佳實踐前端

不少人的代碼之路可能從某個Google搜索開始,譬如如何學習xxx,不過又該決定從哪一個語言開始這一段旅程呢?若是你問身邊朋友的建議,可能會聽到這些建議:java

  • 硅谷裏的小夥伴常常調笑Java,我以爲我能夠先學這個。react

  • Haskell,如今這麼熱,確定要學這個。git

  • Go語言的Logo好可愛。程序員


不過還有不少人估計會選擇直接搜索,我應該學習啥語言呢?咱們的思考過程能夠總結在下面這張圖中:

這個過程真的是糾結而又快樂,估計若是是強迫症的處女座會更痛苦。從個人角度來看,咱們考慮學哪一門語言應該從如下幾個方面進行考慮:github

  • 這門語言的市場需求量如何編程

  • 這門語言的將來前景如何segmentfault

  • 這門語言是否容易上手後端

  • 你計劃用這門語言構建如何的項目react-native

編程語言的這片紅海也是英雄輩出,每一年都會有新的編程語言出現,咱們先來看一幅漫畫:

當咱們如今考慮應該選擇哪一門入門語言時,咱們也要來看看這些年裏別人的選擇,下圖是12年裏各個語言的搜索量排行:

Java自己有其優點與劣勢,而Python正在逐步成長爲最受歡迎的選擇之一。不過這兩年隨着Web技術的迅猛發展,JavaScript正成爲日益受歡迎的選擇之一。在正式闡述以前,我首先澄清一下:

  • 我並不想引發聖戰,並無強調哪一門語言就比其餘的好

  • 我認爲每一個人不該該拘泥於某一門語言

  • 我推薦才入門的同窗能夠從JavaScript開始

如今咱們來看看學校裏是怎麼教編程語言的。

Computer Science 101

大學裏常常在計算機科學與技術的系列課程中開設某一門編程課,而且經常看作數學或者電子課程的擴展。估計你也常常會聽到以下的論述:計算機科學與技術的課程並不能讓你成爲編程大拿,就像刷牆的並不能成爲美術大師同樣。而在2016年裏,仍是有不少大學像教數學同樣教授計算機科學與技術。在這種背景下,不少編程入門級的課程都關注與C這樣的底層抽象語言,或者專一於數學的相似於MATLAB這樣的語言。

上圖就是TIOBE對於編程流行度的排行榜,而在2014年裏Python逐步代替Java成爲最普遍的美國計算機科學與技術語言:

而若是咱們專一於工程應用領域的語言流行度,則有些不一樣:

超過一半的開發者在使用JavaScript,JavaScript的浪潮從前端開始逐步席捲到後端,而且逐步發展到遊戲開發與物聯網等領域。而對於JavaScript開發者需求量也僅次於Java:

在過去的兩年中,超過5000名開發者在Free Code Camp的幫助下尋找到了合適的開發工做。我並非由於我自己負責教授JavaScript就去推廣它,而是由於JavaScript是最易於找到第一份工做的語言因此我選擇去教授他。

Factor #1:The Job Market

若是你是徹底處於我的的興趣愛好而學習編程,那麼你能夠跳過本節。不過絕大部分學習編程的人都但願可以得到一份不錯的工做。就像我早前說起的,Java是目前看來最受僱主歡迎的語言,而JavaScript緊隨其後。不過這其中有個很大的因素就是Java已經流行了20多年,很大一部分崗位來源於對於舊系統的維護需求。

從上圖能夠看出如今大概2.7個Java開發者競爭一個崗位,而PHP與iOS差很少是兩我的競爭一個崗位。

Factor #2:The long term prospects

差很少如今開源項目中,每一個JavaScript項目的Pull Request請求數是Java、Python、Ruby平均數的兩倍,從這一點看來,JavaScript比其餘任何的流行語言都要發展迅速。

而JavaScript生態圈也不斷受益於來自Google、Microsoft、Facebook以及Netflix等公司的投資,譬如JavaScript生態圈中的著名的靜態擴展TypeScript有超過100位的開源貢獻者,其中不少都是來自於Microsoft或者Google的僱員。目前收購了Sun的Oracle也在尋求利用這種社區參與度擴大Java的影響力。

Factor #3:Difficulty To Learn

估計大部分開發者都贊成相對高層的腳本式語言相對易於學習,JavaScript、Python以及Ruby就是屬於這個範疇。雖然很多學校在教Java或者C++,不過它們是真的不容易學啊。

Factor #4:Projects you can build with it

這一點正是JavaScript耀眼之處,JavaScript能夠運行在任何支持瀏覽器的設備上,你能夠用JavaScript構建任何應用,而後隨處分享。正如Stack Overflow的合夥人Jeff Atwood所說:全部可以用JavaScript實現的應用最終都會轉到JavaScript中。Java曾經也是主打一次編譯,處處運行,估計你還記得Java Applets,近兩年才被Oracle去掉這一特性。而Python也面臨一樣的問題,這裏咱們列舉幾個好玩的用JavaScript構建的遊戲:

Objection #1:JavaScript不是運行的很慢嗎?

JavaScript實際上是一個很是高效的語言,NodeJS自己是比Python、Ruby以及PHP要快的,它也近似於C++、Java以及Go這些編譯語言。

Objection #2:But JavaScript isn't statically typed

相似於Python或者Ruby,JavaScript一樣是一門動態類型語言,很方便,不過很容易引發動態類型轉化與驗證的問題。譬如我覺得我操做的是一個數組:

exampleArray = [1, 2]
-> [1, 2]
exampleArray.length
-> 2

而後若是一不當心轉化爲了字符串,那就糟了:

exampleArray = 「text」
-> 「text」
exampleArray.length
-> 4

Objection #3:我打算寫個移動應用來着

Angular CordovaReact Native 都是不錯的選擇。

相關文章
相關標籤/搜索