问题描述
楼主做java3年了,时间不长不短。职位么,因为跳槽多次,仍是普通程序员,关于跳槽频繁这一点,刚刚觉得非常不妥。最近很长的一段时间,我对下一步的学习方向,或者说java的学习方向,充满了困惑。困惑1:在工作上遇到的很多技术上的东西,都给我一种感觉----不做不知道,谁做谁都会。要做一个东西,或者遇到一个问题的时候,往往是用到第三方类库,这些东西一般做过也只能记个大概,代码是肯定记不住的,还是要现用现查;没做过的,在网上一查往往也能查出一堆,拿过来修修改改,80%以上的问题都能解决。除了这些,就是一些基本的代码,有一定基础都可以写的不差。不知道是我接触的东西太少,还是本就是这样。如果是前者,烦请比我更明悟的人,来指点我一下。困惑2:进一步学习的方向。因为在大多数时候都是面对困惑1里面的情况,而我觉得这些是肯定肯定不够的,就在想下一步应该怎样进步,学习什么。这也是本次提问的主要问题,对于一个3年经验的普通java开发,下一步的学习方向是什么?有没有较为清晰的归类,比如架构师、DBA之类的。不得不承认,对于很流行的大数据、高并发,楼主缺少一些经验,1是接触的机会不多,2是此类工作大多需要工作经验。想过要自己学习,不过应该只能学到些皮毛。工作接触的一些技术也不少了,比如nginx,memcached,mongodb,dubbo framework,InnoDB,linux等等一些暂时想不起的,但只通过工作和一些课外学习,也没有了解的很深入。也许是,我缺少一个可以更深入学习的工作?也许是,因为跳槽过多,没有一个稳定的业务方向,也就没有遇到更深入的问题?总之,我最近是挺困惑,脑子也有点乱。希望各位资深大牛来给些建议,和我一样困惑的程序员们,也一起来讨论
解决方案
在java领域摸爬3年之际时,跟你有很多共鸣,当年,杂七杂八的各种开源第三方工具类用了不少,广而不精,当年,也纠结如何提升自己, 纠结该如何走下去。我想继续做技术,于是我问了自己几个问题:1.既然既然会了很多各种各样的工具,是否对工具的使用有自己的总结?于是,我开始写博客,记录自己的学习成果, 写一些工具的测试代码,以便以后使用时,拿起来就用2.工具的使用都整理了,那么是否整合出自己的一套开发框架?然后我自己就整合了strut2 + spring2.5 + ibatis,随着技术的发展,我重新整合了velocity + springmvc + spring3 + mybatis包括工程架构:maven结构的工程,优化打包方式(轻松区分本地、测试、上线环境)使用代码检查工具:Findbugs CheckStyle做到团队代码风格基本一致。3.既然整合开发机构,是否能有套生成器,生成基本代码(增删改查)?然后我就使用基础的jdbcapi读取数据库表信息,使用velocity 模板引擎,开发了一套生成器, 给团队工作效率带来了质的提高4.以上都有了,如何做分层开发,动静分离?然后,我就将架构中模板引擎部分velocity 去掉, 直接使用html, 动态数据使用异步获取,动态数据服务端返回json, 页面开发人员(会css,js)和服务端开人员各司其职,再一次提高了开发效率4.当访问量上来的了,发现页面动态数据访问还是有些慢?然后在不做负载均均衡的情况下, 学了jvm的内存机制和gc调优,最大的优化单机能力再然后。。。先省略,看到这里我打算写一篇小博客^_^
解决方案二:
我也很困惑,只是会用。
解决方案三:
技术是有瓶颈的,这不可避免。尝试去做一些管理吧。
解决方案四:
除了非常赞同一楼的答案外,我还想到另一个道路。公司有一个系统,由客户填报数据并能查询和汇总。客户早期有9张数据填报报表,于是就有了9个持久化对象和数据库的表,并增加了日志记录*9,后来变成了43张,于是开发团队就拼命补上了后面的表,于是变成43个对象和表,后来系统运行了5年,每年有200w数据,于是每年填报的时候就要从近千万数据中找几十万数据,非常慢。问题出在设计上,应用系统的设计是综合考虑客户的变化、系统的效率、开发人员的能力、可接受的成本和进度、以及很多因素的综合体,充分考虑和平衡才能得到比较理想的结构和灵活性,现在每年如果有报表需要修改列,于是要很多判断当前年是否有这一列,并且大量页面需要修改,如果能充分考虑这些变化点,折中出现一些可配置和自动生成的表,可以大大缓解系统现有最严重的问题。所以这就是我指的另一条道路,设计。设计不是简单的业务分析师成果的再现、把用户的流程文件对象化,需要思考和经验,不是说客户说不变就不变,而是真正考虑一项变化的发生概率和带来的消极积极影响。
解决方案五:
同感,感觉做开发很累啊,有时候闲下来不知道要干什么,做工作的时候又感觉在重复一些事情,我觉得参考楼下的建议,去考系统分析师的证,这样在过程中可以学到很多东西,要不太茫然了
解决方案六:
楼主我和你情况差不多,始终停留在用层,都是为了解决问题而用的,虽也坐了有几年,然进步小很小,那些在项目中用到的新技术,一个新人也能很快掌握。而几年来成长的不是技术而是对业务逻辑的熟悉……说实话这不是我想要的,坐2年成长等于2个月,为何如此?1.我也不知道我该怎么做,2.大量时间都在业务逻辑上。但是我现在似乎找到了方向,希望能给楼主点帮助或启发:现在我们学习的是高级语言,为何不去探索下高级语言怎么来的呢?难道没这好奇吗?我们为何不自顶向下探索一下呢?当然你要做好准备,这是修的内功,不是象会用那样立即见效,其间辛算谁做谁知道,而且别人不一定认同你。我觉定走下去?你呢?仅作参考。
解决方案七:
一个既简单又不简单的方法,逼迫自己用开源软件的设计思路,代码规范,变量命名习惯去写自己项目,即便是业务导向的系统。久而久之,对于再高深的东西,都不杵了。
解决方案八:
假如没有一个明确地方向,试着考一下系统分析师的证,过程中地一些科目也可以当做程序员地指导方向。考证地过程中,凡是涉及到自己从未实现过的算法,都使用Java实现一遍,自己建一个Git账号,保存好这些资源。5年Java开发,共勉。
解决方案九:
楼主用到的技术不少,但是光停留在表面的应用还不够,最好能了解一下各个技术的原理,我记得我上大学的时候,老师就说学编程,先把Linux源代码读一遍。所以对java技术要知其所以然。还有设计模式也很有用。