來源:數(shù)據(jù)觀-自媒 時(shí)間:2017-03-13 11:53:08 作者:大數(shù)據(jù)文摘
編譯 | Aileen,yawei,彭晗,蔣寶尚,錢天培
大多數(shù)人學(xué)習(xí)編程的旅程都是從深夜的一次度娘搜索開始的。
比如很多情況下會(huì)是搜索:“學(xué)習(xí)__(某種編程語言)”
但是他們是如何決定他們想要學(xué)習(xí)的語言種類的呢?
有些人這么想,“在硅谷,他們老用Java打趣?;蛟S我也該去學(xué)學(xué)?!?/p>
或者是:
“Haskell現(xiàn)在這么火熱,就Haskell吧?!?/p>
還有一些人是這樣:
“給GO 代言的那只地鼠萌萌噠,學(xué)Go吧?!?/p>
Go的代言地鼠
至于剩下的那群人,可能會(huì)搜索以下內(nèi)容:
“我應(yīng)該先學(xué)習(xí)哪一門編程語言?”
這問題被問得太多了,現(xiàn)在可都有專門的圖表供查詢答案了。
圖表:“我該先學(xué)哪門編程語言?”答案自測
決定你所學(xué)的第一門編程語言可能是一個(gè)有趣的過程----就像是玩“你是金庸小說里的哪個(gè)角色?”
但如果你只是因?yàn)樾r(shí)候喜歡玩泥巴,所以就去學(xué)Ruby的話,我可得提醒你,這可不是個(gè)小決定。(注:Ruby因其功能簡單但應(yīng)用靈活而常被比作橡皮泥)
你將會(huì)花數(shù)百個(gè)小時(shí)來學(xué)習(xí)你的第一門編程語言(而且這也只是入門所需罷了),所以你需要慎重考慮以下幾點(diǎn):
這門語言的就業(yè)市場
這門語言的長遠(yuǎn)發(fā)展前景
學(xué)習(xí)這門語言的難易程度
你可以用這門語言開發(fā)什么項(xiàng)目(而且和你的朋友們分享,以便你能保持足夠的學(xué)習(xí)動(dòng)力)
每一年都會(huì)有新的編程語言涌現(xiàn)而出,隨之而來的是關(guān)于這些新語言的學(xué)術(shù)論文,以及網(wǎng)絡(luò)漫畫。
一點(diǎn)也不夸張,就來看看這幅上個(gè)月新出的漫畫吧,畫的還不錯(cuò)的:
圖表:這幅漫畫通過描述一個(gè)王子救公主的故事調(diào)侃了每種編程語言的特點(diǎn)
當(dāng)談到第一門編程語言該學(xué)什么的時(shí)候,這選項(xiàng)可多了去了。將范圍縮小一點(diǎn),這里是過去12年,與學(xué)習(xí)編程相關(guān)的最常見的谷歌搜索結(jié)果:
圖表:一些學(xué)習(xí)編程語言相關(guān)的谷歌搜索的頻率變化趨勢
Java的搜索頻率時(shí)高時(shí)低。
Python逐漸成為最受歡迎的選擇。
但是藏在這些下面的一個(gè)小不點(diǎn)兒,在過去的幾年慢慢地在積累人氣。它就是Java。(作者把Java比作歐美兒童繪本the Little Engine That Could中努力向上的小火車。)
在我談?wù)撨@些編程語言以前,讓我先澄清一下:
客觀來說我不認(rèn)為任何一種語言會(huì)優(yōu)于其他語言
我贊成程序員應(yīng)該學(xué)會(huì)多門編程語言
我認(rèn)為首先他們應(yīng)該學(xué)好一種語言。而且——你能從我標(biāo)題猜到——這種語言應(yīng)該是Java。
讓我們先從學(xué)校如何教編程談起。
計(jì)算機(jī)科學(xué)入門
圖表:學(xué)生所寫程序質(zhì)量與學(xué)習(xí)時(shí)間的關(guān)系
按照慣例,編程教學(xué)通常被歸在計(jì)算機(jī)科學(xué)的范疇下。而計(jì)算機(jī)科學(xué)則通常被看作是數(shù)學(xué)的延伸或者是與和電子工程學(xué)位的密不可分聯(lián)系。
當(dāng)然,你現(xiàn)在可能也聽過:
“計(jì)算機(jī)科學(xué)教育不能讓任何人成為編程專家,這就好比光學(xué)習(xí)畫筆和顏料不能讓人成為畫家一樣?!?/p>
——Eric S. Raymond
截止到2016年,很多大學(xué)仍然認(rèn)為編程就是計(jì)算機(jī)科學(xué)的一部分,而計(jì)算機(jī)科學(xué)就是數(shù)學(xué)的一部分。
因此,很多入門性的編程課程側(cè)重于低層次的抽象語言,比如C,或者是側(cè)重于數(shù)學(xué)運(yùn)算的語言,如MATLAB。
而計(jì)算機(jī)學(xué)院的老大們也依然持之以恒地根據(jù)年度編程語言排行榜來選擇他們的教學(xué)語言, 比如TIOBE Index,或者是這張IEEE的:
圖表:各種編程語言受歡迎程度排行榜
大多數(shù)排行榜看起來幾乎和十年前幾乎一模一樣。
但即使在學(xué)術(shù)界,不同編程語言的地位也已發(fā)生了翻天覆地的變化。
在2014年,Python取代了Java成為在美國頂尖計(jì)算機(jī)科學(xué)項(xiàng)目里最為流行的教學(xué)語言。
圖表:美國頂尖計(jì)算機(jī)科學(xué)項(xiàng)目所用教學(xué)語言排行
而另一個(gè)變化也必將會(huì)發(fā)生。
因?yàn)槿绻憧纯垂I(yè)界實(shí)際使用的語言,情況則大不相同:
圖表:在Stack Overflow2016年的程序員調(diào)查中,Java成為最受歡迎的編程語言
超過半數(shù)的程序員使用Java。Java對web的前端開發(fā)尤為重要,并且對于相應(yīng)的后端開發(fā)也越來越重要。而且,它正迅速地?cái)U(kuò)展到游戲開發(fā)和物聯(lián)網(wǎng)領(lǐng)域。
招聘啟事中提及Java的次數(shù)也多于除了Java外的其他語言:
圖表:招聘啟事中每個(gè)編程語言被提及的頻率
我們開設(shè)我們開源社區(qū)的Java課程也并非偶然。在過去的兩年中,超過5000人通過Free Code Camp得到他們第一份程序員工作。
我提倡Java并不是因?yàn)槲以诮趟?。我教授Java是因?yàn)檫@是獲得第一份程序員工作最可靠的途徑。
但是Java適合你么?它是否值得成為你的第一個(gè)編程語言?讓我們再來探討我之前提到的那些因素吧。
因素一:就業(yè)市場
如果你學(xué)習(xí)編程純粹是出于求知的好奇心,那么你可以跳過這個(gè)因素。但是如果你像大多數(shù)學(xué)習(xí)編程的人一樣,想要用這項(xiàng)技能去找工作,這會(huì)是一份十分重要的考量。
正如我前面提到的,在招聘啟事中,Java是被提及最多的編程語言。Java則緊隨其后位列第二。
但是Java的情況是這樣的:盡管它存在了將近20年,也只是最近才成為一個(gè)正式的編程工具?,F(xiàn)今像Netflix,Walmart和PayPal這樣的公司已經(jīng)在用Java編寫他們所有的應(yīng)用程序了。
因此,大量的公司正在招聘Java開發(fā)人員,但是在就業(yè)市場上并沒有這么多會(huì)Java的程序員。
圖表:不同編程語言對應(yīng)崗位數(shù)量與程序員數(shù)量之比
每一個(gè)Java崗位平均有2.7個(gè)Java開發(fā)者競爭。PHP和iOS的競爭也是同等激烈。
但是對于每一個(gè)Java崗位,平均只有0.6個(gè)Java開發(fā)者來競爭。對于具備Java的開發(fā)者來說他們十分搶手。
因素二:長遠(yuǎn)發(fā)展前景
平均每個(gè)Java項(xiàng)目的Pull requests是每個(gè)Java,Python或者是Ruby項(xiàng)目的兩倍。除此之外,Java的增長速度比其他流行語言都快。(譯者注:Github的使用者在對項(xiàng)目作出修改后需要通過pull requests來讓其他合作人審核。)
圖表:Github每種編程語言所編寫項(xiàng)目的pull requests總量
Java良好的發(fā)展環(huán)境還受益于來自Google,Microsoft, Facebook, and Netflix等公司大量的投資資金和天賦異稟的工程人才。
例如,Type(一個(gè)靜態(tài)類型的Java的超集)有超過100個(gè)開源貢獻(xiàn)者,他們中很多都是微軟和谷歌的員工,并拿著工資的。
對于Java來說,這種類型的公司間的合作就很少有了。甲骨文(通過對Sun Microsystems的兼并獲得了Java業(yè)務(wù))經(jīng)常對那些試圖擴(kuò)展它的公司提出起訴。(譯者注;甲骨文公司,全稱甲骨文股份有限公司,是全球最大的企業(yè)級軟件公司,總部位于美國加利福尼亞州的紅木灘)
因素三:學(xué)習(xí)難易程度
圖表:這是一幅模仿XKCD的漫畫,描繪了學(xué)習(xí)各個(gè)編程語言的難易程度。
(譯者注;XKCD被其作者蘭道爾·門羅定義為一部“關(guān)于浪漫、諷刺、數(shù)學(xué)和語言的網(wǎng)絡(luò)漫畫”,被網(wǎng)友譽(yù)為深度宅向網(wǎng)絡(luò)漫畫。)
大多數(shù)程序員都同意高級腳本語言相對容易學(xué)習(xí)。 Java以及Python和Ruby都屬于這個(gè)類別。
盡管在大學(xué), 學(xué)生學(xué)到的第一門編程語言仍然是像Java和C ++這樣的語言,但這幾門語言可難學(xué)多了 。
因素四:你可以用它構(gòu)建哪些項(xiàng)目
這是Java真正牛逼的地方。 Java可以在任何具有瀏覽器的設(shè)備上運(yùn)行(設(shè)備的瀏覽器是運(yùn)行Java的平臺(tái))。你可以使用Java構(gòu)建任何東西,并在任何地方分享它。
因?yàn)镴ava的廣泛應(yīng)用,Stack Overflow的聯(lián)合創(chuàng)始人阿特伍德提出了著名的阿特伍德定律:
“任何可以用Java來寫的應(yīng)用,最終都將用Java來寫。”
每過一個(gè)月,阿特伍德定律的地位就更加穩(wěn)固。
Java曾經(jīng)承諾:它在任何地方都能運(yùn)行。 你可能還記得Java Applet。甲骨文在今年早些時(shí)候正式宣布了放棄Java Applet。
Python也遇到了同樣的問題:“我怎么把我編寫的游戲分享給我的朋友?更好的是,有沒有一種方式,能讓我將這種游戲安裝在我的手機(jī)上,以至于我可以在學(xué)校通過手機(jī)向孩子們展示,而孩子們沒有必要安裝它?!?– 在放棄用Python作為教學(xué)語言后, James Hague如是說。
與之成對比的是,我們開源社區(qū)的成員在Codepen的瀏覽器中編寫了一些app。您可以點(diǎn)擊并直接在瀏覽器中使用這些app:
http://www.21jieyan.cn
http://www.21jieyan.cn
http://www.21jieyan.cn
http://www.21jieyan.cn
先學(xué)好一門編程語言,然后再學(xué)習(xí)第二門語言。
如果你不停地從一種語言跳到另一種語言,你最終將什么都學(xué)不好。想要擺脫菜鳥階段,你就需要熟練掌握你的第一門語言,然后你學(xué)習(xí)第二門語言的時(shí)候就會(huì)變得很輕松。
再之后,你可以擴(kuò)大你的知識范圍,并通過學(xué)習(xí)大量的語言成為一個(gè)更全面的開發(fā)人員
學(xué)習(xí)C語言能幫助你了解計(jì)算機(jī)內(nèi)存管理方式,而且C語言在高性能計(jì)算中非常有用
C ++非常適合游戲開發(fā)。
Python適合用于理科和統(tǒng)計(jì)學(xué) 。
如果你想在大型科技公司工作,Java是很重要的。
但是,你還是要先學(xué)習(xí)Java!
好的,現(xiàn)在我要來挑戰(zhàn)不可能了!
——我將會(huì)回答一些來自評論區(qū)或是我預(yù)計(jì)大家會(huì)有的反對意見。
反對一:Java難道不是運(yùn)行地很慢嗎?
從實(shí)用角度講,Java與高性能語言一樣快。
它也幾乎和C ++,Java和Go等高性能語言一樣快。
以下是新出爐的最全面編程語言速度比對的結(jié)果:
圖表:各編程語言速度比對結(jié)果
反對二:但Java不是靜態(tài)類型的
像Python和Ruby一樣,Java是動(dòng)態(tài)類型化的,這是很方便, 但你也很容易碰上麻煩。這里我想讓exampleArray成為一個(gè)數(shù)組。 我給它賦值,然后檢查它的長度 – 也就是它包含的元素的數(shù)量。
exampleArray = [1, 2]
-> [1, 2]
exampleArray.length
-> 2
但是,之后我不小心將它設(shè)置成了一個(gè)字符串。
exampleArray = “text”
-> “text”
exampleArray.length
-> 4
這些類型的錯(cuò)誤總是在動(dòng)態(tài)類型語言中發(fā)生。大多數(shù)程序員會(huì)及時(shí)檢查防止這些錯(cuò)誤,并為可能的錯(cuò)誤寫相應(yīng)的測試。
如果你在學(xué)第一門編程語言的時(shí)候就想使用靜態(tài)類型,那么我仍然建議你先學(xué)習(xí)Java。 然后你就可以快速地掌握Type。
“Type學(xué)起來是不簡單的,但如果你已經(jīng)會(huì)用Java了,那就容易多了?!?– AlexEwerlf就學(xué)習(xí)Type如是說
反對3:但我真的想做一個(gè)手機(jī)app
我仍然建議先學(xué)習(xí)Java。
Java提供了一些用于專門制作手機(jī)app的工具,例如Angular Cordova和React Native。
為了編出真正有趣的app,你可能需要用到一個(gè)適當(dāng)?shù)暮蠖?,而這就需要用到一個(gè)適合的Web開發(fā)框架,如Node.js + Express.js。
此外,值得指出的是,手機(jī)app開發(fā)的黃金時(shí)期已經(jīng)到頭了。
首先,雖然人們用著手機(jī)app,但所有開發(fā)人員工作中有近一半是Web開發(fā)。 相比之下,手機(jī)app開發(fā)的工作只有少的可憐的8%。
圖表:2016年Stack Overflow調(diào)查中,49,525名程序員所從事的職業(yè)方向。
做什么事都有會(huì)一個(gè)應(yīng)用程序來幫你”的宏偉愿景一直沒有實(shí)現(xiàn)。事與愿違,現(xiàn)在大多數(shù)智能手機(jī)用戶已停止下載新app了。
當(dāng)然 - 他們?nèi)匀皇褂胊pp。 但這些app主要是Facebook,Google地圖和其他少數(shù)幾個(gè)。因此,對手機(jī)app開發(fā)者的大部分需求集中在少數(shù)大型雇主身上。
這些移動(dòng)開發(fā)工作的前景難以預(yù)測。 而使用Java可以更輕松地開發(fā),維護(hù)以及推廣手機(jī)app 。因此,像Facebook和Google這樣的公司正大量投資使用Java開發(fā)app的更好的工具。
截至2016年,幾乎所有的開發(fā)都是web開發(fā)。一切都涉及到web這個(gè)大平臺(tái)。在下一輪科技浪潮中即將出現(xiàn)的家用裝備,以及從學(xué)校接你孩子回家的新型汽車,都將被網(wǎng)絡(luò)連接在一起 。
這意味著我們需要Java。
反對#4:Java不是10天就被寫好的小玩意兒嗎?
Java有一個(gè)離奇的歷史。
你無疑會(huì)聽到人們開Java的玩笑,說這門語言來的太廉價(jià)了。(譯者注:Java是在10天內(nèi)被開發(fā)出來的。)
好吧。很多人都喜歡找C ++的茬。 像Java一樣,即使被人討厭,C ++也已經(jīng)成功了,而且 它的應(yīng)用幾乎無處不在。
所以,如果有人曾經(jīng)責(zé)難你怎么學(xué)了Java而不是某一門本周精選編程語言,只要記住創(chuàng)建C ++那家伙的名言:
“世界上只有兩類編程語言:人們抱怨的和壓根沒人用的?!?/p>
—— Bjarne Stroustrup
原文來源:
http://www.21jieyan.cn
注:本稿件摘自入駐數(shù)據(jù)觀自媒體-大數(shù)據(jù)文摘,轉(zhuǎn)載請注明來源,百度搜索“數(shù)據(jù)觀”獲取更多大數(shù)據(jù)資訊。
責(zé)任編輯:王培