大师兄

125 | Facebook的黑客精神

今天我们说到的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的黑客精神所造成的负面影响,不容易消除。