Java界的開源產品多如牛毛,不掌握一定的方法論的話覺得一方面是學不來這么多的開源產品,另一方面則是根本就發揮不了開源產品的作用,一直以來我就推崇技術人員按照工具型人才--->思想型人才--->創新型人才的發展路線,所以我覺得學習和熟悉幾種開源產品是必須的基本技能,但并不是說一定熟悉最新流行的開源產品,其實這個就象基于MS做開發的人員,最起碼要熟悉的就是.net這些東西,只有先在熟悉這些東西的基礎上才能形成更好的發展,一切都自己從底層摸起盡管會讓自己學習到很多也會理解很深,但會走很多的彎路,基于開源產品能基于別人經驗的基礎上進行學習,這樣自然會少一些彎路,而且其實這樣是很容易形成自己的一些想法的。
對于一個開源產品,覺得只要按照一定的步驟去進行學習,對于從工具型人才--->思想型人才--->創新型人才這樣的發展路線來說是很有幫助的,一個開源產品的學習我覺得對應著上面說的發展方式也同樣的可以分為三個步驟:
1、開源產品的使用
首先要學會開源產品的使用,這個過程看似簡單,但要分開源產品,有些簡單的開源產品學習起來會比較簡單,有些則很復雜...
比如象oscache這種工具類型的開源產品會比較的簡單,象hibernate、webwork這種框架類型的開源產品學習起來就沒那么簡單了,而且什么樣才叫學會了開源產品的使用,這個還是很難界定的一個范圍,我覺得是象開源產品中提供的功能都是要學會使用的,比如說hibernate,你不能說只學會了單表形式的,關聯形式的就不知道該怎么辦了,然后里面的級聯、反轉、延遲加載什么的都不懂,我覺得在這樣的情況就可以認為是在開源產品的使用上學習的還不夠。
通常來講開源產品的使用的學習還是有很多好的辦法的,現在的開源產品大都提供了reference性質的文檔、很多還提供了象sample之類的東西,一般學習使用的時候可以參照reference做做sample,當然,一般來說還是得通過在實際項目中使用才能真正的掌握其使用的方式。
所以開源產品的使用這個周期其實并不一定就很短,雖然很多的開源產品上手現在都變得容易了...
但對于思想型或者創新型人才來說,在這個步驟基本都是可以快速進行的,因為思想級的改變其實在現在的開源產品中并沒有怎么出現,都是在易用性等方面做改進。
2、開源產品的設計和實現思想
在學會了開源產品的使用后,為了自己在技術方面的發展的話,對于框架類的開源產品是要進行深入的研究的,對于工具類型的開源產品就看自己是否有興趣了,對于框架類的開源產品當然也是要有挑選的進行,選擇符合自己感興趣的技術方向。
通常來說去學習開源產品的設計和實現思想最基本的方法就是先去查看該開源產品基于的一種架構層次的思想或者說它本身的架構層次的設計,同時了解相關的這類開源產品框架通常涉及的一些架構以及設計模式(比如MVCFramework通常采用的MVC Pattern、Command Pattern等),在這種情況下再對照著開源產品的代碼進行分析,逐步深刻的理解其中的設計和實現的思想。
在掌握了開源產品的設計和實現思想的情況下,才能真正的合理的在實際的項目中運用該產品。
3、基于開源產品的實際系統設計和改進點
在學會了開源產品的使用、了解了開源產品的設計和實現思想后,才能真正的很好的在實際的項目中去使用這種產品,因為象框架級的開源產品來說通常會對設計造成一定的影響,這個時候的設計很多時候要基于某種開源產品的功能去完成,這個時候就依賴于你對該開源產品采用的設計思想的熟悉,需要盡量的去發揮它的作用,當然其實這個時候你更多的不是限定于開源產品,而是限定在了開源產品采取的設計思想,其將決定到你的設計,比如象采用hibernate,其實我想也許部分人都只是使用hibernate完成了一種從關聯模型到關聯型對象的映射,而沒有真正的充分發揮OO的封裝、繼承和多態,在這種情況下雖然也是夠用的,但必沒有做到充分的發揮采用開源產品的優勢。
另外一個就是基于自己對開源產品的使用、設計和實現思想以及結合項目的實際需求,可以考慮提供一定的改進點,以使得對于項目更加適用,這也是創新型人才特征的表現,^_^