Kommentare
- mögliches Duplikat von Schreiben / Diskussionen über die Ästhetik von Code?
- Es ist ' nur eine Redewendung. Schönheit liegt in den Augen des Betrachters, und darüber hinaus dreht sich ' alles um die Klarheit der Anweisungen, die Sie ' gegeben haben in einer Textdatei, um ein Problem zu lösen und wie einfach Sie oder andere Personen es in Zukunft ändern und warten können. Darüber hinaus liegt es ganz bei Ihnen, wie viel mehr Schönheit Ihr Code ausstrahlt – Einrückungen, modularer Aufbau, Komplexität, Effizienz bei gleichzeitig einfacher Lesbarkeit, Namenskonventionen usw.
- Sie könnten daran interessiert sein, Schöner Code: Führende Programmierer erklären, wie sie denken dann!
- mögliches Duplikat von Wie können Sie " schöner Code " an einen Nicht-Programmierer?
Antwort
„Schönheit wird durch Beurteilung des Auges gekauft“.
Trotzdem denke ich, dass die meisten Programmierer zustimmen werden, dass schöner Code ein Gleichgewicht zwischen zeigt Klarheit und Transparenz, Eleganz, Effizienz und Ästhetik.
-
Klarheit und Transparenz : Klarheit ist, wie leicht 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 Wege sind ungeschickt, während andere ordentlich und anmutig sind. Prägnanz fügt oft Eleganz hinzu, aber übermäßige Prägnanz kann die Klarheit beeinträchtigen.
-
Effizienz : Vermeidung unnötiger Ressourcennutzung (wie CPU-Zeit, Speicher und E / A).
-
Ästhetik : Augenschonend. Das ist ziemlich subjektiv. Es kommt hauptsächlich auf den Stil an. Eine wichtige Überlegung ist ein konsistenter Stil. Code, der beispielsweise den Einrückungsstil zur Hälfte ändert, ist hässlich.
Kommentare
- eine schöne Erklärung, +1
- Ich würde " Effizienz " herausnehmen. Obwohl es im engeren Sinne positiv ist, kann die Aufnahme in die Liste bestenfalls irreführend sein. Es ist normalerweise ein Nebenprodukt der anderen und sollte zum Zeitpunkt der Codierung ein zweitrangiges Anliegen sein. Der Hauptgrund ist, dass es sich größtenteils erst manifestiert, nachdem der Compiler seine dunkle Magie angewendet hat.
- @Jubbat In der Tat – manchmal führt die effizienteste Lösung tatsächlich zu sehr hässlichem Code. (ZB die klassische Fast Inverse Square Root-Funktion)
- @DarrelHoffman Richtig, obwohl dieser Kompromiss auch für mehr Variablen gilt, die guten Code definieren, nicht nur für Effizienz und den Rest (es gibt eine gute ausführliche Erklärung dafür in " Code abgeschlossen " – leider ' kann ich mich nicht erinnern, in welchem Abschnitt des Buch, wahrscheinlich am Anfang -)
- @Jubbat: Ich stimme zu, dass Effizienz normalerweise ein zweitrangiges Anliegen ist, aber ich denke immer noch, dass dies in die Schönheitsgleichung einfließt.
Antwort
Lassen Sie sich nicht täuschen, dass schöner Code der folgende ist:
- clevere Algorithmen
- hinterhältige Sprachfunktionen
- Lösen eines Problems mit der geringsten Anzahl von Tastenanschlägen
Weil dies nicht der Fall ist. Code wie dieser ist süß , und es ist sicherlich einen Blick wert, aber es ist nicht die Art von Code, mit der Sie sich abfinden möchten.
Und Sie wissen, dass ausgefallener rekursiver Meta-Template-statischer Polymorphismus, der verschiedene Lambdas erbt – oder worüber Sie online gelesen haben? Sie könnten gerne auf innovative und raffinierte Tricks springen, ohne einen klaren Grund dafür zu haben. Aber Code, der die Grenzen einer Sprache überschreitet, ist auch nicht schön.
Sie sind sexy .
Tonnenweise Spaß, aber fragen Sie sich Folgendes: Will ich wirklich um Zeit damit zu 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 lediglich das zu erstellende Werkzeug.
Was ist dann schöner Code?
Schöner Code = wartbarer Code. DAS IST ES!
DAS IST DIE FORMEL !
Wenn Sie etwas schreiben können, kommen Sie einige Monate später darauf zurück und machen Sie weitere Fortschritte, dann ist das schön. Wenn Sie ein Jahr später feststellen, dass Sie auch Funktionen hinzufügen möchten Wenn Sie eine vorhandene Funktion optimieren und es relativ einfach schaffen, 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, haben sie mehr Haare und sind auch schön.
Die eigentliche Frage, die Sie stellen möchten, lautet also : „Wie schreibe ich mehr wartbaren Code?“. Ich fürchte, das ist eine größere Frage und eine ziemlich kreative Disziplin. Schreiben Sie einfach weiter Code, aber fragen Sie sich diesmal nicht, ob es schöner sein kann. Fragen Sie sich, ob Sie es wartbarer machen können.
Kommentare
- Um die von Ihnen angesprochenen Probleme zu bekämpfen, gibt es auch den Rat an c2.com/cgi/wiki?KillYourDarlings
Antwort
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“ lauten wie folgt:
- „1. die Kombination aller die Eigenschaften einer Person oder Sache, die die Sinne erfreuen und dem Geist gefallen „
- “ 1. die Qualität einer Person oder Sache, die dem Geist oder den Sinnen ein intensives ästhetisches Vergnügen oder eine tiefe Befriedigung verleiht. “
- „1. Die Qualität, die dem Geist oder den Sinnen Freude bereitet und mit Eigenschaften wie Harmonie von Form oder Farbe, hervorragender Kunstfertigkeit, Wahrhaftigkeit und Originalität verbunden ist.“
(Quelle http://dictionary.com )
Der rote Faden ist, dass „Schönheit“ geht es um das, 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 dann zu sagen, dass „schöner Code“ eine bestimmte Reihe von Attributen hat (wie in anderen Antworten vorgeschlagen), ist ein Widerspruch zum offensichtliche Bedeutung von ästhetisch ansprechend. In der Ästhetik geht es darum, wie Menschen … einzelne Menschen … Dinge wahrnehmen.
Oder um es auszudrücken Auf andere Weise ist es etwas Widerwärtiges an jemandem, der mir sagt, was ich für schön halte, sei es in Menschen, Kunstwerken oder … Code.
Soweit Für mich ist schöner Code Code, den ich für schön halte, und das ist es. Es ist subjektiv und individuell und lässt es einfach dabei.
Antwort
Hier ist mein Rat.
Sehen Sie sich die Antworten auf an. Wie können Sie " den schönen Code " erklären? an einen Nicht-Programmierer? 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 Sie treffen, wenn Sie sich Ihren älteren Code ansehen „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 können, weil Sie wissen, wie besser aussehender Code aussehen sollte.
Antwort
Nur weil Sie oft über schönen Code lesen, heißt das nicht, dass Leute, die darüber schreiben, dieselbe Definition haben. Nach Ihrer Frage scheint es leider nicht so, als hätten sie sich überhaupt darum gekümmert Definieren Sie es an erster Stelle.
Für mich ist schöner Code:
- Ausdrucksstark
- Prägnant
Prägnanter Code, der nicht ausdrucksstark ist, kann kryptisch sein, und ausdrucksstarker Code, der nicht ausdrucksstark ist, ist in der Regel aufgebläht und mühsam zu lesen. Daher benötigen Sie beides.
Ich würde die Wartbarkeit nicht als Teil der Codeherstellung einbeziehen schön, weil Schönheit etwas ist, das man sieht / liest, nicht etwas, worauf man einwirkt. Aber andererseits ist es meine persönliche Ansicht.
Antwort
Der Begriff schöner Code ist ein sehr vager und abstrakter Begriff. Es ist leicht 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 einer Abdeckung von etwa 80% 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.
Punkt ist nur, dass die Codeabdeckung nur dann wirklich sinnvoll ist, wenn die Anzahl niedrig ist. Lassen Sie es also nicht niedrig sein. Wenn die Abdeckung bis zu einem bestimmten Punkt ansteigt, fahren Sie mit etwas anderem fort.
Ähnlich schöner Code ist großartig. Wenn Sie hübschen Code haben, fahren Sie mit etwas anderem fort. Betonen Sie nicht zu viel darüber. Sie werden diese 100% -Marke nie 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. Gehen Sie also zu einer vernünftigen Marke und hören Sie dann auf.
Aber wenn Ihr Code flüchtig ist, wenn es sich um ein riesiges Durcheinander von Spaghetti-Code handelt, wenn es Sie physisch schmerzt, die Datei zu öffnen, wenn Sie keine Kommentare haben oder Dokumentation etc etc etc dann beheben. Und tun Sie es so schnell wie möglich.
Mit der Zeit werden Sie feststellen, dass Ihre Codebasis im Allgemeinen sauberer, im Allgemeinen heller und im Allgemeinen schöner und vor allem benutzerfreundlicher wird, wenn Sie sich darauf konzentrieren, sie weniger flüchtig zu machen Kein einstufiger Prozess.
Es gibt keine magische Philosophie. Die 1000 kleineren Schritte werden alle zusammen ausgeführt. Alle dienen einem konkreten Zweck, der nichts damit zu tun hat, wie schön der Code aussieht. Aber wenn Sie Servieren Sie sie alle zusammen, sie bilden schönen Code als die Summe seiner Teile. Wie Voltron. Oder Captain Planet.
Antwort
Ich stimme den Antworten hier wirklich zu, aber mit einem weniger technischen Ansatz würde ich sagen, dass schöner Code Ausdruck der Klarheit des Denkens der Autoren über das vorliegende Problem ist, die sich in einer gut formulierten und präzisen, aber einfachen Sprache manifestiert.
Für mich ist das Durchsuchen von schönem Code dem Betrachten eines Kunstwerks ähnlich, wenn ich immer neue Details sehe, die die des Herstellers zeigen Absicht, aber auch, wie die verschiedenen Teile verwirklicht wurden, von denen jeder eine Antwort auf so viele Fragen gab, und schließlich, wie sich seine Existenz wie ein Naturgesetz anfühlt, 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, die andere möglicherweise nicht verstehen, weil ihnen das Wissen fehlt oder sie nicht mehr bemerkenswert finden, da sie verwöhnt wurden durch zu viel Schönheit;)
Schöner Code hat alle pragmatischen Eigenschaften, wie sonst erwähnt, da stimme ich voll und ganz zu.
Antwort
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 in extremen Situationen ändern, aber für den Anfang ist Einfachheit wichtig.
- Wiederverwendbar: Code muss sein wiederverwendbar, aber nicht überschrieben. Wenn Sie eine Operation benötigen, sollten Sie sie so definieren, dass Sie sie Jahre später verwenden können.
- Einzug: Vielleicht ist dies kein Problem für Sie, aber für Anfänger ist dies das erste, was gelöst werden muss.