这是一个用行动创造可能性的时代——极客工程师们,在不断集聚自己的能量,从0到1,走向自由。而在互联网创业中,开发、设计商业,三力需要紧密相接,不愿安于现状的代码狂人、设计创客,来到了Design Matters 2.1的创业沙场!

 

赵海平:如何搭建早期团队的黑客文化

  • 从小酷爱编程,多次获得中学生计算机竞赛的各种奖项,1987年以河北省高考状元的优异成绩进入北京大学生物系,又在美国纽约大学获得分子生物学硕士,其后放弃博士学位,进入普利斯顿获得计算机科学硕士。

  • 曾就职于微软公司,2007年加入只有不到50个软件工程师的Facebook,致力于软件性能和架构分析,在此期间创建了HipHop项目,重新编写和实现PHP语言,使其速度提高5到6倍,为公司节约数十亿美元。HipHop项目之后,致力于“用异步处理来优化分布式系统”的设计理念中,并为此做了多项分布式数据库的优化研究,在PHP语言中加入了yield和generator的新功能,来帮助日趋复杂的Facebook网页设计。

  • 目前已经回国,加入阿里巴巴,将重点攻克软件性能以及Java使用过程中遇到的技术问题。

 

完整演讲视频

 

如何搭建早期团队的黑客文化?

刚才范凌有句话讲的非常好,他说:“我试图创造艺术,但是是否成为的了艺术不取决于我,而取决于上帝。”这话我觉得说对了一半,但是为什么,我待会儿就解释。

facebook-what-do-infants-have-become-giants-01

我回国很奇怪很多人从来都没有用过Facebook,我也很奇怪中国不让Facebook进,但是大家都知道Facebook是怎么一回事儿。所以我想,Facbook应该是做出了一些成就吧。它的曾就究竟在哪儿呢?在于他帮助大家去communicate(沟通)。在没有Facebook或者微信朋友圈这类产品之前,大家离开了学校之后就很难再联系。而有了朋友圈,好几年不联系的朋友一下就熟络回来了。所以在Facebook工作,communication大家聊得很多:究竟人之间应该怎么沟通。我觉得,沟通最重要的是知道你在想什么,你想从我这里听到什么。所以我这次来,我也得知道听众的意愿。

我猜下,既然大家都是创业的,很想知道Facebook是怎么成功的。这里可能有个错觉:Facebook的成功之道可以照搬。但是,这个情况绝对是不一样的。如果让我回到七八年前,回想起湾区的各类startup:随着web2.0的兴起,大家已经开始强调网页的设计感。技术上也成熟多了,javascript、 html和css也渐渐完善了,允许漂亮的网页设计。那时候很多公司就提到了hack这个概念了。

 

Hack是什么?

Hack不是我们正常认知下的黑客,嵌入别人计算机什么的,而是用非正规的手段,很low的办法把东西做出来,而不是用高大上的做法。Facebook讲求很快地把一件事情做出来——quickly crank up something。有些不择手段,并没有太在意质量,而求得是速度。其实说心里话,八年前的Facebook、并没有把hack当成核心文化,但当时人很少,总共二三十个工程师,你不可能做产品做到最完美的时候再上线,这样一个人要累一个星期,甚至是一个月半个月才能够做好。所以这样的工作方式很快被工程师接受,把东西很快地攒出来,就上线了。

但这样的快速上线反而对于facebook早期的发展是很有帮助的:因为当年大家对于朋友圈这样一个产品的发展没有一个很清晰的发展方向。我们做startup、做产品总以为我们了解用户,做的都是对的。我里面有很多想法能让用户特别舒服。到最后会发现,产品并不受市场欢迎。这个产品好不好用并不取决于你,而是用户和市场。当用户说这个东西我并不想用,你就会很失落。所以在facebook早年,生产产品是很快的,就是iterative design(重复设计)。

换句话说,我不求一次完美,但是我要很快地能够得到用户的反馈,再由他们告诉我这个方向是正确的还是不对的。抓住了这个方向,就是成功的关键。对于startup来说,这个至关重要:如果你对一个不正确的方向commit太深的时候,是很浪费的。之前facbook在做通讯录,就强调通讯录的完整性和正确性非常重要。我要确保我的所有朋友的通讯地址、电话都是最新的,可我们并没有制造一个网页让大家去利用这些信息。但是这么看来早起的facebook就是走错了方面。在startup里决定方向的人很少,所以你的想法会有所偏颇。那怎么不偏颇呢?就是快点儿把你的东西拿出来,拿到市场上去给大家看一看。

为什么说要快点儿拿出来?我还没有把这个东西做好,大家难道就已经知道这个东西好还是不好使吗?原因很简单:很多的产品都有一个核心的价值

 

核心价值与附加功能

什么是核心的价值?比如说,我今天特别想去一个餐厅吃饭。我不知道大家的饮食习惯是什么,如果我去餐厅吃饭,我其实只挑它做的最好吃的一两样菜。或者我就是想要吃这一两样菜,我才去的这个餐厅。很多餐厅都是这个样子,招牌菜只有一两道,其他的菜都是辅助性的。

我不知道大家有没有听看过美国的超级市场,它里面卖的东西非常非常多,可是大家可能没有意识到真正流动的、真正销售得最好的那部分商品是非常非常少的。那一部分的商品才是超市的核心价值,其他的商品都叫shelf item——放在货架上的产品。它除了衬托的作用就没有其他更多的意义了。

所以你在做startup的时候,最重要的就是找到你产品的核心价值,而这个核心价值不用到最完美的时刻就应该可以体现出来。

如果你今天开麦当劳,我说我要推巨无霸,然后你就开始纠结了。你说我的巨无霸一定要做得特别完美,让每一个人都很高兴——可能你就做不出这个产品了。而巨无霸它的核心价值在哪里呢?它是两片肉,而一般的汉堡只有一片肉。所以当麦当劳做出巨无霸后加了一片肉之后销售非常好,这个时候你就知道了:原来大家特别确实喜欢多这么一块肉。这个核心价值其实在巨无霸早期的时候就已经体现出来了,可是一直市场有人抱怨说:这个巨无霸太小了。这些人一边抱怨一边在吃着巨无霸。

换句话讲,你千万不能把自己的注意力完完全全放在用户的抱怨上。有的用户说不喜欢你的产品的不完美性,一定要把它做到非常完美、精益求精之后你才肯拿得出手,而在追求这个完美性的过程中你就丧失了核心价值的追求。恰恰相反,早期的时候由于你的人手不够、资源不够,你一定要把自己的注意力放在核心价值上。

我再举一个例子——Facebook的照片产品。这是我在Facebook 8年抱怨最多的一个产品。所有的人都在抱怨:为什么我们照片的产品很多显而易见的功能都没有做?比如说很容易地创建一个相片本、在相片本里可以挪动照片、对相片放大缩小,或是对相片做一些处理……好些个功能怎么都没有?这样的产品怎么拿得出手!可是你们知道吗?Facebook的照片是整个网上所有照片的99% 。换句话讲,整个网上99%的照片分享都在Facebook。那你说,这么烂的一个产品,为什么大家都想把照片分享在Facebook上?

facebook-what-do-infants-have-become-giants-02

因为Facebook抓住了照片的一个最核心的功能。就是在朋友圈里,当我今天拍了一张大家在一起吃饭的照片,我很快地可以把照片传上facebook,大家就已经得到了分享照片的快乐。这个快乐就是这个Facebook产品的核心价值。至于你说照片大小要特别特别合适、里面的菜一定要给大家标明了是什么什么菜……这些都是属于附加的产品、附加的功能。尤其是在早期的时候,如果你把自己的注意力放在这些附加的功能上,等于你没有把核心价值照顾得特别好。

 

骇客马拉松

所以后来Facebook渐渐地理解到了hack的重要性——快速地迭代、不断地去尝试不同的产品方向。Facebook就有了这么一个活动——hackthon(骇客马拉松)。hachthon就是hack加marathon,也就是像“马拉松”般熬夜地去hack。hackthon也许每个月有一次,或者说隔一段时间大家觉得需要一个hackthon了,那么大家就会进行一次hackthon。

facebook-what-do-infants-have-become-giants-03

比如说今天公司要hackthon了,那今天晚上就像一个party一样,大家凑在一起说:今天你要写什么,我要写什么。每个人开始想自己的想法。这个想法可以很小,小到今天一个晚上就能做出来。就像我说的,做出一个完美的产品并不重要,但是做出第一个版本的产品非常重要。然后大家选定了自己想要做的那个小项目后,然后就开始熬夜了。熬夜是真的把这个东西写出来,那写的这个东西一定是员工自己最喜欢的东西。因为是他自己挑的,这个就和别人派给你一个产品或是一个项目是不一样的。Facebook非常强调,所有你做的这些东西最好都是你发自内心想做的,大家才能特别有积极性把这个东西连夜熬出来熬出来之后是真的上线,不是说做出来了就往那儿一放不管了,熬出来之后这个东西第二天就上线了。

那你说,一个晚上写出来的东西一定是漏洞百出啊?或者肯定页面非常粗糙啊?确实是这样的,非常多的hackthon出来的作品都是非常粗糙的。但是,假如你做的这个东西有核心的价值,第二天的线上你是看得到的。你会发现就是有人用,有人用的东西你就值得花更大的力气把它做好——把画面精美化、把一些缺失的功能填补,或者说把它所有的地方做得更细……这就是快速迭代的一个工作方式。

 

亚完美主义

假如我把这个做法上升为哲学观点的话,那么这个实际上是一种“亚完美主义”。“亚完美主义”是我自己瞎造出来的一个词儿——subuptimate。换句话讲,我们在解决很多问题的时候,我们可能追求完美,我们可能希望自己的解决方式是最uptimate(完美)的。我们画一条曲线,看一看付出的努力和完美的程度的关系。如果是一个线性的增长关系,那好吧,你可以多花一点时间去追求完美,那我就不说什么了。但是事情往往不是这样子的,往往为了最求最后10%的完美你要花出50%甚至更多的精力。

facebook-what-do-infants-have-become-giants-04

换句话讲,我们在做软件的时候,往往想做到非常完美,为了最后一公里,花特别多的时间和气力。这个时候你一定要稍微停一下,思考一下,最后那一公里,值还是不值?万一你花了50%的气力,达到了100%的完美,后来发现这款产品并不是市场想要的,你的努力不是白费了么?

所以大家一定要思考,这个曲线的转折点究竟在什么地方?我不是说让大家做一个半成品,一个根本没法看没法用的东西,而是说,做到差不多,做到你可以判断出“再往下做就得要花很大的时间和力气”。这个时候,把产品上线,看大家的反馈,看大家对产品认不认同,看它的核心价值有没有体现,然后再去做调整。其实我这张图也是亚完美主义的体现,我本来可以把这张图画得更加漂亮,更像范凌的那个PPT(笑), 把曲线做得非常平滑,但是,大家觉得,我这样做,有意义吗?我的核心点已经告诉你,具体的形式就不是特别重要了。

 

语言影响公司文化

Facebook早期的hack文化是有传染性的,一旦某一个人或某几个人,用很快的方式,把一个产品做出来并上线,对其他人是有压力的。 其他人会想,既然他们可以,我也要这样,我也能忍受产品不是十分的完美,所以这就变成了早期的文化。什么是文化?你也做,我也做,他也做,最后就变成了文化。一般来说,在早期的startup,如果能有三两个关键人物,选择正确的工作方式,并能影响周围人采取同样的工作方式,很快就能够利用这个传染性和压力。让别人看到成就并效仿,这其实也是一个社交行为(social behavior)。例如,你今天做了一个hack down的项目,第二天上线了。第二天吃饭的时候你跟人聊,昨天我连夜弄了的项目“video chat”上线了,如何如何。其实这就是一个社交行为,大家在一起聊天的过程中,一起工作的人,潜移默化中,也在相互影响。

第三点,其实在Facebook,人都特别独立,每个人都有自己的想法。每个人对产品的认知都不太一样,尤其是早期,大家经常为产品的方向争得面红耳赤,这个人说要这么做,那个人说要那么做,最后争来争去,大家说:“好,我不跟你争,今晚,你按你的写,我按我的写,明天到线上,咱俩比一比,做一个A/B test”。A/B test在Facebook非常常见,以至于A/B test的系统在Facebook非常强大。在早期,正是因为有hack思想和产品研发的过程,所以大家特别在意在线上收集所有用户的反馈。因为产品不完美,所以大家会特别好奇产品的方向,好奇某个页面用户是不是在用,好奇某个链接有没有人点击。很多Facebook后台的代码,都是在收集这些信息,收集点击率、收集用户如何使用页面、收集每个产品对用户究竟是起了正面还是反面的作用……

可见,hack会直接影响你的代码库和整个公司的架构。其实Facebook至今,一直面对很多人的质疑。人们质疑说,Facebook选错语言了,选了PHP这个很low的语言,这个说法我不反对(笑),因为我花了很多年去改造PHP,深知其苦。但是有一天,当我离开Facebook,当我有时间回想,假如一开始没有选择PHP,那会选择一个什么样的语言呢? 还真的不好说。

facebook-what-do-infants-have-become-giants-05

比如,选Java,但Java和PHP很不一样。使用Java和PHP的人,他们的性格特征也是不一样的。不知道是语言影响人在先,还是人选择语言在先,比如,写PHP的人往往很hacky,追求尽快把代码写完,并不讲求代码的完美性,在PHP里,很多东西就是一个函数,调用一个函数就完了,不是一个class,没有class的包装,很多PHP里面的coding,都是直截了当地把事情做完,没有任何抽象化。反之,用Java就一定要写成一个interface,写Java的人会想,万一有十人以上要和我interface,那怎么办?Java非常强调代码的完美性,这就影响了公司的文化。

所以startup的人要注意,选择的语言会影响公司文化。我不是说不能选择Java,可以选,但是,一旦选择了,你一定要向写Java的员工灌输,不要急着抽象,总共就仨员工,有什么好抽象的?等你的代码真正需要抽象的时候再做,也来得及的。迅速地把代码写完,这是第一要务。让代码完美化,也许是第二要务。

 

总之,早年Facebook的hack文化,非常大地受到选择PHP这个语言的影响,而PHP非常不讲究over-engineering(过度工程化),所以Facebook很信奉的一句话就是“move fast, break things”。

“move fast”的意思就是说我们要很快地向前进,如果我们并不清楚前进的方向在哪儿,就只能靠磕磕碰碰地去找到自己前进的那个方向。那“break things”是什么意思呢?PHP就是一个特别容易break things的一种语言,在PHP里面研发就是非常容易就break了。就是因为它不够over engineering,这里面我们有一部分的代码,没有class style,没有OOP的那种object arranging style的代码,web crash(网站崩溃)啊。

我不知道王淮和长浩还知不知道这个事情。这段代码就是用纯函数的方法去写的,这个时候,Facebook就进来了一个员工,这位员工才华横溢——他是Evan Priestley。Evan Priestley看到这个代码以后说,天哪,还有比这个更难看的代码吗?这就没有任何的abstract,简直没有任何的object arranging style,让我来改变它吧。他就把代码改成了class oriented的那段代码。结果改完之后一上线,网站就crash(崩溃)了。原因很简单,PHP那个object oriented那个东西做得很不好,性能很不好,所以不得已大家只能用函数的方式去写那个网站。Facebook的网站能前进地非常非常快,因为函数写出的代码都特别容易改,非常直观。想改哪就改哪,一改就该对地方。但是class oriented的那个经常不知道改哪才能改对地方。所以我希望大家做startup的时候,不要拘泥于形式。

 

成功经验不可照搬

以上我给大家说的都是hack文化,讲了很多,不知道你们回去了会怎么想,回去了就要把公司改造成hack style?这你又错了,Facebook真正的文化是不相信任何的规则,Facebook任何一件事情都是可以拿出来讨论的。Facebook可能就是做朋友圈的这么一个公司,内部的discussion(讨论)的tool(工具)做得非常强大,很容易地是,一个人提出来以后,一大堆人在那讨论,大家很容易用这种“内部”交流的方式在公司里讨论很多棘手的问题。这个才是我觉得你们可以带回去的东西。你不能够相信现成的经验和现成的做法,我今天给你讲,Facebook有了Hack的文化结果成功了,不等于你拿到hack的文化,你的startup就会成功。你要自己去想你们的核心价值是什么,自己来找到这个流程。

这里面准备一个小的例子——Facebook的QA部门(Quality Assurance,质量保证)。Facebook多少人都在怀疑这件事情,只要有新的人进来,就会说怎么会没有QA部门呢?我们有这么多的用户,我们如果没有QA的话,我们的用户不就完蛋了嘛?这就是Facebook的做法——它坚信没有一个公司的经验是可以照搬的。每一个人都是带着怀疑的态度去思考QA部门是不是需要,QA之所以没有继续下去,原因很简单,大家想hack,大家想很快地把一个产品推上线,大家不愿意依赖别的团队,大家不想开会,大家不想在凌晨三四点的时候还打电话告诉别人。

所以Facebook强调的是:所有我能做的事是我一个人全包了,为什么要另外一个部门的人去QA我啊,这个产品的流程是什么我都不知道(其实说心里话我也不知道)。我是在研发的过程中不断在改,那我怎么向QA部门描述这个产品?任何多余的时间我都不愿意花。任何团队都不想滞缓自己上线的时间,不愿意团队间有摩擦,所以QA在Facebook成立有很大的阻力。

还有一个原因是Facebook在网上的流量太大了,只需要5分钟的时间,所有的问题都暴露出来了,线上的流量就会告诉你发生了什么问题,它就帮你QA了。可能只有几个人去写unicast framework,所有的思路还是hack的思路。到最后,Facebook可能是到了第八年的时候,才意识到Hack文化是公司的核心,所以在新公司的大楼上写道“hack's company”,在大楼的地上写了四个大的字母——“H A C K”。Facebook也是在很晚的时候才意识到这个文化的重要性,是怎么帮助Facebook成功的。