鹅厂面试经:腾讯游戏程序开发面试官心得分享
今天,小编给大家带来的是,面试者在面试腾讯游戏程序岗位时的心路历程,以及腾讯面试官对准程序员的走心建议。
俗话说得好,“男怕入错行,女怕嫁错郎”,一入程序深似海,从此休息是路人!程序员十分辛苦,加班是家常便饭,业余时间少,连陪女朋友的时间也少,加上职业病等等,称为IT民工真不为过。所以在入这行之前你一定做好自己的人生规划和选择,你真的准备好了吗?
腾讯北极光工作室群 客户端组长 安柏霖(客户端通道面试官)
工作也有10多年了,做客户端通道面试官也有一些时间,看到有些同学非常的有热情,但是走了弯路,把有限的精力放错了地方,不免感觉颇为可惜,加上平时在各个渠道也收到不少这方面相关的问题,这里就自己的经验写一个小系列,来谈下入行的问题。
1. 决定的瞬间
工作也有10多年了,和很多人聊过,大家怎么开始想做游戏,怎么开始入行的。
相当多的人会经历一个转折点,那个点上你突然意识到这个就是你要做一辈子的工作,有的是到朋友家玩的时候,玩一个游戏,突然意识到自己要做这个;我是准备GRE休息的时候,在bbs上看到《doom启世录》某一个章节的时候;有的同事是已经工作了,而且根本不是编程方面,自己在家玩游戏的时候; 有的是在传统型的软件企业里,厌倦了一成不变的生活,追求一个变化剧烈需要一直学习的生活;有的一直就是对于视觉上的东西,对于绚丽的东西感兴趣。。。
丝毫不意外的是:在开发历程中,非常的有持续力,能保持专注和成长的同事,普遍的特点就是对于游戏本身有着持久浓烈的热情。
不管如何,当这个瞬间出现,你被击中了,或许你就属于游戏开发,游戏开发也属于你,不妨放下种种担忧牵挂,就开始你的探险吧。
2.工作相比考研的优势
对于学生来说,到了大四就是一个选择,是去游戏公司工作还是去考研,个人的推荐的是当你下定决心去做游戏,那么尽早的开始准备起来,到尽可能好的团队中去开始游戏开发。
大家会认同,如果能进好公司好项目,当然就及早去了,不然读研之后的目标不也是如此么。
只是现实种种原因不能如愿啊,比如本科玩多了,心理还没准备好,和高几届读研的师兄比有劣势等等等等。
这里很多想做游戏的同学,最终还是选择了读研之后再工作,很大的原因就是没有意识到,同样的时间点,工作的意义有多大。
(1)经验的“金山”
这里常见一个误区就是,本科进到项目组里,作为小弟,也是各种打杂,不如在学校里自己做做游戏多学习等等。
但是即便硕士毕业进入项目组也是可能从打杂开始的,这里不妨说下我研究生毕业刚刚进入育碧的时候,当时项目组里没有data manager,于是我就在一开始就变成这个data“manager”了,就是去负责处理各种perforce相关的事物,完全不是编程的工作,后来招到了data manager,我就开始做一些简单的工作,从截图开始,然后就是给各位资深程序“打杂”,大大们在做优化,相应模块有bug,我就去跟。。。第一年相当的时间就是这样度过的。
这个从项目角度来看其实非常正常的,项目组总是追求最大化的性价比,所以人力总是不足。那么资深程序去做最大化输出就是最合理的安排,如果一定要有人去打杂,当然就是输出能力最低的新人来做了,这就是骨感的现实。
有人留言说,一毕业就能做高端的事情好羡慕等等,其实是一毕业就一段时间不能编程了。
但是即便如此,依旧是能够获得比学校里好得多的成长,主要就是你能接触到项目组的代码,你可以看到整个项目如何一点点实现的;看到资深程序如何写代码的,尤其是开始帮资深同事debug的时候,更是能上手去看,这个真是一个大开眼界的过程,中间不懂得地方去问问,一般也能得到比较好的解答。
说到底,有积累的团队好比一座金山放在你面前,进去就做主力培养,相当于把金子送到你面前让你捡,进去就打杂,那你完全还可以去挖,关键是要有能接触到的金山。
而像腾讯&网易这种,公司开发了n款游戏的公司,你更可以跨项目的接触到高质量资源,可以去问更多的大牛问题,这个副本掉落,真的可以有。
(2)更高级别的学习
很多时候我们会觉得,在学校里时间更充裕更自由,没有考评没有leader过来逼我加班,可以更好地学习等等。
实际情况是,实际项目中,我们更容易进入学习的更高阶段:切身知道学习的意义,以及将知识综合的用于实践。
当时刚工作时候,看老司机们的代码的时候,发现大家对于cache性能,多线程,各种编程模式,语言特性等的驾驭非常的好,可以说多个领域的知识(语言,算法,操作系统,硬件)都非常好的融合到一起,在一票代码中体现。
而我当时对于这些还是停留在书本上的概念阶段,并没有特别深刻的理解(即便在考试中分数没问题),也不可能有充分的理解,这个理解就是要这样在高挑战型项目里,综合纯熟的应用出来才能达到。
所幸当时学校的书都是非常经典的,我也带到了上海,又翻出来就这些章节反复的研读,而且这次读的时候,可以结合代码,几个科目可以联系起来,完全就是一种“I was blind, now I see”的感觉。
而且读好了之后,就有用了,能更好的理解老司机们的代码,甚至偶尔还能提出点不同的看法,到后面自己也能写出这样的代码,可以应用到实际的游戏里,带来性能和效果的提升,可以见玩家的感觉,这个时候知识的真正意义才呈现。
所以,在学校的时候,学习的第一个层次:概念性的理解到位,知道这个是什么,能够通过考试就差不多了,学生时代也算考试一把好手,再把书看几遍也就是这个水平了。
要达到第二层次深刻理解,融会贯通,在真正的需要这些东西的大型项目中去应用方是最好的方式。
相比之下,在学校里,部分可以学习到很好地研究方法等等种种优势,但是绝大多数情况,是不如在正规项目组里去磨练和学习来的更好。
(3)工作的相对优势
上面聊了这么多,其实也是自己的经历有关,本科时候并没有做游戏的想法,研究生才有,即便研究生所在的实验室(老板非常的强力,做的项目也给力)很给力,自己也在认真地做和学,但是工作之后才发现,这两年的成长比起实际项目来说真是微乎其微,近乎在浪费时间。
所以如果我们定下来想做游戏,大可以把工作和读研都作为一个纯粹的学习阶段来看待,在好的团队里工作中可以:
– 有更好的磨练机会,更好的学习资源
– 让我们更好更深刻的理解学习内容
这个意义是非常大的,大到值得我们去在本科的早期,好好准备,尽早到前线去开始磨炼。
话说回来,万事无绝对,这里的工作的意义是和团队水平有很大关联的,越是有经验越是严肃做项目的,对于成长来说就越好,如果种种原因,让人无法吸收和学习,那就要三思了。
前面聊了及早工作的意义,要想在大四秋季招聘的时候,就能获得工作机会,尤其是在好团队中的机会,这个就需要我们有相当的积累。
3.成本
这里在招聘中常常见到的一个情况是,虽然我想做游戏,但是实验室老师是做完全不同的方向,但是我也ok,只要努力了,有进步总是好的。
这个就是一个典型的误区,这里大家需要对于成本有一个较好的认识。
做A事情的成本就是同样时间你能做的最有价值的事情,可能是到好的团队中去实习,可能是你专项的阅读游戏开发的书和做实际的项目。
本来你可以在同样的时间里,得到很大的成长,但是却做了“有些进步”的事情,而且感觉还挺ok,这真是太可惜了。
最后
不管你是应届生还是已经工作了一年、五年还是十年,这些经验和建议还是有些价值的:
1. 在校生趁着在校期间,多做完整项目,多写代码,不要浪费任何能积累经验的机会。
2. 学技术要学主流框架,学 Node 要学 Express,学 Java 就不要忘了 SSH,学 Ruby 首学 Rails。
3. 永远要有超前的意识,关注云计算、docker、微服务、Devops、Baas 等新技术形态。
4. 要有自己的思考和抉择,对于产品经理提出的不合理需求,一定要学会积极主动站出来,就产品功能提出自己的合理化建议。
5. 别人没有义务一定要帮你,你要让你值得别人来帮,你可以自己摸索,也可以找前辈请教,态度好一些,干活勤快一些,自然多一些机会获得前辈指教。
6. 不要怕踩坑,踩着踩着你也许就成了大牛,不止学会填坑了,甚至也学会挖坑!