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.
Antworten:
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.
quelle
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.
quelle
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:
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.
quelle
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 :)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:
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!
quelle
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.
quelle
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.
quelle
x - (x/y)*y
?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:
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.
quelle
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.
quelle
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.
quelle
Dieser Test deckt einige Dinge sehr gut ab, die ich über einen Programmierer wissen möchte, den ich vielleicht anheuere:
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?
quelle
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.
quelle
Es gibt zwei Arten von Leuten, von denen ich hoffe, dass FizzBuzz mir dabei hilft, sie zu vermeiden.
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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
vielleichtwahrscheinlich 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.
quelle