一個碼農6年技術成長經歷的總結和收穫

chengp919發表於2017-08-03

微創業的網站終於做好了,6年來的技術學習生涯也可以算是里程碑式的告一段落了。在此片刻停留的間隙,回顧以往,梳理所學到的技能,總結下得到的經驗、收穫和領悟,讓自己對自身的技術和狀態有個清晰和條理的認知,方便自己對未來職業發展方向的選擇,也希望自己得到的結論能給大家多一份借鑑。 

對於Java技術生態圈而言,從下往上大致可分為以下幾點: 

1. Java SE基礎本身(也稱之為 Core Java):SE除了包含像Math等的一些提供基礎運算的類外,其他大部分的類都用於構建更高階的框架或者工具包,如反射、代理、國際化、JDBC等,這些類作為基石被應用於大部分的Java框架中,可以說,掌握了這些類、知道這些類是用來幹什麼的,就等於掌握了那些框架的執行機制,如spring的核心模組DI和AOP主要使用了反射、代理和XML解析的API來實現她的思想,而hibernate則使用了JDBC等,而框架間的差異一般只在於該框架要實現的特有的業務邏輯程式碼,所以我個人更傾向於將Java SE稱為Core Java,因為Core Java本身除了包括一些基本的Java語法語句外,她還包括很多像JNDI、JMX、JAXP、RMI等高階模組,具體請參見Java官網教材:http://docs.oracle.com/javase/tutorial/ 

2. java EE:Java EE像其他框架一樣,也是基於SE構建的企業版本,她與框架的區別在於定義了企業應用三層架構中每一層對應的技術模組,而我們用的最多、認知度最高的集中在Web層中的JSP、Servlet、Filter等,基本上可以說,掌握了Web層面的技術,可以解決大部分公司的開發要求,而像EJB、JSF等相對來說是比較冷門的技術點。有一點比較被忽視的是Web層與EJB的關係,因為他們之間是按照標準的三層結構來劃分的(詳情請參見:http://docs.Oracle.com/javaee/6/tutorial/doc/bnaay.html ),既是說除了Web層可以使用EJB從資料庫獲取資料來做表示層的展示外,EJB的所有邏輯程式碼還可以用在C/S架構上。這是一個非常重要的分層思想,特別是在移動客戶端越來越受重視的當下。雖然我們不經常使用EJB,但我們完全可以按照這個分層思想,嚴格定義Service 層 ,這樣除了Web層可以直接呼叫這些API外,還可以在Service層上新增Web service層, 這樣移動客戶端就能通過XML獲取資料,經過XML解析後就能以客戶端適合的方式展現給使用者,從而完全分離了不同的展示形式而複用了所有的業務邏輯!!!這是多麼天才的想法 。甚至可以使用更純粹的架構,讓Web層也通過Web Service來獲取資料,變為分散式的服務架構。java ee的官網教材請參見http://docs.oracle.com/javaee/6/tutorial/doc/docinfo.html 

3. Struts、Spring、 Hibernate等各種框架:前面已經提到,只要對Java和Java EE的各個模組和元件有足夠了解,基本上可以從這些框架所要達到的作用推斷該框架用到了哪些技術來實現她的機制,所以學習框架的重點在於這些框架所實現的思想,如Spring的核心模組實現了DI、AOP(像Spring MVC、Webflow、Security等雖然用在不同的領域,但也是使用SE跟EE的模組來實現相關機制的),Hibernate實現了ORM而Struts則實現了MVC。從框架的巨集觀角度看,每一種思想(或者說模式)都有至少兩種不同的框架來實現,而後者的出現往往基於人們對前者在學習曲線、易用性、靈活性等方面的不足而開發,進而替代前者成為主流。另一種兩種或多種框架並存的情況則出現在框架應用的領域差異上,比如Hibernate和MyBatis,更明顯的出現在js框架上,如EXT適用於做報表而jQuery則用來簡化JS語法和構建基本的動態庫等。

4. 除了以上提到的開發技術,對Subversion、TortoiseSVN、Eclipse WTP、 Tomcat、Junit等工具的瞭解和使用純熟度也是不可缺少的因素。

Subversion:雖然單從它身上看不到對於補充開發技能的好處,但瞭解它是一個svn伺服器及它所提供的服務,會讓你對TortoiseSVN是什麼、它提供了什麼功能有一個較全面的理解。作為開發人員,不止需要知道怎麼用,還得知道為什麼,而知道為什麼,往往就是除錯程式過程中解決問題的關鍵;

Eclipse:一提到Eclipse往往讓人聯想到的是Eclipse Java EE版本,一般不會注意到Eclipse官網還提供Eclipse Java版本的下載。這兩版本在使用領域上還是有很大區別的:Eclipse Java版本整合了Junit和Maven,一般用在C/S架構或者Jar包的開發上,既是說不提供Web開發所使用的Jsp、JavaScript等外掛的支援。像Spring核心包的開發就不需要使用Eclipse Java EE,而像Spring MVC等Web框架就明顯需要Web外掛的支援。如果Web應用需要用到使用Java版本開發的Jar包,那麼Web開發人員既可直接將Jar包拷到工程lib下,也可以通過Maven將該Jar包匯入工程,前提是已在Eclipse Java EE版本中安裝了Maven外掛並將Web應用轉為Maven工程,這也是兩個Eclipse版本的區別之一。通過將業務核心封裝在Jar中並使用Eclipse Java開發,可以使開發人員集中在業務邏輯的實現上並編寫大量的測試用例儘可能的提高程式碼覆蓋率。相比之下,Web應用的開發人員則通過簡單的核心Jar的API呼叫,集中精力做Web介面的展示和流程跳轉,而不需要關係核心Jar是否有bug。

5. 架構:對DAO、Business logic、Value object、Deployment、Presentation和Architecture component各層有個清晰的認識可以制定出架構分明的系統,這是進階架構師的基礎。在擁有架構這大的知識體系後,再對23種經典的設計模式加以瞭解必然能設計出更優雅的應用架構。 

對於前端技術而言,我覺得比較重要的是javascript。Javascript語法和Ajax是所有JS框架的基礎,而框架的存在性跟上述提到的Java框架基本相同。 

以上涉及範圍面比較廣的學習歷程讓我體會到一個道理:程式語言的演化,都是以易用性為目的,讓開發人員把精力集中在業務邏輯的實現上,所以語言的發展趨勢是應用更簡單、學習曲線更平緩同時又具備靈活性和擴充套件性,讓開發人員能在短時間內上手並投入生產,違反這一規律的語言往往會隨著時間推移淡出大眾視野。

最後附上本碼農的學習經歷:

我是2007年畢業的,只是個專科生,莫有本科文憑,更不是從華麗麗的211、985學校出來。在校只學了些基礎的計算機知識的我同樣在畢業找工作時很彷徨,更沒有絲毫的奢望說能找到程式設計的工作,第一份工做的是測試,憑藉自己對技術的熱愛用業餘時間學習新知識,在學完J2EE的基本知識和Struts後終於找到了第一份編碼工作,遺憾的是這份工作並沒有使用任何主流框架。此後為了跟不同公司都擁有談薪酬的籌碼又不停的學習了Hibernate、Spring、Ant、Svn等,再後來基於擴充套件自身技能和知識面的需要學習了Maven、Eclipse、Tomcat詳細配置等,再到為了更全面的瞭解Java和Java EE重溫學過的模組並接觸新模組,最後得到對於Java技術生態總體上的理解,得到的結論雖然與前人的總結大致相同,但通過自身走過來的路,無疑擁有更深刻的體會。6年過去了,雖然在職位上還沒有質的提升,但完成的網站也是自己對過去努力的小小認可。在未來的路上,除了使原有技術再有一個層次的提升外,也希望把視野放在架構設計、效能調優、伺服器叢集設計、團隊協調和管理等方面。

轉載地址:http://blog.csdn.net/xleyou/article/details/20693261

相關文章