Gute Interview-Programmierprojekte [abgeschlossen]

26

Ich suche nach kleinen Programmierprojekten, mit denen ich potenziellen Mitarbeitern die Möglichkeit geben kann, ihre Programmierfähigkeiten einzuschätzen. Dies werden Programmierer sein, die gerade das College verlassen haben. Ich bin auf der Suche nach Projekten, die einige Stunden in Anspruch nehmen und deren Antworten nach dem Interview per E-Mail zurückgesendet werden.

Ein Beispiel wäre, diesen Textabschnitt zu nehmen und eine Liste von alphabetisch eindeutigen Wörtern zurückzugeben. Sagen Sie mir nach jedem Wort, wie oft das Wort vorkam und in welcher (n) Stimmung (en) es vorkam.

Hat jemand gute Vorschläge?

bigtang
quelle
Fragen zum ACM-Programmierwettbewerb. Ein Archiv dieser Fragen finden Sie hier .
Whatsisname
1
Wären diese Programmierseiten für Sie interessant? programmers.stackexchange.com/questions/756/programming-puzzles/…
grokus

Antworten:

43

Ich bin längst zu dem Schluss gekommen, dass nichts, was jemand in kurzer Zeit tun kann, mir irgendetwas Nützliches über diese Person sagen kann. Aber jeder gute Kandidat hat bereits persönliche Projekte geschrieben, die Ihnen viel sagen können. Deshalb habe ich bestimmte Herausforderungen durch "Geben Sie mir einen Code, auf den Sie stolz sind und auf den Sie gerne Ihren Namen stempeln" ersetzt.

Ihre Wahl des Projekts sagt Ihnen mehr als jede stundenlange Aufgabe. Und dann können Sie eine Stunde lang darüber diskutieren, um noch mehr zu erfahren.

pdr
quelle
4
Ich erinnere mich, wie ich in einem Unternehmen interviewt und eine ziemlich einfache (15-20 Zeilen) Funktion erhalten habe und gefragt wurde: "Was macht das?" Ich sagte es ihnen und fragte dann: "Versteht das jemand falsch?". Mir wurde gesagt, dass die Mehrheit der befragten Personen nicht antworten könne. Vielleicht ist das eine schnelle Alternative (ich kenne niemanden, der Code lesen kann, der ihn nicht schreiben kann, aber vielleicht habe ich einfach nicht die falschen Leute getroffen).
TMN
4
@TMN - Oh, das machen wir auch ein bisschen. Aber ich habe Menschen getroffen , den Code lesen kann und es nicht schreiben gut .
pdr
@TMN Als Autodidakt habe ich viel Zeit damit verbracht, Code frühzeitig zu lesen , bis ich ihn weitaus besser lesen als schreiben konnte. Es kann und passiert, es braucht nur Zeit und Übung, um die Schreibfertigkeit zu verbessern.
Jimmy Hoffa
27

Ich werde so müde von diesem verrückten Mist. Ich war an Orten, an denen ich nach Codebeispielen gefragt, sie zerrissen und dann gebeten wurde, Beispielcode von ihren Systemen zu erklären , der aussah, als wäre er von herausgebrochenen Zweijährigen geschrieben worden. Ich wurde gebeten, obskure Sortieralgorithmen, Netzwerkdienste, GUIS, Datenstrukturen (immer entweder einen Baum oder eine verknüpfte Liste) zu implementieren. Jede nervige Frage, was immer der Interviewer denkt, ist der wichtigste Teil der Programmierung.

Am Ende ist alles so ziemlich nutzlos. Die beste Möglichkeit, einen Mitarbeiter zu bewerten, besteht darin, ihn für 30 Tage einzustellen und zu prüfen, wie gut er die Arbeit erledigt. Verbringen Sie die ganze Zeit damit, Tests zu entwickeln, und es sagt Ihnen nichts darüber aus, wie jemand im Alltag arbeitet.

Satanicpuppy
quelle
8
Einen einfachen Algorithmus wie den beschriebenen Bigtang zu codieren, ist nicht im geringsten "mind-gamey". Die Fähigkeit, so etwas zu tun, sollte eine Grundvoraussetzung sein, um überhaupt ein Vorstellungsgespräch zu führen (und das ist es auch in meiner Firma). Es ist sehr nützlich, um Kandidaten auszusortieren, die auf dem Papier ansonsten großartig aussehen. Das Letzte, was ich tun möchte, ist Stunden damit zu verbringen, jemanden zu interviewen, der keine Funktion schreiben kann, um festzustellen, ob eine Zeichenfolge ein Palindrom ist. Sie werden erstaunt sein, wie viele CS-Doktoranden von Top-Schulen Bigtangs Test nicht bestehen können. Kurz gesagt, es ist notwendig, aber nicht ausreichend, einen solchen Test absolvieren zu können.
Jer
+1 @Jer. Als ich das letzte Mal für einen Programmierer interviewt habe, konnten sechs von acht Kandidaten nicht die grundlegendsten Aufgaben erledigen (selbst mit Google und SO). Ich würde sie auf keinen Fall fünf Minuten lang in der Nähe meiner echten Codebasis lassen, geschweige denn 30 Tage.
Julia Hayward
2
@ Julia Hayward: Ich würde erwarten, dass jeder in der Lage ist, ein Projekt mit Zugriff auf Web / Dokumentation abzuschließen. Das Problem taucht auf, wenn jemand ohne Zugang zum Internet Modewörter und undeutliche Sortieralgorithmen auf Sie wirft , unter der falschen Annahme, dass er verschiedene Sortiertechniken auswendig gelernt hat oder was auch immer für die tägliche Arbeitsleistung entscheidend ist.
Satanicpuppy
12

Jemandem zu erlauben, ein praktisches Projekt in seiner Freizeit durchzuführen, bedeutet nicht unbedingt, dass er es tut.

Jeder kommt früh zu einem Vorstellungsgespräch (sollte es zumindest sein). Wir haben eine Warteschleife, damit sie arbeiten können, bis wir bereit sind, sie zu sehen. Es enthält acht (8) Fragen, mit denen die Kenntnisse des Bewerbers in der von uns hauptsächlich verwendeten Sprache überprüft werden.

Wir suchen nicht nach den richtigen Antworten für alle, da jeder sie mit einem Computer vor sich richtig stellen kann. Wir suchen nach Prozessen, versuchen sie sogar die Frage, wie sie zu ihren Antworten kommen.

Wenn wir in das Interview kommen, gehen wir es mit ihnen durch und beantworten alle Fragen, die sie möglicherweise haben. Dies kann sie auch dazu bringen, die richtige Antwort zu erhalten. Es erlaubt uns auch zu fragen, wie sie zu den Antworten gekommen sind, die sie gefunden haben.

In Kombination mit früheren Arbeiten sind dies die besten Möglichkeiten, Kandidaten herauszufiltern.

UPDATE 15.06.2016

Wir haben unseren Prozess bei der Einstellung von Entwicklern erheblich geändert.

Phase 1: Ein 15-minütiges Telefoninterview mit 7 Fragen. Die ersten beiden sind "Woran hast du am meisten Spaß gemacht?" (muss nicht programmierbezogen sein) und "Was codierst du zum Spaß in deiner Freizeit?".

Phase 2: Ein Mini-Projekt, das sie in ihrer eigenen Zeit abschließen. Wir machen dann eine Bildschirmfreigabe mit ihnen und sie zeigen uns, was sie gebaut haben. Während der Bildschirmfreigabe veranlassen wir sie außerdem, zwei Änderungen an ihrem Projekt vorzunehmen, und beobachten, wie sie es durcharbeiten und zum Laufen bringen.

Phase 3: Persönliches Interview.

Dieser Prozess ermöglicht es uns, die richtige Kultur zu finden (Phase 1). Wenn sie die Arbeit machen und ihr Gespräch tatsächlich führen können (Phase 2). Stellen Sie schließlich sicher, dass ihre Werte mit dem übereinstimmen, wonach wir suchen (Phase 3).

RDL
quelle
1
Das ist irgendwie genial. Ich mag das!
Davidhaskins
3
obwohl ich in vielen Interviews gewesen bin, die sich in Kleinigkeiten verwandeln. Achten Sie darauf, dass Sie sich nicht in diesem speziellen Teil der Systemsteuer festsetzen und sich auf deren umfassendes Verständnis einlassen. Vor allem, wenn sie angeblich ein bisschen Talent oder Interesse haben. Das Ergebnis war, dass ich nicht für sie arbeiten wollte, und ich bin mir sicher, dass es gegenseitig war.
John Nicholas
"Jemandem zu erlauben, ein praktisches Projekt in seiner Freizeit durchzuführen, bedeutet nicht zwangsläufig, dass er es tut" - Stimmt, aber ich bin noch nicht auf jemanden gestoßen, der mutig genug ist, in ein Interview einzusteigen und sich über den Code befragen zu lassen, den er hat nicht geschrieben. Sollte es passieren, werden sie das Interview und ihre Bewährung nicht durchstehen, aber ich kann meine Herangehensweise überdenken.
pdr
@John. Einverstanden kann es nicht sein "oh, du hast dort ein Komma vergessen". Wie ich schon sagte, ist es ein Verständnis dafür zu bekommen, wie die Dinge angehen und ob sie die Sprache verstehen. Wenn sie wissen, dass ihre Sachen definitiv zu den größeren Dingen übergehen.
RDL
2
@RDL, Der Großteil unseres Interviewprozesses soll den Entwicklern, nach denen wir suchen, Spaß machen, und dem Rest die Hölle. Sie wissen, wie gut Entwickler einer Herausforderung nicht widerstehen können.
pdr
4

Vielleicht möchten Sie sich Jon Jaggers fantastisches Cyber-Dojo ansehen .

Es ist eine Web - basierte integrierte Umgebung entwickelte dafür bewusste Praxis von Test Driven Development und das Lernen über Teamdynamik. Es hat viele kleine Programmieraufgaben (Kata's) und unterstützt eine Reihe von Sprachen, von Python und Ruby bis Java und C ++.

Im Gegensatz zu IDEs, die auf Produktivität ausgelegt sind, gibt es keine Codevervollständigung, Syntaxhervorhebung oder automatische Umgestaltung, sodass Sie sehen können, was Ihr Befragter ohne diese tun kann.

Das Beste ist, nach dem Ausführen einer Kata können Sie zurückgehen und den rot / grünen Verlauf (oder vielleicht auch nicht, wenn sie keine TDD * 8 'ausführen) jeder Kata betrachten. Jede Kompilierung / jeder Test schreibt die Änderungen zusammen mit den Testergebnissen in ein Git-Repository.

Ich denke, dass die Verwendung dieser Methode für Interview-Codierungstests nicht nur Aufschluss über die Fähigkeit eines Kandidaten zur Lösung eines Problems geben kann, sondern auch über seinen Lösungsansatz und den Prozess, den er anwendet, wenn er nicht durch externe Faktoren eingeschränkt ist. Wählen Sie einfach eine der entsprechenden Kata aus Zeit, die der Kandidat dafür aufwenden soll.

Wenn Sie Ihren eigenen CyberDojo-Server haben möchten, finden Sie das gesamte Projekt bei github. Von dort aus ist sogar eine virtuelle Turnkey-Linux-Appliance verknüpft. Wenn Sie also bereits VMware Player oder VirtualBox installiert haben, können Sie innerhalb dieser Appliance arbeiten Ein paar Minuten nach dem Herunterladen der Appliance!

Mark Booth
quelle
3

Ich habe nur einmal mit einem Unternehmen gesprochen, das dies getan hat. Sie gaben ein Fragebogen mit 6 oder 7 Problemen. Die Anweisungen lauteten, eine Methode zur Lösung jedes Problems zu entwickeln.

Ein Teil der Aufgabe bestand darin, zu erkennen, dass Sie Code wiederverwenden können. Probleme können Code aus anderen Lösungen verwenden. Es war auch nicht sequentiell. Zum Beispiel könnte Frage 3 mit der für Frage 5 verwendeten Methode geschrieben werden.

Ich würde vorschlagen, so etwas zu versuchen.

Was die Fragen betrifft? Einige der ersten Fragen auf der Project Euler- Site sind gut.

Sie können auch ein einfaches Spiel ausprobieren, wenn Sie sehen möchten, wie sie ein Projekt zusammenstellen können.

Wenn Sie sich nichts einfallen lassen möchten, bitten Sie sie, Ihnen Code aus einem endgültigen Projekt zuzusenden.

Tyanna
quelle
3

Um die Teilnehmer zum Abschluss eines Projekts aufzufordern, sollten Sie über bestimmte Fähigkeiten verfügen, die Sie bewerten möchten, und das Projekt so gestalten, dass diese Fähigkeiten getestet werden.

Ein Beispiel wäre, diesen Textabschnitt zu nehmen und eine Liste von alphabetisch eindeutigen Wörtern zurückzugeben. Sagen Sie mir nach jedem Wort, wie oft das Wort vorkam und in welcher (n) Stimmung (en) es vorkam.

Was suchst du mit dieser Frage? Wie viele Möglichkeiten gibt es, um es zu lösen, und was sagt Ihnen jeder Ansatz über die Person aus, die die Antwort geschrieben hat? Stimmen die Fähigkeiten, die eine effektive Antwort auf diese Frage zeigt, mit den Fähigkeiten überein, die für Ihr Unternehmen am wichtigsten sind?

Ich möchte keine Antworten auf diese Fragen. Ich möchte nur, dass Sie über die Antworten nachdenken, bevor Sie eine Gruppe von Kandidaten Ihrem Prozess unterziehen. Wenn Sie wissen, nach welchen Fähigkeiten Sie suchen, ist es nicht schwer, eine Frage zu erstellen, um nach diesen Fähigkeiten zu suchen. Wenn Sie die Frage einer anderen Person verwenden, ohne genau zu verstehen, wofür sie entwickelt wurde (wenn überhaupt), täuschen Sie sich wirklich nur und verschwenden die Zeit aller.

Caleb
quelle
Entschuldige, dass du deine Zeit verschwendet hast.
Bigtang
1
@bigtang, das ist überhaupt nicht so. Es tut mir leid, wenn das oben Gesagte als Schimpfwort herauskommt - ich kann sehen, wie es sein könnte -, aber mein Ziel war es, ein Argument für die Erstellung eines eigenen Projekts zu entwickeln, das auf den Fähigkeiten basiert, die Sie für neue Mitarbeiter suchen. Sie können aus fast allem ein kleines Projekt machen, aber um es für Sie und die Befragten lohnenswert zu machen, sollten die Anforderungen von den Fähigkeiten bestimmt werden, die Sie am meisten schätzen.
Caleb
Der erste Satz wurde vollständig gestrichen (Respektvoll, wenn Sie nicht klug genug sind, um selbst ein anständiges Projekt zu erstellen, warum glauben Sie dann, dass Sie klug genug sind, um die Beiträge der Kandidaten zu bewerten? ") Wert und schien ein bisschen hektisch.
Michael Durrant
0

Ein Beispiel wäre, diesen Textabschnitt zu nehmen und eine Liste von alphabetisch eindeutigen Wörtern zurückzugeben. Sagen Sie mir nach jedem Wort, wie oft das Wort vorkam und in welcher (n) Stimmung (en) es vorkam.

In welcher Sprache würden sie das schreiben? Wenn sie von einer Schule kommen, die sich stark auf C konzentriert, wäre dies nicht so schnell zu schreiben wie eine, die Python / Perl / Ruby usw. lehrt ... Oder sogar Java oder C #. Trotzdem ist es ein guter kleiner Test.

Ich schlage einige einfachere während des Interviews vor. Keine Trickfragen. Ich bin mit TMN dabei. Geben Sie ihnen ein paar Funktionen, die grundlegende Aufgaben erledigen, und fragen Sie, was sie tun (Lesen des Codes anderer Leute). Geben Sie ihnen dann ein paar grundlegende Aufgaben (<20 Zeilen), um in einer Sprache ihrer Wahl zu schreiben. Dies sollte ausreichen, damit ein Einsteiger wissen kann, ob er codieren kann oder nicht (an einer Einsteigerposition). Dies sollte Ihnen zusammen mit dem Interview und der GPA eine gute Vorstellung davon geben, was Sie wissen müssen.

Wecken
quelle
1
Ich finde die Sprache nicht kritisch, sie kann sogar mit Pseudocode erstellt werden. Die Hauptidee ist es, zu sehen, ob der mutmaßliche Mitarbeiter "da reinkommt" und gute Anzeichen für eine Problemlösung aufweist.
Jonas Byström
Ehrlich gesagt, würde jede Sprache mit split () und Arrays / Listen (mit push / append) dies trivial machen. Lassen Sie einen C-Programmierer split () und list 'übernehmen', und es wird genauso trivial :-)
ChuckCottrill
-1

Lassen Sie sie Conways Game of Life für jede Sprache implementieren, in der Sie sich gerade befinden. Verwenden Sie dabei die Designparadigmen dieser Sprache.

Das Spiel des Lebens von Java oder C # Conway sollte objektorientiert sein, LISP oder F # sollten funktionieren usw.

George Stocker
quelle
2
Wie lange würden Sie ihnen dafür geben?
Job
Ich brauche ungefähr 4 Stunden, um eine vollständige OO-Implementierung davon durchzuführen, aber ich habe es jetzt ungefähr ein Dutzend Mal getan. Wenn Sie sehen möchten, wie sie denken und wie weit sie kommen (und ob sie testbaren Code schreiben oder nicht), geben Sie ihnen weniger Zeit. Wenn du es persönlich machst, dann gib ihnen 45 Minuten und sieh nach, wie weit sie kommen und warum sie den Weg gewählt haben, den sie gegangen sind. Es ist eines dieser Probleme, über die sie im Voraus Bescheid wissen sollen, damit sie nicht völlig verloren sind. Ermutigen Sie sie sogar, es selbst zu versuchen. Es verrät viel über einen Programmierer.
George Stocker
8
Bitten Sie einen Kandidaten, Conways Game of Life-Test zu schreiben, wie lange er noch am College war, oder schreiben Sie dieses Problem und untersuchen Sie es. Sie würden @George Stocker einstellen, weil er es ein Dutzend Mal geschrieben hat. Wie stark korreliert das Game of Life mit einer realen Entwicklungsarbeit?
ChuckCottrill