假如時光倒流,我會這麼學習Java

回頭看看, 我進入Java 領域已經快15個年頭了, 雖然學的也一般, 但是分享下我的心得,估計也能幫大家少走點彎路。

入門

我在2001年之前是C/C++陣營, 有C和麪向對象的基礎, 後來轉到Java ,發現沒有指針的Java真是好簡單, 另外Java 的類庫好用的讓人哭啊。後來我就看《Thinking in Java》 ,《 Java 核心技術 》, 感覺也不吃力。

Paste_Image.png

Paste_Image.png

如果我之前沒學過別的語言,或者半路出家轉到計算機行業, 我不會先看上面那兩本, 相反我會選《Head First Java》, 這本書非常適合零基礎的小白, 讀起來輕鬆搞笑, 不信你看看第一頁!

Paste_Image.png

但是光看書也挺無趣的,不妨和視頻結合着看, 我覺得傳智播客的Java基礎視頻很不錯 (唉, 給傳智打了個廣告), 網上一搜就有,真搜不到就來我的QQ羣裏吧(羣號碼:589809992) 
注意:視頻的好處就是能看到敲代碼的過程, 代碼是活的, 這點很爽。 如果視頻只是按PPT講編程, 果斷扔掉。 
書也有書的好處,能寫成書的, 肯定是作者經過系統化思考,梳理才能形成的東西, 所以系統性比較強。 
書還有其他優點, 例如可以隨便的翻, 找到重點反覆的看。 
所以混合着看經典書+優秀的視頻 應該是最好的入門。 
Java 入門, 我不會去上培訓班,白白浪費錢 ,自學就夠了。 
自學過程中如果有實戰經驗豐富的高人指導一下, 給我繪出路線圖, 指出攀登的方向,哪些地方有陷阱, 哪些地方不應該浪費時間, 我的自學就可以減少摸索,少走彎路, 
很不幸, 我當年沒有遇到, 如果時光倒流, 我會想辦法找一個來指導我。

實踐

軟件行業的一大特點就是光看不做永遠都學不會,編碼不到10萬行都不好意思出去打招呼。 
所以實踐,實踐,實踐! 
在校期間,我還是會儘可能的去找項目做(參見我的另一篇文章《從現在開始豐富你的簡歷》, 回覆“簡歷”查看) , 實在沒找到,也可以先把基礎打好 
我上大學的時候用的是嚴蔚敏的《數據結構》, 當時我也把習題都做了一遍,考高級程序員的時候, 成績非常好。 
後來我知道了一本更好的算法入門書《算法》, 如果時光能夠重來, 我還是會這本書上提到的所有數據結構和算法用Java 都實現一遍, 課後作業也爭取都做一遍。 
這是個非常重要的訓練,因爲我知道, 真的做了, 就會發現工作以後只要不是設計算法, 基本的數據結構沒有能難住我的。

Paste_Image.png

Java SE

對於Java集合框架, 不但要學會用, 我還會嘗試着實現一遍,List, ArrayList, Set ,HashSet, Map ,HashSet 等等, 要是不知道怎麼寫, 看看JDK的源碼就可以了, 那裏有最好的老師。 
實現一遍能更好的明白麪向對象的設計, 接口,抽象類, 具體類的關係, 怎麼分離職責,會學習到設計模式中的模板方法, Iterator 等 。 
值得一提的是Iterator, 很有趣, 我還清楚的記得那一年自己實現集合框架中 Iterator 的時候的激動心情啊 :-) 
在實現Java 集合框架的時候, 可以順便把泛型也學了, 不學不行,要不然實現不了啊。

Java 世界裏,萬事萬物都是對象, 大家都知道封裝,繼承,多態, 但是僅僅瞭解這些只是入了門, 不可能做出真正的面向對象的程序。 
有一本經典的書《敏捷軟件開發, 原則,模式,實踐》,裏邊詳細的講解了一個薪水支付案例,是迄今爲止最好的面向對象設計的例子 
我會用Java 把它實現一遍, 真正的體會一下OOD, 瞭解怎麼才能把合適的責任分給合適的類, 什麼叫面向接口而不是面向實現編程, 什麼是優先使用組合而不是繼承。

Paste_Image.png

對於Java線程, 重點還是理解概念, 因爲我知道在以後的工作中(除非從事系統級編程) ,自己寫線程/線程池的機會是非常罕見的,都被類庫,框架給封裝好了。所以重點是理解, 
看書的話就當然是《Java併發編程實戰》 ,一大羣大牛寫的啊。

Paste_Image.png

對於Java IO, 我覺得架構設計的很優雅,典型的學院派, 可就是不太實用, 打開讀取一個文件都得用裝飾者模式包裝來包裝去, 太累了。 
項目實戰中呢,也就是讀取個property 文件, xml 文件。 我還是重點去理解概念和設計吧。 
不過自己寫個簡單的xml 解析器倒是不錯。

至於 AWT, Swing , 簡單看看就行了, 我不會去深入研究, Java 是典型的服務器端的語言, 開發客戶端程序的極少, 你想想, 你用Swing/AWT搞個桌面程序出來, 還得讓客戶裝個JRE才能運行, 是不是有點過分 ? 據我所知,也即是銀行的一些應用在用Swing ,AWT了。  有人可能說 Applet, 它曾經流行過, 現在早都沒人用了。 
所以我不會在Swing和AWT上浪費時間。

Java Reflection 看起來沒有集合框架,線程,OO等那麼耀眼, 但它可是很多框架(SSH) 的基礎啊(回覆“反射”查看相關文章), 先把基礎學會,後面的Java EE得用到它。

想真正的學好Java ,不瞭解Java 虛擬機怎麼可能? 《深入理解Java 虛擬機》一定得看,看完的目標就是寫個簡單的Java 反編譯器。

Paste_Image.png

做個有素養的Java碼農

我記得08的時候, 我的IBM經理說設計模式是必備技能, 不懂設計模式的我們不能要了。 
所以設計模式是必學, 其實Java裏邊用的非常多,簡直就是設計模式的活教材, 工廠方法,單例,模板方法, 裝飾者,責任鏈都有體現。 
當然我會去先看一下輕鬆的《Head First Design》, 《設計模式》的作者之一 Eric Gamma 都大力推薦, 絕對不容錯過。

Paste_Image.png

又過了幾年, 我的IBM經理又說,現在我們默認設計模式大家都會了, 敏捷實踐是必備技能 ! 
所以, JUnit 我得會, 重構我得會, TDD,持續集成這些最最基本的敏捷實踐也得知道, 要不然會被人鄙視啊。 
作爲一個有追求的Java碼農, 我寫代碼的時候要遵循Java 的編碼規範,例如類名首字母大寫, 報名要小寫, 方法名要首字母小寫…等等。 
作爲代碼潔癖, 我受不了髒代碼, 我會不斷的打磨自己的代碼,直到它像一個工藝品。

Java 的最佳實踐 《effective java》 怎麼能錯過? 裏邊滿滿的全是JDK的作者們總結出來的java 編程最佳用法。 
不過翻譯的實在是不咋滴, 很多句子都得仔細的琢磨一下才知道什麼意思, 所以我打算錄一系列視頻講解一下,敬請期待。

Paste_Image.png

Java EE

走了這麼遠, 終於來到Java EE了, Java 不就是寫服務器端的Web應用的嗎?

我會自己寫個Web程序, 可以考慮把上面提到的經典的薪水支付案例改造成Web 版, 用最基礎的技術Servlet/jsp/jdbc 。 
然後 研究struts, 自己寫個簡單mvc框架, 在自己的Web 程序中用起來, 這叫吃自己的狗糧。 
然後研究Hibenete , 自己寫個簡單的OR mapping框架, 再吃一次自己的狗糧。 
然後讀一下經典的書《J2EE development without EJB》 , 對,就是Spring 的作者Rod Johnson寫的, 它顛覆了大家對於重量級EJB的認識, 開啓了新的時代。(Java學習交流QQ羣:589809992 我們一起學Java!) 
有了這本書的鋪墊, 自己寫個簡化的依賴注入也不是難事, 寫好後還是在自己的Web程序中用起來, 最後一次吃自己的狗糧。

Paste_Image.png

等你做了就知道, 所有這些,都依賴Java Reflection。 
再往後走, 就應該是找真正的項目做, 或者去找實習了, 那是另外一個話題了,以後再聊。

閱讀代碼

熟讀唐詩三百首,不會作詩也會吟 
模仿是最好的學習! 多看看大牛們的代碼是怎麼寫的, 潛移默化,自己的武功也能提高。 
我身邊要是有個好師傅, 跟着他,看着他編程, 提高的該有多快啊。

在學習Java SE和Java EE的同時, 我會讀一下這些源代碼: 
JDK中的 Java Collection 源碼 : 老祖宗的東西絕對經典 
JUnit 源碼 : 看看Eric Gamma 和 Kent beck 是怎麼通過模式來創建系統的 (回覆”JUnit”查看) 
SpringSide : 以Spring Framework爲核心的,Pragmatic風格的JavaEE應用參考示例,是JavaEE世界中的主流技術選型,最佳實踐的總結與演示。 
國人開發的,大力推薦一下。 
此外我還是會研究下本世紀初著名的Jive論壇, 雖然非常古老, 雖然源碼學院派十足, 但簡直是設計模式的大本營, 都是活生生的應用的例子 
裏邊有個用代理模式實現權限控制, 讓我記憶猶新。 
另外如果有餘力的,有興趣的話, 當然可以閱讀Struts, Spring, Hibernate的源碼, 甚至參與進去開發了。

如何學習Java ,這是我這麼多年來的感受, 也只是我的一家之談。 歡迎和我交流 。 
學習編程從來就不是一件容易的事情, 不可能看看視頻,看看書就學會, 需要大量的編程和實踐。 編程雖然是極爲辛苦的腦力和體力勞動, 但其中蘊含的創造的樂趣也是無與倫比的。 希望每個人都能夠享受這個過程,樂在其中。

發佈了7 篇原創文章 · 獲贊 41 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章