分享個人學習方法——仍是堅持+努力

http://jinnianshilongnian.iteye.com/blog/1709268個人學習方法

目的html

目的就是這個技術完成什麼功能,解決哪類問題。拿JSON舉個例子:java

http://www.json.org/ 寫道
JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.



JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。易於人閱讀和編寫,同時也易於機器解析和生成。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成爲理想的數據交換語言。

 

從定義咱們能夠總結出幾個關鍵點:程序員

   輕量級spring

   數據交換格式數據庫

   易於編寫和閱讀json

   基於JavaScript的一個子集設計模式

   純文本獨立於語言和平臺tomcat

重點是它以純文本存儲,能夠獨立於任何語言和平臺,且主要用於數據交換。架構

 

再好比Spring:框架

Spring Framework 是一個開源的Java/Java EE全功能棧(full-stack)的應用程序框架,以Apache許可證形式發佈,也有.NET平臺上的移植版本。該框架基於 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一書中的代碼,最初由 Rod Johnson 和 Juergen Hoeller等開發。Spring Framework 提供了一個簡易的開發方式,這種開發方式,將避免那些可能導致底層代碼變得繁雜混亂的大量的屬性文件和幫助類。
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:

http://jsoup.org/ 寫道
jsoup 是一款 Java 的HTML 解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套很是省力的API,可經過DOM,CSS以及相似於JQuery的操做方法來取出和操做數據。

 從定義上能夠總結幾個關鍵點:

   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:以上是本人總結,不對之處謝謝指正。

 

新的一天又來了,上班去啦。,各位每天好心情!

相關文章
相關標籤/搜索