从码农角度谈谈Facebook的优缺点

标题有点 click bait,跟上次的真裸辞相比这次下家找得八九不离十了算是半裸辞,另外辞职也不全是脸家的问题。不过终于决定了下家去哪之后也算展开了人生新篇章,可以把承诺给大家的(Who cares)年终居家旅行上班划水必备良品总结一下了,自己整装待发的同时希望也娱乐一下大家。

我在一亩三分地和知乎都有号,之前有人盗帖已经被 Warald 亲自打脸抄送我然后把盗文者删贴扣分了,所以请某些人洁身自好,沦为跟营销号一样没节操。人都在美国了就别玩天朝贴吧那套了。

另外大量中英夹杂预警,不爽请提前退出不用留言告诉我了(Honestly why are you still reading my post)。

TLDR: Just get into FB (or better, Google) first and then figure out from there. 万一喜欢皆大欢喜,不喜欢想跳走也非常容易。

虽然平时在豆瓣上面没少黑你脸(见工作吐槽合集豆列,和“出道”日志就大黑你脸 ),但毋庸置疑 FB 作为一个工作选择优点还是很多的(我承认先写优点部分原因是被友邻指出我再吐槽你脸快要成为豆瓣低配版王垠了,没有垠神的技术还得了垠神的病,which I'm trying to avoid)。

1.1 The good

1.1.1 钱

普通小公司因为有明显 pay cut(Senior 及以上级别 up to or more than 50%),因此在此只比较 FANG 及同级别大公司。钱的优势不是指同 level 比较,而是同样年资、水平的普通人(非大牛)在工作几到十几年,在脸家可能招聘 bar/升职更容易(以下 level 仅针对 IC,individual contributor,不包含 PM,EM 等管理岗)。如 E4 远比狗家 T4 容易,E5 远比 T5 和 Amazon L6 容易,E6 - E7 比狗家 L6、7 常见,更不用说 Amazon 的 L7 了。E3 - E5 的情况基本确认属实,往上仅凭个人观测和道听途说,仅供参考。level.fyi 上有所体现,但现实里 zoom in 到普通人 level 里,差距可能比看起来更大。

拿脸家 E4 - 狗家 T4 - Amazon L5(SDE II) 来说:

- 脸家 more like ”能独立干活有一点工作经验的社招最低 level“,给的包比较标准不至于太掉价,但不是 terminal level,有升职时间压力,基本上 new grad 全 meet 从 E3 - E5 标准升职时间线应该是三到三年半,再慢有被 PIP 风险。社招基本 1 - 5 年经验常见 E4,上次甚至在见到一个 8 年经验的在有 compete offer 的情况下被 down level 到 E4 的,给的包可能还没人家在别处拿到的一半,也是没自知之明。

- Amazon 是能独立 deliver 在组范围内有影响力的大 project,但 range 也比较广,见过很多有一到三年甚至接近四年工作经验的人被 down level 到 L4 (SDE I)的,也见过许多靠谱实干的中年码农(七八年以上甚至十几年工作经验)的 SDE II,这两年有钱了给的 comp range 也比较大,基本加上 signon 勉强跟上脸狗两家,脸内部也是把 high level SDE II match 到 E5。L6 (SDE III,Sr SDE)前些年 bar 比较高,地里出了个 4.5 年升的前所未闻的大神,如果有人能在亚麻呆那么久的话从 new grad 到 L6 花六七年算是比较正常的时间,一直 L5 也不会有升职压力。这些年 bar 稍有降低,从外面招 5 年经验的也不在少数。

- 狗家则是疯狂 low ball down level,很多两三年工作经验优秀的码农都是冲着情怀和“进去马上升职”的饼 T3 进去的(当然也有面试出色拿到 T4 甚至 T5 的)。

虽然三家衡量标准不同但是 comp band 基本一致,这就造成了职业早期去脸家很可能在钱上就赢在了起跑线(据说狗家 refresher 多,但我没有特别关注过具体数据)。脸家的理论是我们 move fast 所以我们的人成长速度快,事实如何就见仁见智了。

1.1.2 福利

见识短浅的我只经历过著名血汗工厂的洗礼,这次找工作也大概瞥了一眼小公司的福利,对比起来 FB 真是对员工慷慨得很。开始对 FB 有 grudge 的时候也经常戏称 FB 是拿钱买幸福感。

先从我之前 take for granted 的医保来说,很多小公司是不 cover 员工本人月费的,甚至 frugal 著称的 Amazon 也不;Onsite mental health support 和 medical center 很多小公司当然也没有资源去做,更不要说免费 25 次 therapy 了;意外死亡险公司免费 cover 到 2X 还是 3X base,作为对比,我这次面的小公司有才 cover 70k 的——对,死了才给 70k;公司免费 cover 全球旅游保险,不管是 business 还是 personal trip;可以用来 gym membership、滑雪票或者 massage 的 wellness reimbursement 很多公司都有就不说了。

园区设施周到到 ridiculous——网红楼顶空中花园、鲜蔬现榨摊、种类丰富的零食、免费冰淇淋、奶茶、gym、boulder 就不说了,还有街机厅、音乐室、木工间、印刷馆、手工坊、献血点,人工免费的自行车店,收费修车、干洗、理发、牙医、massage、SPA……在在各个 campus 之间有内部 on demand 专车接送往返服务。真是牢牢把员工套在园区,生活服务一条龙,甚至园区本上都是个不错的旅游景点。

电子产品配件有免费 vending machine,电池鼠标 touchpad 这种东西直接自取。公司 Amazon business 账户办公用品、书什么的一定金额以下自动 approve。每四年还有 300 刀耳机 credit,前两年人手一副免费 QC35.

很多服务也有折扣,turbo tax 税后报销, 50% 的 headspace subscription,免费的 financial times subscription 等等。先前还有免费 lyft code,后来为了省钱取消了,改成发 corp commuter/parking card 了,也有每月几百块额度。

1.1.3 镀金

不需要镀金的大牛请跳过本段。对很多人来说,鄙视”工作这么多年了能炫耀的还只有学校/第一份工作的公司“在网上说起来轻松,工作了年发现很多人的高光时刻还真就那些了,如果对其他路线没有绝对激情的话走 easier path 并不可耻。

说来好笑,有个朋友吐槽他以前在某养老公司,social 圈里的人都爱理不理,进了 FB 之后立刻被积极 social。之前亚麻在简历上已经很好投了,但脸家更甚,部分小公司甚至会担心你 over qualify(面试都不给的很少,不过这种公司你八成也不会去)。甚至在 blind 上讲同样的话的仿佛你 credibility 都高了一些(对比起来目睹了很多 Amazon 的人被揶,大家也知道 blind 上大家多喜欢 troll 的,哪怕是严肃话题)。

所以非大牛 new grad 有选择的话,还是建议在职业早期进有名大公司远多过有些哪怕当时看起来 prestigious 的小公司,除非认定了那个公司是千载难逢的下一个 FB 能让你暴富。想要追求情怀等简历镀好金多几年经验什么地方都能投进去再去不迟。我工作短短几年已经见到好多当年逼格高的公司跌落神坛了(比如 evernote)。有经验的 recruiter 可能知道当年谁家 bar 高,但是市场上没有经验也不懂业务的 recruiter 多得是。过了几年你当年的 startup 不幸没有成为下一个 FB 甚至 Uber 的话,这些水 recruiter 眼里你的简历含金量打折扣。跟进名校镀金一样,进 FANG 盖了两三年的戳受益十几年。

1.1.4 内网

Workplace (一个类似 Facebook 功能的内网)用来工作是一大毒瘤,用来干其他的真是宝藏。包括——最详细真实无私的理财、职业经验,最好用靠谱的二手交易平台(多次货还没交钱就打来了),同事为你精选的最好看的猫狗视频和各种 meme 等等。我辞职的时候最怀念的不是福利不是经历而是内网。

1.1.5 Autonomy

虽然不敢保证每个人都有时间做 20% project,但是我见闻的组大多数都没有 micro management. 我第一个组没有 standup, 每天在工作组里 update + weekly meeting sync,后来大家甚至连 update 都不写了。第二个只有 weekly sync,到后来甚至 sync 也偷偷取消了。 self-driven 的人可能如鱼得水。

1.1.6 internal mobility

我换过一次组,基本上是 manager 挽留失败发现我去意已绝之后,我跟对面 manager 碰个头,俩 manager 碰个头就换了。IC 转 manager 应该也较为容易。不同职位转岗也见过(别的职位转 PM 等等)。

1.2 The bad

众所周知,大公司的组间差距很大,所以不排除我运气不好碰到许多问题,也不排除有些人碰到良师益友组。以下问题 case by case。

1.2.1 Messy code base and shitty code

我 Bootcamp 的时候发现整个 FB 还是 monolith 的时候震惊了,无法想象一个工程师数千(可能上万?)的互联网公司还是这样运作的。我这次在面的小到只有 200 多人的公司都要么已经有 micro services,要么正在 refactor/service split。这次求职一个面试官面完 system design 答完无题可问之后闲聊问我 FB 各个 service 之间用什么 protocol,我说是 monolith 之后他震惊了半天反复跟我确认了两次 I meant what I said。


有人认为(这么大规模的) monolith 也有好处,比如(更正,此段 pending monolith vs monorepo 的区别,我本意是吐槽 monolith 但是被友邻提示好像瞎子摸象了?)可以自由地去别的组别的产品的 code 里改代码(/更正完),take ownership. That's not my understanding of ownership though. 我认知中的 ownership 是在你的职责或者能力范围内积极工作、帮别人解决问题、self driven、不甩锅,不是医生在前线夺过士兵的枪扰乱战术去送死,不是园丁为了剪草坪而把你种在地上的菜铲掉,不是 loan agent 拿了你的 downpay 私自换了套抽成更高的房子卖给你。

然而现实里这不是一个几十人的 startup,任何东西都有一大堆 context。But here people have to go around changing other people's code without actually understand their code,更没有责任维护,one time hack and workaround are everywhere, 久而久之代码质量越来越差,连自己组都不知道很多部分怎么 work.

由 monolith 和没有 design 及 documentation 联合产生的问题是很多 service 没有 well structured or even stable API,顶多算一堆随手乱放的 functions。功能模糊,命名混乱,参数拆东墙补西墙,deprecation and migration 随处可见,只能一次又一次地”亡羊补牢“式 code quality 项目中大规模反复造 impact 互相消磨”升级“到新的一套轮回中。

Teams consistently migrate, update and deprecate things without communicating to either their upstream, downstream or each other. 本来经常维护、improve 代码是好事,但在没有 API doc,没有 context ,没有 timeline and milestone 协调下各自为政对整体效率是巨大的灾难。我见到过不止一次,正确的 document 给出完全错误的答案;大量 API 无法分辨新旧程度,也没有 guideline,用的时候没头苍蝇般瞎找或者在 Q&A group 里搜有没有人问过 hope for the best,push 的时候没有人 review;因为以为早就协商好的项目 dependency team 暗中 migrate API 导致 client team 发出去了 code review 才发现代码作废;Upstream partially migrated schema 导致中间层旧 code 在原地,按新方法写出来的跟旧 code 不兼容,且无法手动 fallback 旧方法,最后用更 hacky 的方法绕过本来是为了提升代码质量的 migration。

有一次我在 work group 发帖->ping -> cut ticket 了别的组一周,每次都反复被甩锅说不是他们的问题,为了 unblock 自己我去 office hour,A 告诉我啊这个问题我们已经在上个 release 修复了,我问哪个 commit 修复的,曰不知道。我回去查了所有 commit history 找到 suspect,问 diff 作者 B,作者说哈?I have no idea what does the code do。又 ping approve 那个 diff 的 eng C,C 说我不知道那个 diff 干嘛的,你问 reviewer D 他更熟. D:哦是吗?修复了?我:×%&……#¥……%

还有一次我要加一个新 logger,居然发现全公司的 logger 不分组不分功能全都在一个大 directory 里,然后下面的 sub folder 是按首字母命名的。比如 GoodDayLogger 会在 /go 目录下,BadDayLogger 在 /ba 目录下。When I saw it my face was like

从码农角度谈谈Facebook的优缺点 程序员 工作 IT公司 好文分享 第1张

bootcamp 的时候因为 package 太大公司发我的电脑甚至 index 不了 bootcamp Android project。

1.2.2 System design isn't a thing

我先开始以为是组的问题,于是在内网找重要 infra 组的 design doc,结果找到一张白板手写照片:)这还是好的情况,大多数组根本没有。

我又以为是我 level 的问题(meanwhile 几年前 new grad 的时候进 Amazon 几个月就有受益良多的 design review 了),参加了多次 tech discussion meeting 之后发现,不,我常接触到各 level 的项目都没有 design。我两天瞎凑出来的 tech notes 已经比组里我参考的所有 doc 都系统化了。其他亚麻前同事也碰到过类似情况。

甚至有想跳槽的同事跟我表达怕面试时候在 FB 的项目拿不出去手,不会 system design 题的担忧。虽然我用 Tushar Roy 安慰了他说突击就好,但是实际面试中还是发现 past experience 轮在 FB 的项目真的需要多层次加工才能说。高 level 可能有复杂的项目(which I haven't seen a single proper design doc),但同样的 entry level 亚麻和狗家的码农有 design review 和学习的机会可能更多。

1.2.3 Test coverage is surprisingly low

我听过不止一个人跟我说入职几年没写过 test。We just push the code and hope for the best. 虽然大多数 engineer 不喜欢写 test,虽然把 test 从个体 engineer 工作中分离出来是 test infra/process 成熟的表现,虽然 setup test run test 比在 Amazon 方便好几条街,但是在无需为 test 负责的情况下终究有很多没有 test coverage 的海量新 code 被生产——既没人知道 test coverage 百分比也没有 test 来测试被新写出来或者已经在运行的逻辑。加上糟糕的 oncall metrics, tools, alarms , documentation and triage,用户抱怨的边角 broken feature 再由客服层层传递踢皮球接到对的组手上往往几周已经过去了。

1.2.3 管理、维护机制成谜

多次发现以为已经协调好的组间协作等发 code review 给对方的时候对方甚至不知道这个项目的存在;Launch 了之后又要反复跟 marketing/legal 扯皮;甚至做好了个只管执行的 email 项目,准备发送之前跟我 PM double check did legal sign off for GDPR?My PM was like, what's GDPR? 过了两星期告诉我,还是先 hold off 吧,要 legal review。所以我要不是 happen to hear about GDPR complains from my friends at other companies we would be in deep shit now???

换了个组有 TPM 了想说话这下不会出现项目协调问题了吧。结果 TPM 除了在每半年的 plan meeting 上带着大家 review 一下要做什么项目之外就没见过人了。

另一个槽点是用 workplace 工作,每天早上看各组和关注的人综合 newsfeed 或者专门打开各个组看 post,日常工作可能来源于 post,task, direct IM ping,email,基本无法 track 的 workplace/intern notification……这里还夹杂着其他非工作内容群组,如 meme 群猫狗群生活窍门群公司福利群。There's no proper backlog grooming, sprint planing, milestone tracking。

我某个组的 dashboard/tool 多到一个 wiki 都写不下,那个 wiki 内部还有多层不同级嵌套,连组内的人都找不到应该用的东西在哪,更别说别的组的人来找资料了。

单就 oncall 就有若干个 tool 来 monitor metric/set and trigger alarm/find logs/file ticket,每一个都难用的要死,更别说光每个组的 runbook 就有三四套,根本不知道哪个是新的。 我就抱怨过:

亚麻出了问题:打开 sev tool,描一眼关键词通常已经找到原因,不行的话搜关键词,找到问题 p90 = 5s, p99 = 5min. Ticket 里条理清晰实时更新 root cause, solution, ETA。大问题过几天参加批斗大会,metrics/root cause/future task/ownership 一目了然。

你脸出了问题:打开 sev tool,描一眼关键词,没有一个 sev 把 end impact 写着,搜关键词搜 affected area,找不到。搜 work group,找到有人提了相同的问题,在下面 +1. 过一阵子等相应组 oncall 回应,然后有人说 shouldn't this be a sev,然后才开一个完全看不懂关键词的 sev。找到相应 sev 50% 靠相应 tool 里的弹框提示,50% 靠消息灵通人士把 sev 发到群里。 点进去 Sev 里不是相关组的人完全看不懂到底发生了什么,只能等老司机段子手们总结 TLDR。

1.2.4 急功近利

我切实听到过"This project won't have any impact this half so let's put it back in backlog”,即便所有人都知道哪怕一年内这个项目对全组和用户大有好处. 我 manager 在所有 eng 都觉得 plan A 好很多的情况下为了省两周的时间,跟我们争了两周应该用 hacky plan B(黑人问号)。

adhoc 地帮助别人最多获得几个 thanksbot,对个人 PSC 帮助甚微,很忙的 infra/internal tools team 有没有 support,support 质量如何完全看你挨个试出来的 POC 心情,甚至有时候 dedicated POC 也一问三不知。

宏观上来说,几个不同组做 slightly different 的东西,不完善旧的提高效率而是做完就扔着重新做一个的情况屡屡发生。往好了说这是我们 try and fail and learn,往坏了说是各组甚至各人反复造轮子,反正从 1 到 2 哪有从 0 - 1 写在 performance review 上好看。

1.2.5 Performance review related

因为横向对比经验较少(只有亚麻一家),此处只主观觉得 FB 的 PSC 问题很多。

全公司弥漫着最高目标是 PSC rating / 升职的气氛,应该跟年轻人们的升职 timeline 也有一定关系。这一点跟上面急功近利那一条也直接有联系。对比起来亚麻可能因为 band 较宽也没有 timeline,整体氛围中比较明显的目标还是 deliver project。

过于强调 impact,比如一个 engineering wise complicated or valuable 的项目,如果最终用户数据不好,是会反映在 IC 的 PSC 结果上的。理论上来说这是为了让每个人都 drive for the most impact,但是现实中做什么项目、项目走什么方向对初级的 engineer 来说根本 out of their hands。美其名曰失败的实验也是宝贵 lessons learned,但现实中没看到具体体现,做出来东西数字不好被用“impact”不够卡了 PSC rating 的还是屡见不鲜。

每半年一次的 PSC 声势浩大,跟 FB 有交流的外厂人员都能察觉到 nothing get's done two weeks before 7/1 and 1/1(后者本来就 holiday 还能忍)。这是理想状况,实际中 PSC 前后几个月全公司基本都生产力低下。

一个评价系统本身的问题是,四个评价的方向平均要求的教条标准。Engineering Excellence, People, Impact, Direction,看起来跟其他公司没什么两样,但是执行过程中 got carried away too far。如 People 本意是 better coordination, communication, mentorship, recruiting 等等,在实际执行过程中则变成半强制面试、带 intern/bootcamp mentor。公司缩招和 recruiting training pipeline 黑箱管理混乱把这个标准的良好初衷变得进退两难—— 一方面面试官被告知没有那么多面试机会,一方面继续拿面试数量当作 performance 的一部分。跟我同期入职的几个人 end up 在 reverse shadow 里排超过一年,meanwhile 被用 people impact 不足来卡升职/rating even though they did a ton of XFN work and got excellent peer feedback during PSC。然后这个所谓的 pipeline 并不像该司其他处处 over engineer 连发 tshirt 都有 self check tool 一样,是人工/邮箱 inquiry 并且得不到具体数据, 完全不透明,无论是 IC 还是 EM 多少次催都没用, 写全了 availability 也得不到面试(Bootcamp、intern 或多或少有类似状况)。作为对比,亚麻完全不面试也不带 intern 的 L6 都大把存在,喜欢面试的哪怕 L5 也可以自己去向 bar raiser 方向发展,想要 mentorship 的要到 intern 也不难(个人观察),几个考量标准有部分达到下一级标准就有 strong case,术业有专攻。

1.3 Verdict

综合下来,I'm not so sure should I recommend this place to average new grad or not. 一方面职业早期升职迅速的环境确实在物质,心理乃至社交圈上好处良多,被公司照顾的妥妥贴贴没有签证、绿卡、刷题压力也确实是个 relief,另一方面急功近利和 bad engineering practice everywhere 又让人怀疑普通 new grad 能得到多少真正的职业”成长“。不过转念一想,you can learn that shit anytime anywhere,还是不要跟钱过不去了。早早镀金再去追求理想/幸福也是个挺好的选择。

我当初也是抱着“反正不爱上班,不如去个钱多的地方上班”的心态选了码农这条路,也跳到了 FB。但是此基础上自身有了更多选择权之后发现老老实实当合格社畜的能力还是没有想象中的容易的。所以,才有了这次断断续续一年多的不如意之后的重新选择。

作者:黄信滚(来自豆瓣)