目的html
目的就是這個技術完成什麼功能,解決哪類問題。拿JSON舉個例子:java
從定義咱們能夠總結出幾個關鍵點:程序員
輕量級spring
數據交換格式數據庫
易於編寫和閱讀json
基於JavaScript的一個子集設計模式
純文本獨立於語言和平臺tomcat
重點是它以純文本存儲,能夠獨立於任何語言和平臺,且主要用於數據交換。架構
再好比Spring:框架
Spring Framework官網 http://www.springsource.org/spring-framework
從定義咱們能夠總結幾個關鍵點:
Java/JavaEE一站式解決方案(即不論是開發普通Java應用仍是JavaEE企業應用都能提供解決方案)
框架基於 Expert One-on-One Java EE Design and Development(告訴咱們須要去讀這本書 這本書介紹了Spring設計思想)
IoC容器(此時咱們須要問什麼是IoC容器)
數據庫事務的通常化抽象層(此時須要問本身怎麼個通常化抽象)
JDBC 抽象層(怎麼個抽象法,比普通JDBC調用有哪些好處)
等等……
再好比Jsoup:
從定義上能夠總結幾個關鍵點:
Java版的HTML解析器
提供了相似於DOM、CSS及相似於Jquery的操做方法來取出和操做數據(重點是DOM、CSS、Jquery咱們都有所瞭解,再學這個應該不難)
從一個技術的定義上,找關鍵詞,咱們能總結出它的核心目的。並且能提出一系列問題,有了這一系列問題咱們能知道咱們接下來要學習什麼,只有瞭解了這些功能才能真正理解設計的目的和是什麼。
適用場景
就是咱們這個技術的適應的環境,能夠在哪些場景中使用。
好比JSON適用於:
數據交換,尤爲跨平臺的數據交換
表示JavaScript對象
好比Spring:
在Java/JavaEE開發的整個過程當中都有幫助。此時須要問有哪些幫助?爲何?
好比Jsoup:
只要咱們想在Java裏解析HTML就能夠考慮使用它。
如何使用
到這一步實際上是最簡單的,能夠按照以下步驟學習:
一、根據官網的hello world進行簡單入門,瞭解最基本的使用,到此咱們入門了;
二、若是官網提供了單元測試用例,最好的學習方式就是跟着單元測試挨着試,到此該技術的全部特性就有所瞭解了;
三、寫本身的功能,根據以前學的知識開始開發本身須要的功能;
四、若是須要常用/涉及項目核心技術,必定要讀讀官方文檔,有時間讀讀API作到心中有數。
此處就不給例子了。
相似的技術
每當咱們學習完一個新技術的時候,都要留一手,防止一個技術有bug/性能問題形成後續無替代方案。
好比Jsoup相似的技術有:
HTMLParser
NekoHTML
這兩個解析工具功能十分強大,可是使用上沒有Jsoup簡單。
好比我要實現論壇內容過濾功能:
過濾掉全部的事件註冊,如<a onclick="……"> 須要刪除onclick
刪除form相關的表單元素,防止惡意用戶注入表單竊取用戶數據
這個功能我使用Jsoup實現的。
好比我要抓取iteye的論壇內容(主題、內容、發佈人、發佈時間)等,使用Jsoup十分方便,由於它的選擇器語法相似於Jquery語法,十分方便,並且學習成本很低,基本上只要會Jquery,10幾分鐘就能上手。
優缺點
咱們應該對咱們常用的核心技術作到心中有數,即瞭解優缺點,對於普通的技術只要基本會用便可(有時間能夠作對比)。
好比hibernate和ibatis,springMVC和struts2等等,作個對比,總結不出來幾點說明本身對這個玩意仍是瞭解不深,須要繼續學習和研究。
爲何
對於一些項目中使用的核心技術,須要掌握:
作好了解爲何,即爲何有這個東西,即瞭解發展歷史和產生的背景
如何實現的,讀源碼,知其因此然
重複發明個輪子,這樣能夠更好的瞭解原理,並且學習效果更佳,這樣比讀N遍源碼效果更好
有朋友會說我看不到咋辦?不會寫啊!
告訴你個笨辦法:
以前我學習CGLIB,是照着人家單元測試挨着敲和試的;
還有學習源碼建議從低版本開始,由於功能少都是核心,好研究。
在此學習過程當中必定要把握度:
有些東西只需瞭解目的和怎麼如何便可;
有些須要理解到爲何,像spring、junit、slf4j/logback、ehcache、proxool、tomcat、ibatis等等,有時間多讀點源代碼或者本身造個輪子;儘可能作到每個方面都有涉及(出問題我不怕),但要專注,如spring。
寫本身的代碼
代碼量很是重要,前期要寫足必定量代碼,再看一些書籍/讀一些源碼纔有感受。我是如何寫代碼的:
一、項目代碼,這個沒得說,在寫的過程當中思考咱們在讀書時遇到的一些問題;
二、在寫項目的時候咱們可能發現咱們常常重複作一些事情,此時就須要考慮創建本身的代碼工具庫,如通用代碼庫、代碼生成工具、經常使用工具類等; 不要重複本身,遇到重複的就考慮往本身工具箱添加可複用的組件;
三、按照本身興趣發展一個方向,此時能夠考慮寫一些相關的輪子;經過輪子再反過來深刻學習其餘相關的技術。
四、若是有能力就考慮構建本身的平臺,簡化重複勞動,提高開發效率。
發明輪子我以爲是頗有必要的,光看不練沒什麼多大效果,發明個輪子能夠幫助咱們更好的理解,輪子不必定非得用到咱們的項目,此時的輪子是幫助咱們學習的。
閱經典的書籍
讀大師經典著做,如
或者關注如iteye等網站,推薦的一些好書。 我常常到 互動 itpub 圖靈社區 等看一些新書。
讀書不是到用的時候再讀,而是按照本身的方向和興趣選擇相關的書籍進行閱讀,學習前人經驗和思想,開闊本身思路。
讀書不是隻讀一遍,有些好書如《Effective Java》、《設計模式——可複用面向對象軟件的基礎》、《企業應用架構模式》、《敏捷軟件開發:原則、模式與實踐》、《面向對象軟件構造》等須要重複讀,由於時間段不一樣積累的經驗不一樣,理解會產生改變,每次讀都有不一樣的收穫。
讀書讀不懂不要緊,先放一放,過一段時間再來看,經驗到了天然就明白,不要刻意去背,刻意去記,必定要理解着記,記住要理論指導實踐,實踐檢驗理論,不可脫節。
不能心急,一會兒啃N頁,像看小說似的,這樣什麼都學不到,記不住,即便今天記住了過了幾天就忘了,因此要溫故而知新。
讀書要思考本身以前遇到過相似的場景嗎?對比着記更容易,並且記憶的成本會很低。
不要光看本身使用的技術相關的,其餘方面的如產品,測試,數據庫等相關書籍也建議閱讀。在此推薦一本產品入門書:
《Don't Make Me Think》
尤爲在學習Java技術時,建議你們有時間把JDK的核心API(如java.lang/java.util等這些咱們常常用的)讀一下/還有相關的規範(規範是最權威的指南)。
讀優秀的代碼
閱讀優秀的源代碼能夠幫助咱們消化書籍中學到的理論,更好的去使用它,並且能開闊咱們的思路,完善咱們的思想。
讀源代碼思路:
一、從使用進行閱讀,按照調用關係深刻到源代碼中,不要一口吃胖子;
二、跟着單元測試走;
三、只需讀最核心部分便可,無需讀全部代碼;
四、從簡單的源碼入手,剛開始放低難度,如閱讀junit、slf4j、ehcache等相對簡單的源碼,再深刻閱讀如spring等源代碼;
五、閱讀源代碼要分而治之,一次讀一塊,不要混讀,不要雜讀。
記本身的博客
記博客能夠思惟縝密,完善知識體系,紮實技術;並且能夠分享本身的經驗想法,若是有錯誤會有朋友指正,很是好的學習方式。
記博客思路:
一、記錄本身工做中遇到的問題及解決方案;本身既然遇到了別人也可能遇到;
二、不要怕寫的簡單,沒面子,我以爲要厚臉皮 ;
三、任何東西均可以記,留做回憶。
向同事的學習
既然能做爲同事,說明你們水平差很少,學習同事的優勢。
向同事學習思路:
一、沒事聊聊技術,聽聽它的想法;
二、看他的源代碼,從中學習;
三、若是你的老大/同事都不上進,你又是很上進的,建議物以類聚,人以羣分,換個環境好好發展本身。
善於觀察細節
善於觀察細節,好比從最基本的同事怎麼操做的那麼快(觀察他是如何進行操做的,如發現本身不會的快捷鍵)?
觀察細節思路:
一、眼要尖,善於發現本身不會的;
二、嘴要勤,善於問本身不瞭解的(此處不是沒事就去問,而是本身思考過,實在不會的,不要憋在肚子裏,問一下又不會懷孕);
三、沒事讀同事的源代碼,這個但是免費的,從中能學到好的編碼習慣和好的解決問題思路。
學習沒有捷徑,我不聰明,但我刻苦;刻苦仍是不夠,得善於思考和總結。
學習不要怕丟人,學到手是本身的,學會厚臉皮。
但願對須要的人有所幫助,每一個人都有本身的學習方法,能夠借鑑學習,但不要臨摹,適合本身的纔是最好的。
下一篇會《分享我是如何解決問題的》。
PS:以上是本人總結,不對之處謝謝指正。
新的一天又來了,上班去啦。,各位每天好心情!