面试程序员职位时遇到的问题

你好!



我非常喜欢您的工作,您的公司以及您的企业文化理想,因此我决定为您提供谦虚的候选人资格。这是我的超级简历,给我发送测试,我们也可以聊一两个小时,以便我们大致了解我们是否想要彼此。

前言



我从事程序员已有很长时间了。碰巧我碰巧碰到了“路障”的两面:我通过了至少一百次面试,更经常遭到拒绝,并且至少进行了五十次面试,经常被拒绝。



通常我会接受两个人的采访:一个经理/老板和一个程序员/技术人员。更少-一个,甚至更少-三个或更多。通常,他们会从完全不同的领域提出问题,所以让我们有条件地将面试分为测试任务,检查软技能和检查技术技能。



测试



如果我不验证解决方案是否可以正常工作并完成任务,则不太可能将解决方案发送回测试任务。因此,另一位程序员基本上只收到有效的解决方案,以供验证,他必须选择自己认为合适的解决方案。与团队中的许多程序员一起工作后,我对他们的第一手资料了如指掌对他人代码的强烈不宽容,到别人的思路。因此,即使为他们提供了比他们脑子里成熟的解决方案更好的解决方案,也冒着被误解和拒绝的风险。同时,当被要求描述原因时,您可能会得到一个完全左派的废话(一旦他们责备我,我将任务发送到了存档中,并且没有将其发布在我的github上,当然,我会弄脏我的空间)和完全忽略。因此,执行测试任务实际上是“请您不了解的另一位技术人员”的游戏,即很大的随机性。



顺便说一下,通过测试任务和面试的顺序,您可以了解公司中经理和程序员之间的关系。如果要求您在面试之前解决测试任务,则经理认为自己比下属更忙,尝试通过委派基本检查来最大程度地节省时间。如果面试后要求您解决测试任务,则意味着公司中的程序员目前工作量很大,以至于他们甚至不会分散精力来检查随机人员的测试任务。如果访谈是分阶段进行的,首先是与某些人进行交流,然后是与其他人进行交流,那么您可以建立更多的关系。希望您掌握了本质。



检查软技能



“向我们介绍你自己?” -一个使具有深厚技术思维的人陷入昏迷的问题(在下文中,我们将其称为构造函数)。设计师在稍微记忆一下之后就可以抛弃他的名字,年龄,身高,体重,国籍和眼睛的颜色,但与此同时,他将不了解这一切与案件有关,因为他来出售自己的技术而不是自己。 “你到底想了解我什么?” -我通常会回答并看到老板眼中的失望,老板问问题时很少喜欢他,因为现在球在他身边,他必须思考。如果我有不同的想法,那么,当然,我会把他心爱的人预先准备好的美味故事丢给他,上面有关于自己酷,酷,最重要的是,比我其他人更好的细节。但是如果我换个想法,我几乎不会成为程序员。因此,在回答“你想要什么并告诉我”的答案时,我开始愚蠢地列出我的工作地点,参​​与的项目,使用的技术以及导致我下一个错误的原因,因为所有这些都已写在简历中,除了无聊之外不会引起其他任何问题。毕竟,言语无法传达我头脑中的体积,重量和重要性。



在此我做一个假设:假设程序员不应该具有强大的软技能。



让我们从相反的角度出发:假设程序员必须具备强大的软技能,那么为什么我们需要经理呢?如果我可以去自由职业者交流会并找到自己的顾客,那为什么还需要一家公司呢?福特先生是上个世纪的伟大发明家,他发明了输送机,这是一种非常高效的产品,显然,并不是每个人都学会使用。在某些公司中,他们削减了这个技巧,并在程序员和客户(经理)之间插入了特殊的链接,他们实际上是从“人”到“程序员”的翻译。经理的任务是与程序员和客户达成协议,程序员的任务是“同意”代码。期望程序员拥有更多的高级技能来进行谈判和沟通,因此您切断了这些程序员的工作由于缺乏这些软技能,他们释放了足够的头部空间来进一步提高其开发技能。



假设我们被一家了解此想法的公司采访。尽管如此,她仍然想评估总体的社交能力,只是为了淘汰那些完全没有团队合作能力的人。在1-2个小时的交谈中如何有效地做到这一点?没有。我没有在面试中看到一个人会表现出举止,不尊重或不恰当地表现自己,这是很自然的,因为在面试中我们都尽可能开放,友好和充分。因此,在经历了成千上万的受访者之后,访问者开始更多地关注其他细节:该人的着装,他的发型,气味,做鬼脸,表现出的情感,使用的手势,注视的时间,注视的时间,经常看着别处,他回答问题的速度。实际上,他只是凭直觉就形成了自己的最终“专家”决定。毕竟,他面临的任务是“目前选择最佳”,而不是“从不合适的人中淘汰合适的人”,因此他不能反对这一任务。



对反应速度的评估是一个单独的错误。即时响应者甚至根本没有时间思考。相反,那些对答案放慢速度的人会陷入思维的殿堂,仔细权衡所有可能的选择,直到他们觉得多思考是适当的。即使他们立即有合适的答案。



测试技术技能



看来,技术知识比沟通能力更重要几个数量级,但实际上,公司很少安排面试使技术部分优于社交领域。当然,也有例外,一旦我有机会与一个非常友好的技术人员进行了4个小时的交谈,我从中学到了很多有趣但无用的技巧。



那么,真的有可能在1-2个小时的交谈中对一个人进行足够的评估以做出正确的决定吗?当然不是。这里最重要的错误-与上一部分完全相同-是寻找最佳的任务,而不是从不合适的错误中剔除正确的错误。结果,面试从对知识的搜索转变为对空白的搜索,因为面试者发现的空白越多,候选人越不适合,并且加减计数的虚拟点就越容易。另一个错误是,我们检查候选人是否只有我们自己知道的知识,而完全忽略了我们不知道的知识,这在公司中比我的另一本更有用。



在发生的事情中,特别令人不快的是,检查变成了考试,不是考生的编程能力,而是考验他的解释,传达,教导的能力,也就是说,实际上是在不同平面上进行相同的沟通技巧测试。例如,我可以快速有效地设计一个规范化的数据库结构或对一个现有的数据库结构进行规范化,但是我完全无法用语言向他人解释如何做到这一点,因为当我进行规范化时,我不使用俄语单词,而是使用我没有获得的内部知识。在大学里成双成对,但有“战斗”经验。并非每个人都了解表演者和老师之间的这种技能差异。另一个典型的例子是对设计模式的困惑。也许我知道你问我的模式,但在我看来,它的名称有所不同,其实现方式可能略有不同。



特别是我不喜欢检查的是属于Google而不是我的小细节。冒泡排序函数中负责的第三个参数是什么?将队列分成两个堆栈。如何做出这样的选择而不是这样呢?当然,最重要的是这些细节,程序员可以节省时间,公司也可以节省金钱。但是,通过问这样的问题,您将永远学不到的是应试者对这种知识的了解,这种低价值的知识。也许对异步性有很深的理解,或者可能是在聚会上与女孩交往的技巧,但是有人问了这个问题,花了时间,下一步的面试接近尾声,您几乎没有什么意义。



我什至不想谈论脑海中用纸来编译代码的要求。您是在寻找程序员还是编译器/解释器来担任职位?在日常工作例程中,程序员习惯于依赖于环境,从而最大限度地利用其功能,并在可能的情况下节省了他的“处理器”时间。因此,毫不奇怪的是,此类任务执行缓慢且经常不正确。取而代之的是,最好问问他使用什么媒体,以及他对它们的喜好,也许您会发现一些新鲜有趣的东西。



有出路吗?



抱歉,如果您开始节省时间,那么您将继续跳过必要的框架以追求最佳效果。我只能提请您注意一个事实,那就是好大脑几乎一直在寻找比现在更好的地方,因此失去“最好”的大脑就像“找到”一样容易。



如果您有足够的预算,则可以尝试以下技巧:以每个人一半的费用为每个人提供1个试用月的工作,然后确定工作结果。可以通过将任务从寻找最好的工作转变为寻找合适的工作来将其与初步面试相结合,但是请记住,这种面试实际上是没有用的,只花时间。



All Articles