Die Entwicklung zurück



  • Decimad schrieb:

    Das soll jetzt aber nicht von der Bitte nach Erfahrungsgeschichten ablenken, mal von anderen in diesem Belang zu hören würde mich freuen 😉

    Na, dann will ich auch mal meinen Senf dazu geben. Der Bereich der Messdatenerfassung ist mir auch nicht ganz fremd, ich arbeite im Bereich der Automatisierungstechnik und meine privaten Projekte sind meist kleinere Experimente, um neue Ideen erst mal reifen zu lassen.

    Decimad schrieb:

    Ich würde mich an dieser Stelle sehr über Geschichten aus eurem Leben freuen, von wachsenden Projekten, von Entwicklungen euers Stils währenddessen,
    [...]

    Entwickelt ihr auch die größten Anwendungen strikt nach Andrescu, könntet ihr euer Bildverarbeitungsprogramm zu einem Wordprozessor machen, wenn ihr nur die Traits-Klassen auswechselt?

    Du sprichst da etwas an, was der Grund ist, warum ich hier nur sehr selten schreibe. Ich habe C++ zu Zeiten der ersten Auflage vom Stroustrup gelernt, meine Designs sind auch heute noch vom damals sehr neuen Buch "Design Patterns" geprägt. Auch wenn ich heute viele C++11 Konstrukte verwende, würde ich meinen C++ Stil eher als konservativ bezeichnen. Ich habe auch keine Ausgabe des C++ Standards und schaue auch nicht nach, ob das was ich tue der "reinen Lehre" entspricht.

    Allerdings habe ich auch mit C# und etwas mit F# zu tun, Bücher zu F# wie "Real World Functional Programming" haben meinen aktuellen C++ Code sicher mehr beeinflusst als Andrescu.



  • Bis jetzt wurde noch jedes größeres Projekt unwartbar. Auch du wirst nicht drum herum kommen.



  • Vorneweg:

    Bis jetzt wurde noch jedes größeres Projekt unwartbar. Auch du wirst nicht drum herum kommen.

    So wie ich das sehe, hast Du die Frage nicht kapiert. Hat OP die Wartbarkeit von großen Architekturen hinterfragt? Lies den OP nochmal kritisch auf Deine Interpretation dessen oder lass es - aber das wäre mein Vorschlag.

    @OP:
    Ich kann gut nachvollziehen, was Du meinst... und dass hier nur so halbgare Kommentare kommen, ist für mich persönlich immer irgendwie der Ausdruck davon, dass hier jeder weiß, wie er die feinen Facetten von C++ perfekt nutzt - aber niemals das alles auch in einem großen Projekt eingesetzt hat. Vielleicht wissen das manche Leute besser, dann sind sie aber nicht wirklich dazu fähig auszudrücken, was ihre Projekte erweiterbar und änderbar macht - und seien wir ehrlich, genau das ist die Frage. Ein:

    Das Projekte umkippen, ist normal. Je weniger Erfahrung der Architekt hat, desto sicherer geschieht es. Dann muss man es halt neu aufsetzen und diesmal nicht so schlimm frickeln, wie Du es anscheinend nur noch machst. So fährste gegen eine Wand, alles wird immer schwieriger zu warten, bald wehrt sich das Projekt spürbar gegen jede geänderte Zeile Code.

    beantwortet das nicht Mal ansatzweise. Wenn er so viel frickelt, woran könnte das denn liegen? "Kann man so allgemein nicht beantworten." Tut mir Leid, dann bist Du für mich kein ansatzweise guter Systemarchitekt. Hey, ich bin auch keiner, keine Frage. Und Deine Leistungen in Algoritmik bewundere ich. Aber ich kenne gute Architekten von großen Firmen und die hätten hier klare Antworten parat, kein schwammiges Gelaber oder kritikbezogene Antworten - schlecht reden kann jeder alles, vollkommen uninteressant und nutzlos.

    Du sprichst da etwas an, was der Grund ist, warum ich hier nur sehr selten schreibe. Ich habe C++ zu Zeiten der ersten Auflage vom Stroustrup gelernt, meine Designs sind auch heute noch vom damals sehr neuen Buch "Design Patterns" geprägt. Auch wenn ich heute viele C++11 Konstrukte verwende, würde ich meinen C++ Stil eher als konservativ bezeichnen. Ich habe auch keine Ausgabe des C++ Standards und schaue auch nicht nach, ob das was ich tue der "reinen Lehre" entspricht.

    Okay, wieder Mal würde ich hier gerne wissen: Wie viele 100kloc haben Deine Projekte. Sind es <100kloc... bei allem Respekt, aber das, was OP fragt, kannst Du basierend auf den Projekten (sprich: basierend auf praktischer Erfahrung, theoretisch womöglich, aber davon sah ich hier nichts) nicht beantworten.

    Schaut man sich einmal Bibliotheken wie QT an, die zwar vielfach kritisiert werden aber für große Projekt eigentlich schon eine gut organisierte Architektur darstellen, so stellt man fest, dass C++11 oder auch Templates so gut wie gar nicht genutzt werden. Bei aller Kompetenz, die hier rumschwirren mag: Wenn es keine großen Projekte gibt, die C++ sauber umsetzen, wer will sich da denn anmaßen, dass C++ gut geeignet für große Projekte ist bzw. all die feinen Sprachfunktionen, die man im Detail nutzen möchte/sollte, sich dafür überhaupt eignen? Ich habe noch nichts dazu gelesen, wie sich jemand gegenüber dieser Kritik stellt.

    Ich selber liebe C++ und glaube auch, dass es Ansätze für gute, große Architekturen gibt. Gesehen habe ich das aber noch nicht - falls OP hier irgendwas anderes meint, ziehe ich all meine Aussagen zurück, weil mir nichts ferner liegt als einen Flamewar o.ä. zu starten.

    Aber könnte jemand Mal von Floskeln und gedankenlosen Schlechtredereien wegkommen und tachless reden? Oder weiß es einfach keiner besser? OPs Wunsch nach Antworten war der hier:

    Ich würde mich an dieser Stelle sehr über Geschichten aus eurem Leben freuen

    Super! Würde ich auch allzu gerne wissen! DAS hätte Wert!!



  • hier sind fast ausschließlich hobbyprogrammierer unterwegs, deswegen wirste hier nicht viel erfahren können



  • Ist leider wieder OT: Ein wenig Zurückbesinnen wie nn und Du das machen, das ist gut. Die C++-Gemeinde ist voller Spaß am Ausloten, was überhaupt geht, und verliert dabei den Bezug zur eigentlichen Problemlösung.



  • kdz schrieb:

    hier sind fast ausschließlich hobbyprogrammierer unterwegs, deswegen wirste hier nicht viel erfahren können

    Genau. Die Leute hier haben viel zu viel Zeit. Hacker die posten, hacken nicht und wenn, dann nur an Mini-Hobbyprojekten. Leute mit Ahnung von grossen Projekten lernen auch nicht den C++-Standard auswendig, sondern überlegen sich sprachunabhängig eine Architektur und lassen sie von Codemonkeys ausprogrammieren. Die interessieren sich nicht für Streams, Container und Policies. Das Ziel ist, eine Codebasis hinzuklatschen, die von Vollpfosten gewartet werden kann.

    Ich hatte einmal eine Boost.MPL Typ-Liste in freier Wildbahn aufgespürt. Da war schönes C++ im Stil von diesem Forum dabei. Die Komponente wurde aber später in C# neu geschrieben.



  • Hi,

    ich arbeite an einem Projekt mit 160k Zeilen welches intensiv C++ Features einsetzt. Ohne templates wären es wahrscheinlich 2-3x so viele.

    Ich würde mich an dieser Stelle sehr über Geschichten aus eurem Leben freuen, von wachsenden Projekten, von Entwicklungen euers Stils währenddessen, von Fehlern und Rückschritten.

    Ich arbeit an einer Maschinenlern Bibliothek. Unser Ziel ist nicht weniger als "One-for-all". Das heißt, wir wollen alles anbieten und müssen damit rechnen, dass die User eine große Palette von verschiedenen Anwendungen haben. Das heißt wir müssen sowohl mit spärlichen als auch mit dichten Daten effizient zurecht kommen (fast jeder Algorithmus kommt mit einem template parameter für den Typ der Daten), manche Algorithmen auch mit beliebigen Datentypen. Zudem müssen alle Algorithmen flexibel implementiert sein, weil wir selbst natürlich Wissenschaft damit betreiben. Das heißt, dass ein Algorithmus nicht nur aus einem Teil besteht, sondern aus mehreren, die dann aus einer Toolbox beliebig kombiniert werden können. Das alles über virtuelle (templatisierte) interfaces hinzukriegen war in der Tat schwer.

    Die misten Interfaces haben ine lange Palette von Änderungen hinter sich und ich habe mit SIcherheit jede Klasse 3x neu implementiert. Den Luxus haben wir uns einfach gegönnt 🙂

    Entwickelt ihr auch die größten Anwendungen strikt nach Andrescu, könntet ihr euer Bildverarbeitungsprogramm zu einem Wordprozessor machen, wenn ihr nur die Traits-Klassen auswechselt?

    Quatsch. Das skaliert nicht. Auch wenn ich sehr fortgeschrittene Sprachmittel verwende, habe ich die Erfahrung gemacht, dass normale User mit Traits extreme Probleme haben. Da blicken die nicht durch. Das selbe Interface dargestellt mit vituellen Klassen ist kein Problem, aber sobald Traits ins Spiel kommen, gehen die Rolladen runter. Komplizierte Dinge müssen einfach aussehen, sonst schaltet sich das Gehirn aus.

    Ich habe vor kurzem eine Komponente einm Dumb-Down unterzogen, weil der Supportaufwand für mich einfach zu hoch wurde. Jetzt kann sie eben weniger.

    Was ist passiert, als eure Projekte mit euch, an euch oder ihr an ihnen wuchst?

    Mein Stil wurde ruhiger. Ich mache zwar noch immer komplizierte Dinge, aber das äussere Interface muss einfach sein. Es gibt Dateien, wo ein normaler User nicht rein schauen darf, weil er dann sofort in Ohnmacht fällt. Aber die sind gut versteckt ;). Ich reviewe mich inzwischen auch selber, schaue meinen alten Code an und überlege, ob ich das vielleicht einfacher, mit weniger Template-Overhead lösen kann.



  • Danke Otze, das klingt doch nach einem spannenden Feld und auch danach, als hättest Du da sehr viel Freude 😉
    Das beobachte ich an mir selber auch, dass ich inzwischen ein extrem ruhiges Code-Bild bevorzuge, ich kann mich also sozusagen auch selber kirre machen 😉



  • Eisflamme schrieb:

    Okay, wieder Mal würde ich hier gerne wissen: Wie viele 100kloc haben Deine Projekte. Sind es <100kloc... bei allem Respekt, aber das, was OP fragt, kannst Du basierend auf den Projekten (sprich: basierend auf praktischer Erfahrung, theoretisch womöglich, aber davon sah ich hier nichts) nicht beantworten.

    Privat, wie gesagt, eher klein. Um neue Dinge auszuprobieren.

    Beruflich, im Hauptprojekt ca. 500kloc C# und 2600kloc C++, 1998 als einzelner Entwickler begonnen (natürlich ohne C#), mittlerweile haben 14 Leute dazu beigetragen, aktiv arbeiten wir mit 6 angestellten Entwicklern daran, aber nicht ausschliesslich. Angefangen in VS97, von Version zu Version gehoppelt, mittlerweile 2012. (Ja, ich bin seit dieser Zeit hier im Forum, habe mich erst viel später angemeldet.)

    Eisflamme schrieb:

    bei allem Respekt, aber das, was OP fragt, kannst Du basierend auf den Projekten (sprich: basierend auf praktischer Erfahrung, theoretisch womöglich, aber davon sah ich hier nichts) nicht beantworten.

    Bei allem Respekt: Das kannst du nicht beurteilen.

    Eisflamme schrieb:

    Super! Würde ich auch allzu gerne wissen! DAS hätte Wert!!

    Again, bei allem Respekt: Nein, hier geht es um primär um Kritik, man findet in diesem Forum nützliche Dinge, aber zu sehr beteiligen sollte man sich nicht.



  • otze schrieb:

    das äussere Interface muss einfach sein.

    Genau. Und der Code innen sollte auch einfach sein, irgendwann muss es vielleicht mal ein anderer warten. Viele hier meinen, wie toll sie sind, wenn sie komplizierten Code schreiben können, aber eigentlich ist es viel schwieriger einfachen Code zu schreiben, den jeder versteht.



  • jap schrieb:

    otze schrieb:

    das äussere Interface muss einfach sein.

    Genau. Und der Code innen sollte auch einfach sein, irgendwann muss es vielleicht mal ein anderer warten. Viele hier meinen, wie toll sie sind, wenn sie komplizierten Code schreiben können, aber eigentlich ist es viel schwieriger einfachen Code zu schreiben, den jeder versteht.

    Mir ist es lieber 1k Zeilen hässlichen Code zu schreiben, wenn ich dafür aus 10k Zeilen repetetivem fehleranfälligen Code 2000 Zeilen generellen straight-forward code machen kann. Natürlich benötigt man dann für die 1000 Zeilen jemanden, der sich da mal ein paar Tage eindenkt. Dafür werden aber keine Forschungsergebnisse invalidiert, weil der bugfix nur in einem der 3 if-Zweige eingebaut wurde.



  • nn:
    Sorry, da habe ich mich im Ton vergriffen, das kam gar nicht so rüber, wie ich's meinte. Auf solche Fragen kommen hier immer so flache Antworten von Leuten, bei denen ich eigentlich denke, dass sie an sehr großen Projekten beteiligt sind und daher eigentlich die Fragen auch beantworten könnten, es aber aus mir unersichtlichen Gründen nicht tun.

    Aber damit warst Du gar nicht gemeint und dein Beitrag danach war ja auch sehr interessant, also verzeih bitte. 🙂



  • otze schrieb:

    jap schrieb:

    otze schrieb:

    das äussere Interface muss einfach sein.

    Genau. Und der Code innen sollte auch einfach sein, irgendwann muss es vielleicht mal ein anderer warten. Viele hier meinen, wie toll sie sind, wenn sie komplizierten Code schreiben können, aber eigentlich ist es viel schwieriger einfachen Code zu schreiben, den jeder versteht.

    Mir ist es lieber 1k Zeilen hässlichen Code zu schreiben, wenn ich dafür aus 10k Zeilen repetetivem fehleranfälligen Code 2000 Zeilen generellen straight-forward code machen kann. Natürlich benötigt man dann für die 1000 Zeilen jemanden, der sich da mal ein paar Tage eindenkt.

    Stellt sich nur die Frage, warum einfacher Code länder sein sollte. Die meisten Template- Operatorüberladungslösungen die hier gezeigt werden sind meistens länger als der einfache Code.



  • Hallo!

    Ich fänd's toll wenn dieses "Ein Satz aus dem größeren Zusammenhang eines Posts reißen" und darüber eine hitzige tiefe, aber schmale Ein-Satz-Diskussion vom Zaun zu brechen hier möglichst minimal gehalten wird, da ich einfach darauf hoffe, dass hier vielleicht nochmal eine mitteilungsbedürftige Seele hereinschaut und etwas zum Thema beiträgt! Sowas sieht man bei pseudointellektuellen Boulevard-Talkshows doch schon zu genüge, wir sind doch aber eigentlich besser, oder etwa nicht? 🙂



  • Eigentlich glaube ich, dass die meisten C++ Features und Idiome für Anwendungsentwicklung nicht viel bringen, sondern mehr für Libraries. Die meisten komplizierteren Template Sachen lassen sich z.B. gut anwenden, wenn man Libraries wie std::container oder aufwenigere schreibt, aber bei der normalen Anwendungsentwicklung braucht man sowas eher weniger. Operatorüberladung ist für ne Mathelib ganz nett, aber um Buttons zu nem Dialog hinzuzufügen (zu addieren) eher weniger. Eines der wenigen C++ Idiome, das man öfters verwenden kann ist RAII, aber den Rest braucht man doch selten.



  • Habs schon paar mal in anderen Threads geschrieben. Wir arbeiten an einem Projekt mit 6 Mio Zeilen. Ich selber bin jetzt nicht so der fanatische C++ Fanboy, der versucht alles über Templates oder Streams zu lösen. Solche Sachen (und vor allem Alexandrescu) eignen sich eher für Libraries, da geb ich SoundOfHome völlig Recht. Ich seh jetzt auch keinen wahnsinnig großen Unterschied zwischen C++ und Java/C#, was Softwarearchitekturen angeht. Natürlich würde man vieles eher etwas anders lösen, weil die Sprachen und die zur Verfügung stehenden Sprachmittel unterschiedlich sind, aber bei grundlegende Highlevel Konzepte würde ich nicht viel anders machen. Es kommt auch stark drauf an, was man macht. Wenn man mit C++ hauptsächlich irgendwelche wissenschaftlichen Anwendungen wie Physiksimulationen schreibt, wird die Architektur zwangsweise anders ausschauen, als bei einem "Anwendungsprogramm". Was wir schreiben ist eine Art Anwendungsprogramm und da eignen sich durchaus Konzepte wie DDD, MVC usw. Bei so einem großen Projekt gibts aber auch sehr unterschiedlichen Code. Wenns z.B. darum geht, die Anbindung an verschiedene PDM Systeme zu abstrahieren, bieten sich Templates nicht so wirklich an. Aber wir haben auch Code, um CAD Modelle zu generieren, und da haben wir in unseren grundlegenden Libs durchaus viel Templatecode. Das sind aber Implementierungsdetails, die im großen Überblick keine Rolle spielen würden.
    Insgesamt muss man meiner Ansicht nach also immer beides im Auge behalten, Architekturkonzepte für das ganze Projekt, und Design Patterns/Idiome für die Implementierungen.


Anmelden zum Antworten