Daher stellen wir neuen Kandidaten mit einigen genau definierten Anforderungen eine einfache Codierungsübung vor. Gelegentlich erhalten wir Lösungen, die das vorliegende Problem nicht wirklich lösen, aber überarbeitet sind, um ein wahrgenommenes Problem zu lösen - häufig außerhalb der Grenzen der Übung.
Nun ist meine Frage, ist das ein Warnzeichen?
EDIT: Ein Großteil der Diskussion basiert darauf, dass der Test fehlerhaft ist - was ein fairer Punkt ist. Wie ich in einem Kommentar beschrieben habe, besteht die Grundvoraussetzung des Tests darin, zu zeigen, wie Sie die Daten aus der Datei auf vernünftige Weise lesen können (und Sie wären erstaunt über die Vielfalt der Ansätze, die wir sehen) und wie sie mit denen übereinstimmen Elemente vor dem Berechnen der Latenz zwischen den Aktualisierungen. Damit dies funktioniert, müssen bestimmte Annahmen zu den Daten getroffen werden. Wir suchen nach diesen Annahmen und geben ausdrücklich an, dass wir den von Ihnen gewählten Ansatz (einschließlich des OO-Ansatzes usw.) in zwei Stunden sehen möchten Zeitfenster.
IMHO, als ich interviewt habe, war es die vollständigste Übung, die mir begegnet ist.
Das spezielle Szenario, über das ich nachdenke, besteht darin, dass ein Kandidat in einer Multithread-Anwendung "Netzwerk" -Eingaben akzeptiert hat, anstatt sie aus der Datei zu lesen, was eindeutig nicht im Geltungsbereich liegt.
Antworten:
Das Problem ist, dass der Test schief läuft. Sie fordern jemanden auf, seine Fähigkeit zum Schreiben komplexer Unternehmenssoftware anhand einer einfachen Übung zu demonstrieren, die nur wenige Minuten dauert. Es gibt andere Interviewer in anderen Unternehmen, die sich darüber beschweren, dass die Kandidaten mit diesen Übungen nicht über ausreichende Kenntnisse im objektorientierten Design verfügen, sodass die Tendenz zu einer Überkompensation besteht. Dies bedeutet nicht unbedingt, dass Ihr Kandidat nicht in der Lage ist, einfacheren Code zu verwenden, wenn die Situation dies rechtfertigt.
Wenn Sie wissen möchten, ob dies bei Ihrem Kandidaten der Fall ist, bitten Sie ihn, es zu wiederholen, und geben Sie ihm einige spezifische Richtlinien. Sagen Sie: "Ich kann sehen, dass Sie Ihre objektorientierten Designfähigkeiten demonstriert haben, aber es scheint übertrieben für ein so einfaches Problem. Können Sie es mit nur zwei kleinen Funktionen umschreiben?"
quelle
Ich würde sagen, dass dies ein klares Warnsignal ist, aber nicht unbedingt für einen Kandidaten disqualifiziert.
Es gibt zwei verschiedene Probleme, die Kandidaten zu haben scheinen:
Ich würde vorschlagen, den Kandidaten über seine Antwort im Verlauf des Prozesses zu informieren. Anstatt nur ihr Ergebnis zu betrachten, versuchen Sie herauszufinden, was sie zum Ergebnis geführt hat, und geben Sie ihnen eine Anleitung, wie sie reagieren und ihre Antwort ändern würden. Dies wird wahrscheinlich mehr über ihre Fähigkeiten aussagen als nur über ihre direkte Reaktion auf das Problem. Das "Warum" ihrer Herangehensweise kann Ihnen ein Gefühl dafür geben, ob sie es einfach nicht verstehen oder ob ihr Verständnis in der Art und Weise, wie sie darauf reagiert haben, nur gering war. Diese Art der Nachverfolgung wird auch mehr über ihren Gesamtansatz zur Problemlösung verraten.
Untersuchen Sie auch das Problem selbst und prüfen Sie, ob es möglicherweise unklar ist und die Leute möglicherweise auf die falsche Spur kommen, wenn sie ihre Antworten formulieren.
quelle
Nein, nicht während eines Vorstellungsgesprächs. Zu viele Interviewer machen Dinge wie das absichtliche Unterbestimmen der Anforderungen und erwarten vom Interviewten, dass er weitere Fragen stellt oder die Aufmerksamkeit auf reale Probleme lenkt, die nicht ausdrücklich erwähnt werden.
Hier sind einige Dinge, von denen Ihre Anforderungen wahrscheinlich nichts sagten:
Kodierungsstandards
Bemerkungen
Ausnahmebehandlung
Beschreibende Namen von Variablen, Klassen, Methoden
Nach idiomatischem Sprachgebrauch
Objektorientiertes Design
Aufmerksamkeit auf mögliche Parallelitätsprobleme
Schreiben von Testfällen für den Code
Haben Sie sich um eines dieser Dinge gekümmert, ohne es ausdrücklich zu erwähnen? Wie würde der Kandidat wissen, welche Sie interessieren und welche nicht?
Ein Interview ist eine höchst künstliche Umgebung. Der Interviewer versucht oft, den Kandidaten ein wenig "auszutricksen", um es dem Interviewten zu erschweren, ihm zu sagen, was er hören möchte, und der Interviewte versucht zu erraten, was der Interviewer wirklich will.
Im Allgemeinen ist es ziemlich anders, bei dieser Vermutung einen Fehler zu machen, als bei realen Designentscheidungen einen Fehler zu machen. Wenn Sie wissen möchten, ob jemand Dinge überarbeitet, müssen Sie wahrscheinlich über Design sprechen, anstatt sich eine sehr künstliche Codierungsübung anzusehen.
quelle
IMHO ist die Antwort eindeutig ja , es ist ein Warnzeichen, wenn
quelle
Nicht annähernd so groß wie ein Warnsignal, als das vorliegende Problem nicht zu lösen . Die Tatsache, dass er das Quiz nicht bestanden hat und nicht die richtige Lösung geliefert hat, ist ein Warnsignal. Dies ist nicht unbedingt ein No-Go-Szenario, da es davon abhängt, wie und warum er nicht die richtige Lösung bereitgestellt hat.
Oft ist die Frage komplett beschissen und einfach unbeantwortbar. Tun Sie nicht so, als würden Interviewer niemals Fehler machen. Es ist immer noch ein Misserfolg für ihn, herauszufinden, warum die Frage beschissen ist. Wenn Sie einen Ingenieur einstellen, von dem erwartet wird, dass er die Anforderungen erfüllt, ist dies ein Problem. Wenn Sie einen Coder einstellen, erwarten Sie einfach nicht, dass er das tut.
Vorausgesetzt, dass die Codierungsübung nicht schrecklich durcheinander ist, scheint es, dass die Art und Weise, wie er versagt hat, eine Fehlinterpretation des Problems war und ins Unkraut ging, um ein Problem zu lösen, das nicht da war. Ja, das ist ein Warnzeichen.
quelle
Vielleicht.
Das Problem nicht zu lösen ist natürlich ein klares Warnsignal dafür, dass etwas nicht stimmt. Was schief gelaufen ist? Entweder haben sie das Problem missverstanden oder sie haben eine schlechte Lösung gefunden. Eine schlechte Lösung für etwas Einfaches ist ein klares Zeichen dafür, dass der Kandidat arm ist.
Wenn Sie das Problem falsch verstanden haben, schauen Sie sich Ihre Anforderungen genau an. Sogar Dinge, die Ihnen kristallklar erscheinen, können für andere, die mit einer Domäne nicht vertraut sind, oder aus einem anderen Hintergrund (Gebietsschema, Alter, Erziehung) unklar sein. Wenn der Kandidat mit Ihnen im Raum war oder die Gelegenheit bot, Fragen zu stellen, und dennoch versagte, würde ich dies als ein Versagen ihrer Seite betrachten. Wenn die Anforderungen über die Mauer geworfen würden, würde ich ihnen wahrscheinlich den Vorteil des Zweifels geben (und darüber nachdenken, den Interviewprozess zu regeln).
Wenn die Lösung richtig war, wird es weniger klar. Persönlich denke ich, dass einige Leute YAGNI zu weit bringen. Wenn Sie ein bestimmtes Problem lösen und eine allgemeine Lösung erstellen können, ohne die Komplexität zu erhöhen oder die Wartbarkeit zu beeinträchtigen, warum dann nicht die allgemeine Lösung? (Denken Sie daran, einen String umzukehren oder eine Sammlung umzukehren.) Diese Art von "Überentwicklung" ist meiner Meinung nach eindeutig gut.
Alles andere ist dieser graue Mittelweg. Befasst sich die Lösung mit wahrscheinlichen Änderungsachsen? Fügt die Lösung Komplexität hinzu oder beeinträchtigt sie die Wartbarkeit? Ein wenig Komplexität hinzufügen, um zukünftige Probleme zu lösen, die fast garantiert zum Sieg führen. Die Wartbarkeit stark zu beeinträchtigen, um etwas zu erklären, das absolut unwahrscheinlich ist, ist es nicht.
Ein guter Softwareentwickler zu sein, bedeutet hier die richtige Balance zu finden. Ein guter Interviewer zu sein, bedeutet, das richtige Urteil / den richtigen Schluss zu ziehen, wie und warum der Kandidat dieses Gleichgewicht gewählt hat, und dabei oft andere Teile des Interviews zur Bewertung heranzuziehen.
quelle
Vielleicht aber folgendes beachten:
Interviews sind hart: Die Menschen stehen unter Stress. Dies sollte bei jedem Problem, das Sie jemandem geben, stark berücksichtigt werden
Anforderungslänge: Wie lang und unkompliziert sind die Anforderungen? Haben Sie sie besonders wortreich gestaltet, um sicherzustellen, dass Sie alles einschließen? Infolgedessen können sie für Sie klar sein, aber die Anforderungen können überentwickelt sein! Ich habe einmal pro Stunde ein Vorstellungsgespräch mit ca. 3 Seiten Text für ein relativ einfaches Problem geführt. Manchmal ist der gesamte Text in einem Interview schwer zu lesen und zu interpretieren und kann auch falsch interpretiert werden.
Manchmal ist weniger mehr: Ich hätte lieber ein paar Aufzählungspunkte, Sätze und / oder Beispiele, die die wichtigsten Anforderungen zeigen, und dann eine Diskussion mit jemandem, dem ich Fragen stellen und den ich bei Bedarf auf dem Weg erreichen kann. Ich denke, ich versuche zu sagen, dass Sie zuerst überprüfen sollten, ob Ihre Testanforderungen für ein einfaches Problem nicht übermäßig kompliziert sind.
Kommunikationsfähigkeit: Sie sollten die Fähigkeit der Kandidaten testen, zu kommunizieren und intelligente Fragen zu dem Problem zu stellen. Wenn Sie wissen, dass sie das Problem verstanden haben, können Sie sie auf ihre Implementierung hinweisen.
Fazit: Wenn Sie nicht überprüft haben, ob das Problem verstanden wurde, wissen Sie wirklich nicht, was Sie mit dem Over Engineering anfangen sollen. Wie andere gesagt haben, kann es gut oder schlecht sein, aber wenn Sie das Verständnis nicht überprüft haben oder nicht mit dem Kandidaten über das Problem im Vorfeld gesprochen haben, ist es schwieriger, dessen allgemeines Verständnis des Problems zu kennen und zu verstehen, was man daraus machen kann.
quelle
Ein Großteil davon könnte darauf zurückzuführen sein, wie Sie die Frage formulieren und wie Sie das gesamte Interview relativieren.
Es ist wie: "Mal sehen, wie kreativ Sie sind. Was ist 2 + 2?" Vier? Alles, was Sie sich einfallen lassen könnten, ist die einfachste, naheliegendste und genaueste Antwort? Junge / Einsteiger-Entwickler, die während eines Interviews so beeindrucken möchten, werden den Test "Wir möchten Ihre Codierfähigkeiten testen oder sehen, wie gut Sie als Programmierer sind." um "etwas sehr raffiniertes zu tun." Wir alle denken gerne, dass Einfachheit das Beste ist, außer wenn es die Dinge schwieriger macht.
Es gibt Möglichkeiten, um zu sehen, ob jemand dazu neigt, Dinge immer zu übertreiben. Geben Sie ein Codebeispiel für etwas, das zu komplex war, und fordern Sie eine einfachere Lösung an. Wenn jemand eine Lösung anbietet, von der Sie nicht glauben, dass sie funktioniert, ist dies eine großartige Gelegenheit, um zu sehen, wie er auf Kritik reagiert. Persönlich würde ich gerne sehen, dass jemand offen für neue Ideen ist und eine bessere Lösung erkennt als jemand, der immer wieder dieselben Fehler macht.
Und in Wirklichkeit haben wir nicht immer die Möglichkeit, unseren Code zu ändern, wenn er nicht funktioniert? Sie können anfänglich unter- oder überentwickeln. Sollte die Implementierung der einfachen Lösung nicht einfacher sein?
quelle
Kommt drauf an, aber generell nein.
Design im Allgemeinen ist eine Fähigkeit, die mit Erfahrung erlernt wird. Aaronaughts Beschreibung dieses von Marjan verknüpften Fortschritts ist im Allgemeinen gut.
Kommunikation in jeglicher Form hängt auch stark vom Kontext ab. Was als eins in einem Kontext völlig klar erscheinen mag, kann ebenso klar etwas anderes in einem anderen Kontext bedeuten. Zu wissen, welche Fragen gestellt werden müssen, ist auch eine Erfahrung.
Ihr Denkprozess und die Art und Weise, wie sie über ihre Entscheidungen urteilen, sind weitaus wichtiger als ihre Lösung. Ohne ihre Lösung und ihre Entscheidungen mit ihnen zu überprüfen, können Sie den Kontext, unter dem sie entwickelt wurde, nicht vollständig beurteilen.
In Anbetracht des obigen Fortschritts kann ein Kandidat mit der überentwickelten Lösung weiter als der Kandidat mit der einfachen Lösung sein.
Außerdem: Für welche Levelposition stellen Sie ein? Ein Überengineering eines Kandidaten auf Einstiegs- oder Mittelstufe ist weniger problematisch als ein Überengineering eines Kandidaten auf höherem Niveau.
quelle
Wenn der Programmierer das Problem nicht gelöst hat, ist der gesamte zusätzliche Code der Versuch des Codierers, die Nichtantwort zu verschleiern. Es ist die gleiche Technik, die bei einem Aufsatztest von einem Studenten angewendet wird, der nicht viel über das Thema weiß. Er oder sie wird über ein zwingendes, aber nicht verwandtes Thema streifen, in der Hoffnung, dass seine Ignoranz durch die Anzahl der Wörter maskiert wird.
Wenn der Programmierer das Problem gelöst hat, aber wesentlich mehr Code hinzugefügt hat, berücksichtigen Sie den Hintergrund des Programmierers, da in einigen Bereichen der Programmierung größere Toleranzen erforderlich sind als in anderen.
Zum Beispiel hat Code, der den Autopiloten in einem Passagierflugzeug ausführt, viel weniger Fehlertoleranzen als ein kostenloses Android-Spiel. Ein Entwickler, der es gewohnt ist, schwer zugängliche und kaum zu aktualisierende eingebettete Geräte zu programmieren, codiert in der Regel mehr Was-wäre-wenn als ein Entwickler, der 15 Aktualisierungen pro Tag veröffentlichen kann.
quelle