分享个人学习方法——仍是坚持+努力

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:以上是本人总结,不对之处谢谢指正。

 

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

相关文章
相关标签/搜索