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 nur wie bei 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 zum Kotzen - wirklich zum Kotzen. 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- / Hochschul- / Aufbaustudiengang bedeutet nicht unbedingt, dass Sie genau wissen, wie man die Dinge macht.
Zertifizierungen bedeuten auch hier nichts, weil die Verantwortlichen des Zertifizierungskurses auch 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 Leute, die Kandidaten sind, kommen nicht unbedingt von außen, aber wir haben die Möglichkeit, Kandidaten zu akzeptieren oder nicht, bis wir die richtige finden.
Ich hoffe, ich höre mich in meiner Frage nicht zu aggressiv an. und übrigens bin ich selbst ein Programmierer.
edit: Ich habe herausgefunden, dass hier etwas wirklich Komplexes gefragt wird. Ich werde "die richtige Antwort" deaktivieren, um die Diskussion flüssig und ohne Vorurteile zu führen.
Antworten:
Bei der Auswahl der Kandidaten gehe ich normalerweise von einem Drei-Treffer-Plan aus:
Regelmäßiger Test mit FizzBuzz-ähnlichen Codierungsfragen und vielen Wissensfragen, bei denen codierte Beispiele angegeben werden müssen. Je nach Position kann es sich um OO-Prinzipien, SQL-Entwurfsprinzipien usw. handeln. Ich verstärke die Schwierigkeiten bei Fragen während des Tests, um zu sehen, wie weit sie gehen können. Die Idee ist nicht wirklich, alle Fragen beantworten zu lassen (wenn sie es tun, desto besser), sondern auch zu sehen, ob sie erkennen können, wenn sie etwas nicht wissen. Vertrauen ist wichtig, und ich möchte niemanden in meinem Team haben, der mich anlügt.
Kehren Sie zum Test mit dem Kandidaten zurück und diskutieren Sie die Antworten. Mögliche Erweiterung der Fragen bis an die Grenzen des Kandidaten. Dies kann umfangreich sein, und je umfangreicher es ist, desto besser.
Last part but not least, The Code Review . Ich fordere den Kandidaten auf, ein Stück Code mitzubringen (im Allgemeinen speichere ich den vorherigen Test / die vorherige Diskussion und diese Überprüfung um einige Tage, damit sie ein Stück Code schreiben und polieren können). Anschließend 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. Bezüglich der 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.
quelle
Beginnen Sie damit, ihnen FizzBuzz zum Lösen zu geben. Das sollte das Schlimmste von ihnen ausmerzen.
Dann etwas schwierigeres - zum Beispiel, wie man einen String ohne eingebaute Bibliotheksfunktionen umkehrt. Bitten Sie sie, beim Lösen zu sprechen, um zu sehen, wie ihr Denkprozess aussieht.
Sie können immer schwierigere Probleme aufwerfen, wenn diese für sie sehr einfach sind, bis Sie überzeugt sind, dass sie den Weg gehen und nicht nur sprechen können.
quelle
Suchen Sie nach Leidenschaft für den Job.
Um Joel zu zitieren, suchen Sie nach Leuten, die " klug sind und Dinge erledigen ".
Der Rest spielt keine Rolle
quelle
Basierend auf meiner 25-jährigen Programmiererfahrung (die zugegebenermaßen nur 5 oder 6 Fälle umfasst, in denen ich andere Programmierer eingestellt habe):
Positive Indikatoren:
Leidenschaft für Technologie
Programme als Hobby
Sprechen Sie über ein technisches Thema, wenn Sie dazu ermutigt werden
Bedeutende (und oft zahlreiche) persönliche Nebenprojekte im Laufe der Jahre
Lernt neue Technologien selbstständig
Überlegt, welche Technologien für verschiedene Anwendungen besser sind
Sehr unangenehm bei der Idee, mit einer Technologie zu arbeiten, die er nicht für „richtig“ hält
Klar schlau, kann tolle Gespräche zu einer Vielzahl von Themen führen
Begann lange vor der Universität / Arbeit zu 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 firmensponsorierten Kursen
Ich arbeite gerne mit der von Ihnen ausgewählten Technologie. „Alle Technologien sind gut.“
Scheint nicht zu schlau
Beginn der Programmierung an der Universität
Alle Programmiererfahrung ist im Lebenslauf
Konzentriert 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:
Ein Großteil der obigen Zusammenfassung stammt von How to spot a good programmer , einem großartigen Artikel, der sich ein wenig mehr auf Indikatoren mit größerer Reichweite konzentriert. 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.
quelle
Die Bewertung der Programmierintelligenz ist eine Form des Turing-Tests. Daher gibt es (derzeit) keine geschlossenen Bewertungsverfahren, die garantiert funktionieren. Intelligente Programmierer müssen andere intelligente Programmierer erkennen, allerdings nur mit einer angemessenen Wahrscheinlichkeit.
Ihre Chancen stehen besser, wenn Sie Interviewer in Ihrem Team haben, die Schneejobs riechen können und die es instinktiv ablehnen, mit dummen Leuten zu arbeiten (selbst diejenigen, die gut aussehen, eindrucksvoll aussehende Lebensläufe haben und alle üblichen eingemachten Lösungen aus dem Gedächtnis herausgeben können). .
(Eine mögliche Methode, die die Qualität des Stapelüberlaufs als Nebeneffekt verbessern könnte, besteht darin, alte Stapelüberlauf-Fragen zu klären, die in gewisser Weise mit Ihren Arbeitsanforderungen 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 einer Zusammenfassung für Crowd-Sourcing-OCR.)
quelle
Geben Sie ihnen ein Problem, vorzugsweise eines, das mit der Problemdomäne zusammenhängt, an der sie arbeiten werden, und bitten Sie sie, zu besprechen, wie sie es angehen würden. Sie können sie einfach diskutieren lassen, Pseudocode erstellen oder Bits des tatsächlichen Codes schreiben, je nachdem, wie sicher Sie in ihrer Fähigkeitsstufe sind
Wenn Ihre Organisation beispielsweise Konferenzen abgehalten hat, fragen Sie sie, wie sie ein sicheres Online-Registrierungssystem codieren würden. Sie sollten in der Lage sein, einige der Grundlagen zu behandeln und gute Fragen zu genau dem zu stellen, was implementiert werden muss. Während der Interaktion sollten Sie in der Lage sein, zu bestimmen, ob sie gut zu Ihrer Organisation passen und welche Rolle sie ausfüllen müssen.
Ich bin kein großer Fan von Programmiertests und Denksportaufgaben. Während sie für manche Leute Spaß machen können, können sie auch andere Leute nerven und / oder belasten, einschließlich der Leute, die für Ihr Team möglicherweise am besten geeignet sind. Darüber hinaus sind Informationen zu vielen solchen Tests online verfügbar und fördern das Ausfüllen von Tests und andere Taktiken, die die Fähigkeit des Programmierers beeinträchtigen würden.
quelle
Das Lesen dieser Frage und einiger der erhaltenen Antworten veranlasste mich, einen Artikel zu schreiben, von dem ich glaube, dass er 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 interviewen, egal wie unpassend er für die Rolle ist, die Sie im Sinn haben. Wenn Sie es nicht geschafft haben, ein gut durchdachtes Einstellungsverfahren zu definieren, mit dem Sie die Juwelen im Groben finden können, müssen Sie nur mit den Konsequenzen leben erfüllen Sie niemals Ihre Erwartungen. Wenn Sie Ihre Kandidaten nach ihren Briefen und Lebensläufen filtern möchten, müssen Sie zuerst Ihre Bewerber bitten, einen Brief über sich selbst und ihre Anforderungen an die Rolle zu schreiben, und dann prüfen, wie der Lebenslauf geschrieben wird. Wenn Sie nur einen oder zwei potenzielle Kandidaten zum Vorstellungsgespräch haben, haben Sie das Pre-Screening wahrscheinlich ordnungsgemäß durchgeführt.
Wenn Sie schließlich die 1 oder 2 Kandidaten finden, die Ihrer Meinung nach Ihre Zeit wert sind, stellen Sie nicht einfach eine Handvoll unsinniger Tester-Fragen, sondern investieren Sie die Zeit, um diese Leute kennenzulernen und offene Diskussionen über Software zu führen Ingenieurwesen im Allgemeinen. In der traditionellen (und etwas widersprüchlichen) Interview-Situation lernen Sie mehr aus einer lockeren Herangehensweise an den Kandidaten als jemals zuvor. Vereinbaren Sie auch nicht einfach ein einzelnes Interview, sondern behandeln Sie Ihre Schlüsselkandidaten in mehreren Besprechungen, in denen offene Diskussionen geführt werden und der Kandidat sich mit seinen potenziellen Kollegen treffen kann. Die Zeit wird niemals verschwendet, da unangemessene Kandidaten in einer hochtechnischen Diskussion nicht sehr gut gedeihen und ihre Mängel sehr schnell aufzeigen, wenn sie auf der Hut sind.
quelle
Sie haben nicht gesagt, für welche Sprache, aber es ist ziemlich einfach, jemandes Wissen zu testen. Es hängt auch von der Stufe ab, die Sie suchen, aber es gibt einen ziemlich großen Pool von Fragen zu den Interviewfragen.
Wie auch immer Sie sich entscheiden, Ihr Interview zu führen, stellen Sie diese Fragen nicht .
quelle
Ich schlage vor, Sie gehen mit einer FizzBuzz-Frage und mieten die erste, die bestanden wird. Weitere Tests neigen dazu, fehlerhaft zu sein, da nicht jeder gute Programmierer ein Problem wie Sie angeht oder ein Interview ausführt, ohne zu stottern, oder die Sprachen kennt, die Sie wollen oder für die Sie sich interessieren, oder albern ist, wie Ganzzahlen ohne eine dritte Variable auszutauschen (wer braucht das überhaupt? I Mittelwert, da RAM 128 Bytes überschritten?).
Denk darüber nach. Wenn die FizzBuzz-Frage 199 von 200 löscht, werden nur Hunderte von Interviews gelöscht. Wollten Sie wirklich Hunderte von Interessenten interviewen?
Scheint nur, als würde die Rendite nach FizzBuzz sinken. Das setzt voraus, dass 199/200 sogar annähernd nahe ist. Und ich nehme an, dass IHRE Zeit auch wertvoll ist ...
quelle
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.
Solche Beispiele für dumme einfache Fragen sind eine Frage zur Rekursion, zum Beispiel, dass Sie eine Liste haben und diese in umgekehrter Reihenfolge ausdrucken müssen, ohne eine Schleife zu verwenden. Eine einfache Regex-Frage, ob Regex normalerweise in Ihrer Entwicklung verwendet wird. Eine Frage zu Bits und Bytes bei Verwendung von C ++ (schreiben Sie eine Vorlage, die Zeichen zu lang akzeptiert und die Binärdarstellung ausgibt. Spezialisierung ist nicht erforderlich, verwenden Sie einfach sizeof (), um die Bitlänge zu ermitteln.)
Es sollte ungefähr <= 3 Minuten pro Frage dauern
quelle
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 ist genug für mich, um die Fähigkeiten eines Programmierers als Programmierer zu beurteilen.
quelle
Können sie etwas Neues lernen? Sprechen Sie über einen wichtigen Aspekt der Technologie, die Sie verwenden, oder über einen speziellen Aspekt des Business Domian, in dem Sie arbeiten. Stellen sie intelligente Fragen? Können sie eine Analogie finden? Ist es ähnlich wie in einer anderen Branche oder Technologie?
Würden sie lieber programmieren? Es muss nicht die Nummer eins auf ihrer Liste sein, aber sie müssen den Vorzug vor dem Schreiben von Code zeigen. Und ich meine, tatsächlich Code zu schreiben und etwas zu machen, nicht den ganzen Tag herumzusitzen und darüber zu reden oder an die Tafel zu zeichnen. Nicht um die Planung zu minimieren oder die Cowboy-Codierung zu fördern, aber irgendwann muss Code vorhanden sein. Vermeiden Sie diejenigen, die die Tastatur meiden. Dies ist keine Führungsposition.
Sie können eine Wertung auf einer Skala von eins bis zehn machen oder sich einfach darauf verlassen, dass Sie Ihre eigene Art riechen können.
quelle
Wenn Sie sich besser fühlen, gibt es in fast jedem Land schlechte Programmierer. Wie man sie aussortiert, ist das Problem.
Erstes Jäten ist der Lebenslauf. Eine Sache, nach der ich Ausschau halte, ist eine Menge behaupteter Sprachkenntnisse und nichts, was beschreiben könnte, was sie in dieser Sprache gemacht haben. Ich habe Zusammenfassungen gesehen, die so ziemlich behaupten, dass sie jede Sprache kennen, die jemals erfunden wurde, und doch zeigen ihre Erfahrungen, dass sie nur mit Access und Visual Basic gearbeitet haben. Die gehen direkt in den Müll. 10-Seiten-Lebensläufe gehen direkt in den Papierkorb (insbesondere 10-Seiten-Lebensläufe von Personen mit weniger als 2 Jahren Erfahrung, die ich erhalten habe). Von den neuen Hochschulabsolventen mit wenig Erfahrung muss man wirklich wählerisch sein, wie sie sich präsentieren. Die besten Kandidaten gehen mit ihrem Lebenslauf vorsichtig um, 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 zu korrigieren?
Professionell vorbereitete Lebensläufe fallen ebenfalls in den Papierkorb. Sobald Sie Hunderte von Lebensläufen gelesen haben, können Sie sie auswählen, da sie genau die gleiche Formulierung verwenden. Sie können dem Inhalt eines professionell erstellten Lebenslaufs nicht vertrauen, und Sie wissen, dass die Person keine eigenen Vorbereitungen getroffen hat. Dies ist die Art von Person, die sich darauf verlässt, dass andere ihre Probleme für ihn lösen. Wollen Sie das wirklich in einer Programmierposition?
Suchen Sie nach Dingen, die die Person von denjenigen abheben, die Sie auswählen. Das ist natürlich schwieriger bei Schulabbrechern, aber suchen Sie nach Erfolgen, Beiträgen zu Open Source usw.
Das nächste Unkraut ist das Telefoninterview. Fragen Sie nach Grundkonzepten, die sich auf Ihren tatsächlichen Arbeitsplatz beziehen. Wenn die Leute keine Grundkenntnisse über die Konzepte haben, die sie benötigen, lohnt es sich nicht, sie in ein persönliches Interview einzubringen. Die Jungen halten das oft für unfair, weil sie alles im Internet nachschlagen können, aber in Wahrheit habe ich noch nie einen guten Programmierer getroffen, der alles im Internet nachschlagen musste . Sie sollten über Kenntnisse in Ihrem Beruf verfügen, 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 sich natürlich nicht die Mühe machen, Leute zu 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, um die Anforderung zu erfüllen. Ich würde sie bitten, das schwierigste Programmierproblem zu beschreiben, das sie zu lösen hatten, und welche Schritte sie unternommen haben, um die Antwort zu finden. Ich würde einige weitergehende technische Fragen stellen. Denken Sie daran, dass Sie versuchen, ein Gefühl für ihre technische Kompetenz, ihre Problemlösungs- und Fehlerbehebungsfähigkeiten und ihre Fähigkeit zu bekommen, sich in Ihr bestehendes Team einzufügen. Ich stelle auch Fragen, die sie wahrscheinlich nicht beantworten können, 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 des Interviews . 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 unterschiedlich sein. Ich möchte nicht, dass jemand das Interview mitmacht, weil der Stress im Job 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 unterschiedlich sein. Ich möchte nicht, dass jemand das Interview mitmacht, weil der Stress im Job 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 unterschiedlich sein.
quelle
Den Kandidaten muss ein reales Problem gegeben werden, das sie mit der Freiheit lösen können, jede Technologie zu nutzen.
Wenn sie mit Bravour herauskommt, ist sie dabei!
quelle