it-swarm.dev

FizzBuzz - wirklich?

Wenn es um "Interview-Test" -Fragen geht, wird häufig das Thema FizzBuzz angesprochen. Es gibt auch einen Coding Horror Beitrag darüber.

Wenn Sie sich nun die Mühe machen, Websites wie diese zu lesen, sind Sie wahrscheinlich weniger in der Demografie von Programmierern, die FizzBuzz alles andere als trivial finden würden.

Aber ist es wirklich wahr, dass 99% der Programmierer damit zu kämpfen haben?

"Ja wirklich?"

Was ist der Beweis dafür?

Einige Beispiele aus der Praxis wären bei der Beantwortung dieser Frage sehr hilfreich.

60
DanSingerman

99%? Nein. Ein signifikanter Prozentsatz? Ja. Aus meiner eigenen direkten Erfahrung mit der Befragung von Menschen kann ich dies bezeugen. Es mag Ihnen unbedeutend erscheinen, aber es gibt viele Leute im Programmierbereich, die sich jahrelang mehr oder weniger durchgesetzt haben und sich auf Positionen bewerben, die nicht für Einsteiger geeignet sind, und diese nicht bestehen.

Selbst wenn Sie es leicht lösen KÖNNEN, aber wenn Sie mir eine große statische Aufforderung geben, gebeten zu werden, eine solche untergeordnete Aufgabe zu erledigen, wird dies gegen Sie zählen. In einem Team zu sein bedeutet manchmal, Dinge tun zu müssen, die Ihnen vielleicht nicht gefallen, aber notwendig sind. Wenn Sie von Anfang an, bevor wir überhaupt mit der Zusammenarbeit begonnen haben, der Meinung sind, dass es am besten ist, Ihren besonderen Status zu behaupten, über etwas zu stehen, um das ich Sie gebeten habe, dann wird es als Zeichen gegen Sie wirken.

Es ist mir nicht unbedingt wichtig, wie elegant Ihre Lösung ist (obwohl das schön wäre), aber wenn Sie sehen, wie Sie auf einem Whiteboard darauf stechen und sich durch die Lösung sprechen, zeigt sich mir, dass Sie zumindest bereit sind, einen Stich darauf zu machen . Wenn Sie empört sind und etwas in der Art von "Ich bin ein Problemlöser, kein Code-Affe!" Sagen. dann wirst du einen Haken niedergeschlagen.

Ich hatte Interviewpartner, die sich einfach geweigert haben, es überhaupt zu versuchen. Einfach ablehnen. Äh, ähm. Ich werde es nicht tun. Ich stelle noch ein oder zwei höfliche Fragen, danke ihnen für ihre Zeit und schließe das Interview ab.

Ich sage das als Manager und als Entwickler.

46
Todd Williamson

Ich denke, dass 99% der Programmierer, die sich für einen Job bewerben (und ihn nicht bekommen), sich darüber streiten könnten. Aber nicht 99% der Programmierer, die produktiv einen Job haben.

Das ist die Natur unseres modernen Arbeitssuchprozesses. Viele Bewerber sind nicht qualifiziert.

Dieser Coding Horror-Beitrag spricht auch für die Art und Weise, wie wir heutzutage Informatik unterrichten. In der Vergangenheit (insbesondere am MIT) mussten Sie Dinge wie LISP lernen, was ziemlich viel erfordert, dass Sie Konzepte wie Rekursion verstehen.

Heutzutage wird den Leuten beigebracht Java, weil es in der Industrie weit verbreitet ist und der Fokus eher auf Syntax als auf tiefes Programmierdenken gerichtet ist. Ich mag Java nicht, tatsächlich denke ich, dass es ein Ideal ist erste Programmiersprache. Aber ich habe nicht gesehen, dass meine Lehrer damit tiefe Programmierprinzipien unterrichten.

25
Robert Harvey

Ich hasse es das zu sagen aber

Der Hauptgrund, warum ich gesehen habe, dass Programmierfragen nicht beantwortet werden, ist die Schuld des Fragestellers und nicht des Antwortenden.

Ich kann mich gut an ein Interview erinnern, in dem ich gefragt wurde, wie ich einen bestimmten Sammlungssuchalgorithmus erstellen soll, der in konstant Zeit ausgeführt wird (gleiche Anzahl von Suchvorgängen, unabhängig von der Anzahl der Elemente in der Sammlung). Ich fummelte und humpelte 20 Minuten lang daran herum, bevor ich aufgab. Zu diesem Zeitpunkt demonstrierte dieses Genie, das das Interview führte, die Antwort als etwas, das in fast konstanter, aber immer noch nicht konstanter Zeit operierte. Ein bisschen wie "Gib mir eine Antwort von Null" zu sagen und dann 0,1 zu akzeptieren.

Kurz gesagt, ich habe zu viele Fälle gesehen, in denen jemand, der ein Interview führt, eine Frage stellt, die die folgenden Kriterien nicht erfüllt:

  1. Sie kennen alle möglichen richtigen Antworten.
  2. Sie wissen warum die richtigen Antworten sind richtig.
  3. Sie wissen, wie man tatsächlich genug Informationen liefert, ohne die Antwort preiszugeben.
  4. Fragen zur "Problemlösung" beruhen nicht auf der Kenntnis einer unbekannten Tatsache (dies ist das größte Problem, das ich gesehen habe).
  5. Es würde weniger als 1 Minute dauern, um die Antwort zu schreiben, wenn Sie es nicht herausfinden müssten. Wenn es nur 5 Minuten dauern würde, um den Code einzugeben, ist wirklich mehr Problemlösung erforderlich, als in den verbalen Teil des Interviews passen kann.
  6. Fragen basieren auf mehr als nur "Ein Problem, auf das ich einmal gestoßen bin oder das mir in der Schule gegeben wurde, und deshalb sollten Sie wissen, wie man es löst im Moment". Ich wette, Sie hatten mehr als 2 Minuten Zeit, um darauf zu antworten. Warum geben Sie dem Kandidaten nicht die gleiche Höflichkeit?.

Im Ernst (1) finde ich es dumm, Leute zu bitten, Code in den verbalen Teil eines Interviews zu schreiben.

Im Ernst (2) finde ich es auch dumm, Leute zu interviewen, ohne sie zu bitten, Code zu schreiben.

Im Ernst (3), Sie sollten ihnen entweder "Hausaufgaben" geben, sie bitten, Codebeispiele einzubringen, oder ihnen einen Laptop und ein paar Fragen und ein ruhiges Büro geben, um daran zu arbeiten. Dann lass sie in Ruhe, während sie daran arbeiten. Normalerweise gehe ich mit dem letzteren Ansatz vor, da er ihre Fähigkeit einschränkt, Hilfe von außen zu erhalten (Betrug), und ich kann ihn zeitlich festlegen.

20
MIA

Ich habe den von Ihnen erwähnten Artikel über Coding Horror gelesen und meine Meinung ist, dass Jeff Recht hat ... aber wann wurde er das letzte Mal interviewt?

Wenn Sie interviewt werden, sind Sie normalerweise in hohem Stress und müssen häufig theoretische Fragen beantworten (keine Intelligenz, kein Google, kein Resharper, ... nur Ihr durch Stress gestörtes Gedächtnis). Das ist auch bei Tests so. Stress hilft dir nicht.

Mir ist aufgefallen, dass der einzige Weg zu wissen, ob jemand für eine Position geeignet ist, darin besteht, eine Weile mit ihm zusammenzuarbeiten ... Nehmen Sie einfach die letzten 10 Personen, die Sie von 100 (vielleicht mehr) eingestellt haben, wie viel war wirklich gut mieten???

Ein Arbeitgeber sollte einen Problemlöser einstellen, keinen Code-Affen, der sich mit Modulos auskennt.

Sie können nicht "für eine Weile alle Bewerber" testen, daher ist ein Interview mit ihnen erforderlich. Deshalb konzentriere ich meine Fragen darauf (Problemlösung) und führe vergangene Referenzprüfungen durch.

Meiner Meinung nach ist der FizzBuzz gefährlich für das Unternehmen, das nach Entwicklern sucht, um sein Wachstum aufrechtzuerhalten.

10
user2567

Alles was Sie tun müssen, ist auf FizzBuzz zu suchen. Es gab eine riesige Welle von Blog-Posts. Im Allgemeinen sagte der Blogger: "Ich habe den Leuten gesagt, sie sollen es in [einer Sprache] schreiben, und hier sind die Arten von Fehlern, die sie gemacht haben:" und listete dann einige Fallstricke auf. Der Spaß beginnt in den Kommentaren, in denen die Leute sagen "ha! Das ist in [einer anderen Sprache] trivial, alles, was Sie schreiben müssen, ist Folgendes:", gefolgt von Code. Der nächste Kommentar findet immer Fehler in diesem ersten. Es scheint, als ob einige sehr gute Entwickler es in keiner Sprache gleich beim ersten Mal richtig machen. Einige der Fehler:

  • Ich habe um 1 bis 100 gebeten und du hast 1 bis 99 oder 0 bis 99 gemacht
  • unordnung darüber, ob die Nummer zusammen mit Fizz und/oder Buzz gedruckt werden soll
  • meinungsverschiedenheiten über "Fizzbuzz" vs "Fizz-Buzz"
  • verpasste Optimierungen, wie zweimal vergleichen, wenn einmal würde
  • viel mehr

Wenn ich einstelle, bitte ich die Leute, für mich am Whiteboard zu programmieren, nichts ist annähernd so kompliziert (ich weiß, Sie denken nicht, dass es kompliziert ist), und viele Kandidaten scheitern völlig. Ich meine, als würde ich vb-artiges If, Then, End If schreiben, aber auch geschweifte Klammern setzen (um auf der sicheren Seite zu sein, denke ich) oder C # schreiben (und zuerst fragen, C #?), Aber nirgendwo ein Semikolon haben. Beginnen Sie mich nicht mit logischen Fehlern!

10
Kate Gregory

Ich wurde kürzlich beauftragt, über 50 Programmierer für eine leitende Position zu interviewen, in der sie hauptsächlich mit PHP arbeiten würden.

Ich warf das Fizzbuzz-Problem auf die Screening-Prüfung, hauptsächlich, um mich zu amüsieren und weil ich zehn gute Fragen wollte und nur neun hatte. Meine damalige Absicht war es, den Leuten zu zeigen, dass wir auch bei Interviewfragen Spaß haben können.

80% der Antragsteller lösten das Problem, verwendeten jedoch nicht den Moduloperator.

15% der Antragsteller konnten das Problem nicht lösen.

5% der Antragsteller lösten das Problem mit dem Moduloperator.

Obwohl meine Stichprobe sehr begrenzt ist (50 Bewerber aus einem Land), kann ich Ihnen Folgendes sagen:

95% von ihnen hatten einen BS oder höher in einem CS-Lehrplan (Universitäten konkurrieren hier, indem sie versuchen, CS spektakulärer klingen zu lassen).

Ich war wirklich erstaunt. Nun, verängstigt ... aber erstaunt. Ich hätte nicht gedacht, dass ich die Ergebnisse annähernd reproduzieren würde, da das Problem so populär geworden ist. Dies zeigt mir, dass 5% meiner Bewerber möglicherweise keine Superprogrammierer sind, aber zumindest programmierbezogene Blogs lesen.

10
Tim Post

In meiner letzten Einstellungsrunde hatte ich 3 Bauarbeiter mit 0, ich wiederhole Null, Programmierausbildung oder Erfahrung bewerben mich um eine Stelle als Softwareentwickler.* * Das ist also der Boden des Fasses. Wenn Sie von einer normalen Verteilung der Fähigkeiten ausgehen, können Sie sehen, dass das durchschnittliche Qualifikationsniveau recht niedrig und sogar „überdurchschnittlich“ (unter den Bewerbern) immer noch relativ schlecht ist.

Wenn Sie nur die Bewerber verblüffen, die scheinbar über Programmierkenntnisse verfügten, werden Sie feststellen, dass Sie jetzt Folgendes haben:

  1. lügner
  2. modewort-Enthusiasten (Ich habe einmal einen Artikel über .NET gelesen)
  3. schlechte tatsächliche Programmierer
  4. personen, die eine Technologie zum Abschließen eines Projekts verwendet haben, aber nichts davon erfahren haben (siehe Fizzbuzz-Fragen zu idisposable, um diese zu identifizieren)

Darüber hinaus sind einige "Fizzbuzz" -Fragen, die ich gesehen habe, domänenspezifisch. Sie können sich mehrere Jahre lang schrittweise mit einer Sprache/einem Framework x entwickeln (daher z Jahre Erfahrung mit x) und sind nicht auf bestimmte Teile davon gestoßen (Bibliotheksentwickler wissen nicht viel über die Entwicklung von UI-Komponenten, z.

Ebenso führen heutzutage viele Entwickler Wartungsarbeiten durch, sodass ihre Architektur-/Designfähigkeiten in einigen Bereichen möglicherweise schwach sind.

Jetzt bin ich mir nicht sicher, ob 99% korrekt sind, aber IME ist es immer noch ziemlich hoch. Zumindest im Bereich von 80%.

* Nein, wir haben diese Anwendungen nicht angerufen oder einen zweiten Blick darauf geworfen.

9
Steven Evers

Ja wirklich. Wahrscheinlich nicht 99%, aber immer noch ziemlich hoch. Ich habe Informatikstudenten für Praktika und Vollzeitbeschäftigungen interviewt. Ich würde ungefähr 25 Studenten an einem College interviewen. Wir sollten nicht die gleichen Fragen stellen, weil die Schüler redeten. Ich habe schnell gelernt, dass es keine Rolle spielt, weil ich nur 3 oder 4 von 25 Schülern bekommen würde, die meine erste Frage beantworten könnten. "Schreibe strcmp"

Ich bat sie, eine Funktion zu schreiben, um zwei Zeichenfolgen zu vergleichen. Vielleicht, um die Funktion zum Sortieren von Wörtern für ein Wörterbuch zu verwenden. Sie werden erstaunt sein, wie viele Schüler nicht verstanden haben, wie man zwei Wörter vergleicht, geschweige denn, wie man die Funktion schreibt. Und einige dieser Studenten behaupteten, sie hätten alle A in CSc.

Die Programmierung ist SEHR SCHWIERIG. Viele Leute denken gerne, dass sie wissen, wie man programmiert, aber sie tun es nicht.

8
ChrisMcB

Einige Gedanken:

  • Ich würde es niemandem vorenthalten, wenn sein Programm einige Fehler hätte, aber sie hatten eindeutig die richtige Idee. Das Debuggen ist Teil der Programmierung.

  • Ich finde es traurig, dass sich so viele Menschen für Jobs bewerben, von denen sie nicht wissen, dass sie sie nicht machen können. Scheint mir ein Problem mit der Wirtschaft zu sein.

  • Es ist wirklich einfach, Leuten schlechte Fragen zu stellen, wobei die einzige "richtige" Antwort die ist, die der Interviewer geben würde.

8
Mike Dunlavey

Dieser Test behandelt sehr gut einige Dinge, die ich über einen Programmierer wissen möchte, den ich einstellen könnte:

  1. Kannst du überhaupt programmieren?
  2. Kannst du ein Programm von Grund auf neu schreiben (weil nicht jeder kann !!!)
  3. Können Sie ein Problem lösen, ohne über nachzudenken?.

Um auf den letzten Punkt einzugehen, gibt es unzählige Lösungen für Fizz-Buzz. Streben Sie Lesbarkeit an? Geschwindigkeit? Kürze? Versuchen Sie, das Programm schnell fertig zu schreiben? Wie ein Programmierer dieses einfache Problem angreift, ist sehr aufschlussreich. Wenn ein Programmierer keine Lösung auswählen und bis zum Ende durchschauen kann, was sagt Ihnen das darüber, wie diese Person eine echte Aufgabe ausführen wird?

7
user2458

Leider scheinen vielen Menschen mit beeindruckend aussehenden Lebensläufen grundlegende Programmierkenntnisse zu fehlen. Ich habe viele Fälle gesehen, in denen Personen, die C und C++ in ihren Lebensläufen auflisten, grundlegende Fragen zu Zeigern nicht beantworten konnten.

6
Dima

Ich denke, ein Teil der Gründe, warum diese Frage so beliebt ist, liegt darin, dass es mehr als einen Weg gibt, sie zu beantworten. Je nachdem, welchen Weg der Kandidat wählt, können Sie einen Einblick in die Codierung erhalten. Einige großartige Beispiele sind zu sehen hier , wenn Sie 10K Wiederholungen bei Stapelüberlauf haben.

Überprüfen Sie in Bezug auf die 99% -Statistik, woher diese Zahl stammt. Es ist wahrscheinlich voreingenommen. Wenn es auf Programmierern für Anfänger basiert, die für ihren ersten Job interviewen, dann kann ich ja sehen, dass dies möglich ist, insbesondere wenn die Mehrheit ihrer Kandidaten direkt vom College kommt. Ich kann mir tatsächlich jemanden vorstellen, der wahrscheinlich eine 100-Bedingung-if-Anweisung als Lösung für dieses Problem ausschreiben würde.

3
Rachel

Es gibt zwei Arten von Menschen, von denen ich hoffe, dass FizzBuzz mir dabei hilft, sie zu vermeiden.

  1. Kanzler ohne Programmierkenntnisse oder ohne relevante Programmierkenntnisse. Normalerweise können Sie diese aus dem Lebenslauf erkennen, aber nicht immer. Wenn Sie ihnen eine einfache Programmieraufgabe geben, können Sie deutlich machen, dass sie keine Programmierer sind.
  2. Java-Schulabsolventen, die einen Programmierkurs oder -abschluss abgeschlossen haben, aber nicht wissen, wie man programmiert. Diese Leute können schwieriger herauszufiltern sein, weil sie über Theorie sprechen können, aber sie haben einfach keine praktischen Fähigkeiten. Ein einfaches Problem vor sie zu stellen und nach einer Lösung und einer Erklärung der Lösung zu fragen, ist eine ziemlich gute Möglichkeit, den Unterschied zwischen einer Petra Java und einer Paula Bean) zu erkennen.

In beiden Fällen ist mir eine perfekte Implementierung nicht wirklich wichtig. Der Test, den Sie mit Leuten machen müssen, die sich für Entwicklerjobs bewerben, ist , dass sie überhaupt programmieren können.

Das heißt, ich würde mich jetzt wahrscheinlich aus mehreren Gründen nicht mit diesem speziellen Test beschäftigen. Erstens ist es sehr bekannt und jede der oben genannten Gruppen würde es schnell versuchen. Zweitens würde ich lieber Steve Yegges Fragen zum Telefonbildschirm verwenden, um Nicht-Programmierer auszusortieren, bevor wir sie einbringen. Wenn jemand diese Fragen erkennt, bedeutet dies, dass er Steve Yegges Blog gelesen hat, der dies tun würde Schlagen Sie mir vor, dass sie zu den Top 1% der Entwickler gehören, die ihren Beruf ernst nehmen und mit Sicherheit ein Interview rechtfertigen. Ebenso, wenn jemand hier oder am einen guten Repräsentanten hätte SO Ich wäre geneigt, sie zu interviewen.

3
glenatron

Es ist kaum zu glauben, dass Entwickler FizzBuzz erst codieren können, wenn Sie die "Neun-zu-Fünfer" sehen, die ihre Arbeit kopieren und zusammenfügen und bewusst versuchen, keinen Code zu schreiben. Ich konnte es nicht glauben, als ich hörte, wie einer unserer leitenden Entwickler einem C # -Entwickler mit 3 Jahren "Erfahrung" den Umgang mit einem Wörterbuch beibrachte. Schnittstellen? Designmuster? stdout? YAGNI? Mein Lead hatte noch nie von YAGNI gehört! Es ist erstaunlich, was diese Leute nicht wissen.

Ich glaube es jetzt. Ich denke auch, dass zu viele Entwickler gerade genug tun.

3
kirk.burleson

Ich finde die Aussage, dass 99% der Programmierer nicht in der Lage sind, einen einfachen Codierungstest zu programmieren oder zu lösen, stark übertrieben. Im Fall des FizzBuzz-Tests sind Sie entweder bereits auf dieses Problem gestoßen und können es problemlos mit dem Modulo-Operator lösen, oder Sie haben es zuvor noch nicht festgestellt und werden Probleme damit haben. Es sagt dem Interviewer nichts über Ihre Programmierkenntnisse.

Ich denke, das Problem, dass viele Programmierer bei einem Interview anscheinend einen schlechten Eindruck hinterlassen, liegt in der Natur der technischen Interviewmethoden. Die Interviewer erwarten von den Bewerbern, dass sie sich die Sprachsyntax, Details und die rechnerische Komplexität von Datenstrukturen, Hardwarearchitekturen, Entwurfsmustern usw. merken und sofort reproduzieren. Der Bereich Informatik/Softwareentwicklung ist groß. Es ist unmöglich und unempfindlich zu versuchen, sich alles zu merken.

In der realen Welt besteht der Schlüssel darin, das Ihnen zugewiesene Programmier-/Designproblem zu verstehen und zu wissen, wo Sie Informationen (Ihre IDE, Manpages, Bücher, Google usw.) finden, wie Sie Ihr Problem lösen können. Dies ist jedoch etwas, auf das Interviewer niemals testen.

2
mark

Ich bin noch ein relativ junger Programmierer (ich codiere seit ~ 2 Jahren für Geld und codiere in gewisser beruflicher Eigenschaft als Nebenverantwortung für ungefähr 2 Jahre zuvor). Verwenden Sie also ausreichend Salzkörner.

Ich habe einige Erfahrungen mit der Erstellung eines ersten Bildschirms für Programmierer für ein Großunternehmensprojekt (wir wussten irgendwie, dass das Projekt zum Scheitern verurteilt war, aber hey, sie wollten trotzdem bezahlen). Als einziger Programmierer in der Firma, der die Einstellung vornimmt, wurde mir die Aufgabe übertragen, Lebensläufe zu überprüfen und Bewerber zu prüfen.

Dies war für ein Regierungsprojekt so vielleicht Wahrscheinlich haben sie nicht die talentiertesten Bewerber angezogen, aber ich habe weder eine Bewerbung von jemandem mit einem Github-Konto erhalten, auf dem tatsächlich Code angezeigt wurde, noch von jemandem, der ein Portfolio hatte. Deshalb habe ich Fizzbuzz (buchstäblich das genaue Problem) als ersten Durchgang verwendet auf jeden, der aussah, als könnte er programmieren.

Ich habe ihm eine Pseudo-Entschuldigung vorangestellt, die besagt, dass ich wusste, dass es dumm ist, aber dass ich nur einen funktionierenden Code sehen wollte, und wenn sie wollten, könnten sie ein weiteres Beispiel von gleichem oder höherem Wert oder wirklich irgendetwas senden, aber dieses Fizzbuzz würde ausreichen.

Das Ergebnis: Ich habe keine Antwort erhalten, die tatsächlich richtig war, was angesichts des Umfangs der Antworten im Internet umwerfend ist. Niemand machte sich die Mühe, zu plagiieren. Wir mussten nur Leute einstellen, die zuvor an den fehlgeschlagenen vorherigen Iterationen des Projekts gearbeitet hatten.

Nach dem anfänglichen Schock der Übung und der Enttäuschung darüber, wie durcheinander Regierungssoftware/Vertragsvergabe war, fühlte ich mich viel besser in Bezug auf meine eigenen Fähigkeiten, also kleine Siege?

Bearbeiten: Mit nicht korrekt meine ich nicht einen Fehler nach dem anderen (d. H. Ich habe nach 100 bis 99 gefragt) oder einen anderen unschuldigen Fehler, der eine einfache Lösung darstellt. Ich meine nicht funktionsfähig, wird entweder nicht ausgeführt/kompiliert/etc oder hat deutlich gezeigt, dass das Problem einfach nicht gelesen und verstanden wurde, auch ein erheblicher Teil hat die Anwendung zurückgezogen und keiner hat stattdessen einen anderen Code gesendet.

0
BSpiros