最近总有些断断续续的思考,想一想从我入行以来,我到底学会了什么,作成过什么,之后要作什么,如何提高本身·······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年这个十字路口的一些所思所想,确定有所不足和幼稚,但愿您看到这里也能发表下您对您职业生涯的感想,咱们你们一块儿交流成长,努力提升本身的技术水平,能够为未来更好的工做机会作准备。