游戏邦在:
杂志专栏:
gamerboom.com订阅到鲜果订阅到抓虾google reader订阅到有道订阅到QQ邮箱订阅到帮看

工作室招聘优秀程序员的3大步骤

发布时间:2013-03-11 14:57:25 Tags:,,,,

作者:Marc Mencher

你正处在头脑风暴的过程中,黑板上写满了各种有趣的理念,然后有个人说道:“这个理念很棒!现在我们需要有个人去落实行动。”是的,你需要一名程序员。但是除此之外你还需要这个人能够挑战极限,即与所有团队共事,适应并与你们的公司文化共同成长。这时候你的任务便开始了。

如今出现了许多开放性工作。多亏了创造小型社交游戏的简单化,许多人都能获得实践经验。我们可以很轻松地看到他们的工作但却很难对此进行审查。一些大公司的程序员们要么遇到了项目结束,要么遭遇了公司裁员(或倒闭),而除了薪资问题,他们还需要考虑重新定位的问题。

如果你希望能为公司聘请更加优秀的员工,你便可以需要一个基本的“审查系统”,即着眼于潜在程序员身上一些传统和非传统元素。

Game Programmers(from pulsipher)

Game Programmers(from pulsipher)

第一步:工作描述

在你撰写工作描述之前,你必须确保自己真正理解了各种职称的含义。就像开发者,程序员和工程师便不能进行互换。在一家公司里QA也可能被叫做工程师,而开发者则是不同于程序员的身份。有些程序员更希望被叫做工程师,因为他们认为这听起来比较不像是做苦工的人。如果必要的话你还可以包含1,2个句子去描述该职称在你们公司所负责的工作。

明确你需要新员工负责哪些工作,然后在工作描述中清楚地写出你的要求以及优先条件。

以下是一些要求:

对游戏充满兴趣,不管是作为程序员还是玩家而言。这种人曾经被描述为“狂热的玩家”,但是“狂热的玩家”还意味着什么?当然了,应聘者都会说自己是狂热的玩家!

喜欢各种游戏类型(至少两种!)。如果你所创造的是MMO或FPS,你便需要明确应聘者必须对这一游戏类型感兴趣。

要求应聘者具有企业文化实践经验?这并不意味着对方“必须发行过AAA级游戏”,因为现在小型公司也能创造自己的AAA级游戏。

让应聘者知道你将执行某种测试。如果你质疑测试的合法性,那就向HR部门进行确认,如果他们也不知道的话,你也可以咨询一些做过这种测试的前辈,例如当地的职业介绍所。如果未通知应聘者而突然进行测试则不是一种合适的做法。

清楚你的面试流程。是要对应聘者进行“个人”面试还是“技术性”面试?

你是否想要观看应聘者的作品演示?还是你想自己在网上观看?这时候你便可以要求应聘者提供一张CD或URL。而出于专用软件和NDA的原因,应聘者会更乐意提供给你开发源作品或游戏修改内容。

你的正式申请是否能够附加简历,或者需要应聘者进行填写?是否要求应聘者提供以往的薪资情况?事先告诉应聘者这些要求能够帮你节省不少时间,并减少面试过程中可能出现的焦虑。(游戏邦注:同时你也可以从中判断应聘者是否能够遵守指示。)

第二步:个人简历

在面试前浏览简历。也许你会觉得这么做并不重要,但是等到面试时(在应聘者面前)再浏览简历会让应聘者觉得这样的面试并不正式。而事先阅读简历也能帮助我们事先想出一些适当的问题。

浏览应聘者在简历上所列出的公司。在过去一些公司里他们都待了多长时间?这些公司是否属于初创企业?你是否想要招进一些只顾着向上攀升但却未拥有真正经验的新员工?

第三步(1):面试

如果是由HR中的相关负责人去进行最初的面试(而不是让应聘者去填写各种问题),你便需要与其他员工共同回顾工作需求,然后针对应聘者而想出一些适合的问题。如果让一些未拥有技术背景或产业相关知识的人去主持面试,便很有可能被一些擅长花言巧语的应聘者蒙混过关而导致一些优秀应聘者被埋没掉。

任何负责面试的职员都必须有所准备(如拿到应聘者的简历或观看了他们所提供的网页或CD)。除此之外你还需要确保其他同事在主持面试时不会带给应聘者压力,而吓走他们。

关于面试你需要注意这几点:做好准备,够准时(如果你因为某些紧急事件而被叫走,请第一时间通知应聘者),不要接电话(除非有什么紧急事件)。集中注意力并认真听应聘者的介绍与回答。如果你生病了,出于礼貌最好待在家里而把面试工作交给其他同时,或通过Skype或视频会议等方式进行面试。

让团队中的一员,最好是团队领导者参与面试过程便是一种很好的做法。尽管有许多出色的程序员能够胜任你们的工作,但是只有那些能够与团队中其他程序员友好相处的应聘者才是你的最佳选择。你必须清楚,这些人总是需要紧密地工作,并且通常都是处于一种较大压力的环境下(游戏邦注:如不断逼近的截止期限),而好辩或具有破坏性的团队成员将不利于生产力的发展。要知道,员工的个性和职业道德与技能一样重要,特别是当你们处在一个小型团队,拥有紧凑的工作安排并且没有多余的资金时。

第三步(2):面试测试

假设你能够进行测试,即使用简单的编程或逻辑测试。询问应聘者一些特定的问题(如十六进制和术语定义)并不是评估程序员能力的最佳方法,因为死记硬背的答案并不能帮助你测试出程序员的真实水平。

最近的一些毕业生们也能够回答各种“神秘的”问题,因为这些信息在他们脑子里都是最新鲜的内容,但这真的就是你想要的结果吗?真正优秀的程序员是能够解决各种谜题,而不是使用定式解决方法。除了必备的程序员知识外,应聘者还需要具备基本的问题解决技能。

以下便是关于适当问题的例子:

从1到100的所有数字被随机插入99整数的数组中,其中有一个数字被漏掉了。你能想出哪种最有效的方法去找出这个被遗漏掉的数字?

较弱的答案便是创造100面旗子,然后依次通过数组而记录下每个数字,随后依次通过旗子找出遗漏掉的数字。较聪明的答案是,依次浏览数组,将所有数字加起来变成一个单一的整数,然后从5050(游戏邦注:从1到100中所有数字相加的总和)中减去这一整数便是答案。还有更加巧妙的答案便是对这一数组进行分类,然后进行浏览,直至遇到那个被略过的数字。

如果你想要问一些技术性问题,请避开任何与假设相关的内容,比如什么类型的继承性,CPP文件中会出现怎样的全部变量,多态性或C++中的单一序列。相反地,你应该呈现出与产品或项目相关的当前情况(除非其它例子也是与之相关的)。你必须记住,最简单的代码也是最优秀的代码(但并非总是这样)。那些喜欢在代码上添加一些不必要方法,如“多变元素”和“跳转内容”的程序员便不是最佳应聘者。除此之外,你也不应该问一些过于复杂的代码库问题。除非你需要内联程序集代码,否则不要让应聘者去描述如何打开循环或回答其它过于复杂的问题。尽管这能用于判断应聘者是否具有常识,但是你却不能因此知晓他们能否胜任工作。

在某些情况下,你有可能需要寻找那些不只能够推动项目代码的发展,同时也知道如何处理各种遗留问题(即促使项目终止而不得不重新开始的问题)的应聘者。如果应聘者将这种情况视为有趣的挑战当然再好不过了,但是如果他们声称自己能够“解决任何问题”的话,你就需要三思了。

第三步(3):面试问题

提出最适当的问题。明确的工作描述以及对于简历的审查便能帮助你淘汰一些不适合的应聘者。

应聘者是否会经常使用/玩你的产品?如果你创造的是MMO,你便能够快速判断出对方对于游戏的投入程度。如果应聘者能够清楚地描述出自己的角色以及最后的游戏环节,你便能够看出他对于游戏的投入。

“提防那些孤僻的程序员”是早前游戏产业中的一句格言,并且也同样适用于现今的产业中。你肯定希望新成员能够适应公司的文化,并愿意与其他职员一起共事。所以你需要警惕那些长期待在高压环境下或者喜欢对别人指手画脚的应聘者。

你可以问一些比较奇特的问题,如你是否喜欢小猫或小狗?喜欢吃蛋糕还是派?喜欢夏天还是冬天?以及为什么?真正的产业行家在面试程序员时甚至会说道:“跟我说个笑话”。而吃惊的应聘者可能会回答道:“原来你们想找一个有趣的人啊。但是我却未做任何准备。”而你可以通过这种问题判断应聘者是否具有较快的反应速度。

询问有关产业会议中会出现的“热门”编程主题。如应聘者是支持哪一方?是对此表示轻视还是受诱惑?(希望应聘者的回答不会是“这与我们的工作有什么关系吗?”)。拥有幽默感也是产业中非常重要的能力,因为这能避免在最糟糕时刻出现士气衰败的情况。

询问应聘者为什么会喜欢编程。(例如“这是获得谋生的手段”便不是你想听到的答案。而像“我喜欢解决问题”或者“我喜欢创造游戏”则更好。)

应聘者所致力的哪个项目未能成功发行?失败的原因是什么?你还应该提防那些将失败结果完全推脱给其他人的应聘者。敏捷开发的一个原则是,一个单位的失败便是整个团队的失败,所以你肯定不想雇佣那些将失败责任推脱给别人而将成功完全留给自己的人吧。

询问应聘者是否曾待在敏捷开发环境中,如果是的话又有何效果?如果应聘者认为这是一种烦人的设定,你就需要判断到底是这一系统未能有效执行还是应聘者本身不喜欢被干扰或接受命令。

作为程序员,应聘者迄今为止遭遇的最大挑战是什么?他又是如何克服这一挑战?(游戏邦注:对于女性程序员而言,性别偏见有可能是最大的问题,所以你需要确保任何问题都不会越过法律界限。)

提问一些问题去判断应聘者是否足够灵活,是否愿意采取各种新方法,接受建议并解释解决方法。那些认为别人太过愚蠢很难理解自己想法的应聘者就可以直接忽视了。(实际上这也是一种危险信号,即代表该程序员并不擅长创建强大的基础或不具有足够的责任感。)

如果你想亲自观看应聘者的演示,那就问问他哪部分内容是最突出的。显然,如果你们所开发的是一个小型应用,那么程序员所负责的便有可能是“全部编程工作”,但是如果你们开发的是一款大型游戏,那么程序员便只是团队中的一部分。你还可以询问他们对于团队协作的看法,并让他提出一些游戏完善意见。避开那些会说“我会编写代码但是不会玩游戏”的应聘者。

以下是一些较“轻量级”的问题:

你喜欢游戏什么?

你玩过的第一款计算机或主机游戏是什么?

你的第一台计算机是什么牌子或型号?

你最喜欢的游戏是什么,为什么?

你最喜欢的书籍,电影或电视节目分别是什么?

你更喜欢拥有开放世界的游戏还是明确任务线的游戏?还是你认为游戏应该同时拥有这两个元素?

你最喜欢的角色类别是什么?

你能否撇开程序员的身份简要描述下你最喜欢的游戏的机制?

你在玩游戏时是否都会坚持到最后?

你有何测试经验?(虽然你并不是在寻找QA人员,但是雇佣一名对于QA带有自己看法的程序员并不会对你的工作造成任何伤害,相反地他们还能在解决任何问题前更好地审查自己的工作。)

你最喜欢我们的哪一款游戏,为什么?(如果你只发行过一款游戏,那么应聘者必须已经玩过这款游戏!然后你需要听取他们对于游戏的看法,如果听起来他们只是在模仿别人对游戏的描述,他们便不可能玩过这款游戏。)

如果你能在游戏产业的其它领域中工作,你会选择哪份工作,为什么?

对你而言游戏的乐趣源自哪里?(当然,你并不是在聘请游戏设计师,但是程序员的工作便是帮助设计师做出最合适的决定。)

如果时间和金钱不受约束的话,你能否快速地推广游戏理念。(虽然你不是在聘请一名市场营销人员,但是你也希望招进全面的员工,擅于与别人进行交流。)

尽管对于聘请最佳程序员这一工作并不存在唯一的准则,但是基于这些步骤你将能够更好地判断哪些应聘者拥有合适的技能,并且更加适合你们公司。

本文为游戏邦/gamerboom.com编译,拒绝任何不保留版权的转载,如需转载请联系:游戏邦

Hiring Managers: Vetting Game Programmers

by Marc Mencher

So you’re in that blue sky brain-storming session and there are a ton of awesome ideas up on the board, and then someone says, “This is GREAT! Now we need someone who can make it work like that.” Yep, you need a programmer. And not just any programmer. You need someone who can push the envelope, work with all the teams and fit into and grow with your company’s culture. That’s the moment your Quest begins . . .
There’s a lot of “ebb ‘n flow” these days and a lot of open jobs. A lot of people are getting hands-on experience, thanks to the ease of making small social games. Their work is easier to see but harder to vet. There are programmers at big companies whose projects are either ending or whose companies are downsizing (or closing), but there may be relocation issues that have to be considered in addition to salaries.

To increase the odds of making the best hire for your company, you want to develop a basic “vetting” system that looks at traditional and non-traditional aspects of your potential new programmer.

Step 1: The Job Description

Before you write the job description, be sure you have a good understanding of what various job titles mean. Terms like developer, programmer and engineer aren’t always interchangeable. A QA person might be called an engineer at one company, while developer might refer to someone other than a programmer. Some programmers prefer engineer because it sounds less like a drudge position. If need be, include a sentence or two that describes what the title means at your company.

Figure out what you want your new hire to do, then write a job description that clearly states you’re required and preferred criteria. Aim for something between “as long as you’re breathing” and “must have a Masters Degree in everything.” (Hint: It’s pretty easy to spot a job req that’s been customized for someone you’ve already decided to hire.)

Here are some things to look for:

Deep interest in gaming, both as a programmer AND a player. This used to be designated as “avid gamer” but what does “avid gamer” mean any more? Of course candidates are going to tell you they’re avid gamers!

Wide variety of gaming genres (ok, at least two!) If you make MMOs or FPS games only, specify that you want someone whose interest and passion is in your genre.

Want someone with corporate-culture experience? These days, that’s different from “must have shipped an AAA game” because small companies can ship AAA titles too.

Let candidates know if some kind of testing will be administered. If you have questions about the legality of testing, check with your HR department, and if they don’t know, get the info from someone who does, like your state’s employment agency. Surprising an interviewee with an on-the-spot test (the formal kind) can be grounds for action, and not the good kind.

Be clear about your interview agenda. Will candidates be asked to undergo both “personal” and “technical” interviews?

Do you want to see a demo of the candidate’s work? Do you want to see it online by yourself? Ask for a CD or URL. Because of proprietary software and NDAs, be willing to look at open source work and/or game modding.

Does your formal application allow for an attached resume, or will the candidate be required to fill it out? Will the candidate be asked to provide a salary history? Letting interviewees know this in advance saves you time and helps reduce the normal anxiety that comes with interviewing. (It also tells you if the candidate can read and follow directions.)

Step 2: The Resume

Read the resume before the interview. This may sound sort of “duh” but looking at the resume in front of the candidate sends a message (intentional or otherwise) that this interview is either inconvenient or a pro forma exercise so the company can hire the person
it REALLY wants. Reading the resume in advance gives you a chance to come up with specific questions.

Check out the companies listed on the resume. How long has the candidate worked at the past few companies? Are any of them start-ups? Do you really want someone who has moved quickly up the ranks and name-drops like crazy but has no real experience?

Step 3a: The Interview

If someone in HR is doing the initial interview (other than having the candidate fill out paperwork,) be sure you’ve reviewed the job reqs with that staff member, and provided some initial questions you’d like them to ask the candidate. Letting someone with no technical background and/or real industry knowledge conduct the initial interview might let a fast-talking candidate in the door and a good one get away.

Everyone who’s participating in the interview should be prepared (i.e., has a copy of the resume and has seen the website or CD). If you’re including “peer” interviews for the candidate, be sure your staff knows that their job is NOT to scare the candidate way.

You know the drill: be prepared, be prompt (and if you might get called away to an emergency, let the candidate know before you start the interview), don’t take calls (unless there’s a pending emergency). Be focused and ready to listen. As a courtesy, if you’re deathly ill, stay home and let a colleague conduct the interview, or make arrangements to do it via Skype or some kind of video conferencing.

Having a member of the team with whom the potential hire will be working, preferably the team lead, as part of the interview process is always a good move. While there are many skilled programmers who can fill your job, getting one whose personality meshes well with your other programmers is always a bonus and in some cases, a must.) Remember that these people will be working very closely with each other, often in frustrating circumstances (the dreaded crunch time, for instance), and an argumentative or disruptive team member can cause a hit to productivity. Personality and work ethic is just as important as skill set, especially when you’ve got a small team, a tight schedule and no money to spare.

Step 3b: Interview Testing

Assuming you’re cleared for testing, use simple programming or logic tests. Asking very specific questions, like hex and terminology definitions, isn’t the most effective way to evaluate a programmer’s ability to code because rote answers don’t tell you how the candidate programmer THINKS.

Recent grads will probably be able to answer “arcane” questions because the info is fresh in their heads but is that what you really need? Good programmers like to solve puzzles, riddles and mysteries rather than apply canned solutions. The right candidate will have some basic problem-solving skills in addition to specific programming knowledge.

Propose a simple programming issue and ask the candidate how s/he would handle it. Maybe a brain teaser or a suggestion for a modification to your product, which has the added benefit of showing you how well the candidate prepared for the interview. A good type
of coding question is one that has several answers; ask your prospective hire to give you the most optimized solution. You can quickly gauge how well he/she thinks and solves problems based on the answer. Someone who consistently picks the most obvious but less optimized answers is good for entry level positions, but if you’re hiring for senior positions, you’ll want people who can think on their feet, understand the need for optimization and have good reasoning behind their choices.

Here’s an example of a good question:

Every number between 1 and 100 has been inserted into an array of 99 integers in random order, with a random number missing. What’s the most optimized and memory-efficient way of figuring out which number is missing?

A weak answer would be to create 100 flags, then loop through the array and log each number, and subsequently loop through the flags to find the missing one. A stronger answer would be to loop through the array and add them all up into a single integer, then subtract the answer from 5050 (the sum of all the numbers between 1 and 100). An even stronger answer would be to sort the array, then loop through until a number gets skipped.

If you want to ask technical questions, avoid asking hypotheticals like what types of inheritance or global variables appear in a CPP file or polymorphisms or singletons in C++. Instead, present actual situations that are relevant to your product or project (unless, of course, any of those other examples ARE relevant. Bear in mind that the simplest code is, more often than not, the best code. A programmer who loves to pepper the code with unnecessary methods like ‘mutable’s and ‘goto’s might not be the best candidate. Likewise, don’t ask questions that are overly complicated for your code base. Unless you regularly need inline assembly code, don’t ask the hire to describe how to unwrap loops or other overly complicated questions. While it’s a great indication of general knowledge, it won’t tell you if they’ll do a good job.

In some circumstances, you may be looking for someone who can not only move forward with a project’s code but also knows how to deal with legacy issues in a manner that doesn’t involve stopping the entire project and starting over from scratch. It’s great when the candidate sees this situation as an interesting challenge but you want to avoid the candidate who claims to be able “fix anything.”

Step 3c: Interview Questions

Ask the RIGHT questions. Hopefully, the combination of a well-crafted job description and vetted resume has weeded out candidates who aren’t right for the job.

Does the candidate use/play your product regularly? If you make MMOs, you’ll be able to determine the level of immersion and investment pretty quickly. If the candidate gets that glazed look and launches into a Very Detailed Account of her avatar and the last raid, that tells you something, too.

“Beware the lone programmer in a room” is an old industry adage that still rings true. You want someone who will fit into your company’s culture and actually likes working with other people. Does the candidate seem like someone who will thrive in a high stress team environment (if that’s what you’ve got) or does the candidate seem like someone who’s more interested in showing others “how it’s done.”

Consider asking some off-the-wall questions like, Do you prefer cats or dogs? Cake or pie? Summer or winter? And why? An industry veteran interviewing a programmer candidate said, “Tell me a joke.” The stunned candidate replied, “Oh. Do you want a funny one? I didn’t really prepare anything.” That told the interviewer what he needed to know about the candidate’s ability to think on his feet.

Ask about a “hot” programming topic that’s making the rounds on industry boards and at conventions. Is the candidate passionate about one side or the other? Dismissive? Baffled? (Hopefully the candidate will not say, “Well, does that really have anything to do with this job?”) Having a sense of humor is actually pretty important in our industry because it reduces the possibility of melt-down at the worse possible moment.

Ask candidates what they love about programming. (Hint: “An easy way to earn a living” probably isn’t what you want to hear. “I love to solve problems” or “I like to make great games” is better.)

What’s the biggest thing the candidate worked on that didn’t ship? Do they have any idea why it didn’t ship? Watch out for indications that the candidate thinks failure was other people’s fault. One of the tenets of Agile Development is that failure by one unit is failure by all, so you don’t want to hire someone who’s more adept at finger-pointing that accepting responsibility and proposing positive solutions.

Has the candidate worked in an Agile Development environment and if so, how was it? If it seems that the candidate felt it was intrusive, see if you can determine whether the system was poorly administered or the candidate just doesn’t like to be interrupted or told what to do.

What was the biggest challenge the candidate has faced as a programmer so far, and how did s/he solve it? (For female programmers, gender bias may be the biggest issue so be sure you stay within the boundaries of what can and can’t be asked legally.)

Ask question(s) that give you a sense of how flexible the candidate is, how willing to try new approaches, take suggestions and explain solutions. Odds are you probably won’t be happy with some hot shot who thinks that everyone else is too simple-minded to understand what he does. (In fact, sometimes this is a red flag that the programmer might not be so good at building strong foundations or accepting responsibility when fixes don’t hold together.)

If you decide to review the candidate’s demo in person, ask what specific portions s/he handled. Obviously, with a small app, it’s probably “all the programming” but if it’s a big game, the programmer was probably part of a team. Ask about how collaborations worked and whether the programmer’s suggestions for game play improvements were considered. Avoid the programmer who says, “Oh, I write the stuff but I don’t play the game.”

Here are some questions on the “lighter” side:

What do you like about gaming?

What was the first computer or console game you played?

What was your first computer?

What’s your favorite game and why?

What’s your favorite book? Movie? TV show?

Do you prefer open worlds or well-defined quest lines? Do you think a game should/can have both?

What’s your favorite character class?

How would you briefly describe the mechanics of your favorite game to a non-programmer?

Do you usually play games to the end?

What’s your Beta test experience? (No, you’re not looking for a QA person BUT it doesn’t hurt to hire a programmer who thinks like a QA person at least a little, as in being able to vet their own work before they hand off a fix as “done.”)

What’s your favorite game of ours and why? (If you’ve only published one game, they better have played it! And listen for their own words—if they sound like they’re parroting what they read about your game, it’s entirely possible they haven’t actually played it.)

If you could work in any other area of our industry, what would it be and why?

What makes a game fun for you? (No, you’re not hiring a game designer BUT the programmer’s job is to make the designer’s vision work.)

If time and money was no object, give me a quick pitch for a game idea. (No, you’re not hiring a marketing person but you want your employees to be well-rounded and be able to communicate with each other.)

Although there’s no single magic formula for hiring the best programmer, you’ve got a lot of tools at your command that will give you a pretty good sense of which candidate has the right skills and is the best fit for your company.(source:gamasutra)


上一篇:

下一篇: