最近總有些斷斷續續的思考,想一想從我入行以來,我到底學會了什麼,作成過什麼,之後要作什麼,如何提高本身·······css
工做3年了,常聽人說3年,5年,10年是程序員的坎,每過一個都會有新的想法,新的改變。html
最近剛失業,原公司要解散開發團隊,轉作其餘業務,這個消息對我來講在乎料以外,可是又在情理之中,只是沒想到來的這麼快,再這家公司待了2年,學到了很多技術,可是最後的半年,由於公司產品研發的一些問題,加上自身的懈怠和懶惰,基本上是在打醬油,如今想起來感受很後悔,浪費了光陰,像這樣能有一份收入同時又能夠學到東西的機會實際上是很可貴的,只怪本身當時沒領悟到。前端
而後就是投簡歷找工做,我預想的是有了工做經驗再找工做應該不像當年剛畢業找工做那麼難了吧,實際上倒是當我拿着3年工做經驗的簡歷面試了一些公司以後發現,其實個人能力對於勝任3年工做經驗的工程師崗位仍是有些差距的,忽然感受到比剛畢業時更無助的感受,也後悔工做3年卻沒積累到3年的經驗,也許我是一個經驗用了3年,而不是有了3年經驗。java
我是作j2ee開發的,一直都在作網站方面的開發,可是這一段時間的面試下來,我感受如今的公司招人特別是工程師這一崗位的要求是全能型人才,必須瞭解並掌握軟件開發中每一個環節的具體操做。而我,卻只掌握了其中部分,其餘的只有聽過或見別人弄過,是隻知其然,不知其因此然。因此鑑於我這樣的狀況,一些公司給個人定性是初級開發工程師,一開始我以爲很不高興,哥好歹也工做3年了,就給哥這評價,可後來仔細一想,人家講的未必沒有道理。如今大部分軟件公司的技術團隊都不會很龐大,可是工做量和工做強度倒是很是之大,若是一個團隊成員不能獨當一面,不能兼顧多方面工做,沒有很全面的實力的話,整個團隊效率和能創造出的效益也是很是低下的。mysql
那咱們做爲一個Java程序員到底須要掌握多少技術才能適應如今的用人單位呢?jquery
我我的總結後以爲有如下這麼幾項:android
1. java 基礎nginx
這就不用多說了吧,不用說精通,至少是經常使用的要熟練,不會說連jdk裏面提供的類都沒認全的(我確實有小部分不經常使用的沒記住的T.T)程序員
2. 各類工具的使用web
eclipse,SVN ,數據庫管理工具等等
3. j2ee 框架
只要你是用java來作WEB應用,絕對少不了使用j2ee框架,目前流行的有
1)struts 2)spring 3) hibernate 4)ibatis 5)spirngMvc 等等的其餘一些類似的框架,還有項目架構中常常會用到的緩存框架例如memcached ,ehcache,oscache等Java緩存框架
你須要掌握基本使用,部署,性能調優,配置
4. 數據庫基礎
數據庫一直是程序員須要重點掌握的一部分,當下主流的仍是關係型數據庫,產品有oracle mysql sqlserver db2,固然nosql型數據庫也是將來方向,不少公司也已經在使用,如redis mongodb membase 等等
你須要掌握基本使用,和根據業務邏輯設計表,索引,視圖,存儲過程,函數等
5. 應用服務器
凡是web應用首先都要部署到應用服務器上,經常使用的產品有tomcat,jboss, apache,resin 等等,還有用來提高性能的反向代理服務器如nginx等
你須要掌握如何部署項目,基本調試,調優
6. Linux系統
咱們日常的編碼一般在windows環境下,但是生產環境卻一般是在Linux下,由於微軟的東西,你懂得
因此咱們須要掌握的是shell腳本,vi ,各類軟件的安裝,部署,其中shell腳本是最重要的(我我的以爲哈)
7. 前端開發基礎 html css js
若是你不是專攻服務器編程的話,你必定會接觸前端開發,這其中html你須要掌握各類標籤的使用,css首先你得看得懂是吧,js 目前來看屬於一門獨立的程序設計語言,也是前端中很是重要的一塊,須要掌握其語法和一些經常使用框架如jquery,extjs等的使用(我以前的公司前端只負責切html和css,js啥的都是咱們本身來)
8. 設計模式
面試官最喜歡問的問題之一,這個被不少人吹的很神的東西我我的認爲既不用奉爲圭臬,也不用棄如敝履,這是一個思想的東西,也許寫一生程序那23個設計模式也不必定全用的上,可是知道而且可以在適當的時候用他來解決問題就夠了
9. 數據結構 算法
記得國外哪位大神說過,編程=數據結構 + 算法 。雖然感受日常的工做中用到的很少,但仍是以爲這是一個內功的東西,不會這兩樣也許你也能夠完成不少開發工做,可是若是你精通這兩樣,你的思想境界和思考問題的高度就不是通常人能比的了,若是想要在程序員這條路上繼續走下去,無論之後是成爲技術專家仍是技術性管理人才,都是必需要爛熟於心的。
--------------------------
上面幾點是我以爲應該掌握的具體的技術,再講些其餘層面的吧
1. 項目管理
這裏的項目管理我指的是對項目架構的理解和軟件開發標準化流程的一些東西,由於一個團隊除了技術老大以外其餘成員也仍是須要深入的達成一個這方面的共識,否則無法共事對吧
2. 項目架構設計
這個就是須要大量實踐和多看書來培養的了,若是你想成爲架構師這是必須的,目前web方面的項目架構都是朝着高性能,高可用,大數據的方向,你須要掌握的不只是上面提到的全部技能還有技術以外的產品,業務等更深更廣的東西
上面僅僅是我工做中遇到和我認爲應該掌握的,也是僅針對Java的web開發方向,若是你是android開發的話,還須要掌握android sdk中的方方面面。
若是將上述方面的技術都掌握到熟練的程度,勝任一個3年經驗的開發崗位應該是沒有問題了(我就沒有所有掌握...T.T),固然 若是你但願你的技術水平不僅是熟練的話,我的認爲則須要把上述其中幾項往深度方面修煉,而後有所成再往廣度發展,
先在一個領域有足夠的深度,再往廣度發展會容易不少,職業道路也會好走不少。
---------------------------------
首先感謝您看我囉嗦廢話到這裏,以上都是我在工做3年這個十字路口的一些所思所想,確定有所不足和幼稚,但願您看到這裏也能發表下您對您職業生涯的感想,咱們你們一塊兒交流成長,努力提升本身的技術水平,能夠爲未來更好的工做機會作準備。