摘要:看起來(lái)沒(méi)有集合框架,線程,等那么耀眼,但它可是很多框架的基礎(chǔ)啊回復(fù)反射查看相關(guān)文章,先把基礎(chǔ)學(xué)會(huì),后面的得用到它。
回頭看看, 我進(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 的類庫(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)上一搜就有, 真搜不到找我吧(QQ 14703250)
注意:視頻的好處就是能看到敲代碼的過(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ǔ)打好
我上大學(xué)的時(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ì), 接口,抽象類, 具體類的關(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é)任分給合適的類, 什么叫面向接口而不是面向?qū)崿F(xiàn)編程, 什么是優(yōu)先使用組合而不是繼承。
對(duì)于Java線程, 重點(diǎn)還是理解概念, 因?yàn)槲抑涝谝院蟮墓ぷ髦校ǔ菑氖孪到y(tǒng)級(jí)編程) ,自己寫(xiě)線程/線程池的機(jī)會(huì)是非常罕見(jiàn)的,都被類庫(kù),框架給封裝好了。所以重點(diǎn)是理解,
看書(shū)的話就當(dāng)然是《Java并發(fā)編程實(shí)戰(zhàn)》 ,一大群大牛寫(xiě)的啊。
對(duì)于Java IO, 我覺(jué)得架構(gòu)設(shè)計(jì)的很優(yōu)雅,典型的學(xué)院派, 可就是不太實(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 Reflection 看起來(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ī)范,例如類名首字母大寫(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 development 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 Reflection。
再往后走, 就應(yīng)該是找真正的項(xiàng)目做, 或者去找實(shí)習(xí)了, 那是另外一個(gè)話題了,以后再聊。
【閱讀代碼】
熟讀唐詩(shī)三百首,不會(huì)作詩(shī)也會(huì)吟
模仿是最好的學(xué)習(xí)! 多看看大牛們的代碼是怎么寫(xiě)的, 潛移默化,自己的武功也能提高。
我身邊要是有個(gè)好師傅, 跟著他,看著他編程, 提高的該有多快啊。
在學(xué)習(xí)Java SE和Java EE的同時(shí), 我會(huì)讀一下這些源代碼:
JDK中的 Java Collection 源碼 : 老祖宗的東西絕對(duì)經(jīng)典
JUnit 源碼 : 看看Eric Gamma 和 Kent beck 是怎么通過(guò)模式來(lái)創(chuàng)建系統(tǒng)的 (回復(fù)"JUnit"查看)
SpringSide : 以Spring Framework為核心的,Pragmatic風(fēng)格的JavaEE應(yīng)用參考示例,是JavaEE世界中的主流技術(shù)選型,最佳實(shí)踐的總結(jié)與演示。
國(guó)人開(kāi)發(fā)的,大力推薦一下。
此外我還是會(huì)研究下本世紀(jì)初著名的Jive論壇, 雖然非常古老, 雖然源碼學(xué)院派十足, 但簡(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è)在其中。
歡迎交流:
QQ: 14703250
微信: onlyliuxin97
微信公共號(hào): 碼農(nóng)翻身
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65674.html
摘要:但現(xiàn)實(shí)情況是到目前為止是人民群眾集體擁有比特幣公共網(wǎng)絡(luò),正是集體給了比特幣力量。網(wǎng)絡(luò)效應(yīng)就像跑遠(yuǎn)的火車(chē),比特幣基于工作量證明法的永恒不變的網(wǎng)絡(luò)已經(jīng)跑的很遠(yuǎn)了,而且?guī)缀醪豢赡鼙怀健? 全文轉(zhuǎn)載自硬幣星球翻譯:李林 校對(duì):杜江南 英文原文: Bitcoin’s superpower: Immutability Volumne 1, Monday, Febuary 25, 2019 永恒不...
摘要:但現(xiàn)實(shí)情況是到目前為止是人民群眾集體擁有比特幣公共網(wǎng)絡(luò),正是集體給了比特幣力量。網(wǎng)絡(luò)效應(yīng)就像跑遠(yuǎn)的火車(chē),比特幣基于工作量證明法的永恒不變的網(wǎng)絡(luò)已經(jīng)跑的很遠(yuǎn)了,而且?guī)缀醪豢赡鼙怀健? 全文轉(zhuǎn)載自硬幣星球翻譯:李林 校對(duì):杜江南 英文原文:Bitcoin’s superpower: Immutability?Volumne 1, Monday, Febuary 25, 2019 永恒不變...
摘要:看完了編碼,我會(huì)推薦我的學(xué)生再深入一步,看一看深入理解計(jì)算機(jī)系統(tǒng),它把操作系統(tǒng),計(jì)算機(jī)組成原理,數(shù)字電路,編譯原理,網(wǎng)絡(luò),計(jì)算機(jī)體系結(jié)構(gòu)等程序員需要了解的核心知識(shí)匯集在一起,讓你迅速的打下扎實(shí)的基礎(chǔ)。 假如我是計(jì)算機(jī)系老師, 我會(huì)先讓我的學(xué)生先去讀一下《編碼:隱匿在計(jì)算機(jī)軟硬件背后的語(yǔ)言》這本書(shū), 搞明白一個(gè)個(gè)簡(jiǎn)單的邏輯門(mén)電路到底是怎么組成計(jì)算機(jī)的, 弄清楚計(jì)算機(jī)軟件語(yǔ)言和硬件之間到底...
閱讀 2899·2019-08-30 15:55
閱讀 2009·2019-08-30 14:02
閱讀 1247·2019-08-29 15:23
閱讀 1014·2019-08-29 11:27
閱讀 466·2019-08-26 11:43
閱讀 3196·2019-08-26 10:32
閱讀 1260·2019-08-23 14:41
閱讀 3304·2019-08-23 14:41