有 3 年经验的大厂程序员,遭遇技术瓶颈该怎么办?

3 年经验的大厂程序员,是 HR 眼中的香饽饽,本应在招聘市场上受到追捧,然而,最近我发现一名履历不错的程序员,跳槽时未能通过技术面,此反常结果令我感到疑惑。

在与他交谈后,我又与多名相似履历的程序员进行沟通,发现不少 3 年工作经验的大厂程序员,会因技术瓶颈陷入职业困境中。

观察数名程序员所陈述的焦虑表现无非是:失去了主动学习的热情,不再刻苦钻研技术,长时间消息闭塞,对新技术、新领域不了解。

他们处在自信与焦虑的挣扎点,一方面对现有工作得心应手,另一方面又找不到技术和职场的突破口。当程序员们技术处在瓶颈期时,自然会恐慌:无论资本处在狂热还是寒冬,无法成长的人,注定是竞争中的牺牲品。

我认为,他们患上了「大厂通病」。

大厂通病:3 年时遇见技术瓶颈

技术瓶颈的外在表现,往往源于内因。根据候选人们的表述,无法提升的内因如下:

1)成为熟练工种后,不再尝试挑战

2)大厂加班过多导致缺乏个人思考时间

3)精力过于分散,无法集中精力做编程

然而,细究所谓「大厂通病」,我们难以认同这些「内因」,它们更像是借口,也形成悖论:熟练工种会认为工作无压力,真正觉得工作轻松的人,会常无效加班、精力易分散吗?

让我们分别分析「内因」背后的「借口」是什么。

借口一 : 成为熟练工种后,不再尝试挑战

很多出现技术瓶颈的大厂程序员表示:他们技术提升最快速都在工作第一年,会花费大量时间钻研与学习。理由无非有二:1. 刚毕业具有冲劲和好奇心 2. 工作对于新人难度大,会在磨练中成长。

当技能逐渐熟练,解决工作内容显得得心应手时,他们会失去好奇心,失去压迫感,从而满足现状:放低自身要求,认为编程技术在满足开发软件需求情况下,编出来就行,如果要达到更苛刻标准,纯看上司要求,或自身兴趣,无奈他们已然没了兴趣。

拆穿借口:熟练是伪装外皮,无危机感、无上升意识是本质。他们最大问题在于:技术仍停留在一两年前,没有所谓 3 年工作经验,错将重复性操作当作技能经验。

借口二 :大厂加班过多导致缺乏个人思考时间

一名 4 年工作经验的 Java 候选人,正在 100offer 看机会,如今有份 A 厂的 offer 摆在他面前,leader 虽认可他的技术基础能力和业务理解能力,但仍在观望中,offer 还未给到我们的候选人,深究原因,令人深思——

A 厂目前在布局大数据,需要大量人才,在缺少 Scala 工程师的前提下,A 厂会需要 Java 工程师来做大数据工作。该候选人表示:首先,这与他现在做的 SDN 开发有太大出入,其次,他虽然有 4 年 Java 经验,但大厂通常爱加班,导致他几乎没有个人时间,从而渐渐失去了解新领域、新技术的精力和兴趣,对于大数据崛起也只是略有耳闻。

认为加班使得个人成长停滞不前的人不止他一个人,骇人听闻的996、周末轮班工作等制度,会让他们精力过多被消耗,对待工作稍显应付,回到家中也无暇思考。

拆穿借口:不关注外界信息和加班多无必然联系,并且,问题在于,他们自身成长速度完全取决于其工作内容的强度和难度,当工龄久了,工作只有加班强度,没有技术难度,成长便会停滞。

借口三 :精力过于分散,无法集中精力做编程

某 F 轮后 O2O 大厂的 Java 候选人,正在准备寻求新机会,问他为何选择离开前景大好的公司时,他和我们描述了两个原因。

第一,该公司盈利重点处在转型期,餐饮、金融、物流都打算发力,战略转型使得各部门资源都不足,打法显得混乱,甚至有争夺资源产生内耗的现象。身为基层技术 leader 的他,渐渐感觉精力过于消耗。

第二,新任领导的管理风格更让他不满,作为中间层的技术管理,大部分时间和精力都浪费在了上下级的沟通中,至于技术,很早以前就处于停滞不前的状态了。

不止他一人有以上烦恼,3 年工作经验的程序员,不会再只做编程,还会参与到软件设计、项目管理、与用户或领导沟通中,精力难以集中。如果遇上公司转型期或动荡期,更会分身乏力,导致无论是主动学习还是钻研技术上,都失去热情。

拆穿借口:不需要沟通的技术人员根本不存在,合理利用精力用于沟通,是用技术解决问题的快捷方式之一。

我并不是否认以上三点「大厂通病」不存在,的确是多数3年工作经验大厂程序员的共有困惑,但是,撕下借口的伪装,从逼迫自己改变开始,才是正解。

如何解决「大厂通病」所带来的技术瓶颈?

扔掉借口从改变环境做起,跳槽 or 转岗?无论怎么选,都是逼迫自己改变的开始,陷在悖论中倒不如去打破僵局,打破的方法,我从以下两点来深究。

1. 熟练工?加班多?是你太舒适了

我近期重点跟进了一名架构师候选人,他6年工作经验、跳槽前年薪64万、持15万股票,纵观他职业发展路径,除去第一家公司,后三家公司皆为大厂,他在3年工作经验时,未遇见所谓的「大厂通病」,更没有技术瓶颈。

首先,来看该候选人在 3 年经验的工作内容:

1)承担工作为数据团队前端开发(各种 js 编写,熟悉 jquery,extjs 等常用框架及原生 js)

2)报表工具制作(主要适用技术是 extjs / finereport / jfreechart)

3)日常分析任务(mapreduce / hive)

4)调度系统的维护和某项目开发(前端+后端 jsp+struts2+hbase+redis+mysql+hadoop)

5)分析团队的定时任务的管理

对 3 年工作经验的程序员来说,以上工作并不轻松。他在接受 100offer 采访时表明,他会先注重个人的输入,每日阅读两小时技术书籍,每周都研究源码,之后,他更看重他的有效工作,即具有创造性的输出,重复性代码是不会带来实际性成长。

在他发现开始做大量重复性代码、无法通过工作内容上升技术时,他选择了跳槽。

跳槽后,他在中间件团队工作,中间件是独立系统软件,分布式应用软件能借助该软件在不同技术间共享资源,他认为那是他「创造性输出」的最好时机,他负责了基础组件开发,主要是可靠消息系统 qmq 和异步 redis 客户端,参与研发任务调度系统,做了类鹰眼的 trace 系统、dubbo 服务化工程、监控系统等。

通过他的案例,能够察觉:实践始终是源于理论又高于理论的,不难发现,所谓「熟练工」、「加班多」仅是个人借口,要做的,是远离舒适区,逼迫自己成长。

首先,请发挥主观能动性,做出改变。我给出以下两点建议——

1)多次检阅基础知识,将有效技能掌握牢固,把各类基础知识串联成完整体系。技术不可满足现状,懂得把编程技术从功能实现转向软件构架、参数化设计等高阶方面,在共享、通用、标准化方面有所建树。

2)当你觉得自己了不起时,多看源码,多研究源码,不少所谓 3 年经验的程序员,根本没达到熟练程度,研究源码,会发现太多不足。Java 学得精深的人,可以横向去了解 Scala,看看Java 有哪些局限;或者纵向的去深入钻研底层的 JVM,如果在学习新技能时感到吃力,你便知:你并未了解自己,你实力仍处于普通阶段。

如果你缺乏自制力,再考虑换离环境。回想你为何初入职场时能快速提升?是因为新手期的你确实在技术上缺乏太多,所以愿意在工作中快速学习。同理,当你转岗或跳槽后,会面临新的挑战,从而逼迫自身成长。

2.精力被分散?你得先弄清楚技术究竟是干嘛的

技术是用来解决问题的。很多大厂程序员都认为唯有技术才是实力的体现,这是很大的误区。当你不懂与同事沟通、不懂如何推进工作,你磨练的技术也解决不了问题。

编程技术只占到工作能力的 40%,客观分析自己劣势所在,有时并不是外界分散了你的精力,导致无法专心技术,而是自身根本没有理解技术和工作的关系。

首先,从主观上解决沟通所带来的精力分散问题。

1)时间管理。沟通是有技巧的,学会分配沟通时间,无论是与上司、同事、下级还是用户,都在沟通前预约好沟通时间,在不是真正紧急的情况下,他人打断你的工作思路,你可以合理表示拒绝,选择预约其它时间交流。

2)表达清楚更重要。《计算机程序的结构与解释》一书说:程序写出来是给人看的,附带能在机器上运行。写代码其实是书面沟通的另一种表现方式。技术成长到一定程度,多数人都会到达无法增长的天花板区域,决定初级程序员和优秀程序员的关键点,不是他们会多少类编程语言,也不是他们 C++、Go、PHP 用得更厉害,而是表达清楚想法,让他人协助他高质量完成工作内容,通过思路完整的技术文档,让其他程序员能读懂,通过逻辑清晰的沟通,让产品、设计也能够接受,不必让代码重新再写一遍。

附赠一句卡耐基的名言:一个人的成功,约有 15% 取决于知识和技能,85% 取决于沟通——发表自己意见的能力和激发他人热忱的能力。

其次,如果完全是外界的原因,你的选择依旧是:换环境。

当公司不能让你的能力提升时,离开是好的选择,优秀的公司自然会让员工也随之提升,实现个人价值,才会进一步实现共同价值。

换环境无非是转岗或者跳槽。如果你在公司内部转岗,会给你带来技术广度,在工作中主动吸收新技能的知识。选择跳槽则有两个可能性:1.换领域,依旧是增加广度。2.同一领域,增强工作压力,这是深度的体现。

我给出一点建议:同一领域下的深耕经营,会有更远发展,即便是细分领域,也不会影响你在技术上的知识广度。

最后

「大厂通病」给程序员所带来的技术瓶颈必然存在,但面对问题时,更多人是拿所谓「通病」当挡箭牌,缺乏主观能动性。

如果做不到主动改变,那么,患了「大厂通病」的程序员们,你该考虑考虑转岗或跳槽,逼迫自己成长,也是一剂良药。

我自己是一名从事了5年前端的老程序员,辞职目前在做讲师,整理了一份现在把架构师必须具备的一些技术总结出来一套思维导图和录制了一些相关视频,分享给大家,供大家参考。

需要相关资料欢迎加QQ群:978730098,一起学习,相互讨论。

1. 架构师基础

4.1. JVM性能调优

4.2. Java程序性能优化

4.3. Tomcat

4.4. 并发编程进阶

4.5. Mysql

4.6. 高性能Netty框架

4.7. Linux基础与进阶

2. 开源框架

3.1. spring5概述

3.2. Spring5 Framework体系结构

3.3. Spring5环境搭建

3.4. IOC源码解析

3.5. AOP源码解析

3.6. Spring MVC

3.7. Mybatis

3. 高性能架构

1.1. 分布式架构思维

1.2. Zookeeper分布式环境指挥官

1.3. Nginx高并发分流进阶实战

1.4. ActiveMq消息中间件

1.5. RabbitMq消息中间件

1.6. Kafka百万级吞实战

1.7. Memcached进阶实战

1.8. Redis高性能缓存数据库

1.9. MongoDB进阶实战

1.10. 高性能缓存开发实战

1.11. Mysql高性能存储实战

1.12. FastDFS分布式文件存储实战

1.13. 高并发场景分布式解决方案实战

4. 微服务架构

2.1. 服务的前世今生

2.2. 基于分布式思想下的RPC解决方案

2.3. Dubbo应用及源码解读

2.4. SpringBoot

2.5. SpringCloud应用及源码解读

2.6. Docker虚拟化技术

5. 团队协作开发

5.1. Git

5.2. Maven

5.3. Jenkins

5.4. Sonar

6. B2C商城项目

6.1. 系统设计

6.2. 用户管理子系统

6.3. 商品管理子系统

6.4. 搜索子系统

6.5. 订单子系统

6.6. 支付系统

6.7. 分布式调度系统

6.8. 后台系统

对Java后端技术,对架构技术感兴趣的朋友,欢迎加QQ群:978730098,一起学习,相互讨论。

群内已经有小伙伴将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。

你可能感兴趣的:(有 3 年经验的大厂程序员,遭遇技术瓶颈该怎么办?)