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


52

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.


Ich würde Kreativität schätzen, wie Sie in Bezug auf Code Monkeying sagen. Ich mag den Brute-Force-Ansatz nicht, wenn Generationen früherer Programmierer einen bestimmten Ansatz gewählt haben, kann dies bedeuten, dass er großartig ist oder nur, dass er seit langer Zeit fortbesteht. Auch sollte sich die Ausbildung nicht auf handwerkliche Fähigkeiten konzentrieren, und ich würde sagen, es ist super wichtig, aber die tatsächlich erworbenen Noten über ein grundlegendes kompetentes Niveau hinaus als nicht so wichtig einzustufen. Ich würde gerne mehr von einem Khan Academy-Stilsystem mit vielen kleinen Pass / Fail-Modulen mit anderen Modul-Pass-Abhängigkeiten und einer Abkühlungsphase sehen, bevor ich ein Modul wieder zurückerobern darf.
alan2here

Antworten:


52

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.


4
Ich stimme Codierungsfragen und Wissensfragen zu. Ich habe nie zugestimmt, Kandidaten zu bitten, einen Code mitzubringen. Meiner Meinung nach ist es nicht einfach, einen wesentlichen Teil des Codes zu finden, der: etwas Nicht-Triviales zeigt, nicht zu viel Wissen über ein größeres System erfordert und den Sie anderen zeigen dürfen.
Andrea Zilio

Ich würde Code Review sagen. FizzBuzz ist so überbeansprucht. Und du könntest Leute abschrecken. Ich war Programmierer im Gesundheits- und Finanzwesen, und Dinge wie Fizzbuzz sind nutzlos. Sie müssen in der Lage sein, viel kompliziertere Interaktionen zu verstehen. Bitten Sie sie um Codebeispiele, auch wenn es sich um eine FPS im Pygame handelt. Wenn sie keine Codebeispiele haben, sind sie keine Codierer.
Christopher Mahan

1
@ChristopherMahan Der Wert von FizzBuzz (und ähnlich trivialer Codierung) ist ein einfacher Gatekeeper. Wenn sie FizzBuzz in der Sprache ihrer Wahl nicht implementieren können, können sie dann JEDEN Code schreiben?
Vatine

@Vatine FizzBuzz testet auf logisches Denken, nicht auf Programmierkenntnisse. Zugegeben, man sollte es können. Eine einfache Programmierfrage wäre: Zeigen Sie auf dem Bildschirm eine Liste der Elemente an, die auf interessante Weise sortiert sind. Sie müssten programmieren, aber sie könnten auf Erfahrungen zurückgreifen, um etwas zu schreiben, und müssten nicht auch versuchen, den Rätsel zu lösen. Ich habe ein Interview einmal nicht bestanden, weil sie wollten, dass ich Regex verwende, und ich antwortete, dass für dieses Problem Regex ein Overkill ist und Python integrierte Funktionen hat, um dies zu tun. Ich wollte wohl nicht dort arbeiten.
Christopher Mahan

Code Review ist eine schreckliche Idee, und die Gegenargumentation von JohnFX ist unzureichend. Ich kenne viele Entwickler, die großartig sind, aber nichts außerhalb der proprietären Codebasen ihres Arbeitgebers bearbeiten. Dies sind Menschen mit Familien und Dinge, die man außerhalb der Arbeit tun kann. Wenn sie jedoch arbeiten, sind sie sehr produktiv.
MrFox

20

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.


1
Ich denke, es kann von der Ebene der Programmierer abhängen, die Sie interviewen. Obwohl es in Ordnung sein könnte, auf die Fähigkeit eines Junior Level Hire zuzugreifen, würde ich solche Fragen in einem Interview als klaren Indikator dafür ansehen, dass dies kein Unternehmen war, bei dem ich arbeiten wollte.
Jfrankcarr

3
Ich bin mit dem sprechenden Teil nicht einverstanden. Sprechen Sie oft mit sich selbst oder anderen Menschen, während Sie Probleme lösen? Wie wäre es, einer Person etwas Platz zu geben und sie ein wenig nachdenken zu lassen? Wenn es nicht ganz trivial ist, halte ich es für keine gute Praxis.
Andrey Rubshtein

1
@Andrey - Der sprechende Teil besteht darin, einen Einblick in ihren Denkprozess zu gewinnen. Sie möchten sehen, wie sie über ein Problem nachdenken und es lösen. Hast du eine bessere Option?
Oded

5
@Oded, ja, das tue ich tatsächlich. Lassen Sie sie eine Weile in Ruhe nachdenken , wie es im wirklichen Leben der Fall ist, insbesondere wenn es sich um ein schweres Problem handelt, und fragen Sie sie dann so viel, wie Sie möchten. Wie bei jeder mündlichen Prüfung.
Andrey Rubshtein

4
Selbst als Angestellter an einer Schule, an der kürzlich mehrere CS-Profis anerkannt wurden, finde ich, dass trivialer Fizzbuzz ein guter Filter ist. Die meisten Leute, mit denen ich meinen Abschluss gemacht habe, konnten es wahrscheinlich nicht in angemessener Zeit lösen. Diese Menschen hatten Mühe, Arbeit zu finden, oder taten es nicht. Ich finde es gut, joelonsoftware.com/articles/GuerrillaInterviewing3.html zu folgen .
Rig

14

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


7
Das Problem ist, dass man nicht sagen kann , ob sie schlau sind.

4
@Chad: Eine Leidenschaft für das Lernen "bringt nichts zustande". Um herauszufinden, ob jemand etwas erledigen kann, müssen Sie ihn bitten, etwas zu tun.
Kevin Cline

2
@ Kevin Cline, meinen Beitrag optimiert. Sie müssen Leidenschaft für den Job haben, was sich normalerweise dadurch zeigt, dass sie lernen wollen. Ja, es braucht einige Fragen, das Gespräch sollte fließen, es sollte nicht nur eine Reihe von Fragen sein. Um herauszufinden, ob sie etwas erreichen, fragen Sie nach Beispielen, wo sie ein Hindernis hatten und wie sie es überwunden haben. Jeder stößt bei seiner Arbeit auf Hindernisse, sei es durch Technologie, Menschen oder Prozesse, aber eine kluge Person, die Dinge erledigt, einen Weg findet, diese zu überwinden, und in der Lage ist, sie detailliert genug zu erklären, um Sie weiterzuverkaufen ihre Fähigkeit.
CaffGeek

3
@mouviciel meiner erfahrung nach nicht. Einige der klügsten Programmierer, die ich kenne, sind sehr extrovertiert.

4
Wenn Sie nicht mit einem Entwicklerkandidaten in einem Raum sitzen und herausfinden können, ob er schlau ist oder nicht, suchen Sie jemanden, der das kann.
JeffO

13

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:

  • Der FizzBuzz- Test (oder so ähnlich, um die grundlegenden Fähigkeiten zum Schreiben eines Algorithmus zu testen).
  • Härtere Version des FizzBuzz-Tests (um sie an den Fehler- oder Fast-Fehler-Punkt zu bringen)
  • Besprechen Sie ihren Code, und prüfen Sie, ob sie bereit sind, selbstkritisch zu sein, und suchen Sie nach Verbesserungen (die sie wahrscheinlich nicht in einem kurzen Test vor Ort durchgeführt haben), wie zum Beispiel:
    • gute Variablennamen (ich habe sehr erfahrene Programmierer gehabt, die Variablen in der Produktion verwendet haben, wie "flag" (WTF ??)
    • 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 zu glauben, dass es eine persönliche Beleidigung ist, einen Fehler zu finden. Sie sehen es als Chance, es besser zu machen. (Diejenigen, die Fehler nicht uneingeschränkt betrachten können, sind entweder überwältigt, wenn sie einen Fehler sehen (und werden super wenig selbstsicher 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 Testen, ich spreche über Testen: Sie schreiben eine Funktion, funktioniert es? Ergreift es 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 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.


10

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.)


7

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.


Ich stimme Ihnen in Bezug auf die Nachteile des Trivia- / Gehirntests für die Kandidatenauswahl zu. Das Problem ist, dass das Überprüfen / Besprechen des Codes mit jedem Kandidaten zu zeitaufwändig ist. Und vielleicht wäre das Ergebnis subjektiver. nicht genau das, wonach ich suche, ich würde etwas vorziehen, das weniger persönliche Aufsicht braucht. und später, wenn ich geeignetere Kandidaten habe, dann rede / diskutiere / interviewe ich sie
Rafael

3
Zu zeitaufwändig? Jemand muss mit den Kandidaten sprechen. Kein schriftlicher Test wird funktionieren. Der Inhalt des Tests wird schnell öffentlich bekannt und die Kandidaten werden mit gespeicherten Antworten eintreffen.
Kevin Cline

10
@ Kevincline: Genau, du musst mit ihnen reden. Ich hatte ein Interview bei Xerox (in den 70ern) und wurde gefragt, wie ich mit Kollisionen in einem Hashing-Algorithmus umgehen würde. Ich hatte nicht viel formale Programmierschule, aber ich hatte es zu der Zeit ungefähr 5 Jahre lang gemacht, also sagte ich, ich wüsste nicht, was ein Hash ist. Mein Interviewer erklärte es mir und stellte die Frage erneut. Wir machten über eine Stunde lang weiter, als ich verschiedene Arten von Kollisionsproblemen entdeckte und löste. Er sagte mir, wenn ich das in einer Stunde machen könnte, könnte ich alles verarbeiten, was sie auf mich geworfen haben. Ich habe den Job bekommen. Weil er mit mir gesprochen hat.
Peter Rowell

@PeterRowell So müssen die Dinge sein. +1
Chiron

3

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.


Gute Argumente. Ich wäre jedoch vorsichtig mit zu vielen Interviews. Sowohl die Zeit des Kandidaten als auch Ihre Zeit sind wertvoll (insbesondere, wenn der Kandidat derzeit anderweitig beschäftigt ist). Meiner Erfahrung nach haben immer mehr Interviews eine abnehmende Rendite, daher würde ich mich auf ein oder zwei Interviews beschränken. Ein (zusätzliches) Telefoninterview könnte ebenfalls ein Kompromiss sein.
sleske

1
@sleske, ich stimme grundsätzlich zu, insbesondere wenn an allen Interviews die gleichen Personen teilnehmen. Es ist daher besser, die Last zu teilen, um die beste Passform für Unternehmen und Team zu finden, und aus den Beobachtungen anderer zu lernen. Schlechte Interviews werden nicht weiter gehen, aber je mehr Stakeholder sich für den Kandidaten interessieren, desto mehr Interviews werden Sie möglicherweise benötigen. Daher ist es nicht ungewöhnlich, drei oder sogar vier Interviews in sehr breiten Teams zu führen. Zu viel mehr würde den Eindruck erwecken, schrecklich unorganisiert zu sein. Es lohnt sich auch, den Kandidaten über die Anzahl der Interviews im Voraus zu informieren.
S.Robins

@ s-robins interessante Meinungen, möchte nur einige Aspekte meiner Frage beleuchten. Aufgrund eines Grundes, den wir nicht kontrollieren können, können wir unsere Kandidaten nicht auf der Grundlage eines normalen Rekrutierungsprozesses auswählen. Stattdessen kommen nur die Kandidaten und wir müssen sagen, ob sie die richtigen Fähigkeiten / Kenntnisse haben, um den Job anzunehmen. Vielleicht passieren diese Dinge in einem normalen Rekrutierungsprozess nicht allzu oft. aber in unserer Position müssen wir uns mit dieser Situation befassen.
Rafael

@Rafael, Wenn ich verstehe, dass Sie richtig kommentieren, sagen Sie, dass Sie Kandidaten von "irgendwo anders" zur Bewertung gefüttert bekommen und dass Ihre Schwierigkeit darin besteht, eine objektive Bewertung eines Kandidaten ohne Vorkenntnisse über diesen Kandidaten vorzunehmen. Dies klingt eher nach einem systemischen Problem in der Organisation, in der Sie arbeiten. Ich würde vorschlagen, sich mit den Leuten zu treffen, die Kandidaten auf Ihren Weg schicken, und mit ihnen ein System zu entwickeln, um die offensichtlich unangemessenen Kandidaten herauszufiltern, bevor Sie sie interviewen. Fordern Sie vielleicht sogar die Einführung eines förmlicheren Antragsverfahrens.
S.Robins

@ s-robins haben Sie gut verstanden ...
Rafael

1

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 .


2
Ich habe die Sprache, mit der wir uns entwickeln, nicht spezifiziert, weil wir glauben, dass ein guter Programmierer (mit seinem Respestive-Capacitation-Kurs) lernen kann, in jeder Sprache zu programmieren, unabhängig von der Sintax.
Rafael

2
@Rafael norvig.com/21-days.html . Wie gesagt, es hängt davon ab, ob Sie einen Junior-Programmierer oder einen Senior-Programmierer suchen.
BЈовић

Weil ich über die meisten Kandidaten spreche, sind sie neue Absolventen. Ich beziehe mich auf Junior-Programmierer, aber meine Frage bezieht sich auf einen breiteren Kontext als mein spezifischer persönlicher Rekrutierungsprozess
Rafael,

@Rafael In diesem Fall erwarten Sie zu viel von einem Junior. Lesen Sie den Artikel, den ich im obigen Kommentar gepostet habe, in dem steht, wie lange es dauert, eine Programmiersprache zu beherrschen.
BЈовић

Ich spreche nicht davon, eine bestimmte Programmiersprache zu beherrschen. Ich spreche davon, die beste Person mit den besten allgemeinen Programmierkenntnissen zu finden (weshalb ich die Sprache nicht spezifiziere). Ich kann nicht erwarten, dass alle diese beherrschen Das kommt, wenn ein Kandidat die Sprache beherrscht, die wir programmieren, und deshalb sind wir in der Lage, einen Kapazitätskurs abzuhalten, wenn die Leute die Sprache nicht kennen.
Rafael

1

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 ...


2
Erschreckend, wie FizzBuzz der Standardtest zur Bewertung der Kompetenz eines Programmierers ist. Dies ist jedoch ein bewährter Test - ich kann Ihnen nicht sagen, wie viele Programmierer mit CS-Abschluss dies nicht können (in der Sprache ihrer Wahl)
Nodey The Node Guy

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.

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


0

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.


0
  1. Können sie verteidigen, was sie behaupten zu wissen? Sie haben es in den Lebenslauf aufgenommen als eine Fähigkeit oder etwas, was sie in einem anderen Projekt gemacht haben. Sehen Sie, wie ausführlich sie auf das Thema eingehen können.
  2. 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?

  3. 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.


0

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.


-1

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!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.