Java界的开源产品多如牛毛,不掌握一定的方法论的话觉得一方面是学不来这么多的开源产品,另一方面则是根本就发挥不了开源产品的作用,一直以来我就推崇技术人员按照工具型人才--->思想型人才--->创新型人才的发展路线,所以我觉得学习和熟悉几种开源产品是必须的基本技能,但并不是说一定熟悉最新流行的开源产品,其实这个就象基于MS做开发的人员,最起码要熟悉的就是.net这些东西,只有先在熟悉这些东西的基础上才能形成更好的发展,一切都自己从底层摸起尽管会让自己学习到很多也会理解很深,但会走很多的弯路,基于开源产品能基于别人经验的基础上进行学习,这样自然会少一些弯路,而且其实这样是很容易形成自己的一些想法的。
对于一个开源产品,觉得只要按照一定的步骤去进行学习,对于从工具型人才--->思想型人才--->创新型人才这样的发展路线来说是很有帮助的,一个开源产品的学习我觉得对应着上面说的发展方式也同样的可以分为三个步骤:
1、开源产品的使用
首先要学会开源产品的使用,这个过程看似简单,但要分开源产品,有些简单的开源产品学习起来会比较简单,有些则很复杂...
比如象oscache这种工具类型的开源产品会比较的简单,象hibernate、webwork这种框架类型的开源产品学习起来就没那么简单了,而且什么样才叫学会了开源产品的使用,这个还是很难界定的一个范围,我觉得是象开源产品中提供的功能都是要学会使用的,比如说hibernate,你不能说只学会了单表形式的,关联形式的就不知道该怎么办了,然后里面的级联、反转、延迟加载什么的都不懂,我觉得在这样的情况就可以认为是在开源产品的使用上学习的还不够。
通常来讲开源产品的使用的学习还是有很多好的办法的,现在的开源产品大都提供了reference性质的文档、很多还提供了象sample之类的东西,一般学习使用的时候可以参照reference做做sample,当然,一般来说还是得通过在实际项目中使用才能真正的掌握其使用的方式。
所以开源产品的使用这个周期其实并不一定就很短,虽然很多的开源产品上手现在都变得容易了...
但对于思想型或者创新型人才来说,在这个步骤基本都是可以快速进行的,因为思想级的改变其实在现在的开源产品中并没有怎么出现,都是在易用性等方面做改进。
2、开源产品的设计和实现思想
在学会了开源产品的使用后,为了自己在技术方面的发展的话,对于框架类的开源产品是要进行深入的研究的,对于工具类型的开源产品就看自己是否有兴趣了,对于框架类的开源产品当然也是要有挑选的进行,选择符合自己感兴趣的技术方向。
通常来说去学习开源产品的设计和实现思想最基本的方法就是先去查看该开源产品基于的一种架构层次的思想或者说它本身的架构层次的设计,同时了解相关的这类开源产品框架通常涉及的一些架构以及设计模式(比如MVCFramework通常采用的MVC Pattern、Command Pattern等),在这种情况下再对照着开源产品的代码进行分析,逐步深刻的理解其中的设计和实现的思想。
在掌握了开源产品的设计和实现思想的情况下,才能真正的合理的在实际的项目中运用该产品。
3、基于开源产品的实际系统设计和改进点
在学会了开源产品的使用、了解了开源产品的设计和实现思想后,才能真正的很好的在实际的项目中去使用这种产品,因为象框架级的开源产品来说通常会对设计造成一定的影响,这个时候的设计很多时候要基于某种开源产品的功能去完成,这个时候就依赖于你对该开源产品采用的设计思想的熟悉,需要尽量的去发挥它的作用,当然其实这个时候你更多的不是限定于开源产品,而是限定在了开源产品采取的设计思想,其将决定到你的设计,比如象采用hibernate,其实我想也许部分人都只是使用hibernate完成了一种从关联模型到关联型对象的映射,而没有真正的充分发挥OO的封装、继承和多态,在这种情况下虽然也是够用的,但必没有做到充分的发挥采用开源产品的优势。
另外一个就是基于自己对开源产品的使用、设计和实现思想以及结合项目的实际需求,可以考虑提供一定的改进点,以使得对于项目更加适用,这也是创新型人才特征的表现,^_^