又到了大规模面试的季节,又到了虐学生狗的日子。。。
面试,对于面试官而言,其实是一个绝佳的学习机会。可以看看别人怎么写code,听听别人的思路,多面试面试别人,也能提高自己的沟通能力和EQ,说不定技术也会有所提高呢。毕竟长江后浪推前浪,前浪死在沙滩上,一浪更比一浪浪。。。
面试的目的是选出人才,或者说是有潜力的人才。然而潜力这个词毕竟比较虚,每个人所认为的潜力都不一样,所以能面试出有潜力的人才固然是好,但是面试的基本base line是找出相对能力比较强的人才。
但,能力比较强又是个很难界定的词。拿高考来说,大家都知道高考考的好的并不一定能力强,考试拿高分,无非就是比别人多做了很多题,并且把他们都背下来,然后考试的时候碰到类似的就能很轻松的做出来而已。然而,除了用一些题目来评判的话,貌似也没有什么其他好的办法来界定能力的高低。所以我认为界定的其实不是能力,而是为了达到这个目的愿意付出努力的程度,愿意付出很多努力和精力,那么就是有能力,反之就是没能力。
所以虽然面试的时候有些题可能候选人以前看过,所以能很不假思索的做出来,但这正是应该表扬的而不是应该避免的,这至少说明了这个候选人有这个意愿去做准备,这个attitude就是能力强的一个表现。
Passion非常重要,上面讨论的attitude实际上也是passion。Passion和潜力又有很大的关系,没有passion的人几乎没有任何潜力,因为在没有外来动力的情况下(离开了学校,没有老师教),他不会有passion去self learn。而如果有了passion,那么即使现在技术一般,将来也可能会变成牛人。
所以如何考察passion是面试官需要解决的一个头等重要的问题。如果抛出一个题他不会做,那么并不能表明他没有passion。我认为鉴别有没有passion的一个方法就是问很多各个领域的常识性问题。对于一个有passion的人,他渴望学习,肯定会涉猎很多教科书中没有的内容,所以看看他知识的广度是个很好的办法。
面试官和候选人是平等的,甚至面试官要站在比候选人低一级的角度思考问题。面试官的作用是要引导候选人发挥出他的最佳水平,最好能触到他的limit,所以面试官如何引导非常重要。很多候选人在面试的时候紧张,或者不知道要说什么,此时面试官就要消除候选人的紧张情绪和所有影响候选人发挥的不利因素,引导候选人说话。面试官不能等着候选人自己说话,因为很多情况下候选人自己说的话并不能完全反映他的真实能力,如果面试官不问,那么候选人不说,这样面试官其实可能错过了候选人的有很强实力的某一方面。所以面试官要不断发问,要不断引导候选人:“你在xx方面做过什么?做的怎么样?有什么成果?碰到什么问题?在yy方面呢?哎你zz这个会不会?”面试官要不停的从候选人嘴里套话出来,这样才能全方位的评估他的能力:”哎你刚才说到了aa,那么我来问一个aa.1的问题“。。。
总体的原则,如果候选人说到了a,那么面试官可以针对a发问,让候选人说更多的内容出来,候选人说的越多,我们对候选人的了解越全面。这对面试官的沟通技巧其实有很高的要求,特别是在有些候选人十分内向的情况下这个难度就更加大了。但对码农这个职位来说,技术能力的考量要大于沟通能力,而且很多码农本身就不太爱说话,所以还是有必要在候选人沟通能力不佳的情况下挖掘其技术能力的。
面试官要对候选者的简历有一定的容忍度。特别对于学生来说,简历往往不能简明的体现出自己的长处,还有些简历上面填写了很多技能但是可能都基本没用过。这些其实是目前求职者的普遍问题,现在找工作压力这么大的情况下,对简历的稍微过头点的polish其实也属正常。面试官应该能容忍这一点,简历其实参考的价值并没有那么大,最主要的还是面试时面试官的引导来导出候选者自身的亮点。
最后,现在我们面试一个突出的问题就是一上来就2个算法题,做的出来就hire做不出来就no hire,这个过于简单粗暴了。只考算法就把面试要考察的能力局限在一个很小的范围之内。很多其他领域的各方面的问题也是要都问问的,这样才能更有机会发现候选者的亮点。要把passion摆在第一位。
用算法来区分一个人有没有潜质,还有一个很大的问题就是你期望候选者能够通过思考解决问题来看他的潜力,但是事实情况是很多算法题目本身并没有区分度,如果你知道或者以前看过那么就100%能很快答出来,如果以前没有看过那么你除非智商200否则一般人是没法在面试的时候凭自己的能力想出来的。凭心而论,各位面试官如果你在面试的时候第一次碰到这种类型的题目,你觉得你能做出来吗?所以要出那种恰到好处,能让面试者思考一下又能恰好够得着的题目,其实非常难,因为首先候选者和面试官本身的背景各不相同,第二这种题目非常少,而且候选者怎么也刷过些题是有备而来。所以我十分反对完全凭算法来做决定,必须在广度上铺开才行。
其实我们做工程的,算法虽然也很重要,但却不是最重要的,最重要的反而是design pattern,OO concept等这种能降低maintenance成本,写出优雅代码的东西。然而现在很多学生可能都在刷题所以对这些方面都不了解,更要命的是刷题带来的恶劣的编码风格其实和真实做项目是完全不一样的。所以我觉得至少我们得提升software design方面的比重而降低算法的比重。
如果把算法比作数学,那么design pattern之类就可以比作语文。当然我们这里谈论的算法不涉及竞赛,只是一般面试难度的算法。数学考满分的大有人在,但是语文考满分的却不多,因为语文有作文。因为对于有迹可循的东西,只要IQ高和肯下苦功夫,就可以拿高分,但是对于自由的主观命题,人与人看问题的深度就很不一样,第一个这需要自己不断的内省来演化总结,第二个也需要很多实践经验的加持,所以对于能力是一个全方位的考验。如何把代码写的优雅是一个哲学问题,所以实际上对创新思考的要求更高,就像写作文一样,没有创新思维是写不出好看精彩的内容的。
英语可能也是一个考察的方面,在之前的公司面试都是要考察英语的,但是在这里这个要求反而就没有了,毕竟现在都是global team,这样真的好吗?
总结一下,面试官要循循善诱,考查的点要有广度,才能看出来有没有passion,passion是第一位的,常识性问题和算法都要问,算法不能作为评判的唯一根据,design pattern之类至少应该和算法有同样的权重,最终的目的是要尽可能的挖掘出候选人身上的亮点。
网友评论