Sollte ich mir Sorgen machen, wenn ich Programmieraufgaben während des Interviewprozesses übernehme? [geschlossen]

27

Ich hatte vor kurzem ein Telefoninterview mit einer Firma. Nach diesem Telefoninterview wurde mir gesagt, ich solle eine kurze Programmieraufgabe abschließen (ein kleines Programm; sollte nicht länger als drei Stunden dauern). Ich werde nur direkt angewiesen, die Aufgabe abzuschließen und den Code einzureichen. Mir wurde völlige Freiheit eingeräumt, jede Sprache zu verwenden, die ich wollte, und es wurde mir nicht genau gesagt, wie ich den Code einreichen sollte.

Sofort plante ich, es auf Github zu werfen, eine Testsuite dafür zu schreiben, Travis-CI (kostenlose fortlaufende Integration für öffentliche Github-Repositorys) zu verwenden, um die Testsuiten auszuführen, und CMake zu verwenden, um die Linux-Makefiles für Travis-CI zu erstellen. Auf diese Weise kann ich nicht nur zeigen, dass ich die Verwendung von Git, CMake, Travis-CI und das Schreiben von Tests verstehe, sondern ich kann auch einfach einen Link zur Travis-CI-Seite erstellen, damit sie die Ausgabe der Tests sehen können. Ich dachte, das würde es für den Interviewer ein bisschen bequemer machen.

Da ich diese Technologien gut kenne, würde sich für die Aufgabe im Wesentlichen keine Zeit ergeben.

Ich bin jedoch etwas besorgt, dass all dies für eine relativ einfache Aufgabe schlecht aussehen würde. Obwohl es für mich nicht viel mehr Zeit bedeuten würde, möchte ich nicht, dass sie denken, ich würde zu viel Zeit für Dinge aufwenden, die einfach sein sollten.

DormoTheNord
quelle
5
Ich würde vorsichtig sein, Antworten auf Interviewprobleme auf github zu setzen, da einige Unternehmen ihre Probleme gerne vertraulich behandeln.
Scroog1
7
Die Fragen sind auf ihrem Blog öffentlich verfügbar (sie haben mir einen Link zum Blogbeitrag geschickt), daher denke ich nicht, dass sie damit zu tun haben.
DormoTheNord
3
@DormoTheNord Ich würde sagen, Sie sind kein Über-Engineering: Ein guter Entwicklungsprozess ist etwas ganz anderes als Über-Engineering und (IMO) ein gutes Zeichen.
K.Steff
3
Ich würde einen Teil dieser zusätzlichen Zeit damit verbringen, Grauzonen in den Problembeschreibungen, Annahmen, Einschränkungen usw. zu dokumentieren. Zeigen Sie, dass Sie sich nicht nur mit Codierung befassen, sondern das Problem und seinen Kontext betrachten.
HABO
4
@DormoTheNord Die Fragen mögen öffentlich sein, aber Ihre Antworten werden es auch sein. Es wird anderen Befragten zur Verfügung stehen, wenn sie es finden können. Das wird ihnen wahrscheinlich nicht gefallen.
Izkata

Antworten:

29

Als Interviewer würde ich mich freuen, wenn das Wissen über den Entwicklungsprozess von Software durch diesen Ansatz demonstriert würde. im Gegensatz nur zum Schreiben des Codes.

Insbesondere eine Testsuite für sehr einfache Probleme wäre ein gutes Zeichen (sogar FizzBuzz-Level). Ich habe gesehen, dass Kandidaten Lösungen eingereicht haben, die das Problem nicht einmal gelöst haben, und ein einfacher Satz von Tests hätte ihnen dies gezeigt. Außerdem kann ich anhand der Commit-Historie einen Eindruck von dem Gedankenprozess gewinnen, mit dem der Kandidat an die Lösung gelangt ist.

Andererseits habe ich bereits in einem frühen Stadium des Prozesses der Überentwicklung festgestellt, dass Personen von einigen Unternehmen abgelehnt werden. In den meisten Fällen war dies jedoch auf ein Über-Engineering der Lösung zurückzuführen, nicht unbedingt auf die verwendeten Prozesse.

Scroog1
quelle
2
Würden Sie so weit gehen zu sagen, dass wenn ein Unternehmen mich ablehnt, was ich vorhabe, dies ein Zeichen dafür ist, dass das Unternehmen die Methoden der Softwareentwicklung nicht respektiert und dass ich lieber nicht für dieses Unternehmen arbeiten würde?
DormoTheNord
7
Ich würde nicht unbedingt so weit gehen, da es (leider) um ein gewisses Maß an Glück geht. Sie könnten den einen Interviewer finden, der diesen Ansatz nicht mochte; oder sie sind an diesem Tag schlecht gelaunt und möchten die zusätzlichen Daten, die durch diesen Ansatz bereitgestellt werden, nicht durchsehen. Das heißt, es schadet normalerweise nicht, den gewünschten Detaillierungsgrad zu klären. Das Stellen von ein oder zwei klärenden Fragen kann auch ein gutes Zeichen für den Interviewer sein (obwohl er sie natürlich nicht ständig mit uninformierten Fragen bombardiert).
Scroog1
+1 - Solange Sie nicht von der Lösung ablenken, würde ich Unit-Tests und alles andere, was Sie tun, ohne Aufforderung sehen wollen.
Telastyn
1
Das zu große Risiko, um es durchzusehen, könnte durch das Senden eines Basis-Github-Links und eines Links direkt zum Quellcode für den Test für die Faulen / Beschäftigten gemindert werden.
Dan Neely
15

Als Befragter jemanden zu haben, der Dinge wie Versionskontrolle, CI, Komponententests und ähnliches versteht, wäre ein Fortschritt gegenüber dem, was ich normalerweise sehe.

Obwohl für mich das Wichtigste ist, dass das Problem gelöst und gut gelöst ist, würde das Wissen, dass der Kandidat Möglichkeiten zur Verbesserung der Qualität seiner Ergebnisse verstanden hat, definitiv meine Aufmerksamkeit auf sich ziehen.

Was ich im Allgemeinen sehe, sind Leute, die nicht nur das Problem nicht verstanden haben, sondern auch nicht verstanden haben, wie man das Problem löst - und die ignoriert werden, unabhängig davon, wie viele zusätzliche Tools sie in diesem Prozess verwendet haben.

Steve Hill
quelle
6

Denken Sie daran, es gibt eine zeitliche Begrenzung. Der Interviewer weiß das, was bedeutet, dass er (wenn ich der Interviewer wäre) sieht, dass Sie das Problem nicht nur innerhalb der vorgegebenen Zeit gelöst haben, sondern es auch so schnell geschafft haben, dass Sie noch Zeit für die Vergoldung hatten, was ein gutes Zeichen für Sie ist Fähigkeiten zur Problemlösung sowie Ihre Wertschätzung für Genauigkeit und Sorgfalt.

Überentwicklung ist ein schlechtes Wort, wenn Sie AbstractFactoryManagerAdapter erstellen, die angeschlossen werden, um BuzzManager und FizzManager zu verteilen, um nur FizzBuzz zu lösen.

Was Sie tun, ist Über-Sorgfalt, die nicht einmal eine Sache ist (obwohl Unter-Sorgfalt definitiv ist).

Das heißt, wenn Sie im Laufe der Zeit oder mit einer halb gehackten Lösung enden, weil Sie Ihre Zeit für die Extras verwendet haben, von denen Sie behaupten, dass sie "überhaupt keine Zeit hinzufügen", wird dies so aussehen, als ob Sie sehr schlecht verstehen, wie groß klein erscheint Aufgaben können sein. Dies kann ein gefährliches Attribut bei einem Ingenieur sein und ist bei Junioren nur allzu häufig anzutreffen. Priorisieren Sie entsprechend und erledigen Sie die zusätzlichen Aufgaben erst, nachdem Sie die erforderliche Lösung abgeschlossen haben.

Jimmy Hoffa
quelle
Es gibt kein festes Zeitlimit, aber nur eine Notiz, die besagt, dass ein anständiger Programmierer nicht mehr als drei Stunden für die Aufgabe benötigt. Würden sie wirklich mein Git-Protokoll überprüfen, um sicherzustellen, dass ich nur drei Stunden von Commit Nr. 1 bis zum endgültigen Commit damit verbracht habe?
DormoTheNord
2
@DormoTheNord Wenn es kein Zeitlimit gibt, kann die Zeit, die nicht für die angeforderte Lösung aufgewendet wurde, als schlechte Priorisierung angesehen werden. Unglücklicherweise sind Ingenieure alle unabhängige Denker und haben daher von einem zum anderen ihre eigene Meinung zu diesen Dingen. In solchen Fällen kann es ein Glücksfall sein, ob die Person, die überprüft, was Sie getan haben, es so sieht oder nicht sortieren, um es als großen Segen zu sehen. Ich habe großartige Ingenieure beider Bögen gekannt. In diesen Fällen kommt es darauf an, was Sie schätzen, was Sie zeigen und mit wem Sie zusammenarbeiten möchten.
Jimmy Hoffa
Das ist es, was ich an Vorstellungsgesprächen hasse ... das Glück, die persönlichen Vorlieben des Interviewers zu befriedigen. Vielleicht sollte es standardisiert werden :)
DormoTheNord
Keine Sorge, das Glück wird sich über Ihre Karriere ausgleichen. Sie müssen nur Glück haben, wenn Sie das gute und wenn Sie das schlechte bekommen :)
Scroog1
1
Ich würde es mit Vorsicht als "Vergoldung" bezeichnen, da angenommen wird, dass dieser Begriff eine schlechte Sache ist: en.wikipedia.org/wiki/Gold_plating_%28analogy%29
Whatsisname
6

Eine andere zu berücksichtigende Ansicht ist, dass Ihr Ansatz weder gut noch schlecht ist. Ich kann mir Interviewer vorstellen, die es zu sehr in Betracht ziehen würden, und ich kann mir Interviewer vorstellen, die noch mehr Technik lieben würden.

Mach dir nicht so viele Sorgen. Lösen Sie das Problem stattdessen so, wie Sie es für am besten halten, und Sie erhalten wahrscheinlich Stellenangebote von Personen, die Ihnen zustimmen. Dies ist ein großartiger erster Schritt in Richtung einer produktiven Arbeitsumgebung. Denken Sie daran, Interviews gehen in zwei Richtungen. Die Antwort des Interviewers auf Ihre Lösung sagt Ihnen auch viel darüber aus. Möchten Sie wirklich mit Menschen zusammenarbeiten, die glauben, dass Ihre Entwicklungsinstinkte und Ihre Philosophie falsch sind?

Corbin March
quelle
3

In Wirklichkeit interessiert es niemanden, ob der Kandidat in Eile ein Git-Repo zaubern oder Makefiles erstellen kann, denn das ist nur eine Erinnerung an das, was er oder sie auswendig gelernt hat. Dies sind sekundäre Fähigkeiten für den eigentlichen Problemlösungs- und Designaspekt der Interviewfrage.

Also ja, Ihre Intuition stimmt genau, dass es möglicherweise schlecht aussieht, da es so aussehen kann, als ob der Kandidat glaubt, dass jemand, der ein paar auswendig gelernt Befehle und Muster zum Erstellen eines Projektskeletts wieder auffliegen lassen kann, beeindruckende Software-Fähigkeiten besitzt.

Der Test-Suite-Aspekt der Lösung ist jedoch gut. Wenn Sie eine Antwort mit einer Regressionstestsuite liefern, werden Sie wahrscheinlich Ihre Punkte verdienen. Dies gilt umso mehr, wenn Ihre Testsuite die wichtigsten Fälle im Code ausführt. Die Testsuite muss nicht viele formale Details aufweisen und auf Tools angewiesen sein. Allein die Tatsache, dass Sie irgendwie einen haben, ist gut genug für ein Interview. Es ist mehr oder weniger offensichtlich, dass Sie, wenn Sie einige Ad-hoc-Unit-Tests in einem Interview-Quiz zusammenstellen können, dies mit Tools für ein reales Projekt tun können.

Kaz
quelle
1

Ich hatte vor kurzem ein Telefoninterview mit einer Firma. Nach diesem Telefoninterview wurde mir gesagt, ich solle eine kurze Programmieraufgabe abschließen (ein kleines Programm; sollte nicht länger als drei Stunden dauern).

Ich würde mit Vorsicht weitermachen. Bewerten Sie die Relevanz der Herausforderung für den Job und stellen Sie sicher, dass sich die zukünftige Erstattung durch den Arbeitgeber für 3 Stunden Ihrer Zeit lohnt.

Ich stelle den Wert dieser Art von Tests in Frage und würde lieber jemanden nach seinen bisherigen Leistungen beurteilen. Eine vordefinierte Kurzaufgabe kann dem Arbeitgeber nichts darüber sagen, was Sie tun können. Nur was man nicht kann, und das lässt sich mit ein paar Fragen schnell am Telefon feststellen.

Testen hat seinen Platz. Stellen Sie sich die folgenden Fragen zum Test und antworten Sie entsprechend.

  1. Ist die Testmesse auf Ihrem aktuellen Karrierelevel?
  2. Hat der Test eine klar definierte richtige Antwort?
  3. Hat der Interviewer ein Interesse an Ihrem Potenzial als Person oder zeigt er mehr Interesse an den Testergebnissen (dh die Personalagenturen sind schrecklich dafür)?
  4. Stellt der Test die Art von Arbeit dar, die Sie gerne erledigen würden, oder handelt es sich um eine zweideutige Überprüfung der Fähigkeiten (dh testen Sie, ob Sie die Java-Syntax kennen).

Ich werde nur direkt angewiesen, die Aufgabe abzuschließen und den Code abzugeben.

Sie haben gerade Ihre eigene Frage beantwortet.

Sofort plante ich, es auf Github zu werfen, eine Testsuite dafür zu schreiben, Travis-CI (kostenlose fortlaufende Integration für öffentliche Github-Repositorys) zu verwenden, um die Testsuiten auszuführen, und CMake zu verwenden, um die Linux-Makefiles für Travis-CI zu erstellen.

Nein, darum haben sie dich nicht gebeten.

Auf diese Weise kann ich nicht nur zeigen, dass ich die Verwendung von Git, CMake, Travis-CI und das Schreiben von Tests verstehe, sondern ich kann auch einfach einen Link zur Travis-CI-Seite erstellen, damit sie die Ausgabe der Tests sehen können. Ich dachte, das würde es für den Interviewer ein bisschen bequemer machen.

Ich würde darauf achten, Fähigkeiten zu früh oder zu spät im Interviewprozess zu demonstrieren. Wenn Sie das Gefühl haben, dass Sie im Interview nicht gut abgeschnitten haben und jetzt versuchen, dies zu kompensieren, wird es nicht funktionieren. Auf der anderen Seite zeigt zu viel zu tun, wenn nicht zu gefragt, über Eifer. Dies könnte dazu führen, dass der Arbeitgeber mit einem niedrigeren Lohnangebot als erwartet kontert.

Ich bin jedoch etwas besorgt, dass all dies für eine relativ einfache Aufgabe schlecht aussehen würde.

Ja, es sieht schlecht aus. Das Lösen ihrer Herausforderung mit einer Codezeile wird weitaus beeindruckender sein als ein vollständig geleertes Projekt.

Aus meiner Erfahrung ist dies nicht der Weg, wie Sie das Vorstellungsgespräch gewinnen, aber es ist eine Möglichkeit, den Job zu verlieren. Der Code-Test ist ein Problem der Qualitätskontrolle. Jedes Unternehmen, das bei der Einstellung von Mitarbeitern Codetests verwendet, tut dies, weil sie zuvor keine Codetests verwendet haben. Sie hatten eine schlechte Erfahrung damit, dass jemand durch die Ritzen des Interviewprozesses gerutscht ist, die man nicht haben sollte.

Sie nehmen Ihren Quellcode und geben ihn im Büro weiter. Die Leute werden es kommentieren, und Sie möchten nicht, dass sie sagen: "Er hat diesen Fehler gemacht? Aber er hat Zeit mit Git, CMake und Travis-CI verbracht. Was für ein Idiot, diesen Fehler zu verpassen."

Das ist es. Du hast verloren.

Sie wollen wissen, dass Sie codieren können, weil sie Ihnen das nicht beibringen können. Git, CMake und Travis-CI können problemlos unterrichtet werden.

Reactgular
quelle
2
@ JimmyHoffa Sind Sie nicht einverstanden mit meiner gesamten Antwort oder nur mit meinen Kommentaren zum Testen? Vielleicht habe ich meine Perspektive nicht richtig ausgedrückt oder vielleicht auch nicht? Für mich ist die menschliche Komponente wichtiger als ein schriftlicher Test. Ein Kandidat, der FizzBuzz nicht besteht, beweist mir nichts. Ich muss mit dieser Person sprechen, um zu verstehen, warum. aber ich möchte (immer) Facharbeiter einstellen. Ich glaube nur nicht, dass du nach Hause gehst, schreibe diesen Test und komm zurück. Ist ein effektiver Weg, das zu tun. Ich möchte lieber die FizzBuzz-Frage stellen und zusehen, wie sie es ausarbeiten. Verstehst du?
Reactgular
1
@ JimmyHoffa Ich denke, dies hängt von den Erwartungen des Arbeitgebers für eine Einstellung ab. Vor diesem Hintergrund schwinge ich mehr an Ihre Seite, je mehr ich über FizzBuzz-Tests lese. Ein Programmierer, der auf keiner Karrierestufe bestehen kann, hat Probleme. Ich bin mir nur nicht sicher, ob diese Art des Testens mit dem OP identisch ist. Siehe dazugehörige Frage: stackoverflow.com/questions/117812/…
Reactgular
Einfach ausgedrückt, ich bin ein Fan von anstrengenden Interviewprozessen und Kandidaten, die versuchen, mehr als nur das zu tun (ohne die Kernanforderungen zu beeinträchtigen; ansonsten priorisieren sie ihre Zeit schlecht). Ihre gesamte Antwort scheint gegen beides zu sprechen.
Jimmy Hoffa
@JimmyHoffa Ich glaube, meine Einstellung beruht auf freiberuflichen Tätigkeiten im kreativen Bereich, bei denen Kunden häufig einen Verkäufer auffordern, im Rahmen ihres Angebotsvorbereitungsprozesses kreative Arbeiten oder Tests durchzuführen. Ich mache diese Art von Arbeit nicht, denn wenn ich Stunden mit jeder Aussicht verbringen würde, würde ich keine abrechenbare Arbeit erledigen. Als ich dem OP sagte, er solle vorsichtig vorgehen, hoffte ich, ihn davon abzuhalten, Zeit zu verschwenden. Das OP wollte viel Zeit in zusätzliche Arbeit investieren. Es ist eine Versuchung, aber lohnt sich die Auszahlung? Vielleicht, aber das OP hat das nicht geklärt. Es könnte kurzfristige Vertragsarbeit sein.
Reactgular
0

Ich denke , dass Ihr Ansatz ist weder gut noch schlecht per se . Ich würde den Interviewer fragen, ob es in Ordnung ist, Github und die anderen Tools zu verwenden. Wie @Izkata in den Kommentaren hervorhob, veröffentlichen Sie Ihre Lösung.

Als Interviewer wusste ich, dass der Kandidat in der Regel nicht schadet, wenn er versucht, ein paar Dinge zu klären. Auch das Stellen von ein oder zwei Fragen kann ein gutes Zeichen sein, da Sie sich nicht beeilen, Dinge zu tun, die Sie nicht verstanden haben.

Denken Sie jedoch daran, dass das Wichtigste darin besteht, dass das Problem gelöst und gut gelöst ist. In dieser Hinsicht sind sich alle einig, dass eine Testsuite hilft. Aber dafür müssen Sie vielleicht nur ein paar Testklassen zusammen mit Ihrem Projekt / Ihrer Lösung senden.

Hbas
quelle