猿问

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

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

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

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

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


米脂
浏览 646回答 9
9回答

神不在的星期二

在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调优,最大的优化单机能力再然后。。。先省略,看到这里我打算写一篇小博客^_^

慕工程0101907

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

qq_遁去的一_1

假如没有一个明确地方向,试着考一下系统分析师的证,过程中地一些科目也可以当做程序员地指导方向。考证地过程中,凡是涉及到自己从未实现过的算法,都使用Java实现一遍,自己建一个Git账号,保存好这些资源。5年Java开发,共勉。其实我说的意思,考证是一个过程,而不是你地目的。过程中,需要去学习专业英语,离散数据,项目管理等知识;而这些知识也许就是我们现在前进地阶梯。比如Lucene核心离不开图论相关知识;比如一些智能算法,也离不开向量运算相关知识,而要学习前沿地计算,外语是必需地;比如标准地项目流程是怎么走的,怎么把握项目地风险,项目地成本计算等等,都离不开项目管理相关地知识;等我们学好这些知识后,再考一下证,接下来你需要地是一个证明自己地平台;有些机会是留给有准备的人的。从另外一个角度讲,这个证是目前中国计算机范畴内承认高级工程师的3大证之一,拿到证后每年应该也有不少补贴。还是那句,共勉吧!

慕的地8271018

一个既简单又不简单的方法,逼迫自己用开源软件的设计思路,代码规范,变量命名习惯去写自己项目,即便是业务导向的系统。久而久之,对于再高深的东西,都不杵了。和开源软件比较一下自己的代码,如果能一眼看出完全不同的风格,说明还差的很远。

互换的青春

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

慕容3067478

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

临摹微笑

技术是有瓶颈的,这不可避免。尝试去做一些管理吧。
随时随地看视频慕课网APP

相关分类

Java
我要回答