FizzBuzz - wirklich? [geschlossen]


60

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

Nun, wenn Sie sich die Mühe machen, Sites 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 werden?

"Ja wirklich?"

Was ist der Beweis dafür?

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


57
Es sind nicht 99% der Programmierer, sondern 99,5% der Bewerber (von denen viele keine Programmierer sind).
Webbiedave

4
Ich habe es nicht geglaubt, bis ich es in einem Interview bekam - ich bekam später den Job und plauderte später immer noch mit dem CEO darüber. Anscheinend sind 99% in etwa richtig. Oo
Fishtoaster

3
Ich dachte immer, Fizzbuzz-Fragen seien ein Mythos oder nur für Anfänger, aber eines Tages wurde ich tatsächlich bei einem Interview gefragt. Ja, haben viele Kandidaten wirklich Probleme damit?
DarenW

2
Ich gebe den FizzBuzz-Test routinemäßig bei Interviews ab und lasse Leute routinemäßig daran scheitern. Ein Grafikdesigner hat es eines Tages geschafft ... hat mich ein bisschen überrascht :)
Brandon Wamboldt

4
@ Rogue Coder - Hey, wir sind nicht dumm, nur komisch. Und die meisten von uns saugen an Mathe.
Inaimathi

Antworten:


46

99%? Nein, ein signifikanter Prozentsatz? Ja. Aus meiner eigenen direkten Erfahrung, Menschen zu interviewen, kann ich dies bezeugen. Es mag für Sie unbedeutend erscheinen, aber es gibt eine Menge Leute im Programmierbereich, die sich seit Jahren mehr oder weniger durchgesetzt haben und sich auf Positionen bewerben, die keine Einstiegspositionen sind und diese nicht bestehen.

Selbst wenn Sie es leicht lösen KÖNNEN, aber Sie geben mir eine große statische Aussage darüber, dass Sie gebeten werden, eine solche untergeordnete Aufgabe zu erledigen, wird 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 denken, bevor wir überhaupt mit der Zusammenarbeit begonnen haben, ist es am besten, Ihren besonderen Status zu behaupten, etwas zu tun, das ich Sie gebeten habe, dann wirkt es als Zeichen gegen Sie.

Es ist mir egal, wie elegant Ihre Lösung ist (obwohl das schön wäre), aber wenn Sie auf einem Whiteboard darauf einwirken und sich durch sie hindurchreden, zeigt sich, dass Sie zumindest bereit sind, darauf einzugreifen . Wenn Sie empört werden und etwas in der Art von "Ich bin ein Problemlöser, kein Code-Affe!" dann wirst du zu Boden geworfen.

Die Befragten weigern sich, es überhaupt zu versuchen. Einfach ablehnen. Nein, ä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.


1
Was sind ihre Gründe, sich zu weigern, es zu versuchen?
Jon Hopkins

3
Ich habe sie nie direkt gefragt. Nach ihrer zweiten Ablehnung würde ich noch ein paar Fragen stellen und das Interview dann abschließen. Wenn ich raten würde, wären sie zu nervös, um es zu versuchen (wenn ich gemeinnützig bin), oder sie könnten es nicht sofort herausfinden (wenn ich zynischer bin).
Todd Williamson

1
Ich kenne jemanden, der sich weigert, in Interviews zu codieren. Er weigert sich auch, sich an irgendetwas zu erinnern, was er in ein paar Sekunden von Googeln nachschlagen kann. Er ist ein "Problemlöser".
kirk.burleson

4
Andererseits ist Whiteboard-Codierung ein Problem, das der Interviewer Ihnen gibt ... das vielleicht gelöst werden muss? Die Ablehnung der Codierung im Interview ist für mich gleichbedeutend mit der Ablehnung der Lösung eines Problems, das der Interviewer hat. Daher Widerspruch zum Begriff "Problemlöser" und es ist eher so, als wäre der Typ ein "Problemverweigerer".
Spoike

@Spoike Nein, weil Problemlöser die Syntax einer Programmiersprache nicht kennen müssen.
Pierre Arlaud

25

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

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

Dieser Coding-Horror-Beitrag zeigt auch, wie wir heutzutage Informatik unterrichten. In der Vergangenheit (besonders am MIT) mussten Sie Dinge wie Lisp lernen, was es ziemlich erforderlich macht, Konzepte wie Rekursion zu verstehen.

Heutzutage wird Java unterrichtet, weil es in der Industrie weit verbreitet ist und der Schwerpunkt eher auf der Syntax als auf tiefgreifendem Programmieren liegt. Ich mag kein Java. in der Tat denke ich, dass es eine ideale erste Programmiersprache ist. Aber ich habe nicht gesehen, dass meine Lehrer damit tiefe Programmierprinzipien lehrten.


11
Ja, ich denke, unser Bildungssystem (zumindest in den USA) spielt dabei eine große Rolle. Ich kenne jemanden, der einen 2-jährigen Abschluss in Softwareprogrammierung hat, mit Auszeichnung abschloss und keinen Code lesen oder schreiben konnte.
Rachel

8
Das Argument gegen das Unterrichten von Java ist schwach. Konzepte können in den meisten Sprachen unterrichtet werden (z. B. ist das Wiederherstellen in Java einfach). Ich bin nicht anderer Meinung, dass der Unterricht in den gelehrten Konzepten schwächer wird, aber ich beschuldige die Implementierungssprache nicht willkürlich.
Steven Evers

1
Oh, Dinge wie Rekursion werden gelehrt, sie werden einfach nicht verwendet. Sie erhalten dieselbe Note für das Schreiben einer 100-Zeilen-IF-Anweisung wie für das Schreiben einer rekursiven Funktion (zumindest haben Sie das getan, wo ich hingegangen bin), und die 100-Zeilen-IF-Anweisung ist einfacher zu schreiben, wenn Sie es eilig haben (dh Sie) Habe deine Hausaufgaben bis 5 Minuten übersprungen, bevor du sie abgeben musst)
Rachel

1
@ SnOrfus: Ich beschuldige auch nicht Java. Ich habe kein Argument gegen das Unterrichten von Java vorgebracht. Ja, Sie können diese Konzepte in Java unterrichten, aber das habe ich nicht gesehen, jedenfalls nicht in den von mir belegten Java-Klassen. Das MIT wählte Scheme ursprünglich für seine Einführungskurse in die Programmierung, da es eine sehr einfache Syntax hat, sodass Sie frühzeitig über Programmierkonzepte nachdenken müssen, ohne sich viel auf die Sprachsyntax konzentrieren zu müssen.
Robert Harvey

4
Wer um alles in der Welt geht an eine Universität, wo sie "Java lehren". Programmiersprachenschulen sind weniger nützlich (unabhängig davon, ob es sich um Java, C ++, Lisp oder was auch immer handelt). haben Sie das in den USA? Während meines CS-Studiums haben Sie sich mehr oder weniger die erforderliche Programmiersprache beigebracht (eine Ausnahme wäre wohl der Paradigmenkurs). In den Universitätskursen wurden Mathematik, CS-Theorie, verschiedene Programmierparadigmen, Kalkül usw. unterrichtet. Jeder, der einen Abschluss hat, kann FizzBuzz problemlos lösen, da wir schwierigere Probleme lösen mussten, nur um die Kurse zu bestehen.
Andres F.

20

Ich hasse es, das zu sagen, aber

Der Hauptgrund dafür, dass Programmierfragen nicht beantwortet werden, liegt eher beim Fragesteller als beim Beantworter.

Ich kann mich noch gut an ein Interview erinnern, in dem ich gefragt wurde, wie ein bestimmter Algorithmus für die Sammlungssuche erstellt werden soll, der in konstanter Zeit abläuft. Ich fingerte und fingerte 20 Minuten lang daran, bevor ich aufgab. Damals zeigte dieses Genie, das die Befragung durchführte, die Antwort als etwas, das in nahezu konstanter, aber immer noch nicht konstanter Zeit ablief. Ein bisschen wie "Gib mir eine Antwort von Null" und akzeptiere dann 0,1.

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 richtig sind.
  3. Sie wissen, wie sie tatsächlich genug Informationen bereitstellen können, 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 je 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, den Code einzugeben, ist wirklich mehr Problemlösung erforderlich, als in den verbalen Teil des Interviews eingepasst werden 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 daher sollten Sie wissen, wie Sie es jetzt lösen können ". Ich wette, Sie hatten mehr als 2 Minuten Zeit, um 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.

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

Im Ernst (3), Sie sollten ihnen entweder "Hausaufgaben" machen, sie bitten, Codebeispiele mitzubringen, oder ihnen einen Laptop und ein paar Fragen und ein ruhiges Büro geben, um an ihnen zu arbeiten. Lassen Sie sie dann in Ruhe, während sie daran arbeiten. Ich gehe in der Regel mit letzterem Ansatz um, da er die Möglichkeit einschränkt, Hilfe von außen zu erhalten (Betrug) und ich es zeitlich einschränken kann.


Hattest du eine Diskussion mit dem Interviewer, in der erklärt wurde, warum ihre Lösung keine konstante Zeit war? Wenn ich der Interviewer wäre und Sie in der Lage wären, mich kurz und böswillig zu überzeugen, dass ich mich geirrt habe, würde ich Sie an Ort und Stelle einstellen.
Nemi

1
@Nemi - Ja, das habe ich getan. Die betreffende Person war keine Anstellungsbehörde, aber ich habe ein Angebot für die Stelle erhalten.
MIA

8
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;- konstante Zeit :)
Konfigurator

Korrigieren Sie mich, wenn falsch, aber ich denke, Hash-Tabellen haben konstante Zugriffszeiten, vorausgesetzt, sie werden ordnungsgemäß ausgeführt und es gibt keine Kollisionen. Daher sollte eine Suche mit einer Hash-Funktion in konstanter Zeit möglich sein.
Trylks

Hashes können Kollisionen haben. Aus diesem Grund wird es normalerweise als amortisierte konstante Zeit angegeben.
Rig

10

Sie müssen nur in FizzBuzz 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 trivial in [einer anderen Sprache], Sie müssen nur Folgendes schreiben:" gefolgt von Code. Der nächste Kommentar findet immer Fehler in diesem ersten. Es sieht so aus, 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 Sie haben 1 bis 99 oder 0 bis 99 getan
  • Ich vermassle, ob ich die Nummer zusammen mit Fizz und / oder Buzz ausdrucken soll
  • Meinungsverschiedenheiten zwischen "Fizzbuzz" und "Fizz-Buzz"
  • Verpasste Optimierungen, wie zweimal vergleichen, wenn einmal tun würde
  • viel mehr

Wenn ich anheuere, bitte ich die Leute, für mich am Whiteboard zu codieren. Nichts ist annähernd so kompliziert (ich weiß, Sie denken nicht, dass es kompliziert ist), und viele Kandidaten scheitern gänzlich. Ich meine wie das Schreiben von vb-style If, ​​Then, End If, aber auch das Setzen von geschweiften Klammern (um auf der sicheren Seite zu sein, denke ich) oder das Schreiben von C # (und die Frage zuerst nach C #?), Aber ohne ein Semikolon irgendwo. Fang mich nicht mit Logikfehlern an!


2
@ Jeff die meisten Entwickler schreiben zuerst etwas, das nicht kompiliert werden würde. Die Guten werfen einen Blick darauf und beheben einfache Syntaxfehler. Gut gestresst oder ruhig ok Programmierer schreiben eine Funktion, aber keinen Code, um sie aufzurufen, schreiben etwas, das nicht super optimiert ist, leiden (und nicht erkennen) ein off-by-one oder können einen Syntaxfehler oder zwei verpassen. Horrible Programmierer schreiben Code, der bei weitem nicht kompilierbar ist, machen das völlig Falsche, etc. Zum Beispiel Looping auf 3 oder 5, da diese in Frage kommen, anstatt Looping auf 99 oder 100 oder 101 (ish.) Oder gar nein Code überhaupt. Sie können es wirklich nicht glauben, bis Sie es sehen.
Kate Gregory

7
Wenn {"Wenn {} Dann {} EndIf" als absolut fehlgeschlagen gilt} Dann {ist Ihr Interviewstil fehlerhaft und / oder Sie haben das erstaunliche Glück, einen Kandidaten auf einer so trivialen Basis entlassen zu können} EndIf
Sparr

7
Ich programmiere monatlich in mindestens einem Dutzend Sprachen. Setzen Sie sich vor einen Computer und fordern Sie mich auf, in einem zu arbeiten, den ich seit einem Monat nicht mehr angerührt habe. In den ersten fünf Minuten mache ich solche Fehler, während ich wieder in den Groove zurückkomme vom Compiler oder Interpreter ausgegeben.
Sparr

2
@Sparr - sicher. Wenn Sie am Whiteboard darum bitten, es sich anzusehen, werden Sie es wahrscheinlich erkennen und sagen: "Hoppla, ich verwende viele Sprachen." Wenn nicht, sage ich: "In welcher Sprache haben Sie das geschrieben?" und dann wirst du. Es ist keine Trickfrage oder eine Falle. Einige Leute haben tatsächlich nie Code geschrieben und behaupten, dass sie es getan haben. Darum geht es bei Fragen wie diesen.
Kate Gregory

2
Aber ich denke, dass diese Fragen nicht gut dafür sind. Ich konnte Ihnen fünf Minuten vor Beginn dieses Kommentarthreads nicht sagen, ob VB geschweifte Klammern um Codeblöcke benötigt. Ich hätte dir sagen können, dass If / Then / EndIf meistens wie VB [.Net] aussah. Und ich schreibe Code in VB für ... ungefähr zwei Stunden alle drei Monate (rentacoder.com-Aufgaben, ich nehme nie echte VB-Jobs an, ich hasse es).
Sparr

10

Ich habe den von Ihnen erwähnten Coding Horror-Artikel 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 oft auf theoretische Fragen antworten (keine Intelligenz, kein Google, kein Nachschärfen, ... nur Ihr Gedächtnis ist gestresst). Das ist auch bei Tests so. Stress hilft dir nicht.

Ich habe festgestellt, dass der einzige Weg, um festzustellen, ob jemand für eine Stelle geeignet ist, darin besteht, eine Weile mit ihm zusammenzuarbeiten ... Nehmen Sie einfach die letzten 10 von 100 Personen (vielleicht mehr), wie viel wirklich gut war 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 Vorstellungsgespräch erforderlich. Aus diesem Grund konzentriere ich mich bei meinen Fragen darauf (Problemlösung) und überprüfe die Referenzen in der Vergangenheit.

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


28
IMHO ist das Problem hier, dass FizzBuzz eine so niedrige Frage ist, dass, wenn Sie sie selbst unter Stress nicht beantworten können, Sie es verdienen, dass die Leute in Ihrem Gesicht lachen, wenn Sie sich "Programmierer" nennen. Wenn es etwas etwas komplizierter, wie „eine Blase Art implementieren“, dann würden diese Ausreden und Bedenken gerechtfertigt, aber nicht für FizzBuzz.
Dsimcha

23
Fizzbuzz ist gut, was es für: Filterung der Menschen , die wissen nichts von dem Menschen etwas . Und etwas zu wissen , reicht vielleicht noch nicht aus, um die Arbeit zu erledigen. Es ist kein Einstellungsentscheidungstest, es ist ein Test, bei dem es darum geht, "meine Zeit in einem Interview zu verschwenden". Einige Personalchefs versuchen, den Fizzbuzz zu weit zu treiben, damit er ihren Job für sie erledigt.
Steven Evers

31
Meine Güte, Modulo ist keine Art esoterischer Operator. Es ist eine Kernoperation, mit der alle Entwickler Erfahrung haben müssen, wenn sie sich professionelle Programmierer nennen möchten. Unabhängig davon, ob jemand FizzBuzz schreiben kann, heißt das nicht, dass Sie ihn einstellen. Es ist nur ein kurzer Einstiegspunkt, um zu sehen, ob diese Person überhaupt versuchen kann , den Steuerungsfluss zu planen , der zum Ausführen der Aufgabe erforderlich ist.
Webbiedave

12
Ich denke, dass FizzBuzz einfach deshalb nützlich ist, weil es so irrsinnig trivial ist. Es erfordert eine for-Schleife, zwei if-Anweisungen, modulo und print. Jeder mit einer bedeutungsvollen Programmiererfahrung sollte in der Lage sein, es zu knallen, während es kaum ein Gedanke ist. Wenn jemand in einem Interview damit zu kämpfen hat, halte ich das für einen vollkommen gültigen Lackmustest.
Adam Crossland

11
@snorfus: Abgelegt unter "Das Problem eines anderen". Ich würde es vorziehen, das Boot eines guten Entwicklers mit lähmender sozialer Angst zu verpassen, als wertvolle Zeit und Geld für Schulungen zu verschwenden und auf Ergebnisse von jemandem zu warten, der keine Programmierkenntnisse besitzt. Kannst du nicht mit anderen Menschen umgehen? Einen Therapeuten aufsuchen.
Aaronaught

10

Vor kurzem wurde ich 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. Ich hatte damals die Absicht, den Leuten zu zeigen, dass wir auch bei Interviewfragen Spaß haben können.

80% der Bewerber haben das Problem gelöst, aber den Moduloperator nicht verwendet.

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

5% der Bewerber haben das Problem mit dem Moduloperator gelöst.

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 versuchen hier, 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 könnte, da das Problem so populär geworden ist. Dies zeigt mir, dass 5% meiner Bewerber möglicherweise keine Superprogrammierer sind, aber zumindest programmbezogene Blogs lesen.


Ich hätte gedacht, dass es am offensichtlichsten ist, den modulösen Opertor zu verwenden. Ich bin überrascht, dass 95% der Leute, die das Problem erfolgreich gelöst haben, etwas anderes benutzten. Vielleicht liegt es daran, dass sie neue Absolventen waren und sich selbst in Mathematik unterrichtet haben?
Jmoreno

Ich habe den Moduloperator in keiner meiner Klassen gelernt. Wenn ich keine Praktika absolviert hätte oder keine Zeit damit verbracht hätte, an Open-Source-Projekten mitzuwirken, hätte ich das erst gelernt, als ich in die Industrie eingestiegen bin. Außerdem wurde mir in einem meiner Informatik-Einführungskurse beigebracht, dass der ternäre Operator eine schlechte Codierungspraxis ist, weil er zu verwirrend und schwer zu lesen ist.
Robert Fraser

Was haben sie anstelle des Restoperators verwendet? x - (x/y)*y?
CodesInChaos

9

In meiner letzten Einstellungsrunde hatte ich 3 Bauarbeiter mit 0, ich wiederhole Null, Programmiererausbildung oder Erfahrung bewerben mich um eine Softwareentwicklerposition. * Das ist also der Boden des Fasses. Wenn Sie von einer normalen Verteilung der Fertigkeiten ausgehen, können Sie feststellen, dass das durchschnittliche Qualifikationsniveau recht niedrig ist und auch ein überdurchschnittliches Niveau (bei Bewerbern) noch relativ schlecht ist.

Wenn Sie nur die Bewerber ansprechen, die scheinbar über Programmierkenntnisse verfügen, werden Sie feststellen, dass Sie jetzt über Folgendes verfügen:

  1. Lügner
  2. Modewort-Enthusiasten (ich habe einmal einen Artikel über .NET gelesen)
  3. schlechte Programmierer
  4. Personen, die eine Technologie zum Abschließen eines Projekts verwendet haben, jedoch nichts davon gelernt haben (siehe Fizzbuzz-Fragen zu idisposable, um diese zu identifizieren)

Außerdem sind einige der von mir gestellten "Fizzbuzz" -Fragen domänenspezifisch. Sie können schrittweise mit einer Sprache / einem Framework x für eine Reihe von Jahren entwickeln (daher z Jahre Erfahrung mit x) und sind nicht auf bestimmte Teile davon gestoßen (Bibliotheksentwickler, die nicht viel über die Entwicklung von UI-Komponenten für z. B. wissen).

Ebenso machen heutzutage viele Entwickler Wartungsentwicklungen, so dass ihre Architektur- / Designfähigkeiten in einigen Bereichen schwach sein können.

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

* Nein, wir haben diese Anwendungen weder angerufen noch einen zweiten Blick darauf geworfen.


3
Wir hatten eine ähnliche Situation, aber da unser Vertrag mit dem Kunden angab, dass wir 4 Vollzeit-Entwickler für das Projekt haben würden und das Projekt im Grunde genommen abgeschlossen war, musste der Sheetrock-Hänger lernen, den Dollar des Kunden für die 3 zu programmieren verbleibende Wochen auf dem Vertrag.
Tangurena

Ich habe auch so etwas erlebt, als einige staatliche Leistungsprogramme / Arbeitslosenversicherungen vorschreiben, dass sich die Person, die die Leistung bezieht, auf eine bestimmte Anzahl von Jobs pro Woche bewirbt. Selbst wenn für diese Programme eine Art nominelle Anforderung besteht, die der Empfänger auf Stellen anwendet, für die er tatsächlich qualifiziert ist, sind die Ressourcen zur Beurteilung der Stellen, für die er qualifiziert ist, und zur Durchsetzung dieses bestimmten Teils der Anforderung "Bewerbung um Stellen" sehr begrenzt .
Daniel Martin

8

Ja wirklich. Wahrscheinlich nicht 99%, aber immer noch ziemlich hoch. Ich habe Informatikstudenten für Praktika und Vollzeitstellen interviewt. Ich würde ungefähr 25 Studenten an einem College interviewen. Uns wurde gesagt, wir sollten nicht die gleichen Fragen stellen, weil die Schüler miteinander sprachen. Ich lernte schnell, dass es keine Rolle spielte, denn von den 25 Schülern würden nur 3 oder 4 meine erste Frage beantworten können. "Strcmp schreiben"

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 verstehen, 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.

Das Ding programmiert ist SEHR SCHWIERIG. Viele Leute denken gern, sie könnten programmieren, aber sie tun es nicht.


3
Grade Inflation saugt, verschwendet Zeit für alle!
DarenW

8

Einige Gedanken:

  • Ich würde es niemandem vorenthalten, wenn ihr 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 es nicht 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.


2
Über den zweiten Punkt ... Nachdem ich viel Zeit damit verbracht hatte, über meinen nächsten Karriereschritt nachzudenken, verschiedene Branchen zu studieren und nach Jobs zu suchen, war es eine große Schwierigkeit, zu versuchen, mein eigenes Kompetenzniveau in vielen verschiedenen Dingen einzuschätzen. Anscheinend ist dies ein großes Problem für (fast) alle.
DarenW

@DarenW: Du hast mein Mitgefühl. Ich denke, es ist wichtig zu wissen, was du magst und von dort aus zu arbeiten. Persönlich habe ich die Schule immer gemocht und nie an meinem Interesse am Ingenieurswesen gezweifelt. Meine Geschwister sind sich fast sicher, was sie tun. Einer ist nicht, und es ist leicht zu erkennen, dass es ein Kampf ist. Ihre Homepage zeigt ein Interesse an der Schnittstelle von Wissenschaft und Kunst - das ist großartig. Einige Leute haben in der Jugend schlechte Erfahrungen gemacht, und das kann jetzt ihre ganze Energie verbrauchen.
Mike Dunlavey

7

Dieser Test deckt einige Dinge sehr gut ab, die ich über einen Programmierer wissen möchte, den ich vielleicht anheuere:

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

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


6

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


3

Es gibt zwei Arten von Leuten, 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 anhand des Lebenslaufs 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 wirklich programmieren können. 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 vorzustellen und nach einer Lösung und einer Erklärung der Lösung zu fragen, ist eine gute Möglichkeit, den Unterschied zwischen einer Petra Java und einer Paula Bean zu erkennen.

In beiden Fällen kümmert es mich nicht wirklich um eine perfekte Implementierung. 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 ausprobieren. Zweitens würde ich es vorziehen, die Fragen von Steve Yegge auf dem Telefonbildschirm zu verwenden, um Nicht-Programmierer auszublenden, bevor wir soweit gekommen sind, sie hereinzubringen Top 1% der Entwickler, die ihren Beruf ernst nehmen und auf jeden Fall ein Interview rechtfertigen. Ebenso wäre ich geneigt, sie zu interviewen, wenn jemand hier oder auf SO einen guten Repräsentanten hätte.


A) Wie gut ist "gut"? B) Stellen Sie ein? :)
Sparr

3

Es ist kaum zu glauben, dass Entwickler FizzBuzz erst dann codieren können, wenn Sie die "Nine-to-Fivers" 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 dreijähriger "Erfahrung" beibrachte, wie man ein Wörterbuch verwendet. 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

Ich denke, es liegt zum Teil daran, dass es mehr als eine Möglichkeit gibt, diese Frage zu beantworten. Je nachdem, welchen Weg der Kandidat wählt, kann er Ihnen einen Einblick geben, wie er codiert. Einige großartige Beispiele finden Sie hier, wenn Sie 10.000 Wiederholungen im Stapelüberlauf haben.

Überprüfen Sie in Bezug auf die 99% -Statistik, woher diese Zahl stammt. Es ist wahrscheinlich voreingenommen. Wenn es sich um Einsteiger-Programmierer handelt, die für ihren ersten Job interviewen, dann sehe ich das als möglich an, besonders wenn die Mehrheit ihrer Kandidaten gerade das College verlassen hat. 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
Ich vermute, dass die Zahl 99% auf die Wahrheit (nicht weniger die rekursive Wahrheit) der Aussage hinweist, dass 87% aller Statistiken vor Ort erstellt werden.
Adam Crossland

1
@Adam Crossland: 100% der Statistiken über Statistiken werden auch vor Ort erstellt.
Macha

Trotzdem scheint es schrecklich, dass jemand nach dem College keinen Fizzbuzz lösen konnte. Wenn sie das nicht können, was können sie dann tun?
Morgan Herlocker

2
@ironcode Ich ging mit jemandem zur Schule, der nicht einmal anfangen konnte, Fizzbuzz zu verstehen ... Ich wäre überrascht, wenn er überhaupt etwas schreiben könnte, das 100 Zeilen mit den fest codierten Fizzbuzz-Werten druckt. Sie absolvierten mit Auszeichnung.
Rachel

2

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 ist dieses Problem entweder schon einmal aufgetreten und kann problemlos mit dem Modulo-Operator behoben werden, oder es ist noch nicht aufgetreten und es tritt ein Problem auf. Es sagt dem Interviewer nichts über Ihre Programmierkenntnisse.

Ich denke, das Problem mit vielen Programmierern, die 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 Komplexität von Datenstrukturen, Hardwarearchitekturen, Entwurfsmustern usw. einprägen und sofort reproduzieren. Es ist unmöglich und unsinnig, alles auswendig zu lernen.

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


14
Wissen Sie, wie einfach FizzBuzz ist? Sie müssen nicht darauf gestoßen sein. Wenn Sie Schwierigkeiten haben, überlegen Sie sich eine berufliche Veränderung.
John Smith

Aber es kann ohne Modulo durch Division gelöst werden. Eine korrekte Lösung mit / anstelle von% würde für mich funktionieren. Sie müssen also die Grundlagen der Mathematik und der Programmierung verstehen.
Almo

0

Ich bin immer noch ein relativ junger Programmierer (ich programmiere seit ~ 2 Jahren Geld und habe vorher als Nebenverantwortlicher für ungefähr 2 in irgendeiner beruflichen Eigenschaft programmiert), also benutze genügend Salzkörner.

Ich habe einige Erfahrung damit, einen ersten Screen für Programmierer für ein großes Unternehmensprojekt zu erstellen (wir wussten, dass das Projekt zum Scheitern verurteilt war, aber hey, sie wollten sowieso bezahlen). Als einziger Programmierer der Firma, der die Einstellung vornimmt, erhielt ich die Aufgabe, Lebensläufe zu überprüfen und Bewerber zu prüfen.

Das war für ein Projekt der Regierung , so dass es vielleicht wahrscheinlich nicht die talentiertesten Bewerber anlocken haben, aber ich nicht erhalten eine Anwendung von jedermann mit einem Github - Konto , das war tatsächlich Code gezeigt, noch jemand, der ein Portfolio hatte, so habe ich fizzbuzz ( buchstäblich das genaue Problem) als erster Versuch für jeden, der so aussah, als könnte er programmieren.

Ich ging mit einer Pseudo-Entschuldigung voran, die besagte, dass ich wusste, dass es dumm war, aber dass ich nur irgendeinen funktionierenden Code sehen wollte, und wenn sie wollten, könnten sie ein anderes Beispiel von gleichem oder höherem Wert oder wirklich irgendetwas senden, aber dieser Fizzbuzz würde ausreichen.

Das Ergebnis: Ich habe keine Antwort erhalten, die wirklich korrekt war, was angesichts des Umfangs der Antworten im Internet umwerfend ist. Niemand machte sich die Mühe zu plagiieren. Wir mussten einfach 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 verdreht Regierungssoftware / Vertragsgestaltung war, fühlte ich mich viel besser in Bezug auf meine eigenen Fähigkeiten, also kleine Siege?

Bearbeiten: Mit "nicht korrekt" meine ich keinen Fehler nach dem anderen (dh ich habe nach 100 und nicht nach 99 gefragt) oder einen anderen unschuldigen Fehler, der eine einfache Lösung darstellt. Ich meine nicht funktionsfähig, entweder nicht laufen / kompilieren / etc oder zeigte deutlich, dass das Problem nur nicht gelesen und verstanden wurde, auch ein erheblicher Teil zog die Anwendung zurück und keiner schickte stattdessen einen anderen Code.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.