论道丨游戏程序员如何自我提升?专访腾讯游戏学院专家叶劲峰
腾讯互娱魔方工作室群技术总监、专家工程师、《游戏引擎架构》的译者、知乎大V,这些是Milo Yip(叶劲峰)在程序员圈子里最直观的标签。同时,他也是腾讯游戏学院专家团中的一员。
Milo曾在香港理工大学做多媒体相关的技术研究,后来加入上海育碧和麻辣马,并于2009年加入腾讯。他也是知名的知识分享者,在知乎上他的粉丝超过27万;在Github上,他梳理的《游戏程序员的学习之路》获得了9000多个收藏;最近他还主编了《腾讯游戏开发精粹》,聚合了一批优秀的腾讯内部技术文章。
本期《论道》栏目,Milo将分享他个人职业发展的多样历程,并提供游戏程序员自我提升和个人发展的实用建议。
文字实录
1、 关于个人经历与职业选择
Q 你当初是怎么进入游戏行业的?
Milo Yip:我初中时就接触了游戏行业,当时自学了图形学、编程的一些知识后,在BBS上认识了一群想要开公司做游戏的朋友,于是就加入了他们,每天3点钟下课去公司,有的时候做到晚上11点才回家,就和正式参加工作差不多。
后来我继续读书,2002年硕士毕业后,在香港理工大学的多媒体部门做相关的技术研究,也涉及了一些游戏引擎开发的应用研究,当时一些技术成果被香港的游戏公司采用。2008年我加入了上海育碧,后来又去了麻辣马,做图形学的工作。
Q 那后来为什么选择了腾讯?
Milo Yip:在麻辣马做完《爱丽丝:疯狂回归》,大家未来没有做下一个项目的计划,于是就集体去见了一些公司,包括英伟达、腾讯等等。我老婆一直在香港,当时她又怀孕了,而腾讯在深圳,可以支持我每天往返。
Q 最开始是做什么岗位?
Milo Yip:还是客户端开发。最开始我是在互娱研发部研发游戏引擎,也会帮一些项目做做优化。当时做的一些中间件,后来还被应用到《天涯明月刀》等项目里面。
待了4年左右,腾讯做了组织结构调整,我通过内部渠道转岗,选择了魔方工作室群。开始是在项目组里解决技术难点,项目成熟后又成立了引擎中心建立团队,我也被任命做了总监。
Q 你觉得游戏程序员在选择工作岗位和公司该注意什么?
Milo Yip:每个人的价值观不同,有人可能会选择最有钱的领域,最流行的领域,比如现在去改做AI。但我觉得做自己感兴趣的事情会走得更长远,从小学开始,我就对图形学、动画、3D感兴趣,所以一直专注于这个领域。
我觉得在游戏行业,如果想钻研得足够深入,那找一家大公司还是会更合适。如果在一个只有50-100个人的小公司,你不可能成立一个几十人的引擎研究团队。像魔方工作室群,有数百人的规模,所以就可以有一个支持中台,允许员工更深入地研究某个领域。
最后,选择岗位时也要注意个人能力和工作室的需求。比如魔方以前做Flash比较多,当时魔方又处于转型手游的阶段,我认为自己在3D上的能力对魔方的帮助会更大,所以就选择了这里。如果当初我去了一些3D积累更深的工作室群,可能反而就没什么发挥的空间。
2、游戏程序员的自我提升
Q 在刻板印象里,游戏程序员是一个特别需要终身学习的岗位,你觉得原因是什么?
Milo Yip:十几年、二十几年前,如果你在大学读图形学,那工作后这些技术就可以直接应用起来。但现在图形学已经发展得很深了,只写渲染引擎里物体的阴影就可以有特别厚的一本书,讲相关的5、60个技术。所以现在学校里的课程就只能让你接触到皮毛,想进入游戏行业做相关的工作,就要补很多课。
Q 那应该如何制定学习计划?比如是自己建立一个知识体系,还是跟着项目需求走?
Milo Yip:一般说起这个问题都会讲到广度和深度。刚开始学习时,你要扩宽知识面的广度,对每个部分都有理解。
比如最开始你可以不知道图形、物理、音频等底层功能是如何实现的,但你可以试着用一个游戏引擎实现一些玩法。但后面如果发现有一个问题,引擎没有提供相关的功能或工具,那你就需要自己去解决它,一级级深挖。
我通常会建议同学慢慢理解自己喜欢什么部分,比如引擎方向可以分为动作动画、物理效果等等,玩法方向也可以分为不同的游戏类型,比如MOBA、FPS的技术框架需求都不一样。一个人最好长时间在一个领域累积经验,慢慢加深深度。
Q 你比较推荐的学习方法是什么?之前看你梳理了一份《游戏程序员的学习之路》,列了很多书单。
Milo Yip:可能我是老一辈的思路,相对于看视频,我更喜欢看书。书籍的知识体系更加规范,知识点消化起来也更系统,可以补充你看视频时遗漏的部分。
所以在《游戏程序员的学习之路》里我由浅到深地列了一些具体知识点,然后在每个知识点上都推荐了一些经典书籍,把它们连接起来,做成了一份图谱。前面的知识大多是基础,后面就是一些可供选择的领域了。比如图形学有哪些分支,你需要学习哪些细节。
Q 你怎么看待基础知识和实际问题之间的关系?
Milo Yip:我觉得遇到具体的工程问题时,最好先看看别人是怎么解决的,有什么理论基础,对整个问题看得更透彻之后再选择。比如A方法和B方法都能解决,那是不是要结合两个方法的优点,做一个C方法出来。
我看过很多人遇到问题马上就想方案,写代码,貌似也能解决问题。但可能后面就有人告诉他,说你这个问题其实是什么什么问题,最好的算法是这样的,你这个是一个很弱的做法。
如果要进入一个新的领域,我同样建议先搭建一个知识体系,看看这个领域最好的书,比方说领头人的著作,或者是本科阶段的教材——这种比较容易学。
Q 分享会不会也是进一步掌握知识的一种技巧?
Milo Yip:我会要求我们中心的人都去讲课,或者多多写作。如果能用一篇文章,或者一个课程把一件事情系统地讲出来,那你肯定能清楚每一个细节,对事物有更深刻的认识。
我觉得很多同事在腾讯内网发了很多不错的技术文章,可以梳理一下出版,让整个业界一同成长,于是就花了1年多的时间,编了一本《腾讯游戏开发精粹》,它将在这个月上线发售。这本书的形式和《游戏编程精粹》(Game Programming Gems)有点儿像,每篇文章都相对独立,而且技术也不依赖于某一个引擎,可以广泛使用。这也算是一种分享的方式。
分享对工作还会有更多帮助,你的影响力大了,项目组自然就会知道你有能力实现哪些技术,这会方便合作。影响力在招募人才的时候也很有用。现在还有新员工在入职的时候,跟我说大一就是因为看到我很多年前的博文,才会选择做图形学的事情。
Q 你认为做游戏程序员最难掌握的能力是什么?
Milo Yip:一个难点是技术创新,因为它意味着能够突破现有的框架,实现新的功能甚至新的玩法。就比如《Doom》想到用3D渲染迷宫的方法,这个技术对于单个产品和整个行业的价值都很大。这是一个很高的目标。
另外还有一点是把握技术未来的方向,决定投入哪些领域。这有点儿像买股票,需要判断哪些才是潜力股。
比如2014-2015年,我参考GDC上一些游戏机厂商的方案,帮《天涯明月刀》做了一套中间件,在PC上实现了一些突破性的大世界的美术细节效果,实现了大量物体的同屏。后来这套技术也被用到了《和平精英》里。
当时手游还处在《天天酷跑》的阶段,我其实不知道大型开放世界手游会成为很重要的战场,但我也在考虑跨平台和跨引擎的应用,几年之后才发现当时的投入是正确的。
Q 在技术领域,很多从业者都在讨论专家路线和管理路线的选择,你的建议是怎么样的?
Milo Yip:真的是看性格。一些人可能技术挺好,但如果让他做组长,管理下属的工作流程,制定计划,他真的做不来。而且管理路线也不好走,一般的组织架构都类似金字塔,一级一级往上升也很困难。我觉得成熟的行业应该允许程序员做到60岁。
Q 你觉得做技术管理的难点主要在哪儿?
Milo Yip:做技术研究只要拿到一个题目,逐一拆解,一步步做出来就行。但做管理考虑的维度很复杂,比如说工作室群有什么策略,我要如何配合策略,研究哪些技术,同时还要考虑人力、财政的情况。
比如说你的团队构成要多样化,比方我们有人很熟悉C++,喜欢学习最新的功能;有人喜欢图形学,自己写一个Demo试验新技术的效果;有人在学术方面的能力更强,跟进每年会议上最新发表的文章;有人有超强的数学能力,其他人遇到数学问题,或者看不懂论文就会找他。
另外做管理还要和人打更多交道,你需要了解大家的想法。在团队人数比较少的时候,每个成员过生日我都会自己烤一个不同的蛋糕,展现一下关心,也创造一个大家一起开心的机会。当然现在人变多了,已经烤不过来了……
3、关于刻板印象
Q 一些程序员觉得自己在做重复工作,提高有限,有一种当高级民工的感觉,你怎么看?
Milo Yip:程序员就是要解决重复的工作啊,你为什么不写一个程序来解决重复的问题呢?
程序员应该做其他人做不了的事情。很多时候我们希望写一个工具,让策划和美术自己去配,而不是策划看到人物走的太慢,也要程序员帮忙改一下,这也能提升项目的迭代速度。
如果你觉得自己的工作内容完全没有挑战性,那可能换个环境会有帮助。程序员应该不断面对新的挑战,不停学习,解决越来越难的问题。
Q 行业一直觉得35岁是个槛,很多程序员都表示35岁之后实在拼不动了。
Milo Yip:国内这个行业可能还不太成熟,加班成了竞争的一个条件,这个情况肯定不太健康。现在我们团队的节奏还好,服务的项目遇到节点也需要加班,但我会努力为他们争取调休,比如最近做完现在的项目,每个人会有8天调休。
怎么让团队不加班也是一个管理上的挑战,可以分享一个技巧:我会要求一些主导的项目做单元测试(unit test),就是自动化测试,这可以保证软件的品质。
最理想的情况是程序每提交一套代码都会出一个版本,经历一次自动测试,这样如果出问题,就能迅速知道是具体哪个位置出了问题,以此减少人力成本。
Q 作为一个实现功能的岗位,程序员应该如何避免和提出需求的岗位发生冲突?比如很多人都会开程序和策划的玩笑。
Milo Yip:提需求,做事情一定要写文档,做完事情也要写报告,让其他项目组都知道我们帮这个提需求的项目组解决了什么问题,有什么量化的结果。
文档也是传播知识的方法。在写文字的时候,程序员可以把抽象的思路沉淀下来;而其他成员再遇到相关的问题,也不用跑来跑去地问别人。所以写作是很重要的工作。
Q 你对技术人员还有什么其他建议吗?
Milo Yip:保持身体健康哈哈。之前我很容易病,也容易累。刚来魔方不久,我们出去开会,开到中间还睡着了。后来坚持运动,减了20公斤,做事情就精神了很多。如果想运动,那就要制定一个计划,一周运动多少天,然后把它变成生活的一部分。
Q 你现在一周运动几次?
Milo Yip:周一到周五做力量训练,周一、周三、周五晚上去游泳,冬天就去跑步。最近我还成功游到了5000米。
4、对未来游戏技术趋势的判断
Q 最后问几个我们向技术人员征集的问题。第一个,一家游戏公司做自研引擎需要考虑哪些要素?
Milo Yip:其实Unity、Unreal等商业引擎已经很成熟了,做自研引擎最大的原因,是要匹配自研项目的特性。
比如《天涯明月刀》的Quicksilver引擎,3-4年前上线时就实现了带有超广视野的渲染效果特性,而且在低端机上也能流畅运行。如果是用通用引擎,就很难针对特定的场景做出最极致的优化。
在我看来,做自研引擎要满足3点:相关的技术实力、长远投资的计划、合适的自研项目。只有需要突破现有引擎框架,满足独特的技术特性需求,才最值得投资做自研引擎。
Q 现在很多公司都在讲技术中台,这个词应该如何定义?什么样的公司应该考虑搭建中台?
Milo Yip:技术中台的目标应该是聚合重复的工作,用最好的人搭建公用的平台、工具、技术(比如客户端侧的游戏引擎、后台侧的服务器框架等等),降低多个项目间的重复劳动和人力不匹配问题。如果一家公司同时有4-5个,甚至10几个项目在并行研发,那搭建中台的需求就比较大。
Q 如何看待光线追踪对游戏的影响?未来什么时候这项技术会成规模地应用?
Milo Yip:现在在PC上光线追踪已经可以实现比较前沿的效果,比如反射和精确的阴影计算,不过它只是一个光栅化的辅助形式。目前这一代游戏主机还没支持光线追踪,新一代支主机面世后,相信很多3A厂商会积极改造引擎和工作流,使用这项技术。
长远来看,未来光线追踪有机会完全代替光栅化技术,届时可能会出现和现在完全不一样的建模方法,比如模型可以基于曲面,而不是三角形来定义,不过这要等待硬件的进一步发展。
但在手游上,这项技术的应用还会经历更加漫长的过程。以过去的统计来说,当前手游的性能,大概会落后PC和主机10年左右。
Q 你认为5G对游戏行业会有什么影响?技术人员该怎么适应云游戏的趋势?
Milo Yip:当前5G已经可以达到低延时、高bandwidth的网络环境,理论上已经能比较好地支持云游戏了。但我觉得云游戏发展最大的问题不是技术,而是商业模式。
现在一两千块就能买到一个性能不错的手机,如果要把游戏的所有计算放到后台去做的话,那反而意味着更高的运营成本,而目前还没看到支撑这个成本的成熟商业模式。
对于开发者来说,云游戏对游戏开发的影响没那么大,PC游戏只需要很少的改动就可以放到云上面,建议大家目前不用投入太多精力。
关于腾讯游戏学院专家团
如果你的游戏也富有想法充满创意,如果你的团队现在也遇到了一些开发瓶颈,那么欢迎你来联系我们。腾讯游戏学院聚集了腾讯及行业内策划、美术、程序等领域的游戏专家,我们将为全世界的创意游戏团队提供专业的技术指导和游戏调优建议,解决团队在开发过程中遇到的一系列问题。
项目指导合作请联系微信:18698874612