我的學習方法
目的
目的就是這個技術完成什么功能,解決哪類問題。拿JSON舉個例子:
即
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。易于人閱讀和編寫,同時也易于機器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。
?
從定義我們可以總結出幾個關鍵點:
? ?輕量級
? ? 數據交換格式
? ?易于編寫和閱讀
? ?基于JavaScript的一個子集
? ? 純文本獨立于語言和平臺
重點是它以純文本存儲,可以獨立于任何語言和平臺,且主要用于數據交換。
?
再比如Spring:
Spring 中包含的關鍵特性:
……請前往 http://www.oschina.net/p/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就可以考慮使用它。
?
?
如何使用
到這一步其實是最簡單的,可以按照如下步驟學習:
1、根據官網的hello world進行簡單入門,了解最基本的使用,到此我們入門了;
2、如果官網提供了單元測試用例,最好的學習方式就是跟著單元測試挨著試,到此該技術的所有特性就有所了解了;
3、寫自己的功能,根據之前學的知識開始開發自己需要的功能;
4、如果需要經常使用/涉及項目核心技術,一定要讀讀官方文檔,有時間讀讀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。
?
?
我的學習歷程
寫自己的代碼
代碼量非常重要,前期要寫足一定量代碼,再看一些書籍/讀一些源碼才有感覺。我是如何寫代碼的:
1、項目代碼,這個沒得說,在寫的過程中思考我們在讀書時遇到的一些問題;
2、在寫項目的時候我們可能發現我們經常重復做一些事情,此時就需要考慮建立自己的代碼工具庫,如通用代碼庫、代碼生成工具、常用工具類等; 不要重復自己,遇到重復的就考慮往自己工具箱添加可復用的組件;
3、按照自己興趣發展一個方向,此時可以考慮寫一些相關的輪子;通過輪子再反過來深入學習其他相關的技術。
4、如果有能力就考慮構建自己的平臺,簡化重復勞動,提升開發效率。
?
發明輪子我覺得是很有必要的,光看不練沒什么多大效果,發明個輪子可以幫助我們更好的理解,輪子不一定非得用到我們的項目,此時的輪子是幫助我們學習的。
?
閱經典的書籍
讀大師經典著作,如
或者關注如iteye等網站,推薦的一些好書。?我經常到? 互動 ?? itpub ?? 圖靈社區 ?等看一些新書。
?
讀書不是到用的時候再讀,而是按照自己的方向和興趣選擇相關的書籍進行閱讀,學習前人經驗和思想,開闊自己思路。
?
讀書不是只讀一遍,有些好書如《Effective Java》、《設計模式——可復用面向對象軟件的基礎》、《企業應用架構模式》、《敏捷軟件開發:原則、模式與實踐》、《面向對象軟件構造》等需要重復讀,因為時間段不同積累的經驗不同,理解會產生改變,每次讀都有不同的收獲。
?
讀書讀不懂沒關系,先放一放,過一段時間再來看,經驗到了自然就明白,不要刻意去背,刻意去記,一定要理解著記,記住要理論指導實踐,實踐檢驗理論,不可脫節。
?
不能心急,一下子啃N頁,像看小說似的,這樣什么都學不到,記不住,即使今天記住了過了幾天就忘了,所以要溫故而知新。
?
讀書要思考自己之前遇到過類似的場景嗎?對比著記更容易,而且記憶的成本會很低。
?
不要光看自己使用的技術相關的,其他方面的如產品,測試,數據庫等相關書籍也建議閱讀。在此推薦一本產品入門書:
《Don't Make Me Think》
?
尤其在學習Java技術時,建議大家有時間把JDK的核心API(如java.lang/java.util等這些我們經常用的)讀一下/還有相關的規范(規范是最權威的指南)。
?
讀優秀的代碼
閱讀優秀的源代碼可以幫助我們消化書籍中學到的理論,更好的去使用它,而且能開闊我們的思路,完善我們的思想。
?
讀源代碼思路:
1、從使用進行閱讀,按照調用關系深入到源代碼中,不要一口吃胖子;
2、跟著單元測試走;
3、只需讀最核心部分即可,無需讀所有代碼;
4、從簡單的源碼入手,剛開始放低難度,如閱讀junit、slf4j、ehcache等相對簡單的源碼,再深入閱讀如spring等源代碼;
5、閱讀源代碼要分而治之,一次讀一塊,不要混讀,不要雜讀。
?
記自己的博客
記博客可以思維縝密,完善知識體系,扎實技術;而且可以分享自己的經驗想法,如果有錯誤會有朋友指正,非常好的學習方式。
?
記博客思路:
1、記錄自己工作中遇到的問題及解決方案;自己既然遇到了別人也可能遇到;
2、不要怕寫的簡單,沒面子,我覺得要厚臉皮?
;
3、任何東西都可以記,留作回憶。
?
向同事的學習
既然能作為同事,說明大家水平差不多,學習同事的優點。
?
向同事學習思路:
1、沒事聊聊技術,聽聽它的想法;
2、看他的源代碼,從中學習;
3、如果你的老大/同事都不上進,你又是很上進的,建議物以類聚,人以群分,換個環境好好發展自己。
?
善于觀察細節
善于觀察細節,比如從最基本的同事怎么操作的那么快(觀察他是如何進行操作的,如發現自己不會的快捷鍵)?
?
觀察細節思路:
1、眼要尖,善于發現自己不會的;
2、嘴要勤,善于問自己不了解的(此處不是沒事就去問,而是自己思考過,實在不會的,不要憋在肚子里,問一下又不會懷孕);
3、沒事讀同事的源代碼,這個可是免費的,從中能學到好的編碼習慣和好的解決問題思路。
?
?
學習沒有捷徑,我不聰明,但我刻苦;刻苦還是不夠,得善于思考和總結。
學習不要怕丟人,學到手是自己的,學會厚臉皮。
?
希望對需要的人有所幫助,每個人都有自己的學習方法,可以借鑒學習,但不要臨摹,適合自己的才是最好的。
?
下一篇會《分享我是如何解決問題的》。
?
PS:以上是本人總結,不對之處謝謝指正。
?
新的一天又來了,上班去啦。
,各位天天好心情!
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
