2012年8月18日星期六

孩子王?有孩子气才能为王?

以最快的速度看完了 Facebook 第 51 号员工的回忆录《The Boy Kings》。尽管是关于 Facebook 成长的故事,说的却不是跟技术或者投资相关的事情,这是因为作者 Katherine Losse 并不是一名工程师,而是一位英文硕士。她最初加入 Facebook 时是一位客服,后来负责过 Facebook 的国际化工作,最后成为 Mark Zuckerberg 的代笔写手,估计是离 Mark Zuckerberg 最近的非高管了。这种经历使得作者陈述故事的角度如此的与众不同,让读者也必须跟着反思「难道高科技公司就必须做得如此孩子气才能成功?」

作者最初加入 Facebook 时,就感觉到了工程师与非工程师地位悬殊。Zuck 的衷心欢迎是留给工程师的,客服根本不在 Zuck 的视线范围内。作者最要好的两位朋友分别是黑客 Thrax 和工程师 Sam,然而在作者任职客服期间,她的薪水和她的好友相距甚远,以至于每当工程师们自发组织出去享乐的时候,她总要想一想是否值得为了参加活动而节衣缩食几个月。

有一次 Thrax 和 Sam 去参加 Defcon(世界上最大的黑客大会),把作者也叫上了。因为 Thrax 是明星黑客,是这次行程的主角,所以他能报销各种开支。Thrax 入住酒店后的第一个想法是要在拉斯维加斯最贵的餐厅预定晚餐。Thrax 的第二个想法是,为晚餐买一身与之匹配的新衣服。作者说,「我们去 Marc Jacobs 看看吧」,Thrax 的第一反应是「那是谁?」作者忍住没笑出来,解释说「他的东西比较 cool,有点点 mod,你会喜欢的」,然后心想「估计他也不懂『mod』是什么意思」。在随后晚餐上,Thrax 穿着作者花了两个小时为他挑选的 Lacoste 衬衫,开了一瓶 $175 的红酒,三个人当中就只有他还不到合法喝酒的年龄。

Thrax 是明星黑客,同时也是个小孩子。跟大多数黑客一样,Thrax 是清晨睡觉下午起床的,于是在 Thrax 睡觉时作者就跟 Sam 找了个泳池晒太阳(他们总是耻笑其它不怎么出门的工程师「脸色苍白」)。等 Thrax 要作者帮他挑选衣服时,他就提出说「既然你们晒太阳时丢下我,这次买衣服能否反过来把 Sam 丢下?」尽管 Thrax 如同小孩子一样,希望有一段时间能够获得别人 100% 的注意力,但作者和 Sam 决定无视他这个请求。

作者对 Thrax 的看法,很多时候也是她对黑客文化的看法。一群黑客就如同一群孩子,收入不低却不懂世俗,而且还时不时耍孩子气。然而正是这样一群人,创造了 Facebook 这样的王国,于是有了标题中的「boy kings」,而 Zuck 当然就是「king of the kings」啦。

后来由于客服职位的发展空间有限,作者想要离开 Facebook。正好在这个时候 Facebook 发布了自己的开发平台,平台的市场推广需要人手,于是作者就加入了这个新组建的团队。Thrax 在知道这件事后跟作者说,「所以你现在能搬到工程师所在的楼层来咯?真无耻。」「你才无耻。」「反正没有人喜欢你,所以……」互相挑衅显然也是作者眼中孩子气的一部分。在平台市场推广短暂停留后,作者又被邀请去做 Facebook 的国际化工作。作为英文硕士,她喜欢语言和旅行,自然她选择了接受新的工作。

作者的新头衔是「国际化产品经理」,这意味着她终于成为工程部门的一员,也有了对产品的话事权。这时候作者才亲身体验到了工程师的生活方式:你可以工作到很晚,有时候也必须工作到很晚,因为这就是黑客特立独行的特质。你无需听命于权威,可以连夜编写突破性的天才产品(或者是在 Facebook 上挑衅别人)。同时作者也见识到了某些工程师对机械过程的迷信:Facebook 众包给用户翻译的词条偶尔会遇到多个翻译版本难以取舍的情况,某些工程师就坚信用户投票经算法计算得出来的结果一定是正确的。这时候作者就会站在这些工程师的对立面,坚持翻译结果必须经过人手审阅。

这种技术和人性之间的竞争一直没有停止过。工程师总想要把这个世界变得更加技术化,因为这才符合他们的理想。而作者作为一名女性,同时又是英文硕士,则希望更人性化一些。

作者的下一份工作是 Zuck 的代笔写手,专门负责用 Zuck 的口吻写博客。越是接近 Zuck,作者越觉得自己在公司里是个异教徒。为了工作需要,她可以用 Zuck 的思维方法进行思考和写作,但这也使得她更在意自己独立思考的能力,最终的结果就是她发现自己的想法跟 Facebook 的理想不一致。这是一家相信通过技术能够解决所有问题并且以以此为荣的公司,但作者却认为技术和人性只是解决问题的不同手段而已,没有优劣之分。公司想要通过技术手段解决一切问题,但这不是她想要的未来。

最后,作者选择了离开 Facebook,并且移居到一个无线网络慢到可以用「与世隔绝」来形容的地方来写这本书。在这本书里面,除了可以看到 Facebook 早期的一些趣事,还能看到技术质疑者眼中的技术革命是怎么样的。利用技术革命改变世界的人自然无条件地信仰技术,然而这一切并非如此无懈可击,换一个视角还是又很多地方值得质疑的。此外,尽管黑客拥有改变世界的能力,但他们那种希望永远年轻、不负责任、不受监管、无可阻挡的文化,在外人看来也有很可笑的一面。如果你正在做技术,并且你也坚信自己做的事情是无比正确的,那么你可以看一下这本书,怀疑一下自己的世界观。

2012年8月6日星期一

面试体验:Yahoo 篇

前面两篇文章提到了 GoogleMicrosoft 的面试体验,可惜都没有 offer,接下来说说有 offer 的。

考虑到我已经在 Google 和 Microsoft 的招聘流程当中了,于是我也让 Yahoo 的同学帮我内部推荐一下,试试 Yahoo 的面试如何。本来没想着很正经地面,不过最后拿到了 offer,所以才有了我之前那篇文章所说的「越是放松越能成功」。

Yahoo 一开始并没有什么 HR 沟通和预约,某一天我从百度下班回家正准备做饭就接到面试官电话。我开头以为他想要跟我约时间,结果他问我是否方便进行面试。我当时毫无准备不是很想面试,不过既然室友可以做饭那面试一下也没什么所谓。Yahoo 的面试不像 Google 那样有很明确的规范,所以每一轮的面试官喜欢怎么面试就怎么面试。第一轮的面试官问了很多很基础的问题,每一道题考一个基本的知识点,例如某个 CSS 属性的取值,或者是 HTTP 的状态码。这些问题基本上不需要任何的解题能力,知道就知道,不知道也没办法。前端的基础知识我都知道,所以这对我来说没什么难度,只是感觉自己被人当 wiki 来查而已。

Yahoo 的面试让我感到舒服的一个原因是,它有前端工程师职位,所以不需要强行用后端工程师的标准来衡量我。在通过第一轮电话面试后,HR 终于出现了,跟我约了一个下午的面试时间。我问她要具体的时间安排,跟 Google 和 Microsoft 不一样的是,她说没有具体的面试安排,预计我的面试需要占用整个下午,所以请我预留整个下午的时间。这是让我感觉安排不够严谨的地方,后来才知道因为有多个不同的团队想要面试我,所以从一开始就给我安排了更多轮的面试,让不同团队的人都有机会来面试我。

我在 Yahoo 办公室一个下午的面试见了 4 位工程师,其中包括 1 位经理。因为 Yahoo 的经理也跟大家一起写代码,所以我也把他算作工程师。每一位面试官面试的风格都不一样,不过都涉及写代码解题。最后经理进来的时候给我带来了一罐 Diet Coke,除了让我写代码外,他还让我打开现有 Yahoo 产品的页面查看源代码代码,然后问我有哪些地方做得不够好以及如何能够改进。

在面试的过程中,我很明确地向经理表示我希望能加入一个多元化的团队,跟来自不同国家不同背景的人合作,最好有机会到美国出差工作一段时间。经理表示,既然我想要跟美国团队合作,他可以额外安排美国的同事跟我面试一下。我的理解是,到这里我就相当于已经有了口头 offer,不过有机会跟美国同事聊一下那就聊一下咯。

因为对方在 Miami,中国的上班时间正好是他的下班时间,所以面试只能约在中国上班的前一个小时。我早上 8:50 到 Yahoo 办公室后,不仅仅 HR 还没到,连前台都还没上班。9:00 前台上班,过了一会儿 HR 才来把我带到视频会议室。在 IT 帮忙调试半个小时后,确认视频用不了,只好降级为电话会议。Miami 那边的同事很认真地把问题分作 HTML、CSS 和 JavaScript 三部分来问,半个小时自然聊不完,但他的下班时间到了,只好跟 HR 说明天继续。结果第二天还是同样时间去 Yahoo 办公室通过电话会议聊了一个小时。

由于 Yahoo 知道我在等 Google 的结果,所以 HR 在电话口述 offer 给我听后,告诉我 offer 的邮件先不会发出来,因为发出来我就必须在指定的天数内接受,否则系统就会自动取消 offer。我觉得这还是挺人性化的。Yahoo 的面试安排规范化程度看起来没有 Google 和 Microsoft 那么高,随意性比较大。当然,这样做的好处是灵活性也大一些,经理和 HR 可以按照自己的需要做一些特殊安排。

《面试体验》系列文章就只剩下 Facebook 那一篇了,我承诺我一定会把它完成,但可能要经过一段时间后我才会把它发表出来,所以建议大家订阅我的博客,或者是在 Twitter 上 follow @CatChen。此外,我的博客也接受捐赠,通过信用卡支付,金额随意($1 起)。

最后是广告一则:如果有任何曾经参加过豌豆荚(豌豆实验室)面试的人愿意写类似的面试体验文章,欢迎联系我并把文章地址发给我,我愿意在我的博客上以链接的形式进行分享。

更新:Facebook 篇》已发布。


2012年8月4日星期六

面试体验:Microsoft 篇

在上一篇《面试体验:Google 篇》中说到,我对猎头的标准回复是「有美国或者香港的职位吗?」在进入 Google 招聘流程后,Microsoft 有一位 HR 打电话来跟我说有一个北京的职位跟美国总部会有密切的合作,问我有没有兴趣。我当时想的是,如果加入美国公司的中国分公司,或许将来有机会 relocate 到美国去,至少会有去总部出差的机会吧,所以就决定去试试。

HR 在联系我之后,招聘经理 Alex 直接联系我跟我约了晚餐时间。晚餐其实不是什么面试,只是互相了解一下。Alex 原本在 Microsoft 总部工作,只是碰巧他来北京轮岗 3 个月,有候选人申请职位他自然也乐意见见面。至于这个跟美国密切合作的项目,总监和一半的成员在美国,中国这边已经有几个人但还要多招几个。

Alex 在晚餐中教会我一件最重要的事情是:什么叫做 「commodify 工程师」。所谓的「commodity」是指无差别的一般等价物,例如按桶算的原油就是这样子,无论中东产的还是中国产的都一样。在说原油价格一桶多少钱时,我们并不会关注到底是哪里产的,因为价格差不多,使用起来也没有区别。因此「comodify 工程师」就是把工程师当做一般等价物看,无视其人性和个性,把工程师看做无差别的人力资源单位,哪个项目缺多少人力资源单位,就为它补充多少人力资源单位。他帮助我意识到我不满的百度现状是什么,同时也支持我要换一家公司并找机会到美国工作的想法。

之后 Alex 帮我约了一轮电话面试,面试官是印度人。他问了我两道问题,一道比较简单写代码就能解决的,另一道则是分布式系统设计相关的,我全无经验只能说说我知道的概念。我感觉后面这一道题回答得不是很好,因为总是没办法说到点上,同时也不像算法题面试官给些提示就能向前推进。事后证明这一轮面试的反馈确实不是很好。

随后 Alex 又约了我到 Microsoft 办公室进行一天的面试。早上到了之后他先让我参加了当天的 daily scrum,让我知道他们是如何工作的。接着是跟美国的总监通过电话会议进行面试,没有讨论技术问题,更多的是互相了解对方的工作方式,看看双方是否合适。接下来是跟北京这边的经理面试,因为团队在北京没有专门的经理,所以人事方面的事情就交由北京的经理负责。看到经理 Norman 的姓后,我就知道他是说粤语的,同时因为他一开始就说自己普通话不是很好,所以我就提议说不如我们说粤语吧,于是我就在 Microsoft 一天面试当中用到了英语、粤语和国语。Norman 问了基础的算法题和逻辑题,也聊了一下分布式存储的设计,同样我对后者回答不上什么点来。感觉 Norman 的题目很重视逻辑思维,在我说某一道基础算法题不能用贪心算法后,他问我使用贪心算法的充要条件是什么,同时另外一道逻辑题考的也是是否清楚充要条件是什么。

在 Norman 面试之后,他叫上 Alex 跟我一起去午餐,然后下午我跟中国这边的团队成员聊聊天了解一下他们的工作内容就完事了。整个过程并不是很难,也不会像 Google 那样专门考算法。感觉 Microsoft 更重视逻辑多一些,同时跟美国团队进行面试也确实比跟中国团队进行的面试要让人更舒服一些。(Alex 和 Norman 分别是在 Microsoft 总部和湾区工作多年的人,所以面试风格应该都还是很美国的。)我下午离开的时候,口头 offer 算是出来了,HR 在电话中说很高兴招到了人,并让我提交当前的薪酬信息。

由于快到过年了,提交薪酬信息的事情我一拖就拖了两个星期,过年回来后才提交。事后 HR 跟我说,进行第一轮面试的印度人对我不熟悉后端这一点表示有顾虑,其它人尝试说服他但是没有成功,所以 offer 出不来了。于是这个到手的口头 offer 就飞走了。

事实上,我在 Microsoft 的面试经历到此只不过是进行了 1/3,不过后面的我就不想详细说了。在我过年回广州放假的时候,有一位 Microsoft 的 HR 打电话给我问我面试时间安排的事情,我说面试不是结束了吗,然后才发现这是另外一个团队的 HR,并且她不知道我之前的面试,于是我又面试了一个不同的团队。因为前面所说的口头 offer 最终发不出来,Norman 把我推荐了给另外一位经理,那位经理又约了我进行了几轮面试。

总的来说,我在 Microsoft 的面试经历就是不停地被加试。加试意味着还不能确定,但又还不想放弃。不确定的原因自然是我没有后端经验,不放弃的原因估计是算法题和逻辑题我回答得还可以。最终我在 Microsoft 的 3 个团队中面试了 15 位工程师和 2 位 HR,还是拿不到 offer。Microsoft 的面试过程尽管没有 Google 那么体贴,但是安排还是挺专业的。因为 Microsoft 是各个招聘经理自己去招人,不像 Google 那样公司统一招聘,所以推动招聘进度的更多是招聘经理而非 HR,候选人也能直接感受到招聘经理到底有多在乎自己。

在整个 Microsoft 面试过程中,我觉得最有收获的是认识了 Alex 并且跟他聊了一些事情。我说如果有机会的话我想要体验一下在美国工作生活是什么样子的,然后才能知道我想要到哪里去。他帮我分析说去美国有 3 种途径:读书然后在美国找工作、加入美国公司的中国分公司后再找机会 relocate、直接加入美国公司,其中第一种方法最容易,第三种方法最难。他的首选建议是第一种方法,不过因为我短期内没有去美国读书的计划,所以第二种方法也不错。我觉得作为 mentor 最重要的是他要真的在乎你的个人发展,同时能够利用他的经验帮助你,因此我觉得 Alex 会是个很好的 mentor。在我加入豌豆荚后,他还联系过我,说 Microsoft 总部他所在的团队有职位开放,问我是否感兴趣。因为我当时刚刚加入豌豆荚,所以就拒绝了。

如果你对《面试体验》系列文章感兴趣,欢迎订阅我的博客,或者是在 Twitter 上 follow @CatChen。我承诺我接下来一定会完成 Yahoo 和 Facebook 相关的两篇文章。此外,我的博客也接受捐赠,通过信用卡支付,金额随意($1 起)。

最后是广告一则:如果有任何曾经参加过豌豆荚(豌豆实验室)面试的人愿意写类似的面试体验文章,欢迎联系我并把文章地址发给我,我愿意在我的博客上以链接的形式进行分享。

更新:Yahoo 篇》和《Facebook 篇》已发布。


2012年8月3日星期五

面试体验:Google 篇

尝试在自己的博客上搜索点东西,结果发现 4 年多以前还在博客上写过一系列的 recruiting events,把大四时候参加过的各种笔试面试都记录下来了。我从去年准备离开百度开始,到现在总过面试过 4 家公司:Google、Microsoft、Yahoo、Facebook,原本去年也想把面试经验写一写的,结果一拖就拖到现在。我不想写面试经验,因为我个人不喜欢漏题和背题的做法。我自己作为面试官,知道要设计出来一道好用的题目有多难,所以我希望面试者都是如实表现自己解题能力的。我更喜欢写面试体验,就是在整个面试过程中一家公司给人的印象是怎样的,HR 和面试官是否专业,能否让人信服这是一家值得长期工作的公司。

我想写的第一家公司是 Google,因为它是我在想要离开百度时第一家联系到我的公司。2010 年 12 月底的某一天早上,我突然感觉到我应该离开百度,因为如果这个时候已经没有勇气离开这家公司了,很可能就不会再想要离开了。当天中午在百度大厦西餐厅吃午饭,接到一个 Google 上海 HR 的电话,问我有没有兴趣去面试,我想既然你打电话来的时机那么好,我就答应你去面试吧。(在那一天之前,我对猎头的标准回复是「有美国或者香港的职位吗?」)她问我将来希望在北京还是上海工作,当时我对北京的厌恶程度还没有现在那么高,同时觉得搬家到上海又比较麻烦,于是就说在北京,接着我就变成跟北京 HR 沟通了。

Google 的 HR 会负责做两件简单得不需要面试官做的事情,这能够很好的提高招聘流程的效率。第一件是确认你能够适应工作环境中的英语,为此 HR 要我用英语跟她对话两三分钟,主要就是让我说说工作经验和其中的亮点。习惯在私企工作的人不要以为外企对英语的要求很高,其实大多数长期在中国工作的人说话或者发邮件都会很 Chinglish 啦,所以关键是要敢于用英语进行沟通。

然后 HR 发了一个 Codility 的地址给我,让我有空抽时间去做题。一个小时 3 道难度相当于 OI 基础题的题目,平均 20 分钟一道。最简单的题目一看就知道是 O(n) 能解决的,最复杂的题目看上去是 O(n^2) 但想一下就能优化为 O(n log n)。对于有算法训练背景的人来说,这样的题目会让人感觉到很有把握。对于没有经受过算法训练的人来说,掉进陷阱里是很容易的。很可能没有把 O(n^2) 优化为 O(n log n),结果超时;可能没仔细看题目说明的数值取值范围,某些变量选错了数值类型,结果溢出。考虑到 Google 重视算法的程度,再加上 Google 中国面试的额外难度,算法训练还是很必要的。

在我通过 Codility 测试后,HR 问我了对题目难度的反馈,然后约了一轮电话面试,并且告知面试主要围绕算法、数据结构、系统设计、编码来进行。Google 面试的格式都很固定,45 分钟内期望你能做出 3 道题来。这 3 道题最起码要能把人人都能想出来的「笨办法」用代码写出来,否则会让面试官感到不满意。如果有些题目能够比较快地做出来,面试官就会让你优化。就算你第一次给出的答案已经是业界已知最优解,面试官都还是会让你优化,因为谁也不知道有没有人能在面试过程中突然爆发,想出一些过去没人想到过的解法。如果面试官心中已有优化的方案,在你想不出优化方案时他可能会给你提供一些提示。

一轮电话面试后,HR 就开始约到 Google 办公室的面试了。第一次约了下午 3 轮面试,还是那个很固定的格式:每轮面试 45 分钟,两轮间隔 15 分钟。整个面试流程让人感觉到很人性化:在 Google 签到后,HR 会先带你去 kitchen 拿点吃的喝的,然后把你带到面试所用的会议室。多轮面试的话,HR 中间还会来问一下你要不要去洗手间,或者多拿两瓶水。面试完毕后 HR 会来问你感觉如何,同时也会让你知道面试官的初步反馈是否跟你的感觉一致。我在 3 轮面试中有一轮感觉不太好,因为面试官只给了 2 道题,并且我最终都没办法解出来,HR 也确认了就是这一轮的反馈不好。

此外,Google 的招聘流程还让人感觉到很有效率。作为面试官,我也知道自己写面试反馈有多喜欢拖延,而且公司填写面试反馈的系统越不人性化我就越想要拖延,然而公司内部系统做得人性化的又实在罕见。Google 的面试基本上隔天就有结果,然后 HR 就会约下一轮的面试。因为我在百度的时候每周哪个时间没有会议是很确定的,所以我总是选择下周同一个时间段来面试。在经过总共 4 轮面试后,HR 说因为前面有一轮的面试官反馈不好,所以希望再加一轮面试。因为前面反馈不好的面试官比较 senior,所以这次找了一位同样 senior 的面试官来面试,于是我又去了一次 Google 办公室。

完成 5 轮面试后,HR 把材料提交给 Google 的北京招聘委员会,结果没有通过。HR 说,因为 Google 都是按照后端工程师的标准来招聘,看重算法和数据结构,前端工程师要通过不容易。因为 Google 没有专门的前端工程师,只有一个软件工程师职位,所以所有人还是必须按照一个标准来衡量。她问我如果找到专门需要前端工程师的团队,并且需要额外再面试的话,我是否感兴趣。当时 Google 是我的第一选择,我当然说感兴趣啦。

后来 HR 跟我说,她帮忙问过 Google Maps,可惜对方说不要专才只要通才。又过了几个星期,HR 发现 IME 需要专门做前端的人,于是帮我再约了一轮面试。这轮面试是在 Google 办公室做的,但实际上是视频会议,因为面试官在美国。(不确定面试官是在美国出差,还是美籍华人。)面试过程跟电话面试类似,用 Google Docs 写代码,比电话面试要好的是说话时能够见到人。

这一轮面试结束后,我的材料再次进入 Google 的北京招聘委员会。HR 说这次专门找了对前端有经验的人来审阅我的材料,结果顺利通过了。接着 HR 问我要了一大堆的补充材料,包括高考成绩和 GPA(连同成绩单),还包括当前薪酬和竞争对手的 offer(我当时有 Yahoo 的 offer),甚至包括过去的获奖和晋升经历。所有这些材料都会发往 Google 美国总部审阅,具体流程 HR 没有细说,但看 Don Dodge 的文章可以了解一些。最后我被 Google 美国总部给拒绝了,然后 HR 还是一如既往地及时沟通,并且安慰了我几句。

整个 Google 招聘流程下来,可以感觉到人性化和高效率,同时也能感觉到 HR 确实在很努力地为候选人争取机会。可以说,无论是否通过,Google 招聘流程至少能给候选人一个很好的印象。据我所知,尽管 Google 声称全球招聘标准一致,但因为中国聪明且懂算法的人实在太多,所以难度更高是很正常的。能够在 Google 中国以外的地区应聘的话,应该会容易一些。

如果你对《面试体验》系列文章感兴趣,欢迎订阅我的博客,或者是在 Twitter 上 follow @CatChen。我承诺我接下来一定会完成 Microsoft、Yahoo 和 Facebook 相关的三篇文章。此外,我的博客也接受捐赠,通过信用卡支付,金额随意($1 起)。

最后是广告一则:如果有任何曾经参加过豌豆荚(豌豆实验室)面试的人愿意写类似的面试体验文章,欢迎联系我并把文章地址发给我,我愿意在我的博客上以链接的形式进行分享。

更新:Microsoft 篇》、《Yahoo 篇》和《Facebook 篇》已发布。