Verleitet die Mächtigkeit der Sprache C++ dazu es kompliziert zu machen?



  • So dass man am Ende wesentlich mehr Zeit in den Code reinstecken muss, als man ursprünglich geplant hatte oder hilft die Mächtigkeit der Sprache eher dabei, einen kürzeren Weg zu finden und somit das Gegenteil zu erreichen?

    Wie sind hier so eure Erfahrungen zu dem Thema?
    Grob gesagt könnte man die Frage auch unter einer "Verrennt ihr euch in C++" Frage zusammenfassen

    Immerhin ist es ja so, viele Wege führen zum Ziel. Bei der Software Entwicklung und dem Programmieren generell gilt das umso mehr. Es gibt dutzende Ansätze und hunderte Ideen und wenn man mit dem Weben anfängt, dann beginnt man Entscheidungen zu treffen und abzuwegen, aber wie oft wählt ihr rückblickend betrachtet die richtige bzw. falsche Wegfindung und welche Rolle spielt hier bei euch die Mächtigkeit der Sprache C++ bei der Suche nach der richtigen Wegfindung?

    Oder um es mal allgemein theoretisch zu formulieren.
    Die beste Programmiersprache wäre die, die den Programmierer dazu verleitet oder ihn führt immer eine der besten Wege zu finden.


  • Mod

    Verleitet? Definitiv ja. Aber macht man es tatsächlich? Ich jedenfalls habe genug Selbstdisziplin, dem Ruf nicht zu folgen. Dafür tobe ich mich hier von Zeit zu Zeit im Forum aus und sortiere drei Zahlen mittels TMP-Sortiernetzen oder ähnliches.



  • Mir fehlt da die Disziplin vollkommen. Deswegen bin ich mit rein objektorientierten Sprachen wie Java deutlich produktiver.



  • Ich denke, das ist ein Prozess. Erst fängt man in seinem Programmiererleben mit ganz einfachen Dingen an. Dann neigt man ggf zum Overengineering. Und dann lernt man wieder die einfachen Dinge zu schätzen.

    Das wurde auch mal schön scherzhaft mit Hello-World Programmen bebildert, die von Programmierern in verschiedenen Entwicklungsstadien kommen. Leider lässt sich danach so schlecht suchen. Ich fand's aber lustig. Der Gag ist jedenfalls, dass es mit einer extrem kurzen und einfachen "Hello World!"-Implementierung anfängt und wieder aufhört und man zwischendurch overengineerte Monster Mit Java Reflections und vielen abstrakten Klassen zu sehen bekommt.





  • Oberflächlich könnte man denken ja, aber Overengineering (wenn es das denn ist, oder Spieltrieb) kann man (und tut man) auch in anderen Sprachen ausleben. Vielleicht ist es umgekehrt so, dass C++ Leute, die es gerne kompliziert lieben, anzieht.



  • Meiner Erfahrung nach ist es genau umgekehrt: Die Mächtigkeit von C++ erlaubt es mir, viele Dinge einfacher zu lösen als in anderen Sprachen...



  • mMn. ist das, was in C++ als idiomatisch gilt, ziemlich komplex.
    C++ lässt sich eben auf 100000 Arten programmieren und für jeden Fall gibt es mehrere beste Wege und tausend schlechte Wege.

    In Java rattert man Design-Patterns runter und gut.



  • std library und boost verleiten zum komplizierten



  • Viele Sachen kann man mit den sprachlichen Mitteln viel einfacher ausdruecken als in anderen Sprachen, aber es passiert mir schon oefters, dass ich etwas von vornherein generisch mache, wenn es ueberhaupt nicht noetig ist und es nur eine Instanziierung ueberhaupt gibt und ich mich dann mit schwierigen Template-ausdruecken und fuerchterlichen Fehlermeldungen herumschlagen darf.



  • Es kommt auf die Probleme an, die man lösen will. Z.B. habe ich wegen RAII in C++ weniger Fehlerquellen, als z.B. in Java (mit dem ich täglich zu tun habe).
    Dann gibt es aber Probleme, die ich in Java einfacher lösen kann, und es trotzdem funktioniert.

    Als ich damals von TMP erfahren hatte, versuchte ich krampfhaft TMP einzusetzen oder zumindest Probleme dafür zu finden. Das ist natürlich total bekloppt. Weil es mich nicht weiter gebracht hatte.

    Disziplin ist es nicht, die man braucht. Man braucht sehr viel Selbstbewusstsein und Ar*** in der Hose, um drüber zu stehen, das man halt etwas in C++ einfach einfach gelöst hat.



  • volkard schrieb:

    Vermutlich meinste
    http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html

    Das ist Köstlich.
    Ja in der Richtung "overengineered" könnte man das auch betrachten.



  • Ich finde dass SFML ein gutes Beispiel für schönes C++ ist. Klar und sauber.



  • Ich denke vor allem TMP und Boost verleiten Neulinge zum overengineering.



  • std__boost schrieb:

    std library und boost verleiten zum komplizierten

    Dieser Post ist nicht ausser Acht zu lassen. Statt einer einfachen for -Schleife tendiert man zu std::generate und irgendeinem lokalen Funktor oder einem Lambda. Lesbarer oder "besser" finde ich das nicht. Wobei ich gestehen muss, dass ich als Hobby-Programmierer auch dazu tendiere, kleine Dinge fürchterlich zu overengineeren. Zumindest macht es Spass. 🕶



  • asfdlol schrieb:

    std__boost schrieb:

    std library und boost verleiten zum komplizierten

    Dieser Post ist nicht ausser Acht zu lassen. Statt einer einfachen for -Schleife tendiert man zu std::generate und irgendeinem lokalen Funktor oder einem Lambda. Lesbarer oder "besser" finde ich das nicht.

    "Effective STL" ist ein Buch, wo der Autor einem Seite um Seite einhämmert, daß man ja keine einfachen Schleifen mehr benutzen darf.



  • Tyrdal schrieb:

    Ich denke vor allem TMP und Boost verleiten Neulinge zum overengineering.

    Das liegt aber eher am Neuling als an Boost.

    Boost selber ist "over-engineered", damit man das als Benutzer von Boost nicht machen muss.

    asfdlol schrieb:

    std__boost schrieb:

    std library und boost verleiten zum komplizierten

    Dieser Post ist nicht ausser Acht zu lassen. Statt einer einfachen for -Schleife tendiert man zu std::generate und irgendeinem lokalen Funktor oder einem Lambda. Lesbarer oder "besser" finde ich das nicht

    Ich sehe das ganz anders. Statt einem komplizierten for -Statement tendiere ich zu fertigen Algorithmen wie generate . Bei find , remove und partition ist der Vorteil offensichtlicher.



  • TyRoXx schrieb:

    Bei find , remove und partition ist der Vorteil offensichtlicher.

    Bei find will man üblicherweise die Findeposition weiterverarbeiten, da bietet sich eine Funktion an. Die hat nen guten Zweck und nen passenden Namen. remove und partition auch. generate ist schon gelegentlich fraglich.
    Bevozugst Du auch die Ausgabe als copy auf ostream-Iteratoren?



  • TyRoXx schrieb:

    Tyrdal schrieb:

    Ich denke vor allem TMP und Boost verleiten Neulinge zum overengineering.

    Das liegt aber eher am Neuling als an Boost.

    Tja der Neuling denkt halt das muss so und das ist meist nicht der Fall.



  • Worin liegt bei dieser Frage das Problem?

    Mit Ausnahme von ASSEMBLER und vielleicht noch des alten BASIC ist jede
    Programmiersprache in ihren Möglichkeiten komplex. Solange man nicht alles
    voll versteht oder braucht, benutzt man es nicht. Oder anders gesagt, man
    verwendet die komplexeren Dinge erst dann, wenn man darin einen Vorteil sieht.

    Als Führerscheinneuling setze ich mich auch nicht gleich in einen Formel1-Rennwagen!


Anmelden zum Antworten