In dem letzten Interview, an dem ich teilgenommen habe, wurde ich gebeten, ein Rätsel zu lösen, bei dem genau ein Liter Wasser gemessen werden sollte, vorausgesetzt, zwei Eimer mit einem Fassungsvermögen - ein Liter Wasser und ein Liter Wasser. Ich konnte das Rätsel in der vorgegebenen Zeit (~ 5 Minuten) nicht lösen.
Der Interviewer war etwas enttäuscht und sagte, dass ein Programmierer "diese" Fähigkeiten haben muss. Ich habe nicht verstanden, über welche Fähigkeiten er sprach.
Ich war schon immer fremd in Bezug auf diese Art von Rätseln, die normalerweise bei der Programmierung von Vorstellungsgesprächen gestellt werden. Ich verstehe nicht, was, wenn überhaupt, die Verbindung zwischen solchen Rätseln und Programmierung ist. Welche Fähigkeiten wollen Interviewer mit solchen Rätseln genau einschätzen?
Antworten:
Einige Leute fragen sie, um festzustellen, ob Sie in der Lage sind, Probleme zu lösen. Persönlich glaube ich nicht, dass solche Rätsel einen genauen Indikator liefern. In der „realen Welt“, haben Sie mehr als fünf Minuten , um herauszufinden , ob Ihr mit einem Umgang bin Verpackung vs einem Tornister Problem, zum Beispiel. Anfänglich ist es manchmal leicht, das vorliegende Problem zu missverstehen, bis Sie die falsche Lösung anwenden. Das passiert Menschen mit 1, 5, 10 oder sogar 20 Jahren Erfahrung.
Die besten Interview-Rätsel sind diejenigen, bei denen Sie sich an einen Computer setzen, um ein Problem in dem Bereich zu lösen, in dem Sie Fachwissen beanspruchen. Ich mag auch nicht das Denken "Nun, ein Programmierer sollte in der Lage sein ...", weil es nicht berücksichtigt, dass Menschen Angst bekommen, wenn sie in einer ohnehin schon stressigen Umgebung mit etwas Unerwartetem getroffen werden. Sicher, Sie könnten das lösen, wenn Sie Zeit hätten, darüber nachzudenken. Und vielleicht könnten Sie es schneller lösen, wenn Sie erkennen würden, dass Ihr Leben vorbei wäre, wenn Sie es nicht tun. Möchten Sie irgendwo arbeiten, wo Ihr Leben zu Ende ist, wenn Sie Probleme nicht in fünf Minuten lösen können ? Wirst du gefeuert, wenn du nicht kannst ?
Sollten alle großen Programmierer auch Sudoku-Meister sein? Ich bin mir sicher, dass es eine Menge gibt, aber es ist keine Grundvoraussetzung für Kompetenz.
Ich sage nicht, dass Sie nicht darauf getestet werden sollten , wie Sie Probleme angehen, aber die Tests sollten Spaß machen und das "Beste" einladen, das der Bewerber angesichts seines Fachwissens zu geben hat. Zu beweisen, dass Sie so klug sind wie eine Figur, die Bruce Willis porträtiert, erscheint irgendwie sinnlos, wenn man bedenkt, dass die Produzenten eine hübsche Summe ausgegeben haben, um diese Szene genau richtig zu machen.
Mit anderen Worten, wenn Sie feststellen, dass Sie von jemandem interviewt werden, der wenig Ahnung davon hat, was Sie tatsächlich tun , entschuldigen Sie sich, dass Sie auf die Toilette gehen und niemals zurückkehren.
quelle
excuse yourself to go to the restroom and never return
!Microsoft begann diese Fragen in den frühen 1980er Jahren zu verwenden. Als Microsoft bemerkenswert erfolgreich wurde, begannen andere Unternehmen, sie zu kopieren, aber einige wichtige Punkte gingen bei der Übersetzung verloren.
Zu der Zeit versuchte Microsoft, eine Menge technischer, aber nicht programmierbarer Positionen zu besetzen: Technische Redakteure, Tester, telefonischer Support usw. Diese Jobs waren früher nicht üblich, und Leute mit tatsächlichen Erfahrungen in diesen Bereichen waren schwer zu besetzen finden. Als Alternative dachte Microsoft, sie könnten wirklich kluge, kluge und flexible Leute einstellen und sie im Job ausbilden. Da diese Leute keinen Programmierhintergrund hatten, war es sinnlos, ihnen im Interview Programmierfragen zu stellen. Die Rätsel wurden ausgewählt, um Leute zu identifizieren, die klug waren und außergewöhnlich gute analytische Fähigkeiten besaßen. Programmierer bekamen im Allgemeinen Probleme mit der Programmierung von Whiteboards, obwohl ihnen beim Mittag- oder Abendessen möglicherweise auch Rätsel gestellt wurden.
Diese Fragen sollten niemals bestanden-nicht bestanden werden. Sie sollten den Beginn eines Gesprächs darüber darstellen, wie Sie das Problem angehen und wie Sie über Probleme nachdenken, die Sie noch nie zuvor gesehen hatten. Der einzig sichere Weg zum "Scheitern" war, sich zu weigern, das Problem zu lösen. Zu der Zeit war dies eine neuartige Strategie, und Sie konnten die Fragen nicht einfach bei Google nachschlagen.
Bearbeiten:
Irgendwann nach dem Schreiben dieser Antwort las ich The Computer Boys Take Over , eine Geschichte des institutionellen Rechnens in den 1950er und 1960er Jahren. Offensichtlich reicht die Praxis, Rätsel und Denksportaufgaben zu lösen, bis in die 1950er-Jahre zurück. Die USA versuchten, ihr Luftverteidigungssystem zu computerisieren, und IBM schätzte, dass sie mehrere tausend Programmierer benötigen würden, um die Arbeit zu erledigen. Die Antwort war Schock und Bestürzung: Es gab nur ein paar Dutzend "professioneller Programmierer" auf der ganzen Welt. Es wurden verschiedene Ansätze ausprobiert: abstrakte Programmierfähigkeitstests, Rekrutierung von Mathematikern als Programmierer, Rekrutierung von Schachspielern und Kreuzworträtsellösern und Überprüfung von Bewerbern mit Rätseln und Denksportaufgaben.
Es gelang ihnen schließlich, genügend Programmierer zu rekrutieren, um das Projekt abzuschließen, aber die Schlussfolgerung war, dass keine der Screening-Methoden besser war als der Zufall, die Rekruten zu identifizieren, die als Programmierer besonders erfolgreich waren.
quelle
Sind sie nützlich Nein nicht wirklich. Früher waren sie bei Microsoft so verbreitet, dass sie sogar als "Microsoft-Fragen" bezeichnet wurden, und es wurden Bücher darüber geschrieben. Diese sind eigentlich ziemlich gut zu lesen.
Es gibt 2 Probleme mit ihnen. Erstens, wenn der Bewerber recherchiert (und das Buch liest), kennt er sie trotzdem und zweitens, selbst wenn er sie lösen kann, wie zeigt das, dass das ein guter Entwickler / Test / PM sein wird.
Aus diesen Gründen werden sie bei Microsoft nur noch selten gefragt. Es ist weitaus besser, Codierungsfragen oder Fragen zur Problemlösung zu stellen, für die keine "Trick" -Antwort erforderlich ist. Mit anderen Worten, Sie müssen Fragen stellen, mit denen Sie die Fähigkeiten und das Verhalten des Bewerbers untersuchen können, während dieser versucht, das Problem zu lösen. Als Interviewer möchte ich, dass er Fragen stellt, Lösungen findet und dann zurückverfolgt, wenn er es herausfindet ein Problem, vielleicht nicht einmal eine Lösung in der Zeit, die sie haben, aber zumindest auf vernünftige Weise zu gehen. Das spiegelt die Arbeit im wirklichen Leben wider. Ich musste noch nie 3 Pints mit 2 Eimern und einem Huhn messen (oder was auch immer die Frage war).
Trotzdem wurden mir in meiner Zeit einige Trickfragen gestellt, und ich betrachte mich jetzt als Experte für den Transport von Hühnern und Füchsen in kleinen Booten und die Berechnung der Lebensdauer einer Fliege, die in einem Zug lebt. Ich musste diese Informationen nie verwenden, aber wer weiß, vielleicht eines Tages ...
quelle
Vielleicht möchten Sie das Buch lesen. Wie würden Sie den Fuji bewegen? . Es wird argumentiert, dass viele Leute beim Interview Rätsel verwenden, und meiner Meinung nach handelt es sich um eine Kombination aus Frachtkult-Verhalten ( "Microsoft macht es, und wenn wir so erfolgreich sein wollen, wie sie es sind, dann tun wir besser, was sie tun do " ) und fraternity hazing ( " by gosh !, ich musste diese Fragen beantworten und du glaubst besser, der nächste Typ muss sie beantworten! " ).
Die Geschichte dieser Fragen als Interviewpraxis begann mit William Shockley in den 1950er Jahren. Es handelte sich um eine ziemlich häufige Frage, die Interviewer im Silicon Valley stellten, weil andere Interviewer es taten (und wussten sie vielleicht etwas, das dieser Interviewer nicht wusste?). Shockley beabsichtigte sie als Intelligenztest, und die Frage mit den 2 Eimern bezog sich auf einen der ursprünglichen Stanford Binet IQ-Tests im Jahr 1916.
Möglicherweise möchten die Befragten wissen, wie Sie nach Antworten suchen, sodass sie keine Möglichkeit haben, Fragen zu berechnen, z. B. wie viele Zapfsäulen in Ihrer Stadt vorhanden sind. Diese Art von Problemen sind Fermi-Probleme . Zwei interessante Blogposts von Jeff zu diesem Thema sind The Hardest Interview Puzzle Question Ever und How Good an Estimator are You? Teil III .
Persönlich habe ich eine geringe Meinung zu solchen Fragen, da sie im Allgemeinen von Interviewern verwendet werden, die nicht wissen, was sie tun oder wie sie nach Entwicklern suchen sollen. Wenn Sie nicht für eine Firma arbeiten, die Rätsel macht, gehören sie zusammen mit "Was ist Ihre größte Schwäche?" (Beantworten Sie die Wahrheit und beenden Sie Ihr Interview auf eine schlechte Art und Weise) oder "Warum" auf den Müllhaufen der Geschichte sind Kanaldeckel rund "(nicht alle).
quelle
Andere haben Antworten gegeben , die ich als eine Angelegenheit von upvoted haben muss . Der Grund, warum ich eine andere Antwort schreibe, ist, dass das, was ich sagen möchte, wahrscheinlich nicht in einen Kommentar passt und dass etwas darüber gesagt werden muss, wie ein gutes Programmier-Vorstellungsgespräch aussehen kann.
In dem ersten guten Interview, an das ich mich erinnere, haben wir viel geredet, ohne es eilig zu haben. Zunächst eine Stunde telefonisch über objektorientiertes Design und die Vor- und Nachteile der Implementierung in C ++. Vor Ort sprach ich dann mit mehreren Personen über ihre Softwareentwicklungspraktiken, Integration, Tests, Versionskontrolle und Konfigurationsmanagement, über Teams und Verantwortlichkeiten, über Technologie und über Design. Es war ein ganztägiges Interview, das das Mittagessen mit den Leuten beinhaltete, die mich interviewt haben. Im Nachhinein ging es darum, ob ich produktiv in das hineinpassen würde, was sie bereits taten.
Seitdem waren die guten Interviews alle lang, ein bis zweistündige Gespräche über Softwareentwicklung. Es gab keine Fragen zur Problemlösung, keine Rätsel und keine Herausforderungen beim Programmieren.
Wenn ich heute jemanden für einen Programmierjob interviewen würde, würde ich in etwa so vorgehen. Ich fordere Meinungen zu einer Vielzahl von Themen an und lasse die Tiefe beiseite:
Das sind Fragen mit mehr als einer Antwort, und es geht um Themen, zu denen ein Softwareentwickler eine fundierte Meinung haben sollte. Ich stimme voll und ganz den Antworten zu, in denen die bisherigen realen Probleme als Gesprächsthema erwähnt werden (nicht als Fragen).
Die wissenschaftlicheren Studien über effektive Softwareentwicklung seit Peopleware besagen, dass die besten Programmierer diejenigen sind, die die Dynamik der Softwareentwicklung verstehen, auch wenn sie nicht die höchsten IQs haben. Ich würde lieber einen Anfänger nehmen, der lernbegierig ist, als jemanden mit
n
jahrelanger Erfahrung, die sich auf ein1
Jahr wiederholter Erfahrungen beschränktn
. Meine persönliche Vorliebe gilt Kandidaten, die dazu neigen, über den Tellerrand hinaus zu denken und gleichzeitig zu wissen, wie sie in die aktuelle (meine) Box passen.quelle
Sie können bei der Beurteilung von Fähigkeiten zur Problemlösung hilfreich sein , was natürlich einer der Schlüsselaspekte der Programmierung ist.
Als Interviewer vieler Menschen im Laufe der Jahre stelle ich normalerweise keine Fragen vom Typ Gotcha , wie Sie sie zu beschreiben scheinen, aber ich frage vielleicht etwas und frage: "Wie würden Sie das lösen?".
Ich erwarte in diesem Fall, dass Sie Ihre Herangehensweise an das Problem artikulieren. Welche anderen Daten würden Sie versuchen zu sammeln? Wie würden Sie Ihre Hypothesen usw. testen?
quelle
Dies sind nur Voodoo-Einstellungsmethoden. Andere Leute stellen diese Fragen, damit sie das Gefühl haben, dass sie es sollen. Sie wissen, dass die Nichtbeantwortung der Frage "schlecht" und die Beantwortung "gut" ist, aber sie können Ihnen nicht sagen, warum nicht Antworten wie "ein Entwickler diese Fähigkeiten benötigt". Sie sind Zeitverschwendung und ein Indikator dafür, dass der Interviewer kein kompetenter Interviewer ist.
quelle
Das ist das Old-Skool-Rational, dass Sie grundlegende logische Fähigkeiten haben müssen; alles andere kann gelehrt werden. Das stimmt aber nicht ganz. Das Lesen von Boolescher Logik , Bedingungen und Schleifen ist nicht dasselbe wie das Lösen eines logischen Puzzles .
Das heißt, in den Tagen der Verfahrenssprachen war es wahrscheinlich wahr, dass jemand, der diese Probleme lösen konnte, eine höhere Neigung hatte, ein Problem in Bezug auf Schalter anwenden zu können. Meines Erachtens erfordert OO / Functional Programming jedoch eine ganz andere (wenn auch nicht widersprüchliche) technische Denkweise.
Persönlich bin ich mir nicht sicher, ob ich einen Job bei einem Unternehmen haben möchte, bei dem Logik noch wichtiger war als praktische Programmierkenntnisse.
Haftungsausschluss: Ich bin sehr gut in logischen Rätseln und hätte ohne diese Rationalität wahrscheinlich nicht in dieser Branche angefangen.
quelle
Der Interviewer muss sich auf Problemlösungs- und Logikfähigkeiten bezogen haben, die Teil der täglichen Arbeit eines Programmierers sind. Wenn Sie ein Problem erhalten, müssen Sie es analysieren, unterteilen und eine Lösung dafür schreiben können, indem Sie den optimalsten Ansatz verwenden.
Sie könnten sich darüber streiten, wie gut ein solches Puzzle Ihre Fähigkeit darstellt, dies zu tun. Ich sehe nicht den Vorteil, eine Puzzle-Frage zu stellen, anstatt nur ein echtes Programmierproblem zu stellen.
quelle
Beim Programmieren geht es nicht darum, Codezeilen zu schreiben, sondern Probleme für und von anderen Personen (Kunden, Benutzer usw.) zu lösen.
Es kommt vor, dass die Lösung für Programmierer die Form eines Programms hat.
Aus diesem Grund ist es wichtig, über Fähigkeiten zur Problemlösung zu verfügen, und warum diese getestet werden.
Abgesehen davon bin ich mir nicht sicher, ob das Lösen von kniffligen Rätseln die beste Möglichkeit ist, jemanden zu bewerten.
quelle
Rätsel in Interviews lassen sich in zwei Kategorien unterteilen: "Logische Rätsel" (wie die, nach denen Sie gefragt wurden) und "Anders denken". Die Kategorie "Anders denken" (ich bin mir nicht sicher, ob sie auch als Seitenpuzzles bezeichnet werden) lautet normalerweise wie folgt: Wie viele Blätter gibt es in diesem Baum? oder Wie viele Schneider gibt es in Ihrer Stadt?
Ich bin in Ordnung mit "Logischen Rätseln", weil sie höchstens eine oder vielleicht zwei Lösungen haben und durch einfache Logik gefunden werden können. Und ich glaube, dass logische Rätsel in gewissem Maße gut sind, weil der Prozess, der zu ihrer Lösung benötigt wird, genau so ist, wie ein Programmierer es im wirklichen Leben denken muss.
Die Art "anders denken" nervt mich ohne Ende, weil sie Sie dazu zwingt, Annahmen zu treffen und dann einige Berechnungen basierend auf den Annahmen durchzuführen. Einfach ausgedrückt, wenn Ihr Interviewer mit Ihrer Logik einverstanden ist, aber nicht mit Ihren Annahmen, oder umgekehrt, haben Sie verloren. Der Interviewer hat zu viel Platz, um mit Ihrer Lösung nicht einverstanden zu sein.
Wenn ich Interviews mache, stelle ich keine logischen Rätsel. Grund: Die meisten Kandidaten, auch diejenigen mit 3-4 Jahren Erfahrung, scheitern oder geben auf, wenn ich sie auffordere, einfache Lehrbuchprobleme wie Fibonacci-Reihen oder Palindrome zu kodieren.
Das Problem mit Rätseln ist, dass die nicht so guten Programmierer wissen, dass sie Interviewer beeindrucken können, wenn sie nur nach Lösungen für solche häufigen Rätsel im Netz suchen. Sehr wenige Leute werden ehrlich genug sein, um zu sagen, dass sie die Lösung bereits kennen.
quelle
Zwei Punkte:
Das Programmieren unterscheidet sich hauptsächlich vom Lösen von Rätseln. Es wird von Steve McConnell bei "Code Complete" erklärt:
Was? Sie müssen nicht superintelligent sein? Nein, tust du nicht. Niemand ist wirklich schlau genug, um Computer zu programmieren. Um ein durchschnittliches Programm vollständig zu verstehen, ist eine nahezu unbegrenzte Fähigkeit erforderlich, Details aufzunehmen und sie alle gleichzeitig zu verstehen. Die Art und Weise, wie Sie Ihre Intelligenz fokussieren, ist wichtiger als Ihre Intelligenz. Wie in Kapitel 5 erwähnt, lieferte Edsger Dijkstra 1972 auf der Turing Award Lecture einen Artikel mit dem Titel „The Humble Programmer“ (Der bescheidene Programmierer). Er argumentierte, dass der größte Teil der Programmierung ein Versuch sei, die streng begrenzte Größe unserer Schädel auszugleichen. Die Leute, die am besten programmieren, sind die Leute, die erkennen, wie klein ihr Gehirn ist. Sie sind bescheiden. Die Leute, die am schlechtesten programmieren, sind die Leute, die sich weigern, die Tatsache zu akzeptieren, dass ihr Verstand der Aufgabe nicht gewachsen ist. Ihr Ego hindert sie daran, großartige Programmierer zu sein. Je mehr duLernen Sie, Ihr kleines Gehirn zu kompensieren, je besser Sie ein Programmierer sind . Je demütiger du bist, desto schneller wirst du dich verbessern.
Solche Rätsel können während des Interviews nützlich sein, aber nur wenn der Interviewer auf den Prozess schaut , ergibt sich nichts.
Aber meiner Meinung nach sollten die Rätsel im Idealfall komplizierter und programmierbezogener sein (wie ein kleines zweistündiges Projekt). Die Sache ist, dass Interviewer Menschen sind und keine perfekten "Interviewfähigkeiten" haben.
quelle
Es gibt verschiedene Möglichkeiten, solche Probleme zu untersuchen:
Kenntnis einer früheren Lösung. Im Film ... Stirb hart mit Rache ... erkläre mir das ...? Dies ist ein Beispiel, um eine Lösung für den Fall zu finden, dass die Blahs 4,3 und 5 sind. Einige Personen können schnell auf ihr internes Wissen über eine frühere Lösung zugreifen und es bei Bedarf anpassen. Dies ist normalerweise das, was ein Interviewer meiner Meinung nach erwarten würde, was eine gute Idee sein kann oder nicht.
Kreative Improvisationsfähigkeiten. Dies ist der Fall, wenn Sie keine vorherige Lösung kennen oder das Problem gar nicht als etwas erkennen, das man als diophantinische Gleichung modellieren könnte. Die Frage ist also, wie schnell Sie das Gegebene verwenden und auf kreative Weise eine Lösung für das Problem finden können, und warum das, was Sie haben, eine gültige Lösung für das Problem ist.
Beides könnte sein, was einen zufriedenstellend über die Frage hinaus bringt, obwohl es in jedem Fall auch einen kleinen Test der eigenen Kommunikationsfähigkeiten gibt, da man auch versuchen könnte, zu antworten: "Ist das wirklich relevant für die Position, die ich bin? Wann wurden diese Fähigkeiten zuletzt eingesetzt? " das kann zu einem interessanten dialog führen, wenn der interviewer darüber spricht, was genau er sehen möchte, dass ein alternativer ansatz hier möglicherweise als effektiver angesehen werden könnte.
quelle
Es ist kein besonders schwieriges Problem. Es sind nur drei Schritte erforderlich, und bei jedem Schritt stehen nur zwei Auswahlmöglichkeiten zur Verfügung. Es würde mich wundern, wenn einer meiner Kollegen es nicht in sehr kurzer Zeit lösen könnte. In Interviews stellen wir solche Probleme nicht vor, aber ich halte es für vernünftig, solche Fragen zu stellen. Sie sind sicherlich nützlicher als detaillierte Fragen zur Syntax oder zu Bibliotheken.
OTOH, ich denke, dass Programmierprobleme nützlicher sind.
quelle
Sie müssen bedenken, dass es keine Möglichkeit gibt, mit absoluter Sicherheit zu wissen, dass jemand in einem Job gut ist. Insbesondere ein CS-Job kann nicht vorhergesagt werden, da viele Herausforderungen, die der Job für Sie bereithält.
Der potenzielle Arbeitgeber muss also Ihre zukünftige Leistung erraten.
Abschlüsse, Empfehlungen und GPAs können mit Zeit / Mühe und Social Engineering erhalten werden, Arbeitserfahrung kann verschönert und / oder falsch sein, und standardisierte Tests sind offen gesagt zu grundlegend, um allzu aussagekräftig für Fähigkeiten zu sein. Der Lebenslauf gibt also möglicherweise einen Hinweis auf den Aufwand / das Engagement in Ihrer Geschichte, aber nichts davon spricht für Ihre tatsächliche Fähigkeit, schwierige Probleme zu lösen, die in der Welt der Informatik auftauchen. Ich kann mir keinen besseren Weg vorstellen, diese Art von Fähigkeit vorherzusagen, als ein paar gute Logik-, Mathematik- und CSy-Rätsel.
Denken Sie daran, es ist ein Ratespiel, und die Realität sieht so aus, als würde jeder von uns lieber jemanden einstellen, der in der Lage ist, diese Rätsel zu lösen, als einen, der es nicht kann.
Ja, Sie könnten Interview-Rätsel lernen, aber ich denke, Sie werden sich verbrannt fühlen, wenn das gegebene Rätsel nicht mit dem übereinstimmt, das Sie lernen ... und solange Sie sich die Rätsel und ihre Lösungen nicht merken, studieren Sie vielleicht die Rätsel selbst werden Sie in einer realen Weise zu einer intelligenteren Person machen, wie es bei jeder realen Ausbildung der Fall sein sollte.
quelle