当前位置: www.89677.com > 互联网 > 正文

【www.89677.com】在谷歌工作与在Facebook工作有何不

时间:2019-11-17 04:34来源:互联网
谷歌和Facebook,一个是高科技产业的霸主,一个是互联网时代的新贵,在IT人士看来,前者是世界上最具工作乐趣的企业之一,并且能提供极具竞争力的待遇;而后者则是个初生的孩子,

谷歌和Facebook,一个是高科技产业的霸主,一个是互联网时代的新贵,在IT人士看来,前者是世界上最具工作乐趣的企业之一,并且能提供极具竞争力的待遇;而后者则是个初生的孩子,但拥有庞大的潜力。近两年来,跳槽到Facebook的谷歌员工越来越多,包括谷歌地图之父拉尔斯拉斯穆森在内的诸多谷歌高管都选择了Facebook作为下家。那么这两家互联网巨头的工作环境又有何不同呢?

曾经在谷歌和Facebook都工作过的大卫·布拉金斯基为我们道出了在两家企业工作的不同之处。

按:这篇 How Facebook Ships Code 提供了大量的细节信息,之前已经有朋友提供了一个翻译版本,阅读之后发现有些许错误,并且原文有更新,所以基于前面的翻译版本我重新翻译了一个(完整的)版本。一并谢过。希望这个版本对大家也有所参考。

谷歌像研究生院,Facebook像本科学校

布拉金斯基说,谷歌人更重视研究和解决高难度的问题。在谷歌,所有事都必须精雕细琢,每一行代码都要写得很完美,每一个程序从一开始就为大规模的用户量而编写,有一大堆专家来专门审查程序的设计过程。

而在Facebook,只有在需要解决某个问题时,员工才会着手去做。大多数时候,Facebook的员工不会对项目进行调研,也不会去请教专家该怎样以“正确的方式”去做某个项目,他们所做的就是:坐下来,泡杯咖啡,开始写代码,然后保证这些代码能顺利运行。

我对 Facebook 的运作方式着迷。这是个非常独特的环境,很难被复制(这个方式并不适合所有的公司,即使有些公司尝试过这么做)。下面这些笔记来自我和Facebook的许多朋友的交谈,关于他们开发、运维与软件发布等方面。

谷歌以技术为重,Facebook更重视产品和用户体验

不夸张的说,谷歌是由工程师们建立起来的。布拉金斯基说:“只有在技术上达到高难度和高标准的项目才算完成了。”在谷歌,决定项目成败的大多是软件工程师们。

【www.89677.com】在谷歌工作与在Facebook工作有何不同,如何发布代码。而马克·扎克伯格则是“产品为王论”的大力提倡者,他花费大量时间来改进产品的用户体验,把网站的视觉效果和使用感作为最重要的评价指标,因此在Facebook,设计师们的话语权更大。

好像很多人都对 Facebook 感兴趣... 这家公司的工程师驱动文化(Developer-driven culture)已经被公众大加研究,并且其它其它公司也在探求是否/如何实现工程师驱动文化。Facebook 的内部流程实在够神秘,当然,工程师团队也会发布一些关于新功能以及部分内部系统公开备忘,不过这些大多数是"说明"类的文章(What),而非讲述"机制"(How)... 所以,外部人员很难明白 Facebook 的创新以及如何比其它公司做到更有效的对服务进行优化。我作为外部人员尝试深入理解 Facebook 的运作,汇集了几个月来的这些观察信息。出于对信息来源的隐私保护,我去掉了特定功能/产品的名字。我又等了6个月以后才发布这些记录,所以,有些信息肯定过时了。我希望发布这些信息会有助于了解 Facebook 的管理机制如何在组织中进行决策的推行而非逐步陷入混轮...很难说这与 Facebook 的成败或是 Facebook 的产品协作相关。我相信很多面向消费者的互联网公司会从 Facebook 这个案例受益。

谷歌的规模真心庞大,Facebook就小多了

在谷歌,可能有许多个团队为同一个项目工作,而他们彼此之间完全不认识,这就是一个有三万多名员工的IT企业的现状。当然这带来了文化的疏离感和员工间的不认同感,“有许多团队认为别的团队根本没有存在的必要”,布拉金斯基说。

Facebook的扩军进程虽然非常迅速,但要达到谷歌的员工规模显然还有一段距离。在Facebook工作的员工也许没法儿认识公司的每一个人,但他至少也能跟四分之一的工程师打上招呼。而且,除非必要,在同一个项目上不会有两个团队进行相同的工作。

*非常*感谢那些帮助我整理这篇文章的 Facebook 内部的朋友们。也要感谢项 epriest 和fryfrog 这样的朋友,他们协助我进行对本文进行校正、编辑。

谷歌比Facebook手笔要大不少

由于公司庞大的规模,谷歌可以在许多项目上下非常大的注,也有足够的资本去做一些改变世界的尝试,尽管其中的大部分失败了,但成功的那些的确非常牛逼。一般来说,投入在千万级别以下的项目都不在谷歌考虑的范畴之内。

记录:

谷歌的工程师良莠不齐,Facebook很多则年轻而缺乏经验

诚然,谷歌拥有一批世界上最优秀的工程师,是他们让计算机产业发展到了今天,但是其员工中也有很大一部分是本不应该被聘用的,但谷歌似乎并不愿意去改变这一点。这也是所有巨型企业的通病——其中一些会通过裁员来进行修正。

Facebook则是一个很爱炒员工鱿鱼的企业,这也让他们的工程师平均水平保持在很高的位置上。

  • 截止到2010年6月,Facebook有将近2000名员工,10个月前只有大约1100人,一年之间差不多翻了一番!

谷歌的管理层很重要,Facebook的经理们都是技术派

在谷歌,有一大堆的副总裁、董事、非技术经理和技术领导,“大多数经理们都非常能干,工程师们也很喜欢他们”,但是庞大的管理层也带来了不少“地盘之争”和各种层面上的意识形态矛盾。

几乎所有的Facebook管理人员都是技术型经理,其中有很大一部分是由工程师转型成经理的。在规模不大的Facebook,等级制度显得不那么重要,在公司里交朋友也更简单。

谷歌员工缺乏存在感,Facebook人对工作的参与感更强

大部分谷歌的雇员所做的工作仅仅是在已有的系统上添砖加瓦,增强其稳定性或者做出一些很细小的改变,所以他们很难感到自己真正产生了影响,直到产品正式发布的那一天。

Facebook的工作则充满紧急状况,工程师们要做的就是发现Bug,然后用最快的速度修复Bug,有Facebook员工说:“在Facebook的第一天,我写了一组代码,然后第二天我就发现这组代码上线了。”

  • 工程部和运维部是两个最大的部门,每个大概都有 400-500人。这两个部门人数大约占了公司的一半。

两家的基本工资相近,谷歌略高一筹

在工作待遇方面,谷歌会给予员工15%基本工资的奖金,还会为员工支付继续深造的费用,布拉金斯基也透露,如果你在谷歌工作,那么要获得一张斯坦福或者卡内基梅隆大学的硕士学位证会相对简单许多。

Facebook的奖金标准是10%,但是对于那些有着杰出贡献的员工,这个数字则是不固定的。这也是一个新兴企业和成熟大企业的区别。

有关福利

Facebook的咖啡很棒,还会为员工提供洗衣补贴,但谷歌也有,你还能随时品尝美味的食物,谷歌还拥有一个体育馆、一个舞蹈室、持续不断的有趣广播和定期的滑雪旅行,员工还能不时拿到免费的手机样品。

看了上面这些对比,你更喜欢在哪个公司工作呢?

图片和信息来源: businessinsider

  • 产品经理(PM)与工程师的比例大约为1-7到1-10。
  • 每个工程师入职时,都要接受 4 到 6 周的 "Boot Camp" 培训,通过修复Bug 和听更资深的工程师的课程来熟悉 Facebook 系统。每次 Boot Camp 大约有 10% 的人无法完成课程而被淘汰。
  • 培训结束后,每个工程师都可以访问线上的数据库【标准课程"能力越大,责任越大" ( "with great power comes great responsibility") 对此有阐释,另有一份明晰的"不可触犯的天条",比如共享用户的隐私数据】。
  • [修改, 感谢 fryfrog] "Facebook 有非常牢靠的安全保障,以免有人(你可以想象内部有人有这个权限的)不小心/故意做了些糟糕的的事。如果你已经"成为"了需要别人支持的人,事由将被记录,并且有谨慎的审计。这里不允许钻空子。
  • 任何工程师都可以修改Facebook的代码库,签入(Check-in)代码。
  • 浓厚的工程师驱动文化。"产品经理基本可以被忽略",这是Facebook一名员工的话。工程师可以修改流程的细节,重新安排工作任务,随时植入自己的想法。[评论] "本文的作者是一个产品经理,所以这个论断引起里我的注意。你看完整篇文章后会发现,很显然,Facebook 的文化实际上是拥抱产品经理的实践的,所以,不是产品经理的角色被忽略,而是,这家公司的文化看上去是想让"每个人"感受到对产品的责任"。
  • 在每月的跨部门会议上,由工程师来汇报工作进度,市场部和产品经理会出席会议,也可以做些简短的发言,但如果长篇大论的话,将如实反馈给他们的主管,"产品人员在上次会议说的太多"。他们确实想让工程师来主导产品的开发,对自己的产品负责。
  • 项目需要的资源都是自发征集的:
  • 某个产品经理把工程师们召集起来,让他们对自己的想法产生兴趣。
  • 工程师们决定开发那些让他们感兴趣的特性。
  • 工程师跟他们的经理说:"我下周想开发这5个新特性"。
  • 经理会让工程师独立开发,可能有时会让他优先完成一些特性。
  • 工程师独立完成所有的特性 -- 前端 JavaScript/后端数据库,等等所有相关的部分。如果需要得到设计人员的帮助,需要先让设计人员对你的想法产生兴趣(专职的设计师很少)。请架构师帮忙也是如此。但总体来说,工程师要独立完成所有的任务。
  • 对于某个特性是否值得开发的争执,通常是这么解决的:花一个星期的时间实现,并在小部分用户中(如1%的内华达的用户)进行测试。
  • 工程师通常乐衷致力于架构、扩展性以及解决"难题",那样能获得声望和尊敬。他们很难对前端项目或用户界面产生太大的兴趣。这跟其他业务为导向的公司可能正好相反,那些公司人人都想做客户能直接接触到的东西,然后会指着某个特定的用户体验说,"那是我做的"。在 Facebook,后端的东西,比如 News Feed 算法、广告投放算法、Memcache 优化等等,是工程师真正倾慕的项目。
  • News Feed 因为太重要了,扎克会亲自审查任何变动。这是个特例。
  • [更正, 感谢 epriest ]"所有的代码变更都要经过强制性的代码审查(比如一个或者多个工程师)。我相信这篇文章只是说 扎克并不自己审查每一个变更"。
  • [更正, 感谢 fryfrog ]"所有的修改至少要被一个人审查,而且这个系统可以让任何人很方便地审核其他人的代码,即使你没有邀请他。提交未经审查的代码,将被视为恶意行为"。
  • 工程师负责测试、Bug 修复以及启动对自己项目的维护。有单元测试和集成测试的框架可用,但很少使用。
  • [更正, 感谢 fryfrog ] "补充一下,我们是有 QA 的,只是没有正式的 QA 组而已。每个办公室或通过VPN连接的员工会使用下一版的 Facebook,这个版本的 Facebook 会经常更新,通常比公开的早 1-12 小时。所有的员工被强烈建议提交 Bug,而且通常会很快被修复"。
  • 回复:很奇怪只有很少的 QA 或自动测试 -- "大部分工程师都能写出基本没有bug的代码,只是在其他公司他们不需要这么做。如果有 QA 部门,他们只要把代码写完,扔给他们就行了" [编辑:请注意这是很主观的,我选择包括这部分内容是因为这和那些其它公司的标准开发实践完全相反]
  • 回复:很奇怪,缺少产品经理的影响和控制 -- 产品经理是很独立的和自由的。产生影响力的关键是与工程师和工程师的管理者搞好关系。需要大致了解技术,不要提一些愚蠢的想法。
  • 默认情况下,所有提交的代码每打包一次(周二)。
  • 只要多一分努力,终于一天会发生改变。
  • 星期二的代码发布,需要所有提交过代码的工程师在场。
  • 发布开始前,工程师必须在一个特定的 IRC 频道上候命,否则将会被公开问责。
  • 运维团队通过逐步滚动的方式进行代码发布:
  • www.89677.com,Facebook 有大约 60000 台服务器。
  • 有9个代码发布级别。
  • [更正 感谢 eriest] "九个级别并非同轴的(concentric)。有三个同轴的阶段(p1=内部发布, p2=小范围外部发布, p3=完整的外部发布),其余六个阶段是辅助层,比如内部工具、视频上传主机等等"。
  • 最小的级别只有6台服务器。
  • 比如,星期二的代码发布会先发布到 6 台服务器上(第一级),运维组会观测这 6 台服务器,保证代码正常工作,然后再提交到下一级。
  • 如果发布出现了问题(如报错等等),那么就停止下一级的部署,提交出错代码的工程师负责修复问题,然后从头继续发布。
  • 所以一次发布可能会经历几次重复:1-2-3-修复,回到 1, 1-2-3-4-5-修复, 回到1, 1-2-3-4-5-6-7-8-9。
  • 运维团队受过严格训练,很受尊敬,而且极具有业务意识。他们的工作指标不止包括分析错误日志,负载和内存使用状态等等,还包括用户行为。比如,如果一个新的发布导致一定比例的用户对 Facebook 功能进行声讨,运维团队将查看相关指标,可能基于他们的调查停掉该次发布。
  • 在发布过程中,运维组使用基于 IRC 的通知系统,可以通过 Facebook、Email、IRC、IM SMS 通知每一个工程师,如果需要他们注意的话。对运维组不做回应会被公开问责。
  • 代码一旦发布到第9级,并且稳定运行,本周的发布宣告结束 。
  • 如果一个特性没有按时完成,也没什么大不了的(除非外部依赖严重),下次完成时一并发布即可。
  • 如果被 SVN-blamed(应该指没按照规范提交代码会受到的惩罚)、公开问责(Public shamed, 示众?还是通告批评?)或工作经常疏忽就很可能被开除。"这是一个高效的文化"。不够高效或者不够聪明的员工会被剔除。管理层会在 6 个月的时间里观察你表现,"你不能适应这种文化,只能说再见"。每一级都是这个待遇,即使是 C 级别和 VP 级别,如果不够高效,也会被开除。
  • [更正, 感谢 epriest ] "人们不会因为导致 Bug 而被解雇,只有在发布他们的代码时导致问题,而他们恰恰又不在场(也找不到其他可以替代的人)"。
  • [更正, 感谢 epriest] "被问责不会导致解雇。我们特别尊重别人,原谅别人。大部分高级工程师都或多或少犯过一些严重的错误,包括我。但没有人因此被解雇"。
  • [更正, 感谢 fryfrog] "我也没有遇到过因为上面提到过的犯错而被解雇。我知道有人不小心将整个网站宕掉过。一旦有人犯错,他们会竭尽全力修复问题,也让其他人得到了教训。就我来看,这种公然蒙羞与被解雇的恐惧相比更为奏效"。

分析 Facebook 的研发文化如何随着时间演化是件非常有趣的事。特别是当公司发展壮大到数千员工的时候,这种文化是否还能够延续?

你觉得如何?在你公司里,"开发者驱动(developer-driven)文化" 将会可行么?

译者后记:很多时候是管中窥豹也是非常有趣的,而且,应该细致一点儿。另外,或许我们更应该关注为什么 Facebook 能够形成这样的文化。你说呢?

译者后记续:Facebook 能形成工程师主导的文化,应该和 Facebook 的产品形态有很大关系。毕竟 Facebook 人人都会用 Facebook ... 换言之,如果是 Amazon / eBay 这样面向商业的用户的公司,业务逻辑会让工程师陷入五里雾中。

--EOF--

延伸阅读:Hacker News: What I Learned from Zuckerberg's Mistakes

编辑:互联网 本文来源:【www.89677.com】在谷歌工作与在Facebook工作有何不

关键词: