我今天分享的主题其实也与社区有关系——《21摄氏度的CODE》,一是谈谈腾讯内部开源社区的体会,二是腾讯对外开源的情况及其近期计划。
对于腾讯而言,研发文化开发也是在2013年左右,大概在3Q大战后,随着3Q大战对腾讯的影响使腾讯更加开放。另外,这前后其实许多谷歌的工程师来到腾讯,他们带着谷歌的文化来到腾讯,使腾讯研发能力方面更加开放。2013年腾讯正式提要在内外部做开源,并且推广开源。
如果做开源社区一个绕不开的话题就是GitHub,因为GitHub的存在让我们的社区变得不同,这当中有两层意思。我们看到GitHub现在已经是非常成功了,包括它的一些对开源的管理以及运作模式。我们在做社区时怎么样在它基础上做一些不同的东西,这是很重要的。另外,由于GitHub有开源的一些基本成功方案,包括我们很容易复制过来并搭建这样一套东西,使我们有精力、有时间打磨针对我们的用户需要的东西。
对于我们的用户来讲,其实有这样一种观点,微信在产品观时分享过他们的观点,其实在Facebook等于是说人离开SOS可能被孤立,没有存在的价值。而对中国来讲,面对的是生存感的问题。我们要养家糊口,我们的程序员其实就是要有一份有收入的职业,但是也有这样一类人,既有这种生存感的压力,也有存在感的渴望。我觉得程序员其实就是这样一类人,我们可能平时在企业里为了KPI,为了业绩去拼搏,但内心里可能还保持着对技术理想的渴望,保持着自己可能要在技术上做一些不一样的事情出来,这就是我们社区所面对的用户的现状。
另外,程序员相对过于谦虚。例如,在腾讯内部开研发会议,可能最抢先发言的是产品经理,如果不阻止他的话,他会讲半个小时甚至一个小时,或者直到会议结束。而我们的程序员一直默默无闻,在表达上还存在内向。我们如果做社区,怎么样针对这些用户群体让他们在社区里有更多的交互和表达,让他们在我们的社区里能够有更多的技术存在感,我们就在做轻量化代码功能,叫做“微码”,大家可能有时间参与开源项目,但没有时间在开源项目做工作。但是可以把自己认为好的或者能够晒出来的代码放在社区中与别人做交流和分享。
当时我们做的“微码”,大家知道现在凡是带“微”的产品都比较火,所以我们起名叫“微码”,数据给了我们一个很大的拥抱。比如2013年做的时候还只有243,而截止到现在是342,按照这个数据情况看,2015年的数据大概是1200多。所以通过轻量化的这种功能能够让我们的程序员有这种表达,这种低门槛可以让他们更多的参与到社区的活动中来。
社区其实离不开运营,一个好的开源社区一定要做一些运营,可以抓住用户的心理做一些事半功倍的事情。比如流行就是一个很强的驱动力,像2014年发生了微信红包的事情。程序员之间讨论的是什么呢?讨论的是为什么你每次抢红包能抢10几块钱,上百块钱,为什么我只能够抢到几分钱,大家讨论这个话题很热。我们很快就在微码平台上做了这样的运营:微信红包的随机算法。结果就有很好的研发,有一半人上来做评论,最终有200多个评论,这200多个评论当中几乎一半评论是很具体、很详细的,怎么样的算法更随机,怎么样会更加好玩。这其实就是利用有实效性的事件做运营,就能够起到事半功倍的运营效果。
再就是好奇心,好奇心是很大的驱动力,大家都很好奇为什么会这样,为什么那样。大家的公司每到年底都会有抽奖,腾讯也是这样的,在年底时大家都会关注今年会开什么奖,能不能中上。我们讨论最多的是为什么谁谁每年都会中?是不是抽奖环节有什么问题,大家都感到非常好奇。我们就将抽奖程序作为开源项目开源出来放到社区,结果这个开源项目是腾讯最长寿的,也是参与人数最多的开源项目。可以看到从2012年底放上去后,直到现在都会有维护,每年到了抽奖时,因为需求不一样,今年是这样,明年是那样,每年都会有不同的团队做这个项目,维护这个项目,参与的人也非常多。往往开发的团队过来说如果在腾讯内部做一个开源项目应该怎么做?我们就说应该这样,应该不断的维护,不断的提问题,使它更加完善,这就是典型的开源项目的玩法。
其实一个社区不光要承载社区的功能,对于程序员这个群体来讲,大家多多少少都会有极客的情结在里面,比如喜欢新鲜的、有趣好玩的东西。去年我们在腾讯做了一个乐高EV3机器人大赛,这个大赛过程中我们强调的是跨团队合作,不要找自己团队内部很熟的人去做,应该去找不同业务与你跨度很远的人组队做这件事。整个下来后,大家玩的很好,对跨团队的合作和开源的玩法有更加深刻的认识,这对社区的影响力传播是很好的事情。最终参与反馈很多都是很有意思的,包括熬夜,到了夜里2、3点钟还在排队搞程序。这就是“让代码鲜活起来”的例子。
另外,我们坚持了草根化,这个社区一定是草根化的。不仅仅是把业界很牛的东西放上去,很牛的微码放上去。下面的评论都是:好好好,学习了,点赞…我们希望的是大家都可以在社区有讨论和交流的途径,坚决不给用户加 V,包括在社区里众生一定要平等,我们也想了确实有影响力的人发一些评论功能怎么办?我们提供了匿名功能,这个匿名功能可以从社区层面排除障碍,使你可以更自由的表达个人看法。我们的领导平时是不参与整个社区的评论工作,因为一旦领导介入的话就容易产生麻烦的情况,破坏社区当中所坚持的东西。
社区是温暖的,有温度的。这是我们今天想强调和想讲的,比如我们每年会做代码报告,其实我们把这个报告做的是想试图描述过去一年来在社区中的代码生活中的足迹或者成长,或者你的技术存在感,给它有类生活化的模式出现。比如一些项目代码能力的分析,因为这次报告媒介也会做一些传播,每一个社区的成员都会有一份自己详细的,个性化的东西。在过去足迹是怎么样的,做的贡献是哪些,包括代码能力的分析,包括开发语言及战斗力指数的描述。另外,也包括代码价值的计算,把代码贡献度与腾讯的营收结合起来,计算出你有多少钱等等。这试图描述程序员代码生活究竟是什么样的。
在社区温暖与温度方面,我们也做了很多讨论和非常细的打磨。包括有一点非常有意思,我们内部讨论:程序员群体对什么最感兴趣。前三条最感兴趣的是,第三条是妹子。第二条是漂亮的妹子,第一条是穿着性感的漂亮妹子。有人说既然要做一个温暖的社区,那么会放一幅穿着性感的有妹子的图片会让大家感到温暖,这最后我们没做,这超出了人体舒适的感觉。其实我们是想做一个温暖的,能动的艺术。
程序员2015年在微码平台上也会有自己的一些表达,包括很感兴的评出企业吉祥物的形象。社区让用户有更多的参与感到,从轻度到重度,直到开源项目更多的参与。我们现在也在尝试推动一件事,其实我们现在做的事是在现有的工作上让大家把代码摘出来,如果说最好的方式就是从一开始就有这种思想,可以用这种方式去运作。我们也做了代码众筹的活动,大家如果倾慕一些东西,可以在社区里发起跨部门的有相同兴趣爱好或者相同需求的人一起做这个事情,用开源的方式来做,目前有两三个项目还在实验运作过程中,也是一个内部社区的活动。
图上是开源的线上、线下活动,包括一些精品的推荐,一些主题的活动等。我们回过头来再看看我们说的那句话,因为GitHub的存在让我们的社区有所不同,我们的社区是“21摄氏度的CODE”,对于开发人员来讲,我们的社区除了提供个性化的功能,其实对于中国程序员来讲也是很苦的,做开源需要有足够大的勇气,这需要他对社区有归属感,要做到我与社区与图片之间做到类似情感纽带的感觉。程序员感到这就是我在代码世界的家,不管走的多远可能都要回到家里来逛逛或者做一些事。这是我们在做腾讯内部开源社区时特别强调的一点,一定要做的有温暖、有温度,让程序员感到有种家的感觉,可能让大家感觉到很舒服。
内部社区从2013年开始建设,到现在各项数据其实也是很好的,我们与2014年进行了对比,各项数据都有增长,累计的开源项目目前有887个,其实在做这张PPT之前,我都在观察这个数据,真想一睁眼达到888个,但直到我昨天截稿还是887个,可能这种不完美也是一种完美。2014年的下载是2.6万次,包括一会儿要提到的APP随身测工作,其实在腾讯绝大多数手机APP已经得到了用户,甚至像去哪儿、小米都在用,据他们统计现在有2000多个在用。我觉得这可能就是我们社区最大的价值所在。
做完这个社区之后有一个感觉,我们在2014年拿到了腾讯年度文化大奖,其实在领奖时我看到了一下四周,左边是现在最红的项目,微信红包项目。右边是腾讯2014年最赚钱的项目,“天天酷跑”项目团队,中间是我们的内部平台成本中心,他们两个都是挣钱的,我们是花钱的,看到这个情况我心里感慨了一下,还是挺爽的。以上是我们腾讯在内部社区时的一些心得和体会,接下来我介绍一下腾讯对外开源的情况和近期的项目。
我们去年与CSDN有6个项目开源,即将开源有5个,其中有两个游戏项目。腾讯还有一些项目团队,也包括个人做的开源,包括AlloyTeam,以及其它的一些开源贡献。图上是腾讯的开源,为什么说我们的对外开源非常慢,就是因为要走这些流程,我们也想在今年优化和简化流程,但说实在有些东西也是没办法,企业开源要考虑的东西非常多。
腾讯游戏会以手游为例,我们的团队规模小,产品周期又很短。它底层通用性是非常有必要用开源性来做,所以腾讯在整体游戏方面会系统性做开源。这部分开源就有一个好处,游戏部门会投入资源去运营,比如我们游戏方面会有游戏内部研发管理平台的同事来做。另外,它比较全面,比如文档、配套课程,包括周围拿去使用需要的东西会很全面,下午会有一个开源项目来做专题的分享。
下面在讲之前先讲两个案例,去年年初最热闹的事情就是滴滴打车和快的烧钱的事情,如果一旦遇到爆发性增长,技术架构没做好的话,很容易出现档期的事情。我们知道现在互联网行业一个企业的机会是稍纵即逝的,可能过了这个村就没这个店了。滴滴打车爆发期增长后面临的很大问题是服务器供应不起来了,我们了解最悲剧的是大家打开滴滴打车时打不到车,更悲剧的是打到车时付不了款。因为大家都是冲着补贴来的,司机也有补贴,用户也有补贴,这时腾讯迅速的介入把它放到云端,做一些技术架构上的调整。很快滴滴打车和快的烧钱大战就可以继续下去了,我想快的如果没有阿里快速介入的话,那么也会很快垮掉。类似于初创企业如果幸福来的太快的话,肯定是支撑不下去的。
我们谈开源,比如腾讯在海量方案上积累了很多的经验,但如果腾讯要开一部分代码,因为业务关联性太大了,而且经过这么多年积累下的代码要摘干净是非常难的事情。但意义更大的事在于,我们可以把这些技术积累的经验总结提炼出来形成一些理念,比如“海量服务之道”是我们总结的理念,我们希望把技术理念开放到行业,可以解决中小企业或者初创型企业遇到的一些问题。比如突然有了爆发式增长应该怎么办?其实意义在于就避免因为技术上的积累不足,技术上没有经历过这个事情把很好的发展机会错过了,我觉得这要比开放源代码的意义更大。
腾讯在海量服务之道的基础性技术组建和基础性技术会陆续在做,陆续开放出来,但过程比较长。但能够把技术理念分享给大家,避免大家走弯路,这是现在马上可以做的。举一个简单的例子,有损族。是通过精心分拆产品流程,选择一部分数据一致性、完整性,从而保证核心功能的大多数。实际例子,今年春晚微信摇一摇,我们可以预见的其实就是微信摇一摇在春晚上有非常大的压力,至于具体多大压力我们估计不到,但我们估计一定会很大。但事后统计的数据是总次数110亿次,峰值1400万次/秒,81亿次/每分钟,微信红包手一发达101亿次。
微信摇一摇其实完整的体验就是摇出红包,拆红包,有钱到账上再来分享。这在常态下的运营是没问题的,但一旦有像这种峰值的话,一定对服务器有很大的压力。大家摇没关系,其实收到多少钱,钱数大,后台处理要浪费很多资源。但它耗资源的过程又是核心的过程,对摇一摇是非常核心的体验,我们进行核心的处理避免钱到账还要等,有损服务的体验。
我们做个调查,大家摇红包时摇出这些画面的请举手。有一两个。其实摇出这个画面时,我会觉得很温馨,我在摇红包的同时腾讯提醒我要跟父母多聊天,很温馨,这是很正能量的传播。其实最后一幅图程序员看到会理解,挂了,服务器挂了。其实我如果不看同事的分享,我也觉得是很温馨的提示,甚至我们腾讯内部摇到鞭炮挂了,跑到论坛上说:我摇到这个画面是不是中了奖。当知道这是服务器挂了意思,就哈哈一笑而过了。我想春节本身是很喜庆的画面,摇出这个画面让用户没有感知服务器挂了,让用户感知这是很温情、很温暖的东西。用我们开发同事总结的话说:我们预计一定会挂,但就是如何更优雅的挂掉。
在海量方面,包括刚才我讲的滴滴打车以及腾讯红包摇一摇,我们已经放出来了,如果大家感兴趣的话可以关注相关的公众号来关注资讯。最后想讲一点自己的体会,其实中国的开源还在路上,还有很多未知的领域在探索。前不久我跟负责微信法国的同事聊天,他说其实在中国,他想做以中国母语为(基础的)开源协议(英),其实一直都是依据美国法律做的,在中国许多法律是对应不上的。如果我们的开源发展的越来越好了,有更多的商业东西进来了,其实非常需要能够有一部大家能够达成一致、并且适合法律的开源协议,它目前也在推进和联合一些企业做这样的事情。
我觉得中国的开源需要探索和探求的东西还是非常多的。希望我们的开源越做越好,感谢大家!开源的精神永远都在,谢谢!