快好知 kuaihz

职场经验:如何把新工程师迅速调教成老鸟

前言

第一次觉得有兴趣介绍新兵营文化是和王建硕聊天的时候。当时我在百姓网里做Advisor, 了解到他们也有类似新兵训练营(即如何让新来的员工迅速融入到公司文化中进行高效协作)的项目,一开始也是向Facebook学习,但在具体的操作上都在很小心的摸索,所以我们进行了比较深入的探讨。

本文将分多篇来介绍新兵营计划的内容,背后的理念和操作上要注意的细节问题。本文节选自即将于12月份出版的新书《我在Facebook的日子 – 打造Facebook》。

什么是新兵营

其实,扎克伯格在2012年2月宣布IPO时对外发表的公开信里说得很清楚:“……Facebook要求所有新入职的工程师——包括那些将来并非主要从事编程工作的经理——参加新兵训练营(Bootcamp),学习我们的代码库、工具和方法。业内有许多人负责管理工程师团队,并不愿亲自动手编写代码;然而,我们寻找的实践型人才都希望也能够经受新兵训练营的检验。”

没错,新兵训练营,其实也是菜鸟养成营,其目的就是让新来的工程师和产品经理接受为期六周的集中培训以尽快融入公司之中,更为顺畅地开始工作。可是,这有什么稀奇的?很多公司都会为新员工指定一个导师啊。但是,Facebook的做法明显区别于他们。

为什么要有新兵训练营?

先谈谈新兵训练营的历史。

新兵训练营计划并不是从公司一成立就有的。我加入Facebook的时候还没有这一计划。我进入公司时,第一个月里找了一堆有问题的代码来修改,通过这些工作接触并认识了很多朋友。第二个月,我选了一个大概长度为一个月的项目自己玩,也没什么人来管。就在这些练习中慢慢地认识公司的人,学习公司的文化,并逐渐融入Facebook。

但是随着公司迅速发展、员工不断增多,无计划的自学式的方法无法迅速地帮助大量新员工高效融入到Facebook,所以从2008年中开始,Facebook开始系统性地设计和试验新兵训练营计划,并在实践中不断改进。很快,这个计划变成了所有新加入的工程师都要强制参加的培训计划。

对于产品经理,原则上也要求他们参加。由于产品经理进来的时候都已经确定好去某个组,不像工程师,大部分都没有确定去向,所以如果产品经理的老板有特殊要求的话则可以不经过新兵训练营而直接开始工作。这种情况比较少见。

这一计划的主要推动者是安德鲁·博斯沃斯(Andrew Bosworth), 博斯沃斯是公司文化的主要捍卫者,“上帝不允许我们有一天不为Facebook的未来做准备。我们曾见过一家又一家的公司在做大后因为规模陷入麻烦,或因为文化陷入麻烦。”在2008年初,他开始意识到,Facebook的文化可能面临挑战甚至失败。

他刚进公司时,所有人都彼此认识,可是2008年夏季的一天,当他在公司的餐厅排队时,遇到了一位之前从未见过的工程师。于是博斯沃思问他,在公司干了多久;对方的回答让他震惊:一年。他感觉有点不对劲儿。“我们是Facebook,如果我们不能规划一个超过150人的沟通网络,就真的有麻烦了。”他这么想。

我在Facebook这四年半,一开始几乎每个工程师都互相认识,但人员的迅速增长,让这一点变得不可能。如何有效的让最适合(潜在)合作的人互相认识,有信任感,来保证项目的高效完成,成了Facebook这么些年很大的一个挑战。等到项目开始的时候参与的人员才开始互相认识,那么磨合期会更长,磨合成本会更高。

2008年中,正是新员工如潮水般涌进公司之际,作为公司整个文化培育行动的一部分,新兵训练营计划登场了。这项计划就是为了让新工程师们认识公司里面相关的人,了解公司的文化,了解公司的技术与产品,从而能迅速地融入Facebook,并找到适合自身能力和兴趣的小组(即通过这个过程确定他的具体工作职能)。

新兵在这六周里究竟要做什么?

第一周的周一,新来的工程师们在公司自助餐厅里和负责他们的导师(Mentor)吃完中饭后,为期六周的强制性训练营就拉开了序幕。这位导师将全权负责回答新人们的各种问题,从工作,到生活,到八卦,如果新人真的感兴趣的话。简短的介绍之后(博斯沃思和其他老员工会在这个环节介绍公司的文化),每人会分到一台电脑和一张办公桌。第一次打开电脑时,他们会看到6封电子邮件,其中1封是欢迎信,另外5封介绍了他们将要执行的任务,包括修复Facebook网站上的错误。训练的目的很多,其中之一就是让新员工充分认识到,他们拥有直接改变Facebook网站的力量。

Facebook很希望工程师在第一天就把所有的编程环境都设置好,在第一天就提交代码 [1]。这样可以在周二参与每周例行的代码发布活动,将代码同步到Facebook几十万台服务器中。Facebook并不希望新人在第一天提交复杂的代码,基本都是很简单的改变;希望通过练手让工程师能迅速了解整个流程,迅速进入角色

头三周有很多课程要上。一般公司的COO(首席运营官),CPO(首席产品官),工程副总裁都会在第一周给新人们介绍各个部门概况,给大家一个全局的认识。第二周,重点在于公司各个重要产品,常用的技术框架和技术工具的介绍。第三周,集中在公司的运营(包括市场,销售等部门),商业模式(Facebook主要的广告模式和虚拟货币的盈利手段)和其他非产品技术部门的介绍。

从第三周开始,新人们就开始接触很多相关的需要招人的组,和这些组的经理交流,了解这些组的产品,参加这些组的会议和讨论。一般要求在第三周的周末,新人要选出不多于三个组作为他们感兴趣的备选组。接下来每一周的事情就是进一步缩小目标范围,以达到在第六周时只剩备选组的目的。这个组当然就是新人最后要加入的组。

从第一周到第六周,所有新人60%以上的时间,都需要花在修复代码错误上面。其他所有的事情应该在剩余的40%时间内完成。Facebook相信,让工程师融入公司最好的办法是通过代码的交流。毕竟,产生高质量的代码的确是所有工程师最主要的工作。

谁可以做新兵训练营的导师?

导师需要对公司文化有比较强的认识,一般要在公司呆过一年以上。自愿担任导师者一般是想发展成人事经理(People Manager)的,也就是对人员管理、对与人打交道感兴趣的人。

既然作为公司整个文化培育行动的一部分,那么如何产生出新兵训练营的导师则是其中的关键。首先,他需要对公司文化有比较强的认识,一般要在公司呆过一年以上,当然越久越好。我在2010年中开始做新兵训练营导师时已在Facebook超过三年;和我同期的导师有一位比我还要早一年。其次,做导师是自愿性质的(也可以由老板推荐合适的工程师去担任),只要你有意愿就可以提出申请,但也需要得到你老板的同意,因为做导师需要占用1/4强的正常工作时间。对自己要求高的人并不会因为做导师而让自己的绩效降低1/4,所以这意味着要挤占自己一部分业余时间。

通常,自愿担任导师者一般是想做人事经理的,也就是对人员管理、对与人打交道感兴趣的人。现在Facebook硬性规定,所有可能升职为经理的候选人,必须至少做一期新兵训练营的导师。比如我就是在升职为经理之前,被我的老板推荐去做过两期的导师。另外,做导师一般要求是技术牛人,因为在训练营里,新员工每天都要完成大量具体的技术任务,需要导师在必要的时候在技术问题上加以指导。导师也要有能力在结束时准确判断新兵们的能力和所长。

截至我离开Facebook时,大概每两周会进来一批新工程师,那么每期新兵训练营是六周,每期有2~4个导师,每个导师要带5~9个人,大概每周需要花10~20小时的时间。所有的导师有一个负责人,就是博斯沃斯,他还有一个助手,负责所有的导师和新员工的分配,基本上是把背景类似的(比如校友、原同事、有相同的技术兴趣点等)分配给同一个导师,这样每个小组里成员之间更好沟通。

导师需要做什么?

新员工在训练营里60%~70%的时间要用在修改程序错误上,而遇到任何困难,都可以寻求导师的帮助,关键是方法、理念、文化的传递。

那么,导师具体要做些什么呢?新员工有任何问题,尤其是关于公司文化的,除了尝试自己解决以外,都可以寻求导师的帮助或指导;导师不会在任何时候给新员工脸色看,而是会全力支持他们的学习。

首先,导师每周和被指导的新员工做“一对一”的重点讨论,比如他最近的学习进展,表现如何,哪些方面做得好,哪些方面需要加强。公司要求导师对新员工给予最直接的反馈,以帮助他们迅速成长。另外一个交流的重点是对于公司内现有的哪些团队和项目感兴趣,因为新兵训练营的最终目的就是让他们顺利融入公司,找到合适的小组。什么才算是合适的小组呢?从新员工的角度来说,就是既能发挥他的长处,又是他感兴趣的;从公司的立场看,当然希望重点的项目能够得到合适的人力分配。如果能做到双方都满意的匹配,就是理想状态了。Facebook非常鼓励员工到他感兴趣但不熟悉的领域,这样可以给一个项目带来新鲜的视角。当然,这么做的前提是这些人是很聪明的、非常有学习能力的工程师。

其次,导师每周都要参加导师碰头会,参加者包括所有正在训练营的导师、博斯沃斯及其助手,会议就训练营中遇到的一些具体问题进行讨论,找出解决方案。大多数时间会花在一些表现特别出色或特别逊色的新兵身上,如果没有这两类人的话,会提早散会。对于表现特别出色的,导师要着重考虑哪些组最适合这些能力强悍的新兵。公司希望将最好的新兵用在最重要、最需要他们特长的岗位上。

有好几次,在一期新兵营刚开始的时候,几个组的组长都发信要招同一个人,这样的“抢人”就需要在碰头会上商量如何进行引导和解决。对于表现特别逊色的,则会花时间讨论如何帮助他们改变以有所起色。因为,对于通过Facebook层层面试的人,公司相信他们还是有实力的。不经过多次努力,公司不会轻易得出他们不适合Facebook这一结论。

还有,导师会分配一些代码错误给新员工进行修补,这类任务通常会占到新员工60%~70%的时间。设想一下,作为一个新人,你的工作成果很快就被数以亿万计的用户使用,多么有成就感的事情!这样做可以给他们极大的自信。修改错误的过程中,新员工可以了解到相关项目的前因后果,需要跟相关程序的小组及工程师打交道,熟悉很多内部工具……这就又回到了新兵训练营的最终目的上——帮他们找到最合适的组。

如果新工程师在修改错误时遇到了困难,那他是先跟自己在训练营里的朋友互相商量,一群菜鸟找出答案来,还是直接寻求导师的帮助呢?当然,菜鸟互帮互助是最受鼓励的,解决问题的方式往往不止一种,而是有很多,每个人都可以构想自己的方法,自己什么尝试都没做就直接问别人则是非常忌讳的。

如果实在不行、确实需要找导师时,导师往往也不会给出直接的答案,而是告诉新人们,可以去找代码错误涉及的原先的工程师聊聊,哪些人对这个部分更了解。正如中国的谚语,“授之于鱼,不如授之以渔”,希望新员工能够自己去思考这些遇到的问题,然后找出解决方法;当然,也不能在困难面前自己一个劲死磕,要学会适当寻求别人的帮助。

一个简单的原则是:至少要在相关的代码里花了半小时而没有任何头绪,这时候才适合去寻找导师或者问相关的工程师。这样你在和导师或者相关工程师请教的时候,可以在解释完遇到的问题之后,再迅速描述你已经查看的代码和已经排除的一些假设;当别人知道你做过功课的时候,会更加愿意帮你。不懂就问,而不是自己先钻研的人,在Facebook不受欢迎。

训练营里很多时候碰到的情况是,解决一个问题其实有好几种方式,但新员工还不明白哪种方式是Facebook通用的,这个时候导师可以告诉他去代码库里看看其他类似的地方是怎么处理的,看以前的工程师是怎么做的,重复这种方式保持一致性一般没有问题。所以如何高效地做代码查看成了每个员工都要学会的技能。

如果涉及的是具体产品的技术性问题,Facebook不建议导师进行深入的帮助,因为这样就变成我来帮助你做一件非常具体的事情了,而关键的是教给新员工方法、理念、文化上的东西。

如何为新员工找到合适的工作职位

导师在跟几位需要招人的经理讨论之后,就会安排大致匹配的新员工与之见面,通常是经理在做“推销”;而新员工好比是在“面试”那些小组,最后由他决定自己想去哪个组。

为了让合适的组找到合适的人,新兵训练营负责日常运营的人(博斯沃斯的助手)会在每一期开始前一周把所有新兵的简历E-mail给有招人名额的经理。如果经理看到一个特别合适的,新兵营会配合这个经理去引起目标人选的兴趣,比如说会鼓励他参加该组的讨论会,多分配该组相关的代码错误修改任务等。但最后能不能成功,最大的决定来自于新兵本人。

另外,导师也会主动跟目前需要人手的那些组沟通,看自己负责指导的新员工更适合哪些项目。Facebook专门有一个页面,叫团队优先级页面(Team Priority Page),负责产品技术的各个组都可以把自身的用人需求放在上面,还有一个由博斯沃斯和工程总监们组成的委员会,每两周开一次会,讨论每个组的用人优先度。博斯沃斯的强势在这个会议上大有用处。

根据这些情况,导师会跟相应的几个经理做一些探讨,比如挑几个最重要的组当中要招人的几个职位,看起来跟自己的所负责的新员工背景比较符合,进行一个大致的匹配,相当于导师帮新人做了一次初选。毕竟让一个新人在完全没有指导的情况下去了解每个组,效率太低,也不现实。导师再鼓励新员工去跟这些备选组的人去接触、沟通

导师每周都会对所指导的新员工进行评级(有Rockstar—明星,Solid—扎实,Shaky—摇摆这几个级别)并简要地评价,说明他水平如何、有什么特长、对哪些组特别感兴趣等,这些评价整理汇总之后会发给所有的经理,所以他们对新员工的能力也有了大致的了解。

导师在跟几位经理经过讨论之后,就会安排大致匹配的新员工与之见面,一般半个小时左右,通常是经理来介绍他的小组在做什么项目,需要招什么样的人,这项工作的意义何在,这个小组对整个公司有什么意义等,相当于在做“推销”;而新员工主要是听,好比是在“面试”那些小组,最后由他决定自己想去哪个组。

除非有特殊情况,一般某个新员工选定的组都会接收他,不能拒绝。因为如果你拒绝的理由是“他不行”的话,那不如解雇他,而不是说你不愿意让他到你的组、但可以到其他组,这种想法违背Facebook的文化。我在前面就强调过这一点,“我们都是为Facebook工作的,而不是为了某个小组工作”,所以如果你觉得某个新员工不行,那其他组也不应该要他。如果原因是“他的背景不适合”,那一开始就不应该见面会谈。导师极力避免把新人介绍到明显不适合的组里面,所以这个理由也不成立。

这种讨论既可以由导师发起,也可以由需要用人的经理发起。比如我曾在新兵训练营里指导过一个之前在Google的资深工程师(Senior Staff Engineer),原先在Googe属于前3%行列的,水平很高,没过几天就有好几个组的经理跟我说想找这个人谈谈。当然,这种情况下,我不希望经理直接去找这个人。我要先做个筛选,毕竟对双方都了解的只有我一个人,如果是我觉得合适的组,再转给该工程师看他是否感兴趣。另外,就是避免过度的“推销”,这会让员工迷惑、陷入过多选择。毕竟对Facebook很重要的组有很多,有趣的组也很多,如果每个组都来向新人推销一遍,新人的想法就混乱了,反而没办法做出选择。

导师还有一个很重要的任务,就是当某几个特别重要的岗位急缺人的时候,要花力气去“忽悠”合适的人到这些组去。这个时候,导师会循循善诱,极力争取唤起新人对这些组的重要性的认同和对其业务的兴趣。我做过几例这样的推销工作。老实说,这不是最自然的匹配方式,因为在这种时候诱导性太强。

在新兵训练营结束后,也会发生淘汰的情况,但几率很低。印象中,在我离开Facebook时,像这种情况淘汰掉的总共不超过10个人,而经过新兵训练营的工程师和产品经理一共大概有500多人,淘汰率不到2%。

在我曾经带过的一期当中,有一位伯克利毕业的专攻机器学习(Machine Learning)的博士,美国人,有三年多工作经历,很年轻。他很聪明,但有典型的博士风格——凡事都要弄得特别深入、特别细致。这样导致了一个问题,速度太慢。一个我自己去做只用一两个小时完成的代码修复,一般期待新人最多半天,但这位兄弟为了把前前后后弄得一清二楚花几天时间都搞不定。

我们之间有过多次关于质和量如何平衡的讨论,也达成了他应该加快速度、增加产出的结论。我在多次的表现评级上都给了他“摇摆(Shaky)”的评价,但似乎改善不多。在第四周,我们给了他最后的机会,让他尝试给动态消息组的机器学习算法部分做一个改进。机器学习算法的一个特点是对试验的设计、数据的获取和分析要求很高,相对于其他的产品项目,对质量的要求要高,速度的要求较低,比较适合研究型人才的胃口。

所以,这种安排也是希望能让他更容易展现自己的特长。从组里的反应来看,对他的表现还算满意。最后我们就让他进了这个组,没有让他走人。对于表现不良的新人,虽然总体上Facebook是求快,但对于在某方面有造诣的工程师还是尽可能为他寻找合适的岗位

这里面其实也反映出一个问题,就是研究型人才如何在一家步伐很快的技术公司立足。Facebook也在慢慢地摸索

就我个人做导师的经历而言,新兵训练营结束后我还会继续跟踪(这不是公司统一要求的)。新兵营毕业后一个月和三个月后,我会跟这些新员工再进行“一对一”谈话,看他们感觉怎么样,新兵营对他们有没有帮助,是否适应目前的工作,有没有文化沟通上的冲突等。

训练营不仅是新员工培训班,也是经理培训班

对于快速成长、规模不断扩大的Facebook来说,新兵训练营还是一个培养一线管理者的好地方,并有效地保持了自身的文化特色

对于成立于2004年的Facebook来说,如何在快速成长中保持自身的文化特色(本书相关章节会专门讲到公司的文化),如何在新工程师潮水般涌进公司时仍能以一贯之,就必须有一批新的一线管理层做基础。新兵训练营看似只不过是个新员工培训班,但就像我们上面介绍的那样,做导师的基本都是潜在的经理候选人,他们在训练营里同样获得了宝贵的领导经验。他带着5~9个新员工,就像一个小团队,讨论遇到的各种问题;在指导新员工如何解决问题的过程中,他可以学到管理技巧。

这种培养管理者的程序特别重要。因为Facebook从一开始就是由几个20来岁、没有职业经验的年轻人成立的,之后的工程师主体也大多是这样的年轻人,其中很多都没有在别的公司工作过,尽管在打造网站方面做得非常出色,但对于公司文化的可持续性实在没有把握。由于Facebook的结构非常扁平,一线管理层作为整个工程师管理的基础,有一个系统性的培训机构能持续性的提供新的经理,对于公司的发展是非常重要的。

新兵训练营在这方面起到了不可忽视的作用。

[1] Facebook代码产生的过程包括写代码(write code),测试代码(test code),审查代码(review code),提交代码(check in code),发布代码(release code)。写代码指在自己的开发机器上做好修改,这些修改只存在于自己的开发环境中;测试代码指在本地端测试自己的修改以保证修改不引入明显的问题;审查代码指找合适的工程师同事来查看待提交的代码;提交代码是将经审查的代码提交到服务器端的代码库之中;发布代码是将提交的新代码同步到所有的服务器端让最终用户使用新的功能。

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:老鸟  老鸟词条  调教  调教词条  职场  职场词条  迅速  迅速词条  工程师  工程师词条