手记

开发者的4个层级,你在哪一层?



这张图描绘了开发者的 4 个层级和不同层级大概的收入范围(图上标注的收入,以一线城市互联网行业为基准,非一线地区,请除以系数)。

4 个层级如下:

第1层:普通程序员

第2层:熟练开发者、高级开发工程师、技术组长

第3层:技术专家、架构师、一线经理

第4层:科学家、研究员、首席(资深)架构师、部门研发总监

今天的文章,我们先解释下层级划分,然后介绍是哪些差异造成了开发者的分层差距,最后说明一下怎样才能缩短跨越层级的时间。

开发者的 4 个层级

按我的理解,开发者的 4 个层级,可依次对应普通、熟练、优秀、卓越四个词。

1. 普通

普通开发者,能够使用一定的专项技术,完成别人分配的模块开发。在工作当中,他们很少有机会决定自己做什么和怎么做,通常是在他人指导和安排下编码实现特定的细分功能

当你还是一个普通开发者时,实际上处在体力化的代码打写阶段,很容易被替代。

如果你不能精进技术水平,三两年后就失去竞争力了——因为你的技能水平对不起你的工作年限,你把一年工作经验重复用了 N 年。

在这个阶段,收入一般就在 5000 ~ 20000 元 / 月,很难突破 20000 元 / 月。

同时,这个阶段的开发者,也很少有超过 30 岁的——因为超过 30 岁你还停留在这个阶段,基本上就混不下去了。(这个阶段会有大量的人退出,谋求转型……)

2. 熟练

一般的开发者,会在普通开发者这个阶段停留 3 ~ 5 年,然后就进阶为熟练开发者,能运用一组技能树,完成较为复杂的软件模块的开发工作。进入这个阶段的标识有两个:

1. 你可以做某个功能模块或子系统的软件设计工作;

2. 你可以分配任务给普通开发者。

到了熟练阶段,你才算是有一技之长,才称得上是靠技术吃饭(因为普通开发者越来越多,初阶的编码能力已经算不上一技之长了)。

有了一技之长,你的收入就能获得突破,拿 20000 ~ 40000 元的月薪。

你可能会在这个阶段停留 3 ~ 5 年。

这个阶段,会有大部分人开始怀疑程序人生的意义,一方面对开发工作很熟悉了,也没激情了;另一方面,又很难进入下一阶段获得突破,于是倦怠、空虚、无聊、意义匮乏等状况纷至沓来。

在这个三十而立的年纪,很多人会考虑转型,一部分人因为看不到其它的机会,又难以放弃开发技能的积累和高薪,在犹犹豫豫中蹉跎岁月;

另一部分人未雨绸缪,在日常的开发工作中,已经发展了支线剧情,转型比较顺利。

如果你转型遇到困难,请到 在行App 内搜索“安晓辉”,约我广受好评的话题:聊聊程序员职业规划那些事儿。也可以在我的读者圈进行提问。

在熟练开发者这个阶段,有一小部分人,能够在某个技术栈上持续精进,凸显出优势,靠这种技术优势,成为高级开发者;

另有一小部分人,一手技术,一手业务,靠交叉优势,也成为了高级开发者。在这两类高级开发者中,又会诞生出 Team Leader 这种角色。

成为上面这部分人的典型标志就是:你被很多人需要,有各种疑难问题需要你参与或主持解决。

3. 优秀

拥有技术优势的高级开发者,和拥有技术 + 业务组合优势的高级开发者,他们当中有一部分人会晋级为技术专家或架构师。

Team Leader 可能会晋级为一线经理(技术经理、项目经理、研发经理)。这算是开发者的第三个层级。

进入这个层级的开发者通常会:带人,带项目,安排别人做事情,在重要的技术决策上拥有话语权

到了这个阶段,你的年龄应该在 30 ~ 35 岁,年收入会突破 50 万。

假如你过了 35 岁,还没到第三阶段,嗯,我猜,要么你待错了环境错失了进阶的机会,要么你主动放弃了职场成长,觉得拿个 2、3 万月薪过过小日子已经很舒服了。

处在这个阶段的朋友,都是独挡一面的优秀人才。已经超越了具体的技术能力,很好的建立了思维框架,解决问题的能力很强。

所以你会看到,很多人能够迅速在非开发领域取得成绩。这就是大前研一所说的“即战力”。

有的人能在这个阶段待上十年八年,直到获得突破,进入第 4 阶段;还有的人,虽然不能进入第 4 阶段,但也想留在技术岗位上维持优势轻松赚钱,然后寄情别处,发展其他兴趣爱好,谋求和谐平衡的生活;

另有一部分人,在这个阶段待上一两年就转型了——因为他们想有新的突破但往第 4 个阶段走又实在是比较困难。

4. 卓越

通常你只能在大公司中看到处于第 4 个阶段的开发者。

很多小公司的技术领导者(包括首席架构师、资深架构师、CTO 等),实际上多数是从第三阶段横跨出来的,利用相对优势(脑补吧)获得了职能和头衔上的提升。(汗颜,我就干过这事儿)

这个层级的朋友们,他们在做什么事情,我没有切身体会,先放这里,回头我会访谈一些朋友,弄明白。

谈收入的话,这个层级的开发者,年薪往往在 80 万以上,过百万的不在少数。除了薪酬福利,他们往往还持有股票。

6 种开发者之间的差距

我们把开发者分成了四个层次:

1. 普通开发者

2. 熟练开发者、高级开发工程师、技术组长

3. 技术专家、架构师、一线经理

4. 科学家、研究员、首席(资深)架构师、部门研发总监

在这四个层次里,有技术和管理两条常见的职业发展路径,我们这个系列文章,研究的是技术通道,关注的是开发者如何修炼技术不断进阶,对应到开发者分层上,是这样的:

1. 普通开发者

2. 熟练开发者、高级开发工程师

3. 技术专家、架构师

4. 科学家、研究员、首席(资深)架构师

那么,从技术视角看,是什么造成了同时起步的开发者最终站在了不同的层次上呢?有六个方面:

知识,技能,动机,行动,习惯,环境。

知识差异

前端小白可能不知道在网页上显示一个图片用什么组件、什么标签,而熟练的前端开发者一定知道,并且能噼啪几下敲出来。

这是知识储备的差距。

知识和信息是你分析问题时的大变量,当你的知识储备量很小时,你往往是两眼一抹黑,不知道从何说起。

所以,知识差距,是不同层次的开发者之间最显著的差距。

技能差异

一个普通的前端开发者,刚刚入门,会用 HTML 、 JavaScript 、 CSS 等完成静态页面,现在有一个新的项目启动,你让他负责这个项目前端模块的架构和设计,他大概做不出来。

因为他还不具备胜任这类工作的架构能力、设计能力以及抽象能力,缺乏相应的技能。当你没有相关技能时,就不具备搞定复杂问题的基础条件。

不同层次的开发者之间,在技能层面存在显著差异,层级高的人拥有一个“工具房”,而层级低的开发者,手里往往只有一把螺丝刀。

动机差异

如果你留意观察身边的同事,就会发现:

  • 有的人积极主动,什么都愿意做,做什么都津津有味,都能快速学习、迅速行动并做出符合预期的结果;

  • 有的人你每次安排任务给他,就算是他可以搞定的,他也推三阻四,不情不愿;

这就是动机差距。

当你一个人知道如何去做,但是却选择不做一件事时,往往是缺乏做这件事的动机:当你不想做一件事时,总是能够找到千万个理由来拒绝。

通常某个开发者不愿意做某件事,是因为:

  • 他没有真正认同团队的目标

  • 他觉得团队的目标没什么意义

  • 焦虑或担忧,觉得这事儿做起来有难度,或者做了也不指定有好结果

  • 心烦意乱,比如最近丈母娘催买房催得厉害

  • 单纯的不想努力,就是要在这里混着

  • ……

不管哪种原因,你不做一件事,就少一次磨练和收获的机会,久而久之,别人在行动中成长起来了,你还在原地踏步。

行动差异

两个人都在不断做事,结果仍然可能不同:有的人三年精通某个技术栈,成为团队内的核心骨干;而有人的,做开发五年还只能写写静态页面。

你是遵循一定的方法和流程来开发,比如先完成设计、编写测试代码、再编码、跑单元测试,还是拿到需求就立马开始编码、边写边发现代码不符合需求不断推倒重来……

你是每次都给自己设定目标,希望这次任务用到的知识和技术点不同于上次,希望这次的代码设计和上次不同,还是根本不管这些,先写,能 Run ,完成任务交差……

你是每次项目(或版本)结束都回顾、反思、更新自己的知识图谱,还是项目一发布就完事大吉打游戏刷新闻?

这都些做事方法上的差异,会:

  • 让同一件事有不同的结果

  • 让做同样事情的人有不同的收获

一个团队在 Web 音视频会议项目中用到了 WebRTC,有的开发者会给自己定一个学习目标,排一个计划,逐步去了解 RTP/RTCP 、 ffmpeg 、 NetEQ 、 OpenH264 、 STUN 、 TURN 、 ICE 、 VP8 、 VP9  ……,通过持续的学习和时间,让自己对 WebRTC 有更深入的了解。

这就是持续行动:不以项目结束为结束,而是持续地去研究开发中用到的技术框架,丰富自己在该技术的知识结构。

这样的行为,会让你的知识体系像滚雪球一样越滚越大,会让你和别人的知识差距越来越大,会给你带来越来越多的优势。

知识、技能上的差距,是由行动上的差距导致的。

习惯差异

有的开发者,每天早上都会思考今天要做的事情,每天晚上都回顾今天完成了什么事情、什么事情没完成、什么事情还没开始做,早计划晚回顾;

有的开发者每天到了单位,开机,刷新闻,来两把游戏,然后喝茶,找人聊天,下班了吃个饭,打两局游戏……

有的开发者,每周都回顾总结,写周报,发给直属上司;有的开发者,经理强调一百遍“每周五要发周报”也充耳不闻……

有的开发者,遇见测试提 Bug ,就高叫“不可能”;有的开发者,则会说“我看看”……

有的开发者,遇见困难的问题或者难搞的醒目,会说“让我试试”;有的开发者遇见难题,两手一摊,“这太难了,我搞不定”……

在做项目时,有的开发者会把自己手上的任务按重要性、优先级排序,先做优先级高的、难度大的;有的开发者会每次都挑难度低的事情先做……

积行成习,积习成性,积性成命。

好的习惯,大概率产生好的结果;不良习惯,大概率导致不如意的结果。

你的将来,由你的习惯决定。所以,请看看自己身上,有哪些习惯会让自己积累越来越多的能力,巩固它们;有哪些习惯会让自己越来越 low ,弱化它们,扬弃它们。

环境差异

开发者 D :“我想用 Vue.js 来做这个项目。”

经理 M :“引入新技术风险太大,出了问题你负责?先用 jQuery 做出来再说。”

在这样的环境里,你很难去尝试、学习新技术。

开发者 D :“我需要一台 MAC 电脑,这样才能为 iOS 开发 App 。”

经理 M :“太贵了,先装个黑苹果试试。”

在这样的环境里,你没有足够的资源做实情。

开发者 D1 :“D2 ,我遇到了一个问题,搞了一天了,毫无头绪,你对 CEF 最熟,能帮我看看吗?”

开发者 D2 :“我忙得很,你再搞搞。”

D1 接着找 D3 :“D3 ,我遇到了一个问题,搞了一天了,毫无头绪,想和你讨论下思路。”

D3 :“哎呀你那块我不懂,你去找 D2 问问。”

D1 接着找经理 M :“经理,我遇到了一个问题——”

M :“自己搞定!”

在这样的环境里,没有人愿意支持你,没有人愿意和你讨论技术问题,你貌似在一个团队里,却只能孤军奋战。

开发者 D :“经理,这个问题,实在搞不定,咱们公司还有谁熟悉这块?”

经理:“我们一共四个开发,你看看谁熟悉?”

在这样的环境,没有牛人指点你。

环境会在某种程度上塑造人,你会成为你身边人的平均数。你在一个技术氛围浓厚、优秀开发者众多的团队里,就有大概率更快地成长。

环境是可以选择的:假如你不幸进了处于衰退期的行业,可以转身去朝阳行业;你进了无所事事的、靠关系拿订单的传统软件企业,可以考虑去互联网领域的快节奏单位;你所在的项目组没什么技术氛围,你可以离开,找一个崇尚技术的团队……


程序员跨越式成长指南

个人要想从普通程序员进阶为熟练开发者,从熟练开发者变身为技术专家或架构师,需要用正确的方法来修炼。

我的GitChat达人课——程序员跨越式成长指南,会提供一些方法、工具、思维、经验,帮助你正确的行动,养成良好的习惯,建立有价值的知识体系和技能图谱,使得你在开发的道路上不断进阶,成为那个你想要的、优秀的自己。



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