it-swarm-eu.dev

Was bedeutet es, "guten Code" zu schreiben?

In this Frage habe ich gefragt, ob es Sie daran hindert, guten Code zu schreiben, wenn Sie ein schlechter Schriftsteller sind. Viele der Antworten begannen mit "Es hängt davon ab, was Sie unter gutem Code verstehen".

Es scheint, dass die Begriffe "guter Code" und "schlechter Code" sehr subjektiv sind. Da ich eine Ansicht habe, kann sie sich sehr von der Ansicht anderer unterscheiden.

Was bedeutet es also, "guten Code" zu schreiben? Was ist "guter Code"?

41
gablin

Ein guter Programmierer ist wie ein guter Poolspieler.

Wenn Sie einen professionellen Poolspieler sehen, werden Sie vielleicht zunächst nicht beeindruckt sein: "Sicher, sie haben alle Bälle reingelegt, aber sie hatten nur leichte Schüsse!" Dies liegt daran, dass eine Poolspielerin, wenn sie ihren Schuss macht, nicht darüber nachdenkt, welcher Ball in welche Tasche fließt, sondern auch darüber nachdenkt , wo der Spielball landen wird . Die Vorbereitung für den nächsten Schuss erfordert enormes Geschick und Übung, bedeutet aber auch, dass es einfach aussieht.

Wenn Sie nun diese Metapher zum Code bringen, ein guter Codierer schreibt Code, der so aussieht, als wäre er einfach und unkompliziert durchzuführen. Viele der Beispiele von Brian Kernighan in seinen Büchern folgen diesem Muster. Ein Teil des "Tricks" besteht darin, ein richtige Konzeptualisierung des Problems und seiner Lösung zu finden. Wenn wir ein Problem nicht gut genug verstehen, werden wir unsere Lösungen mit größerer Wahrscheinlichkeit zu kompliziert, und wir werden keine einheitlichen Ideen sehen.

Mit einer richtigen Konzeptualisierung des Problems erhalten Sie alles andere: Lesbarkeit, Wartbarkeit, Effizienz und Korrektheit. Da die Lösung so einfach zu sein scheint, wird es wahrscheinlich weniger Kommentare geben, da zusätzliche Erklärungen nicht erforderlich sind. Ein guter Codierer kann auch die langfristige Vision des Produkts sehen und ihre Konzeptualisierungen entsprechend gestalten.

91
Macneil

WTF's per minute

( original )


BEARBEITEN: Die Grundidee ist, dass "Codequalität" nicht in Regeln eingefügt werden kann, genauso wie Sie "Gute Kunst" oder "Gute Poesie" nicht in Regeln einfügen können, sodass Sie einen Computer bestimmen lassen können, "Ja, gute Kunst" zu sagen. oder "Nein, schlechte Poesie". Derzeit ist der einzige Weg zu sehen, wie leicht der Code für andere Menschen verständlich ist.

49
user1249

Es gibt wirklich keine guten Kriterien außer wie schnell Sie den Code verstehen können. Sie lassen Ihren Code gut aussehen, indem Sie den perfekten Kompromiss zwischen Prägnanz und Lesbarkeit finden.

Die "WTFs pro Minute" (oben) sind wahr, aber sie sind nur eine Folge der allgemeineren Regel. Je mehr WTFs vorhanden sind, desto langsamer ist das Verständnis.

7
mojuba

Sie wissen, dass Sie guten Code schreiben, wenn ...

  1. Der Kunde ist glücklich
  2. Kollegen leihen sich Ihren Code als Ausgangspunkt aus
  3. Dem brandneuen Mann wurde gerade gesagt, er solle Änderungen an einem System vornehmen, das Sie vor 6 Monaten gebaut haben, und er/sie hat Ihnen nie eine Frage gestellt
  4. Ihr Chef bittet Sie, neue Widgets für das Team zu entwickeln
  5. Sie sehen sich den Code an, den Sie heute schreiben, und sagen sich: "Ich wünschte, ich hätte vor zwei Jahren solchen Code geschrieben."

Wie messen Sie, ob der Code gut ist ...

  • Was ist die Reaktionszeit?
  • Wie viele Roundtrips zum Server werden durchgeführt?
  • Würden Sie die Anwendung persönlich nutzen oder denken Sie, dass sie klobig ist?
  • Würden Sie es beim nächsten Mal genauso bauen?

Guter Code funktioniert, wenn es sein soll. Guter Code kann bei Bedarf leicht geändert werden. Guter Code kann wiederverwendet werden, um Gewinn zu erzielen.

Ein Code, der ist

  1. bug-frei

  2. wiederverwendbar

  3. unabhängig

  4. weniger komplex

  5. gut dokumentiert

  6. leicht zu chagen

heißt guter Code.

Ein gutes Programm funktioniert einwandfrei und hat keine Fehler. Aber welche inneren Qualitäten erzeugen eine solche Perfektion? Es ist kein Rätsel, wir brauchen nur gelegentlich eine Erinnerung. Unabhängig davon, ob Sie in C/C++, C #, Java, Basic, Perl, COBOL oder ASM codieren, weist jede gute Programmierung dieselben bewährten Eigenschaften auf: Einfachheit, Lesbarkeit, Modularität, Schichtung, Design, Effizienz, Eleganz und Klarheitseffizienz, Eleganz und Klarheit

Quelle: MSDN

4
Chankey Pathak

Kommt Ihnen das bekannt vor?

Philips gab mir die Gelegenheit, das Design eines neuen Produkts zu beobachten. Als es sich entwickelte, wurde ich zunehmend unruhig und begann, meine Bedenken meinem Vorgesetzten anzuvertrauen. Ich habe ihm wiederholt gesagt, dass die Designs nicht "sauber" sind und dass sie "schön" sein sollten, so wie Dijkstras Designs schön sind. Er fand dies keinen nützlichen Kommentar. Er erinnerte mich daran, dass wir Ingenieure waren, keine Künstler. In seinen Gedanken drückte ich einfach meinen Geschmack aus und er wollte wissen, nach welchem ​​Kriterium ich mein Urteil fällte. Ich konnte es ihm nicht sagen! Da ich nicht erklären konnte, gegen welche Grundsätze verstoßen wurde, wurden meine Kommentare einfach ignoriert und die Arbeit ging weiter. Als ich spürte, dass es einen Weg geben muss, meinen „Geschmack“ zu erklären und zu motivieren, versuchte ich, ein Prinzip zu finden, das gute von schlechten Designs unterscheidet. Ingenieure sind sehr pragmatisch; sie mögen Schönheit bewundern, aber sie suchen Nützlichkeit. Ich habe versucht, eine Erklärung dafür zu finden, warum „Schönheit“ nützlich ist.

Bitte sehen Sie den Rest hier .

3
mlvljr

abgesehen von natürlichen Qualitätskriterien für Code (minimales Kopieren/Einfügen, keine Spaghetti usw.) sollte ein guter Industriecode immer ein bisschen naiv, ein bisschen zu ausführlich aussehen

int key = i;
const bool do_not_create = false;
Record r = cache.get(key, do_not_create);
++i;

im Gegensatz zu

Record r = cache.get(i++, false);
1
bobah

Vielleicht würde eine Antwort durch Illustration des Gegenteils helfen (und es ist eine Ausrede, um XKCD hier rein zu bekommen).

alt text

Guter Code ist

  • einfach zu verstehen,
  • leicht zu pflegen,
  • versucht nicht, alle Probleme zu lösen, sondern nur das eine
  • lebt lange weiter, ohne dass Entwickler nach Alternativen suchen

Beispiele beinhalten

  • Apache Commons
  • Frühlingsrahmen
  • Rahmen für den Ruhezustand
1
Gary Rowe

Ich werde einfach mit "wartbar" gehen

Der gesamte Code muss gepflegt werden: Diese Aufgabe muss nicht schwieriger als nötig gemacht werden

Wenn ein Leser diese einfache Anforderung nicht versteht oder sie formulieren muss, sollte dieser Leser keinen Code schreiben ...

1
gbn

Guter Code wird für jede Person unterschiedlich sein, und die Sprache, mit der sie arbeitet, wirkt sich auch auf das aus, was als guter Code angesehen werden könnte. Wenn ich mich einem Projekt nähere, suche ich im Allgemeinen nach folgenden Dingen:

  • Wie ist das Projekt organisiert? Sind die Quelldateien sauber organisiert und kann ich Code ohne allzu großen Aufwand finden?
  • Wie ist der Code organisiert? Ist klar dokumentiert, was der Code in der Datei bewirkt, z. B. durch die Verwendung eines Dateikopfs oder durch die Verwendung jeder Klasse, die sich in einer eigenen Datei befindet? Gibt es Funktionen in der Datei, die in der Anwendung nicht mehr verwendet werden?
  • Wie sind die Funktionen organisiert? Gibt es ein klares Muster für die Deklaration von Variablen oder ein ziemlich zufälliges Muster? Hat der Code einen logischen Ablauf und vermeidet unnötige Kontrollstrukturen? Ist alles klar dokumentiert, wobei der Code selbst dokumentiert wird, wo dies erforderlich ist, und Kommentare das Warum und/oder Wie dessen, was der Code tut, klar ausdrücken?

Ist das Design der Anwendung darüber hinaus insgesamt sinnvoll? Der Code in der Anwendung kann der beste der Welt sein, aber es kann immer noch schwierig sein, damit zu arbeiten, wenn das Gesamtdesign der Anwendung keinen Sinn ergibt.

1
rjzii

Lassen Sie mich der Lesbarkeit nicht zustimmen. Nein, nicht vollständig: Guter Code sollte lesbar sein, und das kann leicht mit genügend Kommentaren erreicht werden.

Aber ich betrachte zwei Arten von WTF: diejenigen, bei denen Sie sich fragen, ob der Programmierer weiter als das Programmieren von 101 gekommen ist, und diejenigen, bei denen Sie die Genialität des Codes absolut nicht verstehen. Mancher Code kann auf den ersten Blick sehr seltsam aussehen, ist aber tatsächlich eine sehr erfinderische Lösung für ein schwieriges Problem. Der zweite sollte im WTF-Meter nicht zählen und kann durch Kommentare vermieden werden.

Sehr gut lesbarer Code kann sehr, sehr langsam sein. Eine weniger lesbare Lösung kann die Geschwindigkeit um ein Vielfaches verbessern. R ist ein großartiges Beispiel für eine Sprache, in der dies oft der Fall ist. Man vermeidet dort gerne For-Loops so weit wie möglich. Im Allgemeinen würde ich den schnellsten Code als den besseren Code betrachten, obwohl er weniger lesbar ist. Das heißt, wenn die Verbesserung vom Kurs abweicht und genügend Kommentare eingefügt werden, um zu erklären, was der Code tut.

Darüber hinaus kann die Speicherverwaltung in vielen wissenschaftlichen Anwendungen von entscheidender Bedeutung sein. Code, der sehr gut lesbar ist, ist in der Speichernutzung eher schlampig: Es werden nur mehr Objekte erstellt. In einigen Fällen macht eine intelligente Speichernutzung den Code wieder weniger lesbar. Wenn Sie beispielsweise mit Gigabyte DNA-Sequenzen jonglieren, ist das Gedächtnis ein entscheidender Faktor. Auch hier halte ich den weniger speicherintensiven Code für den besseren Code, unabhängig von der Lesbarkeit.

Ja, Lesbarkeit ist wichtig für guten Code. Ich kenne das Adagium von Uwe Liggis: Denken tut weh und Computer sind billig. In meinem Bereich (statistische Genomik) werden Rechenzeiten von einer Woche und eine Speichernutzung von über 40 GB jedoch nicht als abnormal angesehen. Eine Verbesserung der doppelten Geschwindigkeit und der Hälfte des Speichers ist also viel mehr wert als diese zusätzliche Lesbarkeit.

1
Joris Meys

Was mich betrifft ... Ich weiß, dass ich guten Code schreibe, wenn ein Mitarbeiter, der an einem anderen Projekt arbeitet, vorbeikommt und in der Lage ist, einzuspringen und zu verstehen, was ich tue, ohne dass ich jeden Codeblock durchgehe und zeigen, was es tut.
Anstatt dass er sagte: "Moment mal, was?!" Er sagt: "Oh, ok, ich sehe, was du dort getan hast."

Guter Code hat auch nicht viele hinterhältige Problemumgehungen oder "Hacks". Zeilen, in denen Sie sich beim Schreiben auch sagen: "Ich weiß, dass dies kein guter Weg ist, aber ich muss es erst einmal so machen. Ich werde daran erinnern ich selbst, um es später zu verbessern ... "

1
chiurox

Es gibt viele Funktionen von "gutem" Code, aber die wichtigsten, IMHO, sind Lesbarkeit und Wartbarkeit.

Ihr Code wird Fehler enthalten, wird wahrscheinlich erweitert und wiederverwendet und sollte irgendwann neu berücksichtigt werden - auch wenn dies der Fall ist Wenn Sie es erneut besuchen, haben Sie wahrscheinlich keine Ahnung, was zum Teufel Sie überhaupt getan haben, um sich selbst einen Gefallen zu tun und keine Hindernisse in den Weg zu stellen.

Verwenden Sie diesen komplexen, aber äußerst effizienten Algorithmus, aber stellen Sie sicher, dass Sie ein wenig mehr Zeit damit verbringen, ihn zu dokumentieren, aber machen Sie Ihren Code ansonsten klar und konsistent.

1
cjmUK