对于那些想要进入游戏开发领域的人来说这将是一个很好的指南。
本文首发于知乎,作者“安柏林”现就职于腾讯北极光工作室群,游戏葡萄已获授权转载。
1. 选择
与我过去撰写的普通文章不同,这个系列确实希望被更多对开发游戏感兴趣的同学看到。
我在腾讯北极光工作室群工作,做过一段时间客户渠道的采访,上个月刚结束在几个城市的“巡回”采访。整个采访过程是一个让我感觉非常有活力的过程。看到一张张渴望进入游戏行业、创造精彩作品的年轻面孔,还有什么比这更让人兴奋的呢?
其中我也看到有部分同学很积极,但是走了弯路,把有限的精力用在了错误的地方,很可惜。另外我也在各个渠道收到了很多相关的问题。这里我会根据自己的经验写一篇小系列文章,来聊聊同学们入行的感受。
01决策时刻
我已经工作十多年了,和很多人交谈过他们如何开始想要制作游戏以及如何进入这个行业。
很多人都会经历一个转折点,突然意识到这就是自己想做一辈子的事情。有些人在朋友家玩游戏的时候突然意识到自己想做这件事。我在准备 GRE 的休息时间在 BBS 上看到了《毁灭战士》的一章。一些同事已经工作了,他们的工作与编程完全无关,但他们却在家里玩游戏。
有的在传统的软件公司,厌倦了单调的生活,追求快速变化、需要不断学习的生活;有的一直对视觉的东西、华丽的东西感兴趣。。。
毫不奇怪的是,在开发过程中,那些非常执着、能够保持专注和成长的同事,普遍对游戏本身有着持久而强烈的热情。
不管怎样,当这一刻出现,你被击中的时候,也许你属于游戏开发,游戏开发也属于你。你不妨抛开一切顾虑,开始你的冒险。
02 打工比读硕士的优势
对于学生来说,大四时的选择就是进游戏公司还是考研。我个人的建议是,当你下定决心要做游戏的时候,尽早开始准备,在最好的团队里开始游戏开发。
大家都同意,如果能进好公司、好项目,当然是尽快去,不然这不就是读研的目的吗?
只是有种种现实原因阻碍了我能做自己想做的事,比如本科时玩得太开心,心理上还没有准备好,研究生时跟大我几岁的学长比起来处于劣势等等。
这里很多想做游戏的学生最终都选择在研究生毕业后工作。一个很大的原因是他们没有意识到工作的意义。
a. 经验金矿
这里一个常见的误解是,本科毕业加入项目组,作为弟弟只能打零工,还不如在学校自己做游戏,多学点东西。
但即便硕士毕业加入项目组,你也有可能从杂工做起。说说我研究生毕业刚加入育碧的时候。当时项目组里没有数据经理,所以我一开始就当上了数据“经理”,负责处理各种 Perforce 相关的事务,这完全不是编程工作。后来请了数据经理,我就开始做一些简单的工作,从截图开始,然后给资深程序员做“杂工”。资深程序员在做优化,对应模块有 Bug 的时候,我就会去跟进……就这样,我在第一年里耗费了相当多的时间。
这从项目角度来说其实很正常,项目组总是追求性价比最大化,人手总是不够用的,所以让资深程序员发挥出最大的产出才是最合理的安排,如果一定要有人干杂活,当然会找产出能力最差的新手来干,这就是残酷的现实。
之前在这个回答《被自己写出的优美代码感动得流泪是种什么体验?》(点击阅读原文)里有人留言说羡慕刚毕业就能做高端的东西等等,其实毕业之后有一段时间是不能编程的。
但即便如此,你还是可以获得比在学校里好得多的成长,主要是因为你可以接触到项目组的代码,看到整个项目是如何一点一点实现的;
看看资深程序员如何编写代码,尤其是当你开始帮助资深同事调试时,确实会大开眼界。如果你不明白什么,你可以问,通常都会得到很好的回答。
说到底,一个有经验积累的团队,就像是一座金山摆在你面前,你加入,就被培养为主力,相当于把金子送到你手里让你去捡,你加入打零工,也能挖到,关键是能不能进入金山。
对于腾讯、网易这种开发过n款游戏的公司来说,可以接触到跨项目的优质资源,可以多问一些高手的问题,这个副本掉落的东西可能真的有。
b. 更高层次的学习
很多时候我们觉得在学校有更多的时间、更自由,没有考核、没有领导逼着我们加班,我们可以学得更好等等。
实际情况是,在实际的项目中,我们更容易进入学习的更高阶段:切身感受到学习的意义,并将知识全面运用到实践中。
在我刚开始工作的时候,我看过老程序员们的代码,发现他们对缓存性能、多线程、各种编程模型、语言特性等的掌握都非常到位,可以说多个领域(语言、算法、操作系统、硬件)的知识被很好的融合在一起,并在一段代码中体现出来。
那时这些还只是课本上的概念,我并没有特别深入的理解(尽管考试成绩还不错),更不可能完全理解而只能通过在高难度的项目中全面熟练地运用才能做到。
幸好当时学校的书都很经典,我带回上海,一遍遍地看章节,这次能把代码组合起来,把几个科目连起来,感觉“以前瞎了,现在看见了”。
而且仔细阅读之后,会很有用。你可以更好地理解老手的代码,甚至偶尔会提出不同的见解。之后,你自己也能写出这样的代码,应用到实际游戏中,带来性能和效果的提升,也能看到玩家的感受。这时候,知识的真正意义就显现出来了。
所以,在学校的时候,学习的第一个层次就是对概念有很好的理解,知道什么东西是什么,并且能够通过考试。我学生时代考试也考得很好,读几遍这本书之后,我就会达到这个水平。
要达到第二层次的深刻理解和掌握,最好的办法就是把这些东西运用到真正需要的大型项目中去。
相比较而言,在学校里,有些人能够学到很好的研究方法等优势,但大多数情况下,不如在正式的项目团队中磨练和学习。
c. 工作总和的相对优势
上面讲了这么多,其实跟我自己的经历也有关。我本科的时候是没有做游戏的想法的,研究生的时候才有。虽然研究生所在的实验室(老板很厉害,做的项目也很棒)很厉害,自己也认真工作学习,但是工作之后发现,自己这两年取得的成长跟实际的项目比起来真的是微不足道,几乎是白白浪费了时间。
因此,如果我们决定制作游戏,我们可以将工作和研究生院视为纯粹的学习阶段。在一个好的团队中工作可以:
- 更好的实践机会和更好的学习资源
- 让我们更好更深入地理解学习内容
这件事的意义非常重大,重大到值得我们在本科前期就做好准备,尽早投入到第一线的训练中。
话虽如此,任何事情都不是绝对的。这里的工作意义和团队的水平息息相关。对项目越有经验、越认真,对成长就越有利。如果因为各种原因,人们无法吸收和学习,那么就应该三思而行。
03. 尽早做好准备
之前我们讲过早工作的意义,如果想在大四秋招的时候拿到工作机会,特别是进入一个好的team的机会,这个需要我们有相当的积累。
a. 费用
这里招聘时经常会看到的一种情况是,虽然我想做游戏,但实验室老师却在做完全不同的方向,不过我也可以接受,只要我努力,有所进步总是好的。
这是一个典型的误区,这里大家需要对成本有一个更好的认识。
做A事的成本就是你在同样时间内能做的最有价值的事情,这个事情可能是在一个好的团队实习,也可能是阅读游戏开发方面的书籍、做实际的项目。
如果你本来可以在同样的时间内取得很大的进步,但你却做了一些“有点进步”的事情并对此感觉还不错,那真是太遗憾了。
b. 及早意识到
读罢此文,可以说,少了些“诗意远方”,多了些“务实的对比”。
从中长期来看,我们的发展热情永远是最重要的,但现实是,在大学三年级时与研究生竞争并获得良好的就业机会是一项巨大的挑战。
如果我们能尽早认识到这一点,有意识、有计划地做好准备,那么我们不但更有可能找到好工作,还能做自己喜欢的工作,快乐地成长,甚至可以玩该玩的游戏,打该打的球,拥有该拥有的爱情。大学生活很美好,不应该浪费。
2. 技术准备
当我们选择尽早进入行业并开始工作时,接下来就是一系列的准备工作。这部分也是整个系列的重点。写这个的原因是在面试过程中,我发现很多热心的同学看了各种大V的冠冕堂皇的建议,最后却误入歧途。本该是循序渐进的过程,却最终在没有扎实基础的情况下把大量的时间花在了项目中用不到的东西上。
以下是面试过程中的一些精彩瞬间,我们稍后一一回顾。
【必备】系统的计算机知识结构
[必需] 强大的编程技能
[加分项] 玩足够多的游戏
[加分项] 良好的领域知识积累和优质的游戏开发项目
01找到适合你的方法
在网上我们可以看到很多高手介绍如何学习的文章,这些高手一般能力都很强,虽然不是计算机专业的游戏开发,但是知识结构比专业学校毕业的要好,中学时期就进行过大量的编程实践,或者有较高的学习和开发能力。
有时候这些专家的做法未必适合普通学生。
打个比方,这就是大枪的天赋点:三个系统全部开到最大。
这些还都是普通人的天赋点,总共也就三十点,甚至更少。
这种情况下一定要紧急使用,根据自己英雄特点和打法选择最佳加点,如果你是Ryze就不要往野区加点了。
现实中,我们遇到过太多普通学生满怀热情,听从大佬推荐,走“高端”路线,却严重缺乏基础知识架构和编程测试的例子。
02【必备】系统的知识结构
知识体系有点像武术里的内功,在发展过程中,良好的知识素养,特别是在比较有挑战性的模块,会起到相当的作用,甚至影响我们看待发展的方式。
受过正规教育的人(尤其是计算机能力强的人)在这方面更有优势,一个重要原因是学校的课程设置都是以系统的知识结构为基础,并通过考试和专业作业来强化。
专业学校的学生不管愿不愿意,不管有没有系统知识的意识,都要学。即使当时学得没那么认真,但考完试,以后工作中再遇到类似问题,看到名词总会知道是什么意思,不太可能出现直接的概念盲区。
对于自学的同学来说,编程中遇到不会的问题,不去看比较容易,可能做了一个大项目,不懂得一些知识,也能做得很好,但计算机知识结构在中长期发展中非常重要。
主动去系统化知识需要付出相当大的努力,这是非专业出身的人容易遇到的问题(不是说非专业人士做不到,只是需要注意的一点)游戏开发,专业学校学习不认真的学生也容易遇到这个问题,需要我们多加注意。
然后从毕业生面试的角度来说,一般来说,人们都没有太多的项目经验,所以基础知识的比重在笔试中会考到,在面试过程中也会重点考查,这本身就是比社招比重更高的一个点。
从客户端开发的角度来说,计算机系的正规课程还是不错的,特别是一些985名校的课程,可以跟着练习,重点可以注意一下:
这四个方面在客户端编程中最常用到。
所谓系统的知识结构,就是纵向把这些知识的重点梳理透彻,横向把这些知识点串联抽象出来(可以用思维导图把连接画出来),这样书读起来才薄。
深入了解重要概念,例如:
通过从概念的内在机制和外在表现来理解概念,你将从“死记概念”走向“在普遍联系中理解知识”。事实上,这减少了你需要学习和记忆的东西,你将能够轻松地应对面试。
03[必备]编程技能
所谓基本的编程技能就是:
毕竟我们在项目组就是要稳定高效的解决问题,面试环节还是针对学生的,不需要有太多的项目经验,但是强大的编程能力总是必须的,所以会用各种面试编程题来考核。
通常在积累了丰富的编程经验之后,这一点会做得更好。
实验室有大项目的学生一般成绩会比较好,道理跟专业课上的知识体系构建是一样的,实验室项目一定要坚持做好,不需要自己有太多的主动性。
如果本科生遇到编程知识不足的情况,他们可以:
为自己打下坚实的编程基础。
面试现场经常会有15到30分钟的编程测试,光记住各种概念、知道如何解题是不够的,还需要能够稳定、高效地进行编程。
在访谈过程中,我发现学生们的编程能力差距非常大,优秀的学生写得比从业 5 年的专业开发人员还要快、还要好(当然这并不代表他们开发能力更强,毕竟开发过程逐渐趋向于知识、方案、解决实际问题),他们可以在很短的时间内写得又快又好。
这是一个有着巨大成长空间的点,希望大家都能埋头编程,不断磨练自己的技能。
这里要注意的一点是,如果你在学习过程中发现自己在编程方面严重欠缺,而自己却没有意识到这一点,那一定要警惕了,这是严重缺乏编程积累意识的表现,一定要审视自己的学习渠道,学习环境和氛围。
正常的编程和开发学习都会围绕项目和编程进行。
以上两点是必修部分,我们需要至少做好这两点,然后再花时间去做其他的事情,比如积累游戏、游戏领域的知识等等,而不是反过来。
04[奖励] 玩游戏
这看上去是一个轻松的话题,但却需要提一下。
a. 程序员为什么需要懂游戏?
如果开发者也是一名玩家,那么他的能力就会被大大放大。
这里的数学模型可以用稻盛和夫的能力模型来描述:工作成果=思维方式x热情x能力
开发者的玩家属性会影响“热情”和“能力”这两项,这是很重要的一点,我们来详细说一下:
第一是你会对制作游戏更有激情、更兴奋,你会与你制作的游戏产生情感上的联系,这会给整个开发过程带来质的变化。
其次,和策划、美术的沟通速度快了一个数量级:我们在做游戏的时候,会把一些行业内常见的做法用术语来表达,比如遇到一个问题,我们会说这个快速排序可以做,这个二叉树可以表示。
在讨论设计的时候,策划会说这个操作方式是xx游戏中的xx技巧,但是在某个模块里做了一些修改。美工则说这个效果就像xx游戏中的隐身流程,但是我们在xx地方有些不同。如果这时候我们完全不知道到底是怎么回事,策划和美工就得花很多时间一点一点的解释这个系统,流程就会慢一个数量级。
另外,做游戏的一大乐趣就是了解一些优秀游戏的做法,和开发团队一起探讨,提出更好的设计实现,让开发过程从死板变得充满激情、富有创意、充满乐趣。
b. 扩大我们的游戏库
另外我在面试的时候经常碰到的情况就是有些同学很喜欢游戏,但是玩的游戏太简单了,比如LOL,王者荣耀,守望先锋这种大家都玩的游戏,玩到一定程度就可以了,不要花太多时间在这些游戏上。
你可以查看各种平台上的更多好游戏,包括手机、主机平台、Steam 平台,甚至视频游戏。你可以尝试更多游戏。你会知道每个类别中最好的是什么。
如果你想成为一名专业的开发者,了解行业内的优秀游戏是必须的。
05[奖励] 领域知识和编程项目
如果你已经做过一款在编程上相当有挑战性的游戏,并且在游戏开发领域积累了相当多的知识,那么这对于我们的开发积累和面试过程都会是一个很大的加分项。
这里建议的是在自己的能力范围内尽量做一个有挑战性的项目,并且找到自己的兴趣,在几个点上达到一定的深度。
a. 你想制作什么类型的游戏?
我们先来看一下目前学生能力的市场情况。
在今年的实习生面试中,这方面的优秀同学比较多,可以制作大型游戏,并且能够用Unity3d制作出单机的3D ARPG,有像样的战斗,有一定AI的怪物,有任务装备系统;
他们中有的自己做规划和编程,设计大量的职业,并且有更好的数据驱动模型来产生变化。
相反,有些来自非常好的学校的学生一开始就把目标定得太低,只是做一些非常简单的小球碰撞,这是不够的。
这里我们还是需要分清自身的情况,尽量选择能力范围内有挑战性的项目。
而且你必须要有所取舍,没有足够的编程开发基础,你就不可能做很多创新的设计,也不可能投入很多精力去设计。
好的游戏设计和创新的想法当然是好事,但对于程序员和开发人员来说,只有拥有扎实的编程和领域知识才有意义。
这里写项目的时候推荐使用Unity3d引擎,主要是:
编程项目取决于你自己的情况,包括编程能力、喜好等,可以选择市面上你能应付的、有技术挑战性的游戏版本。
艺术资源:
b. 焦点&实践&github
建议从自身方面入手,寻找行业内更好的技术方案,并有针对性的使用和实施。
这也是面试看demo时常见的情况,游戏是做出了,但是里面大量的技术方案都是自己随便写的,这样的开发只是练习编程、熟悉API而已,意义大打折扣。
我们可以将行业中一些常用的解决方案应用到我们自己的项目中。
要选择一个方向,首先要了解游戏模块里有什么。你可以参考第一章,其中这张图有完整的覆盖:
然后选择你比较感兴趣的方向,这里的建议是先找一个你喜欢的游戏,然后如果有gdc之类的文章讲解他们是怎么实现的,你可以以此为支点,开始实现自己的项目。
以下是您可以选择的几个方向的示例:
甚至围绕这些事情来设计项目的重点。
然后把这些放到GitHub上,一串代码胜过千言万语。
一些说明:
如果学生在学校里努力学习,享受大学生活,那么留给发展的时日就不多了,所以无论学习还是发展,都要规划好方向和重点。
比如像上面说的那样阅读,也是要挑自己需要的章节去读,理解大量的内容就够了,不需要深入去读。
首先要做的事!
c. 积累一些领域知识
毕竟实现的速度还是太慢了,你应该在自己感兴趣的领域多做刻意的学习,GDCVault 就是一个很好的切入点,可以让你了解大家每年游戏开发的经历,可以知道这些内容里有哪些知识,然后顺着线索找到相关的好文章和介绍基础知识的书籍来学习。
通过博客发布你的学习过程,面试官可以更容易看到你的知识积累,从而更好地了解你的情况。
06总结
在本节中,我列出了一些推荐的、有效的积累游戏开发技能的方法。
如果你做好了知识体系的搭建、编程能力的磨练、游戏素养的培养、领域知识的学习和项目建设,那么你距离进入游戏行业就很近了。
很多事情真的需要花很多心思去做,需要一定的热情。如果我们在做这些事情的时候很有激情,甚至吃饭睡觉都在想这些事情,那真的是非常好的状态。希望同学们能够保持下去,成长为优秀的开发者,做出优秀的游戏。
3. 采访与信仰
前面我们讲了“选拔”和“技术准备”,接下来我们一起来聊聊“面试”和“信念”。
网上有很多关于面试和简历的文章,这里我想强调一下面试过程中遇到的一些常见问题和误区。
01 简历
作为面试官,希望从简历中看到尽可能全面、关键的信息,包括:
这些可以帮助我们在简历筛选阶段注意到你,并使面试更有效。
一般情况下,简历中能描述的信息比较有限,要力求简洁、突出重点。不过博客、github 链接是一种一次性增加信息量的方法。如果在日常生活中注意积累这些信息,显然会加分。
还有一种情况就是项目介绍很模糊,这也会让面试官在筛选简历和面试的时候不知道从哪里入手。
02采访
我在这里只讲一个词:诚信。
能来面试的,一般都是经验丰富得多的人,面试过无数人,经常和项目里的同事打交道,不老实的同学基本立刻就会被发现,看到同学睁着眼睛躺在我面前,我心里很崩溃。
我们都不是完美的。我们都有自己的缺点和我们不知道的事情,这很正常。公开谈论它们是处理事情的最佳方式。
至于准时到达,整洁干净,心态积极,这些都是基本要求,但还是可能会有问题,就不细说了。
03信仰
信念、热情之类的东西时常被滥用,有时是创造奇迹的引擎,有时是老板剥削员工的工具,有时是误导人的心灵鸡汤。
从我多年的工作经验来看,信念和热情是客观事实,是人类真实的情感,有许多人正是在这些追求的驱动下成长起来,取得了更好的成绩,完成了原本无法完成的事情。
我们不能坚持认为这只是在欺骗人们,这是虚假的,不存在的。
游戏行业具有这样的特点:趣味性强,好的项目更赚钱,因此行业竞争激烈,项目诞生、消亡屡见不鲜,也不乏有着短暂热情和逐利心态的“短跑选手”。
大多数情况下,在我们的社会文化中,大家对于薪资奖励和职位晋升都是比较接受的,大家也都认同由此产生的驱动力。
追求与激情产生的驱动力,如果我们自然地承载它或者构建好它,就会成为稳定的第二驱动引擎,让我们的发展人生变得更有趣,在遇到困难时也更具有“反脆弱性”。
像恋爱一样产生短暂的喜欢是很常见的,但是当面临大量加班、项目情况艰难的时候,也很容易产生“厌倦恋爱”的感觉。
这种热情和知识一样,同样可以构建起“信仰体系”,当你更加认同技术的积累、技术进步,以及游戏带来的价值与快乐时,你更有可能拥有稳定而强劲的“第二驱动引擎”。
每个人都有自己的方法,我个人体验过的比较好的方法包括:
这些都能帮助你建立自己的信念体系,也希望能够对我的同学有所帮助。
信仰和价值观的建立虽然不像学技术、写程序、玩游戏那么直接,但在我个人看来却是最重要、最长期的过程。
准备过程中遇到一些困难和疲劳是很正常的,这不是什么大事,放手去做就好!
关注微信公众号“游戏葡萄”,每天获取最前瞻的游戏资讯