全文为工程师如何规划自己的职业生涯 学习笔记,结合了部分自己的想法。推荐付费听课。

1 工程师职级体系

参考谷歌工程师职级体系

  • Software Engineer II 硕士毕业
  • Software Engineer III 博士毕业
  • Senior Software Engineer
  • Staff Engineer 分水岭
  • Senior Staff Engineer
  • Principal Engineer 架构师
  • Distinguished Engineer 杰出贡献
  • Google Fellow 终身荣誉 VP
  • Google Senior Fellow

Software Engineer I II III

google招聘很少招本科生, 硕士毕业 一般为Software Engineer II , 对应博士毕业为Software Engineer III

Staff Engineer

绝大部分google 的工程师停留在这个层级。层级要求,有自己的想法,找到一个有价值的方向,提出自己的建议,把这个建议实现为一个工程项目,并把它实现出来,得到广泛的使用。要有一个很好的结果:提升了团队的开发体验或者用户的使用体验,增加公司的收入。不仅仅要技术过硬,还要有好的想法,并对项目负责。比如给自己的项目指定时间表,制定目标和OKR,负责这个项目的完成。

Senior Staff Engineer

必须要有更高的专业技能,必须吧更有难度的系统完成。从Staff级别开始要有很强的判断力,不能总是要别人告诉你完成什么任务,从领导和上级领任务,要自己发现问题并解决掉。

Staff Engineer

晋升难度比较大,也是工程师比较光荣的事情。一旦晋升到此级别,工程师的名字就会被贴到公司的网页上去。

Principal Engineer

要在业内有领先的水平,和代表性的结果。此级别在google是非常少的,少于1%。

Distinguished Engineer

杰出工程师:需要对公司作出特别大的贡献,比如极大的提高了用户体验,或者广告系统的变现能力

Google Fellow

终身荣誉:必须在公司和业界做成长远深刻的成绩

Google Senior Fellow

高级副总裁:为互联网战神Jeff Dean 设立的岗位 How Google’s Jeff Dean became the Chuck Norris of the Internet.

豆瓣网友总结:外企的职级等级制度

刚入门的工程师:需要了解基本的数据结构,算法,操作系统,数据库,面向对象编程等常用的理论知识。之后拓展深度和广度。

初级的工程师:工作1-2年的工程师,能够独立完成开发任务,通过熟练使用开发工具,编程语言,理解基本的业务逻辑。能够抽象的建模,并且熟悉测试,代码发布,性能分析,修改bug,版本管理等工作。

技术骨干:带领项目的能力,参与制定代码规范、开发的流程,非常熟悉常用的技术框架,和算法的原理,需要有更强的解决问题的能力,需要了解在不同的场景下如何技术选型。

技术专家:必须对一个或者多个技术领域有更深的理解。能过独立设计和实现解决复杂的技术问题。比如设计一个新的工具,新的算法,新的系统框架。

2 判断是否可以晋升的评判标准

需要考察的四个维度

  1. 专业知识和经验的沉淀和积累
  2. 项目的规模和难度
  3. 执行力和项目的结果
  4. 领导力(其他同事的认同和信服,面对问题的有正确可靠的解决方案和协调内外资源的能力)

3 为晋升做的准备

从四个维度出发考量自己是否具有下个职级所具备的能力。通过事实来证明自己的能力。

以项目的规模和难度为例,如果发现证明不了自己做的项目有规模和难度的,不要被动的等待,要主动的和上级沟通,争取一些。能证明自己可以胜任更大规模和更高难度的项目

专业知识和经验 从一开始对项目的熟悉,到熟练操作。到能知道别人,协调资源负责项目树立自己在技术团队的威信力,再到自己在业界有一定的影响力。

4 程序员变成管理者会面临哪些改变

从Developer转到Manager给人产生一种”晋升”的错觉。这导致太多人,其实并不是因为想做管理,只是因为作为senior工程师,似乎没有其他上升通道。喜欢做管理的人做了管理者可以不断学习和提高管理技巧。而不喜欢又不懂管理的管理者,会成为公司员工离职的主要原因。 很多工程师关注技术问题的解决,然而有时候是团队之间的沟通交流和协作出了问题。如何规范workflow,如何与团队协作达到1+1>2,真正区分了一个人的side project和工程中使用的大项目。不论是敏捷开发,TDD,scrum,等等,都是为此而生。 把管理当做和技术岗位一样严肃的”技能”。People skill是一种比较soft的技能,但是并不代表毫无经验的任何人都可以凭天分混下去。学习并且练习如何做管理,和每个合作的人建立信任; 好的技术leader需要过硬的技术背景和强大的同理心,能够理解和感知他人,并且给予指导和帮助他人成长。

重要的一点:还要做好向上管理,培养上级对自己信任,让团队做更有难度,更有挑战的项目来证明,要在上级那为团队打造品牌。

5 选择大公司还是创业公司

大公司和创业公司工程师文化的异同?如何结合自己的特质,来做一个适合自己的选择。

在创业公司工作呢,需要一种挽起袖子什么都要干的精神。就像你要个造个房子,到创业公司你会发现铲子什么工具都没有,那怎么办呢?自怨自哀是没有用的。你自己动手去创造。在创业公司,有一种成就感,来自造物和随产品一起成长的幸福感。

在大公司就不会有工具不齐全的问题。大公司的系统相对比较成熟和完善。对工程师来讲工作的,一个优点就是能够了解到成熟的系统工具是什么样的啊,而且他能够很快的进入一个高效率的开发状态,弊端呢就是在一个成熟的环境下面把一个现有的系统推倒再重来的机会就非常非常少了。在大公司工作,很可能你只是庞大系统的一个很细小的分支,Tiger举例的google 的搜索系统中,一个非常小的分支的推荐系统。每个人能够负责的范围也有很大的局限性。

创业公司是把产品从零做到六七十分的工作,大公司是从90分做到95分这样的。个人参与就是1分甚至零点几分的。

6 程序员是不是青春饭

这是一个大家都很关心的问题,答案可能让大家失望了。既然我们从事了互联网,这个行业,那就必须要接受这个残酷的现实:就是必须,不停地学习给自己充电积累,才能够在这样的一个环境下把幸存下来,不被淘汰,因为这个行业实在太快了。可能现在遇到很难的问题,在未来的几年,就是很基础的常识。回想大学在学校里学习和研究的内容,现在都不实用了。Tiger 在博士期间研究的是低带宽下面的网络性能优化,但是现在手机弱网络,都要比那个时代的更好了。

现在工程上解决不了的问题,在过几年,新的技术出现了或者硬件解决了现在的难题,发现现有积累的经验已经不再是优势了。

再看前端,在04-08年左右你可能在这个阶段积累了很多浏览器兼容性的问题。转眼到14-16年发现浏览器兼容好像没那么重要了。再比如我们曾经风靡一时的网页三剑客。现在入行的人可能都没听说过了。

另有一种说法,程序员转做管理,这个想法在传统的软件公司,还是可以的。但是在互联网公司,纯粹的管理者完全不懂技术是没有生存空间的。作为一个合格的技术管理者,需要了解哪些是适合团队的技术选型。你要能给你的团队提出有深度的技术解决方案。

所以我们做工程师就要接受这样一个现实,因为技术的发展日新月异,所以我们必须要活到老,要有很强的学习的欲望和好奇心。这不是年龄的问题,这是态度的问题。只要你愿意学习,这口青春饭也可以一直吃到老。

7 国内互联网公司的优势与如如何选择

对比硅谷,国内的互联网气氛还是比较浮躁的。但是依然止不住,国内互联网发展的趋势,无论从双十一还是从去年如火如荼的o2o 大战,国内的互联网依附人口红利,还是不断的上升增长的趋势。在社交,电商,移动支付,智能硬件,大数据这些领域里面,中国互联网公司优势会越来越强,在这些领域中国互联网公司会引领潮流的。

而判断一个公司的前景需要从一下几点考量:模式、方向、壁垒、团队。作为工程师来讲是否是一家技术驱动产品的公司。