[RUBY] Technologie zum Lesen des Quellcodes (Cheet Sheet)

Nach dem, was ich höre, ist 80% der Arbeit Zeit, den Quellcode zu lesen. Trotz der Skala von 80% besteht jedoch kein Eindruck davon, dass eine aktive Diskussion über das Lesen des Quellcodes stattfindet, und es gibt auch Websites und Bücher, die zusammenfassen, wie der Quellcode systematisch und in der richtigen Reihenfolge gelesen wird. Wenige. Obwohl ich mich fragte, hatte ich den Quellcode schon lange gelesen, indem ich mich auf das Lesen mit einem Debugger, den Inhalt von lesbarem Code und Webartikel bezog.

Die Informationen über die Quellcode-Lesemethode waren jedoch in der Memo-App verstreut, und ich hatte das Gefühl, dass die Quellcode-Lesetechnologie nicht für immer systematisch erworben wurde. Aus diesem Grund haben wir in diesem Dokument einen Spickzettel zusammengestellt, in dem erläutert wird, wie der Quellcode aus verschiedenen Dokumenten unabhängig von Medien wie Büchern, Webartikeln und YouTube effizient gelesen werden kann. Der Zweck der Erstellung eines Spickzettel besteht darin, "das Zurückblicken und Wiederholen für lange Zeit zu erleichtern" und "das Wissen über das Lesen von Quellcode systematisch zu organisieren und das Abrufen von Informationen durch Zentralisierung von Informationen zu erleichtern". Gibt es. Die in diesem Artikel angenommene Sprache ist Ruby, die mir vertraut ist.

2 Hierarchie beim Lesen von Code

Das Lesen des Codes hat die folgenden Ebenen.

sourcecode-reading-knowledge-group.png

Stellen Sie die Seriennummern wie folgt ein.

  1. Jede Zeile als Quellcode geschrieben
  2. Grundlegende Grammatik
  3. Bibliotheksrahmen
  4. Entwurfsmuster, Datenstruktur / Algorithmus, Paradigma / Prinzip
  5. IDE (Entwicklungstool), Debugger (Debug-Tool), Ausführungsumgebung
  6. Teamregeln
  7. Geschäftskenntnisse / Geschäftsanforderungen / nicht funktionale Anforderungen (was Sie erreichen möchten)

Die Lesung im Bild "Wissensgruppe, die den Vorgang des Codelesens darstellt" ist 1 → 7 in Bezug auf die Seriennummer. Das Lesen von den Details zum Ganzen wird als Codelesen bezeichnet.

Dies ist jedoch eine Lesemethode, wenn Sie das Programm bis zu einem gewissen Grad verstanden haben und im Falle eines Fehlers oder am ersten Tag der Projektteilnahme 7 → 5 → 6 → 4 → 3 → 2 → 1 (ich lese in dieser Reihenfolge) Ich denke jedoch, dass das Lesen vom Ganzen bis zu den Details wie (Stil ist kostenlos) geeignet ist, das Programm zu erfassen. Daher werden wir in diesem Dokument in der Reihenfolge beschreiben, in der ein Fehler angenommen oder der Quellcode am ersten Tag der Projektteilnahme gelesen wird.

Abgesehen davon denke ich, dass die "Wissensgruppe, die den Akt des Codelesens ausmacht", eine hervorragende Zahl ist, da die Methode zum Lesen des Quellcodes geschichtet und klassifiziert ist.

Anschließend werde ich die Technologie zum Lesen des Quellcodes aus dem nächsten Artikel ausführlich erläutern.

3 Zweckeinstellung

Das zu lesende Programm wurde festgelegt. Was tust du jetzt? Wenn Sie nur ohne Richtlinie von main lesen, werden Sie nicht verstehen, was der Code zu sagen versucht. Definieren Sie zunächst klar den Zweck des Lesens des Codes und konzentrieren Sie sich darauf. Auch wenn Sie alles lesen müssen, teilen Sie den Pfad und lesen Sie jeden Teil. (* 1)

** ⑦ Geschäftskenntnisse / Geschäftsanforderungen / nicht funktionale Anforderungen (was Sie erreichen möchten) ** im obigen Bild entsprechen diesem. "Um den Fehler zu beheben" und "Um das Projekt zu verstehen" sind anwendbar, und insbesondere "Ich möchte das Problem lösen, weil es zu NoMethodError wurde" und "Ich möchte die gleiche Funktion implementieren" werden als Zweck festgelegt.

Übrigens teilt der Autor das durch Arbeit und Selbststudium gewonnene Wissen täglich in funktionale und nicht funktionale Anforderungen ein und speichert sie in einem Spickzettelformat, um den Zweck schnell zu erreichen. Ich möchte eine Suchfunktion erstellen! Wenn Sie () denken, beziehen Sie sich auf die funktionale Anforderung this und möchten Sie die Spalte ändern! Wenn Sie denken, beziehen Sie sich auf die nicht funktionale Anforderung this. Wenn Sie einen Fehler, von dem Sie einmal abhängig sind, im Spickzettelformat speichern, können Sie ohne Probleme zweimal auf die URL verweisen, wenn Sie auf denselben Fehler stoßen. Dies führt auch zu psychischer Stabilität.

Außerdem verwende ich vorerst einen echten iOS-Notizblock und InkDrop, um Spickzettel zu erstellen, und bei der Ausgabe nach außen verwende ich Blogs und Qiita. Es ist sehr gut, dass der Quellcode, der gut zu lesen scheint, wie z. B. OSS, wiederverwendet werden kann, indem er einzeln in GitHub gespeichert wird.

Beispiel eines Spickzettel

4 Dynamische Analyse

Grob gesagt können Analysemethoden in statische und dynamische Methoden unterteilt werden. Die statische Methode besteht darin, den Quellcode selbst zu lesen. Die dynamische Methode besteht darin, die Bewegung zur Laufzeit mit einem Debugger oder dergleichen zu verfolgen. Grundsätzlich ist es besser, die Analyse mit einer dynamischen Analyse zu beginnen. Die statische Analyse sagt mehr oder weniger das Verhalten eines Programms voraus. Auf der anderen Seite ist es eine Tatsache, durch dynamische Analyse zu sehen. Es ist einfacher, Anweisungen zu erhalten und Fehler zu reduzieren, wenn Sie zuerst die Fakten betrachten. Ist es ähnlich, ein Profil vor der Optimierung zu erstellen? Es kann gesagt werden, dass der Fall zuerst von der Szene gelöst wird. (* 1)

Es scheint. Daher werden wir anhand der dynamischen Methode erklären.

Darüber hinaus wird in diesem Artikel eine dynamische Analyse durchgeführt, um "Fehler zu lösen", aber der Quellcode wird auch dynamisch analysiert, um "das Projekt zu verstehen". Bitte konvertieren Sie den Teil "Wenn ein Fehler auftritt" in "Wenn Sie den Quellcode finden, den Sie im Projekt interessieren".

4.1 Verwenden Sie den Debugger

Ich denke, dass Webprogrammierung ist, wenn der Client eine Anfrage mit Parametern sendet, diese auf der Serverseite verarbeitet und auf den Client antwortet. Manchmal wird der Wert des Parameters aus der Datenbank als Referenz genommen, auf der Serverseite verarbeitet und auf den Client geantwortet. Mit anderen Worten, Webprogrammierung ist ein Bucket-Relay-Turnier und ein Relay-Race-Turnier. Das Wasser im Eimer und die Taski wurden nur Variablen. Und der Fehler tritt auf, weil der Wert der Variablen von der Erwartung abweicht oder die Regel des Turniers nicht logisch ist.

Der Debugger analysiert, welcher Punkt im Fluss des Schaufelrelais einen Fehler verursacht. Der Ort des Fehlers, der dem in "1 Festlegen des Zwecks" oben festgelegten Zweck entspricht, wird über den Browser, die URL und die Rückverfolgung ermittelt, und der entsprechende Ordner und die entsprechende Datei werden analog aus der Projektdatei unter Verwendung des angegebenen Namens durchsucht. Machen. Auf diese Weise werden der Dateiname, der Funktionsname, der Variablenname, der Typname und der Mitgliedsname angegeben, die so aussehen, wie sie aussehen, und an einer bestimmten Stelle wird ein Debugger eingefügt, um den Variablenfluss zu erfassen.

Durch die Verwendung eines Debuggers kann ein Programm, das im Gehirn als statische Zeicheninformation erkannt wurde, im Gehirn sofort als dynamische Landschaft erkannt werden. Persönlich fühle ich etwas in der Nähe des Eindrucks, als ein Bild vor 80 Jahren plötzlich zu einem Film wurde und sich zu bewegen begann. Die rechte Gehirnhälfte und die räumliche Wahrnehmung können verwendet werden, indem das Programm als Bild erfasst wird. Da der Verarbeitungsfluss in der rechten Gehirnhälfte mit einer großen Speicherkapazität gespeichert werden kann, kann der Quellcode in der freien linken Gehirnhälfte analysiert werden.

Wenn es sich um eine IDE handelt, verwenden Sie den Debugger, der in Eclipse- oder JetBrain-IDEs integriert ist. Wenn nicht, sollte Ruby eine Drittanbieter-Bibliothek wie byebug oder pry verwenden.

4.2 Notieren Sie den Prozessablauf des Quellcodes auf Japanisch oder in einer Abbildung.

In 4.1 habe ich den Back Trace gelesen und den Debugger verwendet, um den Verarbeitungsablauf des Quellcodes zu verstehen. Nach dem Erfassen des Verarbeitungsablaufs besteht der nächste Schritt darin, den erfassten Inhalt auf Japanisch oder in einer Abbildung aufzuschreiben.

Warum "den Prozessablauf des Quellcodes durch Japanisch ersetzen und eine Notiz machen"? Es gibt zwei Gründe.

Der erste ist "weil der Quellcode abstrakt ist".

Ich denke, dass das Entschlüsseln des Quellcodes darin besteht, das abstrakte Konzept in das konkrete Konzept umzusetzen. Ein Genie oder ein Ingenieur mit langjähriger Berufserfahrung kann die Abstraktion so verstehen und nutzen, aber ich bin ein gewöhnlicher Mensch mit wenig Berufserfahrung in der Programmierung. Daher denke ich, dass die Einbeziehung eines abstrakten Konzepts in ein konkretes Konzept und das Notieren auf Japanisch ein wichtiger Faktor für die Arbeitseffizienz, das Lernen und die externe Speicherung des Denkens ist. Daher ist es wichtig, "den Verarbeitungsablauf des Quellcodes durch Japanisch zu ersetzen und eine Notiz zu machen".

Der zweite ist "weil der Quellcode in Englisch geschrieben ist".

Zunächst einmal sind wir Japaner. Ich benutze Japanisch für 24 Stunden. Was auf Japanisch geschrieben ist, kann in 0 Sekunden verstanden werden und das Bild ist leicht zu verstehen. Leider ist der Quellcode in Englisch. Ich bin nicht mit Englisch vertraut, das nicht meine Muttersprache ist. Selbst wenn Sie Giraffe auf Englisch sagen, können Sie es nicht sofort verstehen, aber wenn Sie Kirin auf Japanisch sagen, können Sie sich in 0 Sekunden ein Tier Kirin in Ihrem Kopf vorstellen. Mit anderen Worten, die Bedeutung von Wörtern, die auf Englisch geschrieben sind, kann nicht in 0 Sekunden verstanden werden, und das Bildgedächtnis ist schwieriger als auf Japanisch. Daher ist es wichtig, den Fluss des abstrakten Quellcodes in englischer Sprache in einem Memo auf Japanisch oder in einem Diagramm zu beschreiben, um die Arbeit zu beschleunigen.

Wenn Sie den Quellcode so verstehen möchten, wie er auf Englisch ist, müssen Sie sich bewusst angewöhnen, Englisch auf Englisch zu verstehen und Ihr englisches Gehirn zu entwickeln. Ich denke jedoch, dass es wahrscheinlich eine beträchtliche Zeit dauern wird, um Englisch zu lernen. Besonders zum Schreiben. Da ich oft Programmieren und Marketing lerne, kann ich meine Ressourcen auch nicht auf Englisch verwenden. Daher ist es wichtig, sich zu beeilen, das in Englisch geschriebene Programm in Japanisch umzuwandeln und den Verarbeitungsablauf nacheinander aufzuschreiben und zu organisieren.

Aus den oben genannten Gründen ist es wichtig, den Verarbeitungsablauf des Quellcodes auf Japanisch oder in Zahlen zu beschreiben. Eigentlich habe ich die dritte Sache vorbereitet, "einen Punkt, an dem man den Prozessablauf aus der Vogelperspektive verstehen kann", aber ich habe die Beschreibung weggelassen, weil ich nicht wusste, wie man die detaillierten Sätze schreibt.

4.3 Überprüfen Sie das Verhalten des Fehlerteils

Ich konnte den Ort des Fehlers in 4.1 und den gesamten Verarbeitungsablauf in 4.2 erfassen.

Ich denke, dass das Debuggen ein Akt der Hypothesentestung ist, dass "bei einem bestimmten Prozess (Zeile) der Datenstatus so sein sollte".

Wenn Sie die Fehlermeldung lesen, können Sie sich einen Überblick darüber verschaffen, warum der Fehlerteil nicht funktioniert. Manchmal verstehen Sie jedoch nicht, warum er nicht funktioniert. In einem solchen Fall kann der Fehler mit der folgenden Methode behoben werden. In 3.3 [Einführung in Ruby für diejenigen, die Profis werden möchten](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE] % E6% 8C% 87% E3% 81% 99% E4% BA% BA% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AERuby% E5% 85% A5% E9 % 96% 80-% E8% A8% 80% E8% AA% 9E% E4% BB% 95% E6% A7% 98% E3% 81% 8B% E3% 82% 89% E3% 83% 86% E3% 82% B9% E3% 83% 88% E9% A7% 86% E5% 8B% 95% E9% 96% 8B% E7% 99% BA% E3% 83% BB% E3% 83% 87% E3% 83% 90% E3% 83% 83% E3% 82% B0% E6% 8A% 80% E6% B3% 95% E3% 81% BE% E3% 81% A7-Software-Design-plus% E3% 82% B7% Ich bezog mich auf Kapitel 11 von E3% 83% AA% E3% 83% BC% E3% 82% BA / dp / 4774193976). Da es sich um ein berühmtes Buch handelt, haben Sie es vielleicht schon einmal gehört, wenn Sie ein erfahrener Ruby-Benutzer sind. Es ist jedoch wichtig, um die grundlegende Grammatik von Knowledge "Wissensgruppe, die den Akt des Codelesens darstellt" zu unterdrücken. Wenn Sie also interessiert sind, lesen Sie es bitte. Ma ZEIT ZEIGEN.

4.3.1 Löse selbst

① Lesen Sie die Fehlermeldung

Durch Kopieren und googeln der Fehlermeldung werden die meisten Probleme gelöst.

② Lesen Sie die Rückspur

Grob gesagt kann die Rückverfolgung verwendet werden, um herauszufinden, wo eine Methode aufgerufen wurde, aus "Daten, die den Aufrufstatus der Methode darstellen". Wenn Sie von Schienen sprechen, verwenden Sie Application Trace.

③ Überprüfen Sie das Protokoll

Es scheint, dass einige Frameworks wie Rails-Ausgabeprotokolle.

④ Überprüfen Sie den Fortschritt des Programms

Überblick

Ist meine Vermutung und das tatsächliche Verarbeitungsverhalten korrekt? Ich möchte herausfinden, wo die Schätzung der Variablen und die tatsächliche Abweichung liegen.

Methode

  1. Überprüfen Sie die Variablen, indem Sie ein Druckdebug oder ein Logger-Debug ausführen
  2. Tippen Sie in die Methodenkette und überprüfen Sie die Variablen
  3. Erstellen Sie einen Haltepunkt und überprüfen Sie die Variablen mit dem Byebug- oder IDE-Standarddebugger

⑤ Probieren Sie es interaktiv aus.

Dies geschieht, wenn sich das Verhalten der Methode von dem unterscheidet, was Sie erwartet haben, oder wenn Sie das Verhalten der Bibliothek überprüfen möchten.

Methode

  1. Führen Sie einfachen Code mit irb aus
  2. Wenn der Fehler vom Framework abgeleitet ist, reproduzieren Sie den Fehlerteil mit einem Gerüst.

⑥ Lesen Sie den Code der Bibliothek

Wenn Sie wissen möchten, wie sich die externe Bibliothek verhält, oder wenn die externe Bibliothek aufgrund eines Versions-Upgrades usw. nicht funktioniert, müssen Sie den Code der Bibliothek aufrufen. Da Ruby eine Skriptsprache ist, sollten die zum Ausführen erforderlichen Bibliotheken als Ruby-Code zur Verfügung stehen. Der Rest kann mithilfe der source_location-Methode der Method-Klasse ermittelt werden, um den Speicherort der Bibliothek aus dem Projekt zu ermitteln. Wenn der Rückgabewert Null ist (in C-Sprache implementiert), handelt es sich häufig um eine Methode der Ruby-Standardbibliothek.

Außerdem eignet sich der Quellcode der Bibliothek häufig hervorragend als Quellcode. Wenn Sie also lernen, wie man ihn schreibt und in GitHub usw. speichert, können Sie ihn wiederverwenden und Ihre technischen Fähigkeiten verbessern.

⑦ Schreiben Sie den Testcode

verdienen

  1. Sparen Sie Zeit beim Debuggen
  2. Kann anstelle einer Dokumentation verwendet werden, die garantiert, dass die Logik der von Ihnen erstellten Programme nicht beschädigt wird
  3. Sie können proaktiv mit unerwarteten Fehlern umgehen, die von Ihren eigenen Gedanken nicht erkannt werden.

Methode

Siehe das Testframework für jede Sprache.

⑧ Halten Sie sich vom Computer fern

Auf die Toilette gehen, Getränke kaufen, spazieren gehen, Sport treiben, ein Nickerchen machen, Reis essen, ein Bad nehmen, früh ins Bett gehen.

Dies kann das Problem lösen, das aufgrund der offenen Sichtbarkeit mehrere Stunden lang aufgetreten ist.

4.3.2 Verlassen Sie sich auf andere

① Inhouse & offizielles Dokument

Da beide Hauptinformationen sind, denke ich, dass sie das Problem genau und sicher lösen können.

② Beachten Sie die Informationen im Internet

Siehe Qiita und persönliche Blogs.

③ Nach Problem suchen

Es scheint einen Problemverfolgungsdienst zu geben (ich habe es zuerst erfahren). Ich verstehe den ganzen Satz nicht auf Englisch, aber da es sich um ein offizielles Problem handelt, denke ich, dass Sie das Problem im Fehlerfall genau und sicher lösen können, wenn Sie es als Fehlerbehebungsoption in den Kopfwinkel stecken.

④ Fragen Sie jemanden (Arbeiter, Teratail)

Persönlich, wenn ich nach einer bestimmten Zeitspanne nicht verstehe, ist das momentan meine Grenze, daher möchte ich die Leute nach der Zusammenfassung der wichtigsten Punkte fragen. Es ist jedoch auch eine Methode des Widerstands, da es oft ein bitteres Gesicht ist.

5 Statische Analyse

5.1 Lesen Sie die Dokumentation

Lesen Sie den Quellcode überhaupt nicht

Ich denke, ich werde verlieren, wenn ich den Quellcode lese.

Referenzhandbücher, Dokumente Designbezogene Dokumente und Materialien Es sollte viele großartige Dinge geben, die in natürlicher Sprache geschrieben sind. Lesen Sie diese also zuerst.

Wenn Sie sich nicht auf sie verlassen können oder wenn sie nicht helfen, lesen Sie den Code. Wir betonen jedoch die Benennung von Kommentaren und Bezeichnern und versuchen zunächst, diese so aussagekräftig wie möglich zu interpretieren.

Falls keine Kommentare vorhanden sind und der Variablenname angemessen ist, gibt es keine Hilfe dafür. Sie können nichts anderes tun. Schauen wir uns also die Codelogik an.

Das Lesen ist mühsam, daher ist es das erste, was Sie nicht tun möchten, wenn Sie können. Überlegen Sie, wie Sie dies so weit wie möglich vermeiden können.

Wenn Sie ein Anfänger sind, können Sie aufgrund mangelnder Lesefähigkeit häufig keine Fortschritte erzielen. Wenn Sie nicht unter dem Druck stehen, sollten Sie sagen: "Sie sollten das Lesen Ihres Codes ein wenig verbessern."

Der Vorgänger sollte das Dokument verlassen haben, lesen Sie es also. https://teratail.com/questions/147782

Dies ähnelt auch dem vorherigen Abschnitt. Lassen Sie uns zunächst die technischen Daten kennen. Wenn es ein Dokument gibt, das die interne Struktur erklärt, möchte ich es auf jeden Fall sehen. Überprüfen Sie, ob Dateien mit Namen wie "HACKING" und "TOUR" vorhanden sind.

Es entspricht der ** ⑥ Teamregel ** in der "Wissensgruppe, die den Akt des Code-Lesens darstellt". Da sich der Vorgänger die Zeit genommen hat, das Dokument in natürlicher Sprache und in natürlichen Abbildungen zu belassen, ist es besser, das Dokument zuerst zu lesen, wenn es eines gibt.

5.2 Verständnis von Struktur und Design

Es entspricht ** ④ Entwurfsmuster, Datenstruktur / Algorithmus, Paradigma / Prinzip ** in "Wissensgruppe, die den Akt des Codelesens darstellt".

5.2.1 Lesen Sie die Verzeichnisstruktur

Sehen Sie, wie das Verzeichnis aufgeteilt ist. Verschaffen Sie sich einen Überblick darüber, wie das Programm aufgebaut ist und welche Teile es enthält. Sehen Sie, wie jedes Modul zusammenhängt.

5.2.2 Lesen Sie die Dateistruktur

Sehen Sie sich die in der Datei enthaltene Funktion (Name) an, um zu sehen, wie die Datei aufgeteilt ist. Der Dateiname ist wie ein unverminderter Kommentar und sollte notiert werden.

Außerdem möchte ich auf die Namensregeln für Funktionsnamen hinweisen. Die meisten C-Programme verwenden Präfixe für die externe Funktion, mit denen der Funktionstyp identifiziert werden kann. In einem objektorientierten Programm können die Funktionszugehörigkeitsinformationen auch im Präfix enthalten sein, was wertvolle Informationen sind. (Beispiel: rb_str_push)

5.2.3 Die Anrufbeziehung zwischen Funktionen verstehen

Die nächstwichtigste Information nach dem Funktionsnamen. Dies ist besonders wichtig, wenn Sie über eine große Anzahl von Funktionen verfügen. Ich möchte das Tool dafür verwenden. Es ist am besten, wenn Sie ein Werkzeug haben, mit dem Sie ein Diagramm erstellen können. Wenn Sie jedoch keines haben, müssen Sie nur die wichtigsten Teile zeichnen. Daher ist es eine gute Idee, das Diagramm selbst zu zeichnen. Sie müssen das Diagramm nicht näher erläutern, es reicht also aus, es grob auf das Trägerpapier zu zeichnen.

Übrigens wird ein Diagramm der Beziehung zwischen diesen Anrufen manchmal als Anrufdiagramm bezeichnet. Das statische Aufrufdiagramm ist ein Diagramm der Anrufbeziehungen, die im Quellcode so wie es ist geschrieben ist, und das dynamische Aufrufdiagramm ist ein Diagramm, das nur die Funktionen darstellt, die aufgerufen wurden, als es tatsächlich betrieben wurde. Grafik aufrufen).

Es scheint jedoch, dass sich in japanischen Sätzen "Anrufdiagramm" implizit auf ein dynamisches Anrufdiagramm bezieht und ein statisches Anrufdiagramm häufig als "Funktionsaufrufbeziehung" bezeichnet wird. Es ist jedoch einfacher zu verstehen, ob es mit statischen und dynamischen gepaart ist, daher nenne ich es dynamisches Anrufdiagramm / statisches Anrufdiagramm.

Ich denke, dass Call Graph eine der Funktionen von Eclipse war, als ich Java machte. Selbst wenn ich es in "Ruby Call Graph" oder "vscode Call Graph" nachschlage, wird es nicht angezeigt und ich kenne die Details nicht im Detail. Deshalb werde ich es vorerst in die Ecke meines Kopfes legen. Wenn Sie wissen wollen, suchen Sie bitte.

5.2.4 Entwurfsmuster

Ein Entwurfsmuster ist "ein Muster eines häufig verwendeten Entwurfs in der Objektorientierung" und "eine Lösung für ein ähnliches Problem, das häufig auftritt". Wenn Sie das Entwurfsmuster kennen, können Sie beim Lesen und Schreiben des Quellcodes die folgenden Vorteile genießen.

verdienen

  1. Hoch wiederverwendbares Programm
  2. Erstellen Sie effizient hochwertige Strukturen
  3. Hervorragende Wartbarkeit aufgrund hoher Lesbarkeit
  4. Wenn Sie das Entwurfsmuster kennen, können Sie die Entwurfsabsicht lesen, sodass die Wartung bei der Übernahme einfacher ist.
  5. Wenn Sie sich umdrehen und das Entwurfsmuster kennen, wird die Kommunikation zwischen den Entwicklern reibungslos.

Zusammenfassung der GoF-Entwurfsmuster

Material des Entwurfsmusters am Beispiel von Ruby

Entwurfsmuster für gewöhnliche Menschen durch gewöhnliche Menschen Act 1 Public

5.2.5 Algorithmus und Datenstruktur

Ein Programm ist wie das Gewinnen einer weiteren Hälfte, wenn Sie wissen, wie die Datenstruktur aussieht. Beim Schreiben von Code ist es viel nützlicher, die Datenstruktur (nur) zu erklären, als den Code einzeln zu kommentieren. (Und es wurde in einem Buch geschrieben, was ist das?)

※ Nachschrift: Es war "die Methode des Programmhandbuchs". Das Folgende wird aus S.168 desselben Buches zitiert. "Eine der effektivsten Möglichkeiten, ein Programm zu erklären, besteht darin, einfach detailliert zu erklären, wie die Daten zugeordnet werden. Was sind die möglichen Werte für die Hauptvariablen? Wenn Sie erklären, wie es sich ändert, können Sie sagen, dass die Erklärung des Programms sehr weit fortgeschritten ist. " Das Originalbuch dieses Buches wurde übrigens 1974 veröffentlicht.

  • Anhang 2: Ich habe einen ähnlichen Kommentar in "C Programming Diagnosis Room" gefunden. Das Folgende wird aus S.78 desselben Buches zitiert. "Verwenden Sie keine Flussdiagramme. Es ist nicht gut, weil Sie den Kontrollfluss in" alles "schreiben können. Das Programm dient zur Datenverarbeitung, und der Steuerungsfluss ändert sich je nach Datenunterschied. Bis zuletzt sind Daten das Hauptthema. Die einfache Programmierung wird erheblich verbessert, je nachdem, wie die Daten wie Variablen und Argumente definiert sind. Ein Diagramm, wie die Datenstruktur aussieht, ist viel nützlicher als ein Flussdiagramm. Notieren Sie die Bedeutung der Daten. ""

Leises Gespräch. Wenn Sie eine Datenstruktur in C erstellen möchten, sollten Sie natürlich struct oder union verwenden. Solche wichtigen Strukturen werden häufig in Header-Dateien definiert. Natürlich kann die interne Struktur in .c definiert sein, und einige Datenstrukturen werden dynamisch aufgebaut, sodass Sie es am Ende erst wissen, wenn Sie die Funktion gelesen haben. Trotzdem sollten Sie zuerst die Header-Datei lesen. Der Dateiname ist auch beim Lesen der Header-Datei wichtig. Wenn sich beispielsweise im Sprachverarbeitungssystem eine Datei mit dem Namen frame.h befindet, handelt es sich wahrscheinlich um die Definition des Stapelrahmens.

Konzentrieren Sie sich bei der Vorhersage von Datenstrukturen auf Strukturelemente. Wenn in der Strukturdefinition nebenan ein Zeiger steht, können Sie sich vorstellen, dass es sich um eine Linkliste handelt. Wenn es Elemente wie Eltern, Kinder und Geschwister gibt, ist es ebenfalls ein Baum von zehn.

Ich habe keine praktischen Erfahrungen mit Algorithmen und Datenstrukturen, daher bin ich mir nicht sicher, wie ich sie verwenden soll. Anscheinend wird es häufig bei der Durchführung von Big-Data-Analysen verwendet. Es wird angenommen, dass das Verständnis der Literatur durch das Lesen des Folgenden vertieft wird.

STEP1

[26 Algorithmen, die im Algorithmus-Bilderbuch zu sehen sind](https://www.amazon.co.jp/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA% E3% 82% BA% E3% 83% A0% E5% 9B% B3% E9% 91% 91-% E7% B5% B5% E3% 81% A7% E8% A6% 8B% E3% 81% A6% E3 % 82% 8F% E3% 81% 8B% E3% 82% 8B26% E3% 81% AE% E3% 82% A2% E3% 83% AB% E3% 82% B4% E3% 83% AA% E3% 82 % BA% E3% 83% A0-% E7% 9F% B3% E7% 94% B0% E4% BF% 9D% E8% BC% 9D-ebook / dp / B07179Q3MJ)

App "Algorithm Picture Book"

Waku Waku Academy (YouTube)

STEP2

AtCoder: Japans größte Website für wettbewerbsfähige Programmierwettbewerbe

Wenn Sie weitere Empfehlungen haben, lassen Sie es mich bitte wissen!

5.3 Verstehen Sie die Bedeutung des Quellcodes

5.3.1 Wort für Wort lesen

Auf welche der Dateien, Funktionen (Methoden), Typen (Klassen), Variablen, Mitgliedsvariablen und reservierten Wörter bezieht sich das im Quellcode enthaltene Wort? Wissen, wie man schreibt.

① Datei

Für Frameworks wie Rails gibt es Namenskonventionen. Der Dateiname kann verwendet werden, um bis zu einem gewissen Grad zu schließen, welche Rolle er in der Software spielt.

② Arten von Funktionen (Methoden)

Methoden aus der Standardbibliothek (Klassen, die ursprünglich in Ruby, Rails usw. enthalten waren, und die zugehörigen Methoden, da sie häufig verwendet werden. In die Hall of Fame aufgenommen)

Externe Bibliotheksmethode (Edelstein)

Methoden aus Ihrer eigenen Bibliothek (Helfer, Modell, Anwendung)

Methodenoptionen

③ Art der Form

Ganzzahl, Zeichenfolge, Array usw.

In der objektorientierten Programmierung werden Typen als Klassen bezeichnet, und Sie können Klassen selbst erstellen und verwenden.

Objektorientierte Programmierterminologie

Klassen, Objekte, Instanzen, Empfänger, Methoden, Nachrichten, Zustände, Attribute (Attribute, Eigenschaften)

④ Variable (Instanz)

Variablen, Mitgliedsvariablen, Instanzvariablen, Klasseninstanzvariablen

https://qiita.com/mogulla3/items/cd4d6e188c34c6819709

⑤ Klassendifferenzierung anhand des Namespace

Der Zweck besteht darin, unerwartete Konflikte von Klassennamen zu verhindern.

⑥ Reservierte Wörter und Bezeichner

Ein Wort, das eine Struktur wie "sequentielle Verarbeitung", "bedingte Verzweigung" und "Wiederholung" ausdrückt.

#Reservierte Wörter und Bezeichner in Rubin
BEGIN    class    ensure   nil      self     when
END      def      false    not      super    while
alias    defined? for      or       then     yield
and      do       if       redo     true     __LINE__
begin    else     in       rescue   undef    __FILE__
break    elsif    module   retry    unless   __ENCODING__
case     end      next     return   until

⑦ Untersuchung von Abkürzungen

Listen Sie verwirrende Abkürzungen auf und suchen Sie sie frühzeitig nach. Wenn beispielsweise "GC" geschrieben wird, ist die Geschichte ganz anders, je nachdem, ob es sich um eine Speicherbereinigung oder einen grafischen Kontext handelt. Auf Englisch gibt es viele Dinge, wie den ersten Buchstaben eines Wortes zu nehmen oder Vokale zu entfernen. Insbesondere Abkürzungen, die im Bereich des Zielprogramms bekannt sind, werden ohne Fragen verwendet. Überprüfen Sie dies daher im Voraus.

Lassen Sie mich ein Beispiel geben, an das ich mich erinnere. Ein bestimmtes Lisp-Verarbeitungssystem verwendet im gesamten Programm ein Präfix namens "blt", aber ich hatte ein Problem, weil ich nicht wusste, was dies bedeutet. Dies war eigentlich eine eingebaute Funktion. Es ist einfach zu verstehen, aber wenn Sie dies nicht verstehen, ist der Schwierigkeitsgrad ganz anders.

Es scheint. Sicherlich habe ich das Gefühl, in einem Java-Projekt eine Abkürzung gesehen zu haben. Wenn du es nicht weißt

  1. Fragen Sie eine detaillierte Person
  2. Überprüfen Sie die Dokumentation
  3. Suchen

Sie müssen eine dieser Strategien anwenden.

Wenn Sie Variablen usw. selbst codieren, sollten Sie sich auch auf den lesbaren Code beziehen.

5.3.2 Lesen Sie, wofür der Code entwickelt wurde

RASIS ist einer der Bewertungsindizes für Computersysteme und drückt die fünf Elemente "Zuverlässigkeit", "Verfügbarkeit", "Wartung", "Wartung" und "Sicherheit" durch Akronym (Abkürzung) aus. ..

Erstellt basierend auf Worauf Sie bei der Entwicklung von Webdiensten in Unternehmen achten sollten (für neue Absolventen). RASIS ist nicht hell. Wenn Sie weitere Informationen benötigen, lesen Sie bitte die Informationen.

①Zuverlässigkeit

Stärke gegen Systemausfall "Schwer zu brechen" Zeigt die Beständigkeit gegen Systemausfall an.

  1. Außergewöhnliches Design
  2. Schließen Sie das Bereitstellungs- / Rollback-Verfahren ab
  3. Überwachung des Lebensunterhalts / Fehlererkennung
  4. Behandeln Sie Protokolldateien ordnungsgemäß
  5. Erstellen Sie ein Backup

②Verfügbarkeit

Der angeforderte Dienst ist zum erforderlichen Zeitpunkt verfügbar. Grad "Dienst verfügbar". Fähigkeit, das System am Laufen zu halten.

  1. Beseitigen Sie einen einzelnen Fehlerpunkt

③ Wartungsfreundlichkeit (erweiterbar)

Streben Sie ein "einfaches System" an. Wenn es einfach ist, ist es einfach, den Inhalt zu erfassen und zu aktualisieren.

  1. Testcode
  2. Variablennamen gemäß der Namenskonvention für lesbaren Code
  3. Versionsverwaltung
  4. Verlassen Sie das Dokument
  5. Protokollieren Sie Fehlerinformationen
  6. Einfach zu erstellende Entwicklungsumgebung

④ Integrität

Es bezieht sich auf die Konsistenz und Konsistenz von Daten. Wird oft als Datenbankdaten bezeichnet. Mit Rails werden Einschränkungen für die Modellebene und die Datenbank festgelegt.

  1. Transaktionskontrolle

Was ist eine Transaktion? [DB-Transaktionsverarbeitung, die in 13 Minuten verstanden werden kann] Datenbank-Einführungskurs Nr. 4

  1. DB-Einschränkungen

[SQL Anti-Pattern](https://www.amazon.co.jp/SQL%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF% E3% 83% BC% E3% 83% B3-Bill-Karwin / dp / 4873115892)

Negative Spirale, die die Entwicklung von Datenbankanwendungen brennt

Checkliste zur Vermeidung von "SQL Anti-Pattern" ① (logisches DB-Design)

  1. Modellgestaltung

[Datenmodelldesign und Best Practices (Teil 2) --Talend](https://www.talend.com/jp/blog/2019/05/20/data-model-design-best-practices-part-2 /)

Was passiert, wenn Sie das Modell richtig entwerfen - SlideShare

Leicht verständliches domänengesteuertes Design - Lernen wir das Design von Domänenmodellen, während Sie die Hände bewegen

⑤ Sicherheit (Sicherheit)

Verhindern Sie, dass Informationen auslaufen.

  1. SSL
  2. Passwort-Hashing
  3. Verwenden Sie die Funktionen des Frameworks
  4. Starke Parametereinstellungen
  5. Platzhaltereinstellungen

5.3.3 Verlauf lesen

Siehe das Festschreibungsprotokoll auf GitHub. Es ist leicht zu verstehen, welche Absicht der Entwickler hat und welcher Quellcode sich auf das fertige Modul bezieht.

Lesen von Quellcode in großem Maßstab

Lesen des Quellcodes für Anfänger

6 Lassen Sie es uns ein wenig ändern und es funktionieren lassen

Dies ist eine der Methoden, nicht die Art von "Mach es in dieser Phase". Der menschliche Kopf ist eine mysteriöse Sache, und es ist leicht, sich daran zu erinnern, was ich getan habe, während ich so viele Teile meines Körpers wie möglich benutzt habe. Ich denke, dass die Tatsache, dass viele Menschen Manuskriptpapier gegenüber Computertastaturen bevorzugen, nicht nur ein nostalgisches Hobby ist, sondern so etwas.

Deshalb ist es sehr schwierig, am Körper zu bleiben, nur um auf einem Monitor zu lesen. Lesen Sie also beim Umschreiben. Dann gewöhnt sich der Körper oft ziemlich schnell an den Code. Wenn Sie einen Namen oder Code finden, den Sie nicht mögen, schreiben Sie ihn neu. Schwer verständliche Abkürzungen können durch Wörter ersetzt werden, die nicht abgekürzt oder aufgeschrieben sind.

Lassen Sie beim Umschreiben natürlich die Originalquelle separat. Wenn Sie der Meinung sind, dass Tsuji unterwegs nicht übereinstimmt, überprüfen Sie die Originalquelle. Andernfalls leiden Sie stundenlang unter Ihren eigenen einfachen Fehlern.

Umschreiben und verschieben Ähnlich wie im vorherigen Abschnitt, aber hier werden wir das Programm tatsächlich ausführen. Versuchen Sie beispielsweise, die Parameter und den Code an einer Stelle zu ändern, an der die Operation schwer zu verstehen ist. Dann ändert sich natürlich das Verhalten, sodass Sie erraten können, was der Code bedeutet.

Natürlich sollten Sie die ursprüngliche Binärdatei beibehalten und für beide dasselbe tun.

Aus meiner Erfahrung denke ich, dass das Ändern und Überprüfen des Betriebs die Programmierkenntnisse verbessern kann, und es wird besonders Anfängern empfohlen. Ich habe jedoch festgestellt, dass ich die Änderungen nicht rückgängig machen und mit einem Fehler ungeduldig werden kann. Da ich Angst vor dem Fehler habe, höre ich auf zu versuchen und verpasse die Wachstumschance. Als Lebensader werde ich im Folgenden beschreiben, wie die Änderung abgebrochen werden kann.

6.1 Machen Sie rückgängig, woran Sie an Git gearbeitet haben

Praktisch, da Sie die DB-Migration und die Dateierstellung löschen können

git checkout . 
git clean -df .

Ich möchte mit git abbrechen

6.2 Versuchen Sie es mit interaktiven Funktionen wie irb

Sie können die Hypothese testen, wie Bibliotheken und Methoden funktionieren

rails c --sandbox

Zusammenfassung, wie man dem Quellcode folgt, wie man ihn liest und Tipps

7 Ich möchte gerne den Quellcode lesen (ich möchte wie ein Spiel arbeiten)

  1. Führen Sie eine Aufzeichnung
  2. Lesen Sie den Quellcode für den Bereich, an dem Sie interessiert sind
  3. Lesen Sie den guten Quellcode
  4. Lesen Sie den Quellcode, der bei der Arbeit nützlich ist
  5. Nehmen Sie eine kleine Änderung vor und lassen Sie es funktionieren
  6. Suchen Sie nach Fehlern

[4 Möglichkeiten, den vom Programmierer gelehrten Quellcode zu lesen! ](Https://medium.com/traveloco-tech/%E3%81%8A%E3%81%A3%E3%81%95%E3%82%93%E3%83%97%E3%83%AD % E3% 82% B0% E3% 83% A9% E3% 83% 9E% E3% 83% BC% E3% 81% 8C% E6% 95% 99% E3% 81% 88% E3% 82% 8B-% E3% 82% BD% E3% 83% BC% E3% 82% B9% E3% 82% B3% E3% 83% BC% E3% 83% 89% E3% 82% 92% E8% AA% AD% E3% 82% 80% E3% 81% 9F% E3% 82% 81% E3% 81% AE% EF% BC% 94% E3% 81% A4% E3% 81% AE% E6% 96% B9% E6% B3% 95-2c6a2dd28bda) [Für neue Programmierer] Lesen Sie den Quellcode (2/2)

8 Am Ende

Das war's vorerst. Außerdem werde ich diesen Satz von Zeit zu Zeit aktualisieren, abhängig von Kommentaren von außen und dem Grad meines eigenen Wachstums.

Recommended Posts

Technologie zum Lesen des Quellcodes (Cheet Sheet)
Techniken zum Lesen von Java-Quellcode in Eclipse
Beim Lesen des Quellcodes
C # Spickzettel für Java-Techniker
Java-Quellcode zum Lesen der Klasse java.lang.Math
Vorab geschriebener Quellcode für die Aktivität
Java Spickzettel
JMeter Spickzettel
Kotlin Spickzettel
[Docker Spickzettel]
Mockito + PowerMock Spickzettel
Eclipse Sammlungen Cheet Sheet
Schienen Tutorial Cheet Sheet
Spring Boot2 Spickzettel
SCSS Notation Spickzettel
Docker Befehl Spickzettel
CRuby Code Reading (2): rb_newobj_of