为什么软件工程师的面试难度特别大(与研究面试相比)?[关闭]


39

首先,我的一些背景。我拥有CS博士学位,并且在您非常了解的甚大型公司中担任过软件工程师和研发研究科学家的工作。我最近换了工作并接受了两种职位的面试(就像我过去所做的那样)。

我的观察:SW工程师的求职面试比CS研究员的求职面试要困难得多,但是研究员的工作报酬更高,更具竞争力,更有回报,更有趣并且具有更高的发展潜力。

这是研究人员的典型采访循环:

  • 通过电话采访了解我的研究是否与实验室的研究保持一致
  • 面对面:在一个小时内介绍我的最新研究成果(可能代表9个月的工作时间),并回答听众的问题
  • 与约5位研究人员进行的一对一面谈,他们向我询问有关我的工作/出版物/专利的非常合理的问题,包括:技术问题,我的工作适合相关工作以及如何将我的工作扩展到新领域

这是软件工程师的典型面试循环:

  • 在电话采访中,我被问到算法问题,也许还要做一些编码。很标准。
  • 在白板上进行的面试,他们在深奥的C ++细节上钻出F ***(例如,多态虚拟函数调用的工作方式),算法(使全对-最短路径算法可用于1B顶点) ,系统设计(设计数据库负载平衡器)等。此过程持续进行六到七次采访。荒谬。

为什么有人愿意忍受这个呢?问C ++琐事或编写代码证明自己的目的是什么?为什么不让SE面试更像研究人员面试,您可以在其中谈论您所做的事情?

物理,化学,土木工程,机械工程等其他领域的技术面试如何?


12
我会大胆猜测,说您在Google面试过吗?
Pemdas

2
@ Ethel:如果您在glassdoor.com上查看,人们在这里匿名发布薪水,您会发现研究员职位的年薪比同等的SW工程师(相同的位置,相同的领域)高出大约10,000至20,000美元。有趣的是,我知道我的薪水比我同时毕业于我的研究生院的CS MS学位的其他朋友大约每年多$ 25K。不只是工资 我已经看到,与没有博士学位的人相比,博士学位具有更高的职业发展轨迹。我没有直接的证据,但是我已经看到博士学位更容易被聘为CTO / VP级别。
stackoverflowuser2010

3
这很疯狂,但是显然并没有扩展到“真正的”工程专业。我知道很多土木工程师,他们对我告诉我的一些过去的采访感到震惊...许多人只说了你的所作所为:“你为什么要忍受呢?”
红色污垢的

3
@el热熔器-取决于雇主。我曾经接受过的电气工程访谈都要求我查看PLC代码,编写PLC代码和/或对电气图进行某些操作。关于一个问题,第一个问题是,“欧姆定律是什么?” 这相当于fizzbuzz测试...如果您只用了4年的电气工程学,而您又做不到,那访谈就结束了。
斯科特·惠特洛克

1
斯科特:“如果您只用了4年的电气工程学,而您又做不到,那访谈就结束了。” 我担心我可能因为笑或被侮辱而失败了。我想来自研究环境的您将基本能力视为理所当然。
欧米茄半人马座

Answers:


45

确定您在技术上是否足够胜任这项研究是相对容易的-您拥有招聘经理可以阅读的出版物,而这些出版物可能暗示了其他可以与他们交谈的人可以检查您。

另一方面,软件工程是一门学科,到处都是无用的空间浪费,因此需要做大量的尽职调查,以确保您雇用的人实际上可以编写您打算雇用他编写的代码。


2
幸运的是,像github和bitbucket这样的东西使查看该人的工作变得更加容易。它可以减轻(或大大减少)询问尽职调查问题的需要。
helloandre

3
恰到好处。要将商品与想要的程序员区分开来是很难的。即使显示代码,也要花很多时间阅读和理解它,才能判断作者的水平。研究论文OTOH是为读者而写的,最多只需要几个小时就能真正理解其中的内容,通常几分钟之内就可以识别出不好的内容。
哈维尔

3
要显示的代码是一个把戏-您如何知道Joe Interviewee实际上编写了该代码,却没有让他实际编写代码?
Wyatt Barnett'2

我已经发表了一篇文章,并出版了一本书。通常情况下,技术的屏幕得到短路,因为我的知识是有据可查的,他们想确保我的是麦克-布朗
迈克尔·布朗

1
技术经理在聘请真正精明和经验丰富的专业人员方面也存在着非常真正的恐惧-那些可能比他们了解的要好得多的人,因此可能会赞成和反对一种解决方案,而不仅仅是代码编写机器人。最终,雇用可以在一分钟内扭转链接列表的人员而不是雇用真正的聪明的工程师,这是所有从该产品中获利的人的损失。正如Bjarne Stroustrup所说,“一个将其程序员视为傻瓜的组织很快就会拥有愿意并且能够像傻瓜那样行事的程序员。”
Leo Heinsaar

30

在这里走出去。

作为具有博士学位的研究人员,您已经向多家知名组织证明了您作为研究人员的价值和最低素质。您成功地在同行面前捍卫了一篇论文,并说服至少一位同行审阅了出版物来发表您的作品。

另一方面,软件开发没有资格标准。人们通常会夸大其知识库。结果,软件开发面试必须完成博士学位辩护和同行评审在学术界所做的所有工作。它们使您证明自己确实知道自己在说什么。


17

考虑一下。

如果我试图申请这份CS研究人员的工作,我的简历/简历将不会得到关注。首先,我不会接受采访。我会收到一封标准的“无高级学位”信,告诉我我什至没有资格看我的简历。

我的问题是:“为什么要获得博士学位如此困难?” 而且“为什么我需要博士学位才​​能成为CS研究人员?” “为什么有这么多障碍和障碍?”

为什么有人愿意忍受这个呢?

完成所有课程工作并在期刊和会议上发表研究成果有什么意义?为什么我不能仅仅进行研究并获得比工程学更高的报酬?

为什么要依靠研究生院和出版物来建立证书?为什么不使研究访谈更像SE访谈,而这一切都取决于您在访谈中可以立即回忆起什么呢?


我有点明白你在说什么。合适的面试应该适合合适的工作吗?这是正确的解释吗?
stackoverflowuser2010

5
@ stackoverflowuser2010:不。我只是在抱怨学术界远比软件工程界要难得多。您以SE的身份接受了采访。我什至无法进入学术界。您的视角严重扭曲,看不到差异。学术界要强得多。
S.Lott

6

好吧,我有一个理论。研究通常由赠款支付,因此现金供应量很高。他们有一大笔钱可以花,他们只需要找人花钱。不管您实际上在该职位上是否完成任何工作,公司/机构都不会记录净亏损,因为无论如何它只是一个已记账的费用。雇用错误人员的风险很小。最坏的情况是,它们会丢弃您所做的一切。

另一方面,现有产品的成败取决于日常开发人员。特别是如果您从事产品开发,那么您就是公司的利润中心。好的或坏的开发人员所产生的巨大影响远远超出其薪水成本。不良的显影剂实际上会造成损坏。他们可以挫败团队,推出产品等。聘请一名糟糕的软件工程师的后果要高得多。


4
+1实际上,花在研究上的现金可以通过发表的论文来证明是合理的,因此,如果候选人能列出过去的那些清单,那么他就有可能产生更多的现金,这很可能会使碰巧是检查研究经费的支出。
彼得Török

@PéterTörök:是的!然后,提供赠款的基金需要提交报告,而他们关注的关键是已发表论文的数量。
Sharptooth

5

我们公司还“提出很多难题”,我将解释原因。我们确实在乎您是否真的知道虚拟函数调用是如何完成的,但不是因为它对于您将要完成的工作非常重要。

相反,我们确实在乎,因为我们需要知道您能以多快的速度学习基础知识。您声称拥有X年的经验?好的,我们会提出一些棘手的问题,以查找您是否具备扎实的知识。

您不知道如何在后台进行虚拟函数调用,但是您了解有关概要分析和优化的所有知识吗?太好了,我们很可能会雇用您-您已经在一个领域中获得了扎实的知识,因此您一定会在另一个领域中获得扎实的知识。

您声称拥有X年的“开发,调试和修复C ++代码”的经验,并且不能用简单的语言解释指针如何指向对象?抱歉,我们不能雇用您-如果您不能这样做,当我们需要做出复杂的技术决策时,您将如何解释更棘手的问题?


这是公平的,但是您在进行技术成分开发或专注于给定领域时是否投放了相当广泛的网络?
rjzii 2011年

@Rob Z:我们尝试提出有关C ++的非常简单的问题-主要是关于指针和递归的问题,我们提供了有关五行格式正确的代码的摘录,并要求提供有关其作用和方式的详细信息。当然,在虚拟继承的情况下,我们绝对不会询问多个虚拟继承和基类初始化的顺序。
sharptooth 2011年

为什么虚拟函数问题如此受欢迎?看来有时候就是这样一了要研究...
JE队列

@Xepoch:我想是因为它们非常简单,并且它们的内部工作知识很好地表明了您是否关心内部发生的事情还是只是将代码行粘贴在一起。
Sharptooth

我觉得我的事业很幸运。我很少见过剪切和粘贴编码器。我知道不好的做法,编码器(包括我自己),但它至少是自己设计的:)
JE队列

5

简短的回答:市场上有很多人声称了解编程,但不能编程。

旁注:令我惊讶的是,没有人张贴FizzBu​​zz文章的链接。


的确如此,但是您可以很快地判断出有人是否可以基于一两个白板问题进行编程。白板问题与询问某些采访中出现的各种教科书问题并不完全相同。
rjzii 2011年

3

我要走的是一条不同的道路,那就是问题可能不算太大,以至于软件工程面试本来就比较困难,而是不同部门正在寻找以面试风格表现出不同的东西。

我已经采访了相当广泛的行业(例如,初创公司,小型公司,大型公司,内部IT部门,软件公司,研究组织),而且他们都有不同的采访方式,而我发现通常这种采访方式倾向于遵循以下模式:

  • 初创企业往往比知道自己可以开始编写代码被关注,现在,可以处理一个快节奏的环境。因此,他们倾向于关心您对自己的知识了解多少,因为他们似乎不想看到您花费大量时间查找他们认为是“核心”知识的内容。如果您希望他们知道某些事情,那么在这种环境中承认您不知道某些事情可能不是一件好事。
  • 小型公司往往会在了解方面了解与初创企业相同的事物,但并不关心您如何处理快速节奏的环境(取决于工作),而不会关心您具有什么样的软技能带来以及您将如何适应公司。
  • 大型公司和内部IT部门似乎更关心确保您具有给定的技术知识水平,但是如果您不了解所有事情,则不必担心,因为他们预计将会有一些知识花费时间让您对公司的期望进行培训。因此,在这种环境中,承认您不了解某些东西但愿意学习和学习可以被视为一种好处。
  • 在研究环境中(即,根据我的经验,即为科学家提供软件开发支持),他们倾向于关心是否可以编写软件,而如果您愿意做些必要的事情以确保您可以了解他们的所作所为,则更多。在您尝试解决问题时,他们不必握住您的手。由于它也是一个研究环境,因此他们似乎也对您对学习新事物的兴趣感兴趣。

现在,我忽略了提及软件公司(例如Google,Microsoft)的原因,因为它们倾向于做自己的事情,并且取决于公司的成熟程度和所面试的人群,他们正在寻找不同的东西。

归根结底,就像生活中的大多数事情一样,这一切都取决于。我个人发现,有些公司非常关注“书本知识”,而这可能是以实际解决更高层次的问题为代价的,而其他公司似乎非常关注您如何更好地处理更高层次的问题。 (例如,您可以为x设计一个方案)并在他们愿意花三到六个月的时间来使您充分投入生产之前的前提下进行操作。


2

同样,技术面试是任意和反复无常的。

在细节上烧烤一个人与查看他们是否知道自己的CS之间有很大的区别。就像我在上面说的那样,我在C ++方面有十多年的经验,但是我倾向于轰炸OOP /继承问题。为什么?因为一旦添加了对模板的支持,我几乎将C ++专门用于泛型编程

我已经采访了海湾地区和西雅图的几家BigHouseHoldNameTech公司,其中最好的采访之一涉及他们在工作中必须处理的实际问题,涉及数据结构和算法[即:您有3000亿个数据点由XYZ组成。您如何有效地存储和搜索?]。

这几乎使您知道候选人可以如何介入并帮助解决您面临的实际问题。另一家BigHouseHoldNameTech公司也绝对糟糕,但是他们问了几个小时的令人难以置信的神秘问题,您真的应该只在手册中查找[例如,描述Windows与Linux中PCB的主要区别-但这不是' t表示内核级别的位置 ]

对冲基金出于酷刑的目的而显得异常奇怪……期望在白板上解决背包型问题的时间为8小时。


2

我是一名软件开发人员(c / c ++),在该领域拥有20多年的经验。现在,我们通常看到的面试类型(脑筋急转弯,在白板上实现数据结构,搜索算法等)除了newgrads之外很少发生。如果某人在一家信誉良好的公司工作了合理的时间,则认为该人具有编写代码的能力的证明。现在它变得非常流派,我不确定为什么。的确,可以记住他们要求您编写代码的典型内容,因此在白板上进行操作实际上并不能证明任何事情。在一个工作项目中,您将使用Internet进行研究,而不会从头开始编写btree或链接列表。

我认为这是另一种管理时尚-就像scrum一样,这可能是由Google,亚马逊和微软发起的。其他所有人都像杰克·韦尔奇(Jack Welch)的职务一样被抄袭了,并且......还记得通用电气(GE)吗?

如果您是一位招聘经理,请阅读我的评论,那么您应该问的应聘者是他们如何解决某些问题。与其让他们编写一个哈希表,不如给他们一个涉及哈希表的问题,并询问他们如何解决它。

我也同意这篇文章上方的开发人员所说的:“给他们一个公司必须解决的现实问题”!

“但是我倾向于轰炸OOP /继承问题。为什么?因为一旦添加了对模板的支持,我几乎将C ++专门用于泛型编程。”

我也同意以上观点。在公司工作时,可以用自己的方式编写代码。我有时仍然想不起来要通过引用语法进行C ++调用,因为我工作了15年的公司的高级架构师更喜欢使用指针而不是引用。您看到他是一位老C程序员。这就是我们所有人所使用的。

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.