Sollte ich die Antwort auf eine nicht bestandene Interview-Codierungsübung geben? [geschlossen]

14

Wir hatten einen Senior-Level-Interviewkandidaten, der eine Nuance der FizzBuzz-Frage 1 2 nicht bestand .
Ich meine, die Frage ist wirklich völlig gescheitert - nicht einmal knapp.
Ich habe ihn sogar dazu gebracht , über die Verwendung einer Schleife nachzudenken, 3und das war 5es wirklich wert, als Sonderfall in Betracht gezogen zu werden.

Er hat es vermasselt.

Nur zu Qualitätssicherungszwecken habe ich drei Teamkollegen die gleiche Frage gestellt. gab ihnen 5 Minuten; und kamen dann zurück, um ihren Pseudocode zu sammeln. Sie alle haben es verstanden und hatten die Frage noch nie gesehen. Zwei fragten, was der Trick sei ...

In einer anderen Logikübung zeigte der Kandidat ein gewisses Verständnis für einige der in der von ihm gewählten Sprache verfügbaren Funktionen (C #). Es ist also nicht so, als hätte er niemals eine Codezeile geschrieben. Aber seine Logik stank immer noch.

Meine Frage ist, ob ich ihm die Antwort auf die logischen Fragen hätte geben sollen.

Er wusste, dass er sie gesprengt hatte und bestätigte es später im Interview.
Andererseits hat er nie nach der Antwort gefragt oder was ich erwartet hatte.

Ich weiß, dass Codierungsübungen verwendet werden können, um Kandidaten auf einen Misserfolg vorzubereiten (siehe auch den zweiten Link von oben). Und ich habe wirklich versucht, ihm dabei zu helfen, den Kern der Frage zu beantworten. Aber dies war ein Kandidat auf hoher Ebene und Fizz-Buzz ist, ehrlich gesagt, lächerlich einfach, selbst nachdem Interview-Jitter berücksichtigt wurden.

Ich hatte das Gefühl, ich hätte ihm einen Weg zeigen sollen, das Problem zu lösen, damit er zumindest aus der Erfahrung lernen konnte. Aber er hat nicht gefragt.

Was ist der richtige Weg, um mit dieser Situation umzugehen?


1 Okay, das ist nicht der Link zur eigentlichen FizzBuzz-Frage, aber es ist eine gute P.SE-Diskussion über FizzBuzz und Links zu den verschiedenen Aspekten davon.

2 Zur Verdeutlichung: Dies ist die Nuance von Fizz-Buzz, die ich gefragt habe und die aus dem ersten Problem von Project Euler stammt . Ersatzdruck Fizz | Buzz für die Summierung der Zahlen und Sie haben die gleiche Grundfrage.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Write a function that finds the sum of all the multiples of 3 or 5 below 1000.

3 Diese Frage hat mehr Aufmerksamkeit erregt, als ich erwartet hatte, und ich schätze alle Antworten. Einige der späteren Antworten sind wirklich auf den Kern meiner Frage eingegangen, daher werde ich der Community erlauben, die Antwort zu überprüfen und zu bewerten, bevor sie "die" Antwort zuweist.

4 Ich habe die Antwort basierend auf den Abstimmungen der Community zu diesem Zeitpunkt ausgewählt. Und ich denke, die Antwort von Yannis eignet sich für Interviews mit neueren Entwicklern. Ich denke, die kollektive Antwort, die sich darauf konzentriert, nicht nach der Antwort zu fragen, ist ebenfalls genau richtig.

Gemeinschaft
quelle
34
Schneiden Sie sie los und fahren Sie mit Ihrem Tag fort. Aus meiner Sicht ist es eine absichtliche und böswillige Verschwendung meiner Zeit, FizzBuzz auf der "höheren Ebene" nicht zu bestehen.
Steven Evers
6
Ich habe kürzlich mehrere Stellen in meinem Gebiet befragt, und diejenigen, die Code benötigten, zeigten mir, dass sie Probleme hatten, Bewerber auf hoher Ebene zu finden, die ihre eigenen "FizzBuzz" -ish-Tests bestehen konnten. In jedem Fall war meine Reaktion "Sie können nicht ernst sein". Es gibt anscheinend eine Menge schrecklicher Programmierer, die sich als Senioren ausgeben und nicht einmal nahe stehen.
Joel Etherton
6
@JoelEtherton - Gleiches hier. Ich habe überall auf Handybildschirme gedrängt. Wenn Sie sich mit C # als Senior bewerben und keinen Unterschied zwischen einem Wertetyp und einem Referenztyp feststellen können, erhalten Sie kein Interview.
Telastyn
3
@ 0A0D Ein Team zu führen ist eine andere Art von Fähigkeit als ein guter Entwickler zu sein. Ich habe Teamleiter gesehen, die auch schlechte Entwickler waren.
Kyralessa
4
@ JoelEtherton, handeln Sie nicht überrascht. Ich dachte, "199 von 200 Bewerbern können nicht codieren" war nur eine Übertreibung, bis ich anfing, Kandidaten beim Screening und beim Interview zu helfen. Jahrelange (angebliche) Erfahrung spielt einfach keine Rolle. Berufsbezeichnungen spielen keine Rolle. Die meisten Bewerber sind in der Tat unglaublich jünger, ob sie es wissen oder nicht.
Anthony Pegram

Antworten:

15

Die meisten meiner Interviews wurden mit Studenten geführt, die nach einer Praktikumsstelle suchten, und meistens haben sie einfache (?) Übungen vermasselt. Ich wollte eine einfache und freundliche Art und Weise, ihre Fehler zu kommunizieren, und was mir einfiel, war ganz einfach: Ich löste die Übungen selbst und zeigte ihnen meine Lösungen, nachdem sie mit ihnen fertig waren.

Ich hatte einige äußerst interessante und aufschlussreiche Diskussionen mit Kandidaten, die mit dem Vergleich unserer verschiedenen Ansätze zur Lösung des gleichen Problems begannen. Nach einer Weile habe ich sogar einige Fehler vorweggenommen, indem ich einfach nachgesehen habe, welche Schule der Kandidat besucht hat (einige "Professoren" sind ... Idioten). Und in den wenigen Fällen, in denen ein Kandidat keine Lösung finden konnte, hatte ich ihm bereits eine für das nächste Mal gegeben.

yannis
quelle
Macht Sinn; Ich habe vor kurzem nach einem neuen Job gesucht und festgestellt, dass die meisten Interviewer dasselbe getan haben, als ich auf ihre Fragen falsche Antworten (oder etwas "falsche Antworten") gegeben habe. Dies ist eine wirklich gute Praxis. Vor allem, weil es den Kandidaten (z. B. mich) öffnet und das Interview von beiden Seiten ansprechender macht. Aber wir haben natürlich über Templates, RAII und Multithreading in C ++ gesprochen. Die Frage ist, was sagen Sie zu einer Person, die Fizzbuzz nicht lösen kann?
Chani
11
@RitwikG Ehrlich gesagt, wenn der Kandidat ein Interview für eine Programmposition führt und mit Fizzbuzz nicht zurechtkommt, würde ich wahrscheinlich ... lachen (hey, ich habe nie gesagt, dass ich ein guter Interviewer bin ;). Vor ein paar Monaten verlor ich ungefähr ein paar Tage im Kampf gegen einen extrem trivialen OBOE in meinem Code. Wir haben alle unsere Pausen, und ich würde mich nicht wirklich darauf konzentrieren, dass der Kandidat eine Übung durcheinander bringt. Wahrscheinlich würde ich schnell zur nächsten übergehen. Wenn sie auch das nächste Mal versagten, würde ich ihnen wahrscheinlich für ihre Zeit danken und weitermachen.
Yannis
1
@YannisRizos Das ist wahrscheinlich ein guter Ansatz; Es besteht immer die Möglichkeit, dass die Person in Interview-Situationen nicht gut abschneidet oder die Modulo-Operation in ihrer Arbeit irgendwie vermieden hat (obwohl das gelinde gesagt nicht gut ist). Nach meiner Erfahrung ist eine beträchtliche Anzahl von Bewerbern ratlos, wenn sie aufgefordert werden, eine einfache Schleife (in einer Sprache ihrer Wahl) zu schreiben, auch für leitende Positionen. Nun , dass finde ich völlig unmöglich zu rechtfertigen.
Daniel B
Das ist auch ein guter Einblick in den Prozess. Der Kandidat war verständlicherweise nervös, und ich war mehr als bereit, dies zu berücksichtigen. Als er endlich anfing, über seinen Lösungsversuch zu sprechen, war er nur verworren und schuf Randbedingungen, die er verpasste.
15

Die Antwort geben

Ich wollte sagen, wenn der Kandidat nicht interessiert genug ist, um zu fragen, würde ich meinen Atem nicht verschwenden, aber @Yannis_Rizos Antwort ist viel besser.

Interviews sind ziemlich schnelllebig. Ich weiß, dass ich nach einem Interview oft tagelang nachschaue.

Leute, die FizzBuzz Classic nicht codieren können

Ich stelle mir vor, dass ein großer Knackpunkt darin besteht, den% -Operator zu kennen. Sie würden hoffen, dass jemand darüber nachdenken könnte, es zu vergleichen, (myInt / 3) == (myDouble / 3.0)aber vielleicht mit dem Stress eines Interviews ... Dennoch erzwingt FizzBuzz Classic einen Brute-Force-Ansatz und ordnet ihn in die Kategorie der am einfachsten zu lösenden Algorithmusprobleme ein. Haben Sie als Hinweis versucht, die Leute zu bitten, nur "Fizz" für die Hälfte des Guthabens zu codieren und "Buzz" später als Verbesserung hinzuzufügen?

Ich denke, die ultimative Antwort auf Ihre Frage ist, dass es wirklich schwierig ist, gute Kandidaten zu finden.

Interview-Fragen im Allgemeinen

Ich fand es oft einfacher und produktiver, die Kandidaten zu bitten, das letzte Programmierprojekt zu beschreiben, von dem sie begeistert waren. Ich hatte 100% Erfolg mit dieser Frage, was bedeutet, dass Leute, die lebhaft über ein Programmierprojekt sprachen und technische Fragen dazu beantworten konnten, großartige Angestellte waren und diejenigen, die es nicht konnten, auch nicht. Dies hat die netten Nebenwirkungen, den Kandidaten zu beruhigen und eine offene Diskussion anzuregen. Mit dieser Frage teilt Ihnen der Kandidat im Endeffekt mit, wofür er am besten geeignet ist.

Vielleicht sind in einer Denkfabrik auch Algorithmusfragen notwendig, aber ich habe sie zugunsten der Frage "Lieblingsprojekt" aufgegeben.

Summe (Sohn) von FizzBuzz

Ihre Interviewfrage entspricht nicht FizzBuzz:

Wenn wir alle natürlichen Zahlen unter 10 auflisten, die Vielfache von 3 oder 5 sind, erhalten wir 3, 5, 6 und 9. Die Summe dieser Vielfachen ist 23. Schreiben Sie eine Funktion, die die Summe aller Vielfachen von 3 oder 5 findet unter 1000.

Wo FizzBuzz Classic Sie zwingt, n Iterationen durchzugehen (um jede Nummer oder Fizz / Buzz auszudrucken), kann Ihr Problem in n / 5 + n / 3 + n / 15 Iterationen oder sogar ohne Iterationen ausgeführt werden - eine direkte Fixierung. Punktberechnung ist möglich. Das folgende Programm vergleicht diese drei Methoden:

public static void main(String[] args) {
  long n = Long.valueOf(args[0]).longValue();
  long sum = 0;
  long ms = System.currentTimeMillis();
  // Brute force method  Performance: cn
  for (long i = 1; i <= n; i++) {
    if ((i % 3) == 0) { sum += i;
    } else if ((i % 5) == 0) { sum += i; }
  }
  System.out.print("Brute force sum:    " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

  // Second solution: iterate through only numbers we are
  // interested in.  Performance: c * (n/3 + n/5 + n/15)
  // We counted multiples of 15 twice, so subtract one of them
  sum = countSum(n, 3) + countSum(n, 5) - countSum(n, 15);
  System.out.print("Only multiples sum: " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

  // Third solution: Use high school algebra.  Performance: c
  sum = sumSeries(n, 3) + sumSeries(n, 5) - sumSeries(n, 15);
  System.out.print("Sum of series:      " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
}

// Iteravely sum all multiples of skip
private static long countSum(long n, long skip) {
  long skipTotal = skip;
  long grandTotal = 0;
  while (skipTotal <= n) {
    grandTotal += skipTotal; skipTotal += skip;
  }
  return grandTotal;
}

// Thanks to @Caleb for pointing this out!  High school algebra
// tells us that the sum of a series is: (n * (a1 + an)) / 2
// where a1 is the first term and an is the nth term.  E.g. The
// sum of a series of 3 is: (n/3 * (3 + n - (n % 3))) / 2
// Since we are thinking about performance here, we'll shift
// right one instead of dividing by 2 for style points.  ;-D
private static long sumSeries(long n, long skip) {
  return (n/skip * (skip + n - (n % skip))) >> 1;
}

Ausgabe (Summe von FizzBuzz <1000):

$JDK_HOME/bin/java FizzBuzzNot 999
Brute force sum:    233168 time: 0
Only multiples sum: 233168 time: 0
Sum of series:      233168 time: 0

Mit einem größeren n zum Leistungsvergleich:

$JDK_HOME/bin/java FizzBuzzNot 1000000000
Brute force sum:    233333334166666668 time: 4744
Only multiples sum: 233333334166666668 time: 818
Sum of series:      233333334166666668 time: 0

Hinweis für diejenigen, die dies als Off-Topic abgelehnt haben

Mit einer Lösung für diese Frage soll gezeigt werden, dass die Brute-Force-Lösung von Sum of FizzBuzz der von FizzBuzz Classic ähnelt, dass jedoch bessere Lösungen für das Sum-Problem verfügbar sind, was es zu einem grundlegend anderen Problem macht. Die Summe von FizzBuzz ist extrem schwierig, wenn Sie sich nicht an die richtige Formel für die Summe einer Reihe erinnern oder nicht erkennen, dass sie beim Schritt um 3 oder 5 gilt.

Wenn Sie die Formel für die Summe einer Reihe erneut ableiten, indem Sie die Reihe in zwei Hälften teilen, die eine Hälfte umkehren und sie koppeln, erhalten Sie (n + 1) (n / 2), was Sie auf einen wirklich chaotischen Weg führen kann soweit es die Ganzzahldivision und die abgeschnittenen Reste betrifft. Die (n (a1 + an)) / 2-Version dieser Formel ist für eine einfache Antwort für alle Werte von n absolut kritisch.

GlenPeterson
quelle
3
Dies kann direkt berechnet werden (Ruby): t = { |i| (i * (i+1)) / 2 }; fizzbuzz = { |n| 3 * t((n-1)/3) + 5 * t((n-1)/5) }
Kevin Cline
1
@ GlenH7 Ja, ich habe meinen Kommentar gelöscht, weil es ein Buzzkill war. Glen verdient Requisiten für seine Analyse, auch wenn sie die Frage ÜBERHAUPT nicht beantwortet: D (Außerdem habe ich vor wenigen Augenblicken meine eigene Lösung vollständig codiert und ausprobiert)
Andres F.
2
Sie suchen eine Summe einer Reihe, da diese Reihe modulo = 0 ist, kann die Formel n / 2 * (m + nm) verwendet werden. Wobei m die Modulo-Zahl und n die Anzahl der Elemente in der Reihe ist (alias Etage (x / m). Danach ist es einfach, S (3) + S (5) - S (3 * 5) [damit einige Zahlen Nicht zweimal gezählt werden.]
Jmoreno
3
Ein Grund, warum Sie möglicherweise ein Problem haben, ist, dass Sie einige Zahlen zweimal zählen (die durch 15 teilbaren). Ein Beispielprogramm finden Sie unter ideone.com/clone/oNWrhJ
jmoreno
8

Ich hatte das Gefühl, ich hätte ihm einen Weg zeigen sollen, das Problem zu lösen, damit er zumindest aus der Erfahrung lernen konnte. Aber er hat nicht gefragt. Was ist der richtige Weg, um mit dieser Situation umzugehen?

Es ist mir egal, für welches Level das Interview ist, und auch nicht wirklich, ob es sich um eine Frage auf "FizzBuzz" -Ebene oder eine fortgeschrittene Frage handelt. Wenn Sie einen Kandidaten bitten, eine Frage zu lösen, und er kann es nicht, aber Sie brauchen nicht einmal nach der richtigen Antwort zu fragen, dann ist er Ihre Zeit nicht wert. Wie um alles in der Welt kannst du so faul sein?!?

Und selbst wenn Sie total nach Programmierer stinken und nur versuchen, Ihren Weg in einen Job zu büffeln, warum sollten Sie dann nicht so pragmatisch sein, jetzt die richtige Antwort zu bekommen, damit Sie es für das nächste Interview wissen?

Nein, Sie sollten die Antwort nicht "geben", aber Sie sollten damit rechnen, dass der Kandidat darauf besteht, die richtige Antwort zu hören , wenn er scheitert. Wenn nicht, ist es eine große rote Fahne in meinem Buch.

Wenn jemand FizzBuzz in einem Junior-Level-Dev-Interview durchgebrannt hat, weil er sich nicht an den Modul-Operator erinnern konnte und sich einfach nicht dazu bringen konnte, ohne ihn weiterzumachen, dann wurde er ganz leidenschaftlich daran, es noch einmal zu machen, nachdem Sie die richtige Antwort erklärt hatten. oder zumindest den richtigen Code mit dir durchsprechen, dann ist das fast so gut wie richtig zu antworten.

Graham
quelle
1
Warum? Sie können die Antwort einfach später googeln. FizzBuzz ist sehr beliebt. Ich wäre ehrlich gesagt besorgt, wenn jemand die Modulunterteilung nicht kennt.
Brian
Ich hätte ihm zuerkannt, dass er versucht hatte, etwas anstelle des Modulusoperators zu erfinden, aber er kam nicht einmal an diesen Punkt. Ich denke, Sie haben ein gutes Argument, wenn Sie sich auf sein Versäumnis konzentrieren, nach der Antwort zu fragen. Ihre Beobachtung steht im Einklang mit einigen anderen Herausforderungen, die während des Interviews aufgetreten sind.
Ich bekomme wirklich eine Meinung über FizzBuzz ... aber das ist die richtige Antwort. Wenn der Kandidat nicht nach der Antwort fragt, geben Sie sie ihm nicht.
James P. Wright
@ JamesP.Wright - Ich stimme einigermaßen zu, und als ich in das Interview ging, war es mir ein bisschen peinlich, das als Hauptkodierungsfrage zu verwenden. Es sollte lächerlich einfach sein, und ich habe es sogar mit einer Warnung eingeleitet, die Frage nicht zu überlesen. Ich hatte ein Follow-up, das auch einfach sein sollte, und dann hatte ich ein drittes, das es ihm ermöglichte, höhere Entwicklungs- / Designfähigkeiten zu demonstrieren. Wir sind nie zur dritten Frage gekommen ...
1
@ 0A0D prüft die in FizzBuzz enthaltene "Mathematik" einfach, ob eine gegebene Variable durch 3 und / oder durch 5 teilbar ist. Diese Mathematikstufe ist in praktisch jeder App vorhanden, die Sie schreiben. Sogar "Geschäftsentwickler" wie ich, die immer wieder die gleiche Art von Projekten umsetzen, verwenden diese Mathematikstufe. GlenH7, ich bin mir nicht mal sicher, ob die Verwendung von Rekursion in FizzBuzz mich beeindrucken oder abschrecken würde.
Graham
4

Ich habe Fizzbuzz während des Telefonierens mit dem Interviewer während eines Pre-Screens getippt. Das ist etwas, von dem man, auch wenn man noch nichts gehört hat, nach einem Semester in der Lage sein sollte, sich zusammenzutun, aber auf jeden Fall, nachdem man den Status "Senior" erlangt hat.

Es gibt wirklich keine Erholung davon, das nicht zu können. Es ist eines der notwendigen Ärgernisse, die Sie für alle Fälle aus dem Weg räumen müssen.

Ich würde sagen, dass es Sinn macht, als Pre-Screen zu liefern, damit Sie nicht die ganze Zeit damit verschwenden, sie für ein Interview vor Ort zu bringen.

Michael Brown
quelle
Für unseren Pre-Screen hatten wir nach einem mitgelieferten Beispielcode gefragt. Dieser Code hatte einige Funktionen für fortgeschrittene bis fortgeschrittene C # -Sprachen, sodass ich wirklich erwartete, dass er die logischen Fragen in nur ein oder zwei Minuten durchgehen würde.
7
Wenn der bereitgestellte Beispielcode nicht mit den in einem Interview nachgewiesenen Kenntnissen übereinstimmt, wird mein Gehirn sofort misstrauisch gegenüber dem Beispielcode.
Graham
@ Abraham: Stellen Sie ihn für 6 Monate als Zeitarbeiter ein.
Brian
@ 0A0D Leider habe ich noch nie an einem Ort gearbeitet, der eine solche Flexibilität ermöglicht. Wenn die ausgeschriebene Stelle ein Vollzeit-Auftritt wäre, wäre das ALLES, was wir der Person anbieten könnten.
Graham
3
In diesem Szenario gibt es keinen Zaun. Wenn sein "Beispielcode" ein ausgeprägtes Wissen aufweist und er keine Fizzbuzzs codieren kann, ziehen Sie das Beispiel heraus und fragen Sie ihn nach Einzelheiten. Wenn er es nicht unterstützen kann, ist es Zeit für meine Lieblingszeile "Wir haben noch einige Kandidaten zu überprüfen, wir werden uns bei Ihnen melden."
Michael Brown
4

Ich habe ihn sogar dazu gebracht, über die Verwendung einer Schleife nachzudenken und festgestellt, dass 3 und 5 als Sonderfälle in Betracht gezogen werden sollten.

Es wäre interessant zu wissen, was Ihrer Meinung nach die "richtige" Antwort auf Ihre FizzBuzz-Frage ist. Von meinem Platz aus lautet ein guter (in C), der in den Brief Ihrer Frage geschrieben ist:

int f(void) {
    // sum the multiples of 3 and of 5 and subtract multiples of 15 so we don't count them twice
    return ((1000/3)/2)*(999+3) + ((1000/5)/2)*(995+5) - ((1000/15)/2)*(990+15);
}

Ein besseres könnte sein:

Warum zum Teufel würden Sie ein Programm schreiben, um das zu tun, wenn Sie es direkt berechnen können?

Der Punkt ist, dass es mehr als einen Weg gibt, eine Katze zu häuten, und die Tatsache, dass der betreffende Kandidat nicht sofort damit begonnen hat, forLoops und modOperatoren zu schreiben , bedeutet nicht, dass er dumm ist. Wenn Sie wissen möchten, was der Kandidat weiß, besprechen Sie das Problem - finden Sie heraus, was er denkt. Wenn er feststeckt oder verwirrt ist, finden Sie heraus, wo und warum. Er könnte Sie zu einem Ansatz führen, an den Sie nie gedacht haben.

Meine Frage ist, ob ich ihm die Antwort auf die logischen Fragen hätte geben sollen.

Als Interviewer ist es nicht Ihre Aufgabe, dem Kandidaten eine Lektion zu erteilen . Wenn sie wirklich nicht wissen, wie man Code schreibt, besteht absolut keine Notwendigkeit, sie in Verlegenheit zu bringen, indem sie darüber nachdenken, wie viel sie nicht wissen. Wenn sie interessiert genug sind, um zu fragen, dann können Sie auf jeden Fall teilen. Beenden Sie andernfalls das Interview, danken Sie ihnen für ihre Zeit und fahren Sie mit dem nächsten Kandidaten fort.

Caleb
quelle
+1 für die solide Antwort in Ihrem letzten Absatz. Und Sie sprechen ein gutes Argument dafür an, dass ich "eine" Antwort anstelle der "Antwort" hätte sagen sollen. Es gibt verschiedene Möglichkeiten, dieses Problem zu lösen. In Bezug auf discuss the problemdieses Element kamen während des Interviews andere Fragen auf. Bedauerlicherweise war der Kandidat ... weniger als bereit zu antworten. Ich habe diesen Aspekt nicht in die ursprüngliche Frage aufgenommen, da ich wirklich versucht habe, mich an die P.SE-Richtlinien für "gutes subjektives Verhalten" zu halten.
1
"Es ist nicht Ihre Aufgabe, dem Kandidaten eine Lektion zu erteilen" - da bin ich anderer Meinung. Ein guter Programmierer lernt immer. Wenn sie auf Ihre Lektion reagieren, indem sie sich für das Erlernen neuer Dinge dankbar verhalten, ist dies ein Zeichen dafür, dass sie ein guter Programmierer sind. Wenn sie Ihre Lektion abbrechen, sind sie höchstwahrscheinlich ein beschissener Programmierer.
nbv4
Wenn ich Ihr Interviewer wäre und Sie mir diese Antwort geben würden, würde ich Sie an einen Schulbezirk verweisen, der Algebra-Lehrer benötigt. In FizzBuzz geht es darum, grundlegende Programmierkenntnisse zu demonstrieren, damit der Interviewer Fragen beantworten kann, die Sie von anderen im Grunde genommen anständigen Programmierern unterscheiden. Ihre Antworten sind klug, aber sie begründen nicht, dass Sie Schleifen, modulare Arithmetik usw. verstehen, und verlassen das Interview, um entweder unter der Annahme voranzukommen, dass Leute, die Algebra kennen, auch Programmieren (falsch) können, oder um einfach die Hand zu schütteln und weitermachen (wahrscheinlicher).
user1172763
@ user1172763 Genau darum geht es - anders als bei FizzBuzz kann die Interviewfrage des OP mit einer einzigen Berechnung beantwortet werden. Es ist daher eine schlechte Wahl, wenn geprüft werden soll, ob der Kandidat eine Schleife schreiben kann. Sie können nicht erwarten, dass ein Kandidat eine langsamere, weitaus ausführlichere Lösung wählt, vorausgesetzt, Sie stellen die Frage aus einem bestimmten (und nicht angegebenen) Grund. In der Tat könnte der Interviewer leicht eine "Trick" -Frage sein, um zu sehen, ob der Kandidat bemerkt, dass ein Looping völlig unnötig ist. Es liegt nicht in der Verantwortung des Kandidaten, Ihre Gedanken zu lesen.
Caleb
2

Ihr "Problem" ist, dass Sie ein einfühlsamer Mensch sind. Es ist daher schwierig zu beobachten, wie jemand mit einem Problem kämpft, dessen Antwort Sie kennen (dies ist auch ein Problem, wenn Sie Usability-Studien durchführen). Aus Sicht der Aufgaben als Interviewer sind Sie in keiner Weise verpflichtet, dem Interviewten beizubringen, wie er programmiert oder ein Problem löst, oder die Lösung eines Problems, das Sie fragen.

Wenn Sie einen Befragten coachen, ist es nicht so, dass er die richtige Antwort bekommt. Es ist so, dass Sie sehen können, ob sie das Problem wirklich nicht lösen können oder ob sie sich nur auf einen oder zwei Fehler oder Missverständnisse festgelegt haben.

Wenn Sie also einem Befragten die Lösung nachträglich geben möchten, tun Sie dies nur für sich. Im Allgemeinen würde ich diese Zeit lieber nutzen, um dem Befragten zu ermöglichen, ein anderes Problem zu versuchen. Aber ein "älterer" Programmierer, der FizzBuzz nicht beantworten kann, ist wahrscheinlich von der Liste. Wenn Sie sich dazu entschließen, Lösungen zu nennen, sollten Sie sich nicht dazu verleiten, zu glauben, das Interview sei besser verlaufen als es Sie sind auf einem gefährlichen Weg).

Und ja, ich war ein befragter Mann, der sich über den Kopf gesetzt hatte und nicht einmal den ersten Versuch unternahm, ein Interviewproblem zu lösen. Das bedeutete einfach, dass ich viel mehr lernen musste, um einen Job in diesem Bereich zu verfolgen.

Tom Panning
quelle
2

Die richtige Antwort zu finden, ist nicht der wichtige Teil dieses Tests. Was Sie messen, ist die Herangehensweise an die Problemlösung, die Art und Weise, wie jemand mit der Frage umgeht, mit etwas Kreativem oder Interessantem, das er auf dem Weg findet. diese Art von Sachen. Selbst wenn sie die falsche Antwort erhalten, können sie nach diesen Kriterien lebensfähig sein.

OK, nicht zu wissen, dass der Mod-Operator unentschuldbar ist, und nach den Messwerten, die ich diesem Kandidaten gegeben habe, scheint es immer noch eine Abwertung zu sein, aber ich glaube nicht, dass es von Belang ist, diesem Kandidaten nur die richtige Antwort zu geben Vorteil.

Hier kommt es auf Ihre persönliche Meinung an. Möchten Sie ein Interviewfeedback geben, damit der Kandidat in zukünftigen Interviews besser abschneiden kann (und zukünftige Interviewer nicht leiden müssen, was Sie gerade durchgemacht haben)? Wenn ja, formulieren Sie Ihr Feedback wie oben beschrieben: Sagen Sie ihnen, dass es nicht nur um die richtige Antwort geht, sondern dass es von entscheidender Bedeutung ist, wie sie zur Antwort kommen.

Maximus Minimus
quelle
+1 für den Kommentar von how they work to arrive at the answer is a critical factor. Ich habe zwar erwartet, dass ein Moduloperator verwendet wird, aber nur deshalb, weil ich ihn so gelöst hätte. Ich war sehr offen für andere Ansätze, die das Problem lösen, ohne dass es zu offensichtlichen Randbedingungsfehlern kommt (siehe meine verschiedenen Kommentare zum Ansatz mit Rekursion ...).
2

Ich hatte das Gefühl, ich hätte ihm einen Weg zeigen sollen, das Problem zu lösen, damit er zumindest aus der Erfahrung lernen konnte. Aber er hat nicht gefragt. Was ist der richtige Weg, um mit dieser Situation umzugehen?

So wie ich das sehe, gibt es keine Situation, mit der man umgehen kann. Unter der Annahme, dass Sie seine Bewerbung abgelehnt haben, müssen Sie sich keine Sorgen um den (offensichtlichen) Mangel an Interesse des Bewerbers machen.

Ja, auch wenn er hatte fragen, die Sie nicht schulden ihm eine Erklärung. Und wenn Sie mit Ihren HR-Mitarbeitern darüber gesprochen haben, werden Sie möglicherweise darauf hingewiesen, dass weitere Gespräche mit dem Kandidaten aus rechtlichen Gründen nicht ratsam sind.


Es ist auch erwähnenswert, dass das FizzBuzz-Problem je nach Fragestellung unterschiedliche "beste" Antworten hat. Wenn Sie nach der "einfachsten" und der "effizientesten" Lösung fragen, unterscheiden sich die besten Antworten grundlegend. Und dies kann Ihr Urteil ungerecht färben ... wenn Sie sich nicht sicher waren, wie Sie die Frage gestellt haben. (Andererseits hätte ein guter / erfahrener Kandidat die Voraussicht, dies zu klären, bevor er mit dem Programmieren beginnt ...)

Stephen C
quelle
2

Um Ihre Frage zu beantworten, nein, ich würde die Antwort nicht geben. Wenn die Person ein besserer Softwareentwickler sein möchte, wird sie die Antwort finden. Wenn Sie ihnen eine Antwort geben, nehmen Sie ihnen diese Gelegenheit.

Die relevantere Frage ist, wann Sie sich als Senior-Entwickler bezeichnen können. Dies variiert zwischen Organisationen und Ländern. Zum Beispiel eine Firma, bei der ich als Software Engineer mit 5 Jahren Erfahrung als Senior gearbeitet habe. Die Qualität der Erfahrung wurde nicht betont, nur die Länge.

Bis wir einen Standard entwickelt haben, der alle Softwareingenieure unabhängig von ihrer Sprache kategorisiert, bleibt es uns überlassen, ob der Einzelne über das Niveau ihrer Fähigkeiten entscheidet. Und wir werden auch weiterhin davon hören, dass "Senior Engineers" den rudimentärsten Kompetenztest nicht bestehen.

Vor ein paar Wochen wurde die Frage gestellt: "Wann sollten Sie sich als Senior Developer bezeichnen?" . Ich habe auch einen Blog-Beitrag zum Thema geschrieben.

Chuck Conway
quelle
Würden Sie bitte Ihren Blog-Link überarbeiten?
André
@ André Link aktualisiert.
Chuck Conway