工作五年后的程序员,一般怎样了?

本科一般是22岁毕业,5年开发经验一般是指27岁。这个阶段,不少程序员可能通过多次跳槽,薪资有一定涨幅,但真有可能还在小公司甚至外包公司做增删改查的业务,然后坐等30岁的到来。

就以Java为例,一些发展情况一般的程序员情况会怎么样呢?

1 会用Spring boot+JPA等框架做业务,而且由于业务做多了,熟悉框架相关技能,在公司里也能凭借做熟业务而干得风生水起。

2 熟悉日志,测试,项目部署和问题排查等项目开发技能,但仅限于开发单机版的业务。

3 还是在小公司,干的活除了是开发以外,更多干的是打杂扯皮的活。或者说,能凭借在公司里干久了,能在合理利用规则的前提下摸鱼。

4 如果再跳槽,大概率还是找小公司。一方面不知道如何面大公司,另一方面估计连面大公司需要你熟悉哪些技术也未必知道,或者是知道了以后也没有相关技术的项目实践经验;或者看下技术大厂还不错的外包岗机会,前后端均可投。

上述情况应该是有3到5年java经验程序员的普遍情况,有一定上进心,但不知道上进途径。在这个阶段接下来怎么继续提升呢?下文就从简到难,给出相关执行步骤(仅限Java方向)。

1 多参与解决实际问题,哪怕这个问题不是你管的。同时如果有运维或分布式组件相关的问题,一定要参与。这样不仅能继续提升业务水平,而且能立竿见影地提升技术。

2 了解项目从开发到测试到部署整个流程,这样能熟悉项目管理的相关技术和组件。

3 结合业务,熟悉分布式组件或微服务以及云开发等技术,有机会的话,多参与此类任务,多排查和解决此类问题。

4 在上述基础上,看些脱离业务但和项目基础设施有关的技术和组件,比如如何搭建集群,如何扩容和迁移机器,如何解决高并发层面的数据库性能问题,以及如何应对限流熔断和服务降级等问题,如果可能,多参与些诸如压测等性能调优等的工作。

其实如果上心,一般能在3个月的时间内熟悉上述1到3点,如果再多问问大牛,多参与实践,上述第4点也能在半年内掌握。到了这个程度,就别再满足当下公司给的薪资了,跳槽一次的话,薪资涨个3成都算少的。

下文就继续展开说明,先说如何通过排查问题提升技能。

1 在开发过程中,一定会遇到各种问题,有业务层面的,有数据库或OOM或组件层面的,最值钱的应当算是架构和集群层面的。遇到问题后,哪怕不是自己的,一定得参与,哪怕有其它人负责解决,那么人家在解决后,也应该通过看日志搜索关键字等动作,复盘人家的分析和解决过程。

2 一般项目的日志是部署在linux上的,有些项目可能还有ELK等可视化日志管理工具,可能有些项目还会通过new relic或cat等组件监控日志或系统,比如日志里出现Exception,或有数据库长sql,就会告警。

看日志解决问题过程中,首先得掌握打开日志或从监控工具中获取有效信息等做法。再进一步,甚至可以去关注比如logback或ELK等日志组件等配置方式,以及去关注Cat等监控组件等细节。当然在排查问题过程中,连接数据库客户端等工具也必不可少。

3 这样一旦出现问题,解决的步骤一般是,根据时间点拿到日志,再通过关键字搜索日志,再用trace-id或thread-id等观察整条链路在不同模块里的日志。查到出错信息后,再去排查相关代码。

4 上述从日志里得到相关信息的步骤,虽然简单,但没有操练前不是每个人都能熟悉掌握。此外,分析排查问题的过程一定会涉及到业务和组件等技术。

也就是说,如果程序员多参与解决问题,那么一开始可能无从下手,估计连日志在哪以及该如何打开日志都不知道,到了后面,可能别人找到了问题,你才刚打开日志。但所谓熟能生巧,多参与几次,多复盘几次,后面一定能高效发现并排查解决问题。

通过看日志分析解决问题能提升哪些方面的技能呢?业务层面的就不说了,往浅了讲,能熟悉Java的各种异常,往中了讲,可以熟悉排查oom或数据库性能问题的技巧,往深了讲,甚至能了解分布式组件相关的技能。

再说说从项目管理和部署方面提升能力的操作要点。

项目一般会用Gradle或Maven来管理,用Git管理代码,用jenkins做部署,部署上线前,可能需要到数据库里做建表或修改表结构等操作,上线时,可能还要对应修改配置文件。

java程序员如果可以,一定别开发完代码就了事,可以多和运维或做发布的人多沟通,从中一方面能了解基于jenkins等组件的项目发布流程,另一方面,还能熟悉项目打包部署和调试等细节。再进一步,通过熟悉这一流程,还能知道项目和nginx、redis、dubbo和消息中间件等组件的对接方式。总之,如果多参与几次项目发布,或者哪怕没机会动手实践,也可以在一旁熟悉各种命令。这种技能甚至有些java高级开发也未必掌握。

再说下从分布式组件层面获取技能的方式。

一个项目哪怕再普通,多少会结合些分布式组件,比如用nginx做负载均衡,用redis做缓存,用dunno做远程调用。甚至可以这样说,如果程序员不注意观察,眼里只有被分配到活,自然可以不用接触相关技能,但如果肯多问人,肯多和相关人员交流,一定能接触到分布式组件方面的技能。

这块该怎么看呢?

1 结合业务需求看为什么要用组件?比如要解决数据库层面的性能问题,所以要用redis或mycat。

2 看项目里怎么用,比如怎么通过配置文件连接redis或dubbo,怎么通过注解或API使用组件。

3 如果可以,看下组件是如何在linux上搭建的,尤其需要关注集群的搭建方式。

4 着重关注组件方面问题的解决。比如遇到dubbo超时问题,或kafka消息重发,这类问题其实只要关注,发生的频率不比业务问题要低。

这方面也是能熟能生巧,刚开始的时候可能连组件是什么都未必清楚,但观察一阵代码,同时解决一些问题后,估计集群长什么样,使用组件可能会有哪些坑,应该都能知道。

在熟悉组件以后,就可以多观察高并发相关的技能了。

高并发方面的问题其实也是一样的,刚开始可能无从下手,但多参与几次问题排查和解决后,大家其实会发现这并不神秘。

高并发相关技能包括哪些呢?

1 搭建组建环境层面,有扩容,更换服务,搭建集群和迁移数据等技能。

2 在解决实际问题层面,有熔断,服务降级和限流等动作,这方面甚至还可以包括分布式锁和消息幂等操作。

3 从功能方面,包括用nacos等组建搭建服务治理环境,用dubbo+zookeeper搭建远程调用环境,用nginx或ribbon搭建负载均衡环境,以及用nginx或gateway搭建网关环境,或者是用seata搭建分布式事务环境。

可能上文提到的技术,一些java初级开发都未必听全,但本人亲眼见过,一个才2年开发的java程序员,人比较上心,基本掌握上述技术才用了4个月,到7,8个月的时候都能解决高并发问题了。

其实做这个程度,别说高级开发,估计架构师相关的技能都能掌握不少。虽然说,对java开发的要求一般是能顺利做好开发任务,同时确保代码质量,而且能解决本职方面的问题,但如果java开发仅仅止步于自己所管的一块,估计增长的也是些业务技能,这种技能估计换个工作就没用了。

但是相反,大多数java项目总会包含些架构,集群和组件等方面的技术,而且java程序员如果肯主动上进,那谁也不能拦着。可能刚开始会步步维艰,甚至连打开linux日志的命令也要先查,但只要肯坚持,那么最终收益的还是自己。

本人也见过不少java程序员,在一家公司的某个组里,大概有4,5个初级开发,他们的薪资普遍只在年薪15w左右。

其中有些人可能就仅限于自己所管的这块,确实,业务做多了,完成任务的速度和质量能提升,但这些人平时接触到的也就是增删改查。但也有一些人,平时在工作之余,甚至是利用加班,多去和其它组以及运维和中间件组交流,有问题总是跟在后面,哪怕一头雾水,也会找人复盘,盯着问。

就这样大概过了半年,这两批java开发的差别就肉眼可见。一些只完成自己任务的程序员,估计依然停留在增删改查阶段,充其量顶多是个熟练工,按薪资来衡量,估计依然是停留在年薪15w的水平,况且年纪又大了,竞争力可能还下降。

但一些积极上进的程序员,由于日常工作中会主动接活并多参与事情,平时也经常出错,或者有时候分析问题不到位。但过了半年,这些人多少能掌握排查问题的技巧,多少参与过OOM或分布式组件等问题的排查,多少也开发了缓存等高并发方面的活,这样的话,出去面个高级开发应该不成问题,假以时日,估计升级到架构,应该也是时间和体力方面的问题。

转zi___老胡聊Java

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 阅读源码是一个很有益的练习,可以帮助你加深对技术的理解,并且有助于提高自己的编码能力。如果你是初学者,建议从开源项目的源码入手。 如何阅读源码? 1. 了解项目的背景和目的,这有助于你理解代码的设计思路和架构。 2. 阅读项目文档,了解项目的整体架构和各个模块之间的关系。 3. 从入口文件开始阅读,逐层递进,尽量不要跳过任何一行代码。 4. 当你遇到不理解的代码时,不要急着跳过去。停下来,思考并尝试用自己的语言将其解释出来。 5. 可以试着将代码改写一遍,这有助于你加深对代码的理解。 6. 如果你还是不理解,可以试着搜索引擎或者在线文档中查询相关知识。 7. 不要担心看不懂,只要坚持不懈,你的能力会逐渐提高。 希望这些建议对你有所帮助。加油! ### 回答2: 作为一名工作五年Java程序员,若你仍然没有读过源码,现在是时候开始阅读源码了。以下是一些建议,帮助你更好地进行源码阅读,即使你的英语水平一般。 1.选择适合你水平的源码:对于初次阅读源码,选择一些较小且熟悉的开源项目会更容易入手。例如,选择一些常用的Java开源库或框架,如Apache Commons、Hibernate等。这些项目都有较好的文档和社区支持,有助于你理解代码。 2.先了解整体架构:在开始阅读源码之前,花些时间了解整个项目的结构和设计思想。阅读项目的官方文档、架构图和技术文档等资料,帮助你更好地理解源码结构和逻辑。 3.阅读相关文档:源码通常会有相应的文档说明,包括注释、文档注解、设计文档等。先阅读这些文档,对代码的目的、参数、返回值等有一个大致了解,再进一步深入阅读代码。 4.使用工具辅助阅读:使用现成的工具可以帮助你更好地理解和阅读源码。例如,使用IDE(如IntelliJ IDEA或Eclipse)来查看类的继承关系、方法的调用链等。使用代码分析工具(如SonarQube或FindBugs)来检查代码质量和潜在的问题。 5.逐步迭代阅读:开始阅读源码时,不要试图一次搞懂所有代码,而是采取渐进的方式。从关键性的类或方法开始,分析其实现原理;然后逐步向外扩展,理解更多的代码逻辑。 6.借助社区和资源:和其他开发者交流,参与相关的讨论和问答。使用开源项目的邮件列表、论坛或聊天室等,向其他有经验的开发者请教,获取他们的建议和指导。 7.多练习和实践:阅读源码需要不断练习和实践。不仅要多读源码,还要自己写代码并加以实践,将所学知识应用到实际项目中。 总之,阅读源码是提升自己技术水平的重要途径。尽管你的英语水平一般,但通过以上建议和努力,相信你会逐渐掌握源码阅读的技巧,并提升自己的开发能力。 ### 回答3: 首先,读源码是提高自身编程能力和理解开源项目的重要方式之一。即使你的英语水平一般,以下是一些建议,帮助你开始阅读源码。 1. 确定阅读的目标:了解项目结构、学习算法或调试问题等,这样可以帮助你更有针对性地学习源码。 2. 选择适合你的项目:选择一个比较简单的、你熟悉的项目作为初始练习,例如一些常用的开源工具类库。这样有助于降低学习的难度和对英文文档的依赖。 3. 阅读文档和注释:尽量找到项目的官方文档和注释,了解项目的基本信息、API 使用方式、核心思想和设计模式等。甚至可以通过自动生成的 javadoc 进行参考。 4. 利用工具和资源:一些工具和资源可以帮助你阅读源码,例如源码阅读器(如 jGRASP、Eclipse、IntelliJ IDEA 等),在线文档翻译工具,或者Stack Overflow等开发者社区。 5. 逐步深入:从一个小的模块或类开始,找到入口方法并进行调试。跟踪变量和函数调用关系,逐步理解实现逻辑和数据流动。 6. 增加阅读量:多阅读优秀开源项目的源码,逐渐提高对编码风格、工程架构和设计模式的理解。 7. 参考他人的经验:阅读其他程序员对源码的分析、解读或评论,可以通过网络、博客、书籍等方式获取。 8. 及时求助:当遇到难以理解的地方或问题时,不要犹豫向相关开发者、Stack Overflow等寻求帮助。 9. 坚持和实践:源码的阅读需要坚持和实践,不断地挑战自己的理解和分析能力,同时将所学知识应用到自己的项目中。 总之,阅读源码是一个需要耐心和持续学习的过程。即使英语水平一般,通过勇敢地迎接挑战,并借助合适的工具和资源,你一定能够逐渐提升自己的阅读能力,并从中获得编程上的进步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值