it-swarm-eu.dev

Was ist der beste Weg, um einen hervorragenden Programmierer in einem Vorstellungsgespräch zu erkennen?

Im Rahmen eines Interviews: Was ist der beste Weg, um zuverlässig zu identifizieren, wann jemand ein ist? ausgezeichneter Programmierer. Damit meine ich, dass er einer von denen ist, die 10-15 mal effizienter/schneller/besser sind als seine Kollegen am unteren Ende des Spektrums.

Viele von uns haben vom FizzBuzz-Problem gehört, um die Schwachen auszusortieren. Die Lösung dieses Problems von 5 bis 10 Minuten ist sicherlich ein ernstzunehmender Indikator dafür, dass ein Bewerber ein schwacher Bewerber ist. Ich gehe davon aus, dass ein guter Indikator in der Lage ist, dies so schnell wie möglich zu lösen. Dies scheint jedoch nicht ausreichend zu sein.

Ist es vielleicht so, als würde man ihm ein mäßig kompliziertes Buggy-Programm geben und sehen, wie schnell er es kriechen und alle Probleme damit identifizieren kann?

82
Claudiu

Ich entschuldige mich bei allen, die sich nicht für lange Antworten interessieren, aber ich denke, es ist ziemlich wichtig, Ihre Kandidaten zu qualifizieren, bevor Sie sie einstellen. Jeder, der eine beträchtliche Anzahl von Interviews in dieser Branche durchgeführt hat, weiß, dass die meisten Kandidaten die ersten 15 bis 30 Minuten eines Interviews nicht durchhalten werden, sodass der größte Teil dieser Liste nicht erforderlich ist. Denken Sie daran, wie teuer es ist (sowohl finanziell als auch emotional), jemanden zu entlassen, bevor Sie meine Liste als übertrieben abtun. Ich habe versucht, meine Interviewthemen hier in der Reihenfolge ihrer Wichtigkeit aufzulisten.

Allgemeine Intelligenz (Denksportaufgaben/Logikrätsel)

Informatikkenntnisse

Programmierübungen

  • GCD , Factorial , Fibonacci , Towers of Hanoi
  • String- und Listenumkehr
  • Bestimmen Sie, ob eine einfach verknüpfte Liste eine Schleife enthält (können Sie dies mit nur zwei Zeigern tun?)
  • Finde den Fehler

Kenntnisse über objektorientierte Programmiertechniken und allgemeine Entwurfsmuster

Algorithmusanalyse (Laufzeit O (n) Komplexität und Speicheranforderungen)

Verwendung von Werkzeugen und Methoden

Kenntnis allgemeiner Sicherheitslücken und Angriffe

Grundlegende Mathematik

  • Zahlensysteme (von einer Basis zur anderen konvertieren)
  • Wahrscheinlichkeitstheorie
  • Abstand zwischen zwei Punkten auf der kartesischen Ebene (Satz von Pythagoras)
  • Quadratwurzel (Reiher von Alexandria, sukzessive Annäherung)

Kryptographie

  • Kryptographie mit öffentlichem Schlüssel
  • Kryptographie mit symmetrischen Schlüsseln
  • Hash-Funktionen
  • Kryptografische Protokolle (geheimes Teilen, wissensfreie Beweise)

Diskrete Mathematik

  • Logik
  • Mengenlehre
  • Graphentheorie
  • Informationstheorie
  • Kombinatorik
  • Beweise (wie das Vorhandensein irrationaler Zahlen, unendlicher Primzahlen)

Vielleicht möchten Sie auch einen Blick auf das Buch werfen Programming Interviews Exposed . Es ist eine gute Referenz zu diesem Thema.

65
rboyd

Ah, die ewige Frage.

Ich habe dieses Jahr viele Interviews geführt (ich habe morgen zwei Kandidaten geplant), und meiner Erfahrung nach geht es bei der Einstellung mehr um Bauchgefühl und menschliche Fähigkeiten und weniger um technisches Wissen.

  1. Nehmen Sie sich Zeit für Lebensläufe. Einige Lebensläufe können innerhalb von Sekunden abgelehnt werden, andere dauern eine halbe Stunde. Manchmal denke ich viel länger an einen Kandidaten, der auf einem Lebenslauf basiert, als ich ihn interviewe. Einige Male habe ich Interviewfragen speziell für diesen Kandidaten vorbereitet, obwohl ich normalerweise keine Fragen vorbereitet habe.

  2. Technisches Wissen - es gibt ein Minimum, das ich möchte, und das ist normalerweise ziemlich einfach zu sagen. Wenn Sie Zweifel haben, sprechen Sie während des Interviews über Projekte, die er im Lebenslauf erwähnt hat, und gehen Sie so tief wie nötig. Dies ist normalerweise mehr als genug, um Ihnen zu sagen, was er weiß und was ihn zum Ticken bringt. Bildung ist nicht wichtig, frühere Jobs sind wichtig, mögliche persönliche Projekte punkten.

  3. Fragen Sie, was er tun möchte und wohin er mit seiner Karriere gehen möchte - brauchen Sie, was er hat, und können Sie bereitstellen, was er will? Außerdem frage ich gegen Ende des Interviews normalerweise nach einem bevorzugten Gehalt. Wenn er außerhalb meiner Reichweite ist oder ich nicht so viel für das bezahle, was er weiß, beenden wir das Interview.

  4. Vor allem muss der Kandidat in das Team passen, und ich muss zuversichtlich sein, dass wir zusammenarbeiten können. Ich muss ihn nicht mögen, aber ich muss in der Lage sein, mit ihm umzugehen, und er muss in der Lage sein, mit mir umzugehen. Wenn das nicht der Fall ist, werde ich bestehen, weil ich sein technisches Wissen nicht nutzen kann. Wenn dies der Fall ist und er schnell lernt, hindert mich sein Mangel an technischen Kenntnissen nicht daran, ihn einzustellen.

Ich habe Mädchen aus der Personalabteilung geschult, mir Lebensläufe zu übergeben, sobald sie diese erhalten. Ich plane das Interview so schnell wie möglich persönlich (idealerweise übermorgen nach Erhalt des Lebenslaufs für gute Lebensläufe). Dann bekommt er eine halbe oder eine Stunde Interview mit mir und mindestens einem Kollegen (normalerweise meinem Chef oder Teammitglied), wo ich ihn kennenlerne und Fragen beantworte. Selbst wenn ich seine Bewerbung sofort ablehne, bekommt er eine 20-30-minütige Führung durch das Unternehmen und ich spreche darüber, was wir tun und wie wir es tun. Dann schicke ich ihn zum Psychotest und ein bisschen wirklich wirklich grundlegender Papiercodierung/SQL an die Personalabteilung. Beide Tests spielen bei meiner Entscheidung fast nie eine bedeutende Rolle. Es ist eher eine Bestätigung, dass ich im Interview richtig beurteilt habe. Nach den Ergebnissen ist es ein 15-minütiges Gespräch, in dem ich ihm ein Angebot mache, und wenn wir die Bedingungen aushandeln, mit denen wir beide zufrieden sind, wird er eingestellt.

Dies ist ein Prozess, für den ich durch die Bürokratie des Unternehmens kämpfen musste, nachdem ich ein paar großartige Kandidaten verpasst hatte, und der funktioniert, weil ich derjenige bin, der über die Einstellung entscheidet (obwohl ich den Rat von HR und Mitarbeitern höre, meine Wort ist endgültig). Mehr Entscheidungsträger, längerer Prozess. Je länger der Prozess dauert, desto mehr müssen Sie Google sein, um die Spitze der Ernte zu erreichen.

Sobald ich sicher bin, dass das nicht passt, beende ich das Interview, er bekommt die Firmenreise und es ist vorbei. Dies kann während der Planung des Interviews nur zwei Minuten am Telefon dauern. Auch wenn Sie einen Kandidaten ablehnen, verkaufen Sie das Unternehmen. Wenn Sie gute Arbeit geleistet haben, kann eine gute Einstellung durch Mundpropaganda von abgelehnten Kandidaten erfolgen.

Auch ein Tipp. Senden Sie Ablehnungsschreiben (oder E-Mails) für jede Bewerbung, die Sie erhalten. In meiner jetzigen Firma überlasse ich das normalerweise der Personalabteilung (abgesehen von denen, die ich während des Interviews erzähle), aber irgendwann war es unbezahlbar, von einem abgelehnten Kandidaten eine freudige Antwort in den Zeilen "DANKE! Du bist die erste Firma, die es tatsächlich gibt" zu erhalten antwortete, anstatt mich zu fragen, ob sie eines Tages antworten werden! "

28
Domchi

Diese Antwort ist etwas außerhalb des Rahmens, aber ich denke, es ist ein wertvoller Punkt.

Die besten Programmierer interviewen selten. Sie müssen nicht. Wenn sich Ihr Unternehmen besonders weltweit verändert oder aufregend geheim gehalten wird oder mehrere Programmierer, die sie respektieren, dorthin gegangen sind, können sie sich bewerben, aber normalerweise erhalten großartige Programmierer Jobs über ihr Netzwerk von Mitarbeitern, nicht durch Einsenden von Lebensläufen.

Also: Der beste Weg, einem exzellenten Programmierer in einem Vorstellungsgespräch zu sagen, ist, dass er ist nicht da.

24
Rich

Jede Antwort muss Codebeispiele enthalten. Wenn Sie einen Programmierer einstellen, ohne seinen Code zu sehen, möchten Sie gerne einen Koch einstellen, ohne seine Küche auszuprobieren.

17
Andy Lester

Möglicherweise kommt ein "ausgezeichneter" Programmierer nicht zu einem Interview zu Ihnen. Sie müssen ihn wahrscheinlich von jemand anderem stehlen.

11
interstar

Eine Möglichkeit, den leidenschaftlichen Programmierern von den Programmierern "Ich will nur einen Job" zu erzählen, besteht darin, sie zu fragen, welches Buch sie diese Woche lesen. Dann fragen Sie sie nach den Büchern, die sie in den letzten Wochen gelesen haben.

Ich habe festgestellt, dass die leidenschaftlichen Programmierer IMMER lesen, und normalerweise enthält die Liste einige Programmier-/Comp-Programme. Sci. Bücher in der aktuellen Liste.

Es geht nicht nur darum, "mit dem Beruf Schritt zu halten" - leidenschaftliche Programmierer haben einen Wunsch und eine Liebe zum Programmieren und neigen dazu, Material zu einer Vielzahl von Themen zu verschlingen - nicht nur die Sprache, die sie gerade verwenden, sondern auch Methoden und andere Sprachen (insbesondere) neue oder "seltsame" oder alte), andere Aspekte der IT (vielleicht Robotik oder KI oder Spiele oder ...)

Wenn sie überhaupt keine aktuelle Buchliste haben, sind sie meiner Erfahrung nach wahrscheinlich kein großer Programmierer.

Prost,

-R

9
Huntrods

Es gibt verschiedene Zeitskalen, in denen jemand "schnell" sein kann: Einige kluge Leute können schwierige Rätsel in Sekunden lösen, aber einige kluge Leute produzieren in einem Monat viel guten Code, obwohl sie bei Interviewfragen möglicherweise nicht so schnell sind.

Fragen Sie die Kandidaten, ob sie in einem Open Source-Projekt aktiv sind, in dem Sie einen Teil ihres Codes überprüfen und einige Zeit damit verbringen können, die Mailinglistenarchive und Commit-Protokolle dieser Projekte zu lesen. Das wird Ihnen viel mehr sagen als alles, was die Kandidaten in einem Interview demonstrieren können. (Natürlich kann dies das Interview nicht ersetzen, da nicht alle guten Programmierer Open Source-Arbeit leisten.)

7

Das Buch " Smart and Gets Things Done: Joel Spolskys prägnanter Leitfaden zur Suche nach dem besten technischen Talent " kann helfen, eine Antwort zu finden.

(

Inhaltsverzeichnis:

  • Einführung
  • Kapitel 1: "Die hohen Töne treffen"
  • Kapitel 2: "Gute Entwickler finden"
  • Kapitel 3: "Ein Leitfaden für Entwickler"
  • Kapitel 4: "Sortieren von Lebensläufen"
  • Kapitel 5: "Der Telefonbildschirm"
  • Kapitel 6: "Der Guerilla-Leitfaden für Interviews"
  • Kapitel 7: "Suboptimale Teams reparieren"
  • Anhang: "Der Joel-Test"

Der Artikel von Joel "Der Guerilla-Leitfaden für Interviews (Version 3)" kann ebenfalls hilfreich sein.

Und der Artikel "Fertig und macht die Dinge schlau" von Steve Yegge zu diesem Thema.

7
sergtk

Lassen Sie sie auf einem Whiteboard codieren. Nur so können Sie feststellen, ob sie wissen, wie man Code schreibt.

4
ManiacPsycho

Stellen Sie ihnen eine Reihe von Fragen, bei denen sie codieren müssen, und die Fragen werden schwieriger. Wenn sie die Herausforderung zu genießen scheinen, haben Sie wahrscheinlich eine Live-Herausforderung.

Wenn sie die erste einfache Frage nicht beantworten können, wie "schreibe eine for-Schleife" oder etwas dumm Einfaches, dann weißt du, dass diese Person nicht codieren kann.

4
ManiacPsycho

Sie sollten hauptsächlich die Arbeit beurteilen, die sie bereits geleistet haben. Jeder Code oder jede Idee, die jemand während eines von Ängsten geprägten Interviews generiert, ist ein schlechter Indikator für das, was er tatsächlich in einem Team produzieren kann.

Um Codierungsprobleme zu lösen, verwenden Sie IM mit so etwas wie codepad.com und lassen Sie sie dies bequem von zu Hause aus tun. Schreiben Sie einen Großteil Ihres Codes auf ein Whiteboard vor Ihrem Chef, mit einer Frist von 30 Minuten und Ihrem Bonus in der Leitung? Ich nicht.

Ist das Interview also sinnlos? Nein, aber der Schwerpunkt sollte darauf liegen, dass sie erklären, was sie getan haben und was sie genau beigetragen haben.

Sie werden auch allen Arten von psychologischen Vorurteilen ausgesetzt sein, wenn Sie jemanden von Angesicht zu Angesicht treffen. Stellen Sie nicht versehentlich einen Programmierer ein, weil dieser einen besseren Blickkontakt hat oder größer ist als jemand anderes. Um diese zu umgehen, würde ich so viel wie möglich über IM/E-Mail interviewen, bevor Sie sie von Angesicht zu Angesicht treffen.

3
twk

Die Sprache spielt keine Rolle. Logik tut. Ich meine, IDEs und Compliers sind heutzutage so gut, dass jeder gute Programmierer in einer Woche jede Sprache (ok, vielleicht kein Assembler) lernen kann. werde in ein paar Wochen anständig und in ein paar Monaten sehr gut.

Es ist sein (ihr) Gehirn, das Sie bestätigen müssen. Und du machst das, mein Reden. Ich bitte sie, einfache Probleme zu lösen. Nicht indem ich Code schreibe, sondern indem ich durch ihre Logik gehe, um zu einer Lösung zu kommen.

Aber ich gebe zu, wenn er keine einfache Schleife von 1 bis 10 schreiben kann, haben Sie Probleme.

2
Stephen Cox

Ein guter Programmierer im Interview zu haben, ist meiner Meinung nach am besten.

Nur ein Experte kann beurteilen, ob der Bewerber nur viele Interviewfragen kennt oder ob er tatsächlich über die Probleme nachdenkt und ins Detail gehen kann. Denken Sie daran, dass Sie keine Mitarbeiter einstellen möchten, um Interview-Rätsel zu lösen. Sie möchten sie einstellen, um die eigentliche Arbeit zu erledigen.

Rätsel sollen Menschen ausschließen, die die Grundlagen nicht richtig verstehen. Wenn Sie Ihre Fähigkeiten testen möchten, bereiten Sie einige Dinge vor, über die Sie (oder Ihr "guter Programmierer") ins Detail gehen und sich auf die konzentrieren können, über die der Bewerber eine Weile nachdenken muss. Wie geht er mit Problemen um, deren Lösung er nicht sofort kennt?

1
mdm

Ich denke nicht, dass Sie im Interview über Leidenschaft sprechen sollten. Ehrlich gesagt klingt es so, als ob ein Unternehmen, das nach "Leidenschaft" sucht, wirklich "ohne Geld für die Idee arbeiten" bedeutet.

Leidenschaft garantiert nicht einmal Exzellenz. Ich verbringe fast mein ganzes Leben damit, zu programmieren, über Programmierung zu lesen, verrückte Sprachen wie Erlang oder Clojure zu lernen, und ich werde dafür nicht bezahlt. Trotzdem lutsche ich am Programmieren.

Ich denke, ein ausgezeichneter Programmierer sollte einen Überblick über erfolgreiche Projekte haben, an denen er aktiv beteiligt war. Daher ist es im Interview nicht erforderlich, einen Programmierer dazu zu bringen, etwas über das grundlegende FizzBuzz zu schreiben. Sprechen Sie über ihre vergangenen Projekte und was sie getan haben. Stellen Sie Programmierer ein, um Rubiks Würfel zu lösen und Murmeln zu zählen, oder arbeiten Sie an lang und groß und anstrengend Softwareprojekten mit mehr als 50 Zeilen Coe?

1
mannicken

http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/

Aus dem Artikel:


Die Kriterien in Aufzählungszeichen

Zusammenfassend sind hier einige Indikatoren und Gegenindikatoren aufgeführt, die Ihnen helfen sollen, einen guten Programmierer zu erkennen.

Positive Indikatoren :

  • Leidenschaft für Technologie
  • Programme als Hobby
  • Spricht Ihnen ein Ohr zu einem technischen Thema, wenn Sie dazu ermutigt werden
  • Bedeutende (und oft zahlreiche) persönliche Nebenprojekte im Laufe der Jahre
  • Lernt selbst neue Technologien
  • Überlegt, welche Technologien für verschiedene Anwendungen besser geeignet sind
  • Sehr unangenehm bei der Idee, mit einer Technologie zu arbeiten, die er nicht für "richtig" hält.
  • Klar klug, kann tolle Gespräche zu einer Vielzahl von Themen führen
  • Begann lange vor der Universität/Arbeit mit dem Programmieren
  • Hat einige versteckte "Eisberge", große persönliche Projekte unter dem CV-Radar
  • Kenntnisse über eine Vielzahl von nicht verwandten Technologien (möglicherweise nicht im Lebenslauf enthalten)

Negative Indikatoren :

  • Programmieren ist ein Tagesjob

  • Ich möchte nicht wirklich "reden", auch wenn ich dazu ermutigt werde

  • Lernt neue Technologien in von Unternehmen gesponserten Kursen

  • Gerne arbeiten wir mit der Technologie, die Sie ausgewählt haben. „Alle Technologien sind gut.“

  • Scheint nicht zu schlau

  • Beginn der Programmierung an der Universität

  • Alle Programmiererfahrungen sind im Lebenslauf enthalten

  • Konzentrierte sich hauptsächlich auf ein oder zwei Technologie-Stacks (z. B. alles, was mit der Entwicklung einer Java -Anwendung) zu tun hat, ohne Erfahrung außerhalb davon

1
Ronny Brendel

Zunächst einmal gibt es eine Möglichkeit, sich eine Vorstellung zu machen, bevor das Interview überhaupt beginnt:

Wenn sie ein Blog haben oder zu einem oder mehreren Open Source-Projekten beitragen, schauen Sie sich einfach den Code und die Artikel an, die sie geschrieben haben. Erstens haben sie, wenn sie eines davon getan haben, die Initiative, Dinge zu erledigen. Sie können diese Dinge auch mit der Arbeitserfahrung vergleichen, die sie in ihrem Lebenslauf aufgeführt haben, und sich ein Bild davon machen, ob sie nach der Arbeit nach Hause gehen und mehr lernen oder ob sie nach 17 Uhr nach Hause gehen und die Arbeit vergessen.

Haben sie im Wesentlichen eine Leidenschaft für das Programmieren oder nicht? Das ist die eigentliche Frage.

1

Ein ausgezeichneter Programmierer kann auch mit diesen Kollegen mit niedrigerem Spektrum arbeiten. Solange sie den Test machen können und sich nicht in ihrem Ego suhlen, haben Sie einen guten Kandidaten, nein?

Dieser Fizzbuzz-Test ist allerdings irgendwie lustig. Die Lösung, die ich mir vorstellen kann, verwendet den Modulo-Operator. Was ich nur aus der Erarbeitung von Koordinaten für die Zuordnung von Zeichenblättern weiß (in der Schule oder im College nie erwähnt). Würde der durchschnittliche Programmierer überhaupt davon wissen oder hätte ich eine Mistausbildung gehabt?

0
Yes Fish...

Ein Kriterium, das ich verwende, ist zu sehen, an welcher Art von Sprachen und Werkzeugen er gearbeitet hat, entweder in akademischen oder in professionellen Projekten, und was genau er erreicht hat. Hat er immer auf Anwendungsebene mit Standardbibliotheken gearbeitet (immer ein C # - oder VB6-Typ?) Oder hat er ein Projekt mit C unter Linux durchgeführt, das sich mit Hardcore-Dingen wie Zeigern, Speicherverwaltung, Rekursion, Prozesssynchronisation, gegenseitigem Ausschluss, Ereignissen usw. Befasste Wenn er diese Kern- und Grundkonzepte immer unter einer Abstraktionsschicht verwendet hat, werde ich zweifelhaft sein.

Dies ist offensichtlich zusätzlich dazu, dass er Code schreibt. Nichts ist ein Ersatz dafür. Ich sorge jedoch dafür, dass einige Leute Code schneller schreiben können als andere, und die Leute unterschiedliche Reaktionszeiten haben, wenn sie im Rampenlicht eines Interviews stehen.

0
Ather