想了解java編程語(yǔ)言學(xué)習(xí)方法嗎?想了解假如時(shí)光倒流,我會(huì)這么學(xué)習(xí)Java?? 嗎?......本文帶你一探究竟。
1.假如時(shí)光倒流,我會(huì)這么學(xué)習(xí)Java
原作者:碼農(nóng)老劉原文鏈接: 我進(jìn)入Java 領(lǐng)域已經(jīng)快15個(gè)年頭了, 雖然學(xué)的也一般, 但是分享下我的心得,估計(jì)也能幫大家少走點(diǎn)彎路。[入門(mén)]我在2001年之前是C/C++陣營(yíng), 有C和面向?qū)ο蟮幕A(chǔ), 后來(lái)轉(zhuǎn)到Java ,發(fā)現(xiàn)沒(méi)有指針的Java真是好簡(jiǎn)單, 另外Java 的類(lèi)庫(kù)好用的讓人哭啊。后來(lái)我就看《Thinking in Java》 ,《 Java 核心技術(shù) 》, 感覺(jué)也不吃力。如果我之前沒(méi)學(xué)過(guò)別的語(yǔ)言,或者半路出家轉(zhuǎn)到計(jì)算機(jī)行業(yè), 我不會(huì)先看上面那兩本, 相反我會(huì)選《Head First Java》, 這本書(shū)非常適合零基礎(chǔ)的小白, 讀起來(lái)輕松搞笑, 不信你看看*頁(yè)但是光看書(shū)也挺無(wú)趣的,不妨和視頻結(jié)合著看, 我覺(jué)得傳智播客的Java基礎(chǔ)視頻很不錯(cuò) (唉, 給傳智打了個(gè)廣告), 網(wǎng)上一搜就有。注意:視頻的好處就是能看到敲代碼的過(guò)程, 代碼是活的, 這點(diǎn)很爽。 如果視頻只是按PPT講編程, 果斷扔掉。書(shū)也有書(shū)的好處,能寫(xiě)成書(shū)的, 肯定是作者經(jīng)過(guò)系統(tǒng)化思考,梳理才能形成的東西, 所以系統(tǒng)性比較強(qiáng)。書(shū)還有其他優(yōu)點(diǎn), 例如可以隨便的翻, 找到重點(diǎn)反復(fù)的看。所以混合著看經(jīng)典書(shū)+優(yōu)秀的視頻 應(yīng)該是*的入門(mén)。Java 入門(mén), 我不會(huì)去上培訓(xùn)班,白白浪費(fèi)錢(qián) ,自學(xué)就夠了。自學(xué)過(guò)程中如果有實(shí)戰(zhàn)經(jīng)驗(yàn)豐富的高人指導(dǎo)一下, 給我繪出路線圖, 指出攀登的方向,哪些地方有陷阱, 哪些地方不應(yīng)該浪費(fèi)時(shí)間, 我的自學(xué)就可以減少摸索,少走彎路,很不幸, 我當(dāng)年沒(méi)有遇到, 如果時(shí)光倒流, 我會(huì)想辦法找一個(gè)來(lái)指導(dǎo)我。[實(shí)踐]軟件行業(yè)的一大特點(diǎn)就是光看不做永遠(yuǎn)都學(xué)不會(huì),編碼不到10萬(wàn)行都不好意思出去打招呼。所以實(shí)踐,實(shí)踐,實(shí)踐!在校期間,我還是會(huì)盡可能的去找項(xiàng)目做(參見(jiàn)我的另一篇文章《從現(xiàn)在開(kāi)始豐富你的簡(jiǎn)歷》, 回復(fù)“簡(jiǎn)歷”查看) , 實(shí)在沒(méi)找到,也可以先把基礎(chǔ)打好我上*的時(shí)候用的是嚴(yán)蔚敏的《數(shù)據(jù)結(jié)構(gòu)》, 當(dāng)時(shí)我也把習(xí)題都做了一遍,考高級(jí)程序員的時(shí)候, 成績(jī)非常好。后來(lái)我知道了一本更好的算法入門(mén)書(shū)《算法》, 如果時(shí)光能夠重來(lái), 我還是會(huì)這本書(shū)上提到的所有數(shù)據(jù)結(jié)構(gòu)和算法用Java 都實(shí)現(xiàn)一遍, 課后作業(yè)也爭(zhēng)取都做一遍。這是個(gè)非常重要的訓(xùn)練,因?yàn)槲抑溃?真的做了, 就會(huì)發(fā)現(xiàn)工作以后只要不是設(shè)計(jì)算法, 基本的數(shù)據(jù)結(jié)構(gòu)沒(méi)有能難住我的。【Java SE】對(duì)于Java集合框架, 不但要學(xué)會(huì)用, 我還會(huì)嘗試著實(shí)現(xiàn)一遍,List, ArrayList, Set ,HashSet, Map ,HashSet 等等, 要是不知道怎么寫(xiě), 看看JDK的源碼就可以了, 那里有*的老師。實(shí)現(xiàn)一遍能更好的明白面向?qū)ο蟮脑O(shè)計(jì), 接口,抽象類(lèi), 具體類(lèi)的關(guān)系, 怎么分離職責(zé),會(huì)學(xué)習(xí)到設(shè)計(jì)模式中的模板方法, Iterator 等 。值得一提的是Iterator, 很有趣, 我還清楚的記得那一年自己實(shí)現(xiàn)集合框架中 Iterator 的時(shí)候的激動(dòng)心情啊 :-)在實(shí)現(xiàn)Java 集合框架的時(shí)候, 可以順便把泛型也學(xué)了, 不學(xué)不行,要不然實(shí)現(xiàn)不了啊。Java 世界里,萬(wàn)事萬(wàn)物都是對(duì)象, 大家都知道封裝,繼承,多態(tài), 但是僅僅了解這些只是入了門(mén), 不可能做出真正的面向?qū)ο蟮某绦?。有一本?jīng)典的書(shū)《敏捷軟件開(kāi)發(fā), 原則,模式,實(shí)踐》,里邊詳細(xì)的講解了一個(gè)薪水支付案例,是迄今為止*的面向?qū)ο笤O(shè)計(jì)的例子我會(huì)用Java 把它實(shí)現(xiàn)一遍, 真正的體會(huì)一下OOD, 了解怎么才能把合適的責(zé)任分給合適的類(lèi), 什么叫面向接口而不是面向?qū)崿F(xiàn)編程, 什么是優(yōu)先使用組合而不是繼承。對(duì)于Java線程, 重點(diǎn)還是理解概念, 因?yàn)槲抑涝谝院蟮墓ぷ髦校ǔ菑氖孪到y(tǒng)級(jí)編程) ,自己寫(xiě)線程/線程池的機(jī)會(huì)是非常罕見(jiàn)的,都被類(lèi)庫(kù),框架給封裝好了。所以重點(diǎn)是理解,看書(shū)的話就當(dāng)然是《Java并發(fā)編程實(shí)戰(zhàn)》 ,一大群大牛寫(xiě)的啊。對(duì)于Java IO, 我覺(jué)得架構(gòu)設(shè)計(jì)的很優(yōu)雅,典型的派, 可就是不太實(shí)用, 打開(kāi)讀取一個(gè)文件都得用裝飾者模式包裝來(lái)包裝去, 太累了。項(xiàng)目實(shí)戰(zhàn)中呢,也就是讀取個(gè)property 文件, xml 文件。 我還是重點(diǎn)去理解概念和設(shè)計(jì)吧。不過(guò)自己寫(xiě)個(gè)簡(jiǎn)單的xml 解析器倒是不錯(cuò)。至于 AWT, Swing , 簡(jiǎn)單看看就行了, 我不會(huì)去深入研究, Java 是典型的服務(wù)器端的語(yǔ)言, 開(kāi)發(fā)客戶端程序的極少, 你想想, 你用Swing/AWT搞個(gè)桌面程序出來(lái), 還得讓客戶裝個(gè)JRE才能運(yùn)行, 是不是有點(diǎn)過(guò)分 ? 據(jù)我所知,也即是銀行的一些應(yīng)用在用Swing ,AWT了。 有人可能說(shuō) Applet, 它曾經(jīng)流行過(guò), 現(xiàn)在早都沒(méi)人用了。所以我不會(huì)在Swing和AWT上浪費(fèi)時(shí)間。Java 看起來(lái)沒(méi)有集合框架,線程,OO等那么耀眼, 但它可是很多框架(SSH) 的基礎(chǔ)啊(回復(fù)“反射”查看相關(guān)文章), 先把基礎(chǔ)學(xué)會(huì),后面的Java EE得用到它。想真正的學(xué)好Java ,不了解Java 虛擬機(jī)怎么可能? 《深入理解Java 虛擬機(jī)》一定得看,看完的目標(biāo)就是寫(xiě)個(gè)簡(jiǎn)單的Java 反編譯器?!咀鰝€(gè)有素養(yǎng)的Java碼農(nóng)】我記得08的時(shí)候, 我的IBM經(jīng)理說(shuō)設(shè)計(jì)模式是必備技能, 不懂設(shè)計(jì)模式的我們不能要了。所以設(shè)計(jì)模式是必學(xué), 其實(shí)Java里邊用的非常多,簡(jiǎn)直就是設(shè)計(jì)模式的活教材, 工廠方法,單例,模板方法, 裝飾者,責(zé)任鏈都有體現(xiàn)。當(dāng)然我會(huì)去先看一下輕松的《Head First Design》, 《設(shè)計(jì)模式》的作者之一 Eric Gamma 都大力推薦, 絕對(duì)不容錯(cuò)過(guò)。又過(guò)了幾年, 我的IBM經(jīng)理又說(shuō),現(xiàn)在我們默認(rèn)設(shè)計(jì)模式大家都會(huì)了, 敏捷實(shí)踐是必備技能 !所以, JUnit 我得會(huì), 重構(gòu)我得會(huì), TDD,持續(xù)集成這些最最基本的敏捷實(shí)踐也得知道, 要不然會(huì)被人鄙視啊。作為一個(gè)有追求的Java碼農(nóng), 我寫(xiě)代碼的時(shí)候要遵循Java 的編碼規(guī)范,例如類(lèi)名首字母大寫(xiě), 報(bào)名要小寫(xiě), 方法名要首字母小寫(xiě)...等等。作為代碼潔癖, 我受不了臟代碼, 我會(huì)不斷的打磨自己的代碼,直到它像一個(gè)工藝品。Java 的*實(shí)踐 《effective java》 怎么能錯(cuò)過(guò)? 里邊滿滿的全是JDK的作者們總結(jié)出來(lái)的java 編程*用法。不過(guò)翻譯的實(shí)在是不咋滴, 很多句子都得仔細(xì)的琢磨一下才知道什么意思, 所以我打算錄一系列視頻講解一下,敬請(qǐng)期待。【Java EE】走了這么遠(yuǎn), 終于來(lái)到Java EE了, Java 不就是寫(xiě)服務(wù)器端的Web應(yīng)用的嗎?我會(huì)自己寫(xiě)個(gè)Web程序, 可以考慮把上面提到的經(jīng)典的薪水支付案例改造成Web 版, 用最基礎(chǔ)的技術(shù)Servlet/jsp/jdbc 。然后 研究struts, 自己寫(xiě)個(gè)簡(jiǎn)單mvc框架, 在自己的Web 程序中用起來(lái), 這叫吃自己的狗糧。然后研究Hibenete , 自己寫(xiě)個(gè)簡(jiǎn)單的OR mapping框架, 再吃一次自己的狗糧。然后讀一下經(jīng)典的書(shū)《J2EE without EJB》 , 對(duì),就是spring 的作者Rod Johnson寫(xiě)的, 它顛覆了大家對(duì)于重量級(jí)EJB的認(rèn)識(shí), 開(kāi)啟了新的時(shí)代。有了這本書(shū)的鋪墊, 自己寫(xiě)個(gè)簡(jiǎn)化的依賴注入也不是難事, 寫(xiě)好后還是在自己的Web程序中用起來(lái), *一次吃自己的狗糧。等你做了就知道, 所有這些,都依賴Java 。再往后走, 就應(yīng)該是找真正的項(xiàng)目做, 或者去找實(shí)習(xí)了, 那是另外一個(gè)話題了,以后再聊?!鹃喿x代碼】熟讀唐詩(shī)三百首,不會(huì)作詩(shī)也會(huì)吟模仿是*的學(xué)習(xí)! 多看看大牛們的代碼是怎么寫(xiě)的, 潛移默化,自己的武功也能提高。我身邊要是有個(gè)好師傅, 跟著他,看著他編程, 提高的該有多快啊。在學(xué)習(xí)Java SE和Java EE的同時(shí), 我會(huì)讀一下這些源代碼:JDK中的 Java 源碼 : 老祖宗的東西絕對(duì)經(jīng)典JUnit 源碼 : 看看Eric Gamma 和 Kent beck 是怎么通過(guò)模式來(lái)創(chuàng)建系統(tǒng)的 (回復(fù)"JUnit"查看) : 以Spring Framework為核心的,Pragmatic風(fēng)格的JavaEE應(yīng)用參考示例,是JavaEE世界中的主流技術(shù)選型,*實(shí)踐的總結(jié)與演示。國(guó)人開(kāi)發(fā)的,大力推薦一下。此外我還是會(huì)研究下本世紀(jì)初著名的Jive論壇, 雖然非常古老, 雖然源碼派十足, 但簡(jiǎn)直是設(shè)計(jì)模式的大本營(yíng), 都是活生生的應(yīng)用的例子里邊有個(gè)用代理模式實(shí)現(xiàn)權(quán)限控制, 讓我記憶猶新。另外如果有余力的,有興趣的話, 當(dāng)然可以閱讀Struts, Spring, hibernate的源碼, 甚至參與進(jìn)去開(kāi)發(fā)了。如何學(xué)習(xí)Java ,這是我這么多年來(lái)的感受, 也只是我的一家之談。 歡迎和我交流 。學(xué)習(xí)編程從來(lái)就不是一件容易的事情, 不可能看看視頻,看看書(shū)就學(xué)會(huì), 需要大量的編程和實(shí)踐。 編程雖然是極為辛苦的腦力和體力勞動(dòng), 但其中蘊(yùn)含的創(chuàng)造的樂(lè)趣也是無(wú)與倫比的。 希望每個(gè)人都能夠享受這個(gè)過(guò)程,樂(lè)在其中。
上述文章了解到關(guān)于假如時(shí)光倒流,我會(huì)這么學(xué)習(xí)Java?? ,讓我們對(duì)java編程語(yǔ)言學(xué)習(xí)方法 有一個(gè)直觀的認(rèn)知。我們發(fā)現(xiàn),作為一個(gè)優(yōu)秀的Java程序員是多么的自豪。