Wie können Sie einem Nicht-Programmierer „schönen Code“ erklären? [geschlossen]


44

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.


12
Können Sie einem Programmierer schönen Code erklären, ohne den Code zu zeigen? Die Beschreibung selbst ist eine Kunst.
Kojiro

9
Wenn wir hier eine gute Idee haben, kann ich sie vielleicht verwenden, um einem Nicht-Mathematiker einen schönen Beweis zu beschreiben.
David Thornley

Ein schöner Code kann derjenige sein, der die einfacheren und weniger Ideen verwendet, während er die Arbeit korrekt erledigt. Ironischerweise kann die bisherige Aufgabe, einfache Ideen zu finden, eine komplexe Aufgabe sein, und das bewundern wir. - Entschuldigung, ich kann im Moment keinen Weg finden, dies jemandem auf natürlichere Weise zu erklären.
LatinSuD

Schöner Code ist, wenn Sie Ihre IDE-Schriftart auf Comic Sans einstellen. Seufzer
Kirk Broadhurst

Antworten:


88

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.


19
Diese Konstruktionsanalogie ist perfekt!
Daniel Vandersluis

1
+1 @ user21007: Vor langer, langer Zeit war ich Informationsarchitekt für große Websites - jeder versteht die Konstruktionsanalogie und das Konzept von Systemen, die einfach funktionieren und sich richtig anfühlen.
Fehler

1
Gute Analogie für Produkte mit GUIs. Nicht so gut für Frameworks und Bibliotheken.
Den


4
Ich habe die Sprachanalogie in der Vergangenheit oft benutzt: "Ich arbeite mit diesem hässlichen Code ..." "Warte, was meinst du mit hässlich?" "
Siehst

28

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.


11

Der gesamte vorhandene Code ist erforderlich und bedarf keiner Erläuterung.


2
@zdan: Ich würde dagegen sagen, dass diejenigen, die es schön finden, das erforderliche Wissen haben (daher in den Augen des Betrachters). Außerdem clever! = Schöne IMO.
Steven Evers

2
@zdan: Wenn es so viele Erklärungen erfordert, ist es kein "schöner Code", sondern ein "cleverer Hack".
Mason Wheeler

1
Die FFT ist ein sehr schlauer Hack, aber man kann es auf keinen Fall als schön bezeichnen.
Kyte

1
Ich stimme SnOrfus größtenteils zu. Für mich muss schöner Code jedoch nicht nur notwendig, ausreichend und selbsterklärend sein, sondern sich auch subjektiv perfekt und leicht anfühlen. Ich glaube, dass viel Code die von SnOrfus offen gelegten Kriterien qualifizieren könnte, sich aber auf andere Weise recht umständlich oder unvollkommen anfühlt. Ich würde so einen Code schön nennen.
Asoundmove

1
Ich denke, die Idee von "etwas auf das Wesentliche reduziert, aber nicht mehr" ist auf dem richtigen Weg. Allerdings würde auch etwas, das nicht zu warten ist und in der falschen Sprache für die Aufgabe geschrieben ist, zu dieser Definition passen. Außerdem ist es wahrscheinlich, dass die meisten Aufgaben, die zu Ihrer Definition passen, auch trivial sind, da keine Erklärung erforderlich ist. Ich glaube nicht, dass "Hello World" als schön bezeichnet werden kann.
user21007

5

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.


Das war auch mein Gedanke, aber nicht jeder mag oder versteht Poesie. Mir kam auch die Musik in den Sinn: gutes Lied gegen schlechtes Lied, aber das ist auch ziemlich subjektiv.
Netzteil

Was sind die ... 25 Interfaces +25 Klassen, die alle von abstrakten Klassen erben? Ich wollte nur eine rote Schubkarre. Und vielleicht ein paar Hühner.
Erik Reppen

5

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 .



4

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:

  • Lesbarkeit
  • Prägnanz
  • Effizienz
  • Flexibilität
  • Eindeutigkeit
  • Robustheit
  • Sicherheit / Idiotensicherheit
  • Vollständigkeit
  • Konsistenz
  • Benutzerfreundlichkeit (für APIs)

2

Jackson Pollock-Bilder sind ein Beispiel für etwas, das für manche schön ist und für andere Kauderwelsch ist.


Hmmmm ... ich fühle es nicht.
Dynamische

Programmieren ist mehr Handwerk als Kunst (oder Wissenschaft). Nicht, dass ich auch klopfe.
Erik Reppen

1

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.


1

Einige Aspekte eines guten Codes sind:

  1. Es hat viele kleine Details , die alle in die gleiche Richtung weisen
  2. Es ist einheitlich aufgebaut , wobei jeder Teil dem gleichen Muster folgt
  3. aber es wiederholt sich nicht , stattdessen ist jeder Teil anders
  4. Es lässt auch kein Verhalten zu , das als ungültig angesehen wird
  5. es hat die kleinstmögliche Anzahl verschiedener Zustände
  6. Sie können das gesamte Verhalten des Codes verstehen, indem Sie Funktionsprototypen lesen
  7. Es hat keine Nebenwirkungen
  8. Die Ausführung wird garantiert gestoppt
  9. Es werden keine erweiterten Funktionen verwendet, die in Programmiersprachen verfügbar sind
  10. es ist nicht zu komplex im Vergleich zu der Komplexität des Problems, das es löst
  11. Es enthält keine Fehler oder undefiniertes Verhalten
  12. Es kann mit Compilern verschiedener Hersteller kompiliert werden
  13. Es gibt keine Abhängigkeiten zu nicht verwendetem Code

0

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.


0

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 .


0

Meiner bescheidenen und persönlichen Meinung nach ist schöner Code wie ein gutes Romanbuch:

  • Sie können es von Anfang bis Ende lesen / Sie sollten nicht zu zukünftigen Seiten eines Buches springen müssen, um die aktuelle Seite zu verstehen.
  • es gibt keine unnötigen Wiederholungen / ein Buch ist irgendwie langweilig, wenn es immer die gleichen Dinge sagt.
  • Die Absicht jedes Teils ist fast jedes Mal offensichtlich / Sie sollten nicht immer ein Wörterbuch an Ihrer Seite haben müssen, um ein Buch zu lesen (es sei denn, es handelt sich um Gedichte / Code Golfing xD).
  • Es ist in Unterkonstruktionen von erschwinglicher Größe und Komplexität (Module, Funktionen, Anweisungen usw.) organisiert. Es enthält nicht zu viele 'Verschachtelungen' / Kapitel, Absätze und Sätze sind richtig ausgewogen. Es werden nicht zu viele Ebenen der Satzunterordnung usw. verwendet.
  • es ist auf ästhetische Weise angenehm für das Auge (schön eingerückt, Blöcke richtig abgegrenzt usw.) / wie ein Buch mit einem richtigen Satz.

0

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.


-1

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.


-1

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).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.