我应该担心面试过程中给出的程序设计作业过度工程吗?[关闭]


27

最近,我对一家公司进行了电话采访。在电话采访之后,我被告知要完成一个简短的编程任务(一个小程序;应该不超过三个小时)。我仅被指示直接完成作业并上交代码。我被赋予了完全自由地使用自己希望使用的任何语言的权限,并且没有确切地告诉我如何上交代码。

我立即计划将其投放到Github上,为其编写测试套件,使用Travis-CI(公共Github存储库的免费连续集成)运行测试套件,并使用CMake构建Travis-CI的Linux makefile。这样,不仅可以证明我了解如何使用Git,CMake,Travis-CI以及如何编写测试,而且还可以直接链接到Travis-CI页面,以便他们可以看到测试的输出。我认为这会使面试官更加方便。

由于我非常了解这些技术,因此基本上不会增加​​分配时间。

但是,我有点担心对于一个相对简单的任务执行所有这些操作会看起来很糟糕。尽管这对我来说根本不会增加太多时间,但我不希望他们认为我花太多时间在本应简单的事情上。


5
我会谨慎地在github上回答访谈问题的答案,因为有些公司希望对他们的问题保密。
Scroog13年

7
这些问题可以在他们的博客上公开获得(他们向我发送了指向该博客文章的链接),因此我认为他们对此并不担心。
DormoTheNord

3
@DormoTheNord我想说的是您并没有过度设计:拥有良好的开发流程与过度设计完全不同,并且(IMO)是一个好兆头。
K.Steff

3
我会花一些额外的时间来记录问题说明,假设,局限性...中的任何灰色区域。证明您不仅精于编码,而且还考虑了问题及其背景。
HABO

4
@DormoTheNord问题可能是公开的,但您的答案也将公开。如果其他受访者可以找到它,它将可以使用。 ,他们可能不会喜欢。
Izkata

Answers:


29

作为一名面试官,我很高兴看到这种方法展示了有关软件开发过程的知识。而不是仅仅编写代码。

特别地,拥有一个即使非常简单的问题的测试套件也将是一个好兆头(甚至是FizzBu​​zz级别)。我已经看到候选人提交的解决方案甚至不能解决问题,而一组简单的测试就可以证明这一点。另外,有了提交历史记录,我可以了解候选人用来解决问题的思考过程。

另一方面,我知道人们在过度设计过程的早期会被某些公司拒绝。但是,在大多数情况下,这是由于解决方案的过度设计(不一定是所使用的过程)造成的。


2
您是否可以说一个公司如果拒绝我做我打算做的事情,是否表明该公司不尊重软件开发方法并且我宁愿不为该公司工作?
DormoTheNord

7
我不一定要走那么远,因为涉及到一定的运气(不幸的是)。您可能会得到一位不喜欢这种方法的面试官。否则他们可能那天心情不好,不想浏览这种方法提供的额外数据。话虽如此,澄清他们想要的细节水平通常没有什么害处。同样,问一个或两个澄清的问题对面试官来说也是一个好兆头(尽管显然不会不断用不知情的问题轰炸他们)。
Scroog13年

+1-只要您不偏离解决方案,我将希望查看单元测试以及您在未提示的情况下所做的任何其他事情。
Telastyn 2013年

1
通过发送基本github链接和直接链接到懒惰/忙碌测试源代码的链接,可以缓解风险太大的风险。
Dan Neely 2013年

15

作为一名受访者,能够理解诸如版本控制,CI,单元测试之类的知识的人会比我通常看到的要加强。

尽管对我而言,最重要的是问题已得到解决,并且得到了很好的解决,但知道候选人了解提高交付物质量的方法肯定会引起我的注意。

我通常看到的是那些不仅不理解问题,而且也不知道如何解决问题的人,无论他们在过程中使用了多少额外的工具,他们都会被忽略。


6

请记住,它有时间限制。面试官知道这一点,所以这意味着(如果我是面试官)他将看到您不仅在指定的时间内解决了问题,而且这样做的速度如此之快以至于您有时间去镀金,这是您的好兆头。解决问题的能力,以及您对严谨和勤奋的欣赏。

当您创建AbstractFactoryManagerAdaptors并插入它们以分发BuzzManager和FizzManager来解决FizzBu​​zz时,过度设计是一个坏词。

您正在做的事情是尽力而为,这甚至不是事情(尽管尽力而为是)。

就是说,如果您由于时间的流逝或某种半破解的解决方案而结束,因为您将时间花在声称“根本没有添加时间”的附加功能上,那么您似乎似乎对很小的表面看起来不太了解。任务可以。这在工程师中可能是危险的属性,并且在初级人员中太常见了。仅完成所需的解决方案之后,才对优先级进行适当的排序并进行额外的信贷工作。


没有严格的时间限制,只是一条注释说明,分配一个体面的程序员不应超过三个小时。他们真的会检查我的git日志,以确保从提交#1到最终提交只花了三个小时吗?
DormoTheNord

2
@DormoTheNord如果没有时间限制,则未花费在请求的解决方案上的时间可能被视为优先级低。不幸的是,工程师都是独立的思想家,因此对这些事情都有自己的看法。在这种情况下,回顾您所做工作的人是那种看待这种情况的人还是幸运的人,这是很幸运的。可以将其视为一大福音。我认识过两个方面的优秀工程师。在这些情况下,它归结为您所重视的东西,将其显示出来,并且一个与您一样欣赏的人,就是您要与之共事的人。
Jimmy Hoffa 2013年

这就是我讨厌求职面试的原因……要取悦面试官的个人喜好。也许应该标准化:)
DormoTheNord 2013年

不用担心,运气甚至会影响您的职业生涯。您只需要幸运的时候会遇到好运和坏运:)
Scroog1 2013年

1
我会谨慎地将其描述为“镀金”,因为该术语通常被认为是一件坏事:en.wikipedia.org/wiki/Gold_plating_%28analogy%29
whatsisname 2013年

6

要考虑的另一种观点是,您的方法既不好也不坏。我可以想象采访者会考虑太多,也可以想象会喜欢更多工程学的采访者。

不用担心 相反,以您认为最好的方式解决问题,您可能会从与您达成共识的人那里获得工作机会。这是迈向富有成效的工作环境的第一步。记住,面试有两种方式。面试官对您的解决方案的回复也会告诉您很多有关它们的信息。您是否真的想和那些相信您的开发本能和哲学是错误的人一起工作?


3

实际上,没有人在乎候选人是否可以急忙制作git repo或创建makefile,因为那只是回忆他或她死记硬背所学到的东西。这些是面试问题的实际问题解决和设计方面的辅助技能。

因此,是的,您的直觉很可能会看起来很糟糕,因为应聘者看起来似乎认为可以反省一些已记忆的命令和模式来创建项目框架的人具有令人印象深刻的软件技能。

该解决方案的测试套件方面还是不错的。通过回归测试套件提供答案可能会赢得积分。如果您的测试套件执行代码中的重要案例,则更是如此。测试套件不必有很多正式的陷阱,也不必依赖工具。仅仅因为您某种原因而已,就足以进行面试了。或多或少显而易见的是,如果您可以在面试测验中组合一些特定的单元测试,则可以使用真实项目中的工具来完成。


1

最近,我对一家公司进行了电话采访。在电话采访之后,我被告知要完成一个简短的编程任务(一个小程序;应该不超过三个小时)。

我会谨慎进行。评估挑战与工作的相关性,并确保将来雇主的报销将使您3个小时的时间值得。

我对这些类型的测试的价值表示怀疑,宁愿根据某人过去的成绩来对其进行评判。预定义的短期任务无法告诉雇主您可以做什么。只有您不能做的事情,可以通过电话中的几个问题快速确定。

测试确实有它的位置。问问自己以下有关测试的问题,并做出相应答复。

  1. 根据您当前的职业水平,考试是否公平?
  2. 测试是否有明确定义的正确答案?
  3. 面试官是否对您作为一个人的潜力感兴趣,或者他们对测试结果表现出更大的兴趣(即,招聘机构对此很可怕)。
  4. 测试代表您喜欢做的工作,还是技能验证不明确(例如,如果您知道Java语法,则进行测试)。

我仅被指示直接完成作业并上交代码。

您刚刚回答了自己的问题。

我立即计划将其投放到Github上,为其编写测试套件,使用Travis-CI(公共Github存储库的免费连续集成)运行测试套件,并使用CMake构建Travis-CI的Linux makefile。

不,那不是他们要你做的。

这样,不仅可以证明我了解如何使用Git,CMake,Travis-CI以及如何编写测试,而且还可以直接链接到Travis-CI页面,以便他们可以看到测试的输出。我认为这会使面试官更加方便。

我会在面试过程中过早或过晚地展示技能。如果您觉得在面试中表现不佳,现在正试图弥补,那将是行不通的。另一方面,在没有被问到的情况下做太多事情也表明了渴望。这可能导致雇主以低于您期望的较低的工资水平来应对。

但是,我有点担心对于一个相对简单的任务执行所有这些操作会看起来很糟糕。

是的,看起来不好。用一行代码解决他们的挑战将比一个完整的冲洗项目印象深刻。

根据我的经验,这不是您赢得求职面试的方式,而是失去工作的一种方式。代码测试是质量控制问题。每个雇用人员时都使用代码测试的公司都这样做,因为以前他们没有使用代码测试。他们的经历很糟糕,有人不应该通过面试过程中的缝隙溜走。

他们将获取您的源代码,并将其传递给办公室。人们会对此发表评论,而您不希望他们说的是“他犯了这个错误?但是却花了一些时间使用Git,CMake和Travis-CI。这真是一个愚蠢的人,错过了这个错误。”

而已。你输了

他们想知道您可以编码,因为他们不能教您。可以轻松教授Git,CMake和Travis-CI。


2
@JimmyHoffa您是不同意我的全部答案还是只是我对测试的意见?也许我未能正确表达自己的观点,或者也许不是?对我来说,我更看重人为因素而不是笔试。未能通过FizzBu​​zz的候选人不会为我证明任何东西。我必须和那个人交谈以了解原因。但是我确实想(一直)雇用技术工人。我只是不认为回家编写此测试然后再回来。是做到这一点的有效方法。我宁愿问FizzBu​​zz问题,然后看着他们解决。你明白吗?
Reactgular 2013年

1
@JimmyHoffa我认为这归结为雇主对录用的期望。话虽如此,我对FizzBu​​zz测试的了解越多,就越倾向于您。不能通过任何职业水平的程序员都会遇到问题。我只是不确定这种测试是否与OP相同。请参阅此相关的问题:stackoverflow.com/questions/117812/...
Reactgular

简而言之,我热衷于艰苦的面试流程,并且候选人尝试超越自我(不影响核心要求;否则他们会优先考虑时间)。您的整个答案似乎都在反对这两件事。
Jimmy Hoffa 2013年


@JimmyHoffa我认为我的态度来自创意领域的自由职业,在此领域,客户经常要求供应商完成创意工作或测试,这是其工作前招标过程的一部分。我不会做这种工作,因为如果我在每个潜在客户上花费数小时,我将无法完成可付费的工作。当我告诉OP谨慎行事时,是希望避免他浪费时间。OP希望花费时间进行很多额外的工作。这是一种诱惑,但值得吗?也许可以,但是OP并没有澄清这一点。可能是短期合同工作。
Reactgular

0

我认为你的做法是既不好也不坏本身。我会问面试官是否可以使用Github和其他工具。正如@Izkata在评论中指出的那样,您正在公开您的解决方案。

作为一名面试官,我知道应聘者澄清一些事情通常没有什么害处。同样,问一个或两个问题可能是一个好兆头,因为您不会急于做您不了解的事情。

但是,请记住,最重要的是问题已经解决并且很好地解决了。在这方面,每个人都同意测试套件会有所帮助。但是,为此,也许您只需要发送几个测试类以及您的项目/解决方案即可。

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.