大多數人學習程式設計的旅程始於一次深夜的 Google 搜尋。
通常會是類似「學習______」的搜尋。
但他們是如何決定搜尋哪種語言的呢?
「他們總是開玩笑說 Java 在《矽谷》裡。我想我應該學那個。」
或者:
「Haskell。現在超火的 Haskell。」
或者:
「那隻 Go 的小海狸實在是太可愛了。」
然後是其他的人。
我們可能會搜尋類似「我應該先學哪種程式語言?」的問題。
很少有問題會如此普遍,以至於出現完整的資訊圖表。但這就是其中之一:
決定你的第一種程式語言可以是一個有趣的過程——有點像那種「你是哪個昆汀·塔倫蒂諾角色?」的個性測驗。
但在你因為小時候喜歡玩橡皮泥而跑去學 Ruby 之前,讓我提醒你:風險可不小。
要成為對你的第一種程式語言有一定能力,需花費數百小時的練習。
所以你應該考慮以下幾個因素:
- 該語言的就業市場情況
- 該語言的長期前景
- 學習該語言的難易程度
- 在學習過程中可以構建的專案(並與朋友分享,以保持動力)
每年都有新的程式語言問世,隨之而來的還有新的學術論文和網絡漫畫。
說真的,看看上個月這個珍品:
在選擇第一種程式語言時,選擇的選項不在少數。為了縮小範圍,這裡是過去 12 年與學習程式設計相關的最常見 Google 搜尋:
Java 的受歡迎程度起伏不定。
Python 逐漸崛起成為最受歡迎的選擇。
但在這些語言之下,還有一種逐漸提升受歡迎程度的小引擎,那就是 JavaScript。
在談論這些程式語言之前,讓我澄清一下:
- 我並不認為任何一種語言在客觀上優於其他語言
- 我同意開發者最終應該學習多於一種語言
- 我認為他們首先應該學好一種語言。而——正如你從我標題中的顛倒文字可以猜到的——這種語言應該是 JavaScript。
讓我們從探索目前學校如何教授程式設計開始。
計算機科學 101
大學傳統上將程式設計納入計算機科學的範疇,而計算機科學本身常被視為數學的延伸,或與電子工程學位的關聯。
當然,正如你現在可能已經聽過的:
「計算機科學教育無法使任何人成為專家程式設計師,就像學習畫筆和顏料無法使任何人成為專業畫家。」——艾瑞克·S·雷蒙德
許多大學仍然將程式設計視為計算機科學,而計算機科學則視為數學。
因此,許多入門的程式設計課程集中在像 C 這樣的低抽象語言,或像 MATLAB 這樣以數學為重點的語言。
而系主任通常會遵循這一方向,指向年度程式語言排行榜,如TIOBE 指數,或這個來自IEEE的排行榜:
這些排行榜大多數看起來幾乎與十年前完全相同。
但變化確實會發生。即使在學術界。
在 2014 年,Python 超越了 Java,成為美國頂尖計算機科學課程中最受歡迎的教學語言。
然而,另一個變化終究會……最終……發生。
因為如果你看看實際上由工作人員使用的語言,所呈現的畫面截然不同:
根據 Stack Overflow 的調查,JavaScript 是 49,397 名開發者中最受歡迎的語言。
超過一半的開發者使用 JavaScript。它對前端網站開發至關重要,並且在後端開發中也越來越相關。而且它正在迅速擴展到遊戲開發和物聯網等領域。
招聘廣告中提到 JavaScript 的頻率超過了除了 Java 以外的任何編程語言:
數據來自全球最大的招聘廣告聚合平台 [Indeed.com]
我們圍繞 JavaScript 建立開源社區課程並非偶然。在過去兩年中,超過 5,000 人通過 Free Code Camp 獲得了他們的第一份開發者工作。
我並不是因為教 JavaScript 而推崇它。我教 JavaScript 是因為這是獲得第一份開發者工作的最可靠途徑。
但 JavaScript 適合你嗎?它值得成為你的第一種編程語言嗎?讓我們來探討之前提到的那些因素。
因素 #1:就業市場
如果你學習編程純粹是出於智力好奇,隨意跳過這個因素。但如果你——像大多數學習編程的人一樣——想利用這項技能找工作,那這是一個重要的考量。
如我之前提到的,Java 在招聘廣告中的提及次數超過了任何其他編程語言。JavaScript 緊隨其後。
但 JavaScript 有個特點:儘管它已經存在 20 年,但它直到最近才成為如 Netflix、Walmart 和 PayPal 等公司用來構建完整應用的真正工具。
因此,許多公司正在招聘 JavaScript 開發者,但市場上可用的人才卻不多。
數據來自 [Indeed.com]
每開放一個 Java 職位,就有 2.7 名 Java 開發者在競爭。PHP 和 iOS 的工作競爭同樣激烈。
但每開放一個 JavaScript 職位,只有 0.6 名 JavaScript 開發者。在擁有 JavaScript 技能的開發者中,這無疑是一個賣方市場。
因素 #2:長期前景
平均而言,JavaScript 項目收到的拉取請求是平均 Java、Python 或 Ruby 項目的兩倍。而且,JavaScript 的增長速度超過了任何其他流行語言。
最廣泛使用的 GitHub 項目編程語言,這是一個整體語言受歡迎程度的良好指標
JavaScript 的生態系統也受益於 Google、Microsoft、Facebook 和 Netflix 等公司在資金和工程人才方面的重金投資。
例如,TypeScript(JavaScript 的靜態類型超集)擁有超過 100 名開源貢獻者,其中許多人是 Microsoft 和 Google 的員工,並在為此獲得報酬。
這種跨公司合作在 Java 中比較難找。Oracle——通過收購 Sun Microsystems 實際上擁有 Java——經常起訴那些試圖擴展 Java 的公司。
因素 #3:學習難度
這是對一個 [XKCD 漫畫] 的諷刺
大多數程序員會同意高級腳本語言相對容易學習。JavaScript 就屬於這一類,與 Python 和 Ruby 一樣。
儘管大學仍然將 Java 和 C++ 作為第一語言教授,但它們學習起來要困難得多。
因素 #4:你可以用它構建的項目
這是 JavaScript 真正閃光的地方。JavaScript 可以在任何有瀏覽器的設備上運行,並且就在瀏覽器中。你幾乎可以用 JavaScript 構建任何東西,並隨處分享。
由於 JavaScript 的普及,Stack Overflow 的聯合創始人 Jeff Atwood 創造了他那著名的法則:
「任何可以用 JavaScript 編寫的應用程式,最終都會用 JavaScript 編寫。」
而且,隨著每個月的推移,Atwood 的法則依然堅挺。
Java 也曾承諾能在任何地方運行。你或許還記得Java Applets。Oracle 今年早些時候正式宣告其終結。
Python 面臨著類似的問題:
「我該如何把這個我做的遊戲給我的朋友呢?更好的是,有沒有辦法能讓我把它放到手機上,以便我能在學校向孩子們展示,而不需要他們安裝?嗯。」—— James Hague 在將 Python 作為教學語言退役
相對而言,這裡有一些我們開源社區成員在 CodePen 上用瀏覽器構建的應用程式。你可以直接點擊並在瀏覽器中使用這些:
星際大戰主題的維基百科搜尋
先學好一種語言,再學第二種。
如果你不斷地從一種語言跳到另一種語言,你將無法走得太遠。
要想超越基礎,你需要把第一種語言學好。然後學習第二種語言將會容易得多。
從這裡開始,你可以擴展自己,通過學習多種語言成為一名更全面的開發者:
- C 是了解計算機如何在內存管理方面實際運作的好方法,並且在高性能計算中非常有用
- C++ 非常適合遊戲開發。
- Python 在科學和統計方面表現出色。
- 如果你想在大型科技公司工作,Java 是重要的。
但首先學習 JavaScript。
好吧,現在我將嘗試做不可能的事情——我將試著預測評論區的反對意見。
反對意見 #1:但 JavaScript 不是很慢嗎?
對於大多數實際用途來說,JavaScript 的速度與高性能語言相當。
JavaScript (Node.js) 的速度比 Python、Ruby 和 PHP 快了數個量級。
它的速度幾乎與 C++、Java 和 Go 等高性能語言相當。
以下是最近最全面的跨語言基準測試結果:
反對意見 #2:但 JavaScript 不是靜態類型的
像 Python 和 Ruby 一樣,JavaScript 是動態類型的,這很方便。但這也可能會帶來麻煩。在這裡,我希望 exampleArray
是一個數組。我設置了它的值,然後檢查它的長度——這意味著它包含的元素數量。
exampleArray = [1, 2]
-> [1, 2]
exampleArray.length
-> 2
但後來我不小心將其賦值為字符串。
exampleArray = “text”
-> “text”
exampleArray.length
-> 4
這類錯誤在動態類型的語言中經常發生。大多數開發者只是實施檢查以防止這些錯誤,並相應地編寫測試。
如果你在第一門程式語言中絕對需要靜態類型,那麼我仍然建議你先學習 JavaScript。然後你可以迅速掌握 TypeScript。
「TypeScript 有學習曲線,但如果你已經知道 JavaScript,那麼學習的過程將會非常順利。」—— Alex Ewerlöf 談 TypeScript
反對意見 #3:但我真的想製作一個移動應用程式
我仍然建議你先學習 JavaScript。
- JavaScript 擁有多種工具來製作原生移動應用程式,例如 Angular Cordova 和 React Native。
- 為了讓您的移動應用程式實際上能做些有趣的事情,它可能需要一個合適的後端,而您會希望使用合適的網頁開發框架來構建,例如 Node.js + Express.js。
此外,值得指出的是,移動應用程式開發的最佳時代可能已經過去。
首先,儘管人們使用移動應用程式的頻率很高,但幾乎一半的開發者工作仍然是網頁開發。相比之下,涉及移動應用程式開發的工作僅占 8%。
根據 2023 年 Stack Overflow 調查的職業開發者統計。這個問題的回應來自 76,872 名參與調查的開發者,因此相當具代表性。
那句「有應用程式可以解決這個問題」的宏大願景並未實現。相反,大多數智能手機擁有者已經 停止下載新應用程式。
當然,他們仍然使用應用程式。主要是 Facebook、Google Maps 和少數幾個其他應用程式。因此,對移動應用程式開發者的需求主要集中在幾個大型雇主身上。
對於這些移動開發工作的前景,難以預測。開發、維護和分發移動應用程式的許多方面在使用 JavaScript 時都更為簡單。因此像 Facebook 和 Google 這樣的公司正在大量投資於使用 JavaScript 建造這些應用的更好工具。
幾乎所有的開發都是網頁開發。所有事物都與這個名為「網路」的大平台息息相關。而您將在家中與之對話的下一波設備,以及接送您孩子的車輛,也都將通過網路連接在一起。
而這意味著 JavaScript。
反對意見 #4:JavaScript 難道不是一種在 10 天內寫成的玩具語言嗎?
JavaScript 的 歷史相當曲折。
您無疑會聽到人們對它開玩笑。
其實人們也喜歡抱怨 C++。而且與 JavaScript 一樣,C++ 在這種批評中仍然成功,現在它幾乎無處不在。
所以如果有人因為您學習 JavaScript 而給您難堪,而不是去學習當周的精英語言,只需記住創造 C++ 的那位人士的名言:
「只有兩種編程語言:人們總是抱怨的和沒有人使用的。」 — Bjarne Stroustrup
我只寫關於編程和技術的內容。如果您 在 Twitter 上關注我 我不會浪費您的時間。 ?
本文內容翻譯自 原始文章。