如何面试程序员?

标签: Startup | 发表时间:2010-12-16 14:57 | 作者:(author unknown) bluesnail
出处:http://www.ruanyifeng.com/blog/

你要面试一个程序员,应该问他什么问题?

有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人。众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章。

===================================

如何面试程序员?

阮一峰 整理


一、提问之前的准备

首先,最重要的是,你自己一开始就应该想清楚:

  1. 需要新员工完成什么样的任务?

  2. 怎样的人能完成这样的任务?

  3. 哪些途径和方法可以发现这样的人?

只有明确这些根本性的问题,才能正确高效地完成面试。

二、提问的原则

假定你对上一节的三个问题,已经有了清晰的想法,那么接下来就可以设计如何提问了。

有一些提问的原则,是你应该遵循的:

  * 每一个面试问题都有明确的目的。你不仅自己了解,还能向其他面试官解释清楚。

  * 多提一些开放性(Open-ended)的问题,而不是那种用Yes/No就可以回答的问题。这样做使你有机会与面试者展开讨论,并且提出后续的问题,尽可能多地了解对方。

  * 不要问宗教、家庭、健康、个人隐私等方面的问题。

  * 不要问太复杂的问题。因为面试者没有太多思考时间,所以无法周全地回答,你也就无从判断他的能力了。

三、考察专业能力

为了确认面试者是胜任的,你可以问一些与职位相关的专业方面的问题。(不过通常来说,一次面试不足以看出一个人的专业能力。)

比如,你的招聘职位是系统管理员,你可以问"如何快速地在50台机器上部署Linux?"(提示:正确答案不是刻录50张安装光盘。)

另外,你还应该向面试者了解他的过去,因为过去是未来的最好预测依据。不过,提问的重点不要仅仅是他过去的成果,更要关注在当时的环境中,他是如何决策和实施的。

四、考察综合素质

因为人是会发展的,所以某种程度上,面试者的综合素质要比他的专业能力更重要。

所以,具体的技术问题(如何调用API、什么是设计模式、编程语言的语法等等)可以少问一些,更应该关注面试者的事业心、对工作的热情、进取心、自律能力、毅力等方面。

下面是一些典型问题:

  Why did you get into development?
  你为什么开发软件?

  How many technical books did you read in the past year?
  去年你读了几本技术书籍?

  What was your favorite technical book in the past year? What did you learn from it?
  去年你最喜欢的技术书籍是哪本?你从中学到了什么?

  What websites do you read regularly, related to development?
  平时你经常访问哪些编程类网站?

  Do you maintain any open-source projects?
  你有自己的开源项目吗?

  Do you code in your spare-time?
  业余时间你编程吗?

  Do you love programming, or do you do it for the money?
  对于你来说,编程是一种爱好,还是一种谋生手段?

  Have you accomplished anything important in your career yet? Do you want to?
  你的职业生涯之中有什么重要的成就?它是你主导的吗?

  What would make you feel that you have done something important?
  什么事情会让你很有成就感?

五、考察理性思维

某些情况下,你可能需要了解面试者的分析判断能力,看他能否全面地思考问题、客观地评价自己。

那么,你可以依次提出这样三个问题:

  What's your favorite programming language? Why?
  你最喜欢的编程语言是哪种?为什么?

  If you could add one feature to your favorite language, what would it be? Why?
  如果允许你为这种语言加一种功能,你会加什么功能?为什么?

  If you could remove one feature from it, what would it be? Why?
  如果允许你取消一种功能,会是什么功能?为什么?

这里的重点是,让面试者从正反两方面评价一件自己熟悉的东西,看看他的思维是否片面。答案无所谓对错,只要面试者有一个明确的立场,能够从正反两方面说出令人信服的理由,就可以了。比如,某个软件的口碑不好,但是面试者说他很喜欢,而且说得出一大堆理由,清楚地解释了这种软件的优点和缺点在哪里,这样就很好。

你还可以把这些问题,套用在其他东西上面,比如操作系统、文字编辑器等等。

(完)

相关 [面试 程序员] 推荐:

如何面试程序员?

- bluesnail - 阮一峰的网络日志
你要面试一个程序员,应该问他什么问题. 有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人. 众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章. 首先,最重要的是,你自己一开始就应该想清楚:. 哪些途径和方法可以发现这样的人. 只有明确这些根本性的问题,才能正确高效地完成面试.

“火柴棍式”程序员面试题

- Hao - 酷壳 - CoolShell.cn
有时候,有些面试题是很是无厘头,这不,又有一个,还记得小时候玩的的“火柴棍游戏”吗,就是移动一根火柴棍改变一个图或字的游戏. 程序面试居然也可以这么玩,看看下面这个火柴棍式的程序面试题吧. 下面是一个C程序,其想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正确,不过,你只能增加或是修改其中的一个字符,请你给出三种答案.

ABC: Always Be Coding——程序员面试必读

- - 36氪 | 关注互联网创业
@guitardave24">David Byttow是一名程序员,曾在Google和Square等公司工作过. 在正文之前,先让我们回答几个简单的问题:第一,你面试过多少家公司;第二,这些公司中,录取你的有多少. 记下这两个数字,然后代入下面这个算式中(为我自己发明,仅供参考,不具有其他意义):.

如何面试一名程序员?

- - 标点符
STAR面试法中“STAR”是SITUATION(背景)、TASK(任务)、ACTION(行动)和RESULT(结果)四个英文字母的首字母组合. 在招聘面试中,仅仅通过应聘者的简历无法全面了解应聘者的知识、经验、技能的掌握程度及其工作风格、性格特点等方面的情况. 而使用STAR技巧则可以对应聘者做出全面而客观的评价.

程序员面试中什么最重要?

- - CSDN博客研发管理推荐文章
相信和不少朋友一样,有了几年工作经验成为Senior后就开始了面试别人的经历. 我在最初这个阶段只是按照自己的想象把“找到基础好的程序员”、“找到算法能力优秀的程序员”、“找到有Android开发经验的程序员”等作为面试的目标. 但是, 实际的经历告诉我,尤其是按“基础好”,“算法好”这些目标招到的人最终效果并不好.

程序员的10大成功面试技巧

- - ITeye博客
1.给自己写一份非常专业的简历.   我的建议是,如果你想增加自己的入选机会,那最好还是花点钱制作一份专业的简历. 相较于你将来可能得到的巨大收获,这真的只是一个小小的投资.   当我联系程序员来面试的时候,我总是会事先发电子邮件给他,并附上我的名字和博客地址. 但是让我惊讶的是,当我给他面试的时候,他竟然对我还是一无所知.

[原]程序员如何快速准备面试中的算法

- - 结构之法 算法之道
    程序员如何快速准备面试中的算法.     我决定写篇短文,即为此文. 之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法. 尽管在 微博上简单梳理过,如下图所示:.     但因字数限制,特撰此文着重阐述下:程序员如何快速准备面试中的算法,顺便推荐一些相关的书籍或资料.

10个我最喜欢问程序员的面试问题

- - 博客园_新闻
英文原文: 10 Programmer Interview Questions I’d like to be asked . 最近我拜读很多文章,都是介绍面试问题的,我真心不理解,面试官代表公司想要聘用的是最优秀的程序员,那就意味着需要想出一些有意义的面试问题. 如果你就提一些毫无用处的垃圾问题,那么很容易遗漏很多能干的程序员.

招聘面试程序员的一些心得

- - 博客园_新闻
最近雅虎北研解散的消息触动了各大互联网公司 HR 的神经. 公司里一下子面试的任务多了起来. 正好借机会总结一下自己毕业后作面试官以来参与若干场技术面试的一点心得,分享一下. 当好一个面试官其实也很不容易,不但要练就一双火眼金睛,把优秀的人才和水货在短短的面试的几十分钟里分辨出来,同时面试官本身就是候选人观察公司的一个窗口.

【外刊IT评论】如何在面试中发现优秀程序员

- Shengbin - 外刊IT评论
我曾在一次面试中要求一个很有经验的嵌入式软件开发人员写出一个反转一段字符串并输出到屏幕上的程序. 你给他一些没用的零件,他能建造一个机器人,并能用程序控制它在屋里走来走去. 他曾经参与过研制卫星,并且这个卫星现在正在轨运行. 但是对于这个题目他却从来、从来没机会干过:在屏幕上显示什么东西. 有些人就有这种技能,能在面试中问出正确的问题,发现优秀的程序员.