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

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

[入門]程序員

我在2001年以前是C/C++陣營, 有C和麪向對象的基礎, 後來轉到Java ,發現沒有指針的Java真是好簡單, 另外Java 的類庫好用的讓人哭啊。算法

後來我就看《Thinking in Java》 ,《 Java 核心技術 》, 感受也不吃力。spring

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

可是光看書也挺無趣的,不妨和視頻結合着看, 我以爲傳智播客的Java基礎視頻很不錯 (唉, 給傳智打了個廣告), 網上一搜就有,真搜不到就來個人QQ羣裏吧(羣號碼:589809992)設計模式

注意:視頻的好處就是能看到敲代碼的過程, 代碼是活的, 這點很爽。 若是視頻只是按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 ,這是我這麼多年來的感覺, 也只是個人一家之談。 歡迎和我交流 。

學習編程歷來就不是一件容易的事情, 不可能看看視頻,看看書就學會, 須要大量的編程和實踐。 編程雖然是極爲辛苦的腦力和體力勞動, 但其中蘊含的創造的樂趣也是無與倫比的。 但願每一個人都可以享受這個過程,樂在其中。

個人Java學習交流QQ羣:589809992  禁止閒聊,非喜勿進!

我有一個微信公衆號,常常會分享一些Java技術相關的乾貨。若是你喜歡個人分享,能夠用微信搜索「Java團長」或者「javatuanzhang」關注。

相關文章
相關標籤/搜索