当今的软件工程访谈经常涉及某种编码测试或编程练习,我认为这是一件很糟糕的事情。下面我说一下为什么。
懒惰的人
可以很容易地事先记住要求软件工程师执行特定任务,例如编写算法以生成阶乘(非常常见的一种)或对[单]链表进行排序,并且除了候选人的能力外,不提供任何对候选人技能的见解。死记硬背。您也可以询问字符" A"的ASCII码。
许多此类练习的详细解决方案可在各种参考资料中在线获得,在许多情况下,在包含针对所有常见采访编码问题的算法和特定程序语言实现的书中。
在一家公司工作时,我正在与一位同事讨论他们与一家大型对冲基金合作进行的详细面试过程。他们要求他掌握的所有技术知识均已从广泛可用的面试题和答案书中认真记住,当前员工已将其作为所有面试题的来源。幸运的是,他是一名熟练的工程师,但同意接受这一坦率单调且平常的锻炼以确保姿势。他不应该这样做-不仅浪费了他宝贵的时间,而且也没有在确定他的能力方面给招聘公司任何东西。一年后,他离开了,无论如何,他们对技术水平低下感到厌倦。雇用和持续无效的项目管理实践的标准…
记忆的使用
用特定的编程语言对算法进行编码也具有相同的理由。没有某种语法检查辅助工具(例如编辑器的内置代码完成功能),没有参考一些技术文档或没有复制预先实现的解决方案,在现实世界中工作的软件工程师不会编写一段代码。适用时。重新发明轮子没有意义。
我敢打赌,运行当今世界上许多系统的代码起源于Stack Overflow。
实际上,使用特定编程语言的语法来自使用和熟悉。面试官可能认为测试候选人的特定语言的语法细微程度是他们理解程度的衡量标准,例如,我可以断言,尽管我使用C语言已有30年了,但我仍会定期语法错误。
实际上,随着我的软件工程事业的发展以及我对自己感兴趣的语言的熟悉,我经常对C和C ++或Objective-C等语法上的细微差别感到困惑。这并不是因为我是一位糟糕的软件工程师(尽管有些人可能会不同意……),而是因为只有太多的知识可以让您牢牢记住,并且可以随时回想起。
优秀的软件工程师常常不知道特定问题的答案,但一定会知道在哪里可以找到答案。也许考虑问一个最佳地点以找到诸如面试问题之类的信息?
常见任务
我在前面简要谈到的一件事是不重新发明轮子。例如,如果您使用C语言工作,并且需要一个串行端口例程,那么除非情况特别需要,否则您不必从头开始重写它。也许您需要一个JSON解析器,这是一个非常普遍的要求-除非您是在资源有限的嵌入式板上,对地静止轨道上的卫星上或在Malbolg中进行编码,否则也许只应该从库中提取预先编写的代码即可。它可能已经使用了很长时间,已经过全面测试,并且具有详细(正确)的文档。固体。
在现代软件工程中,不太可能遇到一项常见任务,即该任务尚未在预先编写的库中实现自动化,或者其实现无法以算法形式广泛使用。
如果您像我一样,并且在游戏中主要是由于对主题的热爱,那么您可能会积极寻找那些您正在实施以前实现的角色的角色。寻找陌生的,新的世界,新的生活,新的文明……
实际上,在不远的将来,软件工程师的概念已被代码考古学家比作了不止一次,他们主要重用现有代码,而花费较少的时间来设计和编码新的和新颖的算法。
讨论讨论讨论
我完全赞成找出正在面试的人是否"知道他们的东西",但是我认为使用上述任何方法都是毫无价值的。照原样说。
例如,关于现代软件工程中使用的编码范例的简单讨论,是特定语言是否是特定实现的理想选择,还是特定软件工程方法论(我在看着您,敏捷)与之相关的是更多有意义且令人发指的话题。
引导讨论突出一般领域,看看候选人对新问题有什么见识,也许还有其他新颖的方法可以解决老问题。他们如何看待事物的发展,如何开始解决问题。保持开放状态,远离细节和细节。
关键是讨论。确定价值不仅仅只是在复选框上打勾,而且不断让我感到惊讶的是,许多被认为是"崛起"和"领域领导者"的公司仍然落伍于过时,单调且完全可预测的雇用方式,在衡量方面几乎没有价值实际技术敏锐度。
人们常说,受访者应与公司面试一样多地采访公司。我完全支持这个。
接受具有一系列确切技术问题的人员的采访几乎总是一个危险信号,尤其是当他们不想延长任何一点的讨论时。它通常表明,面试官可能无法完全理解他们的要求,并且任何与他们的脚本所写内容不完全匹配的答案都将被归类为错误。
底线
一些公司已经改变为更好的方法,而其他公司则远远没有达到目标。在这里,我敦促软件工程师同仁不要与那些遵循过时的招聘惯例并坚持编程测试和练习的公司合作,尤其是长时间的测试和练习!
我听说过一些公司要求在候选人的时间上完成项目的故事,通常需要几天的时间。
其他人则针对特定语言进行通用的"能力测试",有多种选择,其中在有限的分配时间内出现一团大脑迷雾就等于游戏结束了!
如果您是游戏新手,那么也许您无法拒绝采访,我完全理解这一点,但是一定要把它看作是一种学习经验。进行动作,获得经验,尽可能多地学习,如果工作确实令人失望,那就继续前进。随着您的前进,您的信心会随着您的知识和经验而增长。毕竟,公司从您那里受益,所以您也必须从公司中同样受益。
如果你像我一样是年纪较大的人,那么请雇用公司-跟我说话。我到过各地,看到过的事情和做过的事情,所有的资格都在墙上和简历上,我很讨厌被一些通用的招聘渠道吸引,并反复测试我的能力。
如果您认为自己是一个体面的雇主,并且不明白为什么看似优秀的候选人会继续退出,那么您应该对自己的雇用作法有个很长的了解。
原文链接:
https://medium.com/swlh/why-you-should-never-consent-to-a-coding-test-in-an-interview-8e22f5078c7f