(圖/shutterstock)
圖片來源:Shutterstock
大數據文摘
編譯 | Aileen,yawei,彭晗,蔣寶尚,錢天培
大多數人學習程式設計的旅程
都是從深夜的一次度娘搜索開始的。
比如很多情況下會是搜索:
“學習__(某種程式設計語言)”
但是他們是如何決定
他們想要學習的語言種類的呢?
有些人這麼想,
“在矽谷,他們老用 Java打趣。
或許我也該去學學。”
或者是:
“Haskell現在這麼火熱,就 Haskell吧。”
還有一些人是這樣:
“給 GO 代言的那只地鼠萌萌噠,學 Go吧。”
至於剩下的那群人,可能會搜索以下內容:
“我應該先學習哪一門程式設計語言?”
這問題被問得太多了,
現在可都有專門的圖表供查詢答案了。
決定第一門程式語言
需考慮 4點因素
決定你所學的第一門程式設計語言
可能是一個有趣的過程----就像是玩
“你是金庸小說裡的哪個角色?”
但如果你只是因為小時候喜歡玩泥巴,
所以就去學Ruby的話,
我可得提醒你,這可不是個小決定。
(注:Ruby因其功能簡單
但應用靈活而常被比作橡皮泥)
你將會花數百個小時
來學習你的第一門程式設計語言
(而且這也只是入門所需罷了),
所以你需要慎重考慮以下幾點:
●這門語言的就業市場
●這門語言的長遠發展前景
●學習這門語言的難易程度
●你可以用這門語言開發什麼專案
(而且和你的朋友們分享,
以便你能保持足夠的學習動力)
每一年都會有新的程式設計語言湧現而出,
隨之而來的是關於這些新語言的學術論文,
以及網路漫畫。
一點也不誇張,
就來看看這幅上個月新出的漫畫吧,
畫的還不錯的:
當談到第一門程式設計語言該學什麼的時候,
這選項可多了去了。
將範圍縮小一點,這裡是過去 12年,
與學習程式設計相關的
最常見的谷哥搜索結果:
工程師必須先學好 JavaScript
再去學其他的語言!
Java的搜索頻率時高時低。
Python逐漸成為最受歡迎的選擇。
但是藏在這些下面的一個小不點兒,
在過去的幾年慢慢地在積累人氣。
它就是 JavaScript。
(作者把 JavaScript比作歐美兒童繪本
the Little Engine That Could中
努力向上的小火車。)
在我談論這些程式設計語言以前,
讓我先澄清一下:
●客觀來說我不認為任何一種語言會優於其他語言
●我贊成程式師應該學會多門程式設計語言
●我認為首先他們應該學好一種語言。
而且——你能從我標題猜到——
這種語言應該是 JavaScript。
讓我們先從學校如何教程式設計談起。
計算機科學入門
按照慣例,程式設計教學
通常被歸在電腦科學的範疇下。
而電腦科學則通常被看作是
數學的延伸或者是
與和電子工程學位元元的密不可分聯繫。
當然,你現在可能也聽過:
“電腦科學教育
不能讓任何人成為程式設計專家,
這就好比光學習畫筆和顏料
不能讓人成為畫家一樣。”
——Eric S. Raymond
截止到2016年,
很多大學仍然認為程式設計
就是電腦科學的一部分,
而電腦科學就是數學的一部分。
因此,很多入門性的程式設計課程
側重於低層次的抽象語言,比如C,
或者是側重於數學運算的語言,如MATLAB。
而電腦學院的老大們
也依然持之以恆地
根據年度程式設計語言排行榜
來選擇他們的教學語言,
比如 TIOBE Index,或者是這張 IEEE的:
超過半數工程師 使用
JavaScript 成為新興程式語言
大多數排行榜看起來
幾乎和十年前幾乎一模一樣。
但即使在學術界,
不同程式設計語言的地位
也已發生了翻天覆地的變化。
在 2014年,Python取代了 Java
成為在美國頂尖電腦科學專案裡
最為流行的教學語言。
而另一個變化也必將會發生。
因為如果你看看工業界實際使用的語言,
情況則大不相同:
超過半數的工程師使用 JavaScript。
JavaScript對 web的前端開發尤為重要,
並且對於相應的後端開發也越來越重要。
而且,它正迅速地擴展到遊戲開發和物聯網領域。
招聘啟事中提及 JavaScript的次數
也多於除了 Java外的其他語言:
我提倡 JavaScript 因為…
我們開設開源社區的
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, and Netflix等
公司大量的投資資金和天賦異稟的工程人才。
例如,TypeScript
(一個靜態類型的JavaScript的超集合)
有超過100個開源貢獻者,
他們中很多都是微軟和谷哥的員工,
並拿著工資的 。
對於 Java來說,
這種類型的公司間的合作就很少有了。
甲骨文(通過對 Sun Microsystems的兼併獲得了Java業務)
經常對那些試圖擴展它的公司提出起訴。
(譯者注;甲骨文公司,
全稱甲骨文股份有限公司,
是全球最大的企業級軟體公司,
總部位於美國加利福尼亞州的紅木灘)
因素三:學習難易程度
大多數程式師都同意
高級指令碼語言相對容易學習。
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如是說
反對3:但我真的想做一個手機app
我仍然建議先學習JavaScript。
JavaScript提供了一些
用於專門製作手機 app的工具,
例如Angular Cordova和React Native。
為了編出真正有趣的 app,
你可能需要用到一個適當的後端,
而這就需要用到一個適合的 Web開發框架,
如Node.js + Express.js。
此外,值得指出的是,
手機 app開發的黃金時期已經到頭了。
首先,雖然人們用著手機 app,
但所有開發人員工作中有近一半是 Web開發。
相比之下,
手機app開發的工作只有少的可憐的 8% 。
App市場已經停滯
多數用戶已停止下載新app!
做什麼事都有會一個應用程式來幫你”
的宏偉願景一直沒有實現。
事與願違,
現在大多數智慧手機用戶已停止下載新app了。
當然 - 他們仍然使用 app。
但這些 app主要是 Facebook,
Google地圖和其他少數幾個。
因此,對手機 app開發者的大部分需求
集中在少數大型雇主身上。
這些移動開發工作的前景難以預測。
而使用 JavaScript可以更輕鬆地開發,
維護以及推廣手機 app 。
因此,像 Facebook和 Google這樣的公司
正大量投資使用
JavaScript開發 app的更好的工具。
截至 2016年,
幾乎所有的開發都是 web開發。
一切都涉及到 web這個大平臺。
在下一輪科技浪潮中即將出現的家用裝備,
以及從學校接你孩子回家的新型汽車,
都將被網路連接在一起 。
這意味著我們需要 JavaScript。
反對#4:JavaScript 不是 10天
就被寫好的小玩意兒嗎?
JavaScript有一個離奇的歷史。
你無疑會聽到人們開 JavaScript的玩笑,
說這門語言來的太廉價了。
(譯者注:JavaScript是在 10天內被開發出來的。)
好吧。很多人都喜歡找 C ++的碴。
像 JavaScript一樣,即使被人討厭,
C ++也已經成功了,
而且 它的應用幾乎無處不在。
所以,如果有人曾經責難你
怎麼學了 JavaScript
而不是某一門本周精選程式設計語言,
只要記住創建 C ++那傢夥的名言:
“世界上只有兩類程式設計語言:
人們抱怨的和壓根沒人用的。”
—— Bjarne Stroustrup
本文由 大數據文摘 授權轉載, 原文 於此
未經授權,請勿轉載侵權!
(責任編輯:CMoney編輯 / Alodia)
菁英軟體工程師戰鬥營
熱烈招生中!
想學程式、成為工程師
卻怕自己沒基礎、學不好嗎?
這裡有史上最專業的魔鬼訓練課程,
讓你有機會 朝夢想前進
全程免費、不用基礎從頭開始、培養就業競爭力!
填寫報名表,將有專人與您聯絡
名額有限>>馬上報名
詳細活動介紹>>點我查看!
有問題歡迎私訊粉專:從0開始學程式!