it-swarm.dev

Was ist der beste Weg, um neue Programmierer zu bewerten?

Was ist der beste Weg, um die besten Kandidaten für einen neuen Job zu bewerten (nur in Bezug auf Programmierkenntnisse)? In meiner Firma haben wir viele schlechte Erfahrungen mit Leuten gemacht, die gute Noten haben, aber keine wirklichen Programmierkenntnisse haben. Ihre Fähigkeiten sind lediglich wie Code-Affen, ohne die Fähigkeit, die Probleme zu analysieren und Lösungen zu finden.

Weitere Dinge, die ich beachten muss:

  • Das Bildungssystem in meinem Land ist scheiße - wirklich scheiße. Die Leute, die in dieser Art von Arbeit gut sind, sind gut, weil sie Talent dafür haben oder wirklich versuchen, selbstständig zu lernen.

  • Der Universitäts-/Abschluss-/Aufbaustudiengang bedeutet nicht unbedingt, dass Sie genau wissen, wie man die Dinge macht.

  • Zertifizierungen bedeuten hier auch nichts, da die Verantwortlichen des Zertifizierungskurses ebenfalls keine Fähigkeiten haben (oder schlecht bezahlte Jobs haben).

Wir müssen wirklich die guten Kandidaten finden, die flexibel sind und kein mechanisches Denken haben (weil diese Art von Menschen aus Erfahrung eine geringe Leistung haben).

Wir sind in einer Regierungsinstitution und die Kandidaten kommen nicht unbedingt von außen, aber wir haben die Möglichkeit, Kandidaten zu akzeptieren oder nicht, bis wir den richtigen gefunden haben.

Ich hoffe, ich klinge in meiner Frage nicht zu aggressiv. und übrigens bin ich selbst Programmierer.

edit : Ich habe herausgefunden, dass hier etwas wirklich Komplexes gefragt wurde. Ich werde "die richtige Antwort" deaktivieren, nur um die Diskussion fließend und ohne Vorurteile laufen zu lassen.

53
Rafael

Bei der Auswahl der Kandidaten gehe ich normalerweise von einem Drei-Streik-Plan aus:

  • Regelmäßiger Test mit FizzBuzz-ähnlichen Codierungsfragen und vielen Wissensfragen, bei denen codierte Beispiele angegeben werden müssen. Abhängig von der Position kann es sich um OO Prinzipien, SQL Design Prinzipien usw.) handeln. Ich erhöhe die Schwierigkeiten von Fragen während des Tests, um zu sehen, wie weit sie gehen können. Die Idee ist nicht wirklich zu haben Alle beantworteten Fragen (wenn ja, desto besser), aber auch, um zu sehen, ob sie erkennen können, wenn sie etwas nicht wissen. Vertrauen ist unerlässlich, und ich möchte nicht, dass mich jemand in meinem Team anlügt.

  • Kehren Sie mit dem Kandidaten zum Test zurück und diskutieren Sie die Antworten. Mögliche Erweiterung der Fragen, um die Grenzen des Kandidaten zu erreichen. Dies kann umfangreich sein, und je umfangreicher es ist, desto besser.

  • Last but not least Die Codeüberprüfung . Ich bitte den Kandidaten, einen Code mitzubringen (ich platziere den vorherigen Test/die vorherige Diskussion und diese Überprüfung im Allgemeinen um einige Tage, damit er einen Code schreiben und polieren kann). Dann führen wir eine regelmäßige Codeüberprüfung mit zwei Personen durch: einer Person, die direkt mit dem Kandidaten zusammenarbeitet, und der Person, die den Test zuvor mit dem Kandidaten überprüft hat. In Bezug auf die Codeüberprüfung können Sie diesen Artikel von JohnFX lesen.

Am Ende sollten Sie entscheiden können, ob dieser Kandidat Teil Ihres Teams sein soll oder nicht.

53
Matthieu

Beginnen Sie damit, ihnen FizzBuzz zu geben, um sie zu lösen. Das sollte das Schlimmste ausmerzen.

Dann etwas schwieriger - zum Beispiel, wie man einen String ohne eingebaute Bibliotheksfunktionen umkehrt. Bitten Sie sie, beim Lösen zu sprechen, um zu sehen, was ihr Denkprozess ist.

Sie können immer schwierigere Probleme geben, wenn sie diese sehr einfach finden, bis Sie überzeugt sind, dass sie den Weg gehen und nicht nur sprechen können.

20
Oded

Suchen Sie einfach nach Leidenschaft für den Job.

Um Joel zu zitieren, suchen Sie nach Leuten, die " klug, und erledigen Sie die Dinge. " sind.

Der Rest spielt keine Rolle

14
CaffGeek

Basierend auf meiner 25-jährigen Programmierzeit (die zugegebenermaßen nur 5 oder 6 Fälle umfasst, in denen andere Programmierer eingestellt wurden):

Positive Indikatoren:

  • Leidenschaft für Technologie

  • Programme als Hobby

  • Wenn Sie dazu ermutigt werden, sprechen Sie über ein technisches Thema

  • 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 von Ihnen ausgewählten Technologie. "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

Außerdem würde ich vorschlagen:

  • Der FizzBuzz Test (oder so ähnlich, um die grundlegende Fähigkeit zum Schreiben eines Algorithmus zu testen.
  • Schwierigere Version des FizzBuzz-Tests (um sie zum Fehler- oder Beinahe-Fehlerpunkt zu bringen).
  • Besprechen Sie ihren Code und prüfen Sie, ob sie bereit sind, selbstkritisch zu sein, und suchen Sie nach Verbesserungen (für die sie in einem kurzen Test vor Ort wahrscheinlich keine Zeit hatten) wie:
    • gute Variablennamen (Ich hatte sehr erfahrene Programmierer, die Variablen in der Produktion wie "flag" (WTF ??) verwendeten.
    • modularisierung.
    • Probleme antizipieren und "defensive Codierung" durchführen
  • Die Bereitschaft, "Mängel" als Verbesserungsmöglichkeiten zu sehen. Ich denke, die besten Programmierer suchen immer unerschütterlich nach Fehlern in ihrem vorherigen Code. Sie sind nicht so egozentrisch, dass sie denken, dass es eine persönliche Beleidigung ist, einen Fehler zu finden. Sie sehen es als Chance, es besser zu machen. (Diejenigen, die Fehler nicht unerschütterlich betrachten können, sind entweder überwältigt, wenn sie einen Fehler sehen (und werden sehr unterbewusst oder, um genau das zu vermeiden, ignorieren sie die Fehler.
  • Können sie debuggen?
  • Können sie Unit Test? (Ich habe mit viel zu vielen Programmierern gesprochen, die sagen "QC macht das". Ich spreche nicht über das Testen, ich spreche über das Testen: Sie schreiben eine Funktion, funktioniert sie? Ergreift sie angemessene Anstrengungen, um damit umzugehen wahrscheinliche Probleme (NULL-Eingabe usw.) Wenn Sie das nicht können, woher wissen Sie, wann Sie fertig sind?
  • Haben sie gute Kommunikationsfähigkeiten? (Zumindest: gutes Verständnis und Selbsterkenntnis darüber, wann sie verstehen und wann nicht und die Bereitschaft zu sagen "Ich verstehe nicht, bitte erkläre es noch einmal".

Ein Großteil der obigen Zusammenfassung stammt von Wie man einen guten Programmierer erkennt, ein großartiger Artikel, der fokussiert ist etwas mehr über Indikatoren mit größerer Reichweite. Es bestätigt definitiv meine Intuitionen und Erfahrungen. Es sind auch viele Dinge (wie "Leidenschaft"), die normalerweise nicht in einer Checkliste von "Was ist ein guter Programmierer" erwähnt werden.

13
Clay Nichols

Die Bewertung der Programmierintelligenz ist eine Form des Turing-Tests. Daher gibt es (derzeit) keine geschlossenen Bewertungsverfahren, deren Funktion garantiert ist. Es braucht intelligente Programmierer, um andere intelligente Programmierer zu erkennen, aber nur mit einer vernünftigen Wahrscheinlichkeit.

Ihre Chancen stehen besser, wenn Sie Interviewer in Ihrem Team haben, die Schneejobs riechen und instinktiv nicht gerne mit dummen Leuten arbeiten (selbst diejenigen, die gut aussehen, beeindruckend aussehende Lebensläufe haben und alle üblichen Dosenlösungen aus dem Gedächtnis herausspritzen können). .

(Eine mögliche Methode, die die Qualität des Stackoverflow als Nebeneffekt verbessern würde, besteht darin, alte Stackoverflow-Fragen zu klären, die in irgendeiner Weise mit Ihren Jobanforderungen zusammenhängen, aber Ihrer Meinung nach schlechtere Antworten haben. Fragen Sie den Befragten, wie sie antworten würden, und Lassen Sie sie es posten, wenn es eine gute Antwort ist. Ähnlich wie bei einer Zusammenfassung für Crowd-Sourcing-OCR.)

10
hotpaw2

Geben Sie ihnen ein Problem, vorzugsweise eines, das mit der Problemdomäne verbunden ist, an der sie arbeiten werden, und bitten Sie sie, zu besprechen, wie sie es angehen würden. Sie können sie einfach diskutieren, pseudocodieren oder Teile des tatsächlichen Codes schreiben lassen, je nachdem, wie sicher Sie in ihrem Können sind

Wenn Ihre Organisation beispielsweise Konferenzen durchgeführt hat, bitten Sie sie, darzulegen, wie sie ein sicheres Online-Registrierungssystem codieren würden. Sie sollten in der Lage sein, einige der Grundlagen zu behandeln und gute Fragen zu stellen, was genau implementiert werden muss. Während der Interaktion sollten Sie feststellen können, ob sie gut zu Ihrem Unternehmen passen und welche Rolle sie übernehmen müssen.

Ich bin kein großer Fan von Trivia-Tests und Denksportaufgaben. Während sie für einige Leute Spaß machen können, können sie auch andere Leute nerven und/oder belasten, einschließlich Leute, die vielleicht am besten zu Ihrem Team passen. Darüber hinaus sind Informationen zu vielen solchen Tests online verfügbar und fördern das Überfüllen der Tests und anderer Taktiken, die ihre Lebensfähigkeit beeinträchtigen würden, um die Fähigkeit des Programmierers zu messen.

7
jfrankcarr

Das Lesen dieser Frage und einiger der erhaltenen Antworten veranlasste mich, einen Artikel zu schreiben, der meiner Meinung nach von Interesse sein könnte:

Seltsame Rekrutierungspraktiken bei der Einstellung von Softwareentwicklern

Ok, der Titel des Artikels ist also Müll, aber der Artikel bringt das Problem auf den Punkt. Es ist nicht das Problem des Kandidaten, dass Sie ihn interviewt haben, egal wie unangemessen er für die Rolle ist, die Sie sich vorgestellt haben. Wenn Sie es nicht geschafft haben, ein gut durchdachtes Einstellungsverfahren zu definieren, mit dem Sie die Edelsteine ​​im Rough finden können, müssen Sie nur mit den Konsequenzen leben, und ja, dies bedeutet, dass Sie ein paar Kandidaten finden, die dies könnten Erfüllen Sie niemals Ihre Erwartungen. Um Ihre Kandidaten anhand ihrer Briefe und Lebensläufe zu filtern, müssen Sie zuerst Ihre Bewerber bitten, einen Brief über sich selbst und ihre Wünsche für die Rolle zu schreiben, und dann prüfen, wie der Lebenslauf geschrieben wird. Wenn Sie nur ein oder zwei potenzielle Kandidaten für ein Interview haben, haben Sie das Pre-Screening wahrscheinlich ordnungsgemäß durchgeführt. Wenn Sie sich zu diesem Zeitpunkt noch nicht zwischen Ihren Kandidaten entscheiden können und noch hundert Bewerbungen vorliegen, haben Sie wahrscheinlich entweder Ihre Erwartungen zu niedrig gesetzt oder waren in Ihrem Filterprozess nicht aggressiv genug.

Wenn Sie schließlich die 1 oder 2 Kandidaten finden, die Ihrer Meinung nach Ihre Zeit wert sind, stellen Sie nicht einfach eine Handvoll verrückter Testerfragen, sondern investieren Sie stattdessen die Zeit, um diese Personen kennenzulernen und offene Diskussionen über Software zu führen Engineering im Allgemeinen. Sie werden mehr aus einer lockeren Herangehensweise an den Kandidaten lernen als jemals zuvor in der traditionellen (und etwas kontroversen) Interview-Situation. Geben Sie sich auch nicht einfach mit einem einzigen Interview zufrieden, sondern behandeln Sie Ihre Schlüsselkandidaten mit mehreren Besprechungen, in denen offene Diskussionen verwendet werden und in denen sich der Kandidat mit seinen potenziellen Kollegen treffen kann. Die Zeit wird nie verschwendet, da unangemessene Kandidaten in einer hochtechnischen Diskussion nicht sehr gut gedeihen und ihre Fehler sehr schnell zeigen, wenn sie ihre Wache fallen lassen. Wenn Sie die Zeit verbringen und noch keine Anstellung haben, hatten Sie die Gelegenheit, mehr über Ihre Bedürfnisse zu erfahren, und können Ihren Interviewprozess basierend auf den Erkenntnissen aus den "fehlgeschlagenen" Interviews weiter verbessern.

3
S.Robins

Sie haben nicht gesagt, für welche Sprache, aber es ist ziemlich einfach, jemandes Wissen zu testen. Es hängt auch von der Ebene ab, die Sie suchen, aber es gibt einen ziemlich großen Pool von Fragen bezüglich der Interviewfragen.

Wie auch immer Sie sich entscheiden, Ihr Interview zu führen, stellen Sie nicht diese Interviewfragen zum Thema "Querdenken" .

1
BЈовић

Ich schlage vor, Sie gehen mit einer FizzBuzz-Frage und mieten die erste, die besteht. Weitere Tests sind in der Regel fehlerhaft, da nicht jeder gute Programmierer sich einem Problem wie Ihnen nähert oder ein Interview ohne Stottern führt oder die Sprachen kennt, die Sie möchten oder die Sie interessieren, oder Albernheit wie der Austausch von ganzen Zahlen ohne eine dritte Variable (wer braucht das überhaupt? Ich Mittelwert, da RAM 128 Bytes überschritten?).

Denk darüber nach. Wenn die FizzBuzz-Frage 199 von 200 eliminiert, wurden nur Hunderte von Interviews eliminiert. Wollten Sie wirklich Hunderte von Interessenten interviewen?

Es scheint nur, als würden die Renditen nach FizzBuzz sinken. Dies setzt voraus, dass 199/200 sogar annähernd nahe ist. Und ich nehme an, dass IHRE Zeit auch wertvoll ist ...

1
Harold Bamford
  1. Können sie verteidigen, was sie zu wissen behaupten? Sie haben es als eine Fähigkeit oder etwas, das sie in einem anderen Projekt getan haben, in den Lebenslauf aufgenommen. Sehen Sie, wie ausführlich sie sich mit dem Thema befassen können.
  2. Können sie etwas Neues lernen? Sprechen Sie über einen allgemeinen Aspekt der von Ihnen verwendeten Technologie oder über etwas Spezielles für den Geschäftsbereich, in dem Sie arbeiten, und prüfen Sie, ob diese das Thema erfassen können. Stellen sie intelligente Fragen? Können sie eine Analogie finden? Ist es ähnlich wie in einer anderen Branche oder Technologie?

  3. Würden sie lieber programmieren? Es muss nicht die Nummer eins auf ihrer Liste sein, aber sie müssen das Schreiben von Code bevorzugen. Und ich meine, tatsächlich Code schreiben und etwas machen, nicht den ganzen Tag herum sitzen und darüber reden oder an die Tafel zeichnen. Nicht um die Planung zu minimieren oder die Cowboy-Codierung zu fördern, aber Sie müssen irgendwann Code haben. Vermeiden Sie diejenigen, die die Tastatur meiden. Dies ist keine Managementposition.

Sie können auf einer Skala von eins bis zehn Punkte erzielen oder sich einfach darauf verlassen, dass Sie Ihre eigene Art riechen können.

0
JeffO

Wenn Sie sich dadurch besser fühlen, gibt es in so ziemlich jedem Land schlechte Programmierer. Wie man sie aussortiert, ist das Problem.

Erstes Jäten ist der Lebenslauf. Eine Sache, nach der ich suche, ist eine Menge behaupteter Spracherfahrung und nichts, um zu beschreiben, was sie in dieser Sprache getan haben. Ich habe Lebensläufe gesehen, die so ziemlich behaupten, dass sie jede Sprache kennen, die jemals erfunden wurde, und dennoch zeigt ihre Erfahrung, dass sie tatsächlich nur mit Access und Visual Basic gearbeitet haben. Die gehen direkt in den Müll. 10-seitige Lebensläufe werden direkt in den Papierkorb verschoben (insbesondere 10-seitige Lebensläufe von Personen mit weniger als 2 Jahren Erfahrung, die ich gesammelt habe). Von den jüngsten College-Absolventen mit wenig Erfahrung muss man wirklich wählerisch sein, wie sie sich präsentieren. Die besten Kandidaten sind vorsichtig mit ihren Lebensläufen, sie haben keine Fehler. Suchen Sie wirklich jemanden, der sich so wenig darum kümmert, dass er sich nicht die Mühe gemacht hat, seinen Lebenslauf Korrektur zu lesen?

Professionell vorbereitete Lebensläufe werden ebenfalls in den Papierkorb geworfen. Sobald Sie Hunderte von Lebensläufen gelesen haben, können Sie sie auswählen, da sie genau dieselbe Formulierung verwenden. Sie können dem Inhalt eines professionell erstellten Lebenslaufs nicht vertrauen und wissen, dass die Person ihre eigenen Vorbereitungen nicht getroffen hat. Dies ist die Art von Person, die sich darauf verlässt, dass andere seine Probleme für ihn lösen. Wollen Sie das wirklich in einer Programmierposition?

Suchen Sie nach Dingen, die die Person von denen abheben, die Sie auswählen. Das ist natürlich schwieriger mit denen, die gerade nicht zur Schule gehen, aber suchen Sie nach Errungenschaften, Beiträgen zu Open Source usw.

Das nächste Unkraut ist das Telefoninterview. Fragen Sie nach grundlegenden Konzepten, die sich auf Ihren tatsächlichen Job beziehen. Wenn die Leute keine Grundkenntnisse über Konzepte haben, die sie benötigen, lohnt es sich nicht, sie in ein persönliches Interview einzubeziehen. Die Jungen denken oft, dass dies unfair ist, weil sie alles im Internet nachschlagen können, aber die Wahrheit ist, dass ich noch nie einen guten Programmierer getroffen habe, der im Internet nachschlagen musste alles. Sie sollten einige Kenntnisse über Ihren Beruf haben, die Sie nicht jedes Mal nachschlagen müssen.

Nach dem Telefoninterview sollten Sie die besten 4-5 Kandidaten auswählen und interviewen. Wenn Sie nur 1-2 gute Kandidaten haben, sollten Sie natürlich nicht die Leute interviewen, die Sie bereits eliminiert haben. Jetzt werden Sie die schwierigen Fragen stellen und ein Gefühl dafür bekommen, wie sie Probleme angehen. Ich würde den Fizzbuzz-Test niemals verwenden, da er zu bekannt ist und die Antworten nichts aussagen. Machen Sie stattdessen einige Probleme aus Ihrer eigenen Codebasis. Ich könnte ihnen eine Anforderung und einen Code geben und sie fragen, ob der Code die Anforderung erfüllt und wenn nicht, warum nicht und was sie tun könnten, damit er die Anforderung erfüllt. Ich würde sie bitten, das schwierigste Programmierproblem zu beschreiben, das sie lösen mussten, und welche Schritte sie unternommen haben, um die Antwort zu finden. Ich würde einige detailliertere technische Fragen stellen. Denken Sie daran, dass Sie versuchen, ein Gefühl für ihre technische Kompetenz, ihre Fähigkeit zum Lösen und Debuggen von Problemen und ihre Fähigkeit zu bekommen, sich in Ihr bestehendes Team einzufügen. Ich stelle auch Fragen, auf die sie wahrscheinlich keine Antwort wissen, um zu beurteilen, wie gut sie mit Stress umgehen. Es ist ein stressiger Job. Ich möchte nicht, dass jemand im Interview mitmacht, weil der Stress des Jobs größer ist als der Stress im Interview . Ich suche nach Stärken in Bereichen, in denen wir derzeit schwach sind, und nach der Fähigkeit, in Teams zu arbeiten und sich den Kunden zu präsentieren (unsere Entwickler beschäftigen sich intensiv mit Benutzern). Ihre Liste kann anders sein.

0
HLGEM

Fragen Sie sie nach der interessantesten Programmierherausforderung, die sie jemals zu lösen versucht haben, aber nicht konnten, welchen Ansatz sie beim Lösen verwendet haben, warum sie nicht lösen konnten und welchen anderen Ansatz sie ihrer Meinung nach lösen können.

Dies reicht mir, um die Fähigkeiten eines Programmierers als Programmierer zu beurteilen.

0

Ich bin mir nicht sicher, ob dies ein Kommentar oder eine Antwort ist, aber im Grunde genommen, was Matthieu gesagt hat. Sie möchten dumme, einfache Fragen, die ein oder zwei Minuten (aber nicht länger als 5) Minuten dauern und sich auf verschiedene Bereiche beziehen sollten.

Solche Beispiele für dumme einfache Fragen sind Fragen zur Rekursion, beispielsweise wenn Sie eine Liste haben und diese in umgekehrter Reihenfolge drucken müssen, ohne eine Schleife zu verwenden. Eine einfache Regex-Frage, ob Regex normalerweise in Ihrer Entwicklung durchgeführt wird. Eine Frage zu Bits und Bytes bei Verwendung von C++ (Schreiben Sie eine Vorlage, die char zu long akzeptiert und die Binärdarstellung druckt. Eine Spezialisierung ist nicht erforderlich. Verwenden Sie einfach sizeof (), um die Bitlänge zu ermitteln.)

Es sollte ungefähr <= 3 Minuten pro Frage dauern

0
user2528