本文首发于知乎专栏“游戏开发随笔”,作者为前天涯明月刀OL技术总监/引擎技术中心负责人顾煜,游戏葡萄已获转载授权。
上次聊到了如何从技术专精人员发展成冲在一线的技术管理,今天继续讲后续的个人经历。
做完那个项目的AI团队Leader,后续继续回Splinter Cell组做引擎相关工作。Leader已经做好了多线程的架构,我进一步在Xbox360上做优化,很多有趣的优化点或者高难度的Bug,在BUG往事的系列里都说过,就不重复了。
后续项目在一个很小的项目里面做主程序,目标是4个月完成Rayman疯狂兔子的Wii到Xbox 360移植,并提交审核。之前的积累效果就显示出来了,一开始还是只有我一个人做前期工作,移植Wii版本的Jade引擎到Xbox360。有了信心,就不再惊慌,加上运气不错,一个多星期就完成了初步移植。
但总体来说,今后的2-3年里面,没有突破性的提升,无论是技术上还是管理上。
UBISOFT是一个很强的技术公司,内部技术相当出色。但对引擎程序员,有一个非常大的限制,就是基本没有机会从头参与开发一个引擎,你的选择,无法就是在已有的Unreal为代表的商业引擎,或者法国人做出的Openspace以及相关各种分支引擎,或者加拿大分公司的一堆引擎里面选择。
而当时国内公司,各种自研引擎已经满天飞,面试招聘的时候经常碰到各路小团队CTO、技术指导,表示做过某某引擎,还有人语重心长的劝我,表示做引擎没啥难的,想做就做一个呗...大多数此类引擎的水准,大致停留在10年前,往往只有渲染部分处在5年前的”领先”水准,工具链、跨平台、多人协作等各方面,都没有看见什么深入的考虑。
但另一方面,在UBI这样的公司呆久了,不自觉的对从头做一个引擎有着巨大的恐惧感,公司内部有足够多的好选择,必要性不大,而且见过了一流的引擎,庞大的工具链,会不由自主高估困难性。
但内心的蠢蠢欲动,还是推动着我,走出下一步。
09年结束的时候,来到了腾讯。先去各个部门打了一下酱油,了解了一下公司,然后参与了天涯明月刀OL项目。对我而言,这个项目是我第一个正规的网游项目,虽然在前公司也参与过一个网游项目,但外企在思路转型上远远谈不上到位,国内免费游戏都做了很多年了,外国老板表示还有免费模式,真能行吗?这个项目也是一个好机会,让我有机会带团队真正从头做一个现代的引擎。
天涯明月刀的引擎和游戏开发经历先不细说,和咱们这个主题不一致。还是围绕个人成长,展开说说。
一到腾讯的时候就非常紧张,过来的时候TItle是高级架构师,我有着极其强烈的不能胜任感。对我来说,有一些领域是全新的,首先在客户端领域接触到了国内常用的Gamebyro等引擎,和UBI一系技术完全不同,当时也无从判断究竟Gamebyro之类的引擎是不是代表了先进方向。
其次在服务器领域也是见到了国内常用的技术,在协议处理等角度来看,是相当简单粗暴的,习惯了欧美一套复杂处理方法,非常不适应。更大的挑战在于,以前大量项目都是基于移植或者成熟大型引擎,现在一下子拥有更大的技术发挥自由度,在更简陋的开发环境中,反而不知道从何做起了。
在这么多年的个人发展中,总在那些关键时刻,有一些不能胜任感,然后奋起直追,让自己慢慢胜任。直到前些年在腾讯的经历,才让我意识到这适度的焦虑给我带来的帮助,我也开始更刻意的让自己常常有一些不能胜任感,以便避免自己过于安逸。这个不能胜任感,换另一个说法可能更能被人接受,叫做走出自己的舒适区。
为了缓解焦虑,开始了疯狂的学习。那两、三年的阅读量非常大,每天都有3-4小时在看技术资料,做笔记,分析和思考。先要补上自己的短板,把自己不熟悉的领域熟悉起来。好在孩子还没有读书,也有足够精力,我每天早上提前一个多小时就到单位晨读,晚上回家还会抽出很多时间阅读。出差时,晚上或者周末也在酒店阅读。
几年的高强度学习,逐渐缓解了我的焦虑,系统的阅读了大量主题书籍、Gems类型书籍和会议ppt等,大致找到了感觉。可以和别人侃侃而谈,不再会在拿出名片的时候脸红于架构师的Title了。
从一个技术指导(Tech director)的角度上,我不需要事事都会做,自有优秀的同事来搞定,我只是偶尔需要在必要时刻,保持一定的突击能力,可以冲在一线解决困难的问题。但我必须事事了解,知道技术大致的Trade off,知道复杂度,知道和其他系统的关系。换句话说,这个时刻,技术广度对我来说,比深度更重要。
技术深度的方法可以通过突击学习,广度积累当然也可以,但还有其他方法可以做到。毕竟这时候我也工作了十几年了,不如刚毕业的时候精力旺盛,孩子也是一个精力黑洞,如何多快好省的培养自己能力,提高效率,变得更重要了。
介绍一些有趣的实践方法,可以帮助积累技术广度:
面试学习法:我常年负责游戏客户端领域的技术通道面试,技术通道面试可以简单理解成对面试者定级别的复试。同时我自己的团队也招了很多人,面试非常多。从HR的反馈来看,被面试的人,表示我面试时候领域知识问得深入,且范围很广。
其实在面试时,面试官有巨大的优势,面试者的经历简单扫一遍后,就可以随意发问。我有主动权,可以声东击西,选擅长的深入问,不懂的可以简单带过,保证不露怯。也可以长驱直入,对自己感兴趣的领域,让面试者深入讲讲,听个大概,成为自己事后了解这个领域的入门材料。
可以左右互搏,对于一些面试者的有趣观点,随手记下,下次可以问另一个面试者怎么看这个问题,让他们的观点彼此PK。可以温故知新,顺便和面试者讨论讨论一些主题问题,把平时学习的新技术用上,如果他回答不出来,正好复述一遍,既帮他开拓眼界,也可以加深自己对这个技术的印象。面试时学习法很适合快速拓展知识面,每次面试都是一次技术切磋,如果有机会面试级别高的开发者,更是一个很好的成长经历。
项目评审学习法:公司内部的项目评审技术评审,也是一个不错的学习途径。腾讯的内部游戏开发,有较完善的流程,除了产品评审环节,也有技术评审环节。我做了几年技术评委,通过参加评审,我有机会了解每个项目大致面临的技术难题,也经常能看见一些闪光点。
比起面试学习法,技术评审接触的都是公司内部同事,即使有什么东西当时没有理解正确,或是过了很久想到这个技术,细节都忘了,也可以找到当时的同事请教。
职级晋升学习法:公司内部对程序员的技术能力升级,有一整套考核,到了一定的职级,就需要有正式的答辩环节。我常年负责技术评审,申请晋级的同事们会准备自己的工作成果展示,我能看见大量技术问题的分析和解决方案。
和项目评审中的学习有所不同,项目评审时角度更宏观,具体技术细节不会涉及太多,而自己职级评审中,每个同学都是竭尽所能,从各个角度介绍自己的技术,有问必答,还有事后给面试官送补充说明材料的。刚参与技术评审的时候,两天评审中,往往能有2-3个技术点让我眼前一亮。当然这个学习的衰减速度非常快,前几年的评审,往往两天听完,也没有什么有趣的技术点了。
业界会议学习:游戏圈子比较开放,每年的GDC或者其他开发大会,都会有开发者无偿公布很多新的技术,或者总结自己项目的得失,介绍好的实践。参与这些会议,是最好的手段,可以快速和国际顶尖水平开发者对齐。
你需要的只是一张来回机票,几天住宿,一张门票,和英语听力。每次参加完会议,总是特别兴奋,有很多好想法想和团队分享,有很多改进可以做进我们自己的引擎。如果没有那么好的条件可以去现场参加会议,也可以关注会后放出来的免费材料,或是购买付费会员账号。
上述的学习实践,本质上就是多听多看多聊,和其他项目多社交,多聊聊技术,出去多看看其他公司怎么做项目,坚持做一阵子,自然就有了技术广度理解。
即使做到了自学成才主攻技术深度,也做到了广泛社交主攻技术广度,依然有可能有不足。下一次我们再聊团队学习。
关注微信公众号“游戏葡萄”,每天获取最前瞻的游戏资讯