🍩 WMC's Blog

God's in his Heaven - All's right with the world

我在 Facebook 的第一个 cycle 的工作体验

自从我来到 Facebook 后,加入我现在的组也有一个 cycle 了,随便写一些感想。

技术

在技术的角度上,我认为 Amazon 和 Facebook 是两个完全截然不同的例子。

在 Amazon,可以说在公司层面的 infrastructure 非常统一(AWS),但各个组所使用的编程语言和技术栈千差万别。Amazon 自己本身就是 AWS 最大的用户之一,这无疑会给 AWS 的用户体验带来积极的反馈和影响。相比而言,Facebook 在编程语言和技术栈的层面上可以说是相当统一的,几乎所有的组都会使用相似的技术栈。就 Web 开发来说: 前端使用 React、GraphQL、以及一种和 TypeScript 非常类似的类型系统;后端使用一种 PHP 语言的衍生语言 Hack,它特有的类型系统规避了 PHP 语言中容易产生歧义和错误的部分,从某种意义上可以说和 Java、C++ 等面向对象语言已经差别不大了。

在 Amazon,各个组的代码由各个组来管理(可以说是一种“ownership”的体现吧)。而 Facebook 所有的代码都在几个大的仓库内(其中 Web 代码独占一个仓库)。与大多数通常使用 Git 或 SVN 作为版本控制的企业不同,Facebook 使用 Mercurial(通称 hg)作为版本控制,每个开发人员都要尽可能从生产环境主线上分叉和提交代码,在经过同事的 code review 后,最终合并到主线上,并在合并到生产主线上后由强大的 CI/CD 系统直接部署到生产环境(可以说这非常符合 Facebook 的“Move Fast”和“Make Impact”的文化)。Facebook 甚至还有自己定制版的 Visual Studio Code,不但可以在几秒钟之内一键申请预先配置好的开发环境,还有各种插件优化开发体验。

沟通

Facebook 的内部沟通方式无疑是其最有趣、也是其与其他公司区别最大的地方。

在 Facebook,尽管每个员工都有自己的企业邮箱,但其通常的用途只是用来预定会议(使用 Outlook 的公司可能比较熟悉这种使用方式),并不是主要的沟通方式。在 Facebook,不论是大到覆盖全体员工范围的通知、整个大 Pillar 范围内的沟通,还是小到组与组之间、员工与员工之间的沟通,都通过 Workplace(企业版本的 Facebook 网站)、以及与之配套的 WorkChat(企业版本的 Messenger)。当开始一个新的项目时,我们通常会设立一个 Workplace 群组、以及和群组相链接的 WorkChat 群组。除了在 WorkChat 群中直接发消息之外,当有一些比较适合“异步”讨论的事情,比如项目有新的进展、或者有需要讨论和确定的问题时,我们就在这个群组里面发帖子,同时 @ 相应的负责人。

Workplace 无疑对公司层面的透明度和信息流动性起到了非常大的作用。举个例子,当我发现 Facebook 定制版的 Visual Studio Code 编辑器出现了问题,我可以加入相关的 Feedback 群组,在其群组中发帖,相关负责人就会回复问题的处理进展,同时也能够帮助到遇到相同问题的其他人。公司内还有许多编程语言和框架的群组,每天都有人在其中提问和解答。

Workplace 同时兼具着公司范围内的社交属性。除了正常的工作群组以外,还有不少各种各样的社团,甚至还有一些群组专门用来发各种笑话(其中还有一个中文笑话群组,每天都有同胞发各种中文梗)。我在 Anime 群组中晒初音未来的手办的帖子有不少同事点赞,甚至还有同事跟着晒出了自己的手办。

Hatsune Miku Autumn Figure

当然,除此之外,Facebook 最最有意思的地方,就在于点赞 / reaccs、以及 meme 表情功能几乎无处不在,几乎涵盖了所有的内部工具——不论是内部使用的类似于 Jira 的项目工具、还是 code review 平台、以及各种内部工具的评论时间线,甚至还有一个专门的页面用来供员工上传自己做的表情包,可以说是 Facebook 作为一个社交属性的公司最最有趣的地方。

经历

在我加入我所在的组不久之后,我便突然被卷入了一个大的项目中,经历了三个月的四人小组集体赶项目的 deadline 的时光。每天早上十点进行一次 sync-up,快速开发出第一个版本后,进行了小范围的测试,又快速消灭了大多数严重的 bug。这段经历可以说是非常难忘的,除了熟悉了组的主要项目和业务、熟悉了 Facebook 的技术栈风格之外,还学到了一些 React 和 JavaScript 奇技淫巧,同事在 code review 中点出的问题和建议也都十分真诚。

不知不觉中,这一个 cycle 很快就要结束了,公司即将迎来圣诞、新年双假期。就代码量来说,我这个(由于入组时间晚了一些、因此比正常的 cycle 短了一些的)cycle 的代码行数竟不逊色于组内其他的老人,可以说是收获颇丰。昨天,在和我的 mentor 今年最后一次 1:1 时,我们互相感谢了对方的帮助和付出;今天,在和招我进组的 manager、现在是我的 skip manager、不久后由于大组的 reorg 将不再领导我们组的大 manager 进行了最后一次 1:1,也特别感谢了他:“I feel so grateful to have you as my first manager.”

这几个月的经历让我相信,工程能力也许能够说明一些事情,但起到决定性作用的还是对工作的态度。在加入我所在的组之后,我遇到了这些技术上卓越、同时乐于帮助其他人、并且对待工作充满热忱和责任心的同事。可以说,这些人并不是因他们拥有大公司的光环而优秀、而是靠着自身的能力而脱颖而出。希望自己也可以成为一个永远真诚地向所有人提供帮助的人——以自己的方式、做自己热爱的事情,对自己的工作认真负责、对遇到的每一个人心怀感激。

我在 Amazon 北京时,曾经听说过在 Amazon 有一个特别的词“day 1”,用来形容有着初创公司的风格、仍然保持着热忱和进取心的人或企业。希望我们每一个人在工作岗位上的人都能够永远 day 1,永远热泪盈眶。

Facebook Sign