Ist es normal, dass ich nicht mehr als drei mir zugewiesene Bugs in meinem Kopf behalten kann, noch kann ich tausend Zeilen Spaghetti-Code verstehen?


19

Ich arbeite an einer alten Codebasis, die ... nicht perfekt ist , in einer Umgebung, die es auch nicht ist. Es ist nicht die schlechteste Codebasis, die ich in meinem Leben gesehen habe, aber es gibt immer noch viele Probleme: Null-Einheitentests; Methoden mit mehr als tausend Codezeilen; Missverständnis der objektorientierten Grundprinzipien; etc.

Es tut weh, den Code zu pflegen.

  1. Jedes Mal, wenn ich tausend Zeilen einer schlecht geschriebenen Methode mit überall wiederverwendeten Variablen debuggen muss, bin ich total verloren.
  2. Einige Änderungen oder Umgestaltungen, die ich vorgenommen habe, führten zu Fehlern an anderen Stellen der Anwendung.
  3. Ohne Dokumentation, Tests oder eine beobachtbare Architektur und kombiniert mit schlecht benannten Methoden habe ich das Gefühl, dass ich meinen gesamten verfügbaren Arbeitsspeicher auffülle. Für all die anderen Dinge, an die ich mich erinnern muss, um den Code zu verstehen, den ich ändern soll, bleibt kein Platz mehr.
  4. Ständige Unterbrechungen am Arbeitsplatz stören und bremsen mich.
  5. Ich kann mich nicht an mehr als zwei oder drei Aufgaben gleichzeitig erinnern, ohne ein Fehlerverfolgungssystem, und ich vergesse sie alle über das Wochenende.

Meine Kollegen scheinen keine ähnlichen Probleme zu haben.

  1. Sie können schlecht geschriebene Methoden viel schneller debuggen als ich.
  2. Sie führen weniger Fehler ein als ich, wenn ich die Codebasis ändere.
  3. Sie scheinen sich sehr gut an alles zu erinnern, was sie brauchen, um den Code zu ändern, selbst wenn es erforderlich ist, Tausende von Codezeilen in zwanzig verschiedenen Dateien zu lesen.
  4. Sie scheinen nicht durch E-Mails, klingelnde Telefone, Menschen, die sich überall unterhalten, und andere Menschen, die ihnen Fragen stellen, gestört zu werden.
  5. Sie möchten nicht das Bug-Tracking-System verwenden, das wir bereits haben, da wir TFS verwenden. Sie ziehen es vor, sich an jede Aufgabe zu erinnern, die sie erledigen sollten.

Warum passiert das? Ist es eine besondere Fähigkeit, die Entwickler erwerben, wenn sie lange Zeit mit schlecht geschriebenem Code arbeiten? Trägt meine relative mangelnde Erfahrung mit schlechtem Code zu diesen Problemen / Gefühlen bei? Habe ich Probleme mit meinem Gedächtnis?


1
Sind Ihre Mitarbeiter mit dieser speziellen Codebasis erfahrener als Sie? Außerdem müssen Unit-Tests / Bug-Tracking / etc nicht unbedingt ein Alles-oder-Nichts-Ansatz sein. Beginnen Sie einfach damit, sie auf den Teilen umzusetzen, für die Sie verantwortlich sind.
Graham

1
Deshalb gibt es eine Kapselung .
Robert Harvey

Antworten:


26

Ja, es ist normal, dass strukturierte Personen von unstrukturiertem Code / unstrukturierten Umgebungen betroffen sind. Ihre Kollegen filtern wahrscheinlich besser alle Hintergrundgeräusche heraus. Als Migränepatient weiß ich, dass meine Fähigkeit, meine Umgebung herauszufiltern, stark abnimmt, wenn eine Migräne auftritt. Die Leute variieren.

Das Gleiche gilt für den Code. Ihre Kollegen haben wahrscheinlich gelernt, das "Code-Rauschen", das von mehreren Abstraktionsebenen herrührt, mit einer einzigen Methode herauszufiltern, und haben es verstanden, den Code in größere Funktionsbereiche "aufzuteilen".

Es braucht einfach Zeit, um sich an eine Codebasis wie die von Ihnen beschriebene anzupassen. Ihre Kollegen hatten wahrscheinlich viel mehr Zeit, um sich darauf einzulassen, und haben möglicherweise Konventionen, Muster und Konstruktionen aufgegriffen, die nicht auf "Code Base Novices" aufbauen. Das Chaos kann mehr Struktur haben, als Sie sich vorstellen können. Sprechen Sie mit Ihren Kollegen, bitten Sie sie, sich mit Ihnen zu paaren, und überlegen Sie, wie sie einen der Ihnen zugewiesenen Fehler lösen möchten. Wenn Sie aufgefordert werden, die Einheit X, Y oder Z zu öffnen, fragen Sie sie, warum diese Einheit, was sagt sie ihnen, dass sie relevant sein könnte usw.

Es ist normal, in einer Methode mit tausend Zeilen verloren zu sein. Greifen Sie mit einem guten Falteditor darauf zu und fügen Sie Kommentare hinzu, um die verschiedenen Teile in Funktionen und / oder Prozeduren zu unterteilen, ohne dies tatsächlich zu tun. Das Drucken des Materials und die Verwendung eines altmodischen Textmarkers können ebenfalls hilfreich sein.

Refactoring ohne das Sicherheitsnetz von Unit-Tests schießt sich in den Fuß. Nicht. Tu es einfach nicht.

Niemand verlangt von Ihnen, dass Sie alles im Gedächtnis behalten. Wenn Ihre Kollegen kein Fehlersystem möchten oder benötigen, schreiben Sie die Ihnen zugewiesene Aufgabe einfach in Ihre eigene Aufgabenliste und machen Sie sich Notizen, wenn / nachdem Sie mit jemandem über die Details Ihrer Aufgaben gesprochen haben.


+1 für "Ja, es ist normal, dass strukturierte Personen von unstrukturiertem Code / unstrukturierten Umgebungen betroffen sind."
Md Mahbubur Rahman

2

Ich sehe drei Hauptpunkte:

Die Punkte 1, 2 und 3 ergeben sich aus der Tatsache, dass Ihre Kollegen einfach mehr Erfahrung mit der Codebasis haben, was bedeutet, dass sie die Macken der Codebasis kennen. Dies bedeutet, dass sie ihr Langzeitgedächtnis für den Debug-Prozess verwenden und sich daran erinnern können, dass doXYZ UVW tatsächlich ausführt, jedoch aus historischen Gründen nie umbenannt wurde. Sollte es jedoch jemals einige Monate dauern, bis die Kodierung abgeschlossen ist, werden sie Ihren Schmerz spüren.

Lassen Sie sich bei Punkt 4 nicht von nicht dringenden Geschäften aus der Zone bringen . Es dauert lange, bis Sie nach einer Unterbrechung wieder in die Zone zurückkehren. Setzen Sie die IM des Unternehmens auf "beschäftigt", und versuchen Sie, lange Blöcke (ganze Nachmittage) mit nur Codierung zu planen

Erstellen Sie für Punkt 5 Sekunden ein Excel-Blatt mit den Fehlern, an denen Sie gerade arbeiten, als Ihre persönliche Aufgabenliste (oder verwenden Sie die Aufgabenverwaltungsfunktionen in Ihrer IDE). Ich wette, dass einige Ihrer Kollegen dasselbe tun


Vielen Dank für Ihre Anregungen. Hinweis: Für Punkt 5 haben wir bereits TFS, ein Produkt, das ein Fehlerverfolgungssystem enthält. Ich bin der einzige, der es heute benutzt. Ich kenne nicht jeden Entwickler des Unternehmens, aber ich bin mir sicher, dass einige keine Fehlerliste haben, nicht einmal in Excel oder einem einfachen Textdokument.
Arseni Mourzenko

2

Klingt für mich nicht nach Speicherproblemen. Es hört sich so an, als würden Ihre Arbeitsgewohnheiten / -tendenzen nicht gut zu dem passen, dem Sie begegnen, und Sie denken zu viel über Ihre Kollegen und nicht über sich selbst nach.

  1. Tausend-Zeilen-Methode - jeder wird sich darüber verirren, wenn er nicht nur daran gearbeitet hat. Möglicherweise können sie es schneller abholen oder zurückholen. Das kann man nur durch Erfahrung ändern, und vielleicht auch dann nicht.

  2. Refactoring, das Fehler einführt, ist immer ein Risiko. Sie können versuchen, einen Komponententest zu entwickeln, um zu erfassen, was Sie ändern, bevor Sie dies tun. Dies wird jedoch vom Management möglicherweise nicht zugelassen (wahrscheinlich nicht oder wäre dies bereits der Fall). Und Komponententests sind keine Zauberei, sie können immer noch Dinge übersehen, Sie können immer noch Fehler einführen. Die Chancen stehen gut, dass sie nicht refactoring sind. Dies geht auf (1) zurück. Sie versuchen wahrscheinlich, sich auf das zu korrigierende Problem zu konzentrieren, was bedeutet, dass sie schneller auf den Punkt kommen, das Gesamtbild jedoch verfehlen und länger brauchen, um das nächste Problem in diesem Tausend-Zeilen-Durcheinander zu beheben.

  3. Erstellen Sie, was Sie brauchen, um die Arbeit zu erledigen. Wenn das heißt, ein Flussdiagramm oder eine andere Dokumentation zu erstellen, dann tun Sie dies. Ob sie es brauchen oder nicht und ob sie es benutzen oder nicht, nachdem Sie es erstellt haben, ist unerheblich.

  4. Unterbrechungen verlangsamen alle. Wenn Sie sich darauf konzentrieren, werden Sie nur langsamer. Akzeptiere es und versuche so schnell wie möglich wieder in die Rille zu kommen.

  5. Wenn Sie zwei oder drei Fehler im Auge behalten, ist das nicht schlecht, drei oder vier wären besser, aber anstatt zu versuchen, das zu verbessern, geben Sie auf und schreiben Sie es auf. Ein Stück Papier, Whiteboard, TFS, Excel, Word oder Notizblock - schreiben Sie es einfach auf. Ich wette, das machen deine Kollegen. Entweder das oder die Dinge nach dem Zufallsprinzip reparieren.

Beim Programmieren geht es nicht um ein perfektes Gedächtnis, und es geht nicht darum, Ablenkungen ignorieren zu können. Wenn Sie sich darauf konzentrieren, handelt es sich nur um Ablenkungen, die Sie erzeugen.


1

CAVEAT / UPDATE: Nachdem ich die folgende Antwort gelesen hatte, fühlte ich mich vielleicht etwas zu hart. Nicht meine Absicht, die von Ihnen beschriebene Umgebung ist schrecklich und würde die meisten Menschen treffen (wahrscheinlich leiden sogar die besseren Programmierer darunter, aber sie sind "besser" im Vergleich zu anderen in derselben Umgebung). Meine Antwort ist nur eine punktuelle Reflexion in Ihren Fragen, vorausgesetzt, dass sich die Umgebung nicht ändert (auch wenn sie sich ändern sollte).

Völlig positive Antwort:

1) Das hängt von der Erfahrung in der Technologie, der Wartung der Anwendung (mehr, wenn sie schlecht konzipiert ist) und sogar in bestimmten Teilen der Anwendung ab. Hängt auch von deinen Konzentrationsproblemen ab (Nummer 4)

2) Es ist dasselbe wie Nummer 1, verwendet jedoch eine andere Metrik. Gleiche Antwort.

3) Notizblock und Stift. Oder ein Word- / Excel-Dokument. Nicht so schwer zu lösen.

4) das ist eine persönliche Frage der Konzentration. Ich bin mir nicht sicher, ob es möglich ist, es selbst zu verbessern.

5) Verwendung eines Ticketsystems oder nicht sollte nicht von den Programmierern, sondern vom Projektmanager entschieden werden. Fragen Sie nach seiner Meinung / präsentieren Sie Ihre Punkte. Wenn er dagegen ist, noch einmal Notizblock und Stift.


Ich würde argumentieren, dass mehrfache Unterbrechungen eine schlechte Arbeitsumgebung sind. Wenn es ein lautes Geräusch gibt, sollte das behoben werden. Lernen Sie, E-Mails auszublenden. Nehmen Sie sich zum Beispiel 10 Minuten Zeit, wenn Sie zur Arbeit gehen, nach dem Mittagessen und bevor Sie Ihre E-Mails abrufen. Vermeiden Sie es, sie den ganzen Tag über zu überprüfen, es sei denn, Sie wissen, dass etwas für Sie kritisch ist.
mgw854

@ mgw854 Ich habe meine Antwort noch einmal gelesen und bin damit einverstanden, dass es etwas härter wirkt, als ich beabsichtigt hatte. Ich meine zu keinem Zeitpunkt, dass die Probleme nur die Schuld des OP sind und die Umwelt (sowohl physisch als auch organisatorisch) schrecklich erscheint. Selbst für die besten Programmierer dort bin ich sicher, dass diese Probleme die Leistung stark beeinträchtigen. Ich habe nur Wege aufgezeigt, um die "Lücke" zu verringern, die das OP bei anderen Programmierern in derselben Umgebung zu haben scheint.
SJuan76

0

Ich habe so eine Situation schon einmal erlebt und aufgrund dieser Erfahrung kann ich sagen, dass Ihr Problem nicht mit dem Gedächtnis zusammenhängt und dass es etwas in Ihrem Kopf gibt (ganz sicher nicht mit der Arbeit), das Sie stressig macht und Sie davon abhält, sich auf 100 zu konzentrieren % auf die anstehende Aufgabe.

Der erste Schritt besteht also darin, den Kopf von diesen Dingen zu befreien, wenn Sie an Ihrem Schreibtisch sitzen.

Dieser Stress kann auch dadurch erhöht werden, dass Sie das Gefühl haben, in Bezug auf die Produktivität in Verzug zu sein. Versuchen Sie also, mit Ihren Mitarbeitern zu sprechen, und fragen Sie sie nach Tipps für ihre Herangehensweisen beim Refactoring.

Schließlich schämen Sie sich nicht, wenn Sie die Probleme aufschreiben müssen, die Sie gelöst haben und / oder gerade arbeiten (es muss kein ausgeklügeltes Fehlerverfolgungssystem sein). Es ist besser, sich auf etwas zu verlassen, weil Sie es lesen Ihre Notizen, als es von der Spitze Ihres Kopfes zu sagen, während nicht 100% sicher davon

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.