先看一张图——“开发者山行图”:

架构师和研发人员的去呗 架构师和研发经理_开发工程师

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

4 个层级如下:

第1层:普通程序员
           第2层:熟练开发者、高级开发工程师、技术组长
           第3层:技术专家、架构师、一线经理
           第4层:科学家、研究员、首席(资深)架构师、部门研发总监
今天的文章,我们先解释下层级划分,然后介绍是哪些差异造成了开发者的分层差距,最后说明一下我们的课程可以解决什么问题。

开发者的 4 个层级

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

【1】 普通

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

当你还是一个普通开发者时,实际上处在体力化的代码打写阶段,很容易被替代。如果你不能精进技术水平,三两年后就失去竞争力了——因为你的技能水平对不起你的工作年限,你把一年工作经验重复用了 N 年。

在这个阶段,收入一般就在 5000 ~ 20000 元 / 月,很难突破 20000 元 / 月。同时,这个阶段的开发者,也很少有超过 30 岁的——因为超过 30 岁你还停留在这个阶段,基本上就混不下去了。(这个阶段会有大量的人退出,谋求转型……)

【2】 熟练

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

你可以做某个功能模块或子系统的软件设计工作;
你可以分配任务给普通开发者。
         到了熟练阶段,你才算是有一技之长,才称得上是靠技术吃饭(因为普通开发者越来越多,初阶的编码能力已经算不上一技之长了)。有了一技之长,你的收入就能获得突破,拿 20000 ~ 40000 元的月薪。

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

这个阶段会有大部分人开始怀疑程序人生的意义,一方面对开发工作很熟悉了,也没激情了,另一方面又很难进入下一阶段获得突破,于是倦怠、空虚、无聊、意义匮乏等状况纷至沓来。在这个三十而立的年纪,很多人会考虑转型,一部分人因为看不到其它的机会又难以放弃开发技能的积累和高薪,在犹犹豫豫中蹉跎岁月;另一部分人未雨绸缪,在日常的开发工作中,已经发展了支线剧情,转型比较顺利。

在熟练开发者这个阶段,有一小部分人,能够在某个技术栈上持续精进,凸显出优势,靠这种技术优势,成为高级开发者;另有一小部分人,一手技术,一手业务,靠交叉优势,也成为了高级开发者。在这两类高级开发者中,又会诞生出 Team Leader 这种角色。

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

【3】 优秀

拥有技术优势的高级开发者和拥有技术+业务组合优势的高级开发者,他们当中有一部分人会晋级为技术专家或架构师。Team Leader 可能会晋级为一线经理(技术经理、项目经理、研发经理)。这算是开发者的第三个层级。

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

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

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

处在这个阶段的朋友,都是独挡一面的优秀人才。已经超越了具体的技术能力,很好的建立了思维框架,解决问题的能力很强,所以你会看到,很多人能够迅速在非开发领域取得成绩。这就是大前研一所说的即战力。

有的人能在这个阶段待上十年八年,直到获得突破,进入第 4 阶段;还有的人,虽然不能进入第 4 阶段,也会想留在技术岗位上维持优势轻松赚钱,然后寄情别处,发展其他兴趣爱好,谋求和谐平衡的生活;另有一部分人,在这个阶段待上一两年就转型了——因为他们想有新的突破但往第 4 个阶段走又实在是比较困难。

【4】 卓越

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

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

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

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

6 种差异造成开发者之间的差距

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

普通开发者
           熟练开发者、高级开发工程师、技术组长
           技术专家、架构师、一线经理
           科学家、研究员、首席(资深)架构师、部门研发总监

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

普通开发者
            熟练开发者、高级开发工程师
           技术专家、架构师
          科学家、研究员、首席(资深)架构师
那么,从技术视角看,是什么造成了同时起步的开发者最终站在了不同的层次上呢?有六个方面:

知识、技能、动机、行动、习惯、环境

(一)知识差异

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

这是知识储备的差距。

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

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

(二)技能差异

一个普通的前端开发者,刚刚入门,会用 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 :“经理,这个问题,实在搞不定,咱们公司还有谁熟悉这块?”

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

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

还记得我在“如何做到选择大于努力”一文中对比曾宪杰和我的履历吗?我们在 2007 ~ 2014 年所处的城市、行业、公司、团队这些大环境的差异,决定了我们后来的职场高度。

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

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


 对于在职的小伙伴,需要迅速梳理自己的亮点,看看自己能在哪个方向做得更好,看看怎样把自己的价值展示出来,让领导意识到,“这个人不错,某某项目离不开他。”或者“这个人不错,在项目里可以发挥比较大的作用。”

混了几年,技术一般”的尴尬角色。

当然,退一万步讲,如果你发现自己在部门或项目组,是可有可无的人,那就早做准备,找找自己的长处,看看哪个项目需要自己,看看是否可以主动进入,快速上手。实在无法改变现状,那就盘点下自己的本事,设想下万一要离开现在的单位,下家该怎么找。可别不小心变成了末位的 5 ~ 10%,被淘汰时还没任何准备,那境况,可能会有点凄凉。

在职场上发展,有5种东西特别重要:

学历出身
           企业出身
           项目经历
          人脉
          个人品牌
我们面向普通个体,一个一个来说下。(注意,神人和个例不在我讨论范围。)

1)学历出身,决定大多数人的起点和可能性,学校差、学历低,会让你丧失很多机会,输在起点上。

2)企业出身,会决定你后续的职场机会、二次起跳的高度和发展。比如你从阿里出来,会比从三五个人的小公司出来,能看到更多机会,这和刚从学校毕业求职是一个道理。不熟悉你的人,无法短时间判定你能力水平,你待过的公司是为你背书的重要因素。你上一次工作是在BAT,大家想当然会觉得,这人应该有一定水平,不然进不去呀不是。

3)项目经历,人的能力是在事上磨练出来的,主导或参与过知名项目,会给你加分。比如参与了微信、支付宝等产品的开发,经历了双11的历练,那别人就会觉得,你经受了足够多的挑战,能力有保障。从同一家公司出来或同一级别的公司出来,有重点项目的经历,比只有边缘项目的小伙伴,更受欢迎。公司不知名,但项目很牛叉,也可能会很受欢迎。BAT等拥有更多、更牛X的项目。

4)人脉,这个很影响职场发展。比如有人给你推荐,你可能就比较容易进入BAT;比如你成了一线管理者或高级管理者,你有一个强大的人脉圈,基本上永远不用担心工作的问题,你这边刚有挪窝的念头,那边就有人等着你了。

在BAT等大厂,你能建立起更高质量的圈子。对未来发展大有好处。

5)个人品牌,这个是独立于平台,比较难构建,但一旦构建起来,你就可以行走江湖,不依赖你背后的门派了。个人品牌的塑造,一般是这样的:你做出了一般人难以做到的牛叉的事情,并且这个事情被广泛传播并给他人带来好的影响。比如Vue、ThinkPHP等框架的作者,都是拥有强大个人品牌的人。他们要找工作的话——哎呀,他们还用“找”吗!都是机会找他们!

小结一下,BAT等大厂,可以提升你的企业出身、项目经历和人脉关系,对个人职场发展大有帮助。