那些日子(二十)
2003 年 3 月,网易最大的一家风险投资商,新闻集团,套现。短时间内,公司的股价从 15 块以上跌到了 11 块。我想公司那个时候是有许多人感到不安的,毕竟咬在嘴的肉一下子少了一块,多少有些不舒服。接下来的股票执行窗口(按美国法律,公司员工买卖自己公司的股票,必须在限定的时间段内进行,这个时间段被简称为交易窗口),许多人抛掉了自己手上的股票。但游戏部门的人对将来都充满信心。
这段时间,公司又为员工颁发了奖励性质的期权。我拿的比前一年少,dingdang 也是。而游戏部的人多了许多,每个人都有。我还记得那天,CEO Ted 亲自颁发的文件。他头发花白,看起来比实际年纪大许多。人很和善。读到我的名字,当我上去领文件时,特地与我握了下手。当时说了些什么不太记得了,但是他给我传递的那种感觉,影响非常深刻。这是我第一次见他,也是最后一次。
Ted 人缘很好,是慢慢感觉到的。第二年跟 Michael Tong 去美国出差时,有机会拜访了几位跟网易有些渊源的朋友。见面后,大家一定会很关切的询问 Ted 的身体情况。聊起来都会说,Ted 真是个不错的人啊。
05 年底收到丁发给我的 Ted 手术失败的消息时,我正从岩道上下来休整,一下子感慨万千。多好的一个人走了,活着的人更应该保重身体。上海一个同事曾给我转述了他听来的故事,据说是北京办公室的同事讲的。Ted 走的那一晚,他在北京空着的那间办公室的天花板上的消防水龙头突发故障,喷出的水洒了一屋。周一大家得到了噩耗,纷纷说那是 Ted 放心不下,又回来看看了。
五月间,非典袭来。最早是深圳的同学给我发短信,说是他们那的醋被抢购一空,让我赶紧备一点。接下来几天,广州满大街的酸味。我是从头到尾没觉得多大个事儿,每天照样去健身房锻炼,到公司上班。我能理解人们的恐慌,但不知为啥,无论别人怎么渲染,我就是觉得没啥。倒是健身房和公司里的消毒水味道有点不好受。最严重那几天,公司的同事都在家办公了。我家里没有计算机,所以依旧泡在公司里。
这个事件对运营的游戏的影响说不太清,有好有坏吧。大话正处于加速上升期,而在此同时短信方面的业务量在萎缩。游戏部门相对独立,大部分时间,部门以外的人甚至别的部门的高管都不清楚游戏的情况。不然,到 03 年年底的时候,也不会有无线部的头儿违反规定,私自抛售公司股票,最终被美国证监会抓个正着了。
我在 03 年年中的时候,卖过一点点公司的股票,换到一些美圆。很好奇的炒了几个月外汇。读了许多技术分析的书,颇有些心得。大约玩了半年,起起落落,最终赚了百分之二三十,相比同期许多赔了的人,已经是很好的成绩了。但终究觉得无论是外汇还是股票,都只能当玩具玩玩。
炒这些东西,从中找到些许规律,并尽量做出准确的趋势估计,固然可以满足自己的成就感。但那实在是太浪费时间和精力了。人不能把美好的青春浪费在这么点成就感上。
不过一直以来,我还是乐于帮同事做分析,许多人也信任我的判断。只是每每说到自己公司的股票,我只有一句话,要相信自己的公司,自己做的事业。因为自己公司的股价,是股市上唯一能靠自己把握的东西了。
今天,ntes 几经沉浮,再次升到 24~25 美圆(曾经一拆四,相当于以前的 100 美圆左右)。我很庆幸我坚持的理念,把自己大半的积蓄都投资在上面(19 美金,大家都纷纷套现时还继续跟进过,当然是在窗口交易的),它给了我莫大的回报。
03 年的下半年,我们确认要购买一个成熟的引擎制作 3d 项目(不久被定名为天下二)。dingdang 最终选择了 bigworld ,价格不菲。再此之前,我们也和很多游戏公司谈过。曾考虑过无冬之夜的引擎,甚至还联系过暴雪,希望他们把魔兽三的引擎授权给我们开发,结果当然是被拒绝。
bigworld 几乎是最后唯一的选择。dingdang 看中的是他们宣称的网络模块的优秀性能。这是一种动态负载均衡的技术。
bigworld 和别的网络游戏不同,它并不是把地图切分成一个个独立部分分担到独立的进程中去管理。这样比较来讲,bigworld 是以人群而不是以地图区域来分担负载的。举个例子,如果有一大堆人拥挤在一起,那么他们就由一台服务器为它们服务。当这个人群群体向一个方向移动时,那么为他们服务的服务器也会跟着在虚拟场景中移动。只到有人从里面分流出来,在资源允许的情况下,分流出来的人会进入一个新的服务器。
听起来很神奇,bigworld 理论上可以支撑无限大(其实还是有限的,只是比常规做法大几个数量级)的游戏世界。世界间的每个区域都是无缝连接的。因为服务器本就不是按区域划分的,那就谈不到缝了。
我们拿到了部分代码,服务器真正核心的那部分(负载均衡)他们不愿意卖给我们,只是提供了二进制文件。dingdang 读过入手的一些程序,据说代码质量很高。反复衡量后,决定购买这套引擎。我说,其实没有什么东西是绝对神秘的,让我试试,可能可以还原被隐去的代码。
如果允许我接触已经购买的代码,需要签下一份保密协议。这样,我就签了,和许多正式转入 3d 组的程序员一起签的。kyo 也在那时脱离了大话二的开发,进入这个小组。
bigworld 的服务器是用 C++ 编写的,跑在 linux 上。当时只支持 red hat ,而我们公司用较多的是 freebsd 。部分源码缺失,使得移植很困难。我拿到 C++ 的头文件和那些 .o 文件后,发现做个简单的逆向工程,甚至可以把大部分缺失的代码还原出来。隐藏的源码的那部分其实和开放源码的部分耦合度很高,设计上根本不应该拆分开。它们中间有着千丝万缕的联系。部分内部数据结构虽然表面看不到,但是到后来我基本都推测出来了。
由于 bigworld 大量用了多重继承,早期分析还是挺麻烦的。读这些汇编,让我对 C++ 编译器生成出来的复杂的数据结构有了几分认识。几个月后,对于各种形式的 C++ 程序最终编译出来的汇编形式,以及对象的内存布局,我几乎都能立刻在脑海里做出条件反射般的印象了。对着这些汇编码,新写下的 C++ 程序重新编译后,可以做到和无源码的 .o 文件,逐字节一致。
这个工作其实只做了一半,后来公司花了极大价钱买下了全部的代码。只是那个时候我已退出天下组,没有权限去看那些东西了。
从 bigworld 的源代码中我倒没学到什么新鲜东西。那段时间只是把逆向工程当成一件有挑战的趣事在做。做的过于细节,反而无法高屋建瓴的来看 bigworld 的整体设计。额外的收益就是实践了一把 C++ 的对象模型,我想当时的公司里不会有比我对 C++ 语言 更熟悉的人了。
年底,由 dingdang 带队,kyo 我还有老王三个程序,月猫和陈由金两个美术,六个人出发去悉尼接受 bigworld 开发公司给我们做的短期培训,学习 bigworld 的用法。
此行让我感触比较深的是老外程序员的敬业。他们工作很正规,一天八小时都在那写程序,如果没有特别的事情,不会像我们那样在办公室里穿来串去。下了班就准时回家,上班就工作。可以说,一个工作日就是一个,不象我们公司,程序员们相对懒散,除了短期的兴奋期,每天集中精力能写程序的时间远不到八小时。想来这也不是网易一家如此,我见过的许多国内公司都有此问题。所以在澳洲看到的情景给我不小触动。
另外他们的电脑,大多数人都装的 linux ,运行 windows 的机器上没有任何盗版软件。一个个把画笔和记事本用的相当娴熟,因为只有这些是不用额外掏钱买的。
回到 bigworld 的话题上,我学到并欣赏的一点是:他们嵌入的 python ,使用起来非常方便。client 和 server 之间完全屏蔽了网络这个东西。server 的各个进程之间也感觉不到跨进程通讯的存在。这应该算是一个设计非常良好的引擎了。给予了我后来几年独立开发的东西许多灵感。只是隐藏了太多细节,也出现了很多局限性。从我的感觉上,引擎是为特定游戏类型去设计的(或许他们最早想做一个 MMOFPS?),离我们心目中 MMORPG 的需求有一些距离。
后来的发展也的确是这样。可以说,03 年到今天(08 年),网易和 bigworld 公司是一种相互依存的关系。我们用他们的引擎,提出各种意见,找到设计问题和 bug ,反馈给他们修改,一步步的把 bigworld 打造成更适合现代 MMORPG 的游戏引擎。kyo 后来担任天下二的技术主管,坚定着不自己开发服务器的分支版本,一切问题交给澳洲处理的方针。虽然开发过程往往有点憋火,但也保持了最终版本的唯一。最近几天在看《人月神话》,里面提到设计概念一致的重要性,这就是一个佐证。
如果让我主观的评价一下网易购买 bigworld 的意义,我想说,我们其实是花钱雇佣了一支海外军团,帮我们干活呢。
在澳洲,别人公司的办公室里,我跟 dingdang 吵过一架。可能让老外看去有点莫名其妙了。
我说,花了这么多钱,购买这么贵一个游戏引擎,我们就应该在游戏设计上有所突破。既然 bigworld 的技术优势就在于更大的世界,更多的人互动。我们为何不为之实现一个不一样的游戏出来,突出这些特点。而不仅仅是重复已有的网游游戏模式,只是把我们已经做到的 2d 游戏 3d 化。如果不做这些,让我们自己开发一个 3d engine 就够用了,不过半年的时间,我有信心搞定。
大概就是这样的观点吧,具体也记不清了。不知为什么,我们的分歧越来越大。最后,我坐在桌子上一言不发。过了好久,dingdang 心情也平静了些,主动过来向我道歉,为他的态度道歉。这是我们第一次,也是最后一次争吵。其实我能理解他,一如既往。
回广州的一年后,类似的问题我和叶航也争过一次。慢慢我就明白,永远不要对别人的项目指手画脚,当局者未必迷,旁观者未必清。有什么事情自己有想法的话,最好的办法是自己去做。
在我们一队人去澳洲上飞机的那一天,还有一个有趣的小插曲。当天公司的中层人员都被安排去参加一个管理培训。虽然我手下没有一个兵,可也被安排去了。
估计是丁磊故意的,dingdang 我 还有张金等五个人被分到一个组。培训课上做了一个小游戏颇有意思,培训结束后,我们还热烈讨论。真的是可以看出每个人的性格来了。有兴趣的同学可以找人做上一次。
游戏是这样的,五个人被发了五张纸。游戏开始后,大家阅读手上的纸,并努力完成游戏。这个游戏需要五个人合作,但不许语言交流。信息沟通只能靠传字条。便签纸是可以无限取用的,但是每个小组只指定了一个人可以向任何一个人传字条,而其他人只允许向他传。
我们这一组,这个关键人是张金。游戏一开始她就收到了大量的字条,忙个不停。
我拿到的纸上什么字都没有,只画了五个奇怪的符号。我觉得其他人也应该是如此,我们借助张金传递着信息,想弄清楚别人手上都画了些什么。大家都在猜测这个游戏到底想让我们做什么。很快我们就达成了一项约定,在字条上写上 to XXX, from XXX ,让张金负责转发。比如我想问 dingdang 点什么,就写上 to dingdang from 云风。
一开始我在字条上写了好多,写了我看到的图案,还有我的猜测。写了很多字,比如,假设游戏需要我们找出所有的图案,我们应该怎么办;假设游戏需要我们找出一个特别的图案应该怎么办,假设游戏需要找到某个人手上一个特别的图案应该怎么办……
而旁边 kyo 的组没多久就完成了游戏,相继还有许多组。我们这里还一筹莫展。
我是颇为着急,写了个字条给张金,让她把所有手上的条子全部给我。因为我看她在那里一边分析着手上的情报,一边帮其他人传递,实在忙不过来了。dingdang 也在那边沉思,不断的找张金要新的条子。我想这么下去也不是办法,索性一个人来做算了。
当我对比了所有人的字条,艰难的从杂乱无章的各种信息中判断游戏的真实意图时,我发现每个人的图案都有一些共同点。如果这是有一道智力题,那么就应该是找出大家公有的部分了。但是老师不理会我的结果,直到 dingdang 最后也做出了判定,才结束了游戏。
游戏的谜底原来是这样的,dingdang 那张纸上除了五个图案外,还有详细的文字解说。明明白白的写着,找到五个人手中共有的一个符号。
老师向我们解释,其实这个游戏中每个角色都是有象征意义的。拿到 dingdang 那张纸的象征着老板,他知道目标;负责中转的人,张金那个角色,相当于管理人员,她负责跟员工沟通;剩下的三个人,就是公司的员工,他们负责实现目标。
在游戏中,dingdang 始终没有想到,别人其实都不知道游戏要干什么,他以为大家手上均有文字说明。认为只要通过张金,最后总能有一个人完成游戏。而我当时所想,就是大家和我一样,都只看到一堆莫名其妙的图案,我们的目的是猜测游戏目的。
kyo 那个组之所以完成的快,和 kyo 的第一张字条分不开。kyo 明确的写道,我不知道我要做什么,我的纸上只画了这些……。并且他不厌其烦的把这段话 copy 了 4 份,转发给每个人。当“老板”得到这个消息后,再向“管理人员”要求把所有信息转到他那里,很顺利的就找出了答案。
真是可笑,我们这一组,做如此要求的人却是什么都不知道的我。
这个游戏教会了我,让一个团队有一个明确的目标是多么的重要。由于信息不对等,每个人看到的东西都不一样,想的也不一样。我们在团队合作时,沟通胜过一切。说出你之所想你所知,了解他人之所想所知,道理很简单,做起来很难。
谢绝转载
Comments
Posted by: panzhiqi | (42) June 5, 2008 03:18 PM
Posted by: 白菜 | (41) May 27, 2008 10:31 PM
Posted by: 亮 | (40) May 27, 2008 12:31 AM
Posted by: 王者之剑 | (39) May 24, 2008 01:55 PM
Posted by: JackH | (38) May 22, 2008 12:34 PM
Posted by: sword007 | (37) May 22, 2008 11:06 AM
Posted by: asuo | (36) May 22, 2008 12:11 AM
Posted by: ddk | (35) May 21, 2008 02:24 PM
Posted by: 不空 | (34) May 21, 2008 10:01 AM
Posted by: foxer | (33) May 21, 2008 08:40 AM
Posted by: coolwind | (32) May 21, 2008 01:00 AM
Posted by: Cloud | (31) May 21, 2008 12:35 AM
Posted by: joe wulf | (30) May 21, 2008 12:03 AM
Posted by: 七生 | (29) May 20, 2008 11:50 PM
Posted by: sboy | (28) May 20, 2008 10:34 PM
Posted by: lk | (27) May 20, 2008 09:45 PM
Posted by: zen_yue | (26) May 20, 2008 08:52 PM
Posted by: 风舞影天 | (25) May 20, 2008 08:50 PM
Posted by: 张胜 | (24) May 20, 2008 08:16 PM
Posted by: 啃饼 | (23) May 20, 2008 07:52 PM
Posted by: Jai | (22) May 20, 2008 07:48 PM
Posted by: Jai | (21) May 20, 2008 07:45 PM
Posted by: Jsp | (20) May 20, 2008 07:14 PM
Posted by: adon | (19) May 20, 2008 06:28 PM
Posted by: 天堂的隔壁 | (18) May 20, 2008 06:09 PM
Posted by: hello_world | (17) May 20, 2008 06:07 PM
Posted by: luke | (16) May 20, 2008 06:01 PM
Posted by: joe wulf | (15) May 20, 2008 05:55 PM
Posted by: Anonymous | (14) May 20, 2008 05:43 PM
Posted by: Listener | (13) May 20, 2008 05:09 PM
Posted by: big | (12) May 20, 2008 04:48 PM
Posted by: Cloud | (11) May 20, 2008 04:19 PM
Posted by: heidixie | (10) May 20, 2008 02:20 PM
Posted by: Kxjiron | (9) May 20, 2008 02:19 PM
Posted by: killy | (8) May 20, 2008 09:50 AM
Posted by: 顽石 | (7) May 20, 2008 09:12 AM
Posted by: yayv | (6) May 20, 2008 09:12 AM
Posted by: sky | (5) May 20, 2008 09:03 AM
Posted by: nothanks | (4) May 20, 2008 09:02 AM
Posted by: joe wulf | (3) May 20, 2008 08:32 AM
Posted by: Anonymous | (2) May 20, 2008 07:42 AM
Posted by: bovgrey | (1) May 20, 2008 01:55 AM