我是怎么招聘程序员的----多个维度剖析衡量程序员的标准,角色转换面试时应该去关注什么

来源:互联网 发布:叶子老师沪江辞职知乎 编辑:程序博客网 时间:2024/05/01 19:47

转自:http://coolshell.cn/articles/1870.html

作者:陈皓

注:原文分三篇,在此做了合并处理,原文出处请到 http://coolshell.cn 查看,以下为正文。



我是怎么招聘程序员的


很早以前就想写一篇和面试相关的文章了,今天在网络上看到一篇关于如何去面试程序员的英文文章,发现其中有很多和我共鸣的东西,所以仿照其标题通过自己的经历写下了这篇文章。

工作这么多年来,即被面试过,也面试过他人,对于程序员的面试,经历过很不错的面试,很专业的面试,也经历过一些BT和令人不爽的面试,我个人觉得一个好的面试,面试官是很重要的,所以,本文想从“面试官”的角度来阐述一下。于是,有了下面这样一篇的文章,希望本文对你的职场经历有用,特别是那些正在招聘和面试程序员的朋友,我觉得这篇文章会对大家有很多启示。此外,做为被面试的人,你可以看看本站的《别的程序员是怎么读你的简历的》《程序员需要具备的基本技能》《优秀程序员的十个习惯》其它一些和程序员相关的文章

对于招聘方来说,在招聘程序员的时候,我估计面试应聘者时,最主要想知道的是下面三件事:

1. 这个程序员的是否够聪明?

2. 这个程序员能否把事情搞定?

3. 这个程序员能和我的团队在一起工作吗?

我相信,这是所有团队经理招人要考虑的三个问题,所有的问题也基本上围绕着这三个问题。有些时候,你也许觉得程序员的技术技能可以同时解决这三个问题,一个技术能力优秀的人必然是一个聪明的,可以搞定事情的人,当然也就能和团队一起工作了。是的,感觉看起来是这个样子,但其实并不是这样的。有些人的确很聪明,但却不能处理好工作上的事情,这样人应该是你的朋友,你的顾问,但不应该是你的雇员。有的人为人很不错,和团队所有人都合得来,但并不是很聪明,但工作很刻苦很努力,这样的人可以成为你的下属,比如某个下属骨干的助手,或是整个团队的助手。如果某个人不能和团队一起工作,无论其有多聪明,解决问题的能力有多强,你都不应该和他在一起工作。人个认为,团队的和谐是一切事情的前提。

对于传统的面试招聘过程,基本上来说都是下面这样的样子的:

1. 阅读应聘者的简历,让应聘者做个自我介绍。

2. 问一些比较难的非常细节的技术问题,以一问一答的形式。

3. 给面试者一些和几个编程难题。(比如某些怪异的算法题)

我个人觉得这种面试方法很可笑,也很糟糕,尤其是后面两点。通常来说,这样的面试只会让你面试到一些“书呆子”或是一些“技术痴迷者”,下面让我来一条一条地剖析一下这几条的弊端。

1. 你很难从一个人的简历或是自我介绍上了解一个人。因为这些都是当事人自己写的,或是自己阐述的。所以,这并不是很准确的,通过简历,你只能知道很简单的事情,这对于是否能招入团是远远不够的。而在面试的开始,让应聘者做自我介绍,只会让面试者以很正式的态度来面对整个面试。一但面试过程很正式,很严肃,就会让人很拘禁,其实,这并不是我们想要的,我要的是应聘者真实和自然的表现,从而才能了解到最真实的东西

2. 问几个技术细节的问题。比如:我个人经历过的——“ps的-a参数是什么意思?”,“vi中删除换行符的命令是什么?”,“C++的关键字explict,mutable是用来干什么?”等等,等等。以前做为一个应聘者来说,我非常讨厌这样的问题,因为这样的问题查一下手册就知道。难道他要招的是一个字典手册?不是一个人?对于这方面,重要的不是知识,重要的是其查找知识的能力

3. 给应聘者一个或几个很难的算法题,给上十几分钟,然后让面试者把伪代码或是代码写下来。这样的做法是相当可笑的,不能讨论不能查资料,让人在一种压力状态下作答,这根本就不是实际工作中的状态,而我们的面试也就成了一种刁难(我最变态的经历是,当我把写在两页纸上的代码上交上去后,面试官把其交给旁边程序员输出电脑做校验,结果程序员说,编译出错。于是,面试官说,“很遗憾,可能你写的程序还不多”,相当可笑)。对于这点来说,重要的不是那个解题的答案,而是解题的思路和方法

我以前经历过很多的面试,当技术人员来和我做面试的时候,我发现,“技术人员的思维”对于某些人来说根本分不清面试和考试,在潜意识里,他们在很多时候不是在面试这个人,而是在刁难这个人并以此展示自己的技能。我个人认为我是一个好的程序员,但我可以告诉你我无法通过那样的面试,因为那样的面试是为他们自己准备的,而不是为应聘者准备的。

那么,我又是怎样去面试的呢?

一、确认简历。首先,阅读一下别人的简历是需要的,从简历上,工作经历,项目经历,技术技能这三个事情是你需要了解的。一般来说,你可以先通过电话确定一下他的工作经历,项目经历和技术技能,然后,如果他和你需要的人条件相符的话,可以叫到公司做面对面的面试。千万不要把别人叫来,你又说你的经历和我们的工作有差距之类的话。(我有过一次面试经历,公司我不说了,反正是那个号称需要有良好沟通的公司,面试了我9次左右,从一般的程序员,PM,经理,到总经理,而最后一次直接告诉我,我以前的经历和他们的要求差距很大。我不禁要问了,前面若干次的面试他们都在干什么呢?)

二、面试开场。其次,把人邀请来公司面试,应聘者到了公司来面试,有一点很重要,那就是你一定要让整个面试过程变得很随意,很放松,就像普通的聊天和一般朋友间的交流一样。这样应聘者才会放松并拿出真实的样子来和你谈话和聊天,你才能在很短的时间内了解得更多。让应聘者放下心理负担,让其表现得自然一些,这是招聘方的责任。千万不要说,别人太紧张发挥的不好,有时候,招聘方得想想自己的问题。

面试开场的时候,千万不要让应聘者介绍自己,因为,应聘者早就给你发过简历了,而你也给其打过电话了。另外,应聘者对这个面试惯例通常都会准备得非常不错的,另一方面,这会让整个面试过程太正式太严肃了。所以,不妨问问应聘者是怎么过来的?最近怎么样?还可以和应聘者谈一个大众话题,比如喜欢什么体育,音乐,电影,社会热点什么的,自己也别板着个脸,说说笑笑,试图让大家都放松下来。另外,通过这些闲聊,你可以知道他/她的与人交往能力和一些性格。另外,不要让桌子放在你和应聘者之间,把环境搞得随意一些。

三、多让应聘者说说他的经历。接下来,如果你要觉得这个应聘者是否是一个可以解决问题,是一个可以把事情搞定的人,不用问他/她会做什么,直接问问其做过什么?干过什么事?对于一个好的程序员来说,很难想像其没有相关的实践,就算你是在大学里,你也应该做过什么。如果你有解决问题的能力,那么,很显然,今天你应该解决了很多问题,也搞定了很多事情,听听应聘者说一说他的那些事。(不要使用一问一答这种方式,应该让应聘者多说,而多听,多想)

在他讲他的项目的时候,通常来说你要注意下面几点:

· 沟通表达能力。应聘者能不能把一个事情讲清楚。如果这个人聪明的话,他就可以用最简单的语言把一个复杂的事情讲清楚。而且,这是一个好的程序员最基本的能力。而且,你可以在应聘者一边描述其经历的时候,你可以和应聘者有一些的良好的来来回回的交谈,这样就可以知道,他的沟通能力和沟通方式,从而了解他的性格,。

· 角色和位置。也许他参与了一个很大的项目,但只是做了一个很简单的模块。所以,了解其在项目中的担任的角色和位置是非常必要的。当应聘者说到“我们”或者“大家”之类的词汇时,一定要向下细化和明确。

· 做出的贡献和解决了什么的问题。这个很重要,通过了解这个,你可以知道面试者是否聪明,是否有能力解决问题,是否有好的技术底子。

· 演示。如果可能,你可以让应聘者展示一些其写过的代码,做过的设计,或是直接给你看看他写的程序的演示。(从设计上,代码的风格,重用性,维护性上你可以了解很多很多)

· 基础知识。了解该项目中应聘者使用的技术的一些基础知识,比如,通过整个过程,你可以问一些网络,语言,面象对象,系统的一些基础知识。基础知识是非常重要的,这直接关系到了他的能力。

· 流程和工具。了解应聘者所熟悉的项目的流程(银弹,瀑布,敏捷,……),还有流程中的一些工件(如:需求文档,设计文档,测试方档等),以及在开发过程中使用的工具(内存测试,代码检查,BUG报告,版本维护,开发调试……)(关于程序员的基本技能,你可以参考——《程序员需要具备的基本技能》)

有人会说,应聘者的经历可以被他自己编出来的,他可以把一些不是他做的事说成是他做的。是的,的确是有这种可能。不过,不要忘了,一个谎言背后需要用更多的谎言来圆谎的,所以,你不必担心这个问题,只要你在应聘者的描述过程中逐步求精,细化问题,你会知道应聘者是否是在编故事的。

千万记住下面几点:

· 谈话风格要随意和自然,不要正式。

· 在了解应聘者以前做过的事的时候,不要太投入了。因为招聘方也是技术人员,所以有时候,招聘者自己会因为应聘者所做的项目中的技术太过迷人而被吸引了。

· 要注意引导应聘人。相信我,应聘的程序员十个人有八个人讲不清楚以前做的是什么。因为他们直接跳过了项目背景和要解决什么样的问题,而直接进入具体实现。

· 不要一问一答,应该多让应聘者说,这样才能多全方位了解一个人。

· 了解一个人的过去,了解一个人做过的事情,比其会做什么更重要。

· 了解一个人的性格,想法,思维和行为,比了解其技术技能更重要。

· 沟通能力,表达能力,语言组织能力,理解能力,等方面的能力,关系到了是否能和别人一起工作。

· 基础知识比知识的点滴要重要得多。你可能不知道其个C++的关键字,但你应该要知道C++的继承和多态。

· 技术技能固然很重要,但比其更重要的是这个人获取知识的能力,学习能力是在计算机这样变化飞快行业中必需具备的。

· 是否可以进行培养,比掌握的技能更重要。

四、实际参与??这一步可能是很不好实施的。因为,这需要一些应聘者付出一定的时间,如果是毕业生,那没有问题,先让他来实习一段时间。但如果别人有工作,就不好了。也许你会说,这就是试用期的用处了。不过,我个人觉得,你得要尊重应聘者,人家把那边的工作辞了,来你这边工作,三个月试用期间,如果没有什么原则上的问题,你作为一个招聘方又反悔了,这样做很是相当的不好。如果发现这样的事,只能是招聘者自己的问题。

在面试过程中,一些招聘者会让应聘者们一起做个游戏,或是搞个辩论比赛,或是现场组个团队干个简单的事情,有的甚至让应聘者请一天假到自己的公司里来和自己的团队一同工作一天,并要完成某个事情(甚至给其设置上deadline),并通过这些来考量应聘者的实际参与能力。

是的,如果没有一起工作过,没有一些实际的事情发生,单靠几个小时的面试很难了解一个人的。设置上这些面试的环节,在最短的时间内来了解应聘者的一切,对于招聘方来说无可厚非。而且有的时候也能得到不错的效果。在这里,我只提一点,有时候这样的周期拉得很长,让应聘者付出了很多,反尔会让应聘者产生反感和厌烦情绪,从某种意义上来说,这实在是对应聘者的不尊重。

对于这一点,我一直持疑问的态度,所以,我在其后打了两个问号。老实说,对于实际参与这一环节,我个人的意见是适可而止,因为时间太短了,无论你怎么做你都无法了解完整。即然无法了解完整,那就获取你最需要的吧,就是本文开头的那三个问题,以及上面所述的“第三点”(了解应聘者的以往经历)。

也许这个文章中有一些你不同意的观点,没问题,欢迎批评,如果你有更好的做法,我也想听听,不妨在这里留个言,如果不想留也可以email给我。

(全文完)

 

再谈“我是怎么招聘程序员的”(上)

我以前写过一篇我是怎么招聘程序员的”的文章(在CSDN那里有很多人进行了回复)。今天,我想再谈谈关于招聘和面试这方面的东西,主要是以下这些原因:

· 近半年来我在进行了大量的招聘工作,对面试有一些新的体会。

· 酷壳最近发布了几篇趣味面试题(面试题一面试题二面试题三),从回复中让我有一些思考。

· 我有一个同事最近面试了一家公司,他和我分享了一个博士专家对他的面试,也让我思考了一些。

· 在豆瓣上看到知乎上某人写面试豆瓣产品经理的经历,很欢乐”(亮点是面试官现身知乎亲自作答)

所以,我很想把自己的这些新的想法再次写下来的。还是和以前一样,这篇文章同样是献给面试官的。我认为,面试的好坏完全在面试官而不是面试的人。下面是我对我是怎么招聘程序员的”一文中的一些加强性的观点。(关于一些点评,请参看本文下篇

为了让我的文章有连续性,请允许我重申一下前文的几个重要观点。

· 只有应聘者真实和自然的表现,才能了解到最真实的东西

· 重要的不是知识,重要的是其查找知识的能力

· 重要的不是那个解题的答案,而是解题的思路和方法

操作,知识,经验,能力

我们有很多的面试官似乎分不清,什么是操作能力,什么是知识,什么是经验,什么是能力,这导致了我们的面试官经常错误地对面试者下结论,我认为分不清这些事的人是没有资格做面试官的。所以,我有必要在这里把这个问题先讲清楚。

· 操作。我们的面试官分不清楚什么是操作技能,什么是知识,他们甚至认为操作技能就是知识甚至经验。比如他们会问如下的问题,请问Java中的 final是什么意思?怎么查看进程的CPU利用率?怎么编写一个管道程序?怎么查看进程的程序路径?VI中的拷贝粘贴命令是什么?包括面向对象的XX模 式是什么。等等。我以为,这些能够通过查况相关操作手册或是能够google到的东西只能说明这个人的操作技术,并不能说明他有知识或有经验

· 知识。知识是一个人认知和学习的体现,可能会是一些基础概念和知识。比如这些问题:TCP和UDP的优缺点比 较,链表和哈希表的优缺点的比较。什么是堆什么是栈?进程间是怎么通信的?进程和线程的优缺点?同步和异步的优缺点?面向对象的XX设计模式的主要原则是 什么,等等。我以为,“知其然”只是操作技术,“知其所以然”才是真正的知识。知识不够并不代表他不能工作,会操作技能就可以应付工作,但是知识的欠缺一定会限制你的经验和能力,同样会影响你的开发质量。

· 经验。经验通常跟一个人的经历有关系。一个人的知识范围,一个人经历过的事,通常会成为一个人经验的体现。面试中,我们会问这些问题:你解决过最难的问题是什么?你是怎么设计这个系统的?你是怎么调试和测试你的程序的?你是怎么做性能调优的?什么样的代码是好的代码?等等。对于工作年限不长的人来说,经历和做过的事的确会成为其经验的主要因素,尤其是业务上的有行业背景的东西。但是,我更以为,经验可能更多的是你对知识的运用和驾驭,是你对做过事情的反思和总结,是你对他人的学习,观察和交流

· 能力。一个人的能力并不会因为知道东西少而不行,也不会因为没有经验而没有能力。一个人的能力是他做事情的一种态度,性格,想法,思路,行为,方法和风格只要有热情,有想法,有好的行为方法,以及好的行事风格,那么知识和经验对他来说只是一个时间问题比如:学习能力,专研精神,分析能力,沟通能力,组织能力,问题调查能力,合作能力等等。所以,对于一个新手来说,也许他的知识和经验有限,但并不代表他能力上有问题,但是对于一个老手来说,如果其存在知识和经验欠缺的问题,那么通常都是其能力的问题。你可能暂时怀才不遇,但我不相信你会长期怀才不遇。如果是的话,那么你必然些问题其让你的能力发挥不出来。而此时,“没有经历过”只会是你“没有能力”的一个借口。

我不否认这四样东西对于一个优秀的程序员来说都很重要。但是,通过上述的分析,我们可以知道,能力和经验和知识需要分开对待。当然,这些东西是相辅相成的,你的能力可以让你获得知识,你的知识可以让你更有经验,你的经验又会改变你的想法和思路,从而改善你的能力。在面试中,我们需要清楚的认识到,应聘者的操作技能,知识和经验只是其能力的必要条件,并不是充要条件,而我们更应该关注于应聘者的能力

· 如果面试只是考查这个人的操作技能的话,那么这个面试完全失败。这是一个没有资格的面试官。

· 如果面试只是在考查这个人的知识和经验的话,那么成功了一半。因为你了解了基础知和做过的事,但这并不代表你完全了解他的真正能力。

· 如果你能够在了解这个人的知识和经验的过程中重点关注其能力(态度、性格、想法,思路,行为,方法和风格),并能正确地评估这个人的能力,那么你的面试算是非常成功的。

也许用这四个词来描述定套东西并不太合适,但我相信你明白我想表达的。另外,我想说的是,我们不是出个题来考倒应聘者,而是要找到应聘者的亮点和长处

不要肤浅地认识算法题和智力题

很多公司都会在面试的时候给一些算法题或是一些智力题或是一些设计题,我相信算法题或是智力题是程序员们在面试过程中最反感的事了。很多人都很BS面试官问的算法题,因为他们认为面试官问的这些算法题或智力题在实际工作当中用不到。但我想在这里说,问难的算法智力题并没有错,错的很多面试官只是在肤浅甚至错误地理解着面试中的难题的目的。他们认为,能做出算法题和智力题的人就是聪明的人就是有能力的人,这种想法实在是相当的肤浅。

其实,能解难题并不意味着这个人就有能力就能在工作中解决问题,你可以想想,小学奥数题可能比这些题更难,但并不意味着那些奥数能手就有实际工作能力。你可以想一想你们班考试得高分的同学并不一定就是聪明的人,也不一定就是有能力的人,相反,这样的人往往者是在应试教育下培养出来的书呆子。

所以,我认为解难题的过程更重要,你要主要是通过解题查看这个应聘者的思路,方法,运用到的知识,有没有一些经验,和你一起交互时和沟通得是否顺畅,等等,这些才是你重点要去观察的。当然,最终是要找到答案的。

我想,让面试者解决一个难题的真正思路是:

· 看看他对知识的应用和理解。比如,他是否会用一些基础的数据结构和算法来解决算法题?

· 看看他的整个解题思路和想法。答案是次要的,他的想法和行为才是重要的。

· 看看他是如何和你讨论交流的。把面试者当成你未来的同事,当成你的工作伙伴,一起解题,一起讨论,这样可以看看大家是否可以在一起工作。

这些方面才是考查应聘者的能力(思路,方法、态度,性格等),并顺带着考查面试者的经验和知识。下面是一些面试的点:

· 应聘者在解算法题时会不会分解或简化这个难题。这是分析能力。

· 应聘者在解算法题时会不会使用一些基础知识,如数据结构和基础算法。这是知识。

· 应聘者在解题时和你讨论的过程中你有没有感到应聘者的专研精神和良好的沟通。

· 应聘者在对待这个算法题的心态和态度。如,面试面是否有畏难情绪。

· 应聘者在解题时的思路和方法是否得当,是否是比较科学的方法?

· 等等。

在解难题的过程中考查应聘者的能力才是最终目的,而不是为难应聘者,不然,你只是一个傲慢而无知的面试官

模拟实际中的挑战和能力

作为面试官的你,你应该多想想你的工作,以及你的成长经历。这会对你的面试很有帮助。你在工作中解决问题的实际情况是什么?你写代码的实际情况是什么?你的成长经历是什么?你是怎么获得知识和能力的?你喜欢和什么样的人工作?相信你不难会发现你工作中的实际情况和面试的情况完全是两码事,那么,你怎么可以用这种与实际情况差别那么大的面试来评估一个人的能力呢

所以,最为理想的面试是一起工作一段时间。当然,这个在招聘过程中,操作起来几乎不可能,因此,这就要求我们的面试官尽可能地把面试的过程模拟成平时工作的过程。大家一些讨论来解决一个难题,和应聘者一起回顾一下他已经做过的事情,并在回础的过程中相互讨论相互学习。下面举一个例子。

我们知道,对于软件开发来说,开发软件不难,难是的下面是这些挑战:

1. 软件的维护成本远远大于软件的开发成本。

2. 软件的质量变得越来越重要,所以,测试工作也变得越来越重要。

3. 软件的需求总是在变的,软件的需求总是一点一点往上加的。

4. 程序中大量的代码都是在处理一些错误的或是不正常的流程。

以,当我们在考查应聘者的代码能力时候,我们为什么不能模拟这样的过程呢?比如,让应聘者实现一个atoi()的函数,实现起来应该很简单,然后 不断地往上加新的需求或新的案例,比如:处理符号,处理非数字的字母的情况,处理有空格的情况,处理十六进制,处理二进制,处理“逗号”,等等,我们要看 应聘者是怎么修改他的代码的,怎么写测试案例的,怎么重构的,随着要处理的东西越来越多,他的代码是否还是那么易读和清晰。如果只是考查编码能力,一个小时,就问这一个问题,足矣。真正的程序员每天都在和这样的事打交道的。

如果要考查应聘者的设计能力,同样可以如法泡制。不断地加新的功能,新的需求。看看面试者的思路,想法,分析的方法,和你的讨论是否流畅,说没说在点上,思想清不清晰,会应用什么样的知识,他在设计这个系统时的经验是会是什么样的,面对不断的修改和越来越复杂的需求,他的设计是否还是那么好?

当然,因为时间比较短,所以,你不能出太复杂的问题,这需要你精心设计一些精制的有代表性的问题。


再谈“我是怎么招聘程序员的”(下)


在上篇中,我们说到了一些认识人的方法(操作,知识,经验,能力),还有一些面试的方法(算法题,实际生产活动中的挑战),下面我们来说说,面试的风格,还有一些点评。

把应聘者当成你的同事

有些公司的面试官,在面试过程中问你一个算法题,然后等着你解答了,如果你给出一个答案,然后就会问你有没有更好的答案,如果你给出了正确的答案,他们就会问你一个更难的问题,如此循环下去。他们基本上很少给你提示,甚至不停地质问你,挑战你,搞得应聘者很紧张。

另外,有很多问题是没有标准答案的,或者说是,同一个答案的描述方法有多种,很多面试官会觉得你没有回答到他想要的答案,因此表现得有对你不屑,并表现出你不行的样子,并觉得你的能力有问题。真是可笑了。比如我一个朋友在回答什么是异步的问题时,举例说明了异步调用就是不能处理完就返回,并且需要传递一个回调函数给调用方以便完成后回调通知结果。这样的回答并没有错,但是这并不符合面试官心里想要的答案,面试官对此并不满意,进而认为我这个朋友还需要去多读读书。

我相信大多数面试官都会这样干的。我想问问这样的面试官,你们有没有用面试的方式对过你的同事?在你的工作场景中,你会不会用面试的风格和你的同事进行交流和说话?不妨让我们来问我们自己下面几个问题:

· 你在工作当中遇到难题时你是怎么解决的?你会和人讨论吗?你只用15分钟就能得出最优解吗?

· 你在工作当中解决难题时是否会有一个人在旁边质问你并给你压力吗?

· 你在工作当中会为难你的同事吗?会让你的同事紧张吗?你觉得在紧张的状态下能做好工作吗?

· 你在工作中觉得同事的回答并不是你想要的答案,不是符合你的答案,你会认为你的同事不行吗?

· 你的成长过程是什么样的?在是压力和天天被人质问的情况下成长的吗?

· 大家都知道学校里应试教育的弊端,你觉得你的面试是不是一种应试呢?
(看看这么多的应聘者们都在做各种各样的算法题,这不就是一种应试吗?)

想一想你的日常工作,问自己一下上面这些问题,想一想你自己的成长过程,想一想你和你的同事是怎么相处的,想一想你的日常工作中是什么样的,相信你自己也能得出结论的。

如果你把应聘者当成自己未来的同事,那么你的面试会有下面的收获:

· 面试的气氛会很不错,应聘者会放松,表现自然,更接受于真实的状态。

· 面试中的交流和互动(而不是一问一答)会让你更全面的考查和了解一个人。

· 非应试的面试,会让你了解得更多。

· 真实的了解一个人,你才能做出真正正确的结论。

向应聘者学习

下面有几个观点

· 面试的过程是一个相互学习的过程,并不是你为难面试者的过程。

· 一问一答是很一种呆板死板的过程,相互讨论相互学习,有良好的互动才是好的面试过程。

· 面试官要证明的不是你有多强有多聪明,而是要挖掘应聘者的优势和能力。

· 面试官用为自己的问题预设好一个标准答案,看看应聘者能为你带来什么。

· 向来应聘的人学习,而不是刁难。

无论你多牛,要难倒你实在是太容易了。出难题不是目的,难倒人也很容易,出难题只不过是用来了解应聘者能力的一个手段,而不是面试的全部

我不知道你喜欢不喜欢一些竞技类的运动?比如踢球,打篮球,羽毛球,下象棋等,你一般想和什么样的人玩?是差的,还是强的?所以,能够从面试者那里学到东西,喜欢和面试者一起工作,这才是面试真正的目的

对于一个团队来说,如果大家都是一样的想法,一样的主张,一样的倾向,那么这个团队最终会是一个闭塞的团队,你如果不能真正接纳不同想法的人,不同主张的人,那么你也将失去进步的机会。如果你的团队总是在招入和你一样的人,那么你的团队怎么可能会有out-of-box的想法呢?世界因为不同而美好

另外,对于公司来说,如果你招进来的人还不如已经有的人,作为一个公司,你又怎么能有更好的人让你的公司进步呢

所以,面试应该是向面试者学习的一个过程。当然,如果你从他身上学不到什么,那么你就教他一些吧。这样,就算是面试不通过,面试者也会欣然接受的。不然,让面试者产生一些负面情绪,出去说一些不好的话,也有损你和公司的形象。

一些相关的点评

下面是我根据酷壳的一些面试题的文章后的回复、还有我朋友的经历,还有这篇有关豆瓣的产品经理的这篇文章的一些点评。大家可以看看我从这些地方看到东西靠不靠谱。

酷壳的面试题中的答复

先说酷壳的那篇火柴棍式的面试题”,这个面试题其实很没什么意思。主要考查你对代码逻辑的了解程度。因为设置了回复可见答案,所以这篇文章的回复量达千把条。从回复中,我看到:

· 一些朋友想不出来就直接看答案了。我可以看出,有一些朋友习惯获得知识,而不习惯独立思考。甚至有畏难情绪,从另一方面来说,可以看出我国的教育还真不是一般的差。

· 一些朋友想不全。从这点来看,我觉得很正常,尤其是想出两种来的,我可以感觉到他们的努力思考了,可能还做了一些尝试。挺不错的。可惜我看不到你思考的方式,是在纸上画了画,还是编译了个程序跑了跑,还是别的什么。这样我会了解你更多。

· 一些朋友给出的答案中有错的。这说明了这类朋友可能不喜欢做测试,时常想当然,或是做事比较冲动,并不足够严谨。这么简单的程序,验证能花多少精力呢?

· 还有少数的朋友没有看明白题目要求。这说明了这类朋友太粗心了,在工作当中可能会表现为误解需求和别人的话。沟通有问题。

再说说那篇火车运煤”的问题,这个面试题我觉得主要是看看大家的解题思路,表达能力。

· 首先,我很惊喜有人很快就用数学做了解答,很不错,这个人的数学功底很不错。能用数学解题的人一般来说都是算法比较强的人。

· 有人说抱怨我没有说火车可以调头回去,所以没有想到这样的方法。如果是在面试中我会做提示的。我不会因为你不知道调头这个潜规则而否定你的。当然,如果你能想到的话说明你的脑袋还是比较灵的。

· 还有很多人说他的方法比较土,只运了400吨煤,416吨的或333吨,一看就是没有看提示的,我觉得这些人能够通过独立思考找到方法,这类的人其实已经不错了。顺着这个思路优化也只是时间的问题了。

· 更可喜的是,我看到了有一些朋友在看到别人的更好的方法后和自己的方法进行了比较,并找到了为什么自己的方法不如他的原因。这样的人我认为是懂得“总结”和“比较”的,这样的人总是在不断地学习和改善自己的。

· 还有人说到了动态规划,如果是在面试的时候,我很想向这位朋友学习一下用动态规划来解这题。

· 还有朋友说到了火车调头只能在有站的地方。这个朋友一看要么就是搞需求分析的人,要么就是较真的人。需要进一步了解。但不管怎么样,这样的朋友的观察能力是很不错的。

· 还有一些朋友给出的答案是正确的。但是表达方面比较复杂,有些没有看懂。可见,解题的能力是有的,只是表达能力还有待提高。

豆瓣产品经理的面试

再说说豆瓣上的这篇文章,那篇文章里,面试官问了一个比较大的问题,那是仁者见仁,智者见智的问题,并且面试官并不满意应聘者给出的答案,并在用其主观意识强加一些东西给应聘者,并不断地和应聘者纠缠。后来,面试官回复到“重点测了两个问题:一是判别事情的标准和方法;二是在多种PK下产品经理的压力反应”。

下面是我观察到的:

· 其一、这种似事而非的仁者见仁,智者见仁,一万人有一万个答案。所以,这种怎么答都可以的问题是很难有标准的,我认为豆瓣的面试官以这种问题来考查面试者的标准太有问题了。更好的问题是:比较一下新浪和twitter这两个产品。

· 其二、多种想法PK的压力反应。这点没有问题,如果有机会我想问问这位面试官,豆瓣产品经理们的PK各自的想法时是以这种纠缠的方式吗?如果是这样的话,那我很为你们担忧啊。

· 其三、很明显,应聘者不知道面试官想说什么,所以应聘者总是给出一些模棱两可的回答。回答得很政客,呵呵。

· 其四、问的问题都是一些假设性的问题,假设技术人员不可沟通。人家说了,还没有见过不能沟通的情况。结果还要继续追问。这样你既要观察不到你想要的,也搞得大家不愉快。更好的问题的:“请你给一个你和一个很难沟通的人沟通的示例”,或是当应聘者说了“坚持己见”的时候,也应该追问“能给一个你坚持己见的例子吗?”。

· 其五、整个面试过程完全是在谈一些虚的东西,就像天上的浮云,一点实实在在的东西都没有。比如下面这两个实实在在的问题:“你以前设计过什么产品?”,“你和你的技术团队是怎么合作的?”

这是一个完完全全失败的面试,这个面试官根本不懂面试,甚至工作方法也可能很有问题。也许他只是想找一个能够在工作中附和他的人。

朋友的面试

最后说说我那个朋友的面试,我的这个朋友学习能力很强,也很好专研,工作中解决了很多很困难甚至很底层的问题。他做软件开发时间并不长,但是他对这个行业很有热情,也很执着,并有着相当不错的技术功底。这天他遇到了一个面试官,根据朋友的描述,这位面试官,主要问题了三个问题,一个是关于异步的,一个是关于性能调优的,还有一个是关于学习能力的。

· 问到异步的问题,我这个朋友说到了多线程中的异步调用,但是他可能问的是网络或是业务中的异步,要不然就是Linux 内核中的异步,当然他也没有说清楚,但他很不满意我朋友的答案,并让我朋友回去多看看书。

· 问到性能调优的问题时,我这个朋友说了性能调优分三级,业务级,指令级和CPU级,并举例说了使用了一个叫VTune的性能分析工具。面试官却说原来你只懂Windows,有点不屑,并说他只会使用商业工具,更不屑。

· 当我朋友向他澄清问题时,面试官只是摇头,叹气。并在应聘者作答的过程中不断的打断对方。

我的看法如下:

· 对于异步来说,我认为这是一种设计或是一种想法,可能会有很多种不同的实现方式,在不同的场景中会有不同的用法。面试官并没有考查应聘者对异步方法的理解,也没有考查异步方法可以用来解决什么,异步方法的优势和劣势,等等。只是觉得应聘者没有给出他想要的答案。

· 对于性调优的问题,我认为应聘者的思路和知识都很不错,还有使用VTune的经验。无论使用Windows还是Linux,无论使用商业的还是开源的Profiler,很多东西都是相通的,怎么能够因为这个东西不对自己的口味而下结论。为什么不向人家学习一下VTune呢?使用工具只是操作技能啊。

· 面试官应该是用微笑来鼓励应聘者的,而不是用摇头和叹气,频繁打断对方也是一个相当不好的习惯。看来这个面试官很不能接受不同的东西。

这位有很不错的技术能力的人,看来并不适合做一个面试官,因为他面试的东西都只在知识层次,而且这位面试官有强烈的喜好和倾向,所以,他必然会错过那些有能力但并不合他口味的人。

哎,面对这样的面试官,大家伤不起啊!

 


0 0
原创粉丝点击