Wie gehe ich vor, um Code von einem weniger erfahrenen Programmierer zu reparieren?

19

Ein kleiner Hintergrund: Ich bin einer von zwei Programmierern für unsere Abteilung mit 10 Mitarbeitern (der Rest sind Künstler und Management). Wir beide schreiben alles, was nötig ist, um einen reibungslosen Ablauf zu gewährleisten, und entwickeln alle anstehenden Projekte. Ich programmiere seit ungefähr 4 Jahren, wo dies sein erster "richtiger" Job ist (wie er es ausdrückt). In der Regel arbeiten wir zu jedem Zeitpunkt an unterschiedlichen Projekten.

Vor ein paar Monaten habe ich eine (keineswegs perfekte) Reihe von Klassen entwickelt, die für ein späteres Projekt verwendet werden sollten. Ein großer Teil dieses Projekts wurde (aus Abrechnungsgründen) an ihn delegiert, um eine GUI-Oberfläche zu entwerfen und zu programmieren. Da er neu war, half ich ein bisschen beim Entwerfen und bat um Hilfe, wenn er sie für den Rest brauchte. Er hat das Interface vor ein paar Wochen fertiggestellt, was er demonstrieren wollte, um zu zeigen, dass es funktionierte, wenn auch etwas langsam.

Der nächste Teil des Projekts, an dem ich arbeite , hat begonnen . Ich habe die Benutzeroberfläche geöffnet, um mit den nächsten Schritten zu beginnen, und bin sofort auf Probleme gestoßen (ein wenig langsam war ein wenig Untertreibung, Fehler bei allgemeinen Aktionen usw.). Ich habe den Code nach ein paar Problemen durchgesehen und O(n^n)bei Aufrufen festgestellt, dass es sich dabei um O(n)Annahmen ohne Fehlerprüfung (in Python), Verweise auf die dem ursprünglichen Code hinzugefügte GUI usw. handeln sollte.

Jetzt möchte ich ihm auf jeden Fall beibringen, was falsch war und wie man es repariert, aber er ist bereits zu seinem nächsten Projekt übergegangen, und das war vor ein paar Wochen. Ich fürchte, ich sage "Geh zurück und mach es richtig!" (mit hilfe natürlich) ist zu hart und wir haben in der zwischenzeit noch andere projekte zu erledigen. Sollte ich den Code jetzt einfach selbst reparieren und versuchen, die Dinge in der Zukunft einzufangen?

TorelTwiddler
quelle
4
Gibt es in Zukunft die Möglichkeit, Kodierungsrichtlinien zu vereinbaren, die Fehler wie von Ihnen beschrieben verhindern würden?
Benni
5
Es ist gut, dass Sie nicht sofort zur Geschäftsführung rennen und ihm Bescheid sagen. Einige Unternehmen sind schuldorientiert. Suchen Sie beim Einchecken der Fehlerbehebungen nach einer Möglichkeit, sie zu gruppieren, und lassen Sie sie später von diesem Kerl überprüfen. Andererseits sollte selbst ein frisch Absolvent nichts kodieren, was es O(n^n)nicht gibt , es sei denn, es gibt einfach keinen anderen Weg. Wenn ja, dann haben sie wahrscheinlich ein C in Algorithmen oder haben es nicht genommen oder hatten einen beschissenen Lehrer. Es wäre schön, eine Art Werkzeug einzusetzen, um häufige Probleme zu finden. Vielleicht kann dieser Typ als nächste Aufgabe einige Leistungstests schreiben?
Job
Ein O (n ^ n) ohne Dokumentation, warum es einfach falsch ist, Punkt. Wenn Sie es wirklich tun müssen, sollten Sie in den Kommentaren erklären, warum.
Loren Pechtel
Wollte gerade schreiben, dass "Hey, O (n * n) ist nicht so schlimm, viele Anwendungen erfordern es ...", aber dann wurde mir klar, dass es kein Multiplikationszeichen war, sondern ein Killer ^!
Max
O (n ^ n) kann um ein Vielfaches schneller sein als O (n), wenn O (n) eine große Konstante hat und n klein ist. Allerdings ist n ^ n extrem: D
Coder

Antworten:

33

Klingt so, als ob die Einführung einer Codeüberprüfungsrichtlinie auf mehreren Ebenen vorteilhaft sein könnte. Einige unmittelbare Vorteile:

  • Sie können die Qualität seines Codes direkt beeinflussen, bevor der Code festgeschrieben wird, wodurch die Qualität der Codebasis hoch bleibt
  • Hält Sie davon ab, ähnliche Fehler zu machen, die andere Augen fangen könnten
  • In Ermangelung von Kodierungsrichtlinien führen Überprüfungen natürlich zu einer Konsistenz des Kodierungsstils
  • Wissen teilen. Wenn nur zwei von euch sind und einer von einem Bus angefahren wird ...

Wenn Sie nun damit beginnen, seinen Code zu bereinigen, verwenden Sie dies als Unterrichtsübung, wenn Sie eine Überprüfung dieses Codes anstreben. Du wirst deine Sachen überprüfen lassen, und er wird vielleicht lernen, wie man es beim nächsten Mal besser macht.

Nithine
quelle
3
+1 Code Review ist ein guter Weg, um dies zu tun. Ich würde vorschlagen, es mehr nach dem Motto "Würde es Ihnen etwas ausmachen, wenn Sie sich die Änderungen ansehen, die ich vorgenommen habe, um sicherzustellen, dass ich nichts verpasst habe" anstatt "Hier sind die Möglichkeiten, wie ich Ihren Code verbessert habe" zu formulieren.
Steve Jackson
1
+1 Ich würde sagen, die Codeüberprüfung passt viel besser als alle "Kodierungsrichtlinien mit goldenen Regeln". Nicht viele Dinge sind niemals in Ordnung.
Max
Ich mag diese Idee wirklich, danke. Jetzt muss ich nur noch ein bisschen nach guten Möglichkeiten suchen, um Code-Reviews durchzuführen!
TorelTwiddler
1
Unter mumak.net/stuff/your-code-sucks.html gibt es ein gutes und unterhaltsames Papier mit einigen Grundlagen . Es geht hauptsächlich um Verhaltenstechniken zur konstruktiven Durchführung von Überprüfungen, was für erfolgreiche Überprüfungen von enormer Bedeutung ist.
Nithins
@TorelTwiddler, denken Sie daran, dass Code-Reviews zum Lernen gedacht sind und nicht zum Beschuldigen. Zeigen Sie Dinge auf, die er gut gemacht hat, damit er weiß, dass sie gut sind und gleichzeitig Verbesserungsvorschläge machen.
CaffGeek
5

Korrigieren Sie niemals ihren Code, sonst lernen sie nichts anderes, als wenn sie Fehler machen, werden sie abgefangen und repariert. Die Aufgabe wird erst erledigt, wenn sie erledigt ist . Ich hatte wirklich Glück, als ich anfing, professionell zu sein, und mein direkter Vorgesetzter überprüfte alles, was ich getan hatte, und wenn es eine bessere Lösung gab oder ich einen dummen Fehler gemacht hatte, sagte er mir, was bedeutete, dass meine Fähigkeiten besser wurden, was bedeutete, dass ich mich schneller verbesserte und weiterentwickelte eine härtere Haut.

Wenn Sie es abrutschen lassen, können Sie schlechte Angewohnheiten entwickeln. Wenn Sie es jetzt korrigieren, können Sie besser mit Kritik umgehen.

Nicholas Smith
quelle
2

Können wir daraus schließen, dass das Projekt "funktioniert" und in einem angemessenen Zeitraum abgeschlossen wurde (wenn auch mit einigen ungeheuren, aber behebbaren Designproblemen)? Wenn ja, ist es in einem viel besseren Zustand als viele Projekte, die ich im Laufe der Jahre gesehen habe.

Ich denke, dass mehr Kommunikation Ihrem Team helfen würde - und dies könnte durch regelmäßige Codeüberprüfung geschehen.

Es ist gut, dass Sie empfindlich dafür sind, "zu hart" zu sein, und ich denke, Sie werden bedenken, dass die Codeüberprüfung kein demoralisierendes Hot-Seat-Erlebnis sein muss, bei dem die Junior-Leute gegrillt und hinterfragt werden. Es kann auch eine Möglichkeit für leitende Entwickler sein, bewährte Praktiken zu demonstrieren und Vertrauen ineinander zu gewinnen, indem sie auch bei "Fehlern" höflich und freundlich sind.

Die Leute lernen gut, wenn sie sehen, wie wirklich gutes Zeug aussieht. Dies ist besser, als systematisch auf jeden kleinen Fehler hinzuweisen. Das O (n ^ n) sollte jedoch vorsichtig und konstruktiv herausgestellt werden.

Angelo
quelle
0

Teilen Sie Ihr Wissen.

Ich würde ihm Hilfe bei seinem neuen Projekt anbieten, im Austausch für etwas Unterricht von einem Senioren bis zu einem Junioren.

Warum nicht bei beiden Projekten die Programmierung koppeln?

mouviciel
quelle