Als Teil des Interviewprozesses bitten wir die Kandidaten zunächst, 'FizzBuzz' zu machen. Heutzutage ist der Prozentsatz der Kandidaten, die FizzBuzz richtig beantworten können, dramatisch gestiegen - dies kann an seiner Popularität im Web liegen.
Vor ungefähr einem Jahr haben wir als zweite Frage begonnen, eine Frage zu stellen, die der ursprünglichen FizzBuzz sehr ähnlich ist. Die Frage sollte so einfach wie das ursprüngliche FizzBuzz sein und auch eine bestimmte Fähigkeit des Kandidaten bewerten, insbesondere die Fähigkeit, eine Reihe von "Geschäftsregeln", die in einigen bereitgestellt wurden, auf sinnvolle und logische Weise zu ordnen und zu priorisieren beliebige Reihenfolge. Der Wortlaut der Frage erscheint zunächst etwas mehrdeutig, was es für nicht englischsprachige Personen schwierig machen kann, aber wenn er durchdacht ist, kann er sie richtig lösen. Außerdem hat der Kandidat die Möglichkeit, Fragen zur Klärung zu stellen, was immer eine gute Sache ist .
Wir sind der Ansicht, dass dies eine sehr wichtige Fähigkeit für Entwickler ist, da die Softwareentwicklung in der Regel auf funktionalen Anforderungen basiert, die im Laufe der Zeit in keiner bestimmten Reihenfolge festgelegt werden und möglicherweise Einschränkungen und Bedingungen für andere Bereiche der Software mit sich bringen, ohne dies ausdrücklich anzugeben die Aufgabe des erfahrenen Entwicklers, zumindest potenzielle Probleme und Konflikte im Hinblick auf die Implementierung zu untersuchen.
Wir haben festgestellt, dass etwas mehr als 65% der Kandidaten (Stichprobengröße 38), die FizzBuzz bestanden haben, FizzBuzz v2.0 komplett nicht bestanden haben. Normalerweise werden diese Kandidaten später im Prozess erkannt, aber es scheint eine gute Möglichkeit zu sein, dies zu erkennen sie früh.
Meine Frage ist nicht, ob FizzBuzz veraltet ist oder nicht, sondern welche Faktoren dazu beitragen könnten, dass so viele Kandidaten die FizzBuzz v2-Frage nicht bestehen.
- Ist die Frage zu vieldeutig?
- Verringert der Stress in einer Interviewumgebung die Fähigkeit, kritisch zu denken, bis es nicht mehr möglich ist, eine so einfache Aufgabe zu erfüllen?
Frage:
Schreiben Sie eine Routine in Ihrer bevorzugten Programmiersprache, die eine Liste von Zeichenfolgen als Eingabe verwendet und für jede Zeichenfolge in der Liste eine der folgenden Aktionen ausführt:
- Drucken Sie nur Fizz aus, wenn die Zeichenfolge den Buchstaben A enthält
- Nur Buzz drucken, wenn der String den Buchstaben B enthält
- Gib nur BuzzBuzz aus, wenn der String sowohl A als auch B enthält
- Drucken Sie nur FizzFizz, wenn die Zeichenfolge nicht sowohl A als auch B enthält
- Drucken Sie nur FizzBuzz aus, wenn die Zeichenfolge nur ein A und nur ein B enthält
Einige typische Fragen der Kandidaten sind:
- Sollte die Groß- und Kleinschreibung beachtet werden?
- Bedeutet "enthält A und B", dass A vor B kommen sollte
- Was soll gedruckt werden, wenn keiner der Punkte erfüllt ist?
- Was soll passieren, wenn mehr als eine Bedingung erfüllt werden kann?
Wir haben festgestellt, dass die überwiegende Mehrheit der Kandidaten, die die Frage erfolgreich beantwortet haben, überhaupt nichts gefragt hat. Sie haben es einfach so gemacht, wie sie es mit FizzBuzz gemacht haben.
Antworten:
Es hat das Potenzial, ein viel besserer Test zu sein als FIZZBUZZ, aber wenn Sie ein Konzept für eine korrekte Antwort haben, ist es der schlechteste Test der Welt. Diese Tests haben in Interviews zunächst nur einen sehr geringen Wert.
Wenn ein Kandidat es "richtig" beantwortet, ohne eine Frage zu stellen, haben Sie ein Problem damit, dass die Kandidatenauswahl den falschen Programmierertyp auswählt. Er kann keine mehrdeutigen Anforderungen identifizieren oder nicht nachvollziehen, dass die meisten Leute keine eindeutigen Anforderungen schreiben können . Es spielt keine Rolle, ob das Programm in jeder Hinsicht technisch perfekt ist, es ist wahrscheinlich, dass er der Typ ist, der Software mit der Aufschrift "Es ist mir egal, was Sie nicht wollten, das ist es, wonach Sie gefragt haben" liefert.
Der Teil des Tests ist hier die Prioritätsreihenfolge der Regeln. Sie geben es nicht an. Die Eingabe "ABC" kann Fizz, Buzz, BuzzBuzz oder FizzBuzz drucken - jede dieser Angaben ist korrekt
Der Kandidat, den ich nehmen würde, ist derjenige, der es (größtenteils) richtig gemacht hat, aber viele Fragen gestellt hat und im Idealfall viel auf der weißen Tafel "herumgetobt" hat.
Zum Beispiel würde ich mein Verständnis dieser Anforderungen untersuchen, indem ich Ihnen eine Reihe von Mustertexten gebe und Sie frage, was Sie erwartet haben, gedruckt zu werden, und warum. - Die Diskussion über meine "ABC" -Beispieleingabe sollte zu einigen nützlichen Insites für Sie führen.
Genau wie bei FIZZBUZZ ist das Ergebnis dieses Tests nur so gut wie Ihre Beobachtungen darüber, wie das Ergebnis erzielt wurde - das Ergebnis ist irrelevant.
Ich würde es ein wenig optimieren - nur um es interessanter zu machen - das "Einzige" herausnehmen. Es wird in der obigen Zeile behandelt ("drucken Sie eine der folgenden Angaben aus") und sehen Sie, wie viele Personen danach fragen. Wenn der Kandidat das "Einzige" verpasst und Sie Zeit haben, machen Sie ihn darauf aufmerksam und sehen Sie, was passiert. Wenn er sich mit "nur" befasst, entfernen Sie es aus der Anforderung und veranlassen Sie sie, den Code zu ändern.
quelle
Das Wort "nur" in Ihren Anforderungen erzeugt in allen Fragen einen Widerspruch.
Wenn Ihre Frage die Anforderungen überprüft, die sich unter Druck stellen, sind Sie sicher, dass Sie diese Kombination von Fähigkeiten testen möchten?
Wenn Sie das Sammeln von Anforderungen testen möchten, würde ich vorschlagen, eine der Fragen nicht eindeutig zu formulieren. Wenn Sie einen Ersatz für FizzBuzz wünschen, beseitigen Sie die Mehrdeutigkeit.
Das Priorisieren von Geschäftsregeln ist nur mit domänenspezifischem Wissen möglich. Wenn Sie nicht einen einfachen Kontext für Ihre Aktivitäten angeben (möglicherweise handelt es sich um Gutscheine, die für verschiedene Werte eingelöst werden), kann der Entwickler keine eigene Entscheidung treffen.
Es ist jedoch möglicherweise nicht die beste Methode, jemanden um Klärung zu bitten, wenn dies ein erhebliches Risiko für unerwünschte Ergebnisse birgt, die Grenzen seines Wissens zu erkennen. Sie können sich vorstellen, dass es sicherer ist, zu raten und falsch zu verstehen, als darauf hinzuweisen, dass Sie nicht in der Lage sind, Anforderungen zu schreiben, oder wenn keiner der Interviewer Entwickler ist und als schlecht eingestuft wird.
quelle
Bei der Mehrdeutigkeit der Anforderungen kann man v2.0 nicht korrekt beenden, ohne Fragen zu stellen.
quelle
Wenn Sie Mehrdeutigkeiten beseitigen möchten, können Sie die Anforderungen wie folgt ändern:
Schreiben Sie eine Routine in Ihrer bevorzugten Programmiersprache, die eine Liste von Zeichenfolgen als Eingabe verwendet, und gehen Sie für jede Zeichenfolge in der Liste wie folgt vor:
quelle
Ja, die Frage ist zu vieldeutig, um ohne Klärung beantwortet zu werden. Eine zusätzliche Regel, die besagt, dass in Fällen, in denen mehrere Regeln gelten, Ihr Programm die spezifischste Sache auswählen und die Mehrdeutigkeit beseitigen sollte.
Es ist wahrscheinlicher, dass der Kandidat den FizzBuzz "stopft": Stress oder nicht, das Programm ist sehr einfach.
Ich denke, dass der modifizierte FizzBuzz nicht mit dem Original vergleichbar ist, da seine ideale Lösung anders ist: Obwohl eine Kette von
if-then-else
akzeptabel bleibt, denke ich, dass eine tabellenbasierte Lösung besser für dieses Problem geeignet ist:Die Größe des Problembereichs ist
3x3
nicht2x2
so groß , sodass die Zuordnung zu einer Tabelle wesentlich einfacher ist als beim ursprünglichen FizzBuzz. Tatsächlich finde ich eine tabellenbasierte Lösung für das ursprüngliche FizzBuzz-Problem schwieriger zu verstehen.quelle
Zwei Dinge hier:
quelle
Ich habe Interviewprozesse gesehen, die Programmierer dazu ermutigen, laut zu denken und Fragen zu stellen, um ihren Denkprozess zu sehen. Ich mag diesen Prozess besser.
Ich habe diesen Fizzbuzz v2.0 durchgelesen und dort nach den Anforderungen 3 und 5 gefragt. Ich kenne keine anderen Leute, aber ich finde, dass ich im Ingenieurwesen keine Mehrdeutigkeiten haben will, also stelle ich Fragen. Weil ich später (codiert und alles) nicht herausfinden möchte, dass ich eine Annahme machen musste und es falsch war.
quelle
Der einfachste Weg, um Mehrdeutigkeiten zu vermeiden, besteht darin, einige Beispiele zu zeigen:
"A" liefert "Fizz" "aAbA" liefert "Fizz" "B" liefert "Buzz" "aBbB" liefert "Buzz" "AB" liefert "FizzBuzz" "ABaabb" liefert "BuzzBuzz" "" liefert "FizzFizz" "ab "gibt" FizzFizz "zurück
quelle
Anstatt einem Kandidaten widersprüchliche / unklare Anforderungen zu stellen, fragen Sie ihn einfach, wie er mit diesen Situationen umgeht. Andernfalls lässt du dich inkompetent oder schlimmer aussehen, indem du kompetente Leute auf den trügerischen Balken stellst: "Wie bekomme ich die Antworten, die ich brauche, ohne zu implizieren, dass diese Interviewfrage oder die Person, die sie stellt, dumm ist?"
Wie auch immer, es ist ärgerlich, wenn man aussteigt. Interviews sind ein passender Prozess und damit meine ich eine Einbahnstraße. Direkte Fragen und klare Absichten sind viel wichtiger, als den Kandidaten unter einen Schnellkochtopf zu stellen, IMO. FizzBuzz ist ein gutes Beispiel für eine Codierungsfrage, da es kurz und bündig ist. Verwenden Sie es nicht direkt wieder. Schreiben Sie einfache Fragen wie diese, die diesem Modell folgen.
Aber für FFS werden Sie nicht schlau und verstecken Sie den eigentlichen Test hinter einem anderen Test. Fragen Sie einfach die Leute, wie sie mit dem verdammten Problem umgehen. Ein erfahrener Entwickler hat sich wiederholt mit mehrdeutigen Anforderungen befasst und teilt Ihnen gerne ihre Strategien mit. Sie könnten sogar etwas lernen.
Und nehmen Sie nicht an, dass jeder ein Whiteboard verwenden möchte oder über eine angenehme Handschrift verfügt. Einige von uns tippen seit ihrem 12. Lebensjahr (mit viel Dank an Space Quest). Ich kann nicht einmal mit einem Stift oder Stift in der Hand klar denken. Es ist 20-verdammt-13, was ist mit den Whiteboards schon? Wenn Leute mir Stift und Papier geben und mich bitten, einen Code-Test durchzuführen, ist es schwer, ein Lachen zu unterdrücken.
quelle
Ich finde es eine nette Interviewfrage. Die Anforderungen sind unklar, so wie sie oft in der Realität sind. Sie prüfen, ob der Kandidat intelligent genug ist, um dies zu erkennen (auch unter Stress), dass er keine Angst hat, Fragen zu stellen, die er für notwendig hält, und in der Lage ist, die Anforderungen in eine sinnvolle Struktur zu setzen. Und es sagt ein wenig über ihre Programmierfähigkeiten aus, obwohl Sie auch einige kompliziertere Probleme mit Rekursion und Zeigern aufwerfen sollten, da dieses Problem zu einfach ist.
Ich mache mir jedoch ein wenig Sorgen, dass die "erfolgreichen" Kandidaten keine Fragen stellen. Ich würde versuchen herauszufinden, ob sie realisiert haben, dass Sie in einigen Fällen bis zu 4 der Regeln anwenden können und dass es nichts in der Frage gibt, was diese Unklarheit lösen könnte, und sie erklären lassen, wie sie damit umgegangen sind. Vielleicht ist Ihre Frage nicht mehrdeutig genug, um sie zum Fragen zu zwingen, oder vielleicht sollten Sie sie zum lauten Nachdenken auffordern.
Übrigens: Ich finde es seltsam, dass Sie von einer "richtigen Lösung" sprechen. Wenn Sie die Frage so formulieren, ist es legitim, entweder "Fizz", "Buzz", "BuzzBuzz" oder "FizzBuzz" zu drucken, wenn Sie "AB" erhalten. Daher ist IMHO jede Lösung, bei der keine Fragen gestellt werden, einfach falsch.
quelle