你的第一門程式語言應該學什麼?

大多數人的編程之旅都是從搜尋引擎開始的。

例如搜索「XXX語言教程」。

但要怎麼決定從哪門語言開始呢?

「矽谷的人總是開Java的玩笑,我想應該先學Java。」

或者:

“Haskell!現在Haskell這麼火!”

又或者:

“一定要學Go!你看它的吉祥物多麼可愛!”

或者當我們不知所措的時候,只能搜:

“入門學什麼程式語言比較好?”

人們顧慮的問題通常就那麼幾個,下面這張信息圖很好地回答了這些疑惑:

選擇第一門程式語言的過程十分有趣,這就好像是個人的信仰選擇問題一樣。

也許因為你像個孩子一樣喜歡玩橡皮泥,稀里糊塗都打算開始學Ruby。我還是要提醒你,不要草率做決定。

想要真正掌握你的第一門程式語言,你需要投入成千上百小時來學習實踐。

所以你要考慮清楚以下這幾個方面:

  • 這門語言的崗位需求大不大
  • 這門語言有沒有發展前景
  • 語言的學習難度
  • 在學習過程中你能運用它開發什麼樣的練手項目(把你的成果分享給周圍的朋友才能激勵你堅持學習下去)

每年都會有新的程式語言出現,以及隨著而來的學術論文亦或者是搞笑段子:

第一門程式語言可選擇的範圍很廣。下面這張圖很清晰地顯示了過去12年幾門語言學習的Google搜索熱度變化:

Java有起有落,而Python逐漸成為了最受歡迎的入門語言。除此之外,還有最近幾年逐步火起來的JavaScript.(新手請注意,Java和JavaScript之間的區別就像是周杰和周杰倫之間的區別。)

在我展開討論之前,先明確幾點:

  • 我並不會在這裡爭論哪門語言要比哪門優越
  • 我認同一名合格的程式設計師最終應該掌握不止一門程式語言
  • 我想說明的是,對於剛入門的初學者來說,還是應該先專注於一門語言的學習。而這門語言,我想你可能早就在標題中發現了——就是JavaScript

我們先來聊聊現在學校里的編程教學是什麼情況。

計算機基礎教學

一般在大學教授編程課程的都是計算機系,而計算機專業一般數學和電子方面的內容又比較多。當然你可能早就聽說過:

計算機科學的教育無法使任何人成為專業的程式設計師,就好像學習怎麼使用刷子和顏料無法讓任何人成為畫家一樣—— Eric S. Raymond(《大教堂與集市》作者)

即使在2016年的今天,許多大學還像教計算機科學一樣教編程,像教數學一樣教計算機科學。

所以許多課程中編排的入門語言是C這樣底層抽象的語言,或者是專門針對數學的MATLAB.

一些專業權威的機構也推出了他們的程式語言年度排行榜,例如TIOBE Index,又或者是下面這個來自IEEE的榜單:

大多數這類榜單10年來都沒有什麼變化。

但事實上不是這樣的,包括在學術界。

早在2014年,Python就超過了Java,成為了最受美國各大CS(Computer Science)機構歡迎的教學語言。

而在實際上的生產工作中,也發生了和權威機構發布的完全不一樣的變化(數據來自49,397開發者參與的StackOverflow 2016年度調查):

多一半的開發者都在使用JavaScript.它最早只在前端開發應用,現在也逐步在後端流行開來。甚至開始延伸到遊戲開發和物聯網領域。

ADVERTISEMENT

工作崗位上對JavaScript的需求也僅次於Java(數據來自Indeed.com):

所以我們也圍繞JavaScript技術棧建立了我們的開源社區。在過去的兩年里,有超過5000名學員通過在FreeCodeCamp學習找到了編程相關的工作。

不過JavaScript真的也適合你麼?它值得你為之獻出第一次麼?我們來繼續分析:

事實一:崗位需求

如果你只是為了好奇好玩而學編程的話,可以忽略這一點。但如果你和大多數人一樣,想通過掌握編程技能找到工作的話,這點對你就非常重要了。

像我之前提到的,JavaScript是除Java之外需求量最大的程式語言。

另外還有一點:JavaScript已經發展了20多年,而直到最近,一些諸如Netflix, Walmart和PayPal一類的大公司才開始全棧應用JS構建他們的應用。

所以就造成了市場上JavaScript開發者供不應求的狀況(數據來自Indeed.com)。

從圖上來看,每個Java崗位大概有2.7人在競爭,IOS和PHP也平均都有2人以上競爭。

而通過計算,每個JavaScript崗位只有0.7,這就成了屬於JS開發者的賣家市場。

譯者註:為了更具說服力,特此補充國內的程式語言崗位情況(數據來源2015年8月 中國版的程式語言排行榜):

事實二:發展前景

在Github上,平均每個JavaScript的項目收到的pull requests要比其他語言多兩倍以上。其增長速度也遠超別的流行語言。

JavaScript的整個生態體系也因為Google, Microsoft, Facebook, Netflix這類大公司的投資而受益匪淺。

例如TypeScript(一種JavaScript的超集,提供更豐富特性,可編譯為普通JS)有著超過100名開源貢獻者,而這裡面大多數都是微軟和谷歌的員工。

而且這類集團公司很少有使用Java的。因為Java的所有者Oracle經常會因為各種有關Java開發的原因起訴別的公司。

事實三:學習難度

大多數的程式設計師應該都會認同,高級的腳本語言通常比較好學。JavaScript當然屬於此類,也包括Ruby和Python.

即便很多大學課程教授的都是Java或C++,這類語言也真的很難上手。

事實四:你能實踐的練手項目

這是JavaScript最大的優勢。JS可以運行在任何有瀏覽器的設備上。你幾乎可以用JS開發任何應用,而且很方便就能分享發布到任何地方。

正是由於JavaScript無處不在,Stack Overflow的聯合創始人Jeff Atwood才說出他的那句經典定律:

任何可以用JavaScript寫成的應用,最終都會使用JavaScript寫成。

現實也在不斷的佐證,證據在此。

Java也曾號稱是跨平台語言。可也許你了解到,Oracle官方在今年早些時候終止了Java Applets的支持。

Python也經常會遇到類似的問題:

我怎麼才能把我寫的這個遊戲發給我的朋友?或者能夠不安裝什麼應用就在手機上運行麼? — James Hague in Retiring Python as a Teaching Language

相比之下,JS要方便很多。下面的這些應用都來自我們開源社區的學員,你只需要在瀏覽器里打開連結就能開始玩啦:

1970s style Simon game

Conway’s Game of Life

Star Wars-themed Wikipedia Search

A roguelike dungeon crawler game

先專注學好一門語言,再去學別的。

如果你總是在各個語言之間搖擺不定,你很難取得什麼實質上的進步。

為了避免在入門階段止步不前,你需要紮實學好你的第一門語言。之後再學習別的語言你就會感覺到異常輕鬆。

等到那個階段,你就可以逐步成長為一名掌握許多語言的全面的開發者啦:

  • C 對於你理解計算機原理特別有幫助,例如內存管理之類的。在高性能計算中非常有用。
  • C++ 在遊戲開發中運用廣泛
  • Python 在科學研究和數據分析中應用廣泛
  • 如果你想在大型的科技公司中工作,Java就非常重要。

但還是先學會JavaScript再說吧:)

我知道評論里會有很多人要和我吵起來。雖然我知道這不可能,但我還是要試著說服你一下:

Q1:JavaScript運行速度不是很慢麼?

在很多實際運用場景中,JavaScript和一些高性能語言運行一樣快。

Node.js要比Python, Ruby, PHP快上好幾個數量級。

甚至已經接近了C++, Java, Go的性能。

下面是一個比較全面的程式語言「跑分評測」:

Q2:JavaScript連靜態語言都不是!

和Python/Ruby一樣,JavaScript屬於動態語言,使用起來也很方便。舉個例子,假如我想把變量exampleArray設為數組,我會先給它賦值,然後通過length函數來獲取數組中元素的數量。

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

但假如我不小心賦值給了它一個字符串,代碼照樣運行不會報錯,可並不是我想要的結果:

exampleArray = “text”

-> “text”

exampleArray.length

-> 4

這一類錯誤在動態類型的語言中經常會遇到。大多數的開發者都會專門寫一些檢查和測試來避免此類錯誤的發生。

如果你非要學一門靜態語言的話,我依舊推薦你學習JavaScript,之後再開始學習TypeScript。

TypeScript是有學習曲線的,但在掌握了JavaScript之後,你的學習會很順利。— Alex Ewerlöf on TypeScript

Q3:我想要學的是怎麼開發移動App

那你也還應該先學JavaScript呀~

  1. JavaScript有一些很棒的工具可以開發原生的移動應用,例如Angular Cordova和React Native.
  2. 為了讓你的移動App真的像模像樣,它至少得有個後端,你用一些合適的Web開發框架可以很輕鬆地實現,例如Node.js+Express.js

而且移動開發的春天也正是JS的流行帶來的。

在StackOverflow的調查中,有近一半的開發者的崗位都是Web開發,移動開發崗只占了8%。

「為某事專門下一個App」的境況也已不再,大多數的智慧型手機用戶開始趨於不下載新的App了。

當然——人們還在用著App。絕大多數都是大廠的微信、支付寶一類(原文:Mostly Facebook, Google Maps, and handful of others)。市場對移動開發的需求也越來越小。

移動開發的前景也難以預期。而且在許多方面,使用JavaScript來開發維護和部署移動應用要更加輕鬆簡單。所以像Facebook和Google這樣的公司在研發更好的JavaScript工具上投入的越來越多。

在2016年,幾乎所有的開發都和Web開發有關。所有的事情都依附著網際網路這個大平台。而且下一波將要崛起的設備——家庭智能、自動駕駛汽車等也都需要依附於網絡。

Q4:JavaScript不是一個只花10天寫著玩的語言麼?

JavaScript有一段簡史。

人們也經常會拿JavaScript開各種各樣的玩笑。

同樣人們也喜歡吐槽C++,可不管有多少人吐槽,C++依然很成功。

譯者註:這就和PHP是全世界最好的語言是一個道理。

所以如果再有人在你面前說JS怎麼怎麼不好的話,請記住C++之父的那句名言:

世界上只有兩種程式語言:一種是天天被人噴的,另一種是沒人用的。— Bjarne Stroustrup

Comments

comments

Your Website Title