Wie wichtig ist es für einen Softwareentwickler, den Code anderer zu lesen?

25

Ich bin ein angehender Software-Ingenieur (jetzt im zweiten Studienjahr, Hauptfach CS) und ich habe wirklich Mühe, die Programme anderer Leute zu verstehen. Ich möchte wissen, ob diese Fähigkeit (oder ein Mangel daran) ein Handicap für mich sein kann, und wenn ja, wie kann ich sie entwickeln?

James Bond
quelle
1
Haben Sie das Gefühl, Code zu verstehen, wenn er Ihnen auch erklärt wird, oder lernen Sie nur durch Ausprobieren?
JeffO
1
Warum ist dieser "Codierungsstil" markiert? Ist der Grund, warum Sie Probleme beim Lesen von Code haben, der schlecht formatiert ist? Die Fähigkeit, Code zu lesen, bedeutet nicht, dass Sie sehr schlecht formatierten oder verschleierten Code verstehen müssen. Führen Sie den Code zuerst über ein Formatierungsprogramm aus, wenn dies hilfreich ist.
Brandin
Lies heute Morgen einfach einen Artikel, der mich an diese Frage erinnerte. Warum ich an Chrome gearbeitet habe, habe ich ein Tool zum Lesen von Quellcode entwickelt
Eric King,
Das ist eine tolle Frage! Ich hatte folgende Frage: Wenn Sie hauptsächlich an Ihrem eigenen Code arbeiten (z. B. als wissenschaftlicher Programmierer in einem kleinen Projekt), wie finden Sie guten Code zum Lesen? Dies wurde zuvor gefragt: softwareengineering.stackexchange.com/questions/69892/…
Gaurav

Antworten:

49

Es ist wesentlich.

Die Art und Weise, wie Sie es entwickeln, besteht darin, Ihren eigenen Code (viel davon) zu schreiben und sich durch das Lesen des Codes anderer Leute zu kämpfen.

Das Problem ist natürlich, dass nicht jeder so denkt, wie Sie es tun. Ich war vor langer Zeit in einer Java-Klasse im ersten Jahr und wir bekamen einen Auftrag. Im Gegensatz zu dem, was ich glaubte (was war, dass die Antworten auf drei oder vier gemeinsame Lösungen konvergieren würden), hatte jeder in der Klasse eine einzigartige Lösung für die Aufgabe.

Daraus folgt, dass Sie guten Code lesen sollten .

Dies ist einer der Gründe, warum Design Patterns so beliebt geworden sind und warum Sie sie studieren sollten. Design Patterns bieten Programmierern ein gemeinsames Vokabular, mit dem sie kommunizieren können, und Sie können nach "besseren" Möglichkeiten suchen, um Computerprobleme zu lösen.

Sie sollten auch Algorithmen und Datenstrukturen untersuchen.

Fazit: Sie sollten immer danach streben, Code zu schreiben, den andere Entwickler leicht verstehen können.

Robert Harvey
quelle
7
Fazit: Beginnen Sie einfach damit, Code zu schreiben, den Sie leicht verstehen können :-)
gnasher729
4
Im Allgemeinen eine gute Antwort, außer für den Teil über Muster. Die meisten GoF-Muster (woran die Leute denken, wenn Sie den Begriff verwenden) sind überentwickelt, viel zu feinkörnig, viel zu OO-konzentriert oder einfach nur Anti-Muster. Und dann tauchen Leute hier auf und fragen, welches dieser Muster sie für ihre Lösung verwenden sollen. Bitte raten Sie niemals Entwicklern, ihre Zeit mit Mustern zu verschwenden.
David Arno
Bei kleinen Problemen (z. B. Umkehren der Zahlen in einer Liste) sollten mögliche Antworten auf eine kleine Anzahl möglicher Lösungen konvergieren. Bei guten Aufgaben sollte es erforderlich sein, viele solcher Probleme zu lösen und die Lösungen für diese Probleme auf irgendeine Weise zu arrangieren, damit die Gesamtzahl der möglichen Lösungen für die Aufgabe sehr schnell wächst.
Brandin
15

Das ist sehr wichtig.

Sobald Sie Ihren Abschluss gemacht haben und sich auf den Weg in die Welt gemacht haben, haben die meisten Projekte, an denen Sie arbeiten, bereits Code von anderen beigesteuert. Lucky ist der Programmierer, der seine ganze Zeit auf der grünen Wiese verbringen darf!

Es ist eine Fähigkeit , die durch Übung und Geduld, und in vielen Fällen erworben wird, dann ist es eine Fähigkeit , die viele Menschen nicht wirklich viel Gelegenheit zur Arbeit bekommen , bis nach ihrem Abschluss und diesen ersten Job bekommen. Entspannen Sie Sich!

(Wenn Ihre Schule über ein Koop-Programm verfügt, können Sie bereits vor dem Abschluss an großen Projekten arbeiten, die zum größten Teil von anderen geschrieben wurden, und Sie erhalten akademische Anrechnungspunkte!

FrustratedWithFormsDesigner
quelle
7

Dies ist eine wichtige Fähigkeit , die abhängig von den Besonderheiten Ihres Arbeitsumfelds sogar wichtiger sein kann als das Schreiben von Code.

Übung macht den Meister! Versuchen Sie, den Code eines anderen Programmierers zu lesen, zu debuggen, und was mir persönlich hilft, ist, kleine Teile des Codes umzugestalten oder zu verbessern und von dort aus zu erweitern.

RMalke
quelle
Außerdem kann es hilfreich sein, ein Open-Source-Projekt kennenzulernen, das Sie verwenden, und zu verstehen, wie der innere Code funktioniert
RMalke
4

Es gibt unterschiedliche Fähigkeiten beim Lesen und Schreiben von Code.

  • Eine davon ist die Syntax. Wissen, wie eine Methodendeklaration aussieht.
  • Der andere ist Absicht. Wissen, warum die Methode da ist und welchen Zweck sie erfüllt.

Was das Lesen und Schreiben betrifft. Ja, lesen ist wichtig.
Einige Maximen, die vielen von uns dabei helfen, sind:

  • Der Code wird (mindestens) 10 Mal für jedes Mal gelesen, wenn er geschrieben wird.
  • Jemand anderes, der den Code liest, ist oft ... ich in der Zukunft, der den Code liest.
  • Ich würde meinen Codestil nicht mehr als vor einem Jahr verteidigen, er hat sich seitdem verbessert.

OKAY. Das ist alles großartig. Nun zu dem, was Sie wahrscheinlich erleben.

omg, diese verdammt große Codebasis mit Zehntausenden von Zeilen Quellcode und Klassen, die Hunderte von Zeilen lang sind und verrückte Abhängigkeiten aufweisen, und jedes Mal, wenn ich versuche, etwas zu befolgen, muss ich 10 Ebenen in meinem Kopf behalten, usw. usw.
Klingt vertraut ? Ja. Tiefer Atemzug. Entspannen Sie Sich. Es ist normal. Daraus bestehen Produktionssysteme. Menschen überleben (und gedeihen) in diesen scheinbar unverständlichen Situationen, weil:

  • Tests existieren (hoffentlich) und sie helfen auch, das System zu dokumentieren.
  • Programmierer paaren sich und oft bringt es mehr als das Doppelte des Ergebnisses.
  • Ein guter Programmierer kann sagen, dass er es erst versteht, wenn er es tut.
  • Änderungen bestehen häufig nur aus einer oder mehreren Codezeilen und helfen, die zu testenden Komponenten zu isolieren
  • Es dauert Monate und sogar Jahre, um sich mit Codebasen vertraut zu machen
Michael Durrant
quelle
Und schließlich schreiben gute Programmierer aussagekräftige Commit-Meldungen, wenn sie Änderungen an Versionskontrollsystemen vornehmen. (Fühlen Sie sich frei, um zu antworten)
rwong
1

Die meisten dieser Antworten konzentrieren sich auf die Bedeutung des Codelesens für die Selbstverbesserung. Ich stimme voll und ganz zu und unterstütze es.

Es gibt noch einen anderen Aspekt, vor dem Sie sich hüten sollten - selbst wenn Sie ein Wunderkind wären, das nicht vom Lesen anderer Ansätze profitieren könnte (unmöglich, aber aus Gründen der Argumentation ...), müssten Sie immer noch wissen, wie man Code liest, weil a Konzept, das im universitären Umfeld grundsätzlich nicht existiert: Die überwiegende Mehrheit der Industrieprojekte sind Brown-Field-Projekte (dh entweder in eine bereits vorhandene Codebasis integriert oder in diese integriert).

Die Notwendigkeit, Code nur zu lesen, um die vorhandene Codebasis und die vorhandenen Prozesse zu verstehen, ist real. Es ist immer möglich, anderen Entwicklern Fragen zu Code zu stellen, aber dies kann nur so lange dauern. Die Leute gehen, wechseln Projekte oder die Zeit vergeht. Die Details auf niedriger Ebene werden vom Speicher ausgeblendet, und Wartungsprogrammierer wenden Patches an. Irgendwann gibt es keine einzige Wahrheitsquelle außer dem Code selbst.

Gute Code-Hygiene, Style-Guides, Code-Reviews und Dokumentation helfen, aber irgendwann ist der Code die Quelle der Wahrheit für das, was passiert, und der einzige Weg, um die Antwort zu finden, ist, sie selbst zu holen. Abgesehen von seiner Verwendung in der Selbstentwicklung ist die Fähigkeit, Code zu lesen, eine deutlich vom Schreiben getrennte Fähigkeit.

Michael
quelle
0

Das Verstehen des Codes anderer ist etwas, dem Sie nicht entgehen können, da Sie höchstwahrscheinlich im Team arbeiten werden, auch wenn Sie nicht im Team sind. Sie werden verschiedene Dinge googeln und Sie müssen den Beispielcode verstehen. Also ja es ist ein Muss.

Was ich denke, ist, dass jeder das Gefühl hat, etwas weniger als der andere zu sein, besonders zu Beginn. Sie verstehen Ihren Code besser als anderen Code, da Sie viel mehr Zeit mit Ihrem eigenen Code verbringen als mit Code von jemand anderem, da Sie nicht nur lesen, sondern auch schreiben und strukturieren es in deinem Kopf. Wenn Sie mehr Zeit mit dem Code anderer verbringen und zuerst versuchen, herauszufinden, welche Art von Struktur / Ablauf verwendet wird, werden Sie den Code sicherlich besser verstehen.

Um meinen Standpunkt noch überzeugender zu machen, wenn Sie einen Code haben, den Sie vor einem Jahr geschrieben haben, versuchen Sie ihn erneut zu verstehen, und ich kann Ihnen versichern, dass Sie mehr Zeit in Anspruch nehmen werden, aber weniger als der Code anderer, wenn Sie eine Vorstellung davon haben, wie Sie Ihren strukturieren Code.

Hoffe, dass diese Hilfe nicht enttäuscht wird, es ist völlig normal. Verbringen Sie mehr Zeit mit Code und Sie werden es schließlich bekommen.

techExplorer
quelle
0

Nun, ich habe gerade ein Projekt mit ungefähr 100.000 Codezeilen erhalten, das von einem Team in einem anderen Land geschrieben wurde, und ich muss in den nächsten Monaten einige sehr wichtige Änderungen an einer Kopie des Codes vornehmen, während ich so viel Code hinterlasse gemeinsam wie möglich.

Sie sagen mir, wie ich meine Arbeit erledigen kann, ohne den Code anderer Leute schnell lesen zu können. Wenn Sie den Code anderer Leute nicht lesen können, stecken Sie völlig fest.

gnasher729
quelle