Was sind gute Techniken, um Ihren Platz im Code zu behalten?


21

Ich verstehe, Lesezeichen zu verwenden, um sich an einen einzelnen Punkt in Ihrem Code zu erinnern. Wie kann man jedoch den Fluss des Codes verfolgen, den sie untersuchen? ZB: mehrere Lesezeichen und die Reihenfolge, in der sie erstellt wurden.

Beispiel:

  1. Fehlerbericht: "Kollisionen funktionieren nicht an den Ecken von Wänden"

    1. Die Reproduktion des Fehlers führt dazu, dass bestimmte Polygone nicht kollidieren.
    2. Der Kollisionscode wurde von einem nicht verfügbaren Entwickler geschrieben. Die Untersuchung sieht also so aus:

Schema eines Flusses

Im Verlauf der Untersuchung, vor allem , wenn nicht-Code Elemente wie Google bewerten, kann man vernünftigerweise erwarten, ihren Platz im Code zu verlieren ( Habe ich bereits an diesem Codepfad geschaut? Oder Welchen Codepfad untersuchte ich? Es mehrere ist , dass Blei zu dieser Funktion etc). Das Gleiche gilt für unvermeidbare Unterbrechungen (Boss: Ich brauche JETZT [langwierigen, sinnlosen Bericht] usw.)

Es wäre nützlich, eine Ressource mit Techniken oder Werkzeugen zur Verfügung zu haben, mit denen man seinen Platz im Code nachverfolgen kann.


Bearbeiten : Das obige Beispiel ist als mögliche Illustration gedacht, nicht als tatsächliches Problem, das beantwortet werden muss.

Eine andere Möglichkeit, diese Frage zu formulieren, ist:

Wie behalten Sie beim Erlernen eines neuen Systems den Überblick, wo Sie sich mit dem Erlernen des Codes beschäftigen? Es geht nicht darum zu verstehen, warum der Code das tut, was er tut (wofür Kommentare sein sollten), sondern darum , wie er es tut (was nur durch Lesen des Codes gelernt wird, nicht durch Kommentare).

Antworten:


14

Die Bubbles-Schnittstelle versucht, dieses Problem zu lösen, indem eine Reihe von Codebits gleichzeitig angezeigt werden. (Sie sind mit Ihrem Browser für das Googeln fest). Es sieht toll aus, aber ich habe es nicht ausprobiert. Diese Version der Idee ist eine Visual Studio-Implementierung für Visual Studio Ultimate.


+1, da dies eine praktische und sofort einsatzbereite Lösung für das Problem ist. (Es ist auch nur ein bisschen genial!)
Jess Telford

Eines der Dinge, die ich vor Jahren in meinem Kopf erfunden habe, nur um herauszufinden, dass es bereits existiert :( +1
phresnel

ähnelt anscheinend dem, was Sie in Squeak und anderen Smalltalks tun können, in denen Sie neue Fenster zum Durchsuchen von Code öffnen und zu den gewünschten Methoden / Klassen navigieren können.
Rudolf Olah

ziemlich genial ... Ich hatte eine kleine Spielzeug-App erstellt, die auf ähnliche Weise eine Visualisierung Ihres Internetbrowsings bietet (wenn Sie auf Links klicken, wird ein neuer Knoten hinzugefügt und mit dem Ursprung verknüpft). Ich hätte nie gedacht, das auf die Code-Visualisierung anzuwenden.
Michael Brown

12

Abgesehen von all den großartigen erwähnten Technologien habe ich festgestellt, dass das altmodische A3-Stück Papier eine hervorragende Hilfe bei diesen Problemen ist. Schreiben Sie Ihre Ideen auf und organisieren Sie sie im Mindmap-Stil.


Yep Yep. Beste Antwort bei weitem.
Patrick Hughes

10

Sowohl mein Editor als auch mein Debugger können zu einer Funktionsdefinition springen und haben eine mehrstufige "Zurück" -Schaltfläche wie ein Webbrowser, um dorthin zurückzukehren, wo ich vorher war. Das reicht normalerweise aus, um einen komplexen Debugging-Ablauf zu verfolgen. Es ist auch hilfreich, eine Quellcodeverwaltung zu haben, mit der Sie eine Menge festlegen können . Das gibt mir eine Commit-Nachricht, in der erklärt wird, warum ich etwas versuche, und eine schnelle Möglichkeit, die Änderung rückgängig zu machen, wenn sie nicht funktioniert. Abgesehen davon füllt ein einfaches Whiteboard, an dem potenzielle und erkundete Leads aufgelistet werden, die verbleibenden Lücken für mich.


1
Sehr praktisch. Ich hatte nicht daran gedacht, die Quellcodeverwaltung auf diese Weise zu verwenden.
Jess Telford

Welcher Editor und welcher Debugger?
John Gaines Jr.

MULTI-Debugger von Vim und Green Hill.
Karl Bielefeldt

In Visual Studio ist es STRG + -, um zurück zu gehen, und STRG + =, um vorwärts zu gehen.
VitalyB

Eclipse kann die Definition des aktuellen Symbols unter dem Cursor in einem separaten Bereich anzeigen.

3

Mehrere Möglichkeiten, die ich verfolge:

  • Schreib es auf . In zwei Minuten ein Meeting? Schreiben Sie auf, was Sie getan haben und wo. Ich habe immer Stift und Papier neben mir, um Dinge aufzuschreiben, während ich programmiere.
  • Lesezeichen . Ich habe 10 nummerierte Lesezeichen, die ich setzen kann.
  • Stacktrace . Sie können ganz einfach die gesamte Code-Hierarchie anzeigen, die Sie durchlaufen haben. Mit meinem Editor kann ich auch den Stack-Trace kopieren und speichern. Wenn ich das nächste Mal meinen Editor öffne, kann ich den Stacktrace für eine schnelle Navigation laden.
  • Editor-Navigation . Gehen Sie zum Basismitglied, gehen Sie zum Erben, finden Sie Verwendungen, gehen Sie zum Verweis, ...

1

Ich benutze die einfache Lösung - schließe nie etwas, bis ich mit der Aufgabe fertig bin. Das bedeutet, dass normalerweise eines der rund 50 geöffneten Fenster / Registerkarten etwas enthält, das mich daran erinnert, was ich dachte, als ich darauf zurückkam.


Das Problem bei diesem Ansatz ist in der Regel, wie Sie mehrere gleichzeitige Gedanken- / Forschungszweige verfolgen.
Jess Telford

1
Ich halte das nicht für ein Problem - sie sind alle auf die gleiche Weise offen, und es spielt keine Rolle, zu welchem ​​Zweig ich zurückkehre. Dies funktioniert besser für den Webbrowser als für die IDE, aber das kann nur daran liegen, dass meine aktuelle Codebasis nicht wirklich konzeptionell organisiert ist.
Tom Clarkson

1

Holen Sie sich ein echtes Entwicklertool / IDE, was immer Sie möchten. Vi, Emacs, Eclipse oder was auch immer (Die Auswahl ist so groß wie die Argumente, über die am besten ist, aber das ist ein weiteres Problem), und lernen, es richtig zu verwenden . Verwenden Sie es nicht, wie es zu viele tun, wie Notepad mit hervorgehobener Syntax. Lernen Sie, wie man Hotkeys verwendet, und verlassen Sie sich nicht auf die Maus, um allgemeine Aktionen auszuführen (es ist zu langsam). Ein großer Bildschirm (mindestens 1920 x 1200) ist von Vorteil.

Mein Entwicklertool hat benannte (langsamere, aber nützliche Namen machen sie dauerhaft) und unbenannte (schnelles Einfügen und Löschen) Lesezeichen, vorwärts- und rückwärtssuchen und Referenzsuche in einem, Aufgaben- und Entwicklernotizen (persönlich und gruppenweit), die an a angehängt sind bestimmte Zeile des Quellcodes. Es macht jede Sprache unter der Sonne, ohne noch ein Plugin installieren zu müssen.

Ich arbeite auf einer Codebasis, die aus einem Dutzend oder mehr 1 Million plus SLOC-Modulen besteht und ein halbes Dutzend Sprachen verwendet. Natürlich arbeite ich nicht an allen gleichzeitig, sondern konzentriere mich auf kleine Teile von einem oder zwei, aber ich kann mit ein paar Aktionen zu jedem Punkt im Code navigieren, der für das, was ich tue, relevant ist.


Ich bin damit einverstanden, dass eine richtige IDE am besten ist. Ich benutze die großartigen Markierungen und Tag-Jumping-Funktionen von vim. Beide haben jedoch Einschränkungen: Marken sind pufferlokal und Tag-Verläufe sind linear. Für komplexe Situationen reicht dies immer noch nicht aus (daher diese Frage stellen).
Jess Telford

1
Ich bin ein reifer Vi, habe aber gesehen, was in den Händen von Power-Usern getan werden kann, die darauf vorbereitet sind, ein paar kurze Skripte zu schreiben, einige Zeit damit zu verbringen, die Verwendung von VIM zu erlernen oder zu einem Tool zu wechseln, in dem Funktionen eingerichtet sind Ein Weg, der für Sie funktioniert und Zeit damit verbracht hat, das zu lernen. Das ist mein Punkt. Lernen Sie Werkzeuge. Ein guter Handwerker gibt seinen Werkzeugen keine Schuld, ein guter Programmierer auch nicht.
Mattnz

Einverstanden. Ich bin ein fortgeschrittener Anfänger mit vim (kann die meiste Zeit ohne nachzudenken verwenden, habe aber kaum die Oberfläche zerkratzt), daher bin ich sicher, dass es Dinge gibt, die ich nicht kenne. Trotzdem stelle ich mir nicht vor, dass es möglich ist, irgendetwas wie die Antwort von PSR in vi (m) zu tun (zumindest nicht aus meiner Forschung).
Jess Telford

@ Jess: Marken sind nicht unbedingt lokal puffern. Markierungen mit Großbuchstaben sind global.
Dave Kirby

@ DaveKirby Awesome - Ich liebe es, neue Dinge über vim zu lernen: D
Jess Telford

1

Mit Visual Studio können Sie in einer Debugsitzung das Fenster "Aufrufliste" (Sie können es in Debug / Windows / Call Stackoder mit der Verknüpfung aktivieren) verwenden, um den Codefluss Ctrl+Alt+czu verfolgen.


1
Wie bei den meisten Debuggern. Die Frage richtet sich eher nach dem manuellen Durchsuchen Ihres Codes, einschließlich Nachforschungen außerhalb Ihrer Codebasis.
Jess Telford

1

Ich bin überrascht, dass niemand die vielen Tools erwähnt hat, mit denen Diagramme mit Anrufgrafiken erstellt werden können. Ich habe gefunden, dass Sauerstoff eine große Hilfe ist. Sie müssen sich nicht einmal für die Verwendung von Doxygen in Ihrem gesamten Programm verpflichten, sondern können einfach die Funktionen markieren, die Sie für die Verfolgung interessieren.


0

Ich benutze den Org-Modus für Emacs, ein Tool, das alles umreißt. Damit kann ich eine Gliederung schreiben, die den Aufrufstapel des Codes nachahmt und direkte Links zum Quellcode selbst enthält (via org-store-link). Sie können erläuternden Text, Links zu Webseiten usw. einfügen (z. B. wenn Sie nach magischen Zahlen googeln).

Es ist nicht perfekt. Zum Beispiel hat die Gliederungsstruktur keine Ahnung, dass sie eine Ebene höher gehen soll, daher ist es schwierig, einen Ausführungspfad zu verfolgen, anstatt nur einen Stapel. Aber es ist das zweitbeste, was ich für Diagramme auf Papier gefunden habe.

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.