虽然这个项目本身谈不上成功,但对于我个人来说,是个难得的学习过程,技术能力和技巧都扩展、增强了很多,成为一个相对全面的产品工程师。
2007年4月刚加入Facebook时,我先是和后来负责新兵训练营的工程总监安德鲁·博斯沃斯(编者注:参见新兵训练营有关章节)及后来成为Facebook首席产品官(Chief Product Officer,简称CPO)的克里斯·考克斯(Chris Cox)合作,做了一个关于动态消息(News Feed)的小项目 。这个项目做了三个月,中间还帮着F8大会的演示做了一周的紧急开发(编者注:相关情况可参考有关扎克伯格的章节)。之后,跟另外几个人组成一个团队,开发社交广告相关系统,把所有用户在Facebook上面的行为全都搜集起来,放到数据库里,再进行整合、分析,尽量使用户看到的广告跟你朋友之间的行为有关系,不会显得那么突兀。比如,通过分析你朋友的喜好,知道他喜欢某产品。那在向你做这个产品的同时,会显示“你朋友××也喜欢这个产品”。这是Facebook在用户规模逐渐扩大后想做的一种商业化尝试,是个比较大的项目,我在这个组里做了六个多月的时间。
之后,我回国休了一段时间的假,再上班就换了组。当时公司要建一个开发动态消息系统的组,而之前一直负责这个项目的负责人有点不好沟通,很多跟他合作过的人都表示不愿意继续合作,而他又是做动态消息最资深的。如果他继续做这个项目,那么新建的这个组的经理职位可能要由他来担当,他本人也一直很想做经理。我之前的老板跟我说,和很多人交流过,只有我一个人说可以和他合作。老板就做了这样一个安排:由一名资深工程师(但是没做过动态消息)来担任这个组的经理,而原来那个想做经理的人被调到另外一个组去了。但是动态消息这个新建的组仍然需要之前的那些知识积累,在一段时间内还得跟他打交道,谁来做中间沟通的桥梁呢?老板就把我放到动态消息组里,承担这么一个角色。
进了动态消息组后,一开始我很想做后台系统,那是整个Facebook里最有挑战性的几个后台系统之一,非常重要,是公司最为核心的资产之一。当时有两个人在做那套系统,已经做出了后台系统的第一个版本,不需要再加人,可是我只想做有意义的、有挑战性的、对于公司来说非常有影响力的项目,其他的我兴趣不大。结果老板“忽悠”我去做了这么一套项目,就是把用户在其他很多网站上(像Twitter、Youtube、Flickr、Google Reader之类的)的更新搜集起来,在用户自愿的情况下导入Facebook,他说这可能成为我们的重点方向之一,因为当时Facebook还没有像现在这样占据主导地位,用户在其他网站的行为也很频繁,非常有必要把用户在Facebook之外的活动数据引导进来。有几种方式可以选择:一种是用户在Facebook提供他的登录用户名,我们把数据导进来;一种是其他网站可以使用Facebook的API,主动地把用户行为推到Facebook系统里面来,后来这种方式(Facebook Connect)成为主流,但当时那些API都还不成熟。
我就在老板的忽悠下去做这套系统,前台由设计师瑞贝卡(Rebekah Cox)负责,后来她跟前CTO德安杰罗一起创立了Quora,她是位非常资深的设计师,剩下后台所有东西都由我负责,我们一起合作。当时整个网站活跃用户4000多万,我们做的这套系统有200万~300万的用户,也就是5%~8%的网上用户在用,并不是一般用户普遍使用的功能,这和我们当时把这项功能定位于高级功能(Power User Feature)是一致的。但这样的情况在Facebook算不上非常成功。我后来想,这套系统最大的作用,可能是跟FriendFeed 进行收购谈判时变成了一个筹码。不过最后收购完成后,所有上面的尝试都停掉了,集中于用Facebook Connect这个方向来整合用户在互联网上的行为(2008年5月推出该服务,当年底正式向所有网站开放)。
从绝对用户数量来看,这个项目谈不上很成功,但我们对它的定位来看,还算成功。如果算上它帮助Facebook收购了FriendFeed的话,那应该算很成功。对于我个人来说,整个技术能力和技巧都扩展、增强了很多,成为一个相对全面的产品工程师。我原来只是一个C++的后台程序员,对其他东西不太涉及,而接手这个项目以后,后台整套系统都要自己搭建,像数据库、爬行程序、监控程序(部分程序用Python编写),包括前台的一些开发语言(如CSS、HTML、JavaScript、Ajax框架) ,我都是在那段时间里慢慢学起来的。从这段经历中我感觉到,作为一个程序员,非常有必要挑战一些自己不懂,但对于扩展知识库、能力库非常有帮助的项目,不要老想着待在自己感觉舒服的领域,不敢去碰陌生的领域,其实你完全可以突破一下,让自己的能力获得提升。这就是Facebook内部经常倡导的“跳出你的温柔乡(Get out of your comfort zone)”。因为这个项目,我基本具备了一个完整项目所需要的全部技术能力。另外一点,除了自己强烈的学习意愿,也要有学习对象(Role of Model)。我当时对前台的相关技术懂得很少,就提出一个要求,找一个懂前台编程的资深设计师一起合作,就是这种情况下,瑞贝卡才过来,我从她身上学到了很多东西。如果你能够遇到一个在某些方面比自己强很多的人,那就意味着是一个很好的学习机会,加入这些项目,对提高自身素质非常有帮助。