我應該從哪一門編程語言上車?
很多人的代碼之路可能從某個Google搜索開始,譬如 如何學習xxx ,不過又該決定從哪個語言開始這一段旅程呢?如果你問身邊朋友的建議,可能會聽到這些建議:
-
硅谷里的小伙伴經常調笑Java,我覺得我可以先學這個。
-
Haskell,現在這么熱,肯定要學這個。
-
Go語言的Logo好可愛。
不過還有很多人估計會選擇直接搜索,我應該學習啥語言呢?我們的思考過程可以總結在下面這張圖中:
這個過程真的是糾結而又快樂,估計如果是強迫癥的處女座會更痛苦。從我的角度來看,我們考慮學哪一門語言應該從以下幾個方面進行考慮:
-
這門語言的市場需求量如何
-
這門語言的未來前景如何
-
這門語言是否容易上手
-
你計劃用這門語言構建如何的項目
編程語言的這片紅海也是英雄輩出,每年都會有新的編程語言出現,我們先來看一幅漫畫:
當我們現在考慮應該選擇哪一門入門語言時,我們也要來看看這些年里別人的選擇,下圖是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、非死book以及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 Cordova 與 React Native 都是不錯的選擇。
來自:https://segmentfault.com/a/1190000007398287