手记

多年经验的大厂程序员,如何突破技术瓶颈?

了解。

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

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

大厂通病: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.同一领域,增强工作压力,这是深度的体现。

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

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

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

原文出处

0人推荐
随时随地看视频
慕课网APP