假如時光倒流,我會這麼學習Java (轉載)

回頭看看, 我進入Java 領域已經快15個年頭了, 雖然學的也通常, 可是分享下個人心得,估計也能幫你們少走點彎路。java

入門

我在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上浪費時間。mvc

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 ,這是我這麼多年來的感覺, 也只是個人一家之談。 歡迎和我交流 。 學習編程歷來就不是一件容易的事情, 不可能看看視頻,看看書就學會, 須要大量的編程和實踐。 編程雖然是極爲辛苦的腦力和體力勞動, 但其中蘊含的創造的樂趣也是無與倫比的。 但願每一個人都可以享受這個過程,樂在其中。

相關文章
相關標籤/搜索