Carry_one 2014-06-23 18:13
浏览 443
已采纳

深入学习java的困惑:3年开发,下一步学习的方向以及要做什么?

楼主做java3年了,时间不长不短。职位么,因为跳槽多次,仍是普通程序员,关于跳槽频繁这一点,刚刚觉得非常不妥。
最近很长的一段时间,我对下一步的学习方向,或者说java的学习方向,充满了困惑。
困惑1:在工作上遇到的很多技术上的东西,都给我一种感觉----不做不知道,谁做谁都会。要做一个东西,或者遇到一个问题的时候,往往是用到第三方类库,这些东西一般做过也只能记个大概,代码是肯定记不住的,还是要现用现查;没做过的,在网上一查往往也能查出一堆,拿过来修修改改,80%以上的问题都能解决。除了这些,就是一些基本的代码,有一定基础都可以写的不差。
不知道是我接触的东西太少,还是本就是这样。如果是前者,烦请比我更明悟的人,来指点我一下。

困惑2:进一步学习的方向。因为在大多数时候都是面对困惑1里面的情况,而我觉得这些是肯定肯定不够的,就在想下一步应该怎样进步,学习什么。这也是本次提问的主要问题,对于一个3年经验的普通java开发,下一步的学习方向是什么?有没有较为清晰的归类,比如架构师、DBA之类的。
不得不承认,对于很流行的大数据、高并发,楼主缺少一些经验,1是接触的机会不多,2是此类工作大多需要工作经验。想过要自己学习,不过应该只能学到些皮毛。

工作接触的一些技术也不少了,比如nginx,memcached,mongodb,dubbo framework,InnoDB,linux等等一些暂时想不起的,但只通过工作和一些课外学习,也没有了解的很深入。也许是,我缺少一个可以更深入学习的工作?也许是,因为跳槽过多,没有一个稳定的业务方向,也就没有遇到更深入的问题?

总之,我最近是挺困惑,脑子也有点乱。希望各位资深大牛来给些建议,和我一样困惑的程序员们,也一起来讨论

  • 写回答

10条回答 默认 最新

  • 自然点可以嘛 2014-06-24 10:17
    关注

    在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调优,最大的优化单机能力

    再然后。。。先省略,看到这里我打算写一篇小博客^_^

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • zuoshang 2014-06-24 02:53
    关注

    一个既简单又不简单的方法,逼迫自己用开源软件的设计思路,代码规范,变量命名习惯去写自己项目,即便是业务导向的系统。久而久之,对于再高深的东西,都不杵了。

    评论
  • h248980496 2014-06-25 14:57
    关注

    除了非常赞同一楼的答案外,我还想到另一个道路。
    公司有一个系统,由客户填报数据并能查询和汇总。客户早期有9张数据填报报表,于是就有了9个持久化对象和数据库的表,并增加了日志记录*9,后来变成了43张,于是开发团队就拼命补上了后面的表,于是变成43个对象和表,后来系统运行了5年,每年有200w数据,于是每年填报的时候就要从近千万数据中找几十万数据,非常慢。
    问题出在设计上,应用系统的设计是综合考虑客户的变化、系统的效率、开发人员的能力、可接受的成本和进度、以及很多因素的综合体,充分考虑和平衡才能得到比较理想的结构和灵活性,现在每年如果有报表需要修改列,于是要很多判断当前年是否有这一列,并且大量页面需要修改,如果能充分考虑这些变化点,折中出现一些可配置和自动生成的表,可以大大缓解系统现有最严重的问题。
    所以这就是我指的另一条道路,设计。设计不是简单的业务分析师成果的再现、把用户的流程文件对象化,需要思考和经验,不是说客户说不变就不变,而是真正考虑一项变化的发生概率和带来的消极积极影响。

    评论
  • shyboy0358 2014-06-23 21:34
    关注

    楼主用到的技术不少,但是光停留在表面的应用还不够,最好能了解一下各个技术的原理,我记得我上大学的时候,老师就说学编程,先把Linux源代码读一遍。所以对java技术要知其所以然。还有设计模式也很有用。

    评论
  • ShotGo 2014-06-24 00:26
    关注

    假如没有一个明确地方向,试着考一下系统分析师的证,过程中地一些科目也可以当做程序员地指导方向。考证地过程中,凡是涉及到自己从未实现过的算法,都使用Java实现一遍,自己建一个Git账号,保存好这些资源。
    5年Java开发,共勉。

    评论
  • tank2140896 2014-06-24 08:10
    关注

    楼主我和你情况差不多,始终停留在用层,都是为了解决问题而用的,虽也坐了有几年,然进步小很小,那些在项目中用到的新技术,一个新人也能很快掌握。而几年来成长的不是技术而是对业务逻辑的熟悉……说实话这不是我想要的,坐2年成长等于2个月,为何如此?1.我也不知道我该怎么做,2.大量时间都在业务逻辑上。但是我现在似乎找到了方向,希望能给楼主点帮助或启发:现在我们学习的是高级语言,为何不去探索下高级语言怎么来的呢?难道没这好奇吗?我们为何不自顶向下探索一下呢?当然你要做好准备,这是修的内功,不是象会用那样立即见效,其间辛算谁做谁知道,而且别人不一定认同你。我觉定走下去?你呢?仅作参考。

    评论
  • 黄菲 2014-06-24 08:30
    关注

    同感,感觉做开发很累啊,有时候闲下来不知道要干什么,做工作的时候又感觉在重复一些事情,我觉得参考楼下的建议,去考系统分析师的证,这样在过程中可以学到很多东西,要不太茫然了

    评论
  • M44346460 2014-06-26 20:58
    关注

    技术是有瓶颈的,这不可避免。尝试去做一些管理吧。

    评论
  • iteye_15535 2014-07-04 14:46
    关注

    我也很困惑,只是会用。

    评论
  • liu_bao_jin 2017-06-21 12:04
    关注

    Java需要学的大体分为两部分基础部分JavaSE  以及企业应用部分javaEE  Javaee是应用最广泛的,首先要学会的就是Javase基础部分不能操之过急,另外如果自学学不进去的话,还是建议你去培训一下我朋友就是在华清远见学习培训的最后学的技术水平和就业薪资都是相当好的,他还整理了一些他[url]面试的题http://javaee.3g-edu.org/?lbj[/url]有时间的可以看下

    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥30 宾馆客房管理系统可视化
  • ¥20 unity打光没有照亮物体
  • ¥25 powershell如何拷贝1周前的文件
  • ¥15 询问MYSQL查询SQLSERVER数据表并比较差异后,更新MYSQL的数据表
  • ¥15 关于#前端#的问题,请各位专家解答!
  • ¥15 最小生成树问题 Prim算法和Kruskal算法
  • ¥25 医院住院病人呼叫器设计
  • ¥15 不想和现在的团队合作了,怎么避免他们对程序动手脚
  • ¥20 C语言字符串不区分大小写字典排序相关问题
  • ¥15 关于#python#的问题:我希望通过逆向技术爬取1688搜索页下滑加载的数据