Als ich mit einer Freundin eines Nicht-Programmierers sprach, erwähnte ich zufällig das Konzept des "schönen Codes" und sie wollte verstehen, was das bedeutet, aber ich war ein bisschen ratlos, wie ich es jemandem erklären sollte, der es nicht hätte Kontext überhaupt.
Wie können Sie erklären, warum ein Teil des Codes schöner ist als der andere, wenn der gesamte Code für jemanden wie Kauderwelsch aussieht? Analogien könnten auch nützlich sein.
aesthetics
Daniel Vandersluis
quelle
quelle
Antworten:
Sprachanalogie
Denken Sie an Ihre Lieblingsgeschichte. Es ist wahrscheinlich wunderschön geschrieben. Für einen Nicht-Engländer bedeutet das, nur weil er es nicht verstehen oder verstehen kann, warum es schön ist, dass es nicht von seiner Schönheit ablenkt.
Konstruktionsanalogie
Stellen Sie sich ein schlampiges Haus vor. Es hat Türen und Fenster, die offensichtlich zugemauert sind. Der Mörtel ist in einer Ecke gerissen, wo das Fundament nicht ausreichte. Und niemand kann verstehen, warum es ein Treppenhaus gibt, das zu einer 2. Etage führt, die es nicht gibt. Die Toilette befindet sich neben der Küche ohne Abluftventilator und ist so angeordnet, dass der vorherrschende Wind die üblen Moorgerüche durch den Rest des Hauses weht. Der Kamin des offenen Kamins ist 5 cm von etwas Holz entfernt und bereit, Feuer zu fangen.
Im Gegensatz dazu ist ein Haus, in dem alles ist, wo es sein soll, wartungsarm und perfekt isoliert, sodass ein bisschen Sonnenwärme es im Winter warm hält. Die Energie wird aus der Lüftung zurückgewonnen, sodass Sie sowohl frische Luft als auch eine angenehme Temperatur haben und vernachlässigbare Stromrechnungen. Es besteht aus nicht brennbaren Materialien, so dass es nicht durch ein Feuer verbrannt werden kann. Es hält einem Erdbeben der Stärke 9.0 und einem Tornado der Stärke F5 stand. Der Bau kostet nur 30% mehr als das andere Haus, aber die Differenz wird sich in 5 Jahren auszahlen. Und es ist ästhetisch ansprechend.
Die GUI ist wie das äußere Erscheinungsbild eines Hauses. Ein Benutzer kann Schönheit in einer GUI erkennen, genau wie er ein schönes Haus schätzen kann. Aber vielleicht noch wichtiger ist, dass die wahre Schönheit des Designs in beiden Häusern und Programmen die Dinge sind, die für die Uneingeweihten unsichtbar sind, die aber wichtig oder nett sind, unabhängig davon.
quelle
Denken Sie an ein Auto.
Die meisten von uns schauen auf das Auto und können nur die Leiche sehen. Wenn jemand ein paar Dellen repariert und das Auto neu lackiert, sieht es viel schöner aus. Es ist im Grunde das gleiche Auto, aber das ist alles, was wir sehen.
Ein Mechaniker öffnet das Auto und schaut auf den Motor. Sie sehen, wie gut dieser Motor ist. Sie sehen, dass alles so angeordnet ist, dass es leicht zu erreichen, zu warten und zu bearbeiten ist. Sie sehen die Teile und wissen, wie gut sie gestaltet waren. Für einen erfahrenen Mechaniker wird der Motor eines gepflegten Autos von hoher Qualität zur Schönheit. Sie können Ihnen nicht erklären, was es schön macht, aber ihre Vorstellung von Schönheit wird sich wahrscheinlich in geringeren Wartungskosten, einer längeren Lebensdauer des Autos und einer besseren Leistung niederschlagen. All dies trägt zum Wert dieses Autos bei, auch wenn Sie es nicht sehen können.
Wenn Sie sich eine Website oder eine Anwendung ansehen, sehen Sie sie wie die meisten von uns, die Autos sehen. Wenn ich Code betrachte, sehe ich ihn wie der Mechaniker den Motor des Autos. Sie können die Schönheit dieses Codes nie so erleben wie ich, er ist für Sie buchstäblich unsichtbar. Aber diese Schönheit ist genauso wichtig wie die Schönheit des Mechanikers. Es bestimmt, wie gut die Software läuft, welche Probleme sie haben wird, wie einfach die Software verbessert werden kann und so weiter. All dies trägt zum Wert dieser Software bei, auch wenn Sie sie nicht sehen können.
quelle
Der gesamte vorhandene Code ist erforderlich und bedarf keiner Erläuterung.
quelle
Ich würde mich auf Poesie beziehen:
Ein gut geschriebenes Gedicht fühlt sich anders an als ein Auszug aus einem schlecht übersetzten Handbuch zum gleichen Thema.
quelle
Bei Codierungsproblemen geht es um Konzeptualisierung, sodass schöner Code eine bemerkenswerte Konzeptualisierung des Problems darstellt.
Zum Beispiel gefällt es uns, wenn ein Problem auf ein bereits gelöstes Problem reduziert werden kann und Einblick in die Art des Problems selbst gewährt wird .
Manchmal kann eine Neukonzeptualisierung des Problems es so einfach erscheinen lassen; Wir sprechen von eleganten Lösungen, die einfache Tricks erfordern, die eine schwierige Aufgabe vereinfachen.
Für mich ist der Quicksort ein schönes Beispiel: Wählen Sie ein zufälliges Element aus einem Array aus und vergleichen Sie dann jedes andere Element im Array damit. Wenn die Zahl kleiner ist, lege sie in Stapel A; Wenn die Zahl größer ist, legen Sie sie in Stapel B. Nun muss aufgrund der Dreiecksungleichheit kein Element in Stapel A mehr mit einem Element in Stapel B verglichen werden .
quelle
Erinnert mich daran:
Quelle: XKCD - LISP
quelle
Kein nicht-trivialer Code kann perfekt sein, da perfekter Code das gleichzeitige Erfüllen von Zielen erfordert, die häufig in Konflikt stehen. Schöner Code gleicht daher alle wichtigen Attribute für die jeweilige Aufgabe perfekt aus und kommt der gleichzeitigen Erfüllung aller dieser Attribute näher, als die meisten dies für möglich halten. In keiner bestimmten Reihenfolge:
quelle
Jackson Pollock-Bilder sind ein Beispiel für etwas, das für manche schön ist und für andere Kauderwelsch ist.
quelle
Wenn die Person gut mit Mathematik vertraut ist, mag ich es, schönen Code mit einer eleganten Lösung für ein Problem zu vergleichen.
quelle
Einige Aspekte eines guten Codes sind:
quelle
Für mich sind die Sprachen meine Werkzeuge.
Und wie jeder Handwerker bevorzuge ich, dass sich meine Werkzeuge in neuwertigem Zustand befinden.
Je besser der Zustand des Codes in Bezug auf Klarheit des Konzepts, Wartbarkeit und Lesbarkeit. Je besser der Code.
Das Lesen von gut geschriebenem Code ist für mich wie das Öffnen einer Toolbox mit gut gestalteten Tools.
Ich habe diese Analogie einige Male mit Erfolg angewendet. Insbesondere Menschen mit einem eher praktischen oder künstlerischen Hintergrund scheinen das Konzept des sauberen / schönen Codes auf diese Weise zu verstehen.
quelle
Ich denke es kommt darauf an, was du mit schönem Code meinst.
Für mich ist Code schön, wenn er lesbar ist. Abgesehen von möglichen Problemen mit Programmierkonzepten konnte ein Laie zumindest auf hoher Ebene lesen und verstehen, was der Code tut.
Wie einige andere Antworten bereits besprochen haben, kann Code auch in dem Sinne schön sein, dass er durch die Kombination einiger einfacher Konzepte eine komplexe Funktionalität erzielt. Ich bin nicht sicher, welche Art von Analogie am besten geeignet ist, um dies einem Nicht-Programmierer zu erklären. Es hängt vom Laien ab. Denkbar sind Puzzle-Spielzeuge wie der NeoCube .
quelle
Meiner bescheidenen und persönlichen Meinung nach ist schöner Code wie ein gutes Romanbuch:
quelle
Es ist wie in einem schlanken Unternehmen, in dem jeder seine Rolle kennt, es ist einfach herauszufinden, wer in was gut ist, und es gibt keine Doppelarbeit
Vs.
In Büroräumen, in denen die Mittelmäßigkeit groß geschrieben wird, haben drei Manager nichts Besseres zu tun, als Sie über TPS-Berichte auf dem Laufenden zu halten. Die! @ # $ Ing FAX-MASCHINE FUNKTIONIERT NIE !!! und jeder Mitarbeiter kann nur ungefähr 15 Minuten Arbeit pro Woche erledigen. Ein Angestellter könnte dort nicht einmal mehr technisch arbeiten, weil jemand vergessen hat, ihn zu entlassen (es ist schwer zu sagen, weil niemand effizient arbeitet und es schwer zu bewerten ist, was er zu erreichen versucht). Und um etwas Praktisches zu erreichen, muss man sich in einem absurd überkomplizierten System zurechtfinden, über das jemand gelesen und gedacht hat, dass es in seinem Lebenslauf ordentlich aussieht, obwohl es ein Problem, das er hatte, nicht wirklich löst.
quelle
Es gibt keinen "schönen Code", es gibt "elegante Algorithmen" und "elegante Designs". Design kann von Nicht-Programmierern verstanden werden.
Ich hasse Programmierer, die über "schönen Code" streiten, weil sie auf die eine oder andere Weise entweder nicht wirklich wissen, wie ein Interpreter oder ein Compiler ihn verarbeiten und was die Maschine tun wird, also ist es eher so, als ob Kinder seiner Mutter zeigen, wie es geht Wundervoll ist seine Geschichte, aber wirklich nicht.
quelle
Erklären Sie den Menschen, warum ein schönes Bild schön ist? Nein. Sie zeigen ihnen das Bild (weil ein Bild mehr als 1000 Wörter sagt). Das Beste ist also, ihnen ein kleines Stück Code zu zeigen, das wirklich elegant, schön und perfekt ist (und vielleicht als Vergleich, wie Joe Average es codiert hätte).
quelle