Facebook 的工程师招聘是比较中规中矩的,就笔者观察,算法题和设计题都比较流,并无很多“智商”陷阱,主要力求完成代码的速度和准确度。
每一位加入 Facebook 的工程师都会从 bootcamp 开始,即所有的工程师都会经过6周左右的“新手”培训,期间他们将了解学习 Facebook 的基础架构,聆听一些高级雇员举行的讲座,并且完成一些简单地热身任务。
Facebook 很注重工程师能够在自己喜欢或者擅长的技术领域工作,所以新加入的工程师可以在 bootcamp 后期开始寻找自己希望加入的 team, 并且他们被鼓励去完成这些 team 的技术任务,用来检验是否自己是否真的适合加入。
自由开放的潜在问题是会造成很多代码冲突,但 Facebook 依靠内部良好的沟通机制能很好的处理此类问题,从而保护了自由开放的技术氛围。
当然,工程师们通常会被告知一些坚决不能做的事情,比如随意查看或分享用户数据。Facebook 有许多监控系统来杜绝此类事情的发生。毕竟,对 Facebook 来说,用户数据是最为宝贵的财产。
与 Google 一样,Facebook 的企业文化也是以工程师为导向的。Facebook 的大多数员工都是工程师,其中最大的两个团队分别是 Engineering 和 Ops. 公司的高层管理人员以及高级经理的比例相对其他大型IT公司少很多。
另外,公司内有许多的产品经理。经理和产品经理的主要职责更多的是为工程师提供项目需要的资源。工程师可以修改一些尚在小范围测试的产品,并且可以随时提出新的点子。
为一个新方案寻找所有的资源是完全出于自愿的,绝大部分的 Facebook 工程师们可以决定自己想干什么。他们可以去找产品经理并且说,“这件事是对公司有帮助的,我想试试。”
通常,经理或者产品经理都会找出大家都比较认可的想法并且让工程师团队立即试试。一般情况下,产品经理都不会干涉工程师的个人想法。
在 Facebook,与其争论某一个点子是否值得执行,还不如做出 prototype 有说服力。
Facebook 黑客文化一个主要部分——迅速构建、发布产品,并且淘汰那些无用的产品。为了一个想法,工程师们愿意花费一周到一个月的时间来开发原型,并且会测试其是否值得推出。
Facebook 并没有相应的质量保证的职能部门。工程师们负责测试,修复漏洞以及成产品发布后的维护。对于内部的 Beta 产品,Facebook 向来是鼓励甚至强制每位工程师使用并且报告产品漏洞。
一般情况下,新代码会在每周二发布。考虑到 Facebook 几十万台服务器的规模,运营团队会将代码先发布到少数服务器上试运行,检查系统是否正常运行,然后慢慢增加。
如果部署时发现问题,那么修复工作将交付于工程师在线下完成,然后再将修复后的代码重新测试发布,如此循环。在代码发布期间,运营团队会使用 IRC 或其他实时聊天工具单独通知工程师,告知其提交的代码是否需要修改。
这样的运营机制确保了被提交的含有 bug 的代码不会被发布,从而确保了网站的高可靠性。另一方面,提交过错误代码的工程师并不会得到过多的责难,重要的是能够及时修复。
如今的 Facebook 已经是一个很具规模的上市公司,所以公司内部的团队和项目数量相当多。文化和管理也会稍有差异,但是工程师文化依旧被相当好地维护着,对于如此体量的公司,难能可贵。