如何认识一个好的程序员?[关闭]


131

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

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

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


3
<笑话>为了认识一位优秀的程序员,我总是使用The Programmers Dress Code作为程序员的尺码。;-) </ joke>
挪威语

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


1
这是该主题的另一种观点- 如何面试程序员

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

Answers:


157

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

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


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

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

22
@普雷斯顿:虽然理论上确实是这样,但我还没有遇到任何热情的人,他们也都不乐意为之工作。我遇到了prima donna编码人员,他们认为他们胜过那种事情,但是他们通常并不热情。无论如何,对专业性进行测试是非常困难的……
乔恩·斯凯特

36
检查其徽章计数

83

雇用好人很难

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

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

还有57个其他问题(截至20/11/2008)标记采访软件工程Stackexchange一些人看起来非常相关的,所以检查出的那些。


2
雇用好人是NP-hard。:)
最终原因是

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

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

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

47

一些想法:

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

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

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

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


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

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

39

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

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

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

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

编辑:我也在这里发表了有关采访的评论。


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

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

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

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

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

23

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

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

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


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

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

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

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

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

16

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


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

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

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

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

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

16

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

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

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

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

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

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

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

那是我的意见。


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

5
我们迟早会失去所有资源。只有岩石是永远的。
Carl Manaster 09年

1
有点短视。“ Schlubladendenken”

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

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

7

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


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

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

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

6

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

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

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

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

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

3

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

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

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

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


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

3

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

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

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

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


2

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


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

3
问题在于,好的程序员可能还会提供其他工作机会,如果您在一开始只为他们提供临时工作,他们可以选择其他人……

@Rexxar:如果他们不喜欢,他们仍然会离开。以这种方式提供它只是更加诚实和前瞻性,IMO。至少对我来说,这将是一个加号,而不是一个减号(鉴于这是一份临时合同,到最后它会永久存在或告别)。
Vinko Vrsalovic

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

4
“如果这个人值得他的盐,他不会反对”-好吧,这里的开发人员会说“操蛋”并找到更好的工作。
gnasher729
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.