it-swarm.cn

如何认识一个好的程序员?

我们公司正在寻找新的程序员。问题出在这里-有很多开发人员在面试中看起来非常出色,似乎知道您需要的技术,并且拥有良好的工作背景,但是经过两个月的工作,您发现他们无法在其中工作。一个团队,编写一些代码会花费很长时间,而且结果并不理想。

那么,您是否使用任何形式化的测试(有吗?)?您如何认识一个好的程序员-一个好的人?有没有简单的“好”问题可以揭示未来的问题? ...或者仅仅是您对某人的“感觉”(即主要是您的经历),然后尝试他/她?

编辑:根据Manoj的回答, 此处 是与面试中的编码任务相关的问题。

133
gius

让他们谈论他们感兴趣的内容。我还没有遇到一个真正热衷于谈论编程但实际上却无法编写代码的开发人员。当然,它们很可能存在-您的面试也应该检查能力-但是热情是我经验的一个很好的指标。 (请注意,这与用流行语进行“交谈”不同。)

询问他们对自己喜欢的语言或平台不满意的地方。他们将如何解决问题?他们希望在下一版本中看到什么?他们有爱好项目吗?如果他们有博客,请阅读。检查他们的一般在线状态。

157
Jon Skeet

雇用好人是艰苦

为了使它变得更好,我已经犯了一些真正的错误。在头几次不信任之后,您开始更加信任自己的肠道。

我非常尊重 史蒂夫·耶格(Steve Yegge)的电话屏幕问题 ,并以此为基础采访了一些取得成功的人。
我还认为阅读后 Joel游击队面试指南 (现在是3.0版,比网络版和其他版本都要先进)使我在采访人方面变得更好。好)。

用面试标记的软件工程Stackexchangesome 上还有57个其他问题(截至2008年11月20日)看起来很相关,因此请检查一下。

84
Hamish Smith

一些想法:

  • 从几个不同的角度提出几个开放性问题:

    • 查看一些代码。确定了什么?技术错误,样式不一致,注释,算法,可维护性等...
    • 写一些代码。寻找过程,防弹,可读性等
    • 为小型系统创建高级设计。寻找对问题,方法,沟通,完整性,细节的理解。
    • 描述软件开发过程。寻找设计,协作,审查,测试,好/坏习惯和总体经验。
  • 选择任何东西-候选人声称知道的东西。提出一个简单的问题,然后根据答案,再问一个更详细的问题,并继续“挖掘”,直到达到候选人的知识极限为止。这使您有以下想法:

    • 诚实:他/他是否了解所声称的那么多?
    • 知识深度:他/她学习事物的程度如何?
    • 交流:他/他对您不熟悉的事情的解释程度如何?思维过程是否合乎逻辑?
    • 对压力大的情况的反应:他/他如何努力回答?他/她会伪造吗?不可避免的“我不知道”是容易还是困难?
  • 询问应聘者如何处理先前工作中的各种情况:团队合作,逾期项目,调试,。答案是肯定的还是否定的?多情?智能?傲慢?

我发现最好的候选人应该是热情,经验丰富,自信但有礼貌,最重要的是现在。您需要知道里面有人。 :-)

47
Adam Liss

要认识一位优秀的程序员,您必须成为一个优秀的程序员。这意味着您必须非常了解编程才能看透采访中所说的和完成的内容,并且您必须知道要问什么问题。

我在面试中看到候选人给出了错误的答案,但是他们的解释表明他们知道主题(因此可以很容易地通过搜索网络获得正确的答案)。要看到这一点,您必须非常清楚所要询问的主题。

另一件事是避免对有关细节的问题,这些问题很容易被谷歌搜索。这些问题仅显示应聘者对事物的记忆能力,而不是他或她是否真的具备您所寻找的知识和理解力。

我的建议是从了解很多编程知识并且具有良好人际交往能力的人那里获得帮助,以帮助面试。

编辑:我也写了关于采访的评论 这里

39
Eigir

请记住,编程能力并不是全部。您可能拥有世界上最好的程序员为您工作,但是如果他们讨厌与其他人一起工作,您将不会发现它们非常有用。

程序员的性格应该比大多数雇主似乎都高。在我目前的工作场所中,他们在雇用正确类型的人时非常小心。

人们通常可以学会做一个更好的程序员,人们通常不能学会做一个更好的人。

24
Doctor Jones

使它们成为代码。给出一个可以在4或5个小时内解决的问题,并检查代码的文档,编码风格,在实际开始编写代码之前他如何计划解决方案等。他不必实际解决问题。正如乔恩·斯基特(Jon Skeet)所述,让他们谈论编程,他们选择的语言以及类似的东西。您可以在一个优秀的程序员中重新表达自己的热情。询问他们关注多少个与编程相关的站点,例如stackoverflow。他们关注的博客可以很好地说明这一点。

16
Manoj

我喜欢热情的答案。我相信您必须对自己的工作充满热情,才能真正做到这一点。

一个优秀的程序员除了工作外(至少一次)。他/她喜欢解决编程问题。而且,当他/她在家里找不到可以满足特定需求的程序时,他通常会自己尝试解决。

但是有几种类型的程序员。

  • 您有喜欢记录的人。我个人不喜欢记录文件。但是记录所做的事情可能很重要。
  • 您有“黑客”。那些想解决一个复杂难题的人可能会找不到解决方案。只要获得所需工具,他们就可以解决“任何”问题。
  • 您有一些自学成程序员的人,因为市场很适合被雇用来编程。那些通常平庸,因为他们缺乏热情。
  • 您拥有精于沟通的人,他们“可以解决任何问题”,但是一旦他们找到工作,他们就会在其他所有人的心中为他们所解决的问题寻求帮助。

如果您发现“黑客”也能很好地记录文档并具有出色的沟通能力,那么我相信您已经中奖了。

哦,还有最后一件事。您可能不希望有领导才能的程序员,因为他只会使用编程来启动。这意味着您迟早会失去该资源。

我在雇用程序员时会问的一个问题是:“为什么要以程序员的身份教育自己?”。如果他们犹豫不决,那将是一次致命的礼物。

那是我的意见。

16
Wolf5

我的一个朋友正在一家公司工作,在他们的招聘过程中还有其他步骤:经过初步筛选和面试后,申请人必须“测试”几天。他告诉我,即使一个候选人拥有所需的一切技能和才能,他们也没有雇用他,因为他是 一个 不是一个好人。

7
Svante

仅凭工作面试就很难认出一个程序员。

决定某人是一名优秀程序员的一些事情是:

  • 能够团队合作
  • 编写可理解且可维护的良好代码
  • 能够了解新技术

因此,在面试中您可以找到一些小提示:

  • 候选人是否知道一种技术/编程语言,还是知道多种语言?如果他会说不同的语言,那么他似乎可以学习新事物,并且他可能会知道他目前喜欢的技术/语言的缺点。因此,除了您在公司中使用的技术外,还需要知识。
  • 询问他已经从事的项目,特别是业余项目和开源项目。业余项目向您展示,他喜欢编程,即使在业余时间也喜欢编程(这样可以提高他的技能)。在一个开源项目中,您可以查找他编写的代码。如果该项目涉及多个人,您可能会获得有关其团队技能的提示。在OS项目中,您可以查找mailing-list归档文件以了解更多信息。
6
Mnementh

您可以在面试中进行一些测试。

但是很多时候工作环境本身也存在问题。当然,在您的组织中可能并非如此,但是在软件行业中,技术债务过大是很常见的。然后,当您雇用新员工时,由于债务而对他们的好与坏没有太大帮助。最大限度地提高程序代码的可读性和可读性可帮助新手入门。

也有很多人可以合作,但是有时没有合作的方式。例如,如果所有人都是开发人员,那么他们应该做自己的工作。好吧,他们做到了。但是,您是否有一位建筑师来指导开发项目并举行会议等?普通的开发人员可能会觉得他们没有必要的权限来开始开会,他们可能会认为不时地打扰别人是不可行的。

彼此沟通不应成为最终目标。所需的交流越少越好,但是只有在可能的情况下才可以。如果您有建筑师,那么事情将变得不可能。交流的总量可能保持在良好水平,但是在相同的交流量下您可以获得更多结果。

3
Silvercode

首先,我从平常的面试开始,我认为非常重要的一点是看我面前的人是否有价值,并确定他/她的技能和知识。

之后,我使用了Java领域的一些技术,例如讨论一些原理,这些原理主要取自Effective Java。

在这个阶段,当我认为自己前面可能有一个好的程序员时,我给他一段代码来对其进行代码审查。我想看到的是,他可以查明代码的危险部分,提供一些改进的指针,发现多线程对性能的影响,并且他可以区分重要的注释和“趣味的注释”。所有这些都帮助我找到了一个更熟练的员工。

但最后我始终记得招聘是一种赌博...非常很难预期...

3
baba smith

我知道这不能解决您的要求,但我建议,在法律允许的情况下,始终应首先临时聘用(两个星期或一个月,具体取决于工作)。如果这个人值得他的盐,他不会反对,除了这对你们俩都是一种保障(您可以放开他,他可能最终会不喜欢这份工作而离开)。

2
Vinko Vrsalovic