开发团队招募程序员的六个编程测试技巧

导读:本文根据《How To Write A Good Programming Test》这篇文章翻译而来,译文来自游戏邦《开发团队招募程序员的六个编程测试技巧》。

文章内容如下:

过去我参加过许多场编程测试。我喜欢参加这些活动,因为总是能够看到不同的程序员在设计时会遇到哪些挑战。但不幸的是,这些测试都不是非常棒。下文将列出某些有助于提高程序员测试质量的建议:

1.保持关联性

许多测试存在的问题是,内容与该职业并不相关。编程测试背后的想法是确保就职者拥有胜任职位的能力。所以,不应该询问你认为“优秀程序员”应该具备的主观问题。并不是说你不应该测试基础知识,因为程序员确实需要了解这些。重点在于,你不能只单纯为了某些概念来进行测试。

C++中的“friends”便是绝佳的例证。几乎每个我参加过的编程测试都会询问此类问题。到现在位置,我的编程经验已经有5年之多,但是我只用过它们两次。第一次是在大学的时候,第二次就是在参加编程测试的时候。我询问过其他一些高级程序员,他们也都没有用过。为什么要询问与他们所要开展的工作无关的问题呢?我知道肯定有些人使用过,但是如果你团队中的多数程序员都从未碰过,那么为什么新程序员需要掌握这些内容呢?如果新程序员确实会使用这些内容的话,有可能带来的好处是在解决相同的问题时提出不同的解决方案。

当然,理想状况是能够雇佣到知道所有编程相关内容的程序员。但是现实情况并非如此。因而,重点在于确保他们所掌握的知识与你所需要的相符。询问不相关的问题不会帮助你找到合适的程序员,只会帮你找到那些深知如何通过编程测试的人。

2.不要询问愚蠢的问题

为何要浪费时间去询问写在纸上的代码编译错误这些问题呢?现在,编译器挑出错误的速度要比人工快得多。测试程序员能够找到这些简单的错误就像是让一位英语教授去寻找拼写错误而不是矫正句子结构。应该让程序员去找出代码中的逻辑错误。让他们根据代码逻辑来寻找问题。

而且,不要向程序员提某些带有花招的问题。花招式的问题需要大量的时间才能找得出来,而当你已经见过这个问题时,你会很迅速地找出来。简单地说,花招式的问题测试的是程序员以前是否被提过这个问题,而不是这个程序员有多棒。

3.在询问优化问题时应当谨慎

编译器和平台的变化非常迅速,尤其是在数年时间内便会出现全新硬件的游戏行业。出于这些原因,你必须在让程序员优化代码时异常谨慎。即便是数年前堪称精湛的优化技术现在可能也已经落伍了。

比如,某些现代CPU(游戏邦注:尤其是主机上的CPU)在执行branches时非常缓慢。使用缓存的查找表格来作常规优化可能不一定是最快的优化方式。更为重要的是,询问优化的普遍概念。

如果他们能够解释出某些最佳的做法,那么这就是你要寻找的人。

如果你的工作并没有明确与优化相关,那么我会提出某些具体的问题。在游戏中,代码优化非常重要,所以这样做是很有必要的。但还是要提醒的是,询问某些更高层次的概念问题,而不是给出具体的代码然后让他们去编写出最快的代码。最棒的求职者可能会说,在未知具体硬件和简况的情况下,他们会选择编写相对简洁的代码而不是他们所认为的优化代码。

4.根据团队的编程来编写测试

如果你对需要在测试中提出的问题举棋不定,那么最实用的方法是冷静下来,查看或与团队成员交谈他们正在执行的任务。询问团队,他们将多数时间花在哪里。随后,你可以根据耗费时间最多的任务来编写测试。

这也能够保持测试的相关性,防止你提出不必要的优化问题。我发现80%的工作时间都在做相似的任务,所以掌握可用于这些任务技能的求职者正是你所需要的雇员。很显然,如果你正在寻找的是特别职位的人选,这种方法可能并不奏效,但是当你寻找的是普通程序员,这样做确实能够提供好处。

5.保持测试的简单化

我发现,许多测试中的问题都过于复杂。你完全能够明白他们要询问的问题,但是他们却使用了大量复杂的例子来提出这个问题,而不是简单地直接提出问题。为何不直接向参加测试的人直接提出问题,而要让他们花数分钟的时间去探索问题呢?

应该复杂的不是问题,而是答案。尽管你要的不只是教科书上的答案,但最好在面试前提供健全复杂的答案。

6.使用面试来判断思考过程

编程测试能够清除出那些根本无法编程的程序员,但是无法体现出程序员在解决问题时的思考过程。尝试通过书面测试来实现这个目标不太实际,应将这个过程留到面试中。

我喜欢询问简单的问题,程序员必须在白板上解决编程问题。这种做法的主要目的在于发现程序员在解决问题中的思考过程。作为程序员,你知道解决问题的正确方法,你会很快判断出该程序员是否明白他们要解决什么问题。而且,你也有可能因为他人提出你从未想到过的有趣解决方案而感到惊奇。无论出于何种情况,他们编写的代码都不重要,重要的是他们解决问题的方式。让他们在解决问题时大声说出他们的想法。你需要考虑的是,这些想法是否会令问题加剧,该程序员是否是团队所需的合适人选。

结论

这些是编写优秀编程测试的简单技巧。我希望能够看到更多能够找到优秀程序员的测试,而不是尝试去寻找某种特殊程序员。