Wie soll mein "Codebeispiel" aussehen? [geschlossen]

24

Ich hatte gerade ein ziemlich gutes Telefoninterview (für eine CakePHP-bezogene Position, nicht dass es für die Frage besonders wichtig wäre). Der Interviewer schien von meinem Lebenslauf und meiner Persönlichkeit beeindruckt zu sein. Am Ende bat er mich jedoch, ihm ein Codebeispiel aus meinem bestehenden Arbeitsprojekt per E-Mail zu senden, "um zu überprüfen, ob Sie nicht heimlich ein schrecklicher Programmierer sind, ha ha!"

Ich bin nicht allzu besorgt , dass mein Code nicht auf eigenen Füßen stehen kann, aber ich bin sehr viel ein Zwischen Programmierer eher als ein Experte. In welche offensichtlichen Fallstricke sollte ich achten, damit mein Codebeispiel nicht hineinfällt, falls sie mich sofort ausschließen? Zweitens, und das ist wahrscheinlich der schwierigere Teil der Antwort auf die Frage, was in einem Codebeispiel verfügt wäre so beeindruckend , dass sie sofort machen würden Sie viel mehr günstig geneigt gegenüber der Programmierer?

Alle Ideen oder Vorschläge sind willkommen!

dieunneversets
quelle
2
Gab es irgendwelche Anforderungen an das zu sendende Codebeispiel? Scheint ziemlich sinnlos, jeder kann schönen Code aus dem Web kopieren / einfügen. Es sei denn , sie auszusortieren Menschen sind versucht , die nicht einmal bekommen , dass Recht ...
FrustratedWithFormsDesigner
5
Nur zum Spaß können Sie ein Perl-Skript senden, das die Form seines Namens hat ...;)
FrustratedWithFormsDesigner
2
@thesunneversets: Also ich denke der absolut umwerfende Quellcode aus deinen persönlichen Projekten ist raus ...;) Im Ernst, das könnte leicht gefälscht werden. Und ist Ihr aktueller Arbeitgeber damit einverstanden, dass Sie ein repräsentatives Muster Ihres Quellcodes herausgeben? Ist es in Ordnung, wenn ein Teil des Codes von einem Kollegen geschrieben wurde (vielleicht ist die Datei im Laufe der Zeit zwischen ein paar Leuten hin und her gegangen)?
FrustratedWithFormsDesigner
2
Die ethischen Implikationen sind ein wenig besorgniserregend ... aber nur ein wenig. Ich glaube nicht, dass ich in eine Industriespionagefalle gerate. Was die Mitarbeiter angeht, leider haben nur zwei Leute jemals diese Codebasis in die Hände bekommen, und der Code des anderen war ein großes Durcheinander, also bin ich so ziemlich auf mich allein gestellt! :)
thesunneversets
4
@thesunneversets, vorausgesetzt, der Kodex Ihres Arbeitgebers ist nicht nur unethisch, sondern vielerorts illegal. TU das nicht.
HLGEM

Antworten:

17

Ich würde gerne Clean Code sehen :

Bereinigter Code : Software-Code, der korrekt und organisiert formatiert ist, damit ein anderer Codierer ihn problemlos lesen oder ändern kann.

Das bedeutet:

  • Funktionalität - Einige einfache Teile der Funktionalität, die nicht trivial sind (eine Reihe von Gettern / Setzern würde nicht zeigen, dass Sie etwas wissen)
  • Einheitlicher, klarer Stil - Beliebte oder zumindest übliche Stile für Gehäuse, Vertiefungen, Abstände und Klammern
  • Gute Benennung - Qualitätsnamen - nur verwenden, iwenn dies der einzige Inkrementwert ist. Verwenden Sie keine unsinnigen Variablennamen.
  • Weitere Attribute von Clean Code - Bewährte Methoden für die Fehlerprüfung, Bedingungen, Schleifen, Hilfsmethoden oder Dienstprogrammmethoden und eine gute Trennung der Bedenken (zwischen Methoden). Und dies ist ein guter Zeitpunkt, um 100% trocken zu sein - keine Wiederholung!

Sie möchten ihnen etwas schicken, das komplex genug ist, um interessant, aber sauber genug zu sein, damit ein guter Entwickler fast sofort verstehen kann, was es tut.

Einige der obigen Kommentare scheinen besorgt darüber zu sein, wie leicht dies gefälscht werden könnte. * Wenn Sie sich davor schützen möchten, senden Sie möglicherweise eine kurze Beschreibung des Zwecks und des Verlaufs des Codes in der E-Mail.


* Am allerwenigsten , wenn der Interviewer über vergangene Projekte im Vorfeld gefragt, dann fragte man aus diesem Projekt für eine Probe und fragte , was Sie es schreiben benötigt oder wie es sich entwickelt, ich glaube , der Prozess ziemlich Lügner sicher sein würde. Ich denke, die meisten Kandidaten, die lügen würden , werden sowieso Probleme in anderen Bereichen zeigen.

Nicole
quelle
Wenn Sie die Person bitten, den Code zu erklären, und sie nicht kann, hat sie ihn nicht geschrieben oder den Code einer anderen Person in der Wartung angepasst, ohne sich darum zu kümmern, ihn zuerst zu verstehen. Erstaunlich für mich, wie viele Leute ich im Laufe der Jahre interviewt habe, die ihre eigene Stichprobe nicht erklären können.
HLGEM
Fügen Sie einige Kommentare hinzu, falls Ihr Marker sauberen Code hasst.
Ewan
9

Auf der Suche nach Arbeit habe ich eine Reihe von Fragen zum ACM-Programmierwettbewerb in verschiedenen Sprachen gelöst und diese seitdem für Codebeispiele verwendet. Ich denke, sie haben gute Codebeispiele gemacht, weil:

  • Sie lösten herausfordernde Probleme
  • Das Problem erforderte nicht viel Kontext und es war einfach, die Fragen zu bekommen
  • Mit dem geschriebenen Code ist kein IP-Risiko verbunden.
  • Jedes Problem kann vernünftigerweise in einer einzigen Datei vorliegen und ist oftmals nicht sehr lang. Daher sollte es für jeden einfach sein, Ihre Lösung zu kompilieren, zu testen und die Testdaten aus den Fragen zu verwenden.
  • Zeigt, dass Sie ein komplexes Problem in kleinere Teile zerlegen können.
  • Wenn Sie gefragt werden, wie bestimmte Aspekte Ihrer Lösung funktionieren, haben Sie die Gelegenheit, zu demonstrieren, dass Sie wissen, wovon Sie sprechen. Dies gilt insbesondere dann, wenn die Lösung viele Jahre alt ist, Sie aber schnell erkennen können, was gerade vor sich geht.

Und dann sollte der von Ihnen erstellte Code klar, konsistent, leicht zu lesen und leicht zu verstehen sein.

Und zuletzt:

  • Es lohnt sich, sie nur zum Spaß zu lösen, und es ist eine gute Übung.
Whatsisname
quelle
Dies ist eine großartige Lösung. Ich werde das machen. Gab es spezielle Fragen, die Ihnen am besten gefallen haben?
zkent
1
Als Kommentar von mir halte ich es für keine gute Idee, ein Codebeispiel mit nur einer Datei zu haben, es sei denn, Sie bewerben sich um eine Stelle zur Optimierung von Code oder Algorithmen. Der Code sollte sicherlich nicht sehr umfangreich sein, aber er sollte ein wenig repräsentativ für das sein, was Sie tatsächlich erreichen können (z. B. wenn Sie guten OO-Code schreiben und den Code in Module aufteilen können, sollte dies demonstrieren).
Namey
6
  • Es sollte fehler- und warnfrei auf höchster Strenge kompilieren / interpretieren.
  • Es sollte kein Boilerplate-Code sein, den Sie jeden Tag schreiben. Machen Sie es einzigartig und interessant, damit klar ist, dass Sie es nicht kopiert / eingefügt haben.
  • Es sollte einige interessante Designentscheidungen mit Kommentaren geben, die erklären, wie / warum Sie sie getroffen haben.
  • Streben Sie nicht mehr als 2-3 ausgedruckte Seiten an.
  • Es sollte in der Sprache sein, für die Sie sich bewerben.
  • Es sollte mein Gehirn nicht verletzen, wenn ich es zum ersten Mal lese. Lassen Sie es sich von einem Freund ansehen oder auf Codereview posten.
Karl Bielefeldt
quelle
3

Wenn ich Sie interviewen würde, würde ich gerne Ihren Code sehen.

Sauber ist gut, Problemlösung ist gut, aber wahrer Code ist besser. Ein guter Programmierer weiß, wann er / sie von einem anderen Programmierer betrogen wurde, sodass das Vertrauen sinken kann.

Das Lesen des Codes einer anderen Person ist wie das Tanzen beim Sex: Sie wissen, wann es die Realität ist, und wenn die andere Person dies vortäuscht, wird am Ende eine Katastrophe eintreten. (nur realisierte echte Nerds können nicht tanzen)

Vertrauen Sie einfach sich selbst und Ihren Codierungsfähigkeiten . Wenn Sie Ihren Interviewer nicht wirklich kennen, können Sie nicht vorhersehen, was er von Ihrem Codierungsstil / Ihren Codierungsfähigkeiten erwartet.

Machado
quelle
10
Ich finde es toll, dass du nicht denkst, dass Nerds tanzen können, aber du bist dir ihrer sexuellen Fähigkeiten sicher! : D
thesunneversets
Nein, ich habe selbst zu viele Katastrophen gesehen ... :)
Machado
An meiner Schule sind die einzigen Leute, die sich für soziale Tanzkurse / Bälle melden, Ingenieur-Majors.
Eva
Du solltest Sex durch einen
Spielbezug
2

Seien Sie auch sehr vorsichtig, dass es NICHT der Code Ihres aktuellen Arbeitgebers ist (Sie besitzen ihn und ich garantiere, dass sie ihn nicht gerne teilen.). Nehmen Sie etwas, auf das Sie stolz sind, und überarbeiten Sie es selbst, um nicht arbeitgeberspezifisch zu sein (entfernen Sie alle Verweise auf ihre Datenbanktabellen oder Servernamen usw.). Was auch immer Sie tun, übermitteln Sie keinen Code, der Fehler aufweist oder eine schlechte Technik für die Art des Codes darstellt (ich würde wahrscheinlich jemanden ablehnen, der einen Cursor übermittelte, wenn eine satzbasierte Operation einfacher und leistungsfähiger wäre, wenn Sie SQL-Code überprüfen. Es gibt ähnliche Techniken für andere Sprachen, um ein relativ seltenes Problem zu lösen, das für andere häufigere Probleme verwendet werden kann, aber nicht die beste Wahl für diese anderen Probleme ist. Hat dieser Satz Sinn ergeben?)

HLGEM
quelle
Ich stimme zu, es komplett zu überarbeiten, damit es keine arbeitgeberspezifischen Informationen mehr enthält, scheint eine gute Idee zu sein. Ethik ist wichtig - danke für den Tipp!
thesunneversets
0

Ich würde den Beitrag von Renesis über sauberen Code unterstützen, ihn aber zur Liste hinzufügen, die dem von Ihnen eingereichten Code Qualität und gut dokumentierte Komponententests liefert. Ein guter Programmierer sollte Unit-Tests für seinen Code schreiben.

Chris Knight
quelle
0

Nach einer Meinung von jemandem, der bei der Bewertung von Kandidaten Codebeispiele anfordert, gibt es einige Funktionen auf hoher Ebene (Inhalt des Codes) und einige Funktionen auf niedriger Ebene (Struktur des Codes). Funktionen auf hohem Niveau:

  1. Identität : Der Geschmack des Codes. Wenn Sie sich selbst als UI / HCI-Codierer in Rechnung stellen, möchte ich beim Ausführen ein gutes Erscheinungsbild für etwas Visuelles sehen. Wenn Sie ein DB-Builder sind, möchte ich etwas Interessantes mit der Darstellung oder Analyse von Daten sehen. Die Probe sollte etwas sein, auf das Sie stolz sind . Wenn Sie nicht mindestens eine davon haben, haben Sie keine Identität.
  2. Reife : Wechseln Sie Strategien für verschiedene Probleme? Lösen Sie interessante Probleme? Wäre es einfach, den Code oder Ansatz auf ein ähnliches Problem auszudehnen? Fühle ich mich umgekehrt, als würde ich ein Mitglied einer Frachtkultgemeinde anschauen?
  3. Kommunikation : Erklärt der Code leicht, was er tut und warum? Dies bedeutet nicht, dass der Code einfach sein muss. Tatsächlich ist es ein Bonus, komplexen Code leicht verständlich zu machen.

Die einfachen Aspekte sind einfacher:

  1. Stil : Der Code sollte sauber, konsistent (gemäß einigen etablierten Richtlinien) und gut dokumentiert sein.
  2. Verpackung : Es sollten mindestens eine kurze Readme-Datei, eine ausführbare Version und ausführbare Tests vorhanden sein. In der Infodatei sollte ich erfahren, wie die beiden letzteren ausgeführt werden und warum Sie dieses spezielle Codebeispiel demonstrieren.
  3. Sprache (n) : Normalerweise frage ich jemanden nach einer Probe in der Sprache für die Position sowie nach der, in der er sich am stärksten fühlt. Gibt eine gute Vorstellung von den aktuellen Höchstgrenzen einer Person.

Für einen guten Kandidaten erwarte ich, dass eine Stichprobe entweder: A) eine kugelsichere kleine Stichprobe oder B) ein guter Teil eines größeren interessanten Projekts (z. B. ein Modul aus einem persönlichen Github-Repo) ist. Ich erwarte, dass es sich um persönliche oder akademische Projekte handelt. Wenn sie eines von einem bezahlten Projekt senden, erwarte ich eine Nachricht, dass sie die Erlaubnis erhalten haben, es zu verwenden. Wenn ich diese Notiz nicht bekomme, schneide ich sie von den Kandidaten ab (schwacher Kandidat) oder frage sie während des Interviews danach (starker Kandidat). Keine Erlaubnis zu haben, wäre eine große rote Fahne (wahrscheinlich unüberwindbar). Für einen fortgeschrittenen Kandidaten erwarte ich einen Haftungsausschluss, in dem darauf hingewiesen wird, dass einige der besten Quellenbeispiele nicht gezeigt werden können, da dies im Rahmen ihrer Arbeit erfolgt ist. Allerdings erwarte ich dann ein sprudelndes Zeugnis darüber, warum sie stolz auf dieses unshowable Design sind und wie sie es lieben wie ein Kind.

Und so sehr manche Leute sagen, "Oh, jemand könnte nur ein Codebeispiel aus dem Internet bekommen", lautet das Gegenargument, dass die meisten Leute, die einen Code mit guter Produktionsqualität nicht verstehen, ihn auch nicht verstehen, wenn sie ihn sehen . Außerdem kann man bei Google immer eine eindeutige Zeile für den Code überprüfen. Im besten Fall bringt der Diebstahl von Code einen Kandidaten zu einem Interview, bei dem er sich selbst in Verlegenheit bringt ("Warum haben Sie das also so gemacht ...?").

Als letzte Anmerkung zum Code aus früheren Beschäftigungsverhältnissen: Nur nicht. Aus HR-Sicht ist es unangemessen, Code aus früheren Beschäftigungsverhältnissen anzufordern, und es ist eine rote Fahne für das Unternehmen. Sie würden beide rechtlich haftbar sein (dh Sie könnten beide verklagt werden) und es zeigt sich, dass sie keine Ahnung haben, was sie tun. Code, der für einen früheren Arbeitgeber erstellt wurde, sollte niemals angegeben werden, es sei denn, der Code ist bereits öffentlich verfügbar oder Sie haben die ausdrückliche Erlaubnis dieses Arbeitgebers. Schlimmer noch, in einem großen Unternehmen hat Ihr direkter Vorgesetzter möglicherweise nicht die Befugnis, Ihnen die Erlaubnis zu erteilen. Haben Sie in diesem Fall also Spaß mit der Rechtsabteilung? Ich bin sicher, dass sie überglücklich sein werden, ihre IP-Adresse für einen ausscheidenden Mitarbeiter offenzulegen.

Namey
quelle
Ich werde auch bemerken, dass ich zur vollständigen Offenlegung dem Graduiertenlabor, in dem ich für eine Promotion zugelassen wurde, ein Codebeispiel zur Verfügung stellte. Dieses Codebeispiel war der vollständige Code für einen autonomen Roboter (5-10.000 Zeilen), wobei drei bestimmte Dateien ausgewählt wurden. Die Dokumentation war seriös, aber nicht makellos. Wenn ich es noch einmal machen müsste, hätte ich wahrscheinlich keine gedruckte Version des Codes zu meinem Vor-Ort-Interview mitgebracht (hätte 100 Seiten mit der Aufschrift "ROOKIE MISTAKE" in großen Buchstaben bringen können). Ich habe ein volles Stipendium erhalten, es war also kein großer Fauxpas. Moral: Zu viel> = zu wenig.
Namey