Was ist schöner Code? [geschlossen]

30

Ich lese oft, dass Entwickler schönen Code schreiben müssen, aber für einen Anfänger bleibt es dunkel, was schöner Code ist und wie erkennt man ihn?

Die sich daraus ergebende Frage lautet: Wie schreibe ich schönen Code und was sind einige praktische Gewohnheiten, um die Qualität Ihres Codes zu verbessern? , was soll ich beachten, um den Code, den ich schreibe, schön zu machen (und was soll ich lernen).

Torr
quelle
4
Es ist nur eine Redewendung. Schönheit liegt in den Augen des Betrachters, und darüber hinaus geht es um die Klarheit der Anweisungen, die Sie in einer Textdatei niedergelegt haben, um ein Problem zu lösen, und darum, wie einfach Sie oder jemand anderes es in der Datei ändern und warten kann Zukunft. Darüber hinaus liegt es ganz bei Ihnen, wie viel mehr Schönheit Ihr Code ausstrahlt - Einrückungen, modulare Struktur, Komplexität, Effizienz bei gleichzeitig einfacher Lesbarkeit, Namenskonventionen usw.
bad_keypoints
Sie könnten daran interessiert sein, Beautiful Code zu lesen : Führende Programmierer erklären, wie sie dann denken !
UncleZeiv

Antworten:

55

"Schönheit wird durch Augenmaß erkauft".

Trotzdem denke ich, dass die meisten Programmierer der Meinung sind, dass schöner Code ein Gleichgewicht zwischen Klarheit und Transparenz, Eleganz, Effizienz und Ästhetik aufweist.

  • Klarheit und Transparenz : Klarheit ist, wie einfach ein Leser ableiten kann, was der Code tut. Transparenter Code macht das, was er zu tun scheint. Wenn Code eine Sache zu tun scheint, aber tatsächlich etwas anderes (oder etwas mehr) tut, ist er nicht transparent - er ist irreführend.

  • Eleganz : Es gibt viele Möglichkeiten, die meisten Algorithmen zu implementieren, aber einige sind umständlich, während andere ordentlich und anmutig sind. Prägnanz fügt oft Eleganz hinzu, aber übermäßige Prägnanz kann die Klarheit verringern.

  • Effizienz : Vermeidung unnötiger Ressourcennutzung (z. B. CPU-Zeit, Arbeitsspeicher und E / A).

  • Ästhetik : Augenschonend. Das ist ziemlich subjektiv. Es kommt hauptsächlich auf den Stil an. Ein wichtiger Gesichtspunkt ist ein einheitlicher Stil. Code, der sich ändert, wenn beispielsweise der Stil zur Hälfte eingerückt wird, ist hässlich.

Igby Largeman
quelle
11
eine schöne erklärung, +1
koenmetsu
2
Ich würde "Effizienz" herausnehmen. Obwohl es im engeren Sinne positiv ist, kann es bestenfalls irreführend sein, es in die Liste aufzunehmen. Es ist normalerweise ein Nebenprodukt der anderen und sollte zum Zeitpunkt der Codierung von untergeordneter Bedeutung sein. Der Hauptgrund ist, dass es sich größtenteils erst manifestiert, nachdem der Compiler seine dunkle Magie gewirkt hat.
DPM
@Jubbat In der Tat - manchmal führt die effizienteste Lösung tatsächlich zu sehr hässlichem Code. (ZB die klassische Funktion Fast Inverse Square Root)
Darrel Hoffman
@DarrelHoffman Richtig, obwohl dieser Kompromiss auch für mehr Variablen gilt, die guten Code definieren, nicht nur die Effizienz und den Rest (es gibt eine ausführliche Erklärung in "Code Complete" - ich erinnere mich leider nicht, in welchem ​​Abschnitt der Buch, in der Nähe des Anfangs wahrscheinlich-)
DPM
@Jubbat: Ich stimme zu, dass Effizienz normalerweise ein zweitrangiges Anliegen ist, aber ich denke immer noch, dass sie die Schönheitsgleichung beeinflusst.
Igby Largeman
20

Lassen Sie sich nicht von Leuten täuschen, die glauben, schöner Code sei der folgende:

  • clevere Algorithmen
  • hinterhältige Sprachfunktionen
  • Lösen eines Problems mit der geringsten Anzahl von Tastenanschlägen

Weil es nicht so ist. Code wie dieser ist niedlich , und es ist sicherlich einen Blick wert, aber es ist nicht die Art von Code, mit dem Sie sich abfinden möchten.

Und Sie wissen, dass Sie sich für einen rekursiven statischen Polymorphismus mit Metatemplaten interessieren, der verschiedene Lambdas vererbt - oder was auch immer, über das Sie online gelesen haben? Sie könnten begierig darauf sein, innovative und raffinierte Tricks zu spielen, ohne einen klaren Grund dafür zu haben. Aber auch Code, der die Grenzen einer Sprache überschreitet, ist nicht schön.

Sie sind sexy .
Tonnenweise Spaß, aber fragen Sie sich: Möchte ich wirklich Zeit damit verbringen, die Anatomie dieser Sprache zu erforschen, oder möchte ich mit einer Sprache zusammenarbeiten und etwas Schönes bauen? Schließlich ist eine Programmiersprache nur das Werkzeug zum Erstellen.


Was ist also schöner Code?

Schöner Code = wartbarer Code. DAS IST ES!
DAS IST DIE FORMEL!

Wenn Sie etwas schreiben können, einige Monate später darauf zurückkommen und weitere Fortschritte erzielen, dann ist das schön. Wenn Sie ein Jahr später feststellen, dass Sie Funktionen hinzufügen und vorhandene Funktionen optimieren möchten, und dies relativ einfach tun können, dann ist DAS wunderschön. Wenn andere Leute in Ihre Codebasis eintreten und schnell herausfinden können, was los ist, weil die Dinge organisiert sind, werden sie mehr Haare haben und auch schön sein.

Die eigentliche Frage, die Sie stellen möchten, lautet: "Wie schreibe ich mehr wartbaren Code?". Ich fürchte, das ist eine größere Frage und es ist eine ziemlich kreative Disziplin. Schreiben Sie einfach weiter Code, aber fragen Sie sich diesmal nicht, ob er schöner sein kann. Fragen Sie sich, ob Sie es wartbarer machen können.

Trevor Hickey
quelle
4
Zur Bekämpfung der von Ihnen angesprochenen
jk.
4

Ich gehe davon aus, dass "Schöner Code" kein objektiver oder besonders nützlicher Begriff ist. Und wir sollten nicht versuchen, es zu definieren.


Typische Wörterbuchdefinitionen des englischen Wortes "beauty" gehen wie folgt vor:

  • "1. die Kombination aller Eigenschaften einer Person oder Sache, die die Sinne erfreuen und den Geist erfreuen"
  • "1. die Qualität einer Person oder Sache, die dem Geist oder den Sinnen intensives ästhetisches Vergnügen oder tiefe Befriedigung verleiht."
  • "1. Die Qualität, die dem Geist oder den Sinnen Freude bereitet und mit solchen Eigenschaften wie Harmonie von Form oder Farbe, herausragender Kunstfertigkeit, Wahrhaftigkeit und Originalität verbunden ist."

(Quelle http://dictionary.com )

Der rote Faden ist, dass "Schönheit" das ist, was ästhetisch ansprechend ist. Das ist notwendigerweise subjektiv ... wie das Sprichwort "Schönheit liegt im Auge des Betrachters" zeigt.


Wir können das Wort "Schönheit" auf Code anwenden, und die offensichtliche Bedeutung ist, dass der Code "ästhetisch ansprechend" ist.

Aber zu sagen, dass "schöner Code" eine Reihe von Attributen hat (wie von anderen Answers vorgeschlagen), ist ein Widerspruch zur offensichtlichen Bedeutung von ästhetisch ansprechend. In der Ästhetik geht es darum, wie Menschen ... einzelne Menschen ... Dinge wahrnehmen.

Oder anders ausgedrückt, es ist etwas Widerliches , wenn mir jemand sagt, was ich für schön halten sollte, sei es in Menschen, Kunstwerken oder ... Code.

Für mich ist schöner Code ein Code, den ich für schön halte, und das ist er. Es ist subjektiv und individuell und lässt es einfach dabei.

Stephen C
quelle
2

Hier ist mein Rat.

Lesen Sie die Antworten auf Wie können Sie einem Nicht-Programmierer "schönen Code" erklären? und sehen, auf welche Eigenschaften sie sich konzentrieren sollen. Nehmen Sie dann ein Buch wie Code Complete und lesen Sie es durch, um Ratschläge zum Schreiben von besserem Code zu erhalten.

Irgendwann wird es dich treffen, während du dir deinen älteren Code ansiehst: "Das ist hässlich." Es wird eine direkte ästhetische Reaktion sein. Wenn Sie es sich ansehen, werden Sie feststellen, dass Sie Ihren Code wie einen Programmierer anzeigen und die Hässlichkeit erkennen, weil Sie wissen, wie besser aussehender Code aussehen sollte.

btilly
quelle
1

Nur weil Sie oft über schönen Code lesen, heißt das nicht, dass Leute, die darüber schreiben, dieselbe Definition haben. Ihrer Frage nach zu urteilen, scheint es leider nicht so, als hätten sie sich überhaupt die Mühe gemacht, sie zu definieren.

Für mich ist schöner Code:

  • Ausdrucksvoll
  • Prägnant

Prägnanter Code, der nicht aussagekräftig ist, kann kryptisch sein, und nicht prägnanter aussagekräftiger Code ist in der Regel aufgebläht und mühsam zu lesen, sodass Sie beides benötigen.

Ich würde Wartbarkeit nicht als Teil dessen einschließen, was Code schön macht, weil Schönheit etwas ist, das Sie sehen / lesen, nicht etwas, auf das Sie einwirken. Aber andererseits ist es meine persönliche Ansicht.

guillaume31
quelle
0

Der Begriff schöner Code ist ein sehr vager und abstrakter Begriff. Es ist einfach herauszufinden, was es darstellt und was es bedeutet, aber es sollte niemals als mehr als ein sekundäres Ziel angesehen werden.

Es erinnert mich sehr an die Metrik der Codeabdeckung. Wenn Sie die Zahl hoch genug bekommen, können Sie sich entspannen und auf etwas anderes gehen. Eine Codebasis mit ca. 80% Deckung ist großartig, nicht kugelsicher, aber genug, um sich zu entspannen und andere Dinge zu tun. Eine Abdeckung von 40% ist ziemlich beängstigend und sollte Sie ermutigen, diese Zahl zu erhöhen.

Es ist nur wichtig, dass die Codeabdeckung nur dann wirklich aussagekräftig ist, wenn die Anzahl niedrig ist. Also lass es nicht zu niedrig sein. Wenn die Abdeckung zu einem bestimmten Punkt ansteigt, gehen Sie zu etwas anderem über.

Ähnlich schöner Code ist großartig. Wenn Sie hübschen Code haben, großartig, gehen Sie zu etwas anderem über. Betonen Sie nicht zu viel darüber. Sie werden diese 100% -Marke niemals erreichen, und wenn Sie dies tun, werden Sie feststellen, dass Sie sich zu sehr darauf konzentriert haben, wie es liest oder wie es aussieht, und nicht genug darauf, was es tut oder wie es es tut . Also zu einer vernünftigen Note kommen und dann aufhören.

Aber wenn Ihr Code unzuverlässig ist, wenn es sich um ein riesiges Wirrwarr von Spaghetti-Code handelt, wenn es Sie physisch schmerzt, die Datei zu öffnen, wenn Sie keine Kommentare oder Unterlagen usw. usw. usw. haben, dann beheben Sie es. Und mach es so schnell wie möglich.

Sie werden feststellen, dass Ihre Codebasis im Laufe der Zeit im Allgemeinen sauberer, im Allgemeinen heller und im Allgemeinen schöner und vor allem nützlicher wird, wenn Sie sich darauf konzentrieren, sie weniger flüchtig zu machen. Das Schreiben von schönem Code ist kein einstufiger Prozess.

Es gibt keine magische Philosophie. Die 1000 kleineren Schritte, die alle zusammen ausgeführt werden, erfüllen einen konkreten Zweck, der nichts damit zu tun hat, wie schön der Code aussieht. Aber wenn Sie sie alle zusammen servieren, bilden sie einen schönen Code als die Summe ihrer Teile. Wie Voltron. Oder Captain Planet.

Raumfahrer
quelle
0

Ich stimme den Antworten hier wirklich zu, aber mit einem weniger technischen Ansatz würde ich sagen, dass schöner Code ein Ausdruck der Klarheit der Autoren in Bezug auf das vorliegende Problem ist, was sich in einer gut formulierten und präzisen, aber einfachen Sprache manifestiert.

Für mich ist das Durchschauen von schönem Code so, als würde man ein Kunstwerk betrachten und immer wieder neue Details sehen, die die Absicht des Herstellers zeigen, aber auch, wie die verschiedenen Teile realisiert wurden, wobei jeder eine Antwort auf so viele Fragen gibt, und schließlich: wie sich seine Existenz anfühlt wie ein Naturgesetz, an dem sich alles so ausrichtet, dass es nur mit Worten der Ehrfurcht beschrieben werden kann: großartig, inspirierend, schön.

Aus dieser Perspektive könnten Sie in Ihrer Karriere als Programmierer Entdeckungen von schönem Code machen, den andere weder verstehen, weil ihnen das Wissen fehlt, noch nicht mehr bemerkenswert finden, da sie durch zu viel Schönheit verwöhnt wurden;)

Schöner Code hat alle pragmatischen Qualitäten, wie ansonsten erwähnt, da stimme ich voll und ganz zu.

Filou
quelle
0

Ich habe drei Kriterien:

  • Einfach: Zumindest muss es für Menschen lesbar sein. Zum Beispiel können Sie einen Code schreiben, der bei O (1) für eine Lösung mit Tonnen von Zeilen funktioniert, aber ich bevorzuge Code, der mit 0 (n) funktioniert, löst mit wenigen Zeilen. Dies kann sich für extreme Situationen ändern, aber für den Anfang ist Einfachheit wichtig.
  • Wiederverwendbar: Code muss wiederverwendbar sein, darf aber nicht überschrieben werden. Wenn Sie eine Operation benötigen, sollten Sie festlegen, wie Sie sie Jahre später verwenden können.
  • Einrückung: Vielleicht ist dies kein Problem für Sie, aber für Anfänger ist dies das erste, was gelöst werden muss.
user2674653
quelle