如果您的算法是正确的,那么您花了多长时间编写它是否重要?[关闭]


11

我最近发现,Facebook面临编程方面的挑战,如果正确完成,您将自动获得电话面试。

有一个示例挑战,要求您编写一种可以解决“河内之塔”类型问题的算法。给定许多钉子和圆盘,进行初始和最终配置;您的算法必须确定可能的最少步骤,以进行最终配置并输出步骤。

该示例挑战为您提供了45分钟的时间限制,但允许您仍然测试您的代码,以查看时间限制是否过期。

我不知道有什么可爱的数学解决方案可以解决该问题,而且我也不想寻找一个数学解决方案,因为我认为这样做会很欺骗。因此,我试图独自解决最大的挑战。

我能够制定出行之有效的算法。但是,我花了4个多小时才完成制作,比45分钟的要求要长得多。由于花费的时间比分配的时间长得多,因此我没有尝试实际的挑战。

这让我感到奇怪,实际上,花了我这么长时间真的很重要吗?我的意思是这表明我将无法在这样的地方(不仅是Facebook,而且是Google,Fog Creek等)找到工作,需要降低自己的抱负,或者我实际上已经过世了在我的第一次尝试上,即使花了太长时间才被认为是好的?


12
这很重要-这对您来说足够真实吗?

2
您为什么认为不以.com为大名工作意味着您降低了期望?
mouviciel 2011年

@mouviciel我并不是说要降低使用大型.com名称的抱负,而更像是在一家以编程为主要角色的公司工作,而不是在一家零售业这样的公司工作,而没人知道您的工作。
JD Isaacks 2011年

5
Fog Creek软件的LOL已包含在Facebook和Google中。
georgiecasey 2012年

Answers:


42

在实践,花费多长时间并不重要。一个可以在45分钟内解决的问题是-一切平等- 5倍,一个需要4个小时的生产力,因此对雇主的吸引力。

就是说,您不必说为什么花了四个小时来解决这个问题。

  • 您是否处于最佳状态(吃饱,不疲倦,专心致志)?
  • 问题是否已明确指定,还是您需要自己进行其他研究?
  • 您是否需要学习新知识才能做到这一点?
  • 这些工具是否熟悉?
  • 等等

所有这些事情都可能影响您花费的时间,实际上,在压力下能够解决问题,不被告知所有问题和使用手头的工具更为重要,因为这将在您的职业生涯中发生无论成功与否,通常在某个时刻,对某人来说非常重要。


感谢您的回答。要回答为什么花了我这么长时间,一部分是因为我在理解我实际需要做的事情时遇到了一些麻烦,一旦我理解了那部分,我仍然需要花一点时间来想出一个计划。例如,如果某个光盘挡住了我要移动的光盘,那么我需要先将其移动到哪里,然后将其移动到哪里。实际的编程部分是最短的,但是这都增加了时间。
JD Isaacks 2011年

@JohnIsaacks因此,问题在于您对河内塔不熟悉。我知道的大多数程序员在学习递归时都已经介绍了它(每次磁盘移动本质上都是“将磁盘移到我上方的一个空钉上”,这很好地映射到了递归)。您接受过正规教育吗?如果接受过什么程度的正规教育?

@ThorbjørnRavnAndersen,我在学校没有学习任何编程。我是自学成才的,是通过工作,书籍,实验等来学习的。我对游戏并不熟悉(除了记得在猿人星球玩过类似的游戏),我不得不向Google知道被称为“河内的塔”。我确实了解递归(至少我认为是这样),并且在这里使用了递归。但是,对于我来说,简单地解决难题将更加容易,更难的部分是“哪种模式每次都会产生最少的移动量”。
JD Isaacks 2011年

@JohnIsaacks编程非常类似于钢琴演奏-您可以自己取得成功,但要真正变得出色,您需要由经验丰富的老师来教如何正确做事。您能否详细说明如何解决难题,但很难找到“最佳”部分吗?

我可以创建一个递归函数,将一块移到适当的位置,将任何阻塞的块移开,然后再从下一块开始。从最大的片段开始,一直到最后的最小片段。“是否最佳”部分来自移动挡块时。根据移动的位置,它可能会创建其他不必要的步骤。例如,将1移动到3上将阻塞3,并且需要在移动3的时候再次将其移开,但是根据当前配置,这是不可避免的。
JD Isaacks 2011年

13

对于正在寻找具有良好现金流的一般开发人员的公司而言,这确实很重要,因为更快的速度意味着可以完成更多的工作。然而,在许多其他情况下(我认为在大多数情况下,实际上),这非常重要不是尽可能多的为您解决问题的能力,以及你解决这些问题的能力很好

我可以想到五种不同类型的问题解决器:

那些人...

  1. ...可以使用干净有效的解决方案快速解决问题。
  2. ...可以快速解决问题,但解决方案肮脏而低效。
  3. ...可以缓慢地解决问题,但最终会得到干净有效的解决方案。
  4. ...可以缓慢地解决问题,但最终会得出肮脏且效率低下的解决方案。
  5. ... 无法快速或缓慢地解决问题。

Facebook风格的测试明确排除了#3,#4和#5候选人,因为它有时间限制,因此我们知道此测试适用于已确定只应雇用#1或可能是#2候选人的雇主(取决于进一步的筛选)。

一些例子:

  • Facebook这样的雇主可能只在寻找排名第一的程序员,因为他们可以为超级明星程序员支付巨额薪水。
  • 拥有大量一次性销售的雇主(例如某些网页设计商店)可能只想要第二名开发人员,而第二名开发人员比同样有效的第一名开发人员便宜。
  • 具有专门问题域(例如,编写贷款原始软件)的雇主可能会接受#3开发人员而不是#1开发人员,因为双学位的天才开发人员可能非常昂贵,或者可能很难找到他们。
  • 出于各种原因不在乎或预算有限的雇主可能会选择#4开发人员。
  • 排名第五的开发人员被不知道他们在寻找什么的公司聘用,并且未能筛选出那些申请人。

5

河内塔?那是我在大学一年级课程中的第一个编程任务之一(紧随斐波那契之后-是的,我上的课程是其中一种功能编程怪胎:)。而且我什至都不在计算机科学领域,在计算机工程领域。

而且,大多数所谓的“程序员”仍然无法正确编写这种算法,因为大多数程序员都很糟糕。(搜索fizzbuzz以获得更多乐趣)

无论如何,一旦您超过了一定的门槛,我认为您的编程技能与完成项目的能力,对困难的应变能力等无关紧要。看来您肯定已经过去了。

当然,Facebook想雇用顶级开发人员,但我不知道他们希望从这些游戏中获得多少。我认为他们只是不想浪费时间与糟糕的程序员在一起。

我经常听到的提示是,如果您想被一家很酷的科技公司聘用,请尝试参与开源项目。另外,尝试获得实习机会。


3

当有大量的供应(许多可能成为程序员的人)和少量的需求(很少有编程工作)时,雇主可能会像他们希望的那样要求苛刻。事实上,他们必须要求很高,否则他们将花费过多的时间采访人们,而不是完成任何工作。因此,他们正在对候选人进行极其艰苦的测试,以便尽快获得他们的简短名单,并确保他们将面试不仅好,甚至不是很好,但实际上很有魅力的人

因此,您没有在指定的时间范围内完成测试的事实并不意味着您是一个糟糕的程序员。您只是碰巧不符合Facebook认为具有超凡魅力的定义。我认为这没关系。


0

时间很长,但是如果花费更长的时间,就不会觉得自己很愚蠢。很多人“记住”事情。他们练习应用诸如递归之类的技术如此之多,以至于它变成了2cd性质。并不是说他们更聪明,他们只是练习了2cd性质,您也可以!

请考虑以下数学问题:2 + 2 =?

如果您立即知道答案是4,那不是因为您很聪明,而是因为它具有2cd性质。学习加法的孩子可能被迫经历最基本的计数操作以获得答案。但是那个孩子可能有超过成人的潜力。


-1

人们并不真的在乎您花多少时间做某事。只要按时完成任务,一切就好。


7
因此,当最后期限是“从现在开始45分钟”,而您在四个小时后结束时,人们就会在意。

1
什么迈赫达德意思是,你可以加班,以满足最后期限:d
quant_dev

1
如果您必须加班来完成其他开发人员不需要的工作-当船尾真的撞到风扇时,您将
无休止地退出

-1

这很紧张,这将需要我阅读什么是河内塔楼-15分钟,启动IDE,创建空白解决方案-5分钟,所以只需要25分钟即可解决问题。简单地使用具有良好接口设计的安全类的所有管道编写代码将需要一些时间以及-10分钟,因此实际想法还剩15分钟。取决于河内的塔是什么,可能就足够了,可能还不够。有时,当我在处理其他问题时,只需要让问题解决即可,因为我看不到现场的解决方案。因此,它是在并行线程中免费解决的,但不会立即发生。

无论如何,它是最大的公司之一,因此他们可以做任何想做的事。但是时间限制是采访恕我直言的最糟糕的因素之一,我总是感到被压迫,仓促,无法完成所有工作,也无法专注于在实际工作中非常重要的所有细节。:)当然,您可以快速解决问题,例如,设置对admin的访问权限,以便一切正常运行+ 'SELECT * FROM pass WHERE usr == ' + user_input,但是对于我将为之感到骄傲的任何安全且编写良好的任务,我将需要一些时间和45分钟,这确实非常紧张。


1
我认为他们希望人们只记得什么是河内塔问题(这是经典)。
quant_dev

启动IDE并创建一个空白项目需要五分钟?如果您还不了解河内的塔,请至少以相反的顺序进行操作,以便在研究时IDE(显然是通过Internet上的VM)加载的!
Bryan Boettcher

在这样的测试中,他们不一定要寻找“好的界面设计”和“管道”-我希望他们希望看到您对问题的理解以及形成解决问题的算法的能力。如果语言不是约束,那么我要做的最后一件事就是使用Java和Eclipse之类的东西。我将使用Python和最小的文本编辑器/紧凑型IDE。(不是说您自己会使用Java;只是说...)
occulus 2012年
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.