Warum habe ich nach dem Schreiben von Code das Gefühl, dass ich nach einiger Zeit besser geschrieben hätte? [geschlossen]

12

Ich arbeite seit mehr als 2 Jahren an meinem Hobbyprojekt in C ++. Wann immer ich ein Modul / eine Funktion schreibe, codiere ich sie mit viel Nachdenken. Jetzt sehen Sie das Problem,

do {
  --> write the code in module 'X' and test it
  --> ... forget for sometime ...
  --> revisit the same piece of code (due to some requirement)
  --> feel that "This isn't written nicely; could have been better"
} while(true);

Hier 'X'ist ein beliebiges Modul (sei es klein / groß / mittel). Ich beobachte, dass dies passiert, egal wie viel Aufwand ich beim Codieren aufbringe. Daher sehe ich meistens keinen funktionierenden Code. :)

Ist das für viele Menschen ein gemeinsames Gefühl? Handelt es sich um sprachspezifische Phänomene? (Weil man in C ++ dasselbe auf verschiedene Arten schreiben kann).

Was soll ich tun, wenn ich diese bekommen Refactoring für eine reale Weltproduktion Code Gefühl, wo der Arbeits Code ändern wird mich nicht viel Lob verdienen , sondern kann es Probleme einladen , wenn es fehlschlägt.

iammilind
quelle
14
Ich wäre besorgter, wenn ich niemals Probleme mit meinem älteren Code hätte. Dies zeigt, dass sich Ihre Fähigkeiten weiterentwickeln.
Darren Young
1
Wenn man sich alte Code von Ihnen und Sie nicht denken „darn, warum ich es nicht tun diese Art und Weise dann wieder ?!“, dann haben Sie nicht genug gelernt , da Sie den Code geschrieben haben .
sbi

Antworten:

17

Dieses Phänomen ist sehr verbreitet und für Programmierer nicht spezifisch. Wann immer Sie eine intellektuelle Aufgabe ausführen, werden Sie Dutzende von Stellen bemerken, an denen Sie sich hätten verbessern können - nachdem Sie etwas Abstand gewonnen haben. Fragen Sie einen weisen (Frauen-) Mann, der jemals eine These verfasst hat, und er wird Ihnen eines sagen: "Sehen Sie es sich nicht an. Sie werden auf den ersten Blick einen Fehler finden."

Grundsätzlich gibt es zwei Dinge, um die Refactoring-Schleife zu vermeiden:

  1. Versuchen Sie beim Schreiben und Entwerfen so früh wie möglich die ferne Perspektive zu finden. Lassen Sie sich von einem Kollegen Ihr Design / Ihren Code ansehen. Schauen Sie nach einem Wochenende noch einmal. Sieh es dir an, wenn du betrunken oder high bist (aber pass auf, dass du nichts änderst , bis es nüchtern ist).
  2. Lebe mit Unvollkommenheit. Wenn es nur nicht schön ist, aber gut funktioniert (lesen Sie: leistet gute Arbeit bei der Erfüllung aller Anforderungen, einschließlich Erweiterbarkeit und Lesbarkeit), lassen Sie es stehen und begnügen Sie sich mit der guten Arbeit, die Sie geleistet haben, und streben Sie nicht nach der perfekten Arbeit.
Thiton
quelle
Lesen Sie dies. en.wikipedia.org/wiki/Buyer's_remorse Sehr hilfreich.
S.Lott
3

Kontinuierliches Refactoring ist der richtige Weg. Das Ändern des Arbeitscodes würde keine Probleme verursachen und sollte empfohlen werden, wenn dies ordnungsgemäß durchgeführt wird. Wenn Ihr Code vollständig Unit-getestet ist, können Sie Ihren Code mit Sicherheit neu faktorisieren.

Das Einzige, was Sie über den realen Produktionscode vorhersagen können, ist, dass sich WIRD ändern. Versuchen Sie nicht zu erraten, wie sich dies ändern wird und welche neuen Techniken Sie morgen lernen werden. Kurz gesagt, versuchen Sie nicht, Ihren Code "perfekt" zu machen. Mach es einfach so gut du kannst mit deinem gegenwärtigen Wissen. Stellen Sie außerdem sicher, dass Ihr Code gründlich getestet und erweiterbar ist.

Ich verbringe 20% -30% meiner Zeit damit, vorhandenen Code umzugestalten. Ich arbeite in einem Technologieunternehmen und das "Management" hat sich nie darüber beschwert, bestehenden Code zu ändern. Mir ist jedoch klar, dass dies in einigen Unternehmen ein Problem sein kann. Martin Fowler hat sogar einen Abschnitt in seinem Refactoring-Buch .

Zusammenfassend ist es ein allgemeines Gefühl in meiner Erfahrung, aber es ist kein negatives.

Chip
quelle
2

Jedes Modul / jede Funktion entsteht und entwickelt sich in einer Welt der Prioritäten. Wenn es ausreicht, um die Ziele der Außenwelt zu erreichen, bleibt es oft stagnieren. Es ist alles letztendlich ein Gerüst, das dem höheren Zweck dient. Ja, wir müssen von Code besessen sein, und ja, das kann dazu führen, dass wir auch stagnieren. Vielleicht wäre es eine gute Entscheidung, wenn Sie sich ein wenig vom Code selbst entfernen und mehr über die Prozesse nachdenken, die in Ihnen ablaufen, dem Produzenten des Codes.

Kennzeichen
quelle
2

Ist das für viele Menschen ein gemeinsames Gefühl? Handelt es sich um sprachspezifische Phänomene?

Das bedeutet, dass Sie Ihr Wissen und Ihre Ansichten erweitern.

Wenn Sie keine Aufgaben mit höherer Priorität haben, sollten Sie immer zurückgehen und Ihren Code verbessern.

BЈовић
quelle
"... geh zurück und verbessere deinen Code." - Wer bezahlt dich dafür? Sobald Ihr Code funktioniert, fahren Sie fort. Wenn Sie als Programmierer lernen und wachsen, werden Sie IMMER bessere Wege finden, Dinge zu tun, und das Gefühl haben, dass Ihre früheren Bemühungen verbessert werden könnten. Widerstehen Sie dem Drang, irgendetwas dagegen zu unternehmen - das Zurückkehren und Verbessern Ihres alten Codes ist größtenteils Zeitverschwendung.
Dawood sagt, Monica
1
@ David Wallace - Wenn niemand jemals zu altem Code zurückkehren müsste, würden wir uns darüber nicht so aufregen.
JeffO
1
"Sobald Ihr Code funktioniert, fahren Sie fort" - Sie würden nicht glauben, welche Art von Fehlern ich im Produktionscode gesehen habe, weil der Code funktioniert hat;)
BЈовић
@ Jeff O - das ist sehr wahr. Wenn ich alten Code beibehalten möchte, würde ich in Betracht ziehen, ihn zu reparieren, unabhängig davon, ob es sich um meinen Code oder den Code eines anderen handelt. Aber es sei denn, es gibt ein Projekt mit ein paar Dollar dahinter, das die Pflege dieses Codes erfordert, dann gibt es keine Möglichkeit, die aufgewendete Zeit für die Aufräumarbeiten zu rechtfertigen. Es sei denn, es ist natürlich fehlerhaft.
Dawood sagt, Monica
@VJovic - Wenn es Fehler in der Produktion gab, liegt das daran, dass der Code NICHT funktioniert hat. Ich denke, das OP sprach über Code, der korrekt funktioniert, aber hässlich ist.
Dawood sagt, Monica
2

Ich denke immer, dass eine Person eine Matheklasse besucht, um ihre Fähigkeiten in der vorherigen Klasse zu stärken. Die Algebra schien schwer zu sein, bis Sie Algebra II einnahmen. Dann wurden die Fähigkeiten, die Sie in der Algebra gelernt haben, nützlich. Es ist dasselbe beim Programmieren, Schreiben, Holzarbeiten oder irgendetwas anderem.

Während eines Programmierkurses lernten Sie If-then-else, das viele Dinge tat, bis Sie etwas über Schalter lernten. Wenn du etwas Neues lernst, machst du diesen Fortschritt durch, jeder tut es.

mhoran_psprep
quelle
2

Ich habe das gleiche Gefühl, wenn ich den meisten Code lese, den ich in der Vergangenheit selbst geschrieben habe. Das ist eine gute Sache, es bedeutet, dass sich Ihr Wissen und Ihr Codierungsstil im Laufe der Jahre verbessert haben.

Was die Änderung des Produktionscodes angeht, ist dies ein großes Nein, es sei denn, Sie haben offensichtliche Fehler entdeckt. Nicht nur, weil es Zeitverschwendung sein könnte, sondern vor allem, weil die überwiegende Mehrheit der Software-Fehler von der Art sind, die bei Änderungen an veröffentlichten Programmen auftreten. Statistisch gesehen ist es wahrscheinlich, dass Sie unvorhergesehene Fehler einführen. Wenn es nicht kaputt ist, reparieren Sie es nicht.


quelle
1

Eine Anwendung zu entwickeln bedeutet, sie zu verbessern und zu verbessern. Dies ist ein kontinuierlicher Prozess, sodass Sie beim Programmieren mehr Erfahrung und Wissen sammeln. Es bedeutet auch, dass Sie auch entwickeln. Wenn Sie also auf Ihren alten Code zurückblicken, stellen Sie möglicherweise fest, dass er verbessert werden kann.

Wenn Sie dieses Gefühl nicht haben, bedeutet dies eines von zwei Dingen:

  1. Sie sind immer noch auf dem gleichen Niveau.
  2. Ihr Code ist bereits perfekt (unwahrscheinlich).
CVist
quelle