编程学习网 > 程序人生 > 程序员面试技艺 > 在 Facebook 做工程师的工作体验是怎样的?
2014
11-11

在 Facebook 做工程师的工作体验是怎样的?

Cat Chen,Facebook Front End Engineer:

理想的一天生活是这样子的:

07:00 起床
07:45 开车去公司
08:00 把车停在 Building 14,走过去对面 Building 19(也就是 Fitness Center)运动
08:45 运动完洗澡
09:00 把车停到 Building 18,进去 Cafe 18 吃早餐,通常是白粥、薯饼、水果、鲜榨橙汁。
09:30 开始工作
12:00 看看 Facebook Culinary Team 的页面,然后决定中午吃什么。如果两个 Cafe 看起来都不好吃的话,我会选择去吃汉堡。偶尔也会去吃公司唯一不免费的午餐,也就是寿司。
12:30 看心情决定是否去甜品店吃雪糕,然后回去工作
15:30 在众多 micro-kitchen 中随机挑选一个离自己比较远的过去拿零食,路上碰到谁就随便聊两句
18:00 再看看 Facebook Culinary Team 的页面,决定去哪里吃晚餐
19:00 开车回家,回家后有可能还需要处理一下工作的事情
23:00 不知道为什么就该睡觉了
考虑到不是每一天都能理想地早起,有时候我也会下午或者晚上去运动。

工作的话,其实说不出跟其它科技公司有什么非常明显的区别。文化、流程、工具上的差别,其实都是挺细微的。

--

我明白大家想了解具体工作上的体验,但这其实很难说。如果你有在美国类似规模的科技公司工作经验,当我说「差不多」的时候你就已经明白我在说什么了。如果你没有这样的经验,那就如同要像一个只有中国驾驶经验的人解释美国公路的驾驶体验一样难。

da5ec6ac347b2d5af877ebaabdd52ce2_m

一条单方向 4 车道以上的高速公路,所有人都开到 100 kph 以上,很少有人在车道之间不停地穿插,你也几乎不用考虑超车因为整体车流的速度是一致的。你没体验过的话,能明白到这和中国道路的区别吗?也只能通过图片了解最表面的现象而已吧。

如果要跟中国公司对比,最显著的体验区别在于同事们都很 helpful。一般技术问题,曾经做过有知识背景的人会很乐意花时间跟你解释清楚,不知道的会直说「to be honest I don't know」而不会乱忽悠你。我新加入一个 team 后,跟这个 team 上下游工作相关的好几个人都约了一个小时的一对一聊天,以了解他们的工作是什么,会如何影响到我的工作,我如何做才能更好地配合他们。他们都很乐意花时间向我这个新人解释各种细节问题。如果是实际任务,觉得有能力解决问题的人会主动说「I'll take this」,不会像中国一样把任务踢来踢去最后没人承担责任。

至于 code review 的反馈,尽管语气有时候可能比较不考虑别人感受,但讨论问题还是很认真的,代码怎样写更好就该怎样写。很少有代码应付性通过 code review 就为了尽快 merge 的。做 code review 的人也不会觉得自己是白白帮忙对自己的任务还无帮助的,因为确实能学到东西,提出有效的建议也确实是在为公司产生价值。在中国,code review 很多时候感觉就是纯粹帮忙,应付性通过就好了。看的人其实不是很想看,写的人也不是很想接受别人的反馈做调整。

此外在美国 peer review 是能够 work 的,大家都愿意诚恳地说出别人做得最有价值的事情和有待改进的方面,通常会提出建设性意见而非抱怨别人不好的地方。在中国大家就算明知道是对方看不到的内容,但在写的时候还是会给面子不愿意说真话。

大家都觉得我把 Facebook 工作说得很轻松的样子。其实 Facebook 是一家很实际的公司,也有过因为表现不理想而炒人的案例,因此而产生了一种我认为很有趣的现象——在 Facebook 外的人,都「听说」Facebook 工作压力很大;实际在 Facebook 工作的人,都不会说觉得工作压力有多大,就是「正常」或者说是「跟同类公司差不多」。(我入职前曾经因为外面的人都说 Facebook 工作压力大而专门了解过这个问题。)

我觉得这是很正常的。如果一个人在 Facebook 工作,觉得压力正常,那就是及格的员工,他可以自由选择是否更积极上进一些;如果一个人在 Facebook 工作,觉得压力巨大,那说明这份工作超出了他的能力范围,炒掉是合理的。

可能很多人觉得,越是激烈竞争才能获得机会,在得到后就必须付出越多。这是个让得不到的人很安慰的想法,但事实上不是这样子的……真正的付出是发生在这个机会得到之前,而非之后。之后的付出,则应该投资到下一步的职业发展目标上。

Daniel Gao,Facebook Software Engineer:

CAT同学说的是到的比较早的工程师的STYLE的,我说一下我见到的到得比较晚的类型的好了

12:00 来到公司,开始看下邮件
12:30 看下哪个CAFE的东西比较好吃,和同事去吃饭
13:00 开始工作,工作内容通常包括写CODE,开会,讨论,CODE REVIEW
16:00 心情好又比较闲的话会去园区内的雪糕店吃雪糕
17:30 去公司里面的GYM做运动,或者绕公司园区跑步。也有人选择去BUILDING 16的二楼打游戏,游戏机的类型和大家小学时候经常打的街机差不多,例如街霸,泡泡龙之类。
18:30 选个CAFE继续吃饭
19:15 吃完饭到处走走,和同事们聊聊天
19:30 回到座位继续干活
20:00 - 1:00 看项目进度和心情,选个时间离开公司
另外随便扯下几个大家可能会关心的方面,写代码写多了文笔不好,大家见谅。

关于在FB工作的压力: 压力这种东西肯定会有的,正如香港巴士阿叔所说"你有压力,我有压力",只要自己正确对待就好了。我个人的感觉是还算可以接受,比起ORACLE之类的估计要辛苦不少,不过也不至于会很夸张,踏踏实实干活,然后注意选对有影响力的项目去做,最后一般都不会有什么问题。

关于FB的工作风格:FB的工作格言之一是MOVE FAST AND BREAK THINGS. 所以FB做东西的风格就是都很快,不会太瞻前顾后想太多,很多项目决定都是几个engineer大家讨论一下觉得没问题就开始动手干。这种做法的好处就是通常一个产品很短时间就能做出来,缺点就是有时候因为考虑得不够周全,最后需要加新feature的时候拓展性会不够好,变得可能要用一些比较ugly的方法去修修补补。不过我自己倒是还是挺喜欢这种干事风格的。

关于CODE REVIEW: 没有什么特别的地方,规定是每个diff都必须被review才能commit到代码库。Reviewer一般都比较严格,也看得很仔细,有时候甚至会和你说整个approach都有问题,让你换个方法重新写过。 所以有些比较大的DIFF来来回回个7,8遍是很正常的事情,一般学乖了的都会把大的DIFF打成几个小的,这样reviewer看起来方便,也更易被accept。如果有你的diff有bug, 基本上都会在这个阶段被看出来。code review对保证代码质量是很重要的一个方面,特别是对FB这种基本没有什么QA的公司。

Overall 我个人觉得FB还是一个非常适合喜欢互联网这一行的人工作的地方,特别是对于年轻人更是如此,这里基本没有太多的论资排辈,大家都可以很平等的交流,也有很多的大牛可以给你学习。办公环境也很开放,方便大家相互之间交流,虽然我觉得开放的有点太猛了,整个办公区的桌子摆放方式基本上可以参考国内的网吧,桌子和桌子之间完全没有任何阻挡的东西,你在干什么周围的人都看得一清二楚。上个图片你们看一下就知道了。

1b15a85c84adc25cf977f86c37ef3057_m

我个人最喜欢的在FB工作的一点是你会有充分的机会去选择你想干的project,而且因为FB相对的人比较少,每个人都能够在自己所做的项目中担当很大的一部分责任,你会有机会参与到项目的各种决策和讨论当中,有感觉自己是这个项目的owner, 而不是一个事不关己的旁观者。 我觉得这点和国内的区别还是比较大的,国内更多的时候都是tech lead或者manager分配好了活让你去干,至于你喜不喜欢,who cares?

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取