下载APP
关闭
讲堂
算法训练营
前端训练营
客户端下载
兑换中心
企业版
渠道合作
推荐作者

125 | Facebook的黑客精神

2018-07-20 徐飞
技术与商业案例解读
进入课程

讲述:秭明

时长07:14大小4.34M

今天我们说到的 Facebook 黑客精神,并非是指 Facebook 培养了一堆黑客,有很强的黑科技,并在全世界各地研究各种安全漏洞,做出各种黑客应该不应该做的事情。在这里我们讲的黑客精神其实是 Facebook 对待软件开发的态度和方式。

Facebook 的创始人马克·扎克伯格有一句名言:“迅猛而动,突破前行”(Move Fast and Break Things)。这句话也成为了 Facebook 的座右铭。在 Facebook 的公司里,到处都贴着这句话。

这句话非常有名,它甚至深深地影响了整个 Facebook 对待软件开发的态度。那么这句话到底是什么意思,它带给 Facebook 的到底又是什么结果呢?

“迅猛而动,突破前行”的意思在扎克伯格看来,就是软件开发不要想太多,写出来的东西就发布出去,哪怕写出来的东西不太对,这里那里可能会有问题。如果出大问题的话,赶紧修好就可以了。

扎克伯格认为,让市场上见到东西的速度是很重要的。一个东西如果拖着,等久了可能就晚了,所以,他并不认同传统企业,乃至某些类似谷歌这样的互联网公司对待产品和代码的态度。

他觉得大家每个人就应该像黑客一样,在代码里乱改顺便把新功能实现了。然后可以快速地给用户用,这是一条正确的道路。

这是公司创始人的态度,并且是在公开场合多次强调的态度,所以它在内部的影响力可想而知。

于是 Facebook 内部有“Hack Everything”的传统,代码很多时候是怎么快怎么来,东西做出去如果有 Bug 再修,如果把已经有的功能搞坏了,修回来就可以了。这基本上在很长一段时间里面是整个 Facebook 公司的传统了。

这个传统是不是好,从软件开发的角度上来说,一个软件开发的团队,如果一直靠着“Hack Everything”的态度,不好好做架构,不好好测试一下软件,就直接把产品放出去,我个人是很难相信这样的做法是可以持久发展的。

因为软件代码的质量本身也是软件可以持续发展下去的基础。如果不好好维护,慢慢的,加一个新功能就会越来越难了。为了加一个功能付出的代价也越来越高了,有可能这个代价高到无法估计。

当然很长时间里,尽管业界很多人都认为这个想法做法是不对的,在 Facebook 内部这个做法一直大行其道。而这种做法也反映到了 Facebook 开源的产品的质量上。基本上,Facebook 开源出来的很多产品的代码质量是堪忧的。

比如说著名的 Hive,这是 Facebook 早年投了很大力气开发的 SQL on Hadoop 的产品,它的代码我看过,“快糙猛”绝非是一个谎言。Hive 这个开源项目的代码质量参差不齐,很多地方感觉像是从来没有在工业界正经写过代码的人写的,看起来真的有一种让人不舒服的感觉。

当然除了 Hive 以外,Facebook 的另外一些开源项目的代码质量也同样受到了质疑。这些代码质量差的开源项目,和谷歌极少数虽然开源,但是代码质量犹如艺术一般的项目比起来,我只能说,真的很难想象为什么这是两家齐名的公司,代码质量却大相径庭。

在很长时间里,我们其实并没有注意到 Facebook 内部是不是真的为这种黑客精神付出了代价。当然我个人是一直坚定地相信这个代价是迟早要付出的,而且等到发觉的时候,代价可能已经很大了,大到需要付出难以承受的成本才能够修复了。

不过,2014 年在 Facebook 的 F8 开发者大会上,做 Keynote 的扎克伯格,把自己说过的这句话改了。新的版本变成了: “迅猛而动,稳定架构”(Move Fast With Stable Infra)。简单一点来讲,整个基础架构需要足够稳定的前提下 Move Fast。好了,扎克伯格终于改变主意了,再也不说突破前行了。

当整个代码被无休止的“Hack”,天天“突破前行”以后,现在,整个 Facebook 面对的东西是没有什么不能被突破的。怎么办呢?老老实实回头该补的补,该修的修吧。不补不修,房屋天天漏水,还怎么装点门面迎接客人啊。

这种修补的代价是非常巨大的。我在微软的时候,见过一些开始写得乱七八糟赶时间赶进度赶出来的代码,代价就是这些代码要一个模块一个模块推倒重来,在上面修修补补是没有办法修好的,这需要很多的人力物力。我参与过的一个项目投入了 10 个人,做了 18 个月,做完之后总算是看起来能够看了。

我一直有一个困惑,到底是什么让扎克伯格相信他自己的黑客理念呢。只要发布产品足够快就不用付出代价吗?扎克伯格是一个非常聪明的人,而且他周围应该也不缺人告诉他,这个想法的问题。那么在这个背后,扎克伯格想的到底是什么?这个问题我一直没有太多的答案。

一个可能是早年创业的时候,刚开始运转的话,扎克伯格的想法是对的。一个公司如果连生存问题都不能解决好,那么代码质量到底有多重要,也只能是以后的事情了。

虽然说谷歌从一开始连生存问题都没想好怎么解决的时候,就对代码质量要求很高,但是谷歌毕竟是个例。无论如何,有可能是扎克伯格的创业公司的经验和梦想在 Facebook 变大以后依然在,并未与时俱进。

另外一个可能是扎克伯格从来没有在大公司实践过,所以他固然是一个天才,却不知道在什么样的时候,这种黑客做法会对公司造成伤害。

这种伤害可能还是非常巨大的,所以在 2014 年,他作为公司领袖,才必须再一次通过他自己的嘴巴告诉大家,他错了。

但是不管怎么样,我们必须看到,榜样的力量是无穷的。因为扎克伯格的观点,很多硅谷更新的创业公司做法都是快糙猛,当年的谷歌那样对待代码的精神,对于现在的公司来说,已经荡然无存了,这在一定程度上造成了开发人员平均水平的严重下降。

扎克伯格在 Facebook 倡导的黑客精神,如果只是影响了自己公司,那么破坏力还小一点。如果影响了周围后来的很多公司,这种破坏力,我有点不好估量了。所以,虽然 Facebook 今天已经强调一个稳定的架构是很重要的,但是很多后来的公司其实并没有听进去。

而且,从 Facebook 内部看,这个黑客精神其实仍然根深蒂固。比如说在 Facebook 的很多组里进行绩效考核的时候,会先看一个人到底写了多少行代码,行数多的人比写的行数少的人,绩效考核就会更高。这种纯粹以代码量来考核的做法,无疑是当年“迅猛而动”的遗留问题。

代码质量问题是每个大公司有效率分工合作开发的基础。很多时候,代码质量问题,也是从一个创业公司到一个成熟大公司的过渡过程中,一个巨大的挑战。不少公司都会选择严格对待代码质量问题。

但是 Facebook 却选择了一条截然不同的道路,它们提倡代码的黑客精神。这给 Facebook 自身的发展带来了很多负面影响,同时,也因为 Facebook 的影响力,这给整个互联网行业都带来了不好的风气。Facebook 的黑客精神所造成的负面影响,不容易消除。

© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
124 | 如何通过企业技术积累去分析一家企业?
下一篇
126 | Twitter:蓝色小鸟还能飞多久(上)
 写留言

精选留言(8)

  • 幻想
    2018-07-21
    3
    哈哈,好文章。
    展开
  • Dr. ZZZ
    2019-01-13
    2
    哈哈,飞总总结得很好!我本人就是在Facebook工作,加入后,才体会到公司贯彻快糙猛很彻底。 其实本人也一直从事数据库方面的开发,原先是在Pivotal Greenplum里做Query Optimizer ORCA的。后来加入了Facebook, 虽然没有接着做这块(主要看了Presto, 感觉好像不是很看好),但还是对大数据这块非常关注。 读这个专栏,学到很多。不知道飞总现在还在西雅图吗?有机会来湾区很想当面认识您,再谢谢您的专栏。
    展开
  • Dr. ZZZ
    2019-01-13
    1
    再和飞总说个我自己参与的大数据相关的创业项目,离开Pivotal当时是因为在Pivotal的director做了这么多年数据库意识到一个问题就是,即使后面出来的数据库性能更高,还便宜,但想要从老牌数据库公司挖客户(比如Oracle, Teradata) 还是很难,痛点就是migration。即使application code用的是jdbc或者odbc, 正真migrate起来也不是换个driver就行,更别说很多老客户用bteq这种原生client. 这个director (Florian Waas)出来就创立了Datometry,我就当时也心一横也扎进去啦。Datometry version就想做vmware in terms of database,作为一个中间键,连接在客户的application和后端新数据库之间,而且保证底层协议端完全兼容(客户端相当于只要改个数据库ip地址就行),然后对所有请求,做runtime transfer和rewrite外加结果集的转换。我在那做了两年多,后来因为感觉发展有些缓慢,而且公司也经历了多次pivot, 外加也想尝试些新东西就离开了。那个时候我们已经有不错的POC版本,前段可以支持teradata, 后端支持psql兼容的,比如Grrenplun, redshift. 但感觉离production ready还是有距离,诚然,我觉得技术上难度挺大的。 已经离开两年了,感觉现在还是不瘟不火。很想听听飞总对这样一个公司和技术的理解。多谢。
    展开
  • bili
    2018-11-23
    1
    A Philosophy of Software Design第三章也用Facebook为例讨论了类似的主题。文中定义并比较了两种编程模式:tactical战术编程着眼于尽快实现功能,而与之相反的strategic战略编程则着眼于好的设计,顺便实现功能。短期来看战术编程能更快出活,但长期来看由于技术债越积越多,开发效率将落后于战略编程。很多公司刚起步时会想着设计好不好以后再说,这里最危险的点在于,一旦有了拖延的想法,明日复明日,最后可能就积重难返了。作者提出的建议是,好的设计一开始就需要是目标之一,可以调节这方面投入的比例,但不能是零。Facebook作为反面教材在书中自然也是被大肆批判了一番。
    展开
  • ByteFeng
    2018-07-21
    1
    你的公众号的名字是什么,我去关注关注。还有你平常写不写技术博客,或者看不看技术博客,有没有,在大数据领域,技术博客写得不错的,推荐推荐。

    作者回复: 飞总聊IT

  • epos
    2019-05-02
    Move Fast and Break Things 这句话在企业创业起始阶段 是最大的优势
    展开
  • Panda
    2019-02-26
    FB 虞兮虞兮奈若何
    展开
  • 逝水流年
    2018-12-14
    大开眼界啊 很有意思
    展开
收藏