Wie liest du den Code anderer? [geschlossen]


23

Fast jeder fortgeschrittene Programmierer sagt, dass es sehr nützlich ist, den Code anderer Profis zu lesen. Normalerweise beraten sie Open Source.

Liest du es oder nicht? Wenn ja, wie oft und wie wird der Code gelesen? Außerdem ist es für Neulinge ein bisschen schwierig, mit SVN umzugehen - ein Bündel von Dateien. Was ist die Lösung?

Antworten:


25

Liest du es oder nicht?

Ja.

Wenn ja, wie oft?

Täglich. Ständig. Ich arbeite mit zahlreichen Open-Source-Projekten (hauptsächlich mit Python) und muss den Quellcode lesen, da er die genaueste Dokumentation ist.

und wie wird der Code gelesen?

Äh. Öffnen und lesen.

Außerdem ist es für Neulinge ein bisschen schwierig, mit SVN umzugehen - ein Bündel von Dateien. Was ist die Lösung?

Öffnen und lesen. Dann lies mehr.

Es ist nicht einfach. Nichts macht es einfach. Es gibt keinen Königsweg zum Verständnis. Es braucht Arbeit.


Danke für deine Antwort. Wie lässt sich definieren, ob der Code gut ist oder nicht? Weil nicht jedes Open Source Projekt von echten Profis gemacht wird?
Sergey

1
@Sergey: "Wie lässt sich definieren, ob der Code gut ist oder nicht?" Lesen Sie den Code. "Gut" ist subjektiv. Wenn es hilfreich ist und Sie es verstehen können, ist es gut. Wenn es verwirrend ist oder nicht funktioniert, ist es nicht gut. Es gibt viele, viele Qualitätsmerkmale: wartbar, sicher, anpassungsfähig, leistungsstark usw. usw. usw. Code kann auf der einen Seite gut und auf der anderen weniger gut sein.
S.Lott

7
Ich konnte nicht widerstehen: osnews.com/images/comics/wtfm.jpg
Gary Willoughby

@Sergey - selbst wenn es sich um den besten Code handelt, der jemals geschrieben wurde, kann man ihn (aufgrund seiner Erfahrung) nicht lesen. Obwohl Sie es als nicht die beste Verwendung Ihrer Zeit ansehen, werden Sie schlecht geschriebenem Code ausgesetzt sein, sodass Sie den Unterschied genauso gut erkennen können. Wie S.Lott sagte, dauert es Arbeit und Zeit.
JeffO

Während ich diejenigen bewundere, die sich zurücklehnen und Code lesen können, wie sie einen Roman lesen, finde ich es manchmal ein bisschen langweilig. Ich habe festgestellt, dass das Lesen von Code für mich nicht wirklich die Aktivitäten beschreibt, die ich unternehme - ein besserer Ausdruck für das, was ich tue, ist das Verstehen von Code, und es beinhaltet das Lesen der Dokumentation, das Durchgehen in einem Debugger und sogar das Lesen der Tests. Ich schrieb einen langen Beitrag über das Lesen von Code - technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil

9

Das Rätsel, das Sie haben, besteht aus mehreren Ebenen. Beginnen Sie zunächst auf hoher Ebene sozusagen aus der Vogelperspektive. Sobald Sie ein Projekt ausgecheckt haben, befinden sich eine Reihe von Dateien in einer Verzeichnisstruktur. Das ist das Gleiche, ob Sie Open Source oder Closed Source betrachten (Quellcode ist schließlich Quellcode). Also fang damit an:

  • Wie sind die Quelldateien organisiert? Können Sie anhand des Dateinamens oder des Namens des enthaltenen Verzeichnisses erkennen, was sich möglicherweise darin befindet? Wir Programmierer neigen dazu, vorhersehbare Namen und logische Strukturen zu mögen. Sie sollten in der Lage sein, eine ungefähre Vorstellung davon zu bekommen, wo ein bestimmtes Problem zu suchen ist.
  • Was ist die Art der Anwendung, ist es webbasiert, Befehlszeile, GUI? Der Grund dafür ist, dass Sie wissen möchten, wo Sie mit der Ablaufverfolgung beginnen sollen. Wenn es webbasiert ist, möchten Sie damit beginnen, wo die App mit der Verarbeitung der Anforderung beginnt. Wenn es auf einem Framework aufgebaut ist, umso besser. Sobald Sie das Framework kennen, können Sie in der Regel den vorhandenen Code gut verstehen. Andernfalls beginnen Sie mit dem jeweiligen Einstiegspunkt für die Kommandozeile / GUI-App.
  • Besorgen Sie sich ein Blatt Papier und einen Bleistift oder, wenn Sie Glück haben, ein Whiteboard und trocken abwischbare Markierungen. Geben Sie den Komponenten Namen (oder verwenden Sie die im Code angegebenen) und zeichnen Sie Linien zwischen den Feldern mit Pfeilen, damit Sie sehen können, wie die Dinge verarbeitet werden. Wenn Sie sich einen Algorithmus ansehen, skizzieren Sie alternativ die Datenstrukturen so, dass Sie verstehen und skizzieren können, wie sie manipuliert werden.

Es braucht Übung, aber es ist definitiv machbar. Je mehr Sie über die von der Anwendung verwendeten Bibliotheken und Frameworks wissen, desto mehr wissen Sie, wie der Code organisiert werden muss und wo Sie nach Antworten auf bestimmte Fragen suchen können. Einige Codes sind etwas schwieriger zu befolgen, insbesondere wenn sie ziemlich indirekt sind. Deshalb brauchst du Bleistift und Papier. Irgendwann geht eine Glühbirne in deinem Kopf aus und du bekommst es. Dann macht das Lesen des restlichen Codes viel mehr Sinn.


Ein Aspekt beim Lesen von Code ist die Abstraktion. Dinge wie das Herausfinden, wie Quellen organisiert sind, werden den Prozess des Codelesens definitiv abstrahieren.
David Gao

5

Es liest sich nicht so, wie Sie einen Roman lesen, sondern wie Sie ein Nachschlagewerk lesen. Eine gute Möglichkeit besteht darin, einen kürzlich behobenen Fehler in einer Check-in-Nachricht zu suchen, Änderungen vorzunehmen und die relevanten Teile zu lesen, bis Sie sowohl das Problem als auch die Lösung verstanden haben. Bekannt gewordene Sicherheitslücken machen Spaß, da in den Foren viel darüber diskutiert wird. Wählen Sie dann einen der "niedrig hängenden Früchte" -Fehler aus dem Bug-Tracker aus und lesen Sie, bis Sie wissen, wie Sie ihn selbst beheben können. Die meisten Codelesefachleute sind zufällig dabei, Fehler zu beheben oder Funktionen hinzuzufügen.

Normalerweise sind die besten Codebeispiele kaum zu bemerken. Sie werden sie sofort verstehen, ohne sie mehr als einmal durchzulesen. Sie lassen es so aussehen, als sei es extrem einfach zu schreiben, obwohl Code, der gut ist, normalerweise viele Entwürfe durchläuft. Es entsteht das paradoxe Gefühl, dass natürlich der gegebene Code der offensichtliche Weg ist, dies zu tun, obwohl es nicht der erste Weg ist, an den Sie gedacht haben.

Wenn Sie auf Code wie diesen stoßen, versuchen Sie, die Erkenntnisse, die beim Schreiben des Codes gewonnen wurden, und die damit verbundenen Gestaltungsprinzipien zu verstehen. Wenn Sie sich also in Zukunft in einer ähnlichen Situation befinden, können Sie hoffentlich dieselben Prinzipien anwenden.


4

Ein Trick, den ich beim Lesen einer komplizierten Funktion ziemlich oft benutze, ist, das Code-Segment in etwas lesbareres umzugestalten, ohne die Logik zu ändern.


1
+1: Ich auch. // Ich hatte einmal einen Chef, der das Refactoring bemerkt und mich beschuldigt hat, Zeit zu verschwenden. Er konnte es nicht verstehen. Was für ein Idiot.
Jim G.

2

Wie ist es schwierig mit "ein paar Dateien" umzugehen? Es unterscheidet sich nicht von dem Zeitpunkt, zu dem Sie Ihren eigenen Code schreiben, es sei denn, Sie haben zuvor keine Kenntnisse über dessen Organisation, es sei denn, dies ist dokumentiert.

Wenn Sie als behaupteter Programmierer die Projektstruktur nicht aus "einer Reihe von Dateien" herausfinden können, ist dies entweder ein äußerst schlecht organisiertes Projekt oder Sie sind ein unfähiger Programmierer (oder in extremen Fällen beides).

Beginnen Sie mit dem Lesen, versuchen Sie, einige Einstiegspunkte oder andere wichtige Pivot-Klassen / Methoden zu finden, und verstehen Sie, wie alles von dort aus zusammenkommt. Wird nicht sofort sein, wird einige Zeit in Anspruch nehmen, kann aber durchgeführt werden, auch wenn überhaupt keine Dokumentation vorhanden ist.


3
"Wird Zeit brauchen", um "ein Verständnis aufzubauen", ist so ziemlich die Definition von "hart". Nur weil es eine Schwierigkeit ist, mit der wir uns jeden Tag befassen müssen, ist es nicht weniger schwierig. "Wo mache ich diese Änderung?" ist eine häufige Frage, auch unter Fachleuten. Außerdem ist die Quellcodeverwaltung und der Umgang mit großen Codebasen eine der großen Lücken in der Hochschulbildung. Ich glaube, ich habe ein oder zwei Projekte am College durchgeführt, für die mehr als eine Quelldatei erforderlich war, und sie haben nur bis zu 10 Dateien erstellt.
Karl Bielefeldt

0

Das Beste, worauf Sie beim Lesen des Codes eines anderen Projekts hoffen können, sei es eine API oder Software, ist, dass die Variablen, Funktionen und Makronamen nicht mehrdeutig abgekürzt oder benannt werden, damit Sie ihre Absicht herausfinden können.

Davon abgesehen ist jedoch eine angemessene Menge an Kenntnissen erforderlich, die über die Sprache, die Programmiertechniken und auch über den eigentlichen Zweck des Codes verteilt sind, um in komplexen Code eintauchen zu können.

Ich versuche gerade zu sehen, wie Lua etwas von seiner Magie macht, aber ich komme zu dem Punkt, an dem viele der Bezeichner vage benannt und eher abgekürzt sind, bis zu dem Punkt, an dem ich nicht herausfinden kann, welche Linie es versucht Das, was ich weiß, muss irgendwann im Funktionscode erledigt werden ... Die häufigen Einzelbuchstabenvariablen und die eher abgekürzten Makro- / Funktionsnamen tun mir weh.


0

Nach dem Blick auf "Beginnen Sie zuerst auf hoher Ebene aus der Vogelperspektive", wie @Berin Loritsch es vorschlug, können Sie nach Unittests und / oder Integrationstests suchen, falls es welche gibt.

unittests sind interessant zu sehen, wie (api-) details funktionieren.

Der Integrationstest gibt in der Regel einen guten Überblick über die Geschäftsprozesse.

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.