閱讀508 返回首頁    go 阿裏雲 go 技術社區[雲棲]


還在糾結該從哪門編程語言學起?先來聊聊JavaScript


0?wx_fmt=jpeg


大多數人學習編程的旅程都是從深夜的一次度娘搜索開始的。

比如很多情況下會是搜索:“學習__(某種編程語言)”

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

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

或者是:

“Haskell現在這麼火熱,就Haskell吧。”

還有一些人是這樣:

“給GO 代言的那隻地鼠萌萌噠,學Go吧。”

0?wx_fmt=png

Go的代言地鼠

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

“我應該先學習哪一門編程語言?”

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

0?wx_fmt=png

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

決定你所學的第一門編程語言可能是一個有趣的過程----就像是玩“你是金庸小說裏的哪個角色?”

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

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

  • 這門語言的就業市場

  • 這門語言的長遠發展前景

  • 學習這門語言的難易程度

  • 你可以用這門語言開發什麼項目(而且和你的朋友們分享,以便你能保持足夠的學習動力)

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

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

0?wx_fmt=gif

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

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

0?wx_fmt=png

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

Java的搜索頻率時高時低。

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

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

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

  • 客觀來說我不認為任何一種語言會優於其他語言

  • 我讚成程序員應該學會多門編程語言

  • 我認為首先他們應該學好一種語言。而且——你能從我標題猜到——這種語言應該是JavaScript。

讓我們先從學校如何教編程談起。


計算機科學入門


0?wx_fmt=png

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

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

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

“計算機科學教育不能讓任何人成為編程專家,這就好比光學習畫筆和顏料不能讓人成為畫家一樣。”

——Eric S. Raymond

截止到2016年,很多大學仍然認為編程就是計算機科學的一部分,而計算機科學就是數學的一部分。

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

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

0?wx_fmt=png

圖表:各種編程語言受歡迎程度排行榜

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

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

在2014年,Python取代了Java成為在美國頂尖計算機科學項目裏最為流行的教學語言。

0?wx_fmt=png

圖表:美國頂尖計算機科學項目所用教學語言排行

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

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

0?wx_fmt=png

圖表:在Stack Overflow2016年的程序員調查中,JavaScript成為最受歡迎的編程語言

超過半數的程序員使用JavaScript。JavaScript對web的前端開發尤為重要,並且對於相應的後端開發也越來越重要。而且,它正迅速地擴展到遊戲開發和物聯網領域。

招聘啟事中提及JavaScript的次數也多於除了Java外的其他語言:

0?wx_fmt=png

圖表:招聘啟事中每個編程語言被提及的頻率

我們開設我們開源社區的JavaScript課程也並非偶然。在過去的兩年中,超過5000人通過Free Code Camp得到他們第一份程序員工作。

我提倡JavaScript並不是因為我在教它。我教授JavaScript是因為這是獲得第一份程序員工作最可靠的途徑。

但是JavaScript適合你麼?它是否值得成為你的第一個編程語言?讓我們再來探討我之前提到的那些因素吧。


因素一:就業市場

如果你學習編程純粹是出於求知的好奇心,那麼你可以跳過這個因素。但是如果你像大多數學習編程的人一樣,想要用這項技能去找工作,這會是一份十分重要的考量。

正如我前麵提到的,在招聘啟事中,Java是被提及最多的編程語言。JavaScript則緊隨其後位列第二。

但是JavaScript的情況是這樣的:盡管它存在了將近20年,也隻是最近才成為一個正式的編程工具。現今像Netflix,Walmart和PayPal這樣的公司已經在用JavaScript編寫他們所有的應用程序了。

因此,大量的公司正在招聘JavaScript開發人員,但是在就業市場上並沒有這麼多會JavaScript的程序員。

0?wx_fmt=png

圖表:不同編程語言對應崗位數量與程序員數量之比

每一個Java崗位平均有2.7個Java開發者競爭。PHP和iOS的競爭也是同等激烈。

但是對於每一個JavaScript崗位,平均隻有0.6個JavaScript開發者來競爭。對於具備JavaScript的開發者來說他們十分搶手。


因素二:長遠發展前景

平均每個JavaScript項目的Pull requests是每個Java,Python或者是Ruby項目的兩倍。除此之外,JavaScript的增長速度比其他流行語言都快。(譯者注:Github的使用者在對項目作出修改後需要通過pull requests來讓其他合作人審核。)

0?wx_fmt=png

圖表:Github每種編程語言所編寫項目的pull requests總量

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

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

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


因素三:學習難易程度


0?wx_fmt=png

圖表:這是一幅模仿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:

0?wx_fmt=png

http://s.codepen.io/adambeagle/debug/qOamaz

0?wx_fmt=png

http://s.codepen.io/safx/debug/Ewcym

0?wx_fmt=png

http://s.codepen.io/duttakapil/debug/BKGjOa

0?wx_fmt=png

http://s.codepen.io/Megabyteceer/debug/qbXJMQ

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

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

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

• 學習C語言能幫助你了解計算機內存管理方式,而且C語言在高性能計算中非常有用

• C ++非常適合遊戲開發。

• Python適合用於理科和統計學 。

• 如果你想在大型科技公司工作,Java是很重要的。


但是,你還是要先學習JavaScript!

好的,現在我要來挑戰不可能了!

——我將會回答一些來自評論區或是我預計大家會有的反對意見。


反對一:JavaScript難道不是運行地很慢嗎?

從實用角度講,JavaScript與高性能語言一樣快。

它也幾乎和C ++,Java和Go等高性能語言一樣快。

以下是新出爐的最全麵編程語言速度比對的結果:

0?wx_fmt=png

圖表:各編程語言速度比對結果

反對二:但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如是說


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

我仍然建議先學習JavaScript。

  1. JavaScript提供了一些用於專門製作手機app的工具,例如Angular Cordova和React Native。

  2. 為了編出真正有趣的app,你可能需要用到一個適當的後端,而這就需要用到一個適合的Web開發框架,如Node.js + Express.js。

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

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

0?wx_fmt=png

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

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

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

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

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

這意味著我們需要JavaScript。

原文發布時間為:2017-03-10

本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號

最後更新:2017-05-23 16:32:35

  上一篇:go  《迷人的8051單片機》----第1章 繽紛電世界 1.1電路中的秘密
  下一篇:go  演講實錄丨朱瓏 開啟人工智能之眼