大多數(shù)人選擇Java可能只是因?yàn)槁?tīng)說(shuō)Java前景好、Java比較好找工作、Java語(yǔ)言在TIOBE排行榜上一直位于前三等等之類(lèi)的原因,但是Java具體好在哪里,心里卻是沒(méi)有什么概念的。
其實(shí)我選擇Java也是出于以上的原因,但是現(xiàn)在確實(shí)真正地愛(ài)上了Java。
我們?yōu)槭裁催x擇Java
那么現(xiàn)在我們來(lái)分析下Java的好處究竟在哪里。
簡(jiǎn)單易學(xué)
首先Java是一個(gè)面向?qū)ο蟮木幊陶Z(yǔ)言,容易理解。而且略去了多重加載、指針等難以理解的概念。并且實(shí)現(xiàn)了自動(dòng)垃圾回收,大大簡(jiǎn)化了程序設(shè)計(jì)。
其次Java學(xué)習(xí)資料較多,網(wǎng)上很多在線學(xué)習(xí)平臺(tái)就可以找到很多Java學(xué)習(xí)視頻,另外也有一些培訓(xùn)機(jī)構(gòu)提供的有免費(fèi)的Java視頻課程。有這些學(xué)習(xí)資料,入門(mén)足矣。
跨平臺(tái)
跨平臺(tái)是Java最大的優(yōu)勢(shì)。Java運(yùn)行在JVM(Java虛擬機(jī))上,在任何平臺(tái)只要安裝了JVM。Java就可以運(yùn)行。它架構(gòu)在操作系統(tǒng)之上,屏蔽了底層的差異。真正實(shí)現(xiàn)了“Write once,run anywhere”。
安全
Java中沒(méi)有指針,這樣就沒(méi)有辦法直接訪問(wèn)內(nèi)存了。另外Java也不容易出現(xiàn)內(nèi)存泄露。
多線程
Java內(nèi)置對(duì)多線程的支持,可以方便地在程序中實(shí)現(xiàn)多線程的功能。不像其他不支持多線程的語(yǔ)言,需要調(diào)用操作系統(tǒng)的多線程功能才能完成多線程的實(shí)現(xiàn)。
有豐富的類(lèi)庫(kù)
Java從出道至今已有20多年的歷史,經(jīng)過(guò)20多年的積累和沉淀,出現(xiàn)了很多優(yōu)秀的開(kāi)源社區(qū),如Apache和Spring。這些優(yōu)秀的社區(qū)提供了很多非常好的框架,借助這些框架可以使我們不用去關(guān)注Java底層的開(kāi)發(fā),而只需關(guān)注業(yè)務(wù)的實(shí)現(xiàn)。
使用廣泛
不得不承認(rèn)上面有一點(diǎn)是對(duì)的,Java確實(shí)有很多企業(yè)在用,而且都是用在大項(xiàng)目上。這就意味著Java方面的工作比較好找,另一點(diǎn)是在做Java開(kāi)發(fā)時(shí)如果遇到問(wèn)題,可以很容易從網(wǎng)上找到解決辦法。
職業(yè)篇
Java初級(jí)程序員是最底層的,只需要掌握J(rèn)ava的基礎(chǔ)知識(shí)就能夠成為一名初級(jí)程序員。
Java程序員可以有三個(gè)進(jìn)階方向,分別是Android移動(dòng)端開(kāi)發(fā)(以下簡(jiǎn)稱Android)、Web開(kāi)發(fā)(以下簡(jiǎn)稱Web)和通訊開(kāi)發(fā)。這時(shí)目前主流的三大方向。其中最多的是Android和Web。下面分別介紹這三個(gè)方向。以下三個(gè)方向都需要有扎實(shí)的Java基礎(chǔ)。
Android開(kāi)發(fā),主攻移動(dòng)端應(yīng)用的開(kāi)發(fā)。移動(dòng)端包括搭載Android系統(tǒng)的手機(jī)、平板、電視盒子等設(shè)備。
Web開(kāi)發(fā)方向,主要有HTML5開(kāi)發(fā)、B/S應(yīng)用開(kāi)發(fā)、微信開(kāi)發(fā)。這里的HTML5開(kāi)發(fā)是指移動(dòng)端的HTML5開(kāi)發(fā)。
通訊方向,主要是通訊服務(wù)器的開(kāi)發(fā),如游戲服務(wù)器、騰訊的QQ服務(wù)器等。
由于我從事Web開(kāi)發(fā)方向,僅僅對(duì)其他方向略有了解,所以這里主要介紹Web方向。要進(jìn)行Web開(kāi)發(fā)需要達(dá)到中級(jí)程序員的水平,能夠熟練使用SSH等框架。
而Java高級(jí)程序員則需要了解更多的框架和一些常用的應(yīng)用服務(wù)器,如工作流、搜索引擎、緩存、JTA、JBoss、WebLogic等。
達(dá)到高級(jí)程序員水平后,很多人在這個(gè)階段選擇了不同的方向。有的人厭倦了編碼和設(shè)計(jì)而轉(zhuǎn)向了需求分析和產(chǎn)品經(jīng)理,而有的人繼續(xù)執(zhí)著于技術(shù)這條路,成為了系統(tǒng)架構(gòu)師。
工具篇
子曰“工欲善其事,必先利其器”,有一把順手的“兵器”,能讓我們的學(xué)習(xí)和工作達(dá)到事半功倍的效果,那么下面我們來(lái)看看有哪些好用的工具可以助我們開(kāi)發(fā)。
文本編輯器(適合初學(xué)者)
這里我們只說(shuō)Windows平臺(tái)下的文本編輯器。
有人可能說(shuō)Windows下的記事本不就可以用嗎,我們?yōu)槭裁催€要用其他的文本編輯器呢?原因嗎,首先記事本確實(shí)不好用,修改代碼極為不便,而且有些換行標(biāo)識(shí)不識(shí)別;其次效率低,使用記事本打開(kāi)一個(gè)幾K的文件可能沒(méi)有什么感受,但是打開(kāi)一個(gè)超過(guò)10M的文件的時(shí)候就能明顯的感覺(jué)到卡了,比如我們的日志文件;最后容易出現(xiàn)問(wèn)題,用記事本編輯過(guò)UTF-8格式的文件后,會(huì)給文件加上BOM頭,這有時(shí)導(dǎo)致程序出現(xiàn)莫名的錯(cuò)誤,所以作為程序員,最好不要使用記事本。
比較好用的文本編輯器有Editplus、UltraEdit、Notepad。其中Notepad是開(kāi)源免費(fèi)的,其他兩個(gè)都是收費(fèi)的。
IDE(適合入門(mén)后和項(xiàng)目研發(fā))
IDE是集成開(kāi)發(fā)環(huán)境的簡(jiǎn)稱,使用IDE的目的是為了能讓我們更快地構(gòu)建項(xiàng)目、更方便地寫(xiě)代碼,同時(shí)屏蔽了代碼編譯的動(dòng)作。IDE都有代碼高亮、代碼提示以及錯(cuò)誤提示等功能,同時(shí)我們可以借助IDE的插件實(shí)現(xiàn)代碼管理、代碼審查和其他一些好用的功能。
常用的IDE有Eclipse、NetBeans和IntelliJ IDEA。前兩者都是免費(fèi)的,后者提供有社區(qū)版本,也是免費(fèi)的,但是企業(yè)版是收費(fèi)的。其中Eclipse是用的最多的IDE。
在Eclipse上擴(kuò)展的有兩款優(yōu)秀的IDE,Spring Tool Suite(STS)和大名鼎鼎的MyEclipse。前者免費(fèi)后者收費(fèi),后者集成了前者的所有功能。這里我建議大家使用STS,因?yàn)镾TS添加了很多對(duì)Spring的相關(guān)支持,如果項(xiàng)目中用到了Spring,使用起來(lái)會(huì)非常方便。也可以在Eclipse上安裝STS插件,能夠達(dá)到同樣的效果,Spring官網(wǎng)上有插件的安裝方法,這里不再贅述。
技術(shù)圖譜
以上圖譜詳細(xì)描繪了每個(gè)級(jí)別都需要掌握哪些知識(shí),此圖僅供參考。在實(shí)際工作期間,一般是根據(jù)公司需要或項(xiàng)目需要來(lái)學(xué)習(xí)不同的技術(shù)。但還是建議多去學(xué)習(xí)些知識(shí),我覺(jué)得有句話說(shuō)的很對(duì),“很多東西不是你覺(jué)得有用才去學(xué),而是學(xué)了才知道它有用”,我一直信奉這句話,因?yàn)槲揖褪沁@句話真正的受益者。
入門(mén)篇
俗話說(shuō)“師傅領(lǐng)進(jìn)門(mén),修行靠個(gè)人”,所以說(shuō)只要入門(mén)了,后面學(xué)習(xí)起來(lái)是很快的,而且比較容易。那么學(xué)習(xí)Java應(yīng)該如何入門(mén)呢?
首先要理解面向?qū)ο蟮母拍睿@個(gè)很重要。但也不是說(shuō)必須完全理解概念才能去學(xué)Java。而是先接觸Java的基礎(chǔ)知識(shí),如類(lèi)、屬性、方法等。然后在學(xué)習(xí)的過(guò)程中理解面向?qū)ο蟮母拍睢?/p>
在大概理解了面向?qū)ο蟮母拍詈?,這時(shí)你應(yīng)該學(xué)會(huì)了一些Java的語(yǔ)法和一些API的使用。這時(shí)需要繼續(xù)深入地去學(xué)習(xí)這些。同時(shí)要養(yǎng)成自己良好的編碼習(xí)慣,Java有自己對(duì)包名、類(lèi)名、方法名等的命名規(guī)范。這個(gè)時(shí)候要嘗試按照規(guī)范寫(xiě)代碼,同時(shí)甩掉以前寫(xiě)代碼時(shí)養(yǎng)成的不良習(xí)慣。
在熟悉了常用的API及語(yǔ)法后要去學(xué)習(xí)I/O和流(Stream)以及多線程編程和網(wǎng)絡(luò)編程。I/O和輸入輸出流,要熟練掌握。而在這個(gè)階段暫時(shí)不需要深入了解多線程編程和網(wǎng)絡(luò)編程。
在系列基礎(chǔ)完成之后就需要去接觸下數(shù)據(jù)庫(kù)和JDBC,對(duì)于數(shù)據(jù)庫(kù)不需要深入了解,能夠創(chuàng)建表、查詢表數(shù)據(jù)即可。然后嘗試使用JDBC連接數(shù)據(jù)庫(kù),并對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)做CURD操作。
在學(xué)習(xí)Java初期,我建議大家使用文本編輯器來(lái)寫(xiě)代碼,一是有助于記憶Java中的一些關(guān)鍵字和常用類(lèi)及方法,二是可以熟悉Java的常用命令。在使用了一段時(shí)間的文本編輯器后就可以使用IDE來(lái)開(kāi)發(fā)了,使用IDE將使你寫(xiě)代碼寫(xiě)得更快,也不容易出錯(cuò)。
基礎(chǔ)是很重要的,雖然簡(jiǎn)單,但是也馬虎不得。這里推薦幾本書(shū)《Thinking in Java》、《Java 8編程參考官方教程》等圖書(shū)。
中級(jí)篇
入門(mén)后就可以選擇主攻方向了,幾個(gè)方向在職業(yè)篇中已有介紹。通訊開(kāi)發(fā)方向其實(shí)在這個(gè)時(shí)候就可以轉(zhuǎn)了,但是還是建議學(xué)習(xí)下Java中級(jí)的內(nèi)容,這些內(nèi)容也有助于你今后在通訊開(kāi)發(fā)的路上走得更容易。因?yàn)槲沂侵鞴eb方向,所以這里我們只討論Web方向。
在這個(gè)階段你接觸的知識(shí)面將更廣,在學(xué)習(xí)Web開(kāi)發(fā)之前首先需要學(xué)習(xí)HTML和CSS,然后再學(xué)習(xí)JS以及jQuery。在有一定基礎(chǔ)之后就可以開(kāi)始學(xué)習(xí)JSP和Servlet了,重點(diǎn)學(xué)習(xí)下JSP的內(nèi)置對(duì)象及EL表達(dá)式,并試著去做一些頁(yè)面。然后學(xué)習(xí)下Ajax,要能夠熟練的使用JSON和XML來(lái)做數(shù)據(jù)交互。
以上內(nèi)容學(xué)習(xí)完之后Java的基礎(chǔ)部分就算是基本掌握了,下面就該學(xué)習(xí)一些框架了。建議先從Spring學(xué)起,Spring將成為你今后開(kāi)發(fā)項(xiàng)目的核心框架。Spring也是現(xiàn)在項(xiàng)目中最常用的框架??梢陨钊氲膶W(xué)習(xí),試著去理解Spring的一些實(shí)現(xiàn)原理,這將有助于你更好的使用Spring。
學(xué)完Spring之后可以學(xué)習(xí)下ORM框架,比如Hibernate和MyBatis,這些相對(duì)于Spring來(lái)說(shuō)要簡(jiǎn)單的多。主要學(xué)習(xí)與Spring的整合和Spring中的事務(wù)管理。一定要深入的了解數(shù)據(jù)庫(kù)事務(wù),這將對(duì)你今后的項(xiàng)目開(kāi)發(fā)非常有幫助。
最后我們來(lái)說(shuō)控制層的學(xué)習(xí),這里我建議大家重點(diǎn)學(xué)習(xí)SpringMVC。因?yàn)镾pringMVC是目前使用最為廣泛的控制層,而且簡(jiǎn)單易學(xué),已經(jīng)有了要替代Struts的趨勢(shì)了。但是Struts還是要學(xué)習(xí)下,畢竟還有一些公司在用,這將為你找工作加大一點(diǎn)籌碼。
在學(xué)習(xí)這些內(nèi)容的過(guò)程中一定要學(xué)習(xí)下代碼管理工具SVN和Git,目前SVN在企業(yè)中用的較多,而開(kāi)源社區(qū)一般都是用的Git。
有了JSP基礎(chǔ)和掌握了框架的使用后就可以出去找工作了,在工作過(guò)程中這些知識(shí)你將掌握的更加牢固。也可能在工作過(guò)程中會(huì)遇到你沒(méi)有學(xué)過(guò)的技術(shù),不要怕,有了之前的基礎(chǔ)你將很快掌握這些新的技術(shù),加入工作的第一年將是你進(jìn)步最快的一年。
而加入工作之后你可能也不會(huì)有太多的時(shí)間來(lái)學(xué)習(xí),這時(shí)候要約束好自己。不要忘了學(xué)習(xí),學(xué)習(xí)是最好的進(jìn)步方式。
高級(jí)篇
當(dāng)我們參加了工作之后,開(kāi)始接觸更多的技術(shù)。如果有機(jī)會(huì)就多學(xué)習(xí)些技術(shù),不求精通,但求會(huì)用,并且知道這項(xiàng)技術(shù)能夠解決什么問(wèn)題。開(kāi)始在項(xiàng)目中參與設(shè)計(jì)文檔的編寫(xiě)。能夠?yàn)樽约旱捻?xiàng)目選擇合適的框架,并且能用自己學(xué)到的技術(shù)去解決項(xiàng)目中遇到的難題。
這時(shí)候根據(jù)項(xiàng)目和公司的差異用的技術(shù)也不盡相同,但是日志框架、項(xiàng)目構(gòu)建、單元測(cè)試、緩存、集群、負(fù)載均衡、SOAP等是一定要掌握的。這些是在大型項(xiàng)目中比較常用的技術(shù)。然后可以根據(jù)自己的興趣及業(yè)余時(shí)間去學(xué)習(xí)自己感興趣的技術(shù)。
架構(gòu)師之路
成為一名架構(gòu)師一直是我的目標(biāo)。一名優(yōu)秀的架構(gòu)師首先一定是一名卓越的程序員,架構(gòu)設(shè)計(jì)不應(yīng)僅僅是理論,它應(yīng)當(dāng)是在實(shí)踐中產(chǎn)生的經(jīng)驗(yàn)和結(jié)果。架構(gòu)師也要有靈敏的嗅覺(jué),能夠看清未來(lái)技術(shù)的發(fā)展方向,應(yīng)當(dāng)避免在項(xiàng)目中使用已過(guò)時(shí)的技術(shù)或沒(méi)有社區(qū)支持的技術(shù)。
作為一名架構(gòu)師要掌握以下技能:
SOA:在微服務(wù)橫行的年代,這項(xiàng)本領(lǐng)是必不可少的。
設(shè)計(jì)模式:這將有助于你設(shè)計(jì)出更加優(yōu)雅的程序。