如果想靠寫程式吃飯,第一個要學絕對要是 JavaScript!
2017-03-27
直接結論:如果只能選一門程式語言作為入門,選 JavaScript。理由:就業市場需求大(每個職缺平均只有 0.6 個開發者競爭)、跨平台(任何有瀏覽器的設備都能執行)、學習難度適中、社群資源最豐富。先把 JavaScript 學好,其他語言之後都會更好學。對於孩子,橘子蘋果建議路徑是 Scratch → Python → JavaScript,循序漸進。
原文出處:科技報橘《如果想靠寫程式吃飯,第一個學的絕對要是 JavaScript!》(2017/03/24)
大多數人學習程式設計的旅程都是從深夜的一次搜尋開始的。
比如很多情況下會是搜索:「學習__(某種程式設計語言)」
但是他們是如何決定他們想要學習的語言種類的呢?
有些人這麼想,「在矽谷,他們老用 Java 打趣。或許我也該去學學。」
或者是:「Haskell 現在這麼火熱,就 Haskell 吧。」
還有一些人是這樣:「給 GO 代言的那只地鼠萌萌噠,學 Go 吧。」
決定你所學的第一門程式設計語言可能是一個有趣的過程——就像是玩「你是金庸小說裡的哪個角色?」
但如果你只是因為小時候喜歡玩泥巴,所以就去學 Ruby 的話,我可得提醒你,這可不是個小決定。(注:Ruby 因其功能簡單但應用靈活而常被比作橡皮泥)
你將會花數百個小時來學習你的第一門程式設計語言(而且這也只是入門所需罷了),所以你需要慎重考慮以下幾點:
- 這門語言的就業市場
- 這門語言的長遠發展前景
- 學習這門語言的難易程度
- 你可以用這門語言開發什麼專案(而且和你的朋友們分享,以便你能保持足夠的學習動力)
每一年都會有新的程式設計語言湧現而出,隨之而來的是關於這些新語言的學術論文,以及網路漫畫。
當談到第一門程式設計語言該學什麼的時候,這選項可多了去了。將範圍縮小一點,這裡是過去 12 年,與學習程式設計相關的最常見的 Google 搜尋結果:
Java 的搜尋頻率時高時低。Python 逐漸成為最受歡迎的選擇。但是藏在這些下面的一個小不點兒,在過去的幾年慢慢地在積累人氣——它就是 JavaScript。
在我談論這些程式設計語言以前,讓我先澄清一下:
- 客觀來說我不認為任何一種語言會優於其他語言
- 我贊成程式師應該學會多門程式設計語言
- 我認為首先他們應該學好一種語言。而且——你能從我標題猜到——這種語言應該是 JavaScript。
電腦科學入門
按照慣例,程式設計教學通常被歸在電腦科學的範疇下。而電腦科學則通常被看作是數學的延伸或者是與電子工程學位密不可分的聯繫。
當然,你現在可能也聽過:「電腦科學教育不能讓任何人成為程式設計專家,這就好比光學習畫筆和顏料不能讓人成為畫家一樣。」——Eric S. Raymond
截止到 2016 年,很多大學仍然認為程式設計就是電腦科學的一部分,而電腦科學就是數學的一部分。
因此,很多入門性的程式設計課程側重於低層次的抽象語言,比如 C,或者是側重於數學運算的語言,如 MATLAB。
而電腦學院的老大們也依然持之以恆地根據年度程式設計語言排行榜來選擇他們的教學語言,比如 TIOBE Index 或 IEEE 的排行。
大多數排行榜看起來幾乎和十年前幾乎一模一樣。但即使在學術界,不同程式設計語言的地位也已發生了翻天覆地的變化。
在 2014 年,Python 取代了 Java 成為在美國頂尖電腦科學專案裡最為流行的教學語言。
而另一個變化也必將會發生。因為如果你看看工業界實際使用的語言,情況則大不相同:根據 Stack Overflow 2016 年的程式師調查,JavaScript 成為最受歡迎的程式設計語言。
超過半數的程式師使用 JavaScript。JavaScript 對 Web 的前端開發尤為重要,並且對於相應的後端開發也越來越重要。而且,它正迅速地擴展到遊戲開發和物聯網領域。
招聘啟事中提及 JavaScript 的次數也多於除了 Java 外的其他語言。
我們開設開源社區的 JavaScript 課程也並非偶然。在過去的兩年中,超過 5000 人通過 Free Code Camp 得到他們第一份程式員工作。
我提倡 JavaScript 並不是因為我在教它。我教授 JavaScript 是因為這是獲得第一份程式員工作最可靠的途徑。
但是 JavaScript 適合你嗎?它是否值得成為你的第一個程式設計語言?讓我們再來探討我之前提到的那些因素吧。
因素一:就業市場
如果你學習程式設計純粹是出於求知的好奇心,那麼你可以跳過這個因素。但是如果你像大多數學習程式設計的人一樣,想要用這項技能去找工作,這會是一份十分重要的考量。
正如我前面提到的,在招聘啟事中,Java 是被提及最多的程式設計語言。JavaScript 則緊隨其後位列第二。
但是 JavaScript 的情況是這樣的:儘管它存在了將近 20 年,也只是最近才成為一個正式的程式設計工具。現今像 Netflix,Walmart 和 PayPal 這樣的公司已經在用 JavaScript 編寫他們所有的應用程式了。
因此,大量的公司正在招聘 JavaScript 開發人員,但是在就業市場上並沒有這麼多會 JavaScript 的程式師。
每一個 Java 崗位平均有 2.7 個 Java 開發者競爭。PHP 和 iOS 的競爭也是同等激烈。
但是對於每一個 JavaScript 崗位,平均只有 0.6 個 JavaScript 開發者來競爭——對於具備 JavaScript 的開發者來說他們十分搶手。
因素二:長遠發展前景
平均每個 JavaScript 項目的 Pull requests 是每個 Java,Python 或者是 Ruby 項目的兩倍。除此之外,JavaScript 的增長速度比其他流行語言都快。(注:GitHub 的使用者在對專案作出修改後需要通過 pull requests 來讓其他合作人審核。)
JavaScript 良好的發展環境還受益於來自 Google,Microsoft,Facebook 和 Netflix 等公司大量的投資資金和天賦異稟的工程人才。
例如,TypeScript(一個靜態類型的 JavaScript 的超集合)有超過 100 個開源貢獻者,他們中很多都是微軟和 Google 的員工,並拿著工資的。
對於 Java 來說,這種類型的公司間的合作就很少有了。甲骨文(通過對 Sun Microsystems 的兼併獲得了 Java 業務)經常對那些試圖擴展它的公司提出起訴。
因素三:學習難易程度
大多數程式師都同意高級腳本語言相對容易學習。JavaScript 以及 Python 和 Ruby 都屬於這個類別。
儘管在大學,學生學到的第一門程式設計語言仍然是像 Java 和 C++ 這樣的語言,但這幾門語言可難學多了。
因素四:你可以用它構建哪些項目
這是 JavaScript 真正牛逼的地方。JavaScript 可以在任何具有瀏覽器的設備上運行。你可以使用 JavaScript 構建任何東西,並在任何地方分享它。
因為 JavaScript 的廣泛應用,Stack Overflow 的聯合創始人阿特伍德提出了著名的阿特伍德定律:
「任何可以用 JavaScript 來寫的應用,最終都將用 JavaScript 來寫。」
每過一個月,阿特伍德定律的地位就更加穩固。
Java 曾經承諾:它在任何地方都能運行。你可能還記得 Java Applet。甲骨文在 2016 年正式宣佈了放棄 Java Applet。
Python 也遇到了同樣的問題:「我怎麼把我編寫的遊戲分享給我的朋友?更好的是,有沒有一種方式,能讓我將這種遊戲安裝在我的手機上,以至於我可以在學校通過手機向孩子們展示,而孩子們沒有必要安裝它。」—— 在放棄用 Python 作為教學語言後,James Hague 如是說。
與之成對比的是,開源社區的成員在 CodePen 的瀏覽器中編寫了一些 app,可以點擊並直接在瀏覽器中使用,不需要任何安裝。
先學好一門程式設計語言,然後再學習第二門語言。
如果你不停地從一種語言跳到另一種語言,你最終將什麼都學不好。想要擺脫菜鳥階段,你就需要熟練掌握你的第一門語言,然後你學習第二門語言的時候就會變得很輕鬆。
再之後,你可以擴大你的知識範圍,並通過學習大量的語言成為一個更全面的開發人員:
- 學習 C 語言能幫助你了解電腦記憶體管理方式,而且 C 語言在高性能計算中非常有用
- C++ 非常適合遊戲開發
- Python 適合用於理科和統計學
- 如果你想在大型科技公司工作,Java 是很重要的
但是,你還是要先學習 JavaScript!
常見反對意見的回應
反對一:JavaScript 難道不是運行地很慢嗎?
從實用角度講,JavaScript 與高性能語言一樣快。它也幾乎和 C++,Java 和 Go 等高性能語言一樣快。
反對二:但 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 如是說
反對三:但我真的想做一個手機 App
我仍然建議先學習 JavaScript。
- JavaScript 提供了一些用於專門製作手機 App 的工具,例如 Angular Cordova 和 React Native。
- 為了編出真正有趣的 App,你可能需要用到一個適當的後端,而這就需要用到一個適合的 Web 開發框架,如 Node.js + Express.js。
此外,值得指出的是,手機 App 開發的黃金時期已經到頭了。
首先,雖然人們用著手機 App,但所有開發人員工作中有近一半是 Web 開發。相比之下,手機 App 開發的工作只有少的可憐的 8%。(根據 Stack Overflow 2016 年調查,49,525 名程式師所從事的職業方向)
「做什麼事都有會一個應用程式來幫你」的宏偉願景一直沒有實現。事與願違,現在大多數智慧手機用戶已停止下載新 App 了。
當然——他們仍然使用 App。但這些 App 主要是 Facebook,Google 地圖和其他少數幾個。因此,對手機 App 開發者的大部分需求集中在少數大型雇主身上。
這些移動開發工作的前景難以預測。而使用 JavaScript 可以更輕鬆地開發,維護以及推廣手機 App。因此,像 Facebook 和 Google 這樣的公司正大量投資使用 JavaScript 開發 App 的更好的工具。
截至 2016 年,幾乎所有的開發都是 Web 開發。一切都涉及到 Web 這個大平台。在下一輪科技浪潮中即將出現的家用裝備,以及從學校接你孩子回家的新型汽車,都將被網路連接在一起。這意味著我們需要 JavaScript。
反對四:JavaScript 不是 10 天就被寫好的小玩意兒嗎?
JavaScript 有一個離奇的歷史。你無疑會聽到人們開 JavaScript 的玩笑,說這門語言來的太廉價了。(注:JavaScript 是在 10 天內被開發出來的。)
好吧。很多人都喜歡找 C++ 的茬。像 JavaScript 一樣,即使被人討厭,C++ 也已經成功了,而且它的應用幾乎無處不在。
所以,如果有人曾經責難你怎麼學了 JavaScript 而不是某一門本週精選程式設計語言,只要記住創建 C++ 那傢伙的名言:
「世界上只有兩類程式設計語言:人們抱怨的和壓根沒人用的。」—— Bjarne Stroustrup
常見問題 FAQ
2026 年 Python 和 AI 這麼流行,學 JavaScript 還是第一選擇嗎?
這篇文章是 2017 年的論點,2026 年格局有些調整。Python 在 AI/ML 領域的地位已無可撼動,Stack Overflow 調查中 Python 的受歡迎程度持續上升。但 JavaScript 在 Web 開發和全端領域的地位依然穩固。對「想做網頁或全端開發」的人,JavaScript 仍是最佳入門選擇;對「想進入 AI/資料科學領域」的人,Python 是更直接的路徑。橘子蘋果的菁英課程讓孩子從 Scratch、Python 打基礎,再進入 JavaScript 和 HTML5——兩條路都有覆蓋。
孩子最早應該學 JavaScript 嗎?還是 Scratch 和 Python 比較適合起步?
這篇文章的對象是「成人選第一門語言」,對 6–10 歲孩子的建議有所不同。Scratch 的圖形化積木介面讓孩子不需要打字就能理解程式邏輯,是最適合的起點。Python 語法接近自然英文,是最適合的第一門文字程式語言(大約國小中高年級)。JavaScript 通常在孩子有 Python 基礎後才進入,橘子蘋果的菁英課程路徑是:Scratch → Python → JavaScript → HTML5,循序漸進,每個階段都有真實作品。
學 JavaScript 之後,學其他語言真的會更容易嗎?
是的,這是有語言學習遷移(Transfer Learning)研究支持的。當你學好了 JavaScript 的「變數、條件、迴圈、函數、物件」這五個核心概念,在 Python、Java 或 Swift 中,這些概念依然存在——只是語法不同。通常轉換第一門語言需要 1–3 個月,但第三、第四門語言幾乎只需要幾週。這也是為什麼橘子蘋果菁英課程設計讓孩子在每個語言階段都「做出完整作品」——作品讓概念紮根,語法才能在需要時快速調整。
Web 開發 vs 手機 App 開發,孩子應該往哪個方向走?
2026 年的答案和 2017 年更接近:Web 開發的職缺數量仍遠多於純手機 App 開發,且 React Native、Flutter 等跨平台框架讓「學 Web 開發的人也能做手機 App」成為可能。更實際的建議是:不需要讓孩子現在就選定方向,先打好程式邏輯基礎(Scratch、Python)、再學 Web 技術(JavaScript、HTML5),到了國高中階段,孩子自然會根據興趣和市場做出更明智的選擇。
「先把一門語言學好再學第二門」——孩子在什麼程度算是「學好了」?
判斷標準不是「語法背完了」,而是「能獨立做出一個完整有功能的作品」。能用 Python 獨立做出一個可以跑的小遊戲或工具程式,就算是 Python 這一關過了。橘子蘋果的每個課程階段都有明確的「作品驗收點」——不是考試,而是孩子能拿給朋友或家人用的真實作品。這種標準讓孩子和家長都清楚知道:學到這裡,可以往下走了。
程式語言有這麼多,孩子怎麼選「適合自己的第一門語言」?
對兒童和青少年而言,「適合」的標準和成人不同:不是看就業市場,而是看「能不能快速做出有趣的東西」。Scratch 能讓孩子第一堂課就做出一個動畫——這種即時回饋是建立學習動力的關鍵。Python 的語法接近英文,除錯訊息容易理解。JavaScript 能直接在瀏覽器跑,作品可以立刻分享。橘子蘋果的課程路徑正是基於這個邏輯設計的。
讓孩子從最對的語言、最對的方式開始學程式
- 橘子蘋果菁英課程:Scratch → Python → JavaScript → HTML5 一條龍,每階段有完整作品
- 不只教語法,更建立「能做出完整東西」的程式思維
- 免費試聽一堂,讓孩子找到最適合自己的起點
