E拨通 发表于 2023-5-31 20:16

面试官谈游戏开发入行--技术筹备

[前言:笔者在腾讯北极光工作室群工作,也做客户端通道面试有段时间了,但愿写一些能够辅佐有志于开发游戏的同学能够更好地入行。]

接上一篇文章,当我们选择进入行业,并尽早开始去做,接下来是一系列的筹备。
这一部门也是整个系列的重点,写这个的原因就是面试过程中发现很多有热情的同学,看了各路大牛大V的高大上的保举,成果练歪了路线,本来应该是循序渐进的一个过程,成果变成了基础不扎实却花大量时间在项目顶用不上的东西上了。
这里是一个在面试过程中的“看点”,后面我们一个个来看

[*][必修]系统的计算机常识布局
[*][必修]过硬的编程能力
[*][加分]玩足够多的游戏
[*][加分]良好的范围常识堆集和较好质量的游戏开发项目
本文的关键词:力所能及,有章法,有所侧重


寻找适合本身的方式
我们在网上会看到大量大牛的介绍如何学习的文章,这些大牛遍及情况是本身能力就非常的强,不是计算机专业的,常识布局比科班出身的人更厉害,中学时候已经编程实践大把,或者学习&开发能力很高。
这些大牛的做法有时候对于普通同学来说,不必然适合。
打一个比方,这个是大牛们的天赋点:三系全满


这个是普通人的天赋点:一共就30个点,甚至更少


这种情况下,必定要紧巴巴的使用了,按照本身的英雄特点和打法,选择最好的加点,本身是一个瑞兹,就不要把点加到打野侧去了。
实际情况中,真的遇到太多太多,一个有热情的普通同学,按照大牛的保举走了“高端”路线,在基础的常识布局和编程测试中,缺掉的非常厉害。
[必修]系统的常识布局
常识系统有点像武侠中的内力,在开发中,良好的常识素养,尤其在斗劲有挑战的模块中,会相当程度呈现其感化,甚至会影响我们对待开发的方式。
这个方面科班出身的人(尤其是计算机方面斗劲强的人)会斗劲有优势,此中重要的原因,学校就是按照成立系统的常识布局来设立课程,而且插手了测验大作业的方式来强化。
科班的同学无论想还是不想,不管有没有系统化常识的意识,都要学,即便当时不那么上心,过了测验,在后面工作中遇到类似的问题,看见名词总知道是什么,不大会呈现直接的概念盲点。
自学的同学,斗劲容易呈现就编程中遇不到的问题就不看了,你可能做了已经不小的项目了,一些常识不知道,依旧做的挺好的,但是计算机常识布局这个在中持久的开发中长短常重要的。
而主动去做常识系统化,这个需要颇大的努力的,这是一个非科班出身的人容易出问题的点(不是说非科班做不好,只是一个需要我们注意的点),以及科班学习不当真的同学也容易遇到,我们要更多的可以的去看。
然后从毕业生的面试角度来说,一般大师不太会有出格多的项目经历,所以基础常识的占比,会有笔试,也会在面试过程中重点考察,本身也是相对社招占比更高的点。
从客户端开发角度来看,整体计算机系的常规课程都是不错的,尤其是一些985头部学校的课程,大师可以以此来修炼,此中重点可以存眷:

[*]编程语言(c,c++,java,c#等),有一个对于编程语言整体的理解
[*]数据布局和算法
[*]《操作系统》
[*]《计算机体系布局》(本科应该叫《计算机组成》)
这四个方面在客户端编程顶用到的最多。
所谓的系统的常识布局,一个是纵向的对这些常识的关键点进行梳理和透彻理解,一个是横向的彼此之间关联和抽象(可以用mindmap画出关联),做到把书读薄。
就重要的概念,进行深入的了解,比如:

[*]c++中类在担任,多态情况下成员在内存上都是如何排布
[*]切换到汇编看下,c++各种语言特性都是如何执行的,如何进行函数调用,如何进行虚函数调用
[*]cpu的simd执行方式,分支预测的效率低到底是什么样的,
[*]内存层次中cache的感化,以及相关的cache友好的法式是什么样的,测验考试写一个cache相关的运行差异很大的情况,profile一下cache的性能
[*]各种排序和常用数据布局的核心思想,他们到底是以什么样的方式解决了什么样的问题
[*]。。。
颠末这样的从底层机制以及外在表示上去理解一个概念,就会从“记忆概念”到“遍及联系的理解常识”,其实反而让要学要记的东西变少了,相应的在面试中也就应对自如了。
[必修]编程能力
所谓编程基本功,就是:

[*]一个问题知道怎么去解决,
[*]能很快的把法式写对写好
毕竟我们到项目组里就是要不变高效的把问题解决好。
面试过程还是面向学生,也不会非得有很多项目经验,但是编程过硬始终是必需的,那么各种面试编程的标题问题城市拿来测试。
这个在有了大量的编程量之后,遍及会做的斗劲好。
在尝试室有大型项目的同学一般斗劲好,道理同科班的常识体系构建,尝试室的项目总是要做好的,不需要本身太多的主动性。
而如果本科的同学可能就会遇到编程量不够的情况,这时候可以通过:

[*]本身来选择做有必然规模的大项目来提升
[*]到leetcode,acm等处所去刷题
来让本身有过硬的编程基本功。
这个在面试现场常常会有一个15到30分钟的编程测试,这个如果只是各种概念背的溜,知道怎么去解决都还是不够的,就是要不变高效的写好。
这里在面试中发现,同学们之间的编程能力差距长短常大的,好的同学比入行5年的职业开发者写的更快更好(当然这不意味着他们开发能力更强了,毕竟开发过程中逐渐开始倾向对于实际问题的常识,方案和解决),可以在很短的时间内写的又快又好。
这是一个有着巨大成长空间的点,但愿大师能够多多沉浸在编程中,磨练本身的技艺。
这里一个注意的点,如果呈现本身学习的过程中,编程严重不足,意识不到这一点,就必然要警惕,这个就是对于编程堆集方面的意识严重缺掉的表示,要审视本身的学习渠道,学习环境和氛围。
正常的编程开发学习,会非常围绕做项目和编程来的。
==必修==
上面的两点都是必修的部门,我们需要至少在这两点做的斗劲好的情况下,再去花时间去做其他的,比如堆集游戏和游戏范围常识等等,而不是反过来。


[加分]玩游戏
这个大师可能会感觉斗劲轻松的话题,但是也需要提一下。
为什么要一个编程的人去懂游戏?
如果一个开发者还是一个玩家,那么他的能力会被极大地放大。
这里的数学模型,可以借用稻盛和夫的能力模型来描述:工作成果=思维方式x热情x能力
而开发者的玩家属性就会影响到“热情”和“能力”这两项,是一个非常重要的点,展开来说:
首先就是游戏做起来更有热情,更来劲,你会和本身做的东西发生情感上的联系,这个会让整个开发过程发生质变。
其次和筹谋美术交流起来要快一个数量级:我们在做游戏的时候,会把一些行业里的常用做法给术语化,就像遇到一个问题我们会说这个快排以下就好,这个二叉树暗示下就可以了。
谈设计的时候,筹谋会说这个操作方式是xx游戏里的xx技能,但是在某一个模块做一些改削,美术说这个效果像xx游戏隐身的过程,但是xx处所我们分歧一些,这个时候我们如果完全不知所云的话,筹谋美术就要花很多时间把系统一点点解释,这个过程就慢了一个数量级。
何况,我们做游戏时候一大快事,就是了解一些好游戏的做法,可以和开发团队一起讨论,做出更好的设计实现,这个会让开发的过程从死板变成激情四射富有创意和有意思。
扩展我们的游戏库
此外面试中常常遇到的就是一些同学很喜欢游戏,但是玩的游戏太单一,LOL,王者荣耀,守望先锋这种大师都玩得游戏,玩到必然级别就好,就不要花太多时间了。
大可以多看看各个平台上的好游戏,手机自不必说,主机平台,steam平台乃至视频通关一些游戏都可以多多测验考试,对各自品类中的佼佼者,都知道怎么回事。
斗劲要做职业开发者,了解行业里的优秀游戏是必修课了。


[加分]范围常识和编程项目
如果本身已经做了一个颇有编程挑战的游戏,对于游戏开发的范围常识有斗劲好的堆集,那么对于我们开发的堆集和面试的过程都是一个大大的加分项。
这里斗劲保举的是,就本身的能力做一个尽可能有挑战的项目,而且找到本身的感兴趣的点,就几个点做到有必然深度。
做什么样的游戏?
我们先看下此刻学生的能力“行情”。
到本年的实习生面试中,这块斗劲超卓同学能做出颇有规模的游戏,可以达到使用Unity3d,做出单机的3D的ARPG这个级别,战斗打的像模像样,怪也有必然的AI,有任务装备系统;
有的是本身做筹谋和法式,设计出了大量的职业,有斗劲好的数据驱动的模式去发生变化。
对比之下,有一些很不错的学校的同学,在一开始方针就设定的太低了,只是有一些非常简单的小球碰碰,这样就不够充实了。
这里我们还是要区分好本身的情况,在本身力所能及的范围内,尽量选择有挑战的项目来做。
而且必然要有所取舍,不能编程开发基础不足的情况下,去做大量的创新设计,把大量的精力放在设计上了。
好的游戏设计,创新的想法绝对是一个好的事情,但是对于法式员开发者来说,需要在编程和范围常识过硬的前提下,这条才真正有意义。
这里在写项目的时候,保举使用Unity3d引擎,主要是:

[*]引擎相对简单,可以让我们直接去挑战一些斗劲难的项目
[*]

[*]大师完全不要有学习上的心理障碍,从cocos2d开始学,用熟悉了2d在搞3d这种思维都是没必要的,直奔主题就好

[*]直接能发布到手机上,面试时候直接拿一个demo,各种便利
[*]是此刻手游项目组最多的选择,也是一个非常好的加分项
编程项目按照本身的情况来,包罗编程能力,爱好,可以选择对于市面上的游戏,本身能吃下来的,技术上有挑战的版本

[*]俯视角moba,塔防,射击
[*]FPS,TPS等射击游戏
[*]RPG,ARPG等
[*]即时战略和赛车游戏。。。不是很保举了
美术资源:

[*]各种渠道,甚至到一些游戏中破解都可以
[*]有的学校有游戏开发俱乐部,能找到美术,也很棒
突出重点&刻意操练&github
斗劲保举就一些本身的侧重点,找到行业中的斗劲好的技术方案,来专门的使用和实现下
这个也是面试中看demo一个常见的情况,游戏做了,但是里面的技术方案大量的都是本身随意写的,这样的开发,就只是练了下编程,熟悉了下API,意义就缩水了很多。
我们可以就一些行业常用的解决方案,放在本身的项目中
标的目的的选择首先了解游戏模块中都有什么,这个可以看<game engine architecture>第一章,此中这个图有很充实的覆盖:


然后本身选择斗劲感兴趣的标的目的,这里保举是找到本身喜欢的游戏,然后如果有gdc等文章讲他们怎么实现的,那就可以以此为支点来开始本身项目的实现。
可以选择的标的目的举几个例子的话:

[*]实现怪物的行为,就可以使用状态机或者行为树来驱动,寻路的时候,
[*]做一个大规模地图中怎么去高效的寻路,
[*]衬着中实现一些<real time rendering><gpu gems>或者gdc中有一些力所能及的效果,比如下雨&地面潮湿,大量particle的性能,贴花,distortion等等。
甚至围绕这些东西来设计项目的侧重点。
然后把这些放在github上面,一码胜千言。
一些注意点:
同学们在学校里如果当真学习,再享受下大学生活的话,可以用来开发的时间真的不多了,所以无论读书也好,开发也好,务必在标的目的和侧重点上做好规划。
比如上面的提到的<game engine architecture>读的话,也是要挑本身需要读的章节来读,大量的内容了解下就好,无需深入进去。
要事优先!!!
做一些范围常识堆集
毕竟实现起来速度还是太慢了,就本身感兴趣的范围,多做一些刻意的学习,GDCVault是一个斗劲好的切入点,这个可以给你一个每年大师游戏开发的经验,可以就这些内容知道都有那些常识,然后顺藤摸瓜,找到相关的好的介绍基础常识的文章和书学习起来。
把学习的过程放到blog上面,面试官也斗劲容易看到你的常识堆集,也能更好的认识到你的情况。
sum
本文中,列了一些斗劲保举的,有效的堆集游戏开发方面能力的做法。
构建常识体系,锤炼编程技能,培养游戏素养,学习范围常识和构建项目,这些都做的斗劲好了的话,进入游戏行业就已经不远了。
不少东西真要做下来也颇费心思的,就已经需要必然的热情了,如果我们做这些的时候,一直非常的激情澎湃,甚至到了吃饭睡觉的时候都在想,那么真的就是一个很不错的状态,但愿同学们能够保持,成长为一个优秀的开发者,做出超卓的游戏。

sgy727 发表于 2023-5-31 20:17

考这么多,然后进去都是写脚本

zhuzhu1 发表于 2023-5-31 20:18

看一下楼主的介绍再说

gyeonwoo 发表于 2023-5-31 20:18

醍醐灌顶,非常感谢前辈的分享🙏!

yez3533 发表于 2023-5-31 20:19

羡慕你们这些能写游戏的,我不中大奖就没机会写了。。。

zsy9901 发表于 2023-5-31 20:20

天涯明月刀就是北极光做的?

碎雨寒辰 发表于 2023-5-31 20:20

劝退文吧?

gvell 发表于 2023-5-31 20:21

安老师牛

vcvcvc 发表于 2023-5-31 20:22

充值增加天赋点

小松520 发表于 2023-5-31 20:22

楼主参与了《天涯明月刀》的开发吗?
页: [1] 2 3
查看完整版本: 面试官谈游戏开发入行--技术筹备