游戲引擎Cocos2d-x出現不到3年,卻支撐著中國手機游戲開發的60%和全球手機游戲開發的25%。作為一個開源項目,Cocos2d-x吸引了世界各地的代碼貢獻者,和越來越多的商業投資。Cocos2d-x的作者王哲,也是該項目開源社區的發起人。在中國的IT生態環境下,這位自詡“善于偷懶”的碼農穿越了游戲開發和開源社區的雙重迷霧,是什么支持他走到今天?希望本期的訪談能給您一個答案。
你是怎么開始編程做碼農的?
我大學的時候開始玩游戲,玩得很深,屬于很沉迷的那種。和多數大學生的經歷差不多,都是通宵玩暗黑、玩劍俠情緣,后來畢業之后玩
魔獸世界。和專業完全沒有聯系上。相比于寫游戲,我其實玩游戲更多。
04年畢業之后我進入夏新軟件研究所,做的是智能手機上的多媒體編解碼。雖然沒做出什么好產品,但是當時夏新比較有錢,和我搭檔的是一位廈大的博士后,而且當時的部門經理是一位技術高手,他們教給我一些很好的技術思維方式,所以我技術能力成長也比較快。再到后來,夏新由于體制問題掛掉了。所以我曾經眼看著一家上市公司是怎么樣掛掉的。其實如果夏新不倒掉,我很有可能會一直呆在那兒。離開廈新之后我去了一家游戲公司,大概呆了三個月,后來做cocos2d-x走的時候從那邊挖了很多人,把當時坐我周圍的人都挖光了。還好現在那家公司的游戲仍然很
賺錢,只是我每次回去找老朋友聊天都得挑他們CTO不在的時候偷偷去(笑)。
后來我和一個夏新同事,也就是現在帶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。要是這種進度做游戲,公司早就垮掉了。
國外的程序員更會優化工作,國內的程序員都是完成老板布置的任務,這種方式其實在游戲上很管用,進度會趕得很快。像我這種人就是一種災難,我會不斷地想怎么優化工作,等我優化完了,人家一拍腦袋說這個功能我不要了,所以我這種人其實很不適合寫游戲。我打磨了半天,人家說不要就不要了,這樣成本就太高了。
其實喜歡做框架的人并不多,多數人還是覺得游戲有意思。我招人的時候會特別在意這一點。做游戲有意思的地方在于你可以創造一個虛擬的世界,而且收入會比較直接。而做開源這種事就沒什么錢,但是喜歡做的人就會很開心。我喜歡看見大家都在用我做的代碼,項目變得越來越國際化。而做游戲很少能做到國際化,整天還會被玩家罵。但是有些人就是喜歡被玩家罵,覺得被玩家罵很開心。而我們覺得被開發者罵很開心,這就看你的愛好是什么了(笑)。
你的Cocos2d-x開源社區是怎么做成國際上活躍,還有商業支持的?
因為我在夏新的時候就接觸了很多開源的東西,我大概知道開源社區要做成國際化需要干些什么。所以我自己做的時候也敢于做一些關鍵決定。
我的操作方式可能有些不同。國內的很多開源項目都是一兩個程序員自己做,而不會借助團隊的力量。很多技術高手覺得自己牛得不行,看不上別人寫的代碼。他會讓別人用(自己的代碼),但是別人給他提交的代碼他都不會在意。而且國內很多開源項目都是中文的,而我的項目一開始就只有英文的。到現在為止,所有的代碼、注釋、文檔全都是英文的。中文版自然會有國內社區去拿來翻譯。之所以要做英文的原因是,國外的碼農和國內的碼農很不一樣,中國人很辛苦,還要加班,國外的程序員回到家之后也沒什么事做,很無聊的,所以就在家里面寫代碼。他們晚上寫開源項目,就和玩兒一樣。比如,我們的社區框架是多語言的,這個網站本身就是一個開源系統redmine,是一個法國人為首的社區做的。用一個開源方案搭建的開源社區,這點很有意思。
后來資源就很多了,有很多國際大公司加進來。我設計架構的時候也會注意這一點,讓這些公司加進來的代碼不會互相打架。國內的其他開源項目,除了阿里系的,很少有人愿意投錢在開源項目上。有沒有資本支持對于開源項目的后期發展至關重要,你看dicuzz, 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干嘛跟他混啊?”
我們(china-pub)出版的書《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很累,于是我就把它們都集成到一起給大家用,就有人說我要搶入口,其實我要是想搶入口就不是這個路子了。我要是想搶入口就要求所有人的數據都經過我服務器,然后我再分發。但是我就是想省事,搞那么累干嘛呢?