试题设计的原则
原则
其实主要就两点。
- 分辨率足够。
- 简单。
第一点很容易理解。你的题目必须能准确区分傻逼,普通人,和牛逼,因此最理想的状况是,傻逼考零分,牛逼满分,普通人在中间。所以你的题目应该简单。如果题目难到普通人和傻逼一起做不出,那就没有区分能力了。如果不是正好碰到一个牛人,你的考试只能让你啥都招不到。这会把你自己变成傻逼。
所以,你的题目应该有一半是普通人能够做出来的,而不是道道都是神一样的面试题。之所以你在网上经常看到神一样的面试题,那是因为。
- 大公司不缺应聘的人,所以他们的“牛人线”比较高。
- 你能看到的题目,都是最牛逼的。
当然,题目中确实应当有一些有难度的题目,用来区分真正的牛人。这部分人我们要特别料理他们。
复用题库
混合一个题库,每次面试抽取不同题目形成试卷,这是常识了。
主要是防止试题外泄,还有重复出题造成的疲劳。
当然,每个题目需要加不同的属性,用于后面的一些分析。在抽题的时候也需要参考属性,例如上面提到的难度。
经验题还是能力题
我把试题分为两个类型。一类是测试你是否用过某项技术,用多深。另一类则是你的智力如何,学习,沟通,理解能力如何。
可以预期的是,刚毕业的人,经验题得分会低一些。不过在实际生产中,这些人出活的能力一向不差。所以对于刚毕业的学生,可以在经验题得分上宽容一些。
区分领域
在试题设计中,经常需要测试多个领域。例如网络,系统底层,等等。
将多个领域的题目分开标注,有利于你最终评定这个人的技术范畴。例如系统底层出色,但是网络很糟糕,这显然就不适合扔去一个重网络开发的组。
限制总量
这点才是整个试题设计的核心难点。
长时间的笔试是很高成本的。对于被考试者不是什么很好的体验,对于考试者来说,要出题,要判卷。考试期间还要招待人家,进行计时。如同马拉松一样的考试没有任何好处——除非非常必要。
但是正常来说,技术面试应该要问系统原理,算法,网络,编程语言,智力题等等,至少这么五个方面。每个方面一道题区分普通人,一道题区分牛人。这就是10道题。再复合上经验和能力的区分,还有为了对抗偶然而要每个组合多几个题。综合起来可能多达20-30道。这样1小时的笔试时间,每道题上只有区区2-3分钟。这点时间根本不够考核一些深入的问题。
所以如何减少问题的数量,而非增加数量,才是核心难点。
我的想法是增加过程叙述题,让被试人对一些经典过程做描述,并规范他一定要描述到哪些方面。以此来分析他对一些领域的基础。但是这方法有个明显弱点——不好执行不好打分。
关于这方面大家有啥意见?