假如時光能夠倒流, 我會這么學習 Java
回頭看看,我進入Java 領域已經快15個年頭了,雖然學的也一般,但是分享下我的心得,估計也能幫大家少走點彎路。
[入門]
我在2001年之前是C/C++陣營,有C和面向對象的基礎,后來轉到Java ,發現沒有指針的Java真是好簡單,另外Java 的類庫好用的讓人哭啊。
后來我就看《Thinking in Java》 ,《Java 核心技術》,感覺也不吃力。
如果我之前沒學過別的語言,或者半路出家轉到計算機行業,我不會先看上面那兩本, 相反我會選 《Head First Java》,這本書非常適合零基礎的小白,讀起來輕松搞笑,不信你看看第一頁
但是光看書也挺無趣的,不妨和視頻結合著看,我覺得傳智播客的Java基礎視頻很不錯 (唉,給傳智打了個廣告),網上一搜就有,真搜不到找我吧(QQ 14703250)
注意: 視頻的好處就是能看到敲代碼的過程,代碼是活的,這點很爽。如果 視頻只是按PPT講編程, 果斷扔掉 。
書也有書的好處,能寫成書的,肯定是作者經過系統化思考,梳理才能形成的東西, 所以系統性比較強。
書還有其他優點,例如可以隨便的翻,找到重點反復的看。
所以混合著看經典書+優秀的視頻 應該是最好的入門。
Java 入門,我不會去上培訓班,白白浪費錢 ,自學就夠了。
自學過程中如果有實戰經驗豐富的高人指導一下,給我繪出路線圖,指出攀登的方向,哪些地方有陷阱,哪些地方不應該浪費時間, 我的自學就可以減少摸索,少走彎路,
很不幸, 我當年沒有遇到,如果時光倒流,我會想辦法找一個來指導我。
[實踐]
軟件行業的一大特點就是 光看不做永遠都學不會 ,編碼不到10萬行都不好意思出去打招呼。
所以實踐,實踐,實踐!
在校期間,我還是會盡可能的去找項目做(參見我的另一篇文章《從現在開始豐富你的簡歷》,回復“ 簡歷 ”查看),實在沒找到,也可以先把基礎打好
我上大學的時候用的是嚴蔚敏的《數據結構》,當時我也把習題都做了一遍,考高級程序員的時候,成績非常好。
后來我知道了一本更好的算法入門書《算法》,如果時光能夠重來, 我還是會這本書上提到的所有數據結構和算法用Java 都實現一遍, 課后作業也爭取都做一遍。
這是個非常重要的訓練,因為我知道, 真的做了,就會發現工作以后只要不是設計算法, 基本的數據結構沒有能難住我的。
【Java SE】
對于Java集合框架, 不但要學會用,我還會嘗試著實現一遍,List, ArrayList, Set ,HashSet, Map ,HashSet 等等,要是不知道怎么寫,看看JDK的源碼就可以了,那里有最好的老師。
實現一遍能更好的明白面向對象的設計,接口,抽象類,具體類的關系,怎么分離職責,會學習到設計模式中的模板方法, Iterator 等 。
值得一提的是Iterator,很有趣,我還清楚的記得那一年自己實現集合框架中 Iterator 的時候的激動心情啊 :-)
在實現Java 集合框架的時候, 可以順便把泛型也學了, 不學不行,要不然實現不了啊。
Java 世界里,萬事萬物都是對象,大家都知道封裝,繼承,多態,但是僅僅了解這些只是入了門,不可能做出真正的面向對象的程序。
有一本經典的書《敏捷軟件開發,原則,模式,實踐》,里邊詳細的講解了一個薪水支付案例,是迄今為止 最好的面向對象設計的例子
我會用Java 把它實現一遍, 真正的體會一下OOD, 了解怎么才能把合適的責任分給合適的類, 什么叫面向接口而不是面向實現編程, 什么是優先使用組合而不是繼承。
對于Java線程,重點還是理解概念,因為我知道在以后的工作中(除非從事系統級編程),自己寫線程/線程池的機會是非常罕見的,都被類庫,框架給封裝好了。所以重點是理解,
看書的話就當然是《 Java并發編程實戰》,一大群大牛寫的啊。
對于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 反編譯器。
【做個有素養的Java碼農】
我記得08的時候,我的IBM經理說設計模式是必備技能,不懂設計模式的我們不能要了。
所以設計模式是必學,其實Java里邊用的非常多,簡直就是設計模式的活教材,工廠方法,單例,模板方法,裝飾者,責任鏈都有體現。
當然我會去先看一下輕松的 《Head First Design》,《設計模式》的作者之一 Eric Gamma 都大力推薦,絕對不容錯過。
又過了幾年,我的IBM經理又說,現在我們默認設計模式大家都會了,敏捷實踐是必備技能 !
所以,JUnit 我得會,重構我得會,TDD,持續集成這些最最基本的敏捷實踐也得知道,要不然會被人鄙視啊。
作為一個有追求的Java碼農,我寫代碼的時候要遵循Java 的編碼規范,例如類名首字母大寫, 報名要小寫, 方法名要首字母小寫...等等。
作為代碼潔癖,我受不了臟代碼,我會不斷的打磨自己的代碼,直到它像一個工藝品。
Java 的最佳實踐 《effective java》 怎么能錯過? 里邊滿滿的全是JDK的作者們總結出來的java 編程最佳用法。
不過翻譯的實在是不咋滴,很多句子都得仔細的琢磨一下才知道什么意思,所以我打算錄一系列視頻講解一下,敬請期待。
【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的認識,開啟了新的時代。
有了這本書的鋪墊,自己寫個簡化的依賴注入也不是難事,寫好后還是在自己的Web程序中用起來,最后一次吃自己的狗糧。
等你做了就知道,所有這些,都依賴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 ,這是我這么多年來的感受,也只是我的一家之談。歡迎和我交流 。
學習編程從來就不是一件容易的事情, 不可能看看視頻,看看書就學會, 需要大量的編程和實踐。編程雖然是極為辛苦的腦力和體力勞動,但其中蘊含的創造的樂趣也是無與倫比的。希望每個人都能夠享受這個過程,樂在其中。
我在自學的過程中,有個非常強烈的感受,那就是缺乏牛人的指導,在黑暗中摸索亂撞,容易走上彎路。并且一個人學習的話,遇到問題,沒人溝通,非常苦悶。
來自:http://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=415513252&idx=1&sn=1c1211e23c507c34f9befbf5282a85c8#rd