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