本人最近和不少小公司的程序员打交道。经过和他们的深入交流,我感受到了不少小公司程序员的现状,由此深深地感叹,可能真有不少小公司的程序员未必能干到30岁,甚至,一些技术一般态度又不好的程序员,可能还未必能干到28岁。
1 能踏实做好增删改查的程序员,就算能力达标
我去我朋友开的一家软件坐了坐,顺带近距离观察了他们java程序员的开发日常,首先说明,我接触到的程序员不是才入职,而是普遍有2到3年工作经验。他们的开发团队是一个项目组长外带10多号人做个java方面的维护项目,用到了spring boot。
其中所谓技术好的程序员,是能根据现有的业务照抄代码,编写新业务功能。编写过程中,如果遇到不熟悉的api,还能上网根据功能查,比如要输出指定的格式,那就会查下然后用Calander等类实现。如果写代码时遇到一些数据库问题或基本的问题,还能把问题关键字放到网上查,并找到对应的解决方法。
在此基础上,如果遇到有bug,还能主动解决,遇到活还不退缩,也就是说所谓的技术好外加态度好,这种人已经算是不可多得了,至于熟悉maven或git等基本管理工具,那更是能算技术顶梁柱了。在这个团队里,不少做java后端的,而且有2年开发经验,是属于无法解决实际问题的。比如无法通过debug排查问题,遇到一些JPA方面的问题,或数据源配置问题,根本不知道如何查。
而他们的项目组长,更多的职责是管进度,同时用最简单的方法把系统发布到网上,并做简单的数据库等方面的配置管理。比如就直接用mvn命令打包,用复制粘贴的方式把jar包放到linux上,遇到数据库性能问题,还能连到linux上用命令建mysql的索引。不过,就是这样的技术,用来管理他们公司的项目,也绰绰有余了。
2 除了业务知识外,这些程序员还会什么?
我朋友所在公司里的程序员天天都在创造价值,所开发和维护的项目还真值不少钱,他们每天也不能算闲。但除却哪些摸鱼的程序员,那些态度积极的程序员技术上掌握了哪些技能?
1 业务知识点,比如某个业务流程该怎么做,中间该从哪里获取数据,该返回什么。这些业务可能是这批程序员平时接触最多的所谓技能,而公司也是凭借“能正确开发业务”来考核程序员,但这些只能算业务知识,不算技术。
2 用Spring boot开发业务的技能,这倒算,不过用Spring boot外带相关组件开发业务的技能太廉价,哪怕是零基础的用1个月就能会,而且这种零基础的程序员进入公司3个月后就能熟悉各种业务,也能用Spring boot开发各种功能,所以只掌握这些技能的程序员太多了。
3 能分析和排查问题,比如出现了空指针,能通过debug找到问题,或者出了jpa的错误提示,能把这句提示放网上找,然后再根据提示修改若干代码和配置,从而解决问题,不过这种技能太杂,以后通过面试跳槽时,无法通过这类技能来展示自己的能力。
4 所谓的项目管理能力,比如会用Maven和Git等,但这些技能可能也就停留在“会用”的层面。
更值得感叹的是,我观察下来,这家公司的程序员,有不少是摸鱼的,干活仅限于完成功能不出错,未必还会再去关心其他还谈不上值钱的技术和项目开发的技能。
3 高级程序员和架构师还需要哪些方面的能力?
程序员如果干到28或30岁,不能仅停留在只会做增删改查业务的初级阶段,因为如果单凭这些能力,会很轻易地被应届生,甚至是培训班学员替换。
如果站在老板的角度,年轻人肯加班,而且更容易被所谓的情怀等洗脑,工资还给得低,相比之下,28岁或30岁的程序员谈不上是老油子,但如果干的还是和年轻人一样的活,那老板很有可能要年轻人。
这里姑且不说大厂java架构师的技术要求,也不说大厂高级开发所需要的能力,就仅仅说下一般公司对高级程序员的需求。
1 能熟悉Spring Boot的相关技能,比如jpa,aop,ioc,restful,junit等,哪怕不熟悉,也应当能在短时间(3天内)内熟悉。
2 熟悉基本的数据库方面的性能调优,能解决单机版数据库方面的问题,比如复杂sql,索引等方面的问题。
3 能在linux上看日志,并能通过日志,解决大多数的单机版(非分布式组件方面)问题。
4 能熟悉Redis,Dubbo等分布式组件的用法,至少会api,如果可以,还应当能用这些api开发基本的高并发应用。
5 其他单机版的问题,比如api的调用或问题的排查,哪怕之前没做过,也应当能通过查网上的资料很快解决。
顺带再说下大厂对高级开发乃至架构师的要求。
1 熟悉各种分布式组件的配置方法和用法,能熟练使用分布式组件开发各种高并发需求,并能熟悉限流熔断等技术。
2 熟悉软件发布部署上线的流程,比如搭建mysql环境,搭建redis组件,甚至会docker和k8s。
3 能通过日志,排查并解决OOM,数据库性能等高级问题,凡是高级开发无法解决的问题,架构师都应该能解决。
4 可以想象初级程序员在30岁时的处境
如果只会初级的增删改查技能,在27,8岁之前找工作应该没问题,毕竟当下有太多的软件公司,初级开发的岗位也应该有不少。
但有3到5年开发经验的java程序员应当需要升级到高级,也就是说,如果在27或28岁,依然只会初级开发技能的话,高级开发的面试应该过不了,甚至面试中提到的一些技术连听都没听过。如下给出些问高级开发问题。
1 你们项目用哪些组件应对高并发?怎么解决限流熔断等问题?
2 Redis集群,或Dubbo集群你用过没?如果没用过,你是怎么解决redis穿透,或dubbo优雅停机等方面的问题?
3 你是怎么排查项目中的OOM和数据库性能问题的?在项目中怎么监控性能的?
要知道,对于我初级开发来说,面试前背java八股文还有些用,但对于Java高级开发来说,只会背八股文,面试一定过不了。
所以对这些在28岁甚至30岁还在做java初级开发的程序员来说,有可能还能通过跳槽涨工资,但由于无法升级到高级开发,在公司里的处境可能就很尴尬了,因为能干的活年轻人都能干,而且人家还能加班。这样的话,遇到公司运营有问题,还真可能被优化。而且被优化后,甚至有可能连面试机会都没。
5 大龄尚在初级阶段的程序员多吗?
我只凭推测,但这部分的程序员数量应该不少。
1 不少公司可能更多注重业务,在项目开发环境中无法提供分布式等值钱技术的实践机会,这就导致不少程序员就认为,开发项目只需要用到一些比较初级的技术。没有机会实践高级技术,提升也就无从谈起了。
2 不少程序员跳槽时可能更多关心薪资,未必会关心公司所用的技术,所以很有可能进入新公司后,薪资有涨,管的人也变多,但用的还是老一套技术。
3 更重要的是,为了能找到能提供值钱技术实践机会的公司,先得在面试中证明相关技术的项目经验,要做到这点不容易。
4 况且,不少程序员虽然身处小公司,但加班程度未必比大厂少,往往是忙了一天后,看似很充实,也确实挣到了钱,但哪怕是日积月累,每天干的活都是重复劳动,提升也就无从谈起了。
所以,我在我朋友公司看到的一些程序员的状况,可能就未必是孤例了。不能说大多数小公司的程序员都这样,但像这样的程序员还真未必在少数。
6 人往高处走,程序员尤其应警惕
比起其他行当,程序员确实能有用加班换取高薪的机会,但可以这样说,程序员确实是一个吃青春饭的行当。
不说其他,就看看每年毕业的应届计算机专业的毕业生,再看一些大厂的培训班输出程序员的数量,就足以让大多数程序员警惕。
不过天无绝人之路,我本身最近,也帮了不少零基础程序员入行,也帮了java不少初级开发成功升级,再看看一些大厂也在天天招人,这足以说明,哪怕当前身处小公司,哪怕当前技术能力一般,程序员应当也有机会不断升级,或者能通过努力进大厂。我今天也是为大家准备了一份阿里P8手写的内部Java核心开发成长手册内容涵盖p5-p8技术栈,非常全面,希望这份资料能对那些想晋升涨薪的朋友有一些帮助。下面我就为大家展示这份资料
由于篇幅限制,只能截图·展示这份资料,完整的pdf已经准备好需要的朋友麻烦点赞关注支持一下,私信发送“Java”即可免费获取
JVM
image
Java集合
多线程并发
由于篇幅限制,只能截图·展示这份资料,完整的pdf已经准备好需要的朋友麻烦点赞关注支持一下,私信发送“Java”即可免费获取
Java基础
Spring原理
Netty和RPC
网络
Kafka
RabbitMQ
image
image
image
数据库
image.png
由于篇幅限制,只能截图·展示这份资料,完整的pdf已经准备好需要的朋友麻烦点赞关注支持一下,私信发送“Java”即可免费获取
一致性算法
image.png
JAVA算法
数据结构
Hadoop
由于篇幅限制,只能截图·展示这份资料,完整的pdf已经准备好需要的朋友麻烦点赞关注支持一下,私信发送“Java”即可免费获取