图灵访谈之四十七:对话Cocos2d-x作者王哲

Cocos2d-x作为一款游戏引擎,出现不到3年,已经支撑了60%的中国手机游戏和25%的全球手机游戏开发。Cocos2d-x作为一个开源项目,吸引了来自世界各地的代码贡献者,以及越来越丰厚的商业投资。王哲,是Cocos2d-x的作者,也是该项目开源社区的发起人。在中国的IT生态环境下,这位自称“善于偷懒”的码农穿过了游戏开发和开源社区的双重迷雾,是什么支持他走到今天?希望这期的图灵访谈能给你一个答案。

在游戏的召唤下

有些人就是喜欢被玩家骂,觉得被玩家骂很开心。而我们觉得被开发者骂很开心,这就看你的爱好是什么了。

你是怎么开始编程做码农的?

我大学的时候开始玩游戏,玩得很深,属于很沉迷的那种。和多数大学生的经历差不多,都是通宵玩暗黑、玩剑侠情缘,后来毕业之后玩魔兽世界。和专业完全没有联系上。相比于写游戏,我其实玩游戏更多。

04年毕业之后我进入夏新软件研究所,做的是智能手机上的多媒体编解码。虽然没做出什么好产品,但是当时夏新比较有钱,和我搭档的是一位厦大的博士后,而且当时的部门经理是一位技术高手,他们教给我一些很好的技术思维方式,所以我技术能力成长也比较快。再到后来,夏新由于体制问题挂掉了。所以我曾经眼看着一家上市公司是怎么样挂掉的。其实如果夏新不倒掉,我很有可能会一直呆在那儿。离开厦新之后我去了一家游戏公司,大概呆了三个月,后来做cocos2d-x走的时候从那边挖了很多人,把当时坐我周围的人都挖光了。还好现在那家公司的游戏仍然很赚钱,只是我每次回去找老朋友聊天都得挑他们CTO不在的时候偷偷去(笑)。

你是怎么开始开发Cocos2d-x的?

后来我和一个夏新同事,也就是现在带cocos2d-html5项目的林顺,一起去厦大读商学院,边读边思考管理、技术上的问题。在2010年,我们去了国内一家做操作系统的公司,我负责的那个部门是多媒体游戏。为什么去做游戏?因为整个公司里就我自己最喜欢玩游戏,而别人又不喜欢,所以我就开始入手了。当时我就想有没有一种简单的方式让别人把游戏移植过来,于是我想做一个引擎,能够方便地把iOS游戏移植到我们操作系统上面,顺便再出一个安卓版本。当时联系了Unity,没回信;联系了SIO2,日本人说“your market is pretty small, and the future is pretty uncertain”,其实我现在蛮感谢这句话的,否则我们就不会最后联系上Cocos2d-iPhone作者Ricardo Quesada了。 Ricardo很热心地指导我们开展这个项目,给了各种技术指导,我们也从他身上学了很多。至今Ricardo仍然是我的偶像。

Cocos2d-x出了几个版本稍微稳定之后,我跑到CocoaChina游戏版面上宣传,当时CocoaChina还没有捕鱼呢,只有一个论坛,给我封了个游戏区版主。半年后,一边是游戏引擎做得顺风顺水的,另一边做操作系统的公司反倒不太行了。CocoaChina就说不如你过来咱们一起搞吧。当时想投我们的有好几家,我看陈昊芝长得比较胖比较面善,加上CocoaChina这个公益论坛做得挺靠谱的,我就答应了。他们的思路很开放,能坚持不把一个开源的项目做成闭源商业,这是我很看重的一点,于是我也愿意和他们一起做。

你凭什么认为你的团队可以把Cocos2d-x做起来?

因为我之前在开源社区做过播放器,自己做个branch出来在夏新内部用。其实在夏新我学到了不少东西,做游戏引擎和做播放器有很多类似之处,最大的一点就是它们都对性能要求很高,需要各种优化手段来压榨CPU、GPU的能力。

在编程语言方面,当时各种技术路线很多,安卓是Java的,苹果是Obj-C的,Windows是C#路线的,而做互联网那一拨就都是PHP的。我们团队都擅长C++,因为做播放器这种东西就是“性能饥渴”的,对性能要求很高,结果就是我整个部门的人都擅长C++。那我反向来考虑,哪些东西是非C++不可的呢?应该就是那些有性能瓶颈的。所以播放器和游戏引擎这种东西就是非C++不可。整个行业这么多年了,(用C++这个传统)都没有变过。做播放器也有它的问题,就是做到最后,产业化的时候就会需要内容,而广电总局肯定不会让你随便自己搞的。拿不到内容,播放器就死了。所以游戏就是唯一的选择,而我又不擅长写游戏,所以只能做游戏引擎了。写游戏、写播放器都绕不开C++,虽然后来绑定了很多其他语言比如JS,但是换来换去核心始终还是C++的。

我当时找的是兴趣、擅长,和商业的结合点,而当时刚好让我找到了。当时我可以去做App,去做播放器,设计UI框架,但是最后我觉得这个(游戏引擎)最好玩,也最合适,于是就做下来了。

你说你不擅长写游戏是为什么?

我曾经写过游戏,但是现在没有在自己写游戏,游戏是触控的其他团队在做。但是游戏团队整天都会来吐槽,要我支持各种功能,他们是坐在我边上的用户(笑)。

我很清楚我不擅长写游戏,因为我对代码要求太高。一个东西我会反复改,改到我觉得漂亮才满意。但是游戏不是这个路子,(要是这样的话)人家同类游戏都不知道出到多少个了。所以我比较适合打磨基础框架,代码改变不多的情况,进度可以比较慢,比如去年我可以花一整年的时间做脚本绑定,做到现在才OK。要是这种进度做游戏,公司早就垮掉了。

国外的程序员更会优化工作,国内的程序员都是完成老板布置的任务,这种方式其实在游戏上很管用,进度会赶得很快。像我这种人就是一种灾难,我会不断地想怎么优化工作,等我优化完了,人家一拍脑袋说这个功能我不要了,所以我这种人其实很不适合写游戏。我打磨了半天,人家说不要就不要了,这样成本就太高了。

其实喜欢做框架的人并不多,多数人还是觉得游戏有意思。我招人的时候会特别在意这一点。做游戏有意思的地方在于你可以创造一个虚拟的世界,而且收入会比较直接。而做开源这种事就没什么钱,但是喜欢做的人就会很开心。我喜欢看见大家都在用我做的代码,项目变得越来越国际化。而做游戏很少能做到国际化,整天还会被玩家骂。但是有些人就是喜欢被玩家骂,觉得被玩家骂很开心。而我们觉得被开发者骂很开心,这就看你的爱好是什么了(笑)。

一个由国人发起的国际化开源社区

中国程序员做到30几岁就要做管理了,国外35岁以上的老码农随便教你两招,你就会发现,原来代码还可以这样写啊。

你的Cocos2d-x开源社区是怎么做成国际上活跃,还有商业支持的?

因为我在夏新的时候就接触了很多开源的东西,我大概知道开源社区要做成国际化需要干些什么。所以我自己做的时候也敢于做一些关键决定。

我的操作方式可能有些不同。国内的很多开源项目都是一两个程序员自己做,而不会借助团队的力量。很多技术高手觉得自己牛得不行,看不上别人写的代码。他会让别人用(自己的代码),但是别人给他提交的代码他都不会在意。而且国内很多开源项目都是中文的,而我的项目一开始就只有英文的。到现在为止,所有的代码、注释、文档全都是英文的。中文版自然会有国内社区去拿来翻译。之所以要做英文的原因是,国外的码农和国内的码农很不一样,中国人很辛苦,还要加班,国外的程序员回到家之后也没什么事做,很无聊的,所以就在家里面写代码。他们晚上写开源项目,就和玩儿一样。比如,我们的社区框架是多语言的,这个网站本身就是一个开源系统redmine,是一个法国人为首的社区做的。用一个开源方案搭建的开源社区,这点很有意思。

后来资源就很多了,有很多国际大公司加进来。我设计架构的时候也会注意这一点,让这些公司加进来的代码不会互相打架。国内的其他开源项目,除了阿里系的,很少有人愿意投钱在开源项目上。有没有资本支持对于开源项目的后期发展至关重要,你看dicuz, phpwind, PhoneGap还有android都是背后有资本力量在推动的。但是开源项目可能有各种各样的死法,比如没有交流、架构不好、没有资本注入、没有国际化视野。

在国内做开源社区的话,基金会这条路行不通,所以就没有第二种选择了,只能走商业化的道路。因为像国外那样成立开源基金会,吸纳社会捐赠,必需是要民政部批才可以,但开源社区都没有政府背景,所以原则上是行不通的。

你现在的主要工作是什么?整个框架有多少来自于社区的贡献?

我们现在每周都会和Zynga那边cocos2d团队用skype开周会,就像部门内部的周会一样,每次开一个小时左右,定下一周的开发计划。其实我最开始的英语很烂,Zynga一开始找我们谈,讲了半天我不知道他们在讲什么, haha, yeah, yeah了半天,拿了触控投资一年多后去美国参加GDC大会,和Zynga当面沟通时我才知道,哦,原来当时是想收我们(笑)。后来我和同事们都觉得国际化这条路不错,结果做捕鱼(达人)赚的很多钱都付给英语培训机构了,周末都用来上英语课。因为我们到最后发现我们能写的代码其实只占整个项目很小的部分,和整个开源社区能提供的智慧相比微乎其微。中国程序员做到30几岁就要做管理了,国外35岁以上的老码农随便教你两招,你就会发现,原来代码还可以这样写啊。

我们每天都会收到十几个提交,来自世界各地的开源社区。然后我们就会审核代码,看看这些功能有没有bug。但是大方向还是要把握一下,定期和老外开开会。我们也会拜访主要的几家大用户。设计阶段也需要和大家多多讨论。

我的代码贡献率已经在下降了,现在前几名很多都来自于Zynga、谷歌、Intel的,国家有来自德国的、意大利、俄罗斯、西班牙、阿根廷、印度、美国……数不胜数。以前我还是最多的,别人和我都没得比,现在都已经掉到cocos2d-x代码仓库的第三名了。我现在每天都要review代码,功能虽然不会看得很细,但是主框架的设计一定要做。我白天需要沟通量很大,晚上会用来写代码。

你们现在的主要需求来源是哪里?

需求来源主要是触控自研和代理的游戏,触控的手机游戏也算走在行业前列。另外还有一些就来自于大的游戏,比如那些月收入过千万的游戏。我经常听他们吐槽、聊聊天的过程中其实就能了解很多信息。最近发展到策划也开始提需求了,他们也想要这样那样的功能,我记下来,如果大家都说要这样,那就做,我也很乐意让大家都能省事。而且月收入过千万的游戏需求是很有代表性的,他们想要的功能小团队当前可能用不到,但是等小团队发展一段时间之后,3个月、6个月之后就会遇到这些问题,所以这些需求是有前瞻性的。很多人现在仍然喜欢用C++做,但是我们提前一年就开始准备JS,于是在HTML5爆发的时候大家就知道原来我们已经提前一年就开始做JS版的了。毕竟触控和Zynga都是站在行业前列的公司。

你对Cocos2d-x有长远的规划吗?

做框架、做SDK,反正Cocos2d-x这个产品至少能活个5、6年应该没什么问题,只要我们跟着行业发展、不犯太大的错误,这个社区就能一直走下去。以后要是出了眼镜(Google Glass)我就把游戏搞到眼镜上去玩嘛。只要这个东西有乐趣,能赚到钱就好。赚钱其实很简单,只要你帮别人赚到钱,自己当然就不会饿死了。我们帮这么多公司赚到钱,哪天万一陈昊芝没钱了,我去外面化缘一圈应该还是能活下去的(笑)。当然触控肯定是最好的选择,因为他首先有很好的游戏业务,其次他愿意砸钱来做开源,国内除了触控和阿里巴巴之外,很少有人愿意出这么多钱来做开源项目。现在我们这个项目做到老外来给我们写书,日语、韩语、英语的都有,国内我还没有听说其他开源项目能做到这个程度。

天使与魔鬼,创意与资本

所以我觉得他还是天使为主,要不我cocos2d-x干嘛跟他混啊?

我们出版的书《App创富传奇》的作者Chris Stevens认为现在是独立开发者的黄金时代。他认为“大公司的优势无非就是他们更有资源和金钱。但是,成功的应用可不是用资源和金钱做出来的……”,你同意这种观点吗?

我不赞同他的观点,游戏(热潮)其实已经是第三次了:端游、页游,现在是手游,端游比较早的比如是《吃豆人》,几万行代码搞定。而(游戏)大了之后就要团队作战。端游和页游都变得越来越复杂,魔兽世界可能是几个人能搞出来的么?硬件越来越发达,简单的游戏只能用到10%的计算量。比如刚开始iPhone1的速度多慢,但是玩疯狂的小鸟还OK。但是现在你用的是1.6G的双核CPU,别人就可以把它的计算能力发挥到极致,做得更好,完成更复杂的游戏,而玩家就会青睐这样的游戏。

我们用的软件也是越来越复杂的。项目规模越大就越需要依赖团队的力量。所以任何行业都是从独立开发者,到小团队,再到大团队,大公司,这是个必然的过程。小团队会不断地被淘汰或者合并。页游也同样,一开始小团队做了很多社交类小游戏,你看现在还剩几家?2010年,手游公司倒闭了很多,现在能看到的都是大公司在搞了。

从2008年到2010年,在App Store上看到的比较好的游戏都是小团队开发的,但是再往后就没有什么小团队了。《找你妹》算是小团队开发的,他们运气很好,但是他们背后有热酷。我和吴刚聊天的时候他也说,现在的手游圈子,英雄都是有出处的了。如果你看到个人开发者冒出来的话,他身后很有可能站着一个巨人。

其实有时候大家这种(独立开发者至上的)印象是被苹果忽悠了。苹果刻意宣传包装的都是小公司,它从来都不会说GameLoft, EA在我这上赚了多少。比如他们现在包装的是一款夫妻档游戏《Temple Run》,这样苹果才能保持App Store里的多样性。老外这种公民思想是很不错,但是这跟事实还是有差距的。有一阵子,流行长尾理论,长尾归长尾,国内现在月收入过千万的游戏,比如保卫萝卜,看着很简单,它后面站的是美图秀秀,而美图秀秀后面站的是蔡文胜;捕鱼达人看着很简单,后面站着触控和红杉资本。所以每个行业的初期都是有机会的,随着行业发展和不断的合并,有人成长起来了,有人就被淘汰或者吞掉了。这个东西在开源上也讲得通,为什么有的开源项目做起来了,而有的没有。你都没有尝试去找更多的人来和你一起做,怎么能做起来呢?

当然,下一拨还有机会,比如Google Glass,它也需要App,上面也需要游戏,于是又可以从头来过了。创作者直面用户虽然是苹果一直倡导的形式,这个东西不赚钱还好,但是如果这个东西可以赚钱的话,资本就一定会跟进,其实到头来还是资本最大。资本一旦注入,什么煤老板、卖卫生纸的、卖拖鞋的都会来投资游戏。最近听说中海油也要做游戏,加油送点卡,还是充点卡送加油卡,不知道他们会怎么弄,但是加油站好像不能用手机(笑)。

有人说陈昊芝和触控是天使与恶魔的混合体,你觉得呢?

你们(图灵)近期出版的书《Cocos2d-x高级开发教程》获得了《捕鱼达人》的授权,传授大家如何做一个捕鱼的原型出来。换成我的话可舍不得,可是陈昊芝竟然同意了,因为他是个(思想)很open的人。

在CocoaChina开发者大会上,我看他在台上讲的时候,心想:小样,吹吧。结果后来一看,他讲的数据就是后台的真实数据。我(演讲中)的代码肯定不会造假,而他的数据也是真实数据。他真的是在告诉大家怎么样赚钱,哪个地方赚多少他都老老实实告诉大家。他这点是我很佩服的,很多人都是不愿意教的,我怎么赚钱干嘛教给你啊?我认识的一些游戏公司,有一些就很后悔当时没有听我劝,要是当时来抱大腿,现在就不用做外包了嘛(笑)。所以我觉得他还是天使为主,要不我cocos2d-x干嘛跟他混啊?

陈昊芝的乐趣来源就是做商业,做大公司,赚很多钱,他不差钱,但是他就是单纯的喜欢赚钱。但是换成我,像他赚这么多钱乐趣好像也不是很大(笑)。我的乐趣就是做技术,写代码。我在招人的时候也会看重这一点,比如有的人喜欢写博客、写书。Cocos2d社区有人产品做得一塌糊涂被老板赶出去,但是他仍然喜欢孜孜不倦地写教程写demo,这就是他的乐趣;而我就喜欢找这种人过来和我们一起,给开发者写教程、写文档。寻找内心乐趣的来源是很重要的。

设计一个模块、设计一个功能这里面的乐趣就像小孩子搭积木一样,这可能是最原始的创造性乐趣了吧。所以我觉得把自己的乐趣找到它的商业价值,然后再去做,就好了。这样首先你可以做自己喜欢的事情,如果运气好了还不缺钱了。

这么说你们都是兴趣驱动的了,那你和陈昊芝的最大的不同是什么呢?

我和陈昊芝不一样的地方就是他很勤奋,有钱有机会就会去赚;而我这个人太懒了,能赚钱但很累的事情就不做了。比如无数出版社找我写书,我就觉得写书太累了,不写。国际化路线其实也是这样出来的。搞中文社区,太累了,不搞。因为搞社区很麻烦,不仅要把文档翻译过来,还会有很多入门用户提问题。所以这些事都让别人去做吧,问题也可以去别的论坛问。按道理来说这些事是我是会牺牲流量的,但是牺牲就牺牲吧。流量过去别人家网站之后,他们想放广告赚钱,谁愿意赚谁赚吧。能让别人赚到钱,也挺好的。比如国际化大公司说我赞助你们一下,你们把这个移到我平台上面,我就说你自己出工程师,我告诉你怎么移。这样我就省事了。我都会选择比较偷懒的方式。其实Cocos2d-x的每一根毛孔都散发着偷懒的哲学,跨平台,帮大家一起偷懒;能精简掉的API一个不留;Plugin-x,引擎集成各种第三方SDK很累,于是我就把它们都集成到一起给大家用,就有人说我要抢入口,其实我要是想抢入口就不是这个路子了。我要是想抢入口就要求所有人的数据都经过我服务器,然后我再分发。但是我就是想省事,搞那么累干嘛呢?


更多精彩,加入图灵访谈微信!