Was versteht ihr darunter wenn eine Programmiersprache elegant ist?



  • hjhkjhk schrieb:

    möglichst wenig Befehle, so wie brainfuck oder whitespace

    Hm, wenn Brainfuck noch Funktionen hätte würde ich sagen auf jeden Fall.



  • Auf eine Sprache bezogen hab ich das noch nie gehört.
    Ich kenne das im Zusammenhang mit Programmen/Code-Teilen. Ich nehme an man kann eine Sprache elegent nennen die es einem ermöglicht eleganten Code zu schreiben.

    Und was eleganter Code ist ist Ansichtssache. Für manche ist alles "elegant" was kurz ist, egal wie schwer verständlich, für andere wieder ist es "elegant" wenn es nur einfache klare Konstrukte enthält (und insgesamt nicht zu gross und unübersichtlich ist) etc.



  • Ich sehe es wie hustbaer, dass man die Eleganz nicht auf die Sprache übertragen kann. Man kann nämlich in jeder (Programmier-)Sprache etwas elegant sagen/schreiben oder halt nicht. Die Komplexität der Sprache zu beherrschen und passend einzusetzen ist die eigentliche Kunst.

    Gruß



  • hustbaer schrieb:

    Und was eleganter Code ist ist Ansichtssache. Für manche ist alles "elegant" was kurz ist, egal wie schwer verständlich, für andere wieder ist es "elegant" wenn es nur einfache klare Konstrukte enthält (und insgesamt nicht zu gross und unübersichtlich ist) etc.

    ich finde code elegant, der auf besonders einfache und/oder trickreiche weise eine bestimmte sache macht. also code, der dem durchschnittsprogger auf anhieb nie einfallen würde.
    🙂



  • @~fricky:
    Ich persönlich finde solchen Code oft grauenhaft, nämlich dann wenn er dem Durchschnitts-Programmierer nicht nur nicht einfallen würde, sondern wenn der Durchschnitts-Programmierer ihn nicht verstehen wird.

    Ich finde es elegant wenn man Programme so aufbaut dass 1) man sich viel Arbeit und Komplexität spart und 2) die verwendeten Konstrukte trotzdem einfach und übersichtlich bleiben.
    Code wo sich Mr. Durchschnitts-Programmierer beim Lesen denkt "verdammt, wieso hab ich das nicht schon immer so gemacht".

    Das beste Beispiel was mir gerade einfällt sind RAII Klassen. Oft sieht man diverse Konstrukte wo im Konstruktor einer Klasse an 2-3 Stellen (oder sogar noch mehr) ein "if (!blah) { cleanup(); throw xyz(); }" steht. Grauenhaft, fehleranfällig, unübersichtlich und schlecht zu warten.
    Mit ein paar kleinen RAII Klassen *schwupps* -> der einst unübersichtliche ctor-from-hell schrumpft auf 5 Zeilen ohne irgendwelche Spezialfälle zusammen.
    Sowas ist elegant 🙂



  • hustbaer schrieb:

    @~fricky:
    Ich persönlich finde solchen Code oft grauenhaft, nämlich dann wenn er dem Durchschnitts-Programmierer nicht nur nicht einfallen würde, sondern wenn der Durchschnitts-Programmierer ihn nicht verstehen wird.

    es versteht sich von selbst, dass über so einem code ein fetter kommentar steht, in dem erklärt wird, was da abläuft.
    🙂



  • ~fricky schrieb:

    hustbaer schrieb:

    @~fricky:
    Ich persönlich finde solchen Code oft grauenhaft, nämlich dann wenn er dem Durchschnitts-Programmierer nicht nur nicht einfallen würde, sondern wenn der Durchschnitts-Programmierer ihn nicht verstehen wird.

    es versteht sich von selbst, dass über so einem code ein fetter kommentar steht, in dem erklärt wird, was da abläuft.
    🙂

    Was das Verstehen erleichtern sollte, was gut ist. Trotzdem bevorzuge ich Code der einfach zu verstehen ist - auch ohne Kommentare. Ist halt Geschmackssache. Und jeder definiert den Level ab wo es "zu komplex" ist natürlich selbst nach seinen eigenen Vorlieben, danach was er kennt und auf Anhieb versteht wenn er es sieht, wie gut er analytisch denken kann etc.
    Soll heissen das was ich "einfach, klar und elegant" finde wird ein anderer vermutlich total hirnverbrannt kompliziert finden 🙂



  • ~fricky schrieb:

    hustbaer schrieb:

    @~fricky:
    Ich persönlich finde solchen Code oft grauenhaft, nämlich dann wenn er dem Durchschnitts-Programmierer nicht nur nicht einfallen würde, sondern wenn der Durchschnitts-Programmierer ihn nicht verstehen wird.

    es versteht sich von selbst, dass über so einem code ein fetter kommentar steht, in dem erklärt wird, was da abläuft.
    🙂

    Ich hätte mehr von dir erwartet...

    "Schlauer Code" ist nie elegant, schön oder in sonst einer Form Vorteilhaft.



  • Ich finde eine Programmiersprache elegant, wenn man komplexe Probleme in einer kurzen aber verständlichen Weise formulieren kann.



  • Von den Paar Programmiersprachen, mit denen ich in Berührung gekommen bin, Pascal, C, C++, VHDL, Assembler IA32, finde am elegantesten C.
    - wenig Redundanz, d.h nicht übermässig geschwätzig ;), einfache Sprachkonstrukte
    - von links nach rechts und von oben nach unten lesbar
    - einfache Struktur des Programms
    - unterstützt goto (nein, nein, ist nur ein Scherz 😉



  • abc.w schrieb:

    Von den Paar Programmiersprachen, mit denen ich in Berührung gekommen bin, Pascal, C, C++, VHDL, Assembler IA32, finde am elegantesten C.
    - wenig Redundanz, d.h nicht übermässig geschwätzig ;), einfache Sprachkonstrukte
    - von links nach rechts und von oben nach unten lesbar
    - einfache Struktur des Programms
    - unterstützt goto (nein, nein, ist nur ein Scherz 😉

    C? Das Klammer Monster? O.k.
    Guck dir mal LISP an.



  • ficky du n00b schrieb:

    ~fricky schrieb:

    hustbaer schrieb:

    @~fricky:
    Ich persönlich finde solchen Code oft grauenhaft, nämlich dann wenn er dem Durchschnitts-Programmierer nicht nur nicht einfallen würde, sondern wenn der Durchschnitts-Programmierer ihn nicht verstehen wird.

    es versteht sich von selbst, dass über so einem code ein fetter kommentar steht, in dem erklärt wird, was da abläuft.
    🙂

    Ich hätte mehr von dir erwartet...

    "Schlauer Code" ist nie elegant, schön oder in sonst einer Form Vorteilhaft.

    Lass fricky in Ruhe du Gestalt! 😡



  • ficky du n00b schrieb:

    "Schlauer Code" ist nie elegant, schön oder in sonst einer Form Vorteilhaft.

    naja, aber letzlich definiert jeder für sich 'eleganz' beim programmieren anders. ich finde nun mal das 'wie-was-gemacht-wird' manchmal elegant.

    rüdiger schrieb:

    Ich finde eine Programmiersprache elegant, wenn man komplexe Probleme in einer kurzen aber verständlichen Weise formulieren kann.

    nur tun sich solche sprachen oft mit einfachen dingen schwer.
    🙂



  • ~fricky schrieb:

    rüdiger schrieb:

    Ich finde eine Programmiersprache elegant, wenn man komplexe Probleme in einer kurzen aber verständlichen Weise formulieren kann.

    nur tun sich solche sprachen oft mit einfachen dingen schwer.

    Nur weil du es nicht kannst.



  • bzto schrieb:

    Nur weil du es nicht kannst.

    und weil die sprachen nicht dafür gemacht sind. z.b. kannst ja mal versuchen einen haufen bytes mit sql oder prolog in gray-code oder sowas umzuwandeln. ich will nicht sagen, dass es unmöglich ist, aber man wird sich ganz gut einen abwürgen. damit lassen sich mit solchen sprachen besser (weil elegant) mengenorientierte und logik- aufgaben lösen als z.b. mit C
    🙂



  • ~fricky schrieb:

    bzto schrieb:

    Nur weil du es nicht kannst.

    und weil die sprachen nicht dafür gemacht sind. z.b. kannst ja mal versuchen einen haufen bytes mit sql oder prolog in gray-code oder sowas umzuwandeln. ich will nicht sagen, dass es unmöglich ist, aber man wird sich ganz gut einen abwürgen. damit lassen sich mit solchen sprachen besser (weil elegant) mengenorientierte und logik- aufgaben lösen als z.b. mit C
    🙂

    Naja, hier musst du zwischen allgemeinen und speziellen Sprachen unterscheiden. Sicher können spezielle Sprachen sehr elegant für spezifische Probleme sein. Aber es gibt ja auch allgemeinere Sprachen als Prolog, die sehr elegant sind.



  • Ich finde eine Programmiersprache elegant, wenn ich einfache wie auch komplexe Probleme klar und verständlich formulieren kann. Und zwar so, dass ich keinen Kommentar dazu schreiben muss, was da eigentlich gemacht wird.

    Ein elegantes Programm ist ein Programm wo jeder Durchschnittsprogrammierer beim Lesen sagen würde, er hätte es genau so gemacht.



  • Eleganz (wikipedia):

    Ausdruck von besonderem Stil und Geschmack ...
    ästhetisches Konzept und Ideal, das an Schönheit und Grazie orientiert ist ... herausragende Gestaltung ...
    Schlichtheit, Minimalismus ...

    Erfüllt C++ diesen hohen Anspruch? Vielleicht im Bereich der STL und im Bereich der Performance. Ansonsten findet man eher Mittelmaß, Flickschusterei und hohen Tippaufwand bei C++.



  • Erhard Henkes schrieb:

    Vielleicht im Bereich der STL ...

    schau dir mal den code der stl an. von schönheit, grazie und dergleichen ziemlich weit entfernt, würde ich sagen.
    🙂



  • abc.w schrieb:

    Von den Paar Programmiersprachen, mit denen ich in Berührung gekommen bin, Pascal, C, C++, VHDL, Assembler IA32, finde am elegantesten C.
    - wenig Redundanz, d.h nicht übermässig geschwätzig ;), einfache Sprachkonstrukte

    Aha, aber der Sprachumfang selbst ist redundant. Mir fallen z.B. spontan drei Methoden der Pointer- Dereferenzierung ein (Pointerderf., Array, Arrayanker), die über unterschiedliche Syntaxen nahezu das Gleiche bewirken.

    abc.w schrieb:

    - von links nach rechts und von oben nach unten lesbar

    Ah, noch nichts von der right- to- left- Methode zur Typenauflösung gehört?

    abc.w schrieb:

    - einfache Struktur des Programms

    Ist jetzt wohl nicht eine Eleganz der Sprache.

    abc.w schrieb:

    - unterstützt goto (nein, nein, ist nur ein Scherz 😉

    Besser so. Eine Mehrfachbenutzung von Symbolen für völlig unterschiedliche Operationen trägt natürlich auch gewaltig zur "Lesbarkeit" bei. Dazu ist die Syntax insgesamt sperrig, inkonsistent und nicht von ungefähr gibt es für C Wettbewerbe, in denen darum geeifert wird, das unleserlichste Programm zu schreiben.
    Von berufeneren Geistern als mir ist indes die stiefmütterliche Behandlung von Zeichenketten nicht als Basistyp, sondern in externe Libs ausgelagert bekrittelt worden. Über die Lücken, die undefiniertes Verhalten ergeben, brauchen wir wohl auch nicht weiter zu diskutieren ...

    C ist zweckdienlich, weil es gut skaliert (vom Controller bis zum Mainframe), so weit standardisiert und verbreitet ist, daß Code auf Sourceebene recycelbar wird.
    Aber echt, "elegant" ist was anderes.

    char *(*(**foo[][17])())[];
    

    😃


Anmelden zum Antworten