Mit fremdem Code vertraut machen
Wenn die Codebasis klein genug ist, können Sie sie sofort lesen. Irgendwann werden die Teile zusammenfallen.
In diesem Szenario variiert "klein genug", es wird mit zunehmender Erfahrung größer. Sie werden auch hier von "Cheaten" profitieren: Sie können Teile des Codes überspringen, die Sie aus Erfahrung als "Implementierungsmuster X" kennen.
Sie können es hilfreich finden, kleine Umwege zu machen, während Sie den Code lesen, z. indem du eine Funktion nachschaust, wie du sie genannt hast, dann verbringe ein wenig damit, einen Blick darauf zu werfen. Bleiben Sie nicht auf diesen Umwegen, bis Sie verstehen, was die aufgerufene Funktion tut; Das ist nicht der Punkt, und es wird dir das Gefühl geben, dass du herumspringst und keine Fortschritte machst. Das Ziel beim Umgehen ist es, zu verstehen, was die neue Funktion in weniger als einer halben Minute macht. Wenn Sie nicht können, bedeutet dies, dass die Funktion zu kompliziert ist. Brechen Sie den Umweg ab und akzeptieren Sie die Tatsache, dass Sie Ihre "aktuelle" Funktion ohne diese zusätzliche Hilfe verstehen müssen.
Wenn die Codebasis zu groß ist, können Sie sie nicht einfach lesen. In diesem Fall können Sie beginnen, indem Sie die logischen Komponenten des Programms auf einer hohen Abstraktionsebene identifizieren. Ihr Ziel besteht darin, Typen (Klassen) im Quellcode mit diesen Komponenten zu verknüpfen und dann die Rolle zu identifizieren, die jede Klasse in ihrer Komponente spielt. Es gibt Klassen, die intern in einer Komponente verwendet werden, und Klassen, die für die Kommunikation mit anderen Komponenten oder Frameworks verwendet werden. Teilen und erobern Sie hier: Teilen Sie zuerst die Klassen in verwandte Gruppen auf, dann konzentrieren Sie sich auf eine Gruppe und verstehen Sie, wie ihre Teile zusammenpassen.
Um Ihnen bei dieser Aufgabe zu helfen, können Sie die Struktur des Quellcodes als Richtlinie verwenden (nicht als das ultimative Gesetz; es kann aufgrund menschlicher Fehler manchmal irreführend sein). Sie können auch Tools wie "Suchen nach Verwendungen" einer Funktion oder eines Typs verwenden, um zu sehen, wo auf sie verwiesen wird. Erneut versuchen Sie nicht vollständig zu verdauen, was die IDE Ihnen sagt, wenn Sie es nicht schnell genug machen können. Wenn das passiert, bedeutet das, dass Sie ein kompliziertes Stück Metall aus einer Maschine genommen haben, die Sie nicht ganz verstehen. Lege es zurück und versuche etwas anderes, bis du etwas gefunden hast, das du verstehen kannst.
Fremdsprachlichen Code debuggen
Das ist eine ganz andere Sache. Ich werde ein wenig schummeln, indem ich sage, dass, bis Sie Tonnen von Erfahrung gesammelt haben, es keine Möglichkeit gibt, Code erfolgreich zu debuggen, solange es Ihnen fremd ist.
Das erste, was ich versuche und tue, ist herauszufinden, was der Zweck des Codes auf einer hohen Ebene ist - die Art des Details ist irrelevant, bis Sie ein wenig über die Problemdomäne verstehen. Eine gute Möglichkeit, das herauszufinden, ist, die Namen der Bezeichner zu betrachten, aber es ist normalerweise noch hilfreicher, den Kontext zu betrachten - woher haben Sie diesen Code? Wer schrieb es? War es Teil einer Anwendung mit einem bekannten Zweck? Sobald Sie herausgefunden haben, was der Code tun soll, können Sie eine Kopie erstellen und neu formatieren, um es für Sie einfacher zu machen, sie zu verstehen. Das kann das Ändern der Namen von Bezeichnern, wo nötig, das Aussortieren von merkwürdigen Einrückungen, das Hinzufügen von Leerzeichen, um Dinge aufzulösen, das Kommentieren von Bits, sobald du herausgefunden hast, was sie tun usw., sein. Das ist ein Anfang, auf jeden Fall ... :)
Auch wenn Sie einmal den Zweck des Codes herausgefunden haben, können Sie durch einen Debugger mit einigen einfachen Beispielen manchmal auch eine bessere Vorstellung davon bekommen, was auf FWIW läuft ...
Ich habe erkannt, dass meine größte Schwäche als Programmierschüler meine schlechte Fähigkeit ist, den Code anderer zu verstehen.
Ich habe keinerlei Probleme mit dem Textbuch-Code oder dem klar kommentierten Code, aber wenn ich ein Programm von ein paar hundert Zeilen mit einem Dutzend verschiedener Funktionen und ohne Kommentare bekomme, fällt es mir sehr schwer, überhaupt zu beginnen .
Ich weiß, dass ich mit dieser Art von Code wahrscheinlich eher in meiner Karriere konfrontiert werde, und ich denke, dass schlechte Codeverständnisfähigkeiten für mich ein großes Hindernis sein werden, worauf ich mich konzentrieren möchte Verbesserung meiner Fähigkeiten in diesem Bereich.
Welche Tools / Techniken haben dazu beigetragen, das Code-Verständnis in Ihrer Erfahrung zu verbessern?
Wie tendieren Sie dazu, unbekannten, unkommentierten Code anzuwenden? Warum? Was ist mit deiner Technik, findest du hilfreich?
Danke
Ich finde, dass das Zeichnen der Call-Graph- und Vererbungsbäume oft für mich funktioniert. Sie können jedes Werkzeug verwenden, das Ihnen zur Verfügung steht. Ich benutze normalerweise nur ein Whiteboard.
Normalerweise sind die Code-Einheiten / -Funktionen einfach genug, um sie selbst zu verstehen, und ich kann deutlich sehen, wie jede Einheit funktioniert, aber ich habe oft Schwierigkeiten, das größere Bild zu sehen, und dort passiert der Zusammenbruch und ich bekomme das "Ich bin verloren" Gefühl.
Fange klein an. Sagen Sie zu sich selbst: "Ich möchte x erreichen, also wie wird es im Code gemacht?" x ist eine kleine Operation, die Sie verfolgen können. Verfolgen Sie dann den Code und machen Sie etwas Visuelles, auf das Sie nach dem Trace zurückblicken können.
Wählen Sie dann ein anderes x und wiederholen Sie den Vorgang. Sie sollten jedes Mal ein besseres Gefühl für den Code bekommen.
Wenn es Zeit ist, etwas zu implementieren, wählen Sie etwas aus, das ähnlich (aber nicht fast identisch) zu einem der Dinge ist, die Sie verfolgt haben. Auf diese Weise gelangen Sie von einem Trace-Level-Verständnis zu einem Verständnis auf Implementierungsebene.
Es hilft auch, mit der Person zu sprechen, die den Code das erste Mal geschrieben hat.
Ich verstehe deine Frustration, aber bedenke, dass da draußen viel schlechter Code ist, also halte dein Kinn hoch. nicht alle Codes sind schlecht:)
Dies ist der Prozess, dem ich folge:
Viel Glück
Verstehen ist ein großartiges Werkzeug zur Code-Analyse. Es war weit verbreitet bei meinem vorherigen Arbeitgeber (L-3), also habe ich es gekauft, wo ich derzeit arbeite.