公司技术管理角度看C++游戏程序员发展
H3D,2008
2011补充: 这是一篇2008年的老文章。发这里原因有2,一来本blog没有。二来这篇文章最后一部分关于某个程序员个人价值的预测,部分应验。这位程序员决定出来单干后,很容易拿到一大笔投资。 某种意义上,这笔钱代表着这位技术人员和其团队的价值。是在公司还是出来创业,与本文无关。也无所谓。从一个技术员角度出发,提高自己的能力和视野与经验才是提升实现自己价值的道路。
这是我多年来招聘培训游戏程序员的一点想法。一直想汇总一下。主要目的是为了更好的对公司新进C++程序员进行培训,并且建立起游戏程序员培训,发展,成才,成为核心骨干,管理层,期权收益人等一整套体系。因为对于MMO游戏制作来讲,解决好C++技术队伍,是保证合格软件的基础之一。
我在的H3D Studio核心技术人员和游戏制作管理人员全部是SMTH BBS游戏制作版成员。从99年开始截止BEGINER的历任版主都在H3D STUDIO里工作过。在这里我把具体的培训以及技术队伍组建的内容去掉,只和大家聊聊关于游戏程序员切身利益相关的事。
另外这不是居高临下来评判什么事情。我本人也不是多么高级的技术人员或者管理人员。只是坚持做一件事情年头很长教训很多而已。所以有些体验。文中所有评判其他结构或人水平低,并不是说我本人水平有多高。不要误会。
1 ,C++游戏程序员现状
中国C++程序员100%都是自学的。因为中国几乎没有象样的C++培训机构。大家都知道社会培训是赚钱为主要目的。能在那里成才是个大运气。也不象JAVA有SUN公司一手推行。中国大学教育里也根本没有C++教学。关于C/C++基础课的知识,只是让学生入门。但对于实际的C++软件工程应用,大学课本知识实践意义不大。最重要的是,大学里没有合格的C++老师。编程是门技术,叫手艺也行。而大学是搞科研的,多的是科学家,靠出PAPER教科凭职称为生。并不是技术员。没有10万行以上代码经验和成功软件项目经验的人,很难教出中高级C++程序员。
游戏制作业对C++程序员的要求是比较高的。比一般行业软件高很多。因为任何一个MMO都是个中大型软件项目。日使用人次达到几十万上百万,同时使用人数几十万在线的大型网络多人交互软件,集成了超过十几项专业领域编程技术的软件,想不大都不行。
另外,中高级C++程序员能力一般都很强。因为都是自学成才,这需要较高智商,很强的自学能力,解决问题能力,和克服困难的毅力。但是这种人才在游戏行业里人数并不多。抛开凤毛麟角具备整体大型软件架构能力的高级人才不谈。能够承担独立模块开发,具备独立解决问题的能力,写出在空间,性能,可维护性等几个方面达到要求的C++程序员,也是很难找到的。而具备这些能力,同时又具备一些专业领域技术的人(图形引擎,网络引擎,等),更加稀少。
所以,即便是大游戏公司,对于C++游戏程序员的需求,也是永远不能够得到满足。而已经在公司工作的C++程序员,不经过短则3个月,长达1年的锻炼,也无法真正胜任独当一面的C++游戏程序开发工作。
2 ,MMO游戏开发对C++游戏程序员要求
前面提到,所有MMO游戏都是中大型软件。软件占用空间,稳定性,性能,可维护性等各项衡量软件质量的指标,对MMO游戏软件的要求都非常严格。远大于普通行业软件。这种规模和银行系统类似。而客户端和软件逻辑比一般的商业软件又要复杂很多倍。这就要求软件编写人员具备较高的程序编写素质。
游戏软件中,解决好软件工程部分,只是项目的1/3。另外两部分是策划和美术/音频。从经验来看,需求变更对于MMO游戏软件,不是偶然事件,而是一种MMO游戏软件开发的基本属性。游戏软件投入大,周期长,风险高。MMO市场变化也大,交互电子游戏发展迅速。游戏软件必须面对外界变动。又因为开发周期长,所以软件需求变动成为了软件开发的一种基本属性。犹如复杂性是软件工程的一项基本属性一样。
这导致游戏软件的开发充满了不确定性。交互娱乐不同于商业应用。娱乐是属于理性和感性之间的领域。而C++开发面对就是0和1的二元世界逻辑。这两个领域存在着不可调和的矛盾。这种情况,对C++游戏程序员提出了更高的要求。
首先,基本C++知识,C/C++运用技能,必须极其扎实。并不是游戏软件开发用到什么平时书本上很难得到的知识点或者技能点。游戏C++开发的知识体系和技能体系,利用现有C++书籍就可以满足。比如《C++ PAORGRAMMING LANGUAGE》《C++ PRIMER》《EFFECT C++》《MORE EFFECT C++》等。但是在开始游戏编程之前,把这些书本吃透并且实践熟练的人,非常难遇到。当然能够真做到这点的人,已经是个中高级C++程序员了。我曾经遇到过一个,毕业工作不久就去了GOOGLE
其次,对于面向对象的深入理解。是非常重要的。熟练掌握C/C++语法,编程技巧,只是满足了C++游戏程序员一部分要求。而面向对象观念的深刻理解,会为大型C++项目开发带来翻天覆地的变化。 有时候,在一个10人以上并行开发的C++游戏项目中,面向对象方法会成为救命稻草。《设计模式》以及《设计模式解析》相关的书籍,也是必修课。
最后,好技术人员的本质是自大的。这属于正常。但是如果这种习性影响了自身继续提高和团队合作。以及影响了其成为技术管理者和项目技术核心时,那么这种技术人员的自身价值会大打折扣。 如果早日越过自命不凡这一关,扩大眼界,继续在综合素质上提高。在技术管理能力,架构能力上提高,其自身价值才会继续增长。落到实处,就是待遇和身家增长。
由于游戏开发的本质是团队开发。任何时候,只有对一个团队有价值的技术人员,其本身的价值才有可能得以体现。
3 ,成长和技术发展路线
一般技术人员发展有几个阶段
1 ,具备独立开发局部功能的能力
比如为某个UI编写逻辑接口函数。为某个LOGIN对话框编写自绘制控件等。
2 ,具备独立开发和攻关某个功能模块的能力
比如为游戏增加一个小型逻辑功能模块。
3 ,具备独立设计并开发某个系统的能力
比如设计和开发AUTOPATCH 系统
4 ,具备解决技术难题,设计架构的能力
比如开发网络同步仿真系统,开发一个中大型游戏制作工具
5 ,具备整体架构,管理,协调其他人共同开发一个大系统的能力
客户端主程,服务器主程,引擎主程等
6 ,技术director
制定技术发展方向,技术团队建立,技术管理等
在迈向每个阶段的过程中,伴随的都是巨大的工作量和工程压力。有时候是跨越1年的失败等等。在公司项目不成功时转换单位,重新开始,或者继续做为核心团队留在公司继续从新的机会做起,都是好的办法。但关键是吸取经验教训,尽量多学多练。并且结合自身长处发展。当然,游戏制作人员,最好还是依靠一个核心团队。成为核心团队的一员。
能够达到第三档的程序,已经是公司不可缺少的人才了。但往往程序员自身对自己的认识,和公司对其的认识,有时候会有差异。我碰到过一些人,脑子好用,写东西很快。各种技术都有涉猎。但总是不放心让他独立开发设计某个系统。哪怕是相对独立的工具。也会被搞得一塌糊涂。要后面人不停擦屁股。可自己还觉着自己水平很高。这种人浮躁,眼高手低,不愿意细致周全的做好一件完整的事。所以就可以看到他不停的跳来跳去,可在新公司的职位也没有见多么提高。公司非常重视交给一个程序员一件事,他是否能完整,考虑周全的把事情做完。哪怕时间长一点,也不能不做完。这会给工程带来致命的后果。
4 ,发展待遇
从自身经验出发谈一下公司是怎么考虑技术员工待遇的。
前面提到的6档,粗略了划分了待遇水平。其实到了第三档,你的待遇已经是这个行业所决定的了。而不是某个公司决定的。因为游戏业大量缺乏这样的C++程序员。如果具备这个水平,在几个大城市游戏公司找到工作并不难。大公司提升慢,还有我这种不到百人规模的公司要。所以行业价格才是公司要考虑的。如果给少了,软件项目的C++程序员流失会带来较大影响。但给的多,其实是C++程序员自己的价值增长瓶颈。如果几年下来一直以为自己水平就该拿这么高,结果到了一家整体技术水平比较高的企业,就会彻底傻眼。这个时候再放低心态去重新开始,对技术员来讲就是件很艰难的事了。
在目前游戏行业技术水平普遍较低的情况下,哄抬程序员工资水平对程序员自身好处也不会很大。就算一个新手本来拿几千的水平,给他1万。他根本就不会知道自己到底有多少水。一年下来也就多拿了3-4万人民币。可耽误的是学习,影响了心态。而那些心态好,知道努力方向的技术人员,干个3-5年后如果有拿期权和股权的机会,比那些一开始虚高的人,身家就不知道高多少倍了。
下面再谈谈我个人在招聘C++程序的体会。
1 做为C++程序员,成长周期比较长。如果是新手(代码量少于2万,没有做过大型项目的),会考察3点。是否踏实肯钻研,有无责任心,以及是否够聪明。如今,满足这三点的人其实不多。
责任心是人品,决定了是否对公司有贡献。这是最重要的。有些人其实很自私。这种人对公司贡献是负数。而且到头来,自身价值也很难起来。因为技术是要靠游戏的商业成功体现价值的。要取得商业成功,就需要一个团队为一件事付出。是否踏实决定了能学会多少技术知识。关于智商,我是最近2年才意识到人的智商确实有很大差别。干程序这行,智商必须越高越好。否则前途不大。
2 如果是有过2-3年C++程序经验的人,应考察的是人品,是否自大,是否有合作意识,是否跳槽频繁。
首先还是责任心。太自私,太为自己着想,时刻把自己利益看成最重要的人,到哪里都不会受欢迎。无论他技术有多好。
然后考察的是是否自大。人最容易自大的时候,往往是对一门技术已经入门,取得一定的小成就。但是眼界还没有开阔,没有领略到这个领域真正深入的技术知识。周围缺少好技术的人。这个时候,技术人员都容易自大。适度的自信和自大是允许的。但是目空一切就完蛋了,说明这个技术人员的提升空间很小。
合作意识是游戏开发的关键。包括交流能力,思考和解决问题的思维方式。一个喜欢独来独往的技术人员,在游戏团队里是个很可怕的事情。因为游戏软件不是一个人能够完成的事情。由于逻辑复杂,需要各种专业技术领域知识,需求变动频繁。每一步都需要团队通力配合。缺乏这种意识,或者对团队开发不适应有抵触的技术人员,在游戏开发领域存活的希望不大。
做为一个C++程序员,跳槽频繁的履历是很致命的。做C++时间长的人都知道。进入一个庞大的C++软件工程本身就需要不少时间。经过培训,项目熟悉,在为项目做贡献,这个时间短不了。如果一个人经常跳槽,说明他一直没有踏实在一个项目里深入做过核心的东西。或者做失败一个马上跑掉。这种人公司不敢要。
3 对于有专项技能的程序员,比如图形程序员。C++只要入门有培训空间即可。但对专业要求比较高。应该是已经在某个技术领域钻研比较深。 当然最后在公司还是得成为使用C++熟练的高级程序员。因为任何专业领域的技术如果要应用到工程中,还必须用C++做工具。
4 好的C++游戏程序员,其实不容易找。如果他干得好,早就成为项目核心成员。如果项目不错,自身待遇也会很好很稳定。不需要通过一般应聘渠道应聘。不是被拉到公司做核心技术拿期权,就是自己创业。
这里我打个比方。网易有个云风。大家都知道他是大话西游2的客户端主程。他是中国第一个做开源C++游戏引擎的人。开放了一整套C++游戏引擎代码。这是他大学时做的。毕业后去网易。有了平台,做成了中国历史上最成功的MMO之一。做为游戏技术人员,他的价值可以说已经是很高的了。到底有多高,我们都不好瞎说什么具体数字。但可以这么刨析一下。
一个经验丰富的C/C++程序员。有过中国自主研发在线过百万游戏的成功项目经验。目前有网易出钱让其独立领导队伍搞引擎和游戏产品已经快3年。这样的一个履历,经验,本身就价值很高。他在任何公司都可以找到年薪几十万的工作。如果他具备管理才能。哪怕就是项目管理,或者技术管理能力。对于一个上市公司,他能做出的贡献,应该用百万/年量级来衡量。如果他能找到一个商业人士,负责舵手,并且自己具备一定商业能力,独立创业。吸引的天使风险投资也得几千万(否则做不了事,当然)。如果产品能做成,身家到达几千万是很自然的事。
我相信中国游戏程序员水平,运气,发展空间比他高的人不多。那么我们可以拿他做个标杆。
我知道很多人不服他。不过这里说的问题并不是关于他本人的。也不需要对他本人做什么服不服的评判。做为一个社会的人,不是靠能写多少行代码,代码多么优雅水平多么高来衡量身家的。从这点说,技术没有转化为成功商业产品之前,它的价值为0。做为技术人员,社会衡量他价值的标准,并不是要去阅读代码是否质量优越速度飞快。而是看他能为一个成功商业产品或者公司发展做出多少贡献。这个道理,几年前我还不太明白。而且我做为一个技术人员,相信多数技术员同胞们都不太可能从根儿上理解和认同这个看法。这里不是评判水平,而是评判价值。你的价值代表了你能够拿到的待遇。这个不是某个老总说了算,某个公司说了算,而是取决于人均GDP和当前行业发展水平,行业销售额的。我想这个道理也适用于所有游戏制作相关人员。搞制作的都是技术人员。