Ich habe nicht viel Erfahrung in der Softwareindustrie, bin Autodidakt und habe an Open Source teilgenommen, bevor ich mich für einen Job entschieden habe. Jetzt, wo ich für Geld arbeite, muss ich mich auch mit unangenehmen Dingen auseinandersetzen, was natürlich normal ist.
Kürzlich wurde ich beauftragt, die Protokollierung einem großen SharePoint-Projekt hinzuzufügen, das von einem Programmierer geschrieben wurde, der offensichtlich gelernt hat, im Job zu programmieren. Nach 2 Jahren Zusammenarbeit ist der Kunde zu unserer Firma gewechselt, aber der Schaden wurde angerichtet, und jetzt muss ich diesen Code irgendwie beibehalten.
Nicht, dass der Code zu schwer zu lesen wäre. Trotz if
aller Probleme - jedes Projekt hat eine Klasse mit mehreren kopierten Methoden, enormen Verschachtelungen, ungarischen Systemen und ungeordneten Verbindungen - ist es immer noch lesbar.
Ich fand mich jedoch absolut unproduktiv, obwohl ich an etwas so Einfachem wie dem Hinzufügen von Protokollierung gearbeitet hatte. Grundsätzlich muss ich nur den Code Schritt für Schritt durchgehen und einige Ablaufverfolgungsaufrufe hinzufügen. Die Idiotie des Codes ist jedoch so ärgerlich, dass ich innerhalb von 10 Minuten nach dem Start müde werde . Anfangs fügte ich using
Konstrukte hinzu, reduzierte das Verschachteln durch Umkehren if
, benannte die Variablen in lesbare Namen um - aber das Projekt ist groß, und schließlich gab ich auf. Ich weiß, dass dies nicht die Aufgabe ist, die ich tun sollte, aber zumindest die Unordnung zu reduzieren, gab mir eine Art psychologische Belohnung, damit ich weitermachen konnte. Jetzt hat der Trick aufgehört zu funktionieren und ich habe noch 60% meiner Arbeit zu erledigen.
Ich bekam nach der Arbeit Kopfschmerzen und bekam nicht mehr das Gefühl der Zufriedenheit, das ich hatte - was mir normalerweise erlaubte, 10 Stunden hintereinander zu programmieren und mich immer noch frisch zu fühlen.
Dies ist nicht nur eine große Parole, denn ich habe tatsächlich eine Frage:
Gibt es eine Möglichkeit, produktiv zu bleiben und nicht gegen die Windmühlen zu kämpfen?
Gibt es irgendeine Art von psychologischer Trick zu bleiben konzentrierte sich auf die Aufgabe, anstatt zu denken , „Wie dumm ist das ?“ , Jedes Mal , wenn ich einen anderen cleveren Trick von der früheren Programmierer sehen? Das Problem beim Hinzufügen der Protokollierung besteht darin, dass ich wirklich verstehen muss, was der Code tut, und dies schadet meinem Gehirn auf unangenehme Weise.
obj
ist entmutigend, 10 Variablen im selben Bereich zu haben, mit denen alle beginnen, weil sie im Grunde nicht lesbar sind.Antworten:
Es tut mir leid, es Ihnen zu sagen, aber nicht alle Jobs sind voller Sonnenschein und Glamour. Der Großteil der Entwicklungsaufgaben besteht aus solchen Plackereien. Traurig aber wahr.
Sie haben einen wichtigen Job zu erledigen, auch wenn es langweilig ist, dem Lack beim Trocknen zuzusehen. Es ist aus zwei Gründen wichtig: 1. Es fügt einem großen System die dringend benötigte Protokollierung hinzu, sodass Sie bei einem Fehler ein Tool zur Verfügung haben, mit dem Sie ihn leichter finden können. und 2. Es macht Sie mit der Codebasis vertraut, so dass Sie, falls und wenn etwas schief geht, hineinspringen und sie reparieren können.
Im Grunde erstellen Sie hier Ihr eigenes Sicherheitsnetz. Glamours, nein, aber wichtig ja!
Wie solltest du dich dann motivieren? Wenn ich bei der Arbeit eine geistesgestörte Aufgabe habe, setze ich mir Ziele. Beende die Aufgabe x bis zum Ende der Woche. Wenn ich mein Ziel mache, belohne ich mich. Neues Restaurant, das ich probieren möchte? Geh Freitag Nacht, wenn ich fertig bin. Neuer Film ist gerade erschienen? Sehen Sie es am Wochenende, wenn ich fertig bin.
Wenn ich mit meinem Vorgesetzten spreche und ihn / sie wissen lasse, wo ich mich befinde und wie ich mich weiterentwickle, bin ich dafür verantwortlich. Wenn ich ihnen sage, dass ich bis Freitag fertig sein werde, bin ich eher geneigt, es bis Freitag fertig zu machen. B / C Ich sagte ihnen, ich würde es tun lassen.
Behalten Sie die Gewissheit, dass, wenn Sie diese Aufgabe erledigt haben und sie gut, rechtzeitig und im Rahmen des Budgets erledigt sind, dass die Leute es bemerken werden, und wenn dieses neue Projekt auftaucht, Ihr Name möglicherweise nur als derjenige vorgeschlagen wird, der sie erhält. :)
quelle
I didn't finish my under-estimated task by Friday - so I need to stay at home and feel bad.
Bewahren Sie eine Datei mit Kandidatencode-Ausschnitten für die Übermittlung an thedailywtf.com auf. Selbst wenn Sie nicht wirklich vorhaben, sie einzureichen, haben Sie eine gute Seite, wenn Sie einen Code finden, der sogar noch schlechter als der Durchschnitt ist.
quelle
Ich befand mich in einer ähnlichen Situation und hatte die Aufgabe, eine große Menge schlecht geschriebenen, massiv kopierten und eingefügten Codes zu entfernen.
Um meine Motivation und meinen Verstand zu wahren, schrieb ich ein Skript mit dem Namen
current_score
LOC, das den LOC im Projekt zählte (der stetig abnahm, da ich Doppelarbeit eliminierte und auf bessere Algorithmen umstellte) und ihn mit dem LOC verglich, als ich anfing. Wann immer ich entmutigt oder enttäuscht war von dem Berg von Code, dem ich gegenüberstand,current_score
gab mir das Laufen ein Gefühl von greifbarem Fortschritt und erinnerte mich daran, wie viel ich bereits erreicht hatte. Und es hat Spaß gemacht zu sehen, wie hoch die Punktzahl war, die ich erreichen konnte, wenn ich einen besonders schlechten Codeabschnitt anpackte.Ich würde nach ähnlichen Metriken suchen, die Sie leicht schreiben können, um sich ein Gefühl für Fortschritt zu verschaffen und daraus eine Art Spiel zu machen. Codezeilen (einfach ausführen
wc -l
), zyklomatische Komplexität (die sinken sollte, wenn Sie diese bösen verschachtelten "ifs" bereinigen), Codezeilen, die Sie anstelle Ihres Vorgängers berührt haben (ich denke, dass FishEye Ihnen dies mitteilen kann) $ 10) usw. Sie können sogar ohne großen Aufwand ein Perl-Skript schreiben, um die Anzahl der Codeblöcke zu ermitteln, für die noch keine Protokollierungsanweisungen vorliegen.quelle
Ich habe dieses Buch empfohlen gesehen: Effektiv mit Legacy-Code arbeiten , musste es aber zum Glück nicht lesen.
Überarbeiten Sie genau wie Sie das, was Sie brauchen, damit Sie den Code verstehen und sich daran erinnern können, dass Sie ein System wiederbeleben, was sich auszahlt, wenn Sie es warten.
Das sollte hoffentlich eine Quelle für Ihren Schritt auf dem Heimweg sein.
quelle
Versuchen Sie, das Projekt in Teile aufzuteilen. Erfahren Sie jeden Tag, wie ein bestimmter Block funktioniert. Der Versuch, alles auf einmal zu verstehen, ist wahrscheinlich das, was Sie herausfordert.
Seien Sie stolz darauf, das Projekt zu verbessern. Gibt es andere Programmierer, mit denen Sie sprechen können? Es ist hilfreich, um den Wasserkühler herumzustehen und über die neueste Logik zu lachen, die Sie gefunden haben. Ich versuche dies zu tun, um eine fröhliche Atmosphäre bei der Arbeit zu bewahren.
quelle
Machen Sie sich umfangreiche Notizen , um Ihre Fragen, Gedanken und Ihr Verständnis des Systems zu organisieren. Dies hat sich für mich beim Umgang mit großen Altsystemen als wunderbar erwiesen. Es hilft dabei, Ihr Verständnis zu kristallisieren, die offenen Fragen in Worte zu fassen, und da Ihre Gedanken bereits zusammengesetzt sind, ist es einfacher, spontan mit anderen über Probleme / Fragen / Ideen / etc. Zu kommunizieren.
Wenn ich zum Beispiel einen Teil des Codes durcharbeite, mache ich mir ständig Notizen. Das ist mein Gespräch mit mir. Das bloße Schreiben bringt mehr Gedanken zum Vorschein und hilft mir, die Dinge besser zu verstehen. Nach einer Weile habe ich vielleicht eine Eureka und muss ein kleines Diagramm mit dem "größeren Bild" auf Papier zeichnen, um zu veranschaulichen, woran ich gerade gedacht habe oder welche Teile ich gerade zusammengestellt habe. Ich mache das immer nur auf dem Papier, um alle Ablenkungen des Computers loszuwerden. Dadurch kann ich methodischer und nachdenklicher darüber nachdenken, was ich tue.
Dies ist im Grunde eine bequeme Möglichkeit, um ein ständiges Gespräch mit einem Domain-Experten zu führen :)
quelle
Ich weiß, dass Sie sich möglicherweise unproduktiv fühlen, weil Sie es aus der Perspektive von "Ich füge nur Protokollierung hinzu" betrachten, obwohl Sie Protokollierung hinzufügen und viele Umgestaltungen vornehmen. Ihr Vorgesetzter ist sich der Codesituation wahrscheinlich bewusst. Möglicherweise wissen es jetzt nicht alle zu schätzen, aber wenn Sie die Aufforderung erhalten, eine wirklich interessante und herausfordernde Funktion hinzuzufügen, sind Sie froh, dass Sie den Code bereinigt haben.
quelle
In diesen Fällen neige ich dazu, einen Codeabschnitt neu zu schreiben. Um einen Bereich weniger saugen zu lassen, füge ich nur einige hinzu, wo sonst. Dann bereinigen Sie noch etwas Code. Schlechter Code ist nur dann schlecht, wenn Sie ihn dort belassen.
quelle
Gamifizieren Sie Ihre Arbeit. Geben Sie sich zum Beispiel jedes Mal 5 Punkte, wenn Sie eine gute Frage zum Code stellen, und 10 Punkte, wenn Sie ihn beantworten. Geben Sie sich jedes Mal ein Abzeichen, wenn Sie eine Methode überarbeiten oder eine neue Funktion hinzufügen. Sobald Sie genug Punkte gesammelt haben, erhalten Sie Privilegien wie Kaffeepausen oder Kekse. Sobald Sie das gesamte Projekt abgeschlossen haben, können Sie sich etwas gönnen, das Sie wirklich wollen.
quelle
Der Trick, sich nicht zu langweilen oder wütend zu werden, damit Sie produktiv bleiben, besteht darin, zu akzeptieren, dass der Code schlecht gestaltet ist. Wenn Sie akzeptieren, dass Sie den Code verstehen und aktualisieren müssen, können Sie nicht immer wieder kommentieren, wie dumm das ist, sondern ihn ruhig akzeptieren und weitermachen.
Ein weiterer Trick ist, ein gutes Zuhause zu haben, auf das man sich am Ende des Tages freuen kann. Freundin, Freunde, Spiele, alles wird funktionieren, um dir ein Ziel zu geben, durch den Tag zu kommen und den schlechten Code so gut wie möglich zu machen.
quelle
"Effektiv mit Legacy-Code arbeiten" von Michael Feathers kann hilfreich sein.
Wenn Sie befürchten, beim Ändern beschädigte Teile zu beschädigen, schreiben Sie zuerst einige Tests, und stellen Sie sicher, dass diese bestanden werden, bevor und nachdem Sie Änderungen vornehmen. Wenn Sie den Test schreiben, können Sie zusammenfassen und nachvollziehen, was ein bestimmter Code bewirkt, und Sie können ihn mit Zuversicht bearbeiten.
quelle