阅读:57153次   评论:113条   更新时间:2011-06-01    
正确的学习方法不仅能够让你事半功倍,也能够让你更加接近真理。在这一系列的文章之初,我想首先说说学习一个开源框架的途径。这些学习方法,不仅适用于Struts2,我想同样适用于许多其他的开源框架,比如说Spring,Hibernate等等。而这些学习方法,也是我个人的一些心得体会,希望对初学者或者正在为学习开源框架犯愁的朋友带来一些启示。


少读、精读网络教程,坚决不读有价书籍 Top

对于很多初学者来说,看reference这种方式他们的接受程度很低。相反的,他们反而会去转向一些书籍和网络教程。针对这些学习材料,我就不得不带着有色眼镜去看待了。

目前市场上任何的有价书籍,我认为完全没有阅读的必要。这些书籍的一大特点是贵,将花费你大量的银子。而且这些书籍错误繁多,所挑出的示例也基本上毫无实践意义。更加可悲的是,这些书籍中的很多示例,作者在写的时候根本不动脑筋,也不会包含程序开发中的一些最佳实践,甚至会给很多读者以:“程序就是这么写的”这样的误导。

网络上还有很多原版的教程,例如《XXX in Action》系列。《XXX in Action》系列的书籍在市场上深受好评。这些系列的书籍我很多都读过,我并不认为这一系列的丛书相对于框架自带的reference有什么过人之处,有某些地方的理解也带有一些作者个人的感情色彩。其实每个人写书或者写文章都会带上自己的感情色彩,这本不是什么坏事,不过既然已经有了 reference,为什么我们要舍近求远呢?当然,不得不说,这个系列的书籍还是写得相当不错的,只是相对reference而言,不如 reference来的好了。

同时,网友也提到了很多网络教程。网络教程,尤其是中文的网络教程,基本上都是网友的经验之谈,也有写成系列文章的。对于网络教程,我的意见是:少读,精读。因为网络教程是网友自发的,而我不得不说,许多网友写的网络教程是一塌糊涂,误导世人的。同时,也有很多网络写的网络教程相当不错,可以作为入门级别的参考资料。但是对于初学者来说,根本很难分辨其中的好坏真伪。完全凭借运气去赌大小,押宝押对了就对了,押错了就自认倒霉。所以,针对网络教程,最好是带着问题去读,去搜索你的答案,而不是当作核心文档来阅读。

阅读、仔细阅读、反复阅读每个开源框架自带的reference Top

这一点是学习一个框架最最重要,也是最最一开始需要做的事情。不过事实上,无数的程序员对此并不在意。程序员总是以种种理由不仔细阅读reference:

1. 看英文文档太吃力

应该说阅读英文文档是每个程序员的基本素质之一,这就跟调程序需要耐心一样。如果你连调试程序的耐心都没有,那么趁早放弃程序员这个行当吧。其实阅读文档,尤其是英文文档,也是程序员的基本素质,这个素质是一点一点积累培养起来的。所以,对于那些实在觉得吃力的朋友,我的建议是结合中文文档一起看。好在满江红的开源支持者为你精心做了许多很有价值的翻译,例如Spring,Hibernate等都有对应的中文文档。但是我依旧认为,看中文文档,必须和英文文档对照,否则你就可能迷失在许多的语义不匹配上。

2. reference实在太厚而抓不住思路

耐心,耐心,还是耐心。从reference的质量而言,其实多数的开源框架的reference都是相当优秀的。尤其是Struts2,基本上都是一个一个的专题wiki文章拼起来的文档。至于说到Spring,那只能培养你的耐心了。


我之所以强烈推荐大家仔细阅读开源框架自带的reference,主要基于以下的两个原因:

1. 这些自带的reference多数出自这些开源框架的作者之手。你说还有谁能够比他们自己更了解他们自己的产品呢?自己写的程序,到底有哪些优点,如何使用,自己肯定是最最清楚的,所以要说到权威,不可能有任何的文档比自带的reference更加权威。

2. 自带的reference几乎很少犯错,所以不会给你带来什么的误导信息。不仅如此,许多的reference已经为你总结了许多框架使用过程中的最佳实践。有那么好的事情,为什么我们不直接去看这些reference来获得第一手的资料呢?

当然,很多人看reference会觉得很枯燥。没关系,我的建议是,多看几遍。第一遍,你可以采取scan的方式,目的是了解框架的大概。第二遍,挑重点的章节仔细阅读,并且辅以一定的代码实践。第三遍,带着碰到的问题阅读,在文档中寻找答案。

搭建环境运行每个开源框架自带的sample项目 Top

我不知道有多少初学者真正的去跑过每个开源框架自带的sample项目。按照我的经验来说,这绝对是一个学习的最佳途径。

以Struts2为例,Struts2的根目录下有一个apps的目录,里面有struts2-blank-2.0.11.war,struts2-showcase-2.0.11.war,struts2-portlet-2.0.11.war等war包。你只要把这些war包放到任何的application server的运行环境下即可运行。比如,你可以放到Tomcat的webapps目录下,启动Tomcat,你就可以直接访问到一个内置了众多Struts特性的项目了。

其实你可以从这些项目中获得许许多多有用的信息。不仅如此,一旦你在使用Struts2的某些特性的时候发生了无法解决的困难,你往往也能从这些项目中找到一些解决问题的方案。更加能让你放心的是,至少这些项目表达了Struts2的作者原本的意思,你只要按照它的sample来写代码,总不会错到哪里去。

在这里,我简单举例来说明你可以从这些项目中学到些什么:

1. 如果你仔细学习struts2-blank-2.0.11.war这个项目,它可以告诉你如何搭建一个最最简单的Struts2的项目;它还会告诉你,Struts2至少需要依赖哪些jar包(请以后不要再为jar包错误而苦恼);同时,也给你做出了一些范例,web.xml怎么写,struts.xml又怎么写。

2. struts2-showcase-2.0.11.war这个项目,你则可以看到Struts2的特性的大杂烩,这对于你看reference是相当有帮助的。比如说,你在看文档时看到了"文件上传"的章节,那么你就可以参考项目中的upload子目录。相当于你一边看文档,一边已经有一个现成的跑得通的例子在这里提供给你。这是不是要比那些所谓的网络教程更实际呢?

3. struts2-portlet-2.0.11.war则给出了在Portal环境下的Struts2的应用。

所以,综合来说,框架自带的项目绝对是你学习的第一手资料,你基本上不需要舍近求远得去找网络上别人写的例子,原生态,不好嘛?

自己写一个sample项目亲身体验 Top

这一点其实不用我说,大家也应该明白。不过我还是见过不少的程序员,眼高手低。成天能够和人吹牛说这个框架怎么怎么好,那个框架怎么怎么方便。让他自己动手来用这些框架写一段程序出来,手足无措,搞了半天,就是无法跑通。

所以,实践是检验真理的唯一标准。只有自己亲自动手去实践,才能说你真正掌握了某个技术,理解了某个框架。在编写自己的sample项目时,你不妨就以最简单的User的增删改查作为你的业务场景,在实践中不断的重构你的代码,从而提升自己的水平。

带着问题debug开源框架的源码 Top

如果你对某个开源框架的使用已经比较熟练,对其内部的原理也基本清晰了。你或许会对其中的某些设计原理产生一些问题(或许仅对勤于思考的人有效)。这个时候,我认为你可以试图去看一看开源框架的源码。

我看开源框架的源码的方式有些特殊,我喜欢在程序里做debug,来看看在开源框架的内部,到底运行了哪些类,他们是如何执行的。我坚决反对逐个包逐个包的去看源码,这毫无意义。因为这相当于把一个肢体进行了分解,一个运行状态良好的程序,你把它割裂开来,显然什么都读不懂。在程序中debug源码,你不仅可以浏览到程序执行过程中的每个类,还能查看这些类的运行状态。这才是阅读源码之道。
评论 共 113 条 请登录后发表评论
83 楼 cllb_2004 2011-03-22 08:39
写的不错,其实编程就得多实践。现在大多数人会SSH框架,可是真正知道原理的没几个人。我们学习框架,就得像这样仔细的研究几个月,以后就会了。别老是感觉什么都懂,什么也不了解。
82 楼 ocaicai 2011-03-09 19:56
81 楼 hongchenhua313 2011-03-05 12:35
楼主所说的甚好啊
80 楼 juancai 2011-01-23 01:25
GPSGISRS 写道
这位Java人说的好!的确李刚同学大作话不说透明明让读者用记事本写,但又不讲像GetBooksAction.java怎么编译,我用javac -cp d:\core.jar GetBooksAction.java编译不过去,花了一天的事件到现在也不知道怎么编译那个Action.java。若又看到贴的同人不吝赐教GetBooksAction.java在控制台下怎么编译?:)

这个问题很好。。。。。
去用Javac写点基础的J2SE代码比较好。。这样你就了解了
79 楼 juancai 2011-01-23 01:24
你说的是对的,因为框架太多了,很多时候根本就找不到某框架的参考。
不过我不得不说读中文的很节约时间,有翻译好的当然最佳,没有就看英文的吧。

之前,做一个实时视频的东东的时候就用了red5....没翻译、没书籍、只有官方参考
我只有一个感觉。。。悲剧啊
78 楼 yangcangyi 2011-01-02 21:21
我也想好好学习下struts 用你这个方法试试
77 楼 十井_ 2010-12-27 18:35
这边文章如果满分10分我给10分 说的太好了 其实很多时候我们都本末倒置了
76 楼 zhzhl202 2010-12-27 15:24
写的非常棒,顶一个
75 楼 zhouyaguo 2010-11-08 12:10
楼主说的不错
74 楼 fugui39 2010-10-20 14:37
值得一看!
73 楼 z276356445t 2010-09-09 11:18
学习到了,在还没有看这篇文章之前,感觉自己学习的方法太笨,我现在是书,源码,文档一起在看,感觉底层的东西实在太重要了,谢谢LZ.
72 楼 hsar 2010-09-07 17:13
不错啊  楼主
71 楼 xiangbiao128 2010-08-09 08:20
是啊,多看文档,看源码比书来的实在
70 楼 新入职 2010-08-06 10:20
感谢作者,我准备付之行动
69 楼 humingshen 2010-07-18 14:06
     
68 楼 programlv 2010-06-30 22:28
我一般的法子比较笨,但是掌握的比较牢
就是把代码抄一边,然后自己做一遍,花的时间很多,一般1,2个月才能搞完一个
但是记得住
不懂的基本上别的地方也找不到解答,这个时候就看源码包里面的E文注释,文档

其实源代码的注释写的都很好,你仔细看总会看的懂的,关键是有没有耐心
我其实也怕看E文,但是时间长了也没那么抵触了,关键是忍耐
67 楼 Tyson_Huang 2010-05-29 19:57
哈哈,我刚想学struts2,马上去实践!
66 楼 三尺之尚 2010-05-26 10:12
迟来的阅读啊  顶楼主
65 楼 zu99 2010-05-18 10:05
多谢!不过真的蛮考验英语水平啊~~~~~~~~~~~~~~~~~
64 楼 舞指如歌 2010-05-05 01:17
写的很有道理啊,受教了,我试着去学学看。
63 楼 zyh_1986 2010-05-03 09:47
确实挺有道理的,只是读源码真需要耐心的,看的我头晕脑涨
62 楼 phoenix_sun 2010-04-03 12:44
学习了,真不错的学习方法,多谢分享
61 楼 burnquist 2010-03-24 15:55
很好很好
最近准备用STRUT2来做项目了,很受用
60 楼 低头向前 2010-03-22 17:52
说的好!!!学习程序就应当这样啊!
59 楼 xinchen1224 2010-03-22 14:40
感觉写的很好。我以前学习框架的时候,只是关注怎么去用,刚看时还会用,过一段时间就又忘了,根本原因还是我自己没有系统的学习和总结,并没有真正的学会,呵呵。受教了,从现在开始一定要注意学习方式和习惯。
58 楼 xunavy 2010-03-17 16:08
very good
57 楼 wcily123 2010-03-06 19:30
呵呵,看来以前走了不少弯路
谢谢robbin分享。
56 楼 lzyzizi 2010-03-03 13:53
GPSGISRS 写道
这位Java人说的好!的确李刚同学大作话不说透明明让读者用记事本写,但又不讲像GetBooksAction.java怎么编译,我用javac -cp d:\core.jar GetBooksAction.java编译不过去,花了一天的事件到现在也不知道怎么编译那个Action.java。若又看到贴的同人不吝赐教GetBooksAction.java在控制台下怎么编译?:)


同学不是我喷你,先把基础(比如classpath)打打牢固再学其他东西吧。
55 楼 greatghoul 2010-03-03 09:01
原来开源的东西要这么学,以前都是走了错了路子.上次买了本书,里面带的例子自己都跑不通,真是气人.
54 楼 GPSGISRS 2010-01-31 17:31
这位Java人说的好!的确李刚同学大作话不说透明明让读者用记事本写,但又不讲像GetBooksAction.java怎么编译,我用javac -cp d:\core.jar GetBooksAction.java编译不过去,花了一天的事件到现在也不知道怎么编译那个Action.java。若又看到贴的同人不吝赐教GetBooksAction.java在控制台下怎么编译?:)

发表评论

您还没有登录,请您登录后再发表评论

文章信息

  • downpour在2008-12-17创建
  • downpour在2011-06-01更新
  • 标签: struts2 学习方法
Global site tag (gtag.js) - Google Analytics