Wenn Ihr Algorithmus korrekt ist, spielt es dann eine Rolle, wie lange Sie zum Schreiben gebraucht haben? [geschlossen]

11

Ich habe kürzlich herausgefunden, dass Facebook eine Programmierherausforderung hat, bei deren korrekter Ausführung Sie automatisch ein Telefoninterview erhalten.

Es gibt eine Beispielherausforderung, bei der Sie aufgefordert werden, einen Algorithmus zu schreiben, mit dem ein Problem vom Typ Tower of Hanoi gelöst werden kann. Bei einer Reihe von Stiften und Scheiben eine anfängliche und endgültige Konfiguration; Ihr Algorithmus muss die wenigsten möglichen Schritte bestimmen, um zur endgültigen Konfiguration zu gelangen und die Schritte auszugeben.

Diese Beispielherausforderung gibt Ihnen ein Zeitlimit von 45 Minuten, aber Sie können Ihren Code trotzdem testen, um festzustellen, ob er nach Ablauf Ihres Zeitlimits abgelaufen ist.

Ich kannte keine niedliche mathematische Lösung, die es lösen könnte, und ich wollte keine suchen, da ich denke, das wäre Betrug. Also habe ich versucht, die Herausforderung so gut wie möglich alleine zu lösen.

Ich konnte einen Algorithmus erstellen, der funktionierte und bestand. Die Herstellung dauerte jedoch mehr als 4 Stunden, viel länger als die 45-Minuten-Anforderung. Da ich so viel länger als die vorgesehene Zeit gebraucht habe, habe ich die eigentliche Herausforderung nicht versucht.

Das hat mich allerdings gefragt, ob es in Wirklichkeit wirklich wichtig ist, dass ich so lange gebraucht habe? Ich meine, ist dies ein Zeichen dafür, dass ich an einem Ort wie diesem (nicht nur Facebook, sondern auch Google, Fog Creek usw.) keinen Job bekommen kann und meine Bestrebungen senken muss oder die Tatsache, dass ich tatsächlich bestanden habe bei meinem ersten Versuch, obwohl es zu lange gedauert hat, als gut genommen zu werden?

JD Isaacks
quelle
12
Es war hier wichtig - ist das real genug für dich?
2
Warum glauben Sie, dass das Nicht-Arbeiten für einen großen .com-Namen bedeutet, dass Sie Ihre Bestrebungen senken?
Mouviciel
@mouviciel Ich wollte nicht gerade meine Bestrebungen, mit einem großen .com-Namen zu arbeiten, senken, sondern eher für ein Unternehmen arbeiten, bei dem die Programmierung die Hauptrolle spielt, als für ein Unternehmen, das etwas anderes wie den Einzelhandel betreibt, bei dem niemand versteht, was Sie tun.
JD Isaacks
5
LOL bei Fog Creek Software wird in Facebook und Google aufgenommen.
Georgiecasey

Antworten:

42

In der Praxis ist es tut ganz gleich , wie lange es dauert. Einer, der das Problem in 45 Minuten lösen kann , ist - alle anderen Faktoren gleich - fünf mal produktiver als eine , die 4 Stunden dauert und somit attraktiver Arbeitgeber.

Sie sagen jedoch nicht, warum Sie vier Stunden gebraucht haben, um dieses Problem zu lösen.

  • Waren Sie in Bestform (satt, nicht müde, voll konzentriert)?
  • War das Problem gut spezifiziert oder mussten Sie selbst zusätzliche Nachforschungen anstellen?
  • Mussten Sie dafür neue Dinge lernen?
  • Waren die Werkzeuge bekannt oder nicht?
  • etc.

All diese Dinge können die Zeit beeinflussen, die Sie benötigen, und es ist tatsächlich wichtiger, ein Problem unter Druck lösen zu können, ohne alles zu erfahren und mit den vorhandenen Werkzeugen, da dies während Ihrer Karriere passieren wird und es ist normalerweise an einem Punkt, an dem es für jemanden sehr wichtig ist, ob Sie Erfolg haben oder nicht.


quelle
Danke für deine Antwort. Um zu beantworten, warum ich lange gebraucht habe, ist ein Teil, weil ich ein bisschen Probleme hatte zu verstehen, was ich eigentlich tun musste. Nachdem ich diesen Teil verstanden hatte, musste ich noch ein bisschen nachdenken, um einen Plan auszuarbeiten. Wenn beispielsweise eine Disc die Disc blockiert, die ich verschieben möchte, und ich sie zuerst verschieben muss, wohin soll ich sie verschieben? Der eigentliche Programmierteil war der kürzeste, aber alles trug zur Zeit bei.
JD Isaacks
@ JohnIsaacks Das Problem war also, dass Sie mit Towers of Hanoi nicht vertraut waren. Die meisten Programmierer, die ich kenne, wurden mit dem Thema Rekursion vertraut gemacht (jede Bewegung der Festplatte ist im Wesentlichen "Verschieben der Festplatte über mir auf einen freien Stift", der sich gut auf die Rekursion abbildet). Haben Sie eine formale Ausbildung erhalten und wenn ja, auf welchem ​​Niveau?
@ ThorbjørnRavnAndersen, ich habe in der Schule kein Programmieren gelernt. Ich bin Autodidakt, habe im Beruf gelernt, durch Bücher, Experimentieren usw. Ich war mit dem Spiel nicht vertraut (außer dass ich mich an ein ähnliches Spiel erinnerte, das auf dem Planeten der Affen gespielt wurde), ich musste Google, um überhaupt zu wissen, dass es das war genannt "Türme von Hanoi." Ich verstehe Rekursion (zumindest glaube ich das) und habe sie hier verwendet. Aber das Rätsel einfach zu lösen wäre für mich viel einfacher gewesen. Der schwierigere Teil war: "Welches Muster bringt jedes Mal die geringstmögliche Anzahl von Zügen."
JD Isaacks
@ JohnIsaacks Programmierung ähnelt dem Klavierspielen - Sie können selbst gut werden, aber um wirklich gut zu werden, müssen Sie von einem erfahrenen Lehrer lernen, wie man Dinge richtig macht. Könnten Sie näher erläutern, wie Sie das Rätsel lösen könnten, aber den Teil "Ist es optimal?" Schwierig finden?
Ich könnte eine rekursive Funktion erstellen, die ein Teil an seinen Platz bewegt, jedes blockierende Teil aus dem Weg räumt und dann mit dem nächsten Teil von vorne beginnt. Beginnen Sie mit dem größten Stück und arbeiten Sie bis zum letzten kleinsten Stück. Der Teil "Ist es optimal?" Kommt, wenn Sie ein Blockierstück bewegen. Je nachdem, wohin Sie es verschieben, können zusätzliche unnötige Schritte erstellt werden. Wenn Sie beispielsweise eine 1 auf eine 3 verschieben, wird die 3 blockiert und muss erneut aus dem Weg geräumt werden, wenn die 3 verschoben werden soll. Abhängig von der aktuellen Konfiguration ist dies jedoch möglicherweise nicht vermeidbar.
JD Isaacks
13

Für ein Unternehmen, das nach allgemeinen Entwicklern mit gutem Cashflow sucht, ist dies wichtig, da schneller bedeutet, dass mehr Arbeit erledigt werden kann. Doch in vielen anderen Fällen (ich würde in den meisten Fällen argumentiert, tatsächlich), es spielt keine Rolle , so viel wie Ihre Fähigkeit , Probleme zu lösen , und Ihre Fähigkeit , sie gut zu lösen .

Ich kann mir fünf verschiedene Arten von Problemlösern vorstellen:

Die, die...

  1. ... können Probleme schnell und mit einer sauberen und effizienten Lösung lösen .
  2. ... kann Probleme schnell lösen , aber mit einer schmutzigen und ineffizienten Lösung.
  3. ... kann Probleme langsam lösen , führt aber zu einer sauberen und effizienten Lösung.
  4. ... kann Probleme langsam lösen , führt aber zu einer schmutzigen und ineffizienten Lösung.
  5. ... können Probleme weder schnell noch langsam lösen.

Bei einem Test im Facebook-Stil werden die Kandidaten Nr. 3, Nr. 4 und Nr. 5 explizit ausgesondert, da er zeitlich begrenzt ist. Daher wissen wir, dass dieser Test für Arbeitgeber gedacht ist, die festgestellt haben, dass sie nur Kandidaten Nr. 1 oder möglicherweise Nr. 2 einstellen sollten ( abhängig vom weiteren Screening).

Einige Beispiele:

  • Ein Arbeitgeber wie Facebook sucht möglicherweise nur nach Programmierern Nr. 1 , da sie sich riesige Gehälter für Superstar-Programmierer leisten können.
  • Ein Arbeitgeber mit einem hohen Volumen an einmaligen Verkäufen (wie einige Webdesign-Shops) möchte möglicherweise nur einen Entwickler Nr. 2 , der billiger ist als die gleichermaßen effektiven Entwickler Nr. 1.
  • Ein Arbeitgeber, der über eine spezielle Problemdomäne verfügt (z. B. das Schreiben von Kreditvergabesoftware), akzeptiert möglicherweise einen Entwickler Nr. 3 gegenüber einem Entwickler Nr. 1 , da ein genialer Entwickler mit zwei Abschlüssen möglicherweise sehr teuer oder schwer zu finden ist.
  • Ein Arbeitgeber, der sich aus verschiedenen Gründen nicht darum kümmert oder nur über ein begrenztes Budget verfügt, ist möglicherweise mit einem Entwickler Nr. 4 einverstanden.
  • # 5 Entwickler werden von Firmen eingestellt, die nicht wissen, wonach sie suchen, und diese Bewerber nicht aussortieren.
Kevin McCormick
quelle
5

Turm von Hanoi? Das war eine der ersten Programmieraufgaben, die ich in meinem ersten Studiengang an der Universität hatte (direkt nach Fibonacci - ja, ich hatte Unterricht bei einem dieser funktionalen Programmierfreaks :). Und ich bin nicht einmal in der Informatik, ich bin in der Computertechnik.

Und dennoch können die meisten sogenannten "Programmierer" diese Art von Algorithmus nicht richtig schreiben, weil die meisten Programmierer schrecklich sind. (Suche nach Fizzbuzz für zusätzlichen Spaß)

Sobald Sie eine bestimmte Schwelle überschritten haben, sind Ihre Programmierkenntnisse meiner Meinung nach weniger wichtig als Ihre Fähigkeit, Projekte abzuschließen, Ihre Widerstandsfähigkeit gegen Schwierigkeiten usw. Und es scheint, dass Sie diese Schwelle mit Sicherheit überschritten haben.

Facebook möchte natürlich die Top-Entwickler einstellen, aber ich weiß nicht, wie viele von ihnen sie mit solchen Spielen erreichen wollen. Ich denke, sie wollen einfach keine Zeit mit schrecklich schlechten Programmierern verlieren.

Ein Tipp, den ich immer höre, ist, dass Sie versuchen sollten, sich an Open-Source-Projekten zu beteiligen, wenn Sie von einem coolen Technologieunternehmen eingestellt werden möchten. Versuchen Sie auch, ein Praktikum zu bekommen.

elias
quelle
3

Wenn es viel Angebot (viele angehende Programmierer) und wenig Nachfrage (wenige Programmierjobs) gibt, können Arbeitgeber so anspruchsvoll sein, wie sie es möchten. Tatsächlich müssen sie anspruchsvoll sein, sonst würden sie übermäßig viel Zeit damit verbringen, Menschen zu interviewen, anstatt irgendwelche Arbeiten zu erledigen. Deshalb geben sie den Kandidaten extrem harte Tests, um so schnell wie möglich eine kurze Liste zu erhalten und um sicherzustellen, dass sie Leute interviewen, die nicht nur gut, nicht einmal sehr gut, sondern auch charismatisch sind .

Die Tatsache, dass Sie den Test nicht innerhalb des vorgegebenen Zeitrahmens abgeschlossen haben, bedeutet nicht, dass Sie ein schlechter Programmierer sind. Sie passen einfach nicht zur Definition dessen, was Facebook als charismatisch ansieht. Meiner Meinung nach ist das okay.

Mike Nakis
quelle
0

Die Zeit spielt eine Rolle, aber denken Sie nicht, dass Sie dumm sind, wenn Sie länger brauchen. Viele Leute haben Dinge "auswendig gelernt". Sie üben das Anwenden von Techniken wie Rekursion so sehr, dass es zur 2-CD-Natur wird. Es ist nicht so, dass sie schlauer sind, sie haben nur bis zur 2-CD-Natur geübt und du kannst es auch!

Betrachten Sie das folgende mathematische Problem: 2 + 2 =?

Wenn Sie sofort wussten, dass die Antwort 4 war, dann nicht, weil Sie schlau sind, sondern weil es 2-CD-Natur ist. Ein Kind, das das Hinzufügen lernt, muss möglicherweise die grundlegendsten Zählvorgänge durchlaufen, um die Antwort zu erhalten. Aber dieses Kind kann das Potenzial haben, den Erwachsenen zu übertreffen.

Lord Tydus
quelle
-1

Die Leute kümmern sich nicht wirklich darum, wie viel Zeit Sie damit verbringen, etwas zu tun. Halten Sie einfach Ihre Fristen ein und alles ist gut.

user541686
quelle
7
Wenn also die Frist "45 Minuten ab jetzt" ist und Sie vier Stunden später fertig sind, kümmern sich die Leute darum.
1
Was Mehrdad bedeutet, ist, dass Sie Überstunden machen können, um die Fristen einzuhalten: D
quant_dev
1
Wenn Sie Überstunden machen müssen, um Dinge zu tun, für die andere Entwickler keine Überstunden benötigen würden - Sie haben keine Stopps mehr, um sich zurückzuziehen, wenn der Poop den Fan wirklich trifft ...
Occulus
-1

Es ist ziemlich angespannt. Ich müsste lesen, was der Turm von Hanoi ist - 15 Minuten, die IDE starten, eine leere Lösung erstellen - 5 Minuten. Das sind also nur 25 Minuten, um das Problem zu lösen. Das einfache Schreiben von Code mit allen Installationsprogrammen wie sichere Klassen mit gutem Schnittstellendesign würde ebenfalls einige Zeit in Anspruch nehmen - 10 Minuten, sodass für die eigentliche Idee noch 15 Minuten verbleiben. Je nachdem, was der Turm auf Hanoi ist, könnte es ausreichen, aber es könnte nicht sein. Und manchmal muss ich das Problem einfach selbst lösen lassen, während ich an anderen Problemen arbeite, weil ich die Lösung nicht direkt vor Ort sehe. Es wird also kostenlos in einem parallelen Thread gelöst, aber es passiert nicht sofort.

Auf jeden Fall ist es eines der größten Unternehmen, sodass sie tun können, was sie wollen. Aber das Zeitlimit ist meiner Meinung nach einer der schlimmsten Faktoren in Interviews. Ich fühle mich immer unter Druck gesetzt, gehetzt, kann nicht alles sauber machen und kann mich nicht auf alle Details konzentrieren, die für die eigentliche Arbeit sehr wichtig sind. :) Sicher, Sie können Lösungen schnell lösen, indem Sie den Zugriff auf den Administrator so einstellen, dass alles funktioniert + 'SELECT * FROM pass WHERE usr == ' + user_input, aber für jede sichere und gut geschriebene Aufgabe, auf die ich stolz sein würde, würde ich einige Zeit benötigen und 45 Minuten sind wirklich sehr intensiv.

Codierer
quelle
1
Ich denke, sie wollen Leute, die sich einfach daran erinnern, was das Problem des Turms von Hanoi ist (es ist ein Klassiker).
quant_dev
Das Starten Ihrer IDE und das Erstellen eines leeren Projekts dauert fünf Minuten? Wenn Sie Towers Of Hanoi noch nicht kennen, tun Sie dies zumindest in umgekehrter Reihenfolge, damit die IDE (anscheinend von einer VM über das Internet) geladen wird, während Sie recherchieren!
Bryan Boettcher
In einem Test wie diesem suchen sie nicht unbedingt nach "gutem Schnittstellendesign" und "Sanitär" - ich würde erwarten, dass sie Ihr Verständnis des Problems und die Fähigkeit sehen möchten, einen Algorithmus zu entwickeln, um es zu lösen. Wenn die Sprache keine Einschränkung wäre, wäre die Verwendung von Java und Eclipse das Letzte, was ich tun würde. Ich würde Python und einen minimalen Texteditor / eine kompakte IDE verwenden. (Nicht sagen, dass Sie Java selbst verwenden würden; sagen Sie einfach ...)
Occulus