当一般的程序员工作5年左右后,往往会遇到事业上的一个瓶颈期:能力上已经达到高级开发,工资比上不足比下有余,而且至少能在所在城市站稳脚跟。
不过根据行业现状,这类程序员再要向上提升,难度就不小了,具体表现为:不少人可能就在中小型公司间徘徊,工资或许有提升,但再也无法更高效地积累自己的经验和能力,或者就是,工作经验8年左右的程序员论能力和5年经验的没差多少。
其实,大多数程序员都很勤奋,无法百尺竿头更进一步的原因不是因为懒惰,而是不知道方法,本文就将分享这方面的内容。正文开始。-------------------------------------------------------------
1 在职业瓶颈期内的普遍表现,如果得过且过,或许就发展停滞了
得过且过类型的程序员这里就不说了,相信大家都不是。
不过我见到不少具有5年经验的程序员,他们都很勤奋,但他们在攀登事业更高峰时,或多或少地会有些迷失感。
下面举些例子:
1 小张当前处在一家规模不算大的公司里,也已经是高级开发了,也能在项目组里能独当一面,每天也很忙,总感觉在重复劳动,不知道后继该如何发展。
2 小李在一家外企,福利待遇也不算差,工作也不能算累,能自由安排的时间也不算少。在公司里干的活技术含量不算高,比如用的是纯Java+JDBC,架构大多也就Spring Cloud,并发量也不多,数据库是MySQL主从,看着一些技术大牛很风光,自己也想学,但技术点太多,往往学着学着就放弃了。
3 小王在一家互联网公司,每天工作压力很大,版本迭代很厉害,总感觉陷入了业务里,也不知道该如何进一步提升自己的能力,也不知道该进一步学哪些技能。
上述只是举例,对此,大家需要认真对待职业瓶颈期。
否则的话,或许会出现如下大家不愿意看到的结果。
1 过了快速进步期,个人发展就停滞不前了,比如在公司里,8年工作年限的程序员干的活和5年经验的差不多,而且也体现不出年限高的优势。
2 也能通过跳槽不断涨工资,但所在的公司规模始终不大,这里我无意歧视小公司,但大公司里程序员的眼界和格局普遍要比小公司的要好广阔。
3 我目前在上海,上海的生活压力也不算小,而且随着程序员的年龄增长,就得面临结婚买房照顾父母小孩的压力,如果持续2,3年发展停滞的话,生活可能就会比较艰辛。
2 大厂的高级开发和架构师一般得具备的功能
解决这个问题时,我们需要直接面对靶心。
比较直接但有效的解决方案是:提升自己的能力,在公司里挣更多的钱。再具体一点,大公司往往需要哪些方面的能力呢?本人最近几年工作的公司规模不算小,也接触了不少大厂的程序员,这里来说下我的体会。
1 对高级开发而言,大厂的基本要求是技能达标,即能完成项目组的任务,但就这点远远不够。
2 应该适当知道些配置部署方面的知识,比如能搭建一个Git平台管理代码,能用Jenkins或uDeploy工具搭建一个自动化部署平台,一旦项目部署到web服务器上有问题,高级开发还可以解决一些这方面的基本问题。
3 技术是为业务服务,一旦业务出现了问题,需要能及时通过看日志,快速定位和排查问题,这就要求会些基本的在linux上查看日志的命令,比如grep,less, vi等。
4 这点尤为重要,一般在公司里,每个人的工作都很忙,所以面对自己不熟悉的业务,从别人那边得到的帮助可能会很少,所以高级开发的学习能力一定得很强,一定得能通过查看代码或日志等方式,快速地熟悉各类业务和流程。
5 高级开发一般就需要能独当一面了,比如出现问题,高级开发就需要和需求方或测试方或其它组的人沟通,独立地解决问题,而不能事事再上报领导,请领导解决了。
而对于架构师,除了至少得有上述技能外,还得具备如下方面的技能。
1 不仅要保证系统的平稳运行,还需要找到系统系能上的痛点,比如性能上卡在哪里,或一旦当系统业务规模需要扩大,哪些当前的因素会成为瓶颈。
2 找到痛点后,需要能独立地设计出方案,这个方案可能就不是仅仅是代码或数据库级别的,往往是分布式架构级别,比如如何搭建负载均衡组件,如何搭建缓存等。
3 和高级开发相比,排查问题的级别需要进一步提升,比如对高级开发而言,可以通过debug代码来排查问题,但对架构师而言,就得通过debug现有的jar包来排查底层问题。举个例子吧,我最近就见到一位大牛通过debug Oracle JDBC的底层包,来排查数据类型不一致的问题。
4 一些分布式的组件,一定得非常熟悉,得熟悉到了解到组件里关键jar包的底层代码。这里再举个例子,比如对高级开发而言,可能了解到消息中间件的用法就行了,但我知道的一位资深架构师,能通过mq平台包的异常,一眼看出是哪个里面哪个jar包报的异常,比如是某个jar包里的无界队列过长导致OOM了,或者是哪个jar包引用的日志组件和其它jar包冲突了。
3 努力且方法得当,一切都有可能
我见过不少资质尚可,但因为感觉高级开发或架构师的标准太高从而自暴自弃的,不过,我也见过(以及听说过)不少同学通过逆袭,最终晋级到高级开发或架构师的水准。
1 小A,计算机大专,后来通过专升本和专业的软件培训,具备了从事软件开发的能力,第一家公司非常小。但他早上上班,晚上看书和看视频,还在网上租了个空间,自己实践Spring MVC,Spring Cloud,大数据以及分布式架构,经过3年努力,最终进了阿里,成为其中的高级开发。
2 小B是上海一家二本学校的计算机专业学生,之前做了销售等和软件无关的工作,从事软件行业时,已经是28岁了,我记得他第一份软件工作也是一家小公司,入职后他不断和我吐槽,说他和22岁的毕业生做的是相同的工作。
但他把这种压力当成了动力,也是不断学习不断实践。
经过不断试错,最终他找了一个比较好的方向,AI里的深度学习,然后经过面试,成功入职一下做数据分析的公司,目前薪资碾压同龄人。
案例讲完了,然后讲些能快速提升自己的方法:
1 神枪手是靠子弹练出来了,软件高手是靠踩坑积累起来了。所以在公司里,一旦有了问题,不管是自己的还是别人的,一定得总结,包括总结问题场景,总结排查问题的方法(如何看日志,以及看日志里的哪些要素),以及总结解决问题的方法(比如如何处理jar包冲突,如何通过分区等手段提升数据库查询的性能)。
以我自己的体会,我最近半年遇到的坑比之前3年的都多,但我确实感觉最近进步很快。靠实际解决问题是提升自己身价的最好办法,没有之一。
2 一定得锻炼在linux方面的基本功,包括打开日志,以及在日志里根据关键字的找到上下文,并排查问题的本事。技术只有和业务结合,才能产生价值,在业务点方面,排查问题是绕不过去的弯,我见过身价不同的高级开发,在这方面的能力绝对是不一样的。
3 完成本职工作外,一定得眼观六路耳听八方,在此基础上得迈开腿,多动嘴。
具体而言,有人到组里来寻求帮助时,可以尽量帮忙,哪怕这个问题最终没解决,自己至少也能通过观察别人如何解决,从而提升能力。又如,遇到测试开了bug,就得多和测试沟通,争取快速地重现和解决问题。这样一来二去的,自己分析处理问题的能力提升了不算,还能提升自己协调沟通的能力,一举两得。
4 学习的重要性就不说,这里说下学习的方法。第一还得见缝插针地学,第二,一定得通过看视频或书,系列地了解到这个方面的知识点,先面到点,别反过来。第三,一定得边学边实践,如果开发环境没有,就自己搭建。第四,一定得通过面试(未必要去)等手段检验自己的学习方向和成果,一旦出现偏差,得及时纠正。
我就见过不少头脑灵活的人,就不断学不断面试,这类人学习的效率要远比闭门造车的人要高。
总结下,快速提升自己的方法,第一靠练,第二靠学,第三靠(通过面试)检验。
虽然进阶没捷径,但如果效率高,也能缩短时间,下面给出个小窍门:到大厂实践。
我这里无意贬低小公司,不过相比之下,大厂里处理问题的格局会大些,而且问题的种类和难度也会多,根据我自己的体会,在大厂,尤其是版本迭代快的互联网公司,提升能力的速度是不可想象的。
不过这里问题又来了?如何进大厂?在我之前的博文里,有不少关于面试和写简历的文章,这些一定能帮助到大家。
4 分享下我见到的高效变现自己技能的方法
我们通过辛苦学习,通过不断加班,是为了提升自己的能力,但更是为通过变现能力挣到更多的钱。下面就列些大家感兴趣的话题:如何变现技能。
1 通过找到更好的工作,提升自己的工资。这是个不二法门。
给出些上海当前的薪资待遇:5年java后端,如果能力好,2.5w+一个月,8年的,3w的不是问题,10年+的4w都算少的,5w+都有可能,而且如果运气好,还有期权股份等因素。
有同学会说了,这是废话,技能高了自然工资就高,但我想说的是,很多大牛除了公司外,其它收入也非常可观。
2 可以用自己的技能,写博客,出书,录制视频做系列课,可以到外面培训学校讲课,甚至可以做收入更高的企业培训。
我有自知之明,我不算大牛,但我目前尚属勤奋。
所以最近不断在写博客,也出了书:,反正上述挣钱的渠道我都尝试过。
我的体会是:只要有能力,就可以打出名气,然后就可以通过同一份工作(比如写博文出书做讲课视频)挣多份钱,这样名气大了不说,还能提升挣钱的效率。
3 能力强了,再通过写书写博文等方式,就能在业务打出名气了。这样讲课或文章的单价就提升了。
这方面,最好是找个能包装自己的渠道,(比如网站或培训学校或开源组织),这样就能打出知名度,知名度有了,跳槽也好,出书也好,挣钱的速度就更快了。
4 以自己的能力和名气去认识更多的人,人脉关系一广,接项目或者合作什么的就都有可能了。
我见过这类大神,他们八面玲珑,到处接项目,然后自己做或外包出去,每月的收入非常可观。但我达不到这种地步,目前阶段还是在不断提升能力,靠技术吃饭。 非常希望在这方面有心得的大神来分享下经验。
5 本文总结,版权说明和求推荐
天道酬勤,靠自己的勤奋多少能换回些收获,但用对方法走对路,这点也很重要。本人最近接触了不少软件行业的朋友,也多次接到这方面的咨询请求,最近在这方面稍微有些体会,所以写下此文。
本文的初衷是为了分享,在字里行间也带了些具有可操作性的方法,而且是在周末利用休息时间写成,所以如有有错处,也请大家包涵,如果大家看到稍有可取之处,也请劳驾点击下面的“推荐按钮”,大家的推荐,是对我的最大帮助。
最后再次感谢大家看完本文。本文欢迎转载,转载时,请注明原文出处和作者。