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.
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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?
quelle
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.
quelle
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.
Sie haben gerade Ihre eigene Frage beantwortet.
Nein, darum haben sie dich nicht gebeten.
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.
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.
quelle
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.
quelle