精選文章

如果想靠寫程式吃飯,第一個要學絕對要是 JavaScript!

March 27, 2017 12:13


原文出處:科技報橘 《如果想靠寫程式吃飯,第一個學的絕對要是 JavaScript!》

2017/03/24


大多數人學習程式設計的旅程都是從深夜的一次百度搜索開始的。

比如 很多情況下會是搜索:「學習__(某種程式設計語言)」

但是他們是如何決定他們想要學習的語言種類的呢?

有些人這麼想,「在矽谷,他們老用 Java 打趣。或許我也該去學學。」

或者是:

「Haskell 現在這麼火熱,就 Haskell 吧。」

還有一些人是這樣:

「給 GO 代言的那只地鼠萌萌噠,學 Go 吧。」

Go 的代言地鼠

至於剩下的那群人,可能會搜索以下內容:

「我應該先學習哪一門程式設計語言?」

這問題被問得太多了,現在可都有專門的圖表供查詢答案了。

圖表:“我該先學哪門程式設計語言?”答案自測

決定你所學的第一門程式設計語言可能是一個有趣的過程—-就像是玩「你是金庸小說裡的哪個角色?」

但如果你只是因為小時候喜歡玩泥巴,所以就去學 Ruby 的話,我可得提醒你,這可不是個小決定。(注:Ruby 因其功能簡單但應用靈活而常被比作橡皮泥)

你將會花數百個小時來學習你的第一門程式設計語言(而且這也只是入門所需罷了),所以你需要慎重考慮以下幾點:

  • 這門語言的就業市場
  • 這門語言的長遠發展前景
  • 學習這門語言的難易程度
  • 你可以用這門語言開發什麼專案(而且和你的朋友們分享,以便你能保持足夠的學習動力)

每一年都會有新的程式設計語言湧現而出,隨之而來的是關於這些新語言的學術論文,以及網路漫畫。

一點也不誇張,就來看看這幅上個月新出的漫畫吧,畫的還不錯的:

圖表:這幅漫畫通過描述一個王子救公主的故事調侃了每種程式設計語言的特點

當談到第一門程式設計語言該學什麼的時候,這選項可多了去了。將範圍縮小一點,這裡是過去 12 年,與學習程式設計相關的最常見的谷歌搜索結果:

圖表:一些學習程式設計語言相關的穀歌搜索的頻率變化趨勢

Java 的搜索頻率時高時低。

Python 逐漸成為最受歡迎的選擇。

但是藏在這些下面的一個小不點兒,在過去的幾年慢慢地在積累人氣。它就是 JavaScript。(作者把 JavaScript 比作歐美兒童繪本 the Little Engine That Could 中努力向上的小火車。)

在我談論這些程式設計語言以前,讓我先澄清一下:

  • 客觀來說我不認為任何一種語言會優於其他語言
  • 我贊成程式師應該學會多門程式設計語言
  • 我認為首先他們應該學好一種語言。而且——你能從我標題猜到——這種語言應該是 JavaScript。

讓我們先從學校如何教程式設計談起。

圖表:學生所寫程式品質與學習時間的關係

電腦科學入門

按照慣例,程式設計教學通常被歸在電腦科學的範疇下 。而電腦科學則通常被看作是數學的延伸或者是與和電子工程學位元的密不可分聯繫。

當然,你現在可能也聽過:

「電腦科學教育不能讓任何人成為程式設計專家,這就好比光學習畫筆和顏料不能讓人成為畫家一樣。」——Eric S. Raymond

截止到 2016 年,很多大學仍然認為程式設計就是電腦科學的一部分,而電腦科學就是數學的一部分。

因此,很多入門性的程式設計課程側重於低層次的抽象語言,比如 C,或者是側重於數學運算的語言,如 MATLAB。

而電腦學院的老大們也依然持之以恆地根據年度程式設計語言排行榜來選擇他們的教學語言, 比如 TIOBE Index,或者是這張 IEEE 的:

圖表:各種程式設計語言受歡迎程度排行榜

大多數排行榜看起來幾乎和十年前幾乎一模一樣。

但即使在學術界,不同程式設計語言的地位也已發生了翻天覆地的變化。

在 2014 年, Python取代了 Java成為在美國頂尖電腦科學專案裡最為流行的教學語言。

圖表:美國頂尖電腦科學專案所用教學語言排行

而另一個變化也必將會發生。

因為如果你看看工業界實際使用的語言,情況則大不相同:

圖表:在 Stack Overflow2016 年的程式師調查中,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 來讓其他合作人審核。)

圖表:Github 每種程式設計語言所編寫專案的 pull requests 總量

JavaScript 良好的發展環境還受益於來自 Google,Microsoft, Facebook, and Netflix 等公司大量的投資資金和天賦異稟的工程人才。

例如,TypeScript(一個靜態類型的 JavaScript 的超集合)有超過 100 個開源貢獻者,他們中很多都是微軟和谷歌的員工,並拿著工資的 。

對於 Java 來說,這種類型的公司間的合作就很少有了。甲骨文(通過對 Sun Microsystems 的兼併獲得了 Java 業務)經常對那些試圖擴展它的公司提出起訴。(譯者注;甲骨文公司,全稱甲骨文股份有限公司,是全球最大的企業級軟體公司,總部位於美國加利福尼亞州的紅木灘)

因素三:學習難易程度

圖表:這是一幅模仿 XKCD 的漫畫,描繪了學習各個程式設計語言的難易程度。

(譯者注;XKCD 被其作者蘭道爾·門羅定義為一部「關於浪漫、諷刺、數學和語言的網路漫畫」,被網友譽為深度宅向網路漫畫。)

大多數程式師都同意高級指令碼語言相對容易學習 。 JavaScript 以及 Python 和 Ruby 都屬於這個類別。

儘管在大學, 學生學到的第一門程式設計語言仍然是像 Java 和 C ++這樣的語言,但這幾門語言可難學多了 。

因素四:你可以用它構建哪些項目

這是 JavaScript 真正牛逼的地方。 JavaScript 可以在任何具有瀏覽器的設備上運行 (設備的流覽器是運行 JavaScript 的平臺)。 你可以使用 JavaScript 構建任何東西,並在任何地方分享它。

因為 JavaScript 的廣泛應用,Stack Overflow 的聯合創始人阿特伍德提出了著名的阿特伍德定律:

「任何可以用 JavaScript 來寫的應用,最終都將用 JavaScript 來寫。」

每過一個月,阿特伍德定律的地位就更加穩固。

Java 曾經承諾:它在任何地方都能運行。 你可能還記得 Java Applet。 甲骨文在今年早些時候正式宣佈了放棄 Java Applet。

Python 也遇到了同樣的問題:「我怎麼把我編寫的遊戲分享給我的朋友? 更好的是,有沒有一種方式,能讓我將這種遊戲安裝在我的手機上,以至於我可以在學校通過手機向孩子們展示 ,而孩子們沒有必要安裝它。」– 在放棄用 Python 作為教學語言後, James Hague 如是說。

與之成對比的是,我們開源社區的成員在 Codepen 的瀏覽器中編寫了一些 app。您可以點擊並直接在流覽器中使用這些 app:

http://s.codepen.io/adambeagle/debug/qOamaz
http://s.codepen.io/safx/debug/Ewcym
http://s.codepen.io/duttakapil/debug/BKGjOa
http://s.codepen.io/Megabyteceer/debug/qbXJMQ

先學好一門程式設計語言,然後再學習第二門語言。

如果你不停地從一種語言跳到另一種語言,你最終將什麼都學不好。 想要擺脫菜鳥階段,你就需要熟練掌握你的第一門語言 ,然後你學習第二門語言的時候就會變得很輕鬆。

再之後,你可以擴大你的知識範圍,並通過學習大量的語言成為一個更全面的開發人員

  • 學習 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 了,那就容易多了。」– AlexEwerlöf 就學習 TypeScript 如是說

  • 反對三 :但我真的想做一個手機 app

我仍然建議先學習 JavaScript。

  1. JavaScript 提供了一些用於專門製作手機 app 的工具,例如 Angular Cordova 和 React Native。
  2. 為了編出真正有趣的 app,你可能需要用到一個適當的後端,而這就需要用到一個適合的 Web 開發框架,如 js + Express.js。

此外,值得指出的是, 手機 app 開發的黃金時期已經到頭了 。

首先,雖然人們用著手機 app,但所有 開發人員工作中有近一半是 Web 開發。 相比之下,手機 app 開發的工作只有少的可憐的 8% 。

圖表:2016 年 Stack Overflow 調查中,49,525 名程式師所從事的職業方向。

「做什麼事都有會一個應用程式來幫你」的宏偉願景一直沒有實現。事與願違,現在大多數智慧手機用戶已停止下載新 app 了。

當然 – 他們仍然使用 app。 但這些 app 主要是 Facebook,Google 地圖和其他少數幾個。 因此, 對手機 app 開發者的大部分需求集中在少數大型雇主身上 。

這些移動開發工作的前景難以預測。 而使用 JavaScript 可以更輕鬆地開發,維護以及推廣手機 app 。 因此,像 Facebook 和 Google 這樣的公司正大量投資使用 JavaScript 開發 app 的更好的工具。

截至 2016 年,幾乎所有的開發都是 web 開發。 一切都涉及到 web 這個大平臺。在下一輪科技浪潮中即將出現的家用裝備,以及從學校接你孩子回家的新型汽車,都將被網路連接在一起 。

這意味著我們需要 JavaScript。

  • 反對# 4JavaScript不是 10天就被寫好的小玩意兒嗎?

JavaScript 有一個離奇的歷史。

你無疑會聽到人們開 JavaScript 的玩笑, 說這門語言來的太廉價了 。(譯者注:JavaScript 是在 10 天內被開發出來的。)

好吧。很多人都喜歡找 C ++的茬。 像 JavaScript 一樣,即使被人討厭,C ++也已經成功了,而且 它的應用幾乎無處不在。

所以,如果有人曾經責難你怎麼學了 JavaScript 而不是某一門本周精選程式設計語言,只要記住創建 C ++那傢伙的名言:

「世界上只有兩類程式設計語言:人們抱怨的和壓根沒人用的。」

—— Bjarne Stroustrup