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?
quelle
Antworten:
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.
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
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...
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:
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.quelle