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

server/2024/10/9 17:27:57/

本科一般是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


http://www.ppmy.cn/server/44678.html

相关文章

Codeforces Global Round 17 C. Keshi Is Throwing a Party 二分查找

Keshi Is Throwing a Party 题目描述 Keshi is throwing a party and he wants everybody in the party to be happy. He has n n n friends. His i i i-th friend has i i i dollars. If you invite the i i i-th friend to the party, he will be happy only if at m…

Redis常见基本类型(5)-List, Set

List 命令小结 命令及解释时间复杂度lpush/rpush key value[key value...](向右/左端插入元素)O(k), k是元素个数linsert key before | after pivot value(在某个坐标之前/右插入元素)O(n), n是pivot距离头尾的距离lrange start end(获取从start到end部分的元素)O(s n): s是…

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测 请问如果说到电纸书,你的认知还只是Kindle吗?然而遗憾的是,Kindle亦是过去,智能才是未来。 哈喽小伙伴们好,我是Stark-C~&#x…

赶紧收藏!2024 年最常见 20道 Redis面试题(七)

上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(六)-CSDN博客 十三、Redis如何做内存优化? Redis是一个内存中的数据存储系统,因此内存优化对于提高性能和降低成本至关重要。以下是一些Redis内存优…

研二学妹面试字节,竟倒在了ThreadLocal上,这是不要应届生还是不要女生啊?

一、写在开头 今天和一个之前研二的学妹聊天,聊及她上周面试字节的情况,着实感受到了Java后端现在找工作的压力啊,记得在18,19年的时候,研究生计算机专业的学生,背背八股文找个Java开发工作毫无问题&#x…

【经验分享】可视化的项目管理,轻松解决资源冲突和协作困难

在数字化时代,高效协同逐步成为提升组织效能的重要着力点,同时也是企业保持竞争力、实现持续发展的关键要素。一方面可以打破部门壁垒,促进信息流通,从而提升整体工作效率;另一方面还能帮助企业优化资源配置和管理流程…

【CALayer-CALayer的基本属性 Objective-C语言】

一、接下来,我们来说这个Layer啊, 1.首先,Layer能接触到的,就是我们之前说截图啊,就是我们self.view里面,有一个layer属性, [self.view.layer renderInContext:(CGContextRef t)]; 那个里面,有一个layer属性,然后呢,是CALayer类型的, 接下来,我们就来学习一…

5月28日,每日信息差

第一、微信推出青少年模式,包含时长限制、宵禁能力、监护人授权功能、消费限额与访问限制、青少年内容分级等 4 项特色功能,旨在更好地保护青少年用户的使用安全与健康,助力青少年网络环境的优化 第二、百度贴吧存在公开买卖孩子的行为&…