`

开源框架的学习途径

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



目 录 [ - ]
阅读、仔细阅读、反复阅读每个开源框架自带的reference
少读、精读网络教程,坚决不读有价书籍
搭建环境运行每个开源框架自带的sample项目
自己写一个sample项目亲身体验
带着问题debug开源框架的源码

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

1. 看英文文档太吃力

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

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

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


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

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

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

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

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

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

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

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

搭建环境运行每个开源框架自带的sample项目 
我不知道有多少初学者真正的去跑过每个开源框架自带的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项目亲身体验 
这一点其实不用我说,大家也应该明白。不过我还是见过不少的程序员,眼高手低。成天能够和人吹牛说这个框架怎么怎么好,那个框架怎么怎么方便。让他自己动手来用这些框架写一段程序出来,手足无措,搞了半天,就是无法跑通。

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

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

我看开源框架的源码的方式有些特殊,我喜欢在程序里做debug,来看看在开源框架的内部,到底运行了哪些类,他们是如何执行的。我坚决反对逐个包逐个包的去看源码,这毫无意义。因为这相当于把一个肢体进行了分解,一个运行状态良好的程序,你把它割裂开来,显然什么都读不懂。在程序中debug源码,你不仅可以浏览到程序执行过程中的每个类,还能查看这些类的运行状态。这才是阅读源码之道。

分享到:
评论

相关推荐

    基于Cad二次开发的开源框架NFox

    《基于Cad二次开发的开源框架NFox深度解析》 在当今的计算机辅助设计(CAD)领域,二次开发已经成为提升效率、实现个性化定制的关键途径。本文将深入探讨一款基于.NET Framework和C#语言的开源框架——NFox,它为...

    csp开源框架 csp 11 (带pkcs)

    CSP(Cryptographic Service Provider)开源框架是用于提供加密服务的软件组件,它与操作系统紧密集成,为应用程序提供加密、签名、哈希等密码学功能。CSP 11 版本是该框架的一个更新迭代,它引入了PKCS #11标准的...

    WEB项目开源框架选择

    在开发Web项目时,选择合适的开源框架至关重要。Java世界中的开源框架丰富多样,既有优点也有挑战,需要根据项目需求和团队技术栈进行合理选择。本文将重点讨论在"WEB项目开源框架选择"上的考量因素和具体建议。 ...

    PHP实例开发源码-CK PHP开源框架.zip

    通过学习和实践这个开源框架,开发者不仅可以了解PHP编程的基本原则,还能掌握到如何利用现有的框架进行高效开发。此外,参与开源社区,阅读和理解他人的代码,也是提升自身技能、拓展视野的重要途径。在实际开发中...

    经典的基于ASP.NET MVC框架的开源博客系统

    一个国人写的开源blog系统,使用ASP.NET MVC框架开发. 具有以下优点: 1,代码精练,优雅,。 2,使用了大量的设计模式 3,采用N层架构设计,分层非常合理。 4,支持强大的扶肤功能 5,大量使用了.net Framework 3.5...

    spring框架学习笔记

    Spring框架是Java开发中不可或缺的一部分,它以...通过学习以上这些知识点,你可以全面掌握Spring框架,并将其应用于实际项目中,提高开发效率和应用的稳定性。Spring的灵活性和强大功能使其成为Java开发者的首选框架。

    基于PHP的开源学习型框架CMVC源码.zip

    【标题】"基于PHP的开源学习型框架CMVC源码.zip" 提供的是一个用于学习和开发的PHP框架——CMVC。这个框架采用MVC(Model-View-Controller)架构模式,是许多Web应用程序设计的基础,它将业务逻辑、数据处理和用户...

    开源Javascript框架 decj.zip

    **开源Javascript框架 DecJ** DecJ 是一个专为Web前端开发设计的开源JavaScript框架,它引入了一种...通过深入研究这个开源框架,你不仅可以提升自己的JavaScript技能,也可能为整个Web开发社区贡献新的想法和改进。

    SourceCode:优秀开源框架源码注释

    以上是对三个开源框架源码的初步概述,源码注释不仅是理解框架工作原理的重要途径,也是提升自身编程技能和系统设计能力的有效手段。通过阅读和研究源码,我们可以学习到高级的设计模式、优化技巧以及对问题的解决...

    java项目源码 学习源码 开源代码

    在IT领域,特别是对于Java初学者而言,学习优秀的开源项目的源码是提升编程技能、理解软件架构设计的重要途径之一。根据提供的文件标题“java项目源码 学习源码 开源代码”以及描述“java 初学者 学习源码 开源代码...

    PHP,MySQL,框架学习.zip

    在"PHP,MySQL,框架学习"这个主题中,你可以通过实际项目来提升技能,比如创建一个用户管理系统,使用PHP处理用户注册、登录,利用MySQL存储用户信息,并借助框架实现数据操作和页面渲染。这将帮助你更好地理解和...

    golang值得学习的优秀开源项目4合1

    对于初学者来说,了解并学习优秀的开源项目是快速掌握一门新语言的绝佳途径。"golang值得学习的优秀开源项目4合1"正是这样一份资源,它包含了四个精选的Go语言开源项目,旨在帮助新手深入了解Go语言的实践应用。 1....

    基于PHP的InitPHP轻量级开源php框架源码.zip

    InitPHP是一款轻量级的开源PHP框架,设计目标是简化开发流程,提高开发效率,同时保持高度的灵活性和可扩展性。它适用于中小型Web应用的快速开发,特别...对于初学者,学习和实践InitPHP框架是提升PHP技能的好途径。

    开源项目源代码,学习自取

    总的来说,学习开源项目源代码是提升技能、扩展视野的有效途径,也是IT行业里一种重要的学习方式。通过深入探究这些代码,不仅可以深化对现有技术的理解,还能激发创新思维,为个人职业发展打下坚实基础。

    学习框架_java框架_

    同时,阅读源码、参与开源项目也是提升技能的有效途径。 在“学习框架.docx”文档中,可能包含了这些框架的详细介绍、示例代码、学习路径以及常见问题解答等内容。通过深入学习,你可以逐步掌握这些框架,并运用到...

    JavaScript中七种流行的开源机器学习框架

    随着技术的发展,JavaScript也有了一系列流行的开源机器学习框架,让开发者在浏览器环境中实现模型的训练和部署。以下是七种值得关注的JavaScript机器学习框架: 1. TensorFlow.js:由Google开发的TensorFlow.js是...

    ssh框架新手学习的好东西

    SSH框架是Java Web开发中非常流行的一个组合,包括Spring、Struts2和Hibernate这三个开源框架。这个框架集合提供了模型-视图-控制器(MVC)的完整解决方案,为开发者提供了强大的企业级应用开发能力。 首先,Spring...

    渴切-开源中文css框架v3.0 beta.zip

    渴切开源中文CSS框架v3.0 Beta是一个专为中文用户设计的前端样式库,旨在简化网页设计工作,提供一套简洁、易用且具有良好可扩展性...同时,参与到开源社区,与其他开发者交流,也是不断提升技能和解决问题的有效途径。

    大数据开发资源.docx

    - **学习途径**:官方文档,参与开源项目贡献。 **4.3 Azkaban** - **学习目标**:熟悉Azkaban的工作流程,了解其在任务调度中的优势。 - **学习途径**:官方文档,社区论坛。 **4.4 CDH等** - **学习目标**:...

Global site tag (gtag.js) - Google Analytics