it-swarm-eu.dev

Wie erkennt man einen guten Programmierer?

Unsere Firma sucht neue Programmierer. Und hier kommt das Problem: Es gibt viele Entwickler, die im Interview wirklich gut aussehen, die Technologie zu kennen scheinen, die Sie benötigen, und einen guten beruflichen Hintergrund haben, aber nach zwei Monaten Arbeit stellen Sie fest, dass sie nicht in der Lage sind, zu arbeiten Ein Team, das Code schreibt, braucht sehr viel Zeit, und außerdem ist das Ergebnis nicht so gut, wie es sein sollte.

Verwenden Sie also formalisierte Tests (gibt es welche?)? Woran erkennt man einen guten Programmierer - und einen guten Menschen? Gibt es einfache "gute" Fragen, die die zukünftigen Probleme aufdecken könnten? ... oder geht es nur um Ihr "Gefühl" für die Person (dh hauptsächlich um Ihre Erfahrung) und darum, sie/ihn auszuprobieren?

Bearbeiten: Nach Manojs Antwort ist hier die Frage im Zusammenhang mit der Codierungsaufgabe beim Vorstellungsgespräch.

133
gius

Lassen Sie sie darüber sprechen, woran sie interessiert sind. Ich habe noch keinen Entwickler getroffen, der wirklich leidenschaftlich über Programmierung spricht, aber nicht wirklich programmieren kann. Sie können natürlich existieren - und Ihr Interview sollte auch auf Kompetenz prüfen -, aber Leidenschaft ist meiner Erfahrung nach ein guter Indikator. (Beachten Sie, dass dies nicht gleichbedeutend ist mit der Möglichkeit, "das Gespräch zu führen", wenn es um Schlagworte geht.)

Fragen Sie sie, was sie an ihrer Lieblingssprache oder Plattform nicht mögen. Wie würden sie die Dinge reparieren? Was möchten sie in der nächsten Version sehen? Haben sie Hobbyprojekte? Wenn sie einen Blog haben, lesen Sie ihn. Überprüfen Sie ihre allgemeine Online-Präsenz.

157
Jon Skeet

Gute Leute einzustellen ist schwer .

Ich habe einige echte Fehler gemacht, um besser zu werden. Sie beginnen, Ihrem Darmtrakt viel mehr zu vertrauen, nachdem Sie ihm die ersten Male nicht vertraut haben und es bereuen.

Ich habe großen Respekt vor Fragen zum Telefonbildschirm von Steve Yegge und habe dies als Grundlage für die Befragung von Menschen mit einigem Erfolg verwendet.
Ich denke auch, dass ich nach dem Lesen besser darin geworden bin, Leute zu interviewen Joels Leitfaden für Guerilla-Interviews (jetzt in Version 3.0, das ist der Version für das Web voraus und alles, was es muss gut sein).

Es gibt auch 57 weitere Fragen (Stand: 20.11.2008) zu Software Engineering Stackexchange mit dem Tag interviewt und einige von ihnen sehen sehr relevant aus. Schauen Sie sich diese an.

84
Hamish Smith

Einige Ideen:

  • Stellen Sie mehrere offene Fragen aus verschiedenen Blickwinkeln:

    • Überprüfen Sie einen Code. Was wurde identifiziert? Technische Fehler, Stilinkonsistenzen, Kommentare, Algorithmen, Wartbarkeit usw.
    • Schreiben Sie einen Code. Suchen Sie nach Prozess, Aufzählungsschutz, Lesbarkeit usw.
    • Erstellen Sie ein übergeordnetes Design für ein kleines System. Achten Sie auf das Verständnis des Problems, des Ansatzes, der Kommunikation, der Vollständigkeit und der Details.
    • Beschreiben Sie den Softwareentwicklungsprozess. Suchen Sie nach Design, Zusammenarbeit, Überprüfung, Tests, guten/schlechten Gewohnheiten und allgemeiner Erfahrung.
  • Wählen Sie etwas aus - alles -, was der Kandidat behauptet, gut zu wissen. Stellen Sie eine einfache Frage und stellen Sie dann basierend auf der Antwort eine andere, etwas detailliertere und "graben" Sie weiter, bis Sie die Grenze des Wissens des Kandidaten erreichen. Dies gibt Ihnen eine Vorstellung von:

    • Ehrlichkeit: Weiß er/sie so viel wie behauptet?
    • Tiefe des Wissens: Wie gut lernt er/sie Dinge?
    • Kommunikation: Wie gut erklärt er Ihnen etwas Unbekanntes? Ist der Denkprozess logisch?
    • Reaktion auf Stresssituationen: Wie schwer arbeitet er/sie, um zu antworten? Fälscht er es? Ist das unvermeidliche "Ich weiß nicht" einfach oder schwierig?
  • Fragen Sie, wie der Kandidat mit verschiedenen Situationen in früheren Jobs umgegangen ist: Teamwork, überfällige Projekte, Debugging, usw. . Sind die Antworten positiv oder negativ? Leidenschaftlich? Intelligent? Arrogant?

Ich finde die besten Kandidaten enthusiastisch, erfahren, selbstbewusst, aber höflich und am wichtigsten, anwesend. Sie müssen wissen, dass jemand drinnen ist. :-)

47
Adam Liss

Um einen guten Programmierer zu erkennen, müssen Sie ein guter Programmierer sein. Das bedeutet, dass Sie die Programmierung sehr gut kennen müssen, um die Dinge zu durchschauen, die im Interview gesagt und getan werden, und Sie müssen wissen, welche Fragen Sie stellen müssen.

Ich habe gesehen, dass Kandidaten beim Interview die falsche Antwort gegeben haben, aber ihre Erklärung hat gezeigt, dass sie das Thema kannten (und daher leicht die richtige Antwort erhalten konnten, indem sie im Internet suchten). Um das zu sehen, müssen Sie das Thema, zu dem Sie Fragen stellen, sehr gut kennen.

Eine andere Sache ist, Fragen zu Details zu vermeiden, die leicht gegoogelt werden könnten. Diese Frage zeigt nur, wie gut der Kandidat sich an Dinge erinnern kann, nicht, wenn er oder sie wirklich das Wissen und Verständnis hat, das Sie suchen.

Meine Empfehlung ist, Hilfe von jemandem zu bekommen, der sich mit Programmieren auskennt und über gute Fähigkeiten verfügt, um bei den Interviews zu helfen.

Edit: Ich habe auch einen Kommentar zu Interviews geschrieben hier .

39
Eigir

Denken Sie daran, dass Programmierkenntnisse nicht alles sind. Sie könnten den besten Programmierer der Welt haben, der für Sie arbeitet, aber wenn sie es hassen, mit anderen Menschen zusammenzuarbeiten, werden Sie sie nicht sehr nützlich finden.

Die Persönlichkeit eines Programmierers sollte ganz oben auf der Liste stehen, als die meisten Arbeitgeber sie zu bewerten scheinen. An meinem derzeitigen Arbeitsplatz achten sie sehr darauf, den richtigen Personentyp einzustellen.

Menschen können im Allgemeinen lernen, bessere Programmierer zu sein, Menschen können im Allgemeinen nicht lernen, bessere Menschen zu sein.

24
Doctor Jones

Machen Sie sie Code. Geben Sie ein Problem an, das in etwa 4 oder 5 Stunden gelöst werden kann, und überprüfen Sie den Code auf Dokumentation, Codierungsstil, Planung der Lösung, bevor Sie mit dem Codieren beginnen usw. Er muss das Problem nicht tatsächlich lösen. Und wie Jon Skeet erwähnte, bringen Sie sie dazu, über Programmierung, die Sprache ihrer Wahl und ähnliche Dinge zu sprechen. Sie können die Leidenschaft in einem guten Programmierer erkennen. Fragen Sie, wie vielen programmierbezogenen Sites sie folgen, z. B. Stackoverflow. Die Blogs, denen sie folgen, können ein guter Indikator sein.

16
Manoj

Ich mag die Passionsantwort. Ich glaube, man muss leidenschaftlich sein für das, mit dem man arbeitet, um wirklich sehr gut darin zu sein.

Ein guter Programmierer programmiert nebenbei neben der Arbeit (zumindest ab und zu). Er/sie löst gerne Programmierprobleme. Und wenn er/sie zu Hause kein Programm findet, das ein bestimmtes Bedürfnis löst, wird er/sie normalerweise versuchen, es selbst zu lösen.

Es gibt jedoch verschiedene Arten von Programmierern.

  • Sie haben diejenigen, die gerne dokumentieren. Persönlich hasse ich es zu dokumentieren. Es kann jedoch wichtig sein, zu dokumentieren, was getan wird.
  • Sie haben die "Hacker". Diejenigen, die ein komplexes Rätsel lösen wollen, bei denen Sie wahrscheinlich keine Lösung finden würden, wenn Sie googeln würden. Sie können "jedes" Problem lösen, solange sie die Werkzeuge haben, die sie benötigen.
  • Sie haben diejenigen, die sich zum Programmierer ausbilden, nur weil der Markt gut dafür war, für das Programmieren eingestellt zu werden. Diese sind normalerweise mittelmäßig, weil ihnen die Leidenschaft fehlt.
  • Sie haben diejenigen, die hervorragend kommunizieren können und "alles lösen können", aber sobald sie den Job bekommen, hängen sie über allen anderen, um Hilfe für das Problem zu bekommen, das sie lösen.

Wenn Sie den "Hacker" finden, der auch sehr gut dokumentiert und über hervorragende Kommunikationsfähigkeiten verfügt, würde ich glauben, dass Sie den Jackpot erreicht haben.

Oh, und noch eine letzte Sache. Sie möchten wahrscheinlich keinen Programmierer, der Führungsambitionen hat, da er nur die Programmierung zum Starten verwendet. Das bedeutet, dass Sie diese Ressource früher oder später verlieren.

Eine Frage, die ich bei der Einstellung eines Programmierers stellen würde, wäre: "Warum haben Sie sich als Programmierer ausgebildet?". Das wäre ein totes Werbegeschenk, wenn sie dort zögern würden.

Das ist meine Meinung.

16
Wolf5

Ein Freund von mir arbeitet in einem Unternehmen, in dem er einen weiteren Schritt im Einstellungsprozess hat: Nach dem ersten Screening und Interview muss ein Bewerber einige Tage lang "testen". Er sagte mir, dass ein Kandidat, obwohl er alle Fähigkeiten und Talente hatte, ihn nicht anstellte, weil er es war an a keine nette Person, mit der man arbeiten kann.

7
Svante

Es ist sehr schwer, einen Programmierer allein anhand eines Vorstellungsgesprächs zu erkennen.

Einige Dinge, die entscheiden, dass jemand ein guter Programmierer ist, sind:

  • in der Lage, in einem Team zu arbeiten
  • schreibt guten Code, der verständlich und wartbar ist
  • kann neue Technologien kennenlernen

Sie haben also einige kleine Hinweise, die Sie in einem Interview herausfinden können:

  • Kennt der Kandidat eine Technologie/Programmiersprache oder kennt er mehrere? Wenn er verschiedene Sprachen beherrscht, scheint er in der Lage zu sein, neue Dinge zu lernen, und er weiß möglicherweise über die Nachteile seiner derzeit bevorzugten Technologie/Sprache Bescheid. Fragen Sie also nach Wissen neben der Technologie, die Sie in Ihrem Unternehmen einsetzen.
  • Fragen Sie nach Projekten, in denen er bereits gearbeitet hat, insbesondere nach Hobbyprojekten und Open Source. Hobbyprojekte zeigen dir, dass er gerne programmiert und es auch in seiner Freizeit macht (und auf diese Weise seine Fähigkeiten verbessert). In einem Open-Source-Projekt können Sie den von ihm geschriebenen Code nachschlagen. Wenn an dem Projekt mehr als eine Person beteiligt ist, erhalten Sie möglicherweise Hinweise auf seine Teamfähigkeiten. In einem OS-Projekt können Sie die Mailinglisten-Archive nachschlagen, um mehr zu erfahren.
6
Mnementh

Sie könnten im Interview einen Test durchführen.

Oft gibt es aber auch ein Problem mit der Arbeitsumgebung. Dies ist in Ihrem Unternehmen sicherlich nicht der Fall, aber in der Softwareindustrie ist es durchaus üblich, dass die technologische Verschuldung zu hoch wird. Wenn Sie dann neue Leute einstellen, hilft es nicht viel, ob sie gut sind oder nicht, wegen der Schulden. Die Maximierung der Lesbarkeit und Verständlichkeit Ihres Programmcodes hilft den Neulingen, sich an die Arbeit zu machen.

Auch viele Menschen sind so, dass sie zusammenarbeiten können, aber manchmal gibt es keine Möglichkeit zur Zusammenarbeit. Wenn zum Beispiel alle Leute Entwickler sind, sollen sie ihren Job machen. Nun, das tun sie. Aber haben Sie einen Architekten, der das Entwicklungsprojekt steuert und Besprechungen und dergleichen abhält? Normale Entwickler haben möglicherweise das Gefühl, dass sie nicht das erforderliche Mandat haben, um Besprechungen zu starten, und sie denken möglicherweise, dass es nicht der richtige Weg ist, ab und zu andere zu unterbrechen.

Die Kommunikation untereinander sollte nicht das Endziel sein. Je weniger Kommunikation benötigt wird, desto besser, aber nur, wenn weniger möglich ist. Wenn Sie einen Architekten haben, wird weniger möglich. Die Gesamtmenge an Kommunikation bleibt möglicherweise auf einem guten Niveau, aber Sie erhalten mehr Ergebnisse bei gleicher Kommunikationsmenge.

3
Silvercode

zuerst beginne ich mit dem üblichen Interviewmaterial. Ich halte es für sehr wichtig, zu sehen, ob die Person vor mir etwas wert ist, und ihre Fähigkeiten und Kenntnisse zu bestimmen.

Danach verwende ich einige Techniken im Bereich Java, wie die Erörterung einiger Prinzipien, die hauptsächlich aus Effective Java stammen.

In diesem Stadium, wenn ich denke, dass ich einen guten Programmierer vor mir haben könnte, gebe ich ihm einen Code, um ihn zu überprüfen. Was ich sehen möchte, ist, dass er die gefährlichen Teile des Codes genau bestimmen, einige Hinweise auf Verbesserungen geben, Fallstricke bei der Leistung und Multithreading finden UND zwischen wichtigen Bemerkungen und "Geschmacksbemerkungen" unterscheiden kann. All dies hilft mir, einen kompetenteren Mitarbeiter zu finden.

aber am Ende erinnere ich mich immer daran, dass das Einstellen eine Art Glücksspiel ist ... sehr, sehr schwer zu antizipieren ...

3
baba smith

Ich weiß, dass dies nicht Ihre Fragen beantwortet, aber ich empfehle, wenn es die Gesetze erlauben, zunächst immer vorübergehend einzustellen (zwei Wochen oder einen Monat, je nach Job). Wenn die Person sein Salz wert ist, wird sie nichts dagegen haben, außerdem ist es ein Schutz für Sie beide (Sie können ihn gehen lassen und er könnte den Job nicht mögen und gehen).

2
Vinko Vrsalovic