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

XHZLawerenc 8年前發布 | 7K 次閱讀 Java JavaScript

很多人的代碼之路可能從某個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構建的游戲:

1970s style Simon game

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

 

 本文由用戶 XHZLawerenc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!