如何在工作后提升Java技术?

1 提升单机版开发技术为辅,提升分布式高并发技术为主。

2 先提升面试技术,找到能提供值钱技术的公司,在其中提升技术,而不能单凭学习提升。

3 通过排查和解决实际问题来提升技术。

4 最重要的是,只提升能当下直接帮到你的技术,比如工作中急需用到的技术,以及下份跳槽所需要面试的技术。

在讲具体做法前,先列些提升java技能时常见的问题。

1 工作后漫无目的地提升,或者是提升抽象的能力。

比如工作中做的是枯燥的增删改查,但听说大厂用的是分布式高并发,或者是spring cloud alibaba组件,所以就去买了这些书去看,甚至去运行代码,但不落实到工作中。再如听说设计模式和代码重构或者算法非常高大上,也比较精美,所以就去系统学这方面的理论。

在生活中,大家总是会在把生活质量提升到一定的程度,再去谈艺术等高大上的东西,或者说,在一般人中,不大会把艺术作为交流的主题。在java方面也一样,java程序员需要优先考虑的是通过跳槽等方式提升自己的薪资,所以有些“编程艺术或算法之美”,不是说不重要,还是等薪资达到一定水准再看吧。

2 只看和自己工作有关的,只看单机版技术。

Java技术一般分成两种,一种是和开发业务有关的,比如Spring boot或JPA,或者是Java核心技术里的多线程集合方面的,另一种是和应对高并发有关的,比如Redis缓存,MyCAT分库分表。这里姑且把前者称为单机版技术,后者称为分布式技术。

哪怕把单机版技术看得很深,比如深挖了集合或多线程对象的底层源码,或者是Spring Boot的实现细节,顶了天还是只能应对开发增删改查业务。但不少Java开发,尤其是初级开发,在工作中只需用到单机版的技术,所以只把学习方向定在这块。

真正该做的是,第一要熟悉项目开发的相关技术,比如Maven,Git或者是Sonor等技术,第二要进一步熟悉应对高并发的分布式组件或微服务技术。

3 期望通过学习掌握相关技能,所以在学习过程中投入过多的时间。

比如对于零基础的Java学习者,想通过运行多个Java项目来掌握Java开发技能,有一定技术的Java程序员,想通过系统看资料来掌握分布式微服务的技能。

这样说吧,对于一个技能,比如分布式高并发相关技能,学精通了,能在项目中熟练解决各种问题,这样的成绩算100分,那么达到能在项目中解决初级问题,这样的成绩算60分。但如果仅通过学习,不参加实践,那么顶多只能把这个技能学到30分的程度,在这过程中,投入的时间再多看的资料再全,顶多只能把学习成绩从25分提升到30分。

那么真实的学习和提升过程应该是什么样的呢?在当前项目里用到技术好说,在项目里学就是了,对于那些本项目没有实践机会的技术该怎么学?比如java开发要挑战架构师的岗位,那么一般是先通过看资料,掌握概念和API,用较短的时间先学到大概20分的程度,然后再准备面试,通过准备说辞让面试官感觉你有(比较低级的)实践经验,然后再进入到项目里学,通过第一个项目把相关技术的掌握程度提升到60分以上,然后可以再正大光明地以架构师的身份去挑战更高薪的工作。

以上讲的是方法,然后结合具体的项目开发和跳槽的实践,讲下Java程序员在工作后该如何提升技术的实践要点。

1 首先确保自己能做熟当前的活,这里不仅包括做熟做好写代码的活,还要能做测试、看日志分析问题和部署等相关的事情。

首先需要在做好业务的同时,熟悉其中用到的技术,比如是spring boot增删改查技术,在此基础上,如果项目组里用到Restful,aop或junit等其它技术,不管是否你业务中用到,同样得掌握。

在此基础上,需要掌握项目从开发到部署的一般流程,具体包括,用GIT进行代码管理的技术,用 Maven或Gradle管理代码版本的技术,用Sonar等对代码的扫描和分析技术,如果可以,再掌握用jenkins等工具进行集成化项目打包发布和部署的技术,即CI/CD技术。

2 在本项目里,多参与解决线上问题,尤其是涉及到项目部署、数据库性能调试、JVM或分布式组件等方面的问题。

刚开始的时候,一定是人家排查好以后再复盘,这样多做几次,就能慢慢积累看日志和解决问题的经验了。当然,如果可以,参与下项目打包部署到服务器的活,或者是和linux服务器相关的活,比如搭建环境,扩容,看日志甚至重启,多多参加,这样一定能摆脱自己“只能在windows上做开发”的局限。

3 多参与本项目里和分布式组件有关的活,比如用redis或dubbo等组件解决实际问题,搭建相关环境,排查分布式组件等问题。

java初级开发要升级,一定得提升分布式组件方面的能力,先熟悉相关组件的API,在此基础上,再需要结合liunx,docker容器,甚至是k8s等编排工具,从部署调试和排查问题方面提升能力。

java项目,哪怕是外包项目,只要是商业项目,多少会用到分布式组件,当前所在的组里没用到,那就到其它组去问,当然再啰嗦一下,这方面一定得通过解决分布式高并发方面的实际问题来精通技能,这块熟悉了以后,可能无法再当下公司继续提升,那就需要跳槽了。

4 跳槽时,优先准备分布式高并发等值钱技术的项目开发技能,即比如Redis,你是用在哪个业务场景里?缓存数据结构是什么?API用到哪些?解决过哪些实际问题?这样围绕项目来准备,就一定能在面试时让面试官相信你有实际开发的能力,这比单纯背八股文强太多。

上文也提到,提升技术的过程是先掌握个大概,再通过面试得到实践机会。在分布式组件层面,如果是java初级开发,自己可以多积极些,去争取些相关技能的实践机会,但毕竟本职是写业务,分布式高并发未必能接触到很深,所以此时一定别指望在本公司完成升级,而是要通过跳槽来让自己提升成高级开发或架构。

5 提升好职级刚进入公司时,由于缺乏值钱技术的实践经验,这个时间段一定是很难熬,不过大多数java开发都是这样升级的。这样再辛苦一段时间,通过项目让自己真正掌握分布式高并发等实践技能,这样就能真正做到技术结合项目,这样才算真正掌握值钱技术。java基础

再说下Java程序员提升技术的一般周期。

1 刚入职后,用半年时间熟悉业务,事实上大多数程序员用3个月就能做到。

2 再用1到2年全面熟悉本项目里的值钱技术,这里不仅要熟悉开发本职业务用到的,更要熟悉其它组用的,尤其是,如果公司里有中间件组,或者运维组,或者是架构组,一定要全面吸收这些组里用到的技术。

3 在一个公司里干个2年,如果感觉公司有提升空间,或者公司规模可以 ,名声也不错,那么可以继续干,如果公司规模比较小,或者甚至是外包公司,那么在工作2年后就可以打算跳槽了。如果说一份工作干个2年有些不稳定,那么干个3年怎么地都可以考虑了。

但是在这个过程中,一定要杜绝无效学习,即学习和做项目以及跳槽脱节,同时更要专攻一个方向,比如java开发可以去看测试等技能,但发展方向依然是java后端。

这样的话,短则2年,长则3年,Java程序员一定能让自己在提升技术和薪资的前提下找到一个更好的平台,这样累积发展个5,6年,让自己薪资翻番,甚至翻3番,都有可能。但不过话说回来,如果让自己陷于舒适区,或者持续无效学习,那么3,5年时间会很快过去,此时可能真会出现竞争力下降甚至是薪资倒挂的情况了。