Java在工作中用來干嘛碌尔?如何學(xué)習(xí)Java?Java學(xué)習(xí)起來復(fù)雜嗎券敌?英語不好數(shù)學(xué)不好能學(xué)好Java嗎唾戚?首先本人只是一個普通的軟件工程師,上班還要碼代碼待诅,下班還要帶娃叹坦,私信不能一一回復(fù),請見諒卑雁,但是又不想拒絕大家的問題募书,所以開這篇文章說一下,如何成為Java軟件工程師测蹲?首先莹捡,學(xué)習(xí)Java能用來做什么?Java目前有哪些就業(yè)方向扣甲?我們先看一下下圖
上圖給出了兩個最重要的方向Java Web和Ardroid方向篮赢,其實我們經(jīng)常說的Java軟件工程師,我覺得應(yīng)該叫Java Web軟件工程師或Java后端(服務(wù)端)工程師比較貼切一些文捶。Java Web能做的事情非常多荷逞,我們在使用淘寶去查找商品時,打開瀏覽器輸入網(wǎng)址粹排,輸入商品名稱种远,點擊搜索,這時候前端頁面(瀏覽器)通過HTTP協(xié)議把商品名稱傳遞到Java服務(wù)端顽耳,Java服務(wù)端利用JDBC技術(shù)從數(shù)據(jù)庫里檢索數(shù)據(jù)并返回坠敷,再組裝成網(wǎng)頁內(nèi)容返回給瀏覽器,繼而展現(xiàn)在用戶面前射富。Java Web要學(xué)的東西很多膝迎,網(wǎng)絡(luò)請求協(xié)議(HTTP等),Web前端技術(shù)胰耗,Java服務(wù)端技術(shù)限次,JDBC、數(shù)據(jù)庫等都要學(xué)習(xí)。
Android要學(xué)的東西稍微少一點卖漫,Android一般是客戶端軟件费尽,基本上不涉及到服務(wù)端,理論上來說可以不關(guān)注服務(wù)端技術(shù)(灰色框里的內(nèi)容)和后臺數(shù)據(jù)庫羊始,但我覺得要做一個合格的Android工程師旱幼,這些東西還是有必要去花時間了解的。同樣的突委,Android工程師也需要學(xué)網(wǎng)絡(luò)請求協(xié)議(HTTP等)柏卤,畢竟也是要通過Web服務(wù)器去數(shù)據(jù)庫里拿數(shù)據(jù)回來展示到APP上。目前混合開發(fā)(原生+HTML5)的APP越來越多了匀油,因此還需要學(xué)習(xí)一些前端知識缘缚。
注意,Android方向圖里的Web服務(wù)器可以用Java來寫钧唐,也可以用其它語言來寫忙灼,比如C#等,但安卓程序員不需要關(guān)心钝侠。
不管學(xué)Java Web還是Ardroid该园,Java基礎(chǔ)(J2SE)都是必需要學(xué)的,后面會詳細(xì)說這兩條路要學(xué)習(xí)的內(nèi)容帅韧。其它的還有一些桌面程序(Swing/awt)里初,嵌入式開發(fā)(J2ME),JavaFX開發(fā)忽舟,基本上已淘汰双妨,不好找工作,不推薦大家學(xué)習(xí)了叮阅。以下是某大型招聘網(wǎng)站搜索出來的各崗位在北京招聘的數(shù)據(jù)刁品,供大家參考
除此之外,Java還有一個大數(shù)據(jù)(Hadoop)方向浩姥,但新人不推薦選這個方向挑随,等有一定的工作經(jīng)驗后再介入。
很多人私信問我勒叠,Java就業(yè)環(huán)境怎么樣兜挨?Java難學(xué)嗎?數(shù)學(xué)不好英語不好能學(xué)好Java嗎眯分?
是時候亮出這張圖了:
我做開發(fā)十多年的時間拌汇,如果大家對于學(xué)習(xí)java的學(xué)習(xí)方法,學(xué)習(xí)路線以及你不知道自己應(yīng)該是自學(xué)還是培訓(xùn)的疑問弊决,都可以隨時來問我噪舀,大家可以加我的java交流學(xué)習(xí)qun:615741636。qun內(nèi)有學(xué)習(xí)教程以及開發(fā)工具。
上圖是2017年8月份編程語言排行榜与倡,雖然相較2016年有所下降先改,但可以看出來,前幾名都整體下滑了蒸走,下滑的原因是多種新興語言的崛起導(dǎo)致的,雖然下滑貌嫡,Java依然牢牢占據(jù)著排行榜首位比驻,所以說Java就業(yè)市場前景相較于其它語言還是比較有優(yōu)勢的。
另外岛抄,Java簡單易學(xué)别惦,Java是類C語言,語法和C/C++沒多大的區(qū)別夫椭,相信大家上學(xué)時多多少少都學(xué)過一點C或C++語言掸掸,所以很多容易上手,Java還拋棄了C++ 中那些很少使用的蹭秋、很難理解的扰付、令人迷惑的特性,如操作符重載仁讨、多繼承羽莺、自動的強制類型轉(zhuǎn)換等,和C/C++不同的是Java是運行在JVM(Java虛擬機)上的洞豁,如下圖
JVM屏蔽了底層操作系統(tǒng)的細(xì)節(jié)盐固,為開發(fā)者做了很多事情,比如內(nèi)存的分配和回收等丈挟,因此刁卜,Java開發(fā)人員不需要在寫程序時候考慮對內(nèi)存進(jìn)行分配和回收,也無須考慮內(nèi)存碎片的問題曙咽,這部分工作已經(jīng)由JVM來完成了蛔趴。這也是Java語言能跨平臺的原因(一次編譯,到處運行)桐绒。也就是說夺脾,只要能安裝JVM的機器,理論上都可以運行Java寫的程序茉继。有人說C#也很簡單呀咧叭,同樣不需要分配和回收內(nèi)存,而且語言設(shè)計得比Java更優(yōu)秀烁竭,為什么不選擇C#呢菲茬?是的,這個問題我不否認(rèn),我們看一下某大型網(wǎng)站的招聘數(shù)據(jù):
地點北京婉弹,搜索關(guān)鍵字Java睬魂,提供24564個職位,搜索C#镀赌,提供6177個職位氯哮。Java提供的就業(yè)機會還是多得多,這個也是和排行榜相符的商佛。
綜上所述喉钢,對于新手入門和找工作來說,我推薦Java良姆,其實肠虽,大家也不用糾結(jié)到底選擇哪一門語言來進(jìn)行入門,比如Java和C#這兩門語言玛追,在思想上基本上是一致的税课,Java會了,C#熟悉一下語法和環(huán)境馬上就能上手寫了痊剖,反之也一樣韩玩。
Java對數(shù)學(xué)要求不高,常用的數(shù)據(jù)結(jié)構(gòu)和算法陆馁,都已經(jīng)封裝好了啸如。Java主要是用來做企業(yè)級應(yīng)用,大型網(wǎng)站等氮惯,主要是處理業(yè)務(wù)邏輯叮雳,而不是科學(xué)計算,所以數(shù)學(xué)不好的朋友也不要擔(dān)心妇汗。對于寫Java代碼來說對英語的要求也不高帘不,一共幾十個關(guān)鍵字,大多都是一眼就知道什么意思的杨箭,如if寞焙,else,while互婿,for捣郊,public,private等慈参,不要看到老鳥的屏幕全是英文就嚇到了呛牲,其實那些英文只是變量名而已,都是自己起的名字驮配,雖然英語不好對編寫Java程序沒多大影響娘扩,但是閱讀英文的API幫助文檔就比較吃力了着茸,很多一手的資料都只有英文文檔,JDK源碼也是英文注釋琐旁,但是也無需過度但心涮阔,大部分API都能找到中文版本,但始終看原版還是放心一些灰殴,所以敬特,大家請盡量學(xué)好英語,英語好的話牺陶,找一份國外的工作也說不一定(工資高)擅羞。
下面我們看一下學(xué)習(xí)Java Web和Android究竟要學(xué)些什么技能,首先在招聘網(wǎng)站上搜索Java Web軟件工程師义图,隨便點開幾個職位:
Java基礎(chǔ)就不說了,肯定要重點學(xué)習(xí)召烂,其它的如:JavaScript碱工,JQuery,Ajax奏夫,JSP怕篷,HTML5,oracle酗昼,DB2廊谓,框架,模板麻削、Servlet蒸痹,Spring,SpringMVC呛哟,Struts叠荠,Mybatis/ibatis,數(shù)據(jù)庫扫责,MySql等等榛鼎,看得真是眼花繚亂,嚇得有些朋友都要打退堂鼓了鳖孤,其中Spring者娱,SpringMVC,Struts苏揣,Mybatis/ibatis黄鳍、MySQL出現(xiàn)的次數(shù)最多,有些詞很多初學(xué)者可能都沒聽過平匈。不要害怕际起,上面說到的這些術(shù)語拾碌,大部分是框架,框架的產(chǎn)生最主要的目的是提高生產(chǎn)力街望,規(guī)范大家的開發(fā)校翔,也就是說,別人寫好的灾前,項目中拿來用就行防症,什么是框架?剛開始學(xué)習(xí)項目的時候先不要用框架哎甲,這樣更助于理解底層蔫敲,我們回到本文開始的第一張圖:
前文已經(jīng)說過了,不管是安卓還是Java Web方向炭玫,JavaSE(Java基礎(chǔ))是重點奈嘿,一定要打好基礎(chǔ),其中Swing/awt相關(guān)知識可以選擇跳過吞加,上圖中的客戶端裙犹,服務(wù)端,數(shù)據(jù)庫的知識都要涉獵到衔憨,主要要學(xué)的東西如下叶圃,這么一看清爽了很多。
Web客戶端(Web前端):JavaScript践图,HTML掺冠,CSS
Java服務(wù)端:JDBC,Servlet/JSP等
數(shù)據(jù)庫:MySQL
以上這些其中Java服務(wù)端最重要码党,數(shù)據(jù)庫MySQL也需要好好學(xué)習(xí)一下德崭,Web前端也需要了解一下,工作中Web前端的代碼一般是由前端工程師寫好的揖盘,但我們要看得懂接癌,并能往里加上一些腳本標(biāo)簽等,我的建議是學(xué)完Java基礎(chǔ)后馬上學(xué)習(xí)MySQL和JDBC扣讼,然后在網(wǎng)上找王勇老師的DRP項目來學(xué)習(xí)缺猛,這個項目里不但講了前端基礎(chǔ),也對Java服務(wù)端需要掌握的內(nèi)容作了詳細(xì)講解椭符。認(rèn)真學(xué)習(xí)完DRP項目荔燎,其實已經(jīng)具備了軟件開發(fā)的能力了,但是進(jìn)入企業(yè)還不夠销钝,因為實際工作中企業(yè)一般都用到了框架有咨,框架有很多,我建議先學(xué)習(xí)SpringMVC蒸健,Spring座享,Mybatis婉商,也就是俗稱的SSM,這些視頻在網(wǎng)上很容易下載到渣叛,下載完后一個一個的學(xué)習(xí)丈秩,再一個個融入到DRP項目中去,做熟了以后大家就可以考慮準(zhǔn)備簡歷了淳衙,有了以上SSM框架的學(xué)習(xí)經(jīng)驗蘑秽,再學(xué)習(xí)其它框架就快了。
再回過頭來看看Android箫攀,點開招聘網(wǎng)站的Andriod工程師崗位看一下:
Android的要求都差不多肠牲,除了強調(diào)Java,就是Android了靴跛,大家可自行在網(wǎng)上搜索視頻學(xué)習(xí)就行了缀雳。
至于選擇Java Web或Android,就看大家喜歡了梢睛,有精力的可以都學(xué)習(xí)一下肥印。
學(xué)習(xí)難度:Java Web > Android
找工作:Java Web > Android
長遠(yuǎn)發(fā)展:Java Web > Android
Java Web的路線看起來是復(fù)雜一些,其實也不難扬绪,只是涉及到的東西很多,很多人學(xué)了一半就堅持不下去了裤唠,敗給了堅持,而不是難度种蘸。
還有人私信問我墓赴,學(xué)習(xí)中記不住代碼怎么辦?首先我們學(xué)習(xí)過程中一定要搞清楚航瞭,我們學(xué)習(xí)Java是為了找一份工作诫硕,而不是應(yīng)付考試,把學(xué)校里的那些作風(fēng)都忘了吧刊侯,不要去背代碼章办,勾重點,關(guān)鍵是要動手滨彻,軟件工程是一門實踐學(xué)科藕届,在學(xué)習(xí)過程中,光看會聽會是不行的亭饵,學(xué)到每個知識點一定要去理解休偶,動手敲代碼,敲完了辜羊,繼續(xù)下一個知識點踏兜。雷軍有篇文章:給程序員的五點建議词顾,其中有一點是必須寫夠十萬行代碼,這個觀點我認(rèn)同碱妆,不動手肉盹,跟本就不會進(jìn)步,寫代碼是一個熟能生巧的技術(shù)活山橄,沒有足夠的代碼量垮媒,是成不了高手的,因此航棱,一定要多敲代碼睡雇,多敲代碼,多敲代碼饮醇。
學(xué)習(xí)中它抱,要抓住主線學(xué)習(xí),至少能先獨立做一個小Web項目朴艰,再去考慮深入學(xué)習(xí)別的東西观蓄。有些人在學(xué)Java基礎(chǔ)的過程中,學(xué)到多線程祠墅,非要把理論搞清楚了再說侮穿,去找一些專門講多線程的書來看,還有些人看到某些文章說Java在new一個對象的時候在堆內(nèi)存里開辟了一塊空間毁嗦,就要去研究堆內(nèi)存亲茅,繼而去研究JVM去了,這樣的學(xué)習(xí)方法是不可取的狗准,初學(xué)階段要學(xué)會先抓住重點克锣,以理解、實踐腔长、找工作為主袭祟,要學(xué)會先放棄一些東西,等有了多余的時間再去深入研究自己想知道的東西捞附。還有一點巾乳,學(xué)習(xí)過程中千萬不要鉆牛角尖,我有個發(fā)小鸟召,學(xué)到多線程死鎖這一塊想鹰,死活理解不了,就放棄了药版,還有一個更可憐辑舷,在培訓(xùn)班學(xué)到匿名內(nèi)部類,一直在想這東西是干啥用的槽片,為什么要有匿名內(nèi)部類何缓,老師課都上到后面去了肢础,還在想,甚至每一個詞都要理解透了才肯繼續(xù)下去碌廓,Java基礎(chǔ)還沒學(xué)完传轰,就掉隊了,想退學(xué)谷婆,培訓(xùn)機構(gòu)不退慨蛙,兩萬多打了水漂。學(xué)習(xí)中一但遇到暫時理解不了的纪挎,先休息休息期贫,出門運動運動,適當(dāng)放松一下大腦异袄,靜下心來想想通砍,再看一遍也許就會了。還是理解不了烤蜕,就先跳過吧封孙,往后面學(xué),沒準(zhǔn)看到后面讽营,突然一下就明白前面為什么這么做了虎忌。
還有一些朋友,調(diào)試代碼過程中橱鹏,只要出了一點錯誤膜蠢,就大驚小怪,也不仔細(xì)看看錯誤蚀瘸,直接手機拍個一堆堆棧Exception的照片發(fā)私信給我狡蝶,讓我?guī)兔创a庶橱,一看贮勃,一般都是空指針異常,數(shù)組下標(biāo)越界啥的苏章,我估計他們自己看都沒看寂嘉,就直接發(fā)給我了。學(xué)習(xí)中枫绅,出現(xiàn)了問題不要怕泉孩,每一個人都是這樣的,也包括曾經(jīng)的我并淋,一定要仔細(xì)看錯誤日志寓搬,看哪一行代碼報錯,分析出現(xiàn)問題的原因县耽,然后再去排查句喷,在解決問題的過程中镣典,就是不知不覺的進(jìn)步的過程。在自己動手寫項目的過程中唾琼,web前端兄春,Java服務(wù)端,數(shù)據(jù)庫每一個環(huán)節(jié)都可能出現(xiàn)問題锡溯,要一步一步的排查赶舆,首先看web前端的值有沒有傳到Java服務(wù)端,Java服務(wù)端有沒有調(diào)到數(shù)據(jù)庫祭饭,數(shù)據(jù)庫里有沒有數(shù)據(jù)等芜茵,細(xì)心一點,就會發(fā)現(xiàn)問題的所在了甜癞,還是解決不了夕晓,就百度吧,百度不出來悠咱,找學(xué)長學(xué)姐蒸辆、身邊的高手問一下,還在解決不了析既?那就走值乎或加入我的飯團問我吧躬贡,嘿嘿。
還有人問我眼坏,自學(xué)好還是去培訓(xùn)機構(gòu)系統(tǒng)的培訓(xùn)一下比較好拂玻?
如果你現(xiàn)在還是大二大三,還有大把大把的時間宰译,我建議還是自己學(xué)習(xí)吧檐蚜,培訓(xùn)機構(gòu)動不動就一兩萬的培訓(xùn)費,不是一般人能夠承擔(dān)的沿侈,現(xiàn)在網(wǎng)絡(luò)資源那么發(fā)達(dá)闯第,要什么樣的資料基本上都能找到,只不過自學(xué)時間稍微長了一點缀拭,容易走些彎路咳短。大學(xué)里開的課程,語言類的如C語言蛛淋、C++咙好、Java、C#褐荷,數(shù)據(jù)結(jié)構(gòu)和算法勾效、匯編、軟件工程等一切和軟件有關(guān)的東西,盡量花時間好好學(xué)習(xí)层宫,能學(xué)多少就學(xué)多少绘迁,都有用。
如果你現(xiàn)在已經(jīng)工作卒密,想轉(zhuǎn)行學(xué)習(xí)Java缀台,我建議可以適當(dāng)考慮一下培訓(xùn)機構(gòu)去系統(tǒng)的學(xué)習(xí)一下,培訓(xùn)機構(gòu)在知乎的評價似乎都不怎么好哮奇,其實嘛膛腐,還是有那么幾家是好好做教育的,我去培訓(xùn)機構(gòu)招過人鼎俘,基本上還是能用哲身,剛學(xué)出來也不敢要太多工資,算是物美價廉吧贸伐,培訓(xùn)機構(gòu)還有一個好處是省時間勘天,一般四到五個月就能出爐,學(xué)得好捉邢,找一份工作還是沒問題的脯丝。
說了這么多,都感覺快成培訓(xùn)機構(gòu)的托了伏伐,給大家強調(diào)一點宠进,學(xué)習(xí)Java畢竟還是很辛苦的,不管是自學(xué)還是培訓(xùn)機構(gòu)藐翎,請大家都先做個自我評估材蹬,看自己適不適合學(xué)習(xí)Java。
最后吝镣,如果決定要學(xué)習(xí)Java了堤器,請暫時放下你手中的王者榮耀、LOL末贾、夢幻西游闸溃,先全身心的投入到學(xué)習(xí)中吧,不要到時候?qū)W沒學(xué)好未舟,玩也沒玩好圈暗,培訓(xùn)班錢也花掉了掂为,依然還沒有入門裕膀,那就尷尬了,玩游戲嘛勇哗,就要安心的玩昼扛,畢竟我在王者榮耀里曾經(jīng)也是王者。
“我們相信人人都可以成為一個java開發(fā)大神,現(xiàn)在開始抄谐,找個師兄渺鹦,帶你入門,學(xué)習(xí)的路上不再迷茫蛹含。這里是java開發(fā)修真院毅厚,初學(xué)者轉(zhuǎn)行到互聯(lián)網(wǎng)行業(yè)的聚集地。"
我做開發(fā)十多年的時間浦箱,如果大家對于學(xué)習(xí)java的學(xué)習(xí)方法吸耿,學(xué)習(xí)路線以及你不知道自己應(yīng)該是自學(xué)還是培訓(xùn)的疑問,都可以隨時來問我酷窥,大家可以加我的java交流學(xué)習(xí)qun:615741636咽安。qun內(nèi)有學(xué)習(xí)教程以及開發(fā)工具。