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

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

编辑:根据Manoj的回答,这是与求职面试中的编码任务有关的问题。

评论

<笑话>为了认识一个好的程序员,我总是使用The Programmers Dress Code作为程序员的尺码。 ;-)

我长约6英尺,重185磅,剃光头和山羊胡子。我在白色保暖服上穿Chuck Taylors和一件蓝色T恤。请轻柔地投票给我-我确实回答了问题。 :)

相关或重复的内容:programmers.stackexchange.com/questions/4614/…

这是该主题的另一种观点-如何采访程序员

在2008年被问到时,这个问题非常适合该网站。 5年。五年后,Prog.SE变成了SO2,即副本。

#1 楼

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

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

评论


好主意-尤其是爱好项目以及他们喜欢的语言存在的问题对我来说真的很不错。它应该更多地揭示它们与编程的关系。博客也是一个好主意。不幸的是,通常他们没有博客:-(。谢谢...

– Gius
08年11月20日在9:41

激情不一定会转化为专业精神或团队合作精神。他们可能只想编码很酷/很有趣的东西,而不是需要编码的东西。

–普雷斯顿
08年11月24日在1:50

@普雷斯顿:虽然从理论上讲这确实是正确的,但我还没有遇到任何热情的人,他们也都不乐意为之工作。我遇到了prima donna编码人员,他们认为他们比这种事情要重要,但是他们通常并不热情。无论如何,测试专业水平是非常困难的。

–乔恩·斯基特(Jon Skeet)
08年11月24日在7:34

检查他们的徽章计数

– bobobobo
2010-4-21在19:39

#2 楼

雇用好人很难。

我需要一些真正的错误才能变得更好。在头几次不信任之后,您开始更加信任自己的肠道。

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

还有57个其他问题(截至20/11 /年) 2008年)上的软件工程Stackexchange标有面试标签,其中有些看起来非常相关,因此请查看。

评论


雇用好人是NP-hard。 :)

–最终原因
16年8月4日在16:19

电话屏幕上的问题开始时很好,但是随后越来越多的问题变得荒谬。我不认为一个优秀的程序员必须知道2 ^ 16。底部的快速通道版本只是一个拙劣的模仿。

–彼得
16-11-21在18:34

SO链接似乎已损坏(无结果或404)。

– Stijn Geukens
17年12月20日在12:13



@StijnGeukens,看来该标记已迁移到软件工程。我已经更新了链接。

–汉米丝·史密斯(Hamish Smith)
18年1月3日在18:29

#3 楼

一些想法:



从几个不同的角度询问一些开放性问题:




回顾一些代码。确定了什么?技术错误,样式不一致,注释,算法,可维护性等...


编写一些代码。寻找过程,防弹,可读性等。


为小型系统创建高级设计。寻找对问题,方法,沟通,完整性,细节的理解。


描述软件开发过程。寻找设计,协作,审查,测试,好/坏习惯和总体经验。




选择任何东西—候选人声称很了解。提出一个简单的问题,然后根据答案,再问一个更详细的问题,并继续“挖掘”,直到达到候选人的知识极限为止。这使您有了以下想法:


诚实:他/他是否了解所声称的那么多?
知识深度:他/他学习东西的程度如何?
沟通:他/她对您不熟悉的事情的解释程度如何?思考过程是否合乎逻辑?
对压力大的情况的反应:他/他努力回答的努力程度如何?他/她是否会伪造?难免的“我不知道”是容易的还是困难的?


问问应聘者如何处理以前的工作中的各种情况:团队合作,逾期项目,调试等。是答案吗?正面还是负面?多情?智能?傲慢自大?

我发现最好的候选人应该是热情,老练,自信但有礼貌并且最重要的是当下。您需要知道里面有人。 :-)

评论


我记得我第一次编程采访时曾被要求审查一些印刷代码。顶部有一些注释解释了代码的作用。我通过阅读代码验证了这一点,然后基本上逐字阅读了注释,他们说“很好!”我说:“是的,它几乎在评论栏中说了这一点。”他们很尴尬。

–达斯汀
13年5月20日在19:48

@Dustin IMO他们只是粗心大意地将评论保留在应考者应检查的代码中。根据评论内容,这基本上给了他们一个免费的答案或困惑。

–cst1992
17年11月13日在13:08

#4 楼

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

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

另一件事是避免对容易被谷歌搜索的细节提出疑问。这些问题仅显示候选人对事情的记忆有多好,而不是他或她是否真的有您所寻找的知识和理解。我的建议是从认识很多的人那里获得帮助。编程知识,并具有良好的人际交往能力,可以帮助面试。

编辑:我也在这里写了有关面试的评论。

评论


您对Google搜寻完全是正确的-优秀的程序员不必了解所有内容,但他应该能够迅速找到答案。

– Gius
08年11月20日在9:47

“知道很多编程知识并具有良好的人际交往能力的人”……这就是问题所在-找到一个人并不容易。通常他们只有一种技能。这就是为什么我会尽力改善两个分支机构的原因。

– Gius
08年11月20日在9:48

具有出色的人际交往能力通常与抽象思想家冲突。不能成为一个抽象的思想家通常会与成为一个好的程序员发生冲突。

– Tomalak
08年11月20日在9:51

Gius:如果幸运的话,您会发现程序员了解人类是生物计算机,因此对我们的工作方式/思维方式感兴趣。那些人通常也发展了良好的人际交往能力,因为他们也有兴趣在该领域提高自己。

–艾吉尔
08年11月20日在10:06

艾吉尔:我同意。但是正如这里已经提到的某人-如果找到某人,您将中奖;-)。希望我们会很幸运。

– Gius
08年11月20日在10:14

#5 楼

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

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

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

评论


如果他们不屑与他人合作,您怎么能称他们为“世界上最好的程序员”?编程当然不仅仅是与编译器对话并分块代码,程序员/软件开发人员的大多数任务确实需要一定程度的合作。

–克里斯托弗·克雷齐格(Christopher Creutzig)
2011年4月15日在11:23

我明白您的意思,但是在这种情况下,“编程”仅用于编码,否则我将使用术语“软件开发人员”。术语“程序员”和“软件开发者”不是同义词。

–琼斯医生
11年4月15日在11:42

不,实际上,许多人无法学会成为更好的程序员。坦率地说,如果他们有5-10年的经验,我希望他们已经知道如何做自己的工作。这不是问题的答案;你只是在说“通过不关心他们是否是好程序员来识别好程序员”

– Benubird
15年7月3日在8:13

@Benubird我的观点是人际交往能力比原始编程人才更重要,尤其是在团队合作中。我不是在提倡雇用无法完成工作的人。如果他们在您的团队中表现不佳,则不值得雇用“摇滚明星”程序员。这不值得摩擦和麻烦。

–琼斯医生
2015年7月3日,11:35

@DoctorJones,我同意你的观点;你一点都没错。仅仅是您所给出的答案,而不是对“如何识别一个好的程序员?”这个问题的答案。

– Benubird
15年7月6日在9:34

#6 楼

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

评论


我喜欢实际上给他们一个编码任务的想法(可以在面试之前完成),然后将代码用作面试的主题。让他们解释为什么选择不同的解决方案,依此类推...

–艾吉尔
08年11月20日在9:48

通常,关于编码任务的想法非常好。但是,恐怕要创建一个真正能够显示其中内容的任务非常困难-这是另一个很长一段时间(但非常令人反感!)讨论的好话题。 ...我们应该在这里问一个问题吗? ;-)

– Gius
08年11月20日在9:56

他们最喜欢的博客列表将是一个很好的指示!

– Gius
08年11月20日在9:58

我接受了编码采访。面试官坚持要求我与他讨论解决方案。我会提出一个想法,他会提出可能失败的方法。这样,他了解了我如何解决问题。这是我有史以来最艰难,最公平的采访。

–e.James
08年11月20日10:00

@gius-我想你应该问这个问题。

– Manoj
08年11月20日在10:25

#7 楼

我喜欢热情的答案。我相信您必须对所从事的工作充满热情,才能真正擅长于此。

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

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


您有喜欢记录的人。我个人不喜欢
记录文档。但是记录所做的事情可能很重要。
您拥有“黑客”。那些想解决一个复杂难题的人可能会找不到解决方案。只要他们拥有所需的工具,他们就可以解决“任何”问题。
您拥有那些自学成为程序员的人,仅仅因为市场有利于雇用编程人员。这些人通常都很平庸,因为他们缺乏热情。

如果您能找到文档也很好并且具有出色沟通技巧的“黑客”,我相信您已经中奖了。

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

我在雇用程序员时会问的一个问题是:“为什么要教育自己成为一名程序员?”。
那会如果他们犹豫在那里,那就成为死人的礼物。

那是我的看法。

评论


启发性的问题-“您为什么要以程序员的身份接受教育?”

– Gius
08年11月20日在10:08

我们迟早会失去所有资源。只有岩石是永远的。

–卡尔·曼纳斯特(Carl Manaster)
09年4月21日在14:31

有点短视。 “ Schlubladendenken”

–汤姆·谢弗(Tom Schaefer)
2009年6月26日14:36

如果不是因为“您可能不希望程序员具有领导者的抱负”,我将对此表示赞成。想要承担责任的员工至关重要,您应该找到在组织中推进职责的方法。

–丹尼·瓦罗德(Danny Varod)
2012年6月27日17:03

您对“黑客”的定义与我不同。对我来说,“黑客”是指尽可能快地“黑客”事物直到获得某种结果的人,但是由于他们没有遵循一个最佳实践,因此留下了毁灭和恐怖的痕迹。 “黑客”是不专业的。

– David Masters
2014年3月11日20:54

#8 楼

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

评论


这是一个好主意,我希望看到它是标准做法。作为因不适合公司文化或由于对技能水平的误判而被解雇的人,我很想先对水进行测试。

– DarenW
2010-09-10 23:08

问题是,如果某人已经找到工作,他们几乎就不能抽出一周的时间去另一家公司工作,只是为了确定自己是否真的找到了工作。

–小er
2011年1月5日14:58

@Cercerilla对!甚至连找时间面试也很难,更不用说为他们工作一周的练习了。

– eaglei22
18年11月29日在16:45

#9 楼

仅仅基于工作面试就很难识别出一个程序员。

某些决定某人是一个好的程序员的事情是:


能够工作在团队中
编写可理解且可维护的良好代码
能够学习新技术

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


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


#10 楼

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

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

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

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

评论


我喜欢这样的想法:不仅查看员工,而且查看您自己的组织和内部流程。

– Gius
08年11月20日10:00

#11 楼

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

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

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

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

#12 楼

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

评论


您是完全正确的,但是如果他对您不利,您仍然会损失一两个飞蛾,他的薪水以及将他纳入您项目的人们的工作。因此最好避免这种情况。

– Gius
08年11月20日在9:51

问题是优秀的程序员可能还有其他工作机会,如果您在一开始只为他们提供临时工作,他们可以选择其他人...

– Rexxar
08年11月20日在10:29

@Rexxar:如果他们不喜欢,他们仍然会离开。 IMO会更诚实,更直接地提供它。至少对我来说,这将是一个加号,而不是一个减号(鉴于这是一份短期合同,到最后它要么成为永久合同,要么告别)。

– Vinko Vrsalovic
08年11月20日在12:08

我需要继续支付账单,我永远都不会考虑只工作一个月并放弃一份永久性工作。如果您失业或有丰富的配偶,这可能会起作用。否则,您会失去很多优秀的候选人,因为他们无法承担您没有对他们撒谎成为永久性的机会。

–HLGEM
2012年6月27日22:31

“如果这个人值得他的盐,他不会反对”-好吧,这里的开发人员会说“操蛋”并找到更好的工作。

– gnasher729
16年11月21日在20:26