Ich brauche eine Möglichkeit, Lebensläufe von Leuten herauszufiltern, die nur Code kopieren und einfügen und dann hoffen, dass er funktioniert. All dies geschieht, ohne den Rest des Codes im System zu verstehen (oder zu verstehen).
Sicher, ich weiß, dass das Kopieren und Einfügen von Code Teil des Lernens eines neuen Objekts, einer neuen Steuerung usw. ist. Aber wie kann man feststellen, ob dies 70% (oder mehr) ihrer Entwicklungskarriere ausmacht?
Ich bin auf einige hochrangige Leute gestoßen, deren Fähigkeiten für das Projekt vielleicht so veraltet oder irrelevant sind, dass sie nur noch googeln, Code kopieren und dann einfügen, ohne über die Lösung als Ganzes nachzudenken. Infolgedessen kommt es im selben Projekt zu einem Missverhältnis zwischen JSON, AJAX, Callbacks, ASMX, WCF und Postbacks. Es ist klar, dass hinter jeder Technologie keine Konsistenz oder Logik steckt.
Im schlimmsten Fall erzeugt dieser Entwicklertyp Sicherheitsprobleme und Vektoren für Angriffe.
Frage
Wie würden Sie mir empfehlen, Leute herauszufiltern, die einen schlechten Programmierhintergrund haben? Kann ich es auf der Ebene des Lebenslaufs machen? Wenn nicht, wie mache ich das während des Interviews?
quelle
Antworten:
Ich denke nicht, dass die Fähigkeiten Ihrer Entwickler das Problem sind. Ihr Problem liegt anderswo, vielleicht bei einem Teamleiter oder Architekten, der nicht das Selbstvertrauen hat, bessere Programmierdisziplinen zu "ermutigen", oder bei einem Management-Team, das die Bedeutung des Managements technischer Schulden nicht versteht und ihre nicht angibt Entwickler die Zeit und Ressourcen, um dies zu tun. Hat Ihr Unternehmen Code Reviews?
Leadership kann das Problem sein, nicht Copy-Paste-Entwickler.
quelle
Leadership may be the problem, not copy-paste developers.
Das war genau meine Interpretation.Um Programmierer auszusortieren, die nicht programmieren können, müssen sie eine praktische Programmierübung als Teil der Screening- oder Interviewphase durchführen. (Letzteres ist wahrscheinlich besser, weil Sie die Umgebung kontrollieren können, um Betrug zu verhindern.)
Aber ich glaube nicht, dass das wirklich Ihr Problem angehen wird.
Das eigentliche Problem dabei ist, dass Ihr Team nicht genügend interne Codeüberprüfungen durchführt und kein "Spielbuch" mit bevorzugten Lösungen für bekannte Probleme erstellt. Dies ist teilweise ein Kulturproblem, teilweise ein Kommunikationsproblem und (wahrscheinlich) teilweise ein Problem mit Projektfristen.
Ein weiteres Problem ist, dass das Projekt in der Regel eine lange Lebensdauer hat und dass während dieser Lebensdauer neue Technologien / Techniken auftauchen und alte wahrscheinlich in Ungnade fallen. Wenn Sie die Verwendung von Technologien / Techniken zum "Hundefrühstück" vermeiden möchten, müssen Sie entweder:
quelle
Stellen Sie Leute mit einer dreimonatigen Probezeit ein. Feuern Sie sie ab, wenn sie saugen.
Wenn Sie nicht INSPEKTIEREN, können Sie nicht ERWARTEN. Code-Überprüfungen, Audit-Tools. Ein CI-Server kann diese automatisch ausführen.
Stellen Sie in Ihren Interviews echte Fragen, ebenso wie in Fragen aus echtem Code.
Bringen Sie sie dazu, Code auf das Whiteboard zu schreiben.
Wenn Sie kein technischer Manager sind, können Sie dies nicht beurteilen.
Wenn Sie nicht qualifiziert sind, lassen Sie die Tests von einem seriösen, professionellen Berater durchführen. Fragen Sie Ihre bestehenden Mitarbeiter und Ihre Wettbewerber, ob sie eine 100-fach produktive Person kennen. Bezahle sie für das Interview.
Wenn Sie ein Krankenhaus ohne OP-Leiter betreiben möchten, gehen Sie direkt vor.
quelle
Ich habe in den letzten Jahren Menschen interviewt und festgestellt, dass 90% der Kandidaten einfach nicht programmieren können. Meine Interviewtechnik zur Bestimmung der Programmierung besteht darin, dem Kandidaten eine übermäßig einfache Anweisung zu geben und sie mit einem Marker und einem Whiteboard lösen zu lassen.
Fehlermodi umfassen:
Ein Design entwerfen und dann etwas anderes implementieren. Diese Kandidaten werden abgelehnt, weil sie in einem Team gefährlich sind. Nicht den Spezifikationen folgen, Fehler schreiben usw.
Nicht in der Lage sein, ein Design zu erfinden. Eine überraschende Anzahl von "erfahrenen" Kandidaten benötigt eine Spezifikation, um das Implementierungsdesign einzubeziehen.
Ich kenne die Programmiersprache nicht, obwohl mein Lebenslauf Erfahrung beansprucht.
Keine zusätzlichen Fragen stellen, um umfassendere Spezifikationen zu extrahieren.
Konstruktionsentscheidungen nicht erklären können. Dieser ist groß. Wenn jemand nicht erklären kann, warum, dann wird es jedes Mal anders gemacht und die Konsistenz geht verloren.
Das Endergebnis war, dass ich viel Zeit damit verbracht habe, Interviews zu führen und nicht sehr oft zu rekrutieren. Das Entwicklerteam war jedoch sehr gut und hatte den vollen Respekt des gesamten Unternehmens und es lieferte!
quelle
Ich würde FizzBuzz vorschlagen, das Jeff Atwood in dem Beitrag unter http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html erwähnt .
quelle
Ich stelle drei Interviewfragen
Ich habe gesehen, wie Leute dies in 5 Minuten abgeschlossen haben und 30 Minuten lang gekämpft haben, bevor sie aufgegeben haben.
quelle
java.util.LinkedList l = new java.util.LinkedList()
importiert kein nichts, aber sicherlich nutzt die integrierten Sammlungen.Sie können dies nicht auf der Ebene des Lebenslaufs tun, da sie im Wesentlichen unendlich viel Zeit haben, dies zu schreiben. Sie können es jedoch in einem Telefoninterview tun, wenn Sie ein paar Fragen stellen, für die ein technischer Einblick in deren Funktionsweise erforderlich ist. Dies gibt Ihnen die Antwort (gut oder schlecht) und wie lange sie gebraucht haben, um dorthin zu gelangen.
Lassen Sie sie bei einem Vorstellungsgespräch Code schreiben. Nur so können Sie feststellen, ob sie wirklich programmieren können. Machen Sie das Problem einfach, geben Sie ihnen einen Computer mit einer Internetverbindung und die von Ihnen verwendete IDE installiert, lassen Sie sie jede Frage stellen (außer gimme-hte-codez) und beobachten, wie sie funktionieren.
BEARBEITEN: Für die Post-Mortem-Analyse scheint PMD über einen Kopier- / Einfügedetektor zu verfügen: http://pmd.sourceforge.net/cpd.html
quelle
Einfach
Bearbeiten:
Wie bereits erwähnt7, kann man praktisch eine Videoaufnahme (Bildschirmaufnahme) machen.
quelle
Wenn Sie schlechte Programmierer "aussortieren" wollen, können Sie zum Beispiel Programmer Competency Matrix (nützlich, aber nicht für alle möglichen Bereiche anwendbar - natürlich können Sie eigene erstellen) oder codility.com (die Aufgaben sind sehr gut und das spart viel Zeit).
Im Allgemeinen ist die Einstellung guter Programmierer schwierig und erfordert oft langjährige Übung. Sie können eine eigene Datenbank mit Interviewfragen erstellen, die nicht nur Fragen zum Thema Codierung, sondern auch Mathematik, Logik und Motivationsfragen enthält.
quelle
Ich würde sagen, das Problem bei Ihren Kandidaten ist nicht, dass sie überhaupt nicht programmieren können, sondern dass sie nicht das Gefühl haben, das richtige Werkzeug für den Job zu verwenden. Mein Vorschlag ist eine Frage in einem Aufsatz, in der ihnen hohe Anforderungen an ein neues System gestellt und sie gebeten werden, eine Architektur bereitzustellen und ihre Komponentenauswahl zu rechtfertigen. Behalten Sie den FizzBuzz jedoch für die Kandidaten, die ohne Browser überhaupt nicht codieren können.
quelle