Yadgar: Arbeitsethos: fühlt ihr euch bei Primitivlösungen gedemütigt?

Hi(gh)!

Neulich beim Datenbankprogrammieren mit PHP... es ging darum, aus (teilweise fehlerhaften) Rohdaten eine in Jahrgänge aufgeteilte Liste von Radiosendungen (konkret: Winfrid Trenklers "Schwingungen" auf WDR, vielleicht kennt das hier noch jemand) mit ihren gespielten Titeln in chronologischer Reihenfolge zu erstellen. Die Listen enthalten drei Spalten: Interpret, Titel, Veröffentlichung (d. h. Titel des Albums oder der Single), darin in Klammern eventuell Angaben zum Veröffentlichungstyp, sofern es sich nicht um ein reguläres Album, sondern z. B. um eine Compilation, einen Sampler oder eine (Maxi-)Single handelt. Der physische Tonträger-Typ bleibt unberücksichtigt, ebenso die Unterscheidung nach Original- und Re-Release, ebenso das (Erst-)Veröffentlichungsjahr.

So weit, so gut (ha! So hieß auch während der längsten Zeit die Titelmelodie von "Schwingungen", ein Titel von Harald Grosskopf von seinem 1980er Album "Synthesist", aber das nur am Rande...)... nun kommen einige Komplikationen hinzu. Der Sammler der Rohdaten hat bei vielen (etwa der Hälfte von insgesamt 470) Sendungen vor, zwischen und nach den regulären Zeilen "Sonderzeilen" mit zusätzlichen Informationen hinzugefügt, für Interviews, Sendungen unter einem besonderen Motto und für die am Ende jedes Jahres (außer 1995, das war das letzte Sendejahr) gesendeten Ergebnisse der alljährlichen Schwingungen-Wahlen.

Prinzipiell sind diese Schwingungen-Wahl-Auswertungssendungen nach folgendem Schema aufgebaut:

Sonderzeile: Schwingungen-Wahlen [Jahr], Auswertung

Bester Titel des Jahres:
3. [Interpret] [Titel] [Veröffentlichung]
2. [Interpret] [Titel] [Veröffentlichung]
1. [Interpret] [Titel] [Veröffentlichung]

Bestes Album des Jahres:
3. [Interpret] [Titel] [Veröffentlichung]
2. [Interpret] [Titel] [Veröffentlichung]
1. [Interpret] [Titel] [Veröffentlichung]

Bester Interpret des Jahres:
3. [Interpret] [Titel] [Veröffentlichung]
2. [Interpret] [Titel] [Veröffentlichung]
1. [Interpret] [Titel] [Veröffentlichung]

Bester Neuling des Jahres
3. [Interpret] [Titel] [Veröffentlichung]
2. [Interpret] [Titel] [Veröffentlichung]
1. [Interpret] [Titel] [Veröffentlichung]

[anschließend eventuell weitere regulär gesendete Titel]

Nun wich Winfrid Trenkler im Laufe der Zeit öfters von diesem Schema ab, die Reihenfolge der Auswertungs-Rubriken änderte sich, es wurden zusätzliche Titel vor Beginn oder mitten in der eigentlichen Auswertung gespielt, es fanden Interviews statt. Bis 1994 war das für mich programmiertechnisch kein Problem, ich konnte den Code des PHP-Ausgabeskripts immer so modifizieren, dass die Abweichungen berücksichtigt wurden, auch wenn das Ergebnis mit seinen vielen if-, else- und switch-Verzweigungen nicht wirklich elegant aussieht.

Bei der Schwingungen-Wahl-Auswertung vom 26.1.1995 war ich dann aber mit meinem Latein am Ende: es wurde zusätzlich während der Wortbeiträge Hintergrundmusik gespielt, und egal, was ich anstellte, die Rückwärts-Zählschleife für die Bestplatzierten brach immer in der dritten Rubrik ab. Ich wusste mir schließlich nicht anders zu helfen, als für diesen einen Tag eine Sonderregelung zu programmieren, die dann nichts anderes enthält als statischen HTML-Code, ohne dass überhaupt auf die Datenbank zugegriffen wird.

Mein Programmiererstolz war ob dieser Primitiv-Lösung zutiefst gekränkt... sollte es nicht Ziel jedes ernsthaften Programmierers sein, die eleganteste (will heißen: logisch konsequenteste) und/oder pflegeleichteste und/oder zur Laufzeit schnellste Lösung zu finden? Statischer HTML-Code in einer Datenbankanwendung erfüllt keine dieser drei Kriterien...

Nun war bzw. ist dieses Schwingungen-Projekt keine kommerzielle Geschichte mit definitiver Deadline (auch wenn ich Stephan Schelle vom Musikzirkus-Magazin versprochen hatte, bis zum 20. Januar 2014 damit fertig zu sein - diesen Termin konnte ich immerhin einhalten), außer einer Konzert-DVD von Klaus Schulze gab es auch keine materielle Belohnung dafür (die Initiative war von mir ausgegangen, da zwar schon 2007 auf musikzirkus-magazin.de eine vollständige Übersicht über alle Sendungen angekündigt war, die Arbeit daran aber nie über die erste Pilotsendung von 1981 hinausgekommen war...).

Trotzdem fühle ich mich mit derart simpel zusammengehauenem "Holzfäller-Code" nicht wohl... wie geht es euch in solchen Fällen? Passiert so etwas professionellen Programmierern überhaupt? Ich stelle mir immer vor, dass Profis selbst unter brutalstem Zeitdruck in 99,9 % aller Fälle die perfekte Lösung hinbekommen, und sei es nach 72 Stunden nonstop und Kokain für mehrere tausend Euro... musste jemand hier schon einmal definitiv vor einem Programmierproblem kapitulieren?

Bis bald im Khyberspace!

Yadgar

P. S. Ach übrigens, die fertigen Listen gibt es auf besagter Seite unter der Rubrik "Schwingungen" (ist leider in Frames programmiert, so dass ich keinen Direktlink angeben kann)...

  1. Ja, so kurz vorm Kapitulieren stand ich oft. Ich habe jedoch IMMER ein Lösung gefunden. Zum Dank dafür haben die mich letztendlich wieder entlassen mit der Begründung, dass es zu lange gedauert hat. Dieser Firma wünsche ich weiterhin viel Glück mit ihrem Scheiß-Code, es ist nur eine Frage der Zeit, bis die auch das Handtuch werfen. Ich wünsche mir, dass ich das noch erleben darf.

    Horst

    1. Mahlzeit,

      nichts für Ungut, aber wenn deine Lösung so aussehen wie deine Ansätze, die du des öfteren hier im Forum kundtunst, kann ich den Auftraggeber verstehen.
      Ich will sicher nicht deine Kompetenz in Frage stellen, nur halte ich deine Herangehensweise oft für überkompliziert und dadurch für absichtlich zeitaufwendig.

      Wie gesagt, ich kann mich nur auf deine Postings hier im Forum beziehen, keine Ahnung, wie deine Arbeit bei einem Auftraggeber aussieht. Deshalb ist das auch keine Wertung von mir :)

      --
      42
      1. hi,

        Ich will sicher nicht deine Kompetenz in Frage stellen, nur halte ich deine Herangehensweise oft für überkompliziert und dadurch für absichtlich zeitaufwendig.

        Es ist genau umgekehrt. Hier ein weiterer Teil meiner Herangehensweise.

        Hast Du Dir mal meine Site angeschaut? Nagut, den Code lege ich nicht offen, aber wenn Du den sehen könntest, wärest Du wahrscheinlich erstaunt darüber, wie wenig Code am Ende langer Überlegungen übrigbleibt, der Core meines Frameworks hat ganze 400 Zeilen, soviel kann ich verraten.

        Im Dialog mit diesem Forum und aufgrund meiner Berufserfahrungen, weiß ich, was draußen los ist. Bei meinen Arbeitgebern habe ich mit meinem KnowHow in sehr kurzen Zeiten Problem gelöst, die Andere Programmierer, die wie Glucken auf _ihrem_ Code sitzen, jahrelang nicht lösen konnten. Die haben von mir Module gekriegt, die es nicht auf CPAN gibt.

        Design Pattern Experience, leider ist das heute nicht mehr gefragt.

        Schöne Grüße ;)

        1. Hi,

          Es ist genau umgekehrt. Hier ein weiterer Teil meiner Herangehensweise.

          Leider nicht.

          [..] wenn der Singleton ein zweites oder ein weiteres Mal erstellt werden soll,

          Eben nicht. Ein Singleton wird nur ein einziges Mal erstellt.

          static sorgt dafür, dass es den Singleton nur einmal gibt

          Nein, static allein sorgt dafuer nicht. Die statische Instanziierung sorgt dafuer (zusammen mit dem privaten static holder), dass es die Instanz der Klasse nur einmal gibt.

          Das ist jedoch bei Weitem nicht alles, was ein Singleton-Entwurfsmuster ausmacht, denn ein diesbezügliches Verhalten kann auch eine Festlegung, eine Vereinbarung sein.

          Nein, kann es nicht.

          In meiner Factory gibt es Controller-Klassen, die implementieren ein Interface.

          Singleton controller?

          Alle Methoden dieses Interfaces verwenden einunddieselbe Instanz

          Ein Interface verwendet nichts. Es spezifizert nur.

          [..] Controller-Klassen vorzuhalten, die lediglich nur eine Methode des Interfaces aufrufen und diejenigen Methoden, welche für eine Verarbeitung von Request-Parameter zuständig sind, gar nicht definiert haben.

          Eine Klasse, die ein Interface bedient, muss per Definition (sprich Compiler!) alle Interface-Methoden implementieren.

          Aufgrund meiner Möglichkeiten, die ich habe zum Aufteilen der Interface-Methoden

          Interface-Methoden aufteilen. All right then.

          Und taeglich grueszt das Murmeltier,
            Chris

          1. Hi,

            Es ist genau umgekehrt. Hier ein weiterer Teil meiner Herangehensweise.

            Leider nicht.

            Polemik.

            Eben nicht. Ein Singleton wird nur ein einziges Mal erstellt.

            Genau!

            static sorgt dafür, dass es den Singleton nur einmal gibt

            Ich sorge dafür.

            Nein, static allein sorgt dafuer nicht. Die statische Instanziierung sorgt dafuer (zusammen mit dem privaten static holder), dass es die Instanz der Klasse nur einmal gibt.

            Siehe oben.

            Interface-Methoden aufteilen. All right then.

            dann lach doch. Eben umgesetzt, traumhaftes Feature. Woanders musste ich stundenlang suche, wo überall Platzhalter gesetzt sind ;)

            Und taeglich grueszt das Murmeltier,

            Wer bist Du denn? Mein Website ist verlinkt. Deine nicht. M.s auch nicht.

            Schöne Grüße an die Heckenschützen!

            --
            Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
            1. Hallo Christopher,

              ich denke, dein Beitrag ging ein wenig zu weit. Deshalb habe ich ihn gelöscht.

              Matthias

              --
              Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Pappe und Pappel.

            2. Mahlzeit,

              Wer bist Du denn? Mein Website ist verlinkt. Deine nicht. M.s auch nicht.

              Ich kann dir auch sagen, wieso nicht. Es wäre bei jeder einzelnen Seite Werbung.
              Wenn du willst, kannst du die URLs per Mail haben, hier verlinke ich meine Seiten bewusst nicht und werde es auch nicht tun.

              --
              42
  2. Mahlzeit,

    Mein Programmiererstolz war ob dieser Primitiv-Lösung zutiefst gekränkt... sollte es nicht Ziel jedes ernsthaften Programmierers sein, die eleganteste (will heißen: logisch konsequenteste) und/oder pflegeleichteste und/oder zur Laufzeit schnellste Lösung zu finden? Statischer HTML-Code in einer Datenbankanwendung erfüllt keine dieser drei Kriterien...

    Der Code soll dem entsprechen, was der Kunde/Auftraggeber will. Wenn du das nicht mit deinem Programmiererstolz vereinbaren kannst, musst du den Auftrag ablehnen. Wenn du es trotzdem machst, bist du entweder ein Heuchler oder musst es (aus div. Gründen) tun.

    Bei jedem dieser Punkte ist dein Posting nicht nachvollziehbar, denn alle diese Gründe widerlegen deine Aussage, dass sie deinen Stolz kränken. Denn entweder ist dein Stolz nicht gross genug um den Auftrag abzulehnen oder er ist dir egal denn du machst es ja trotzdem.

    --
    42
  3. Wie auch immer. Den Widerspruch zwischen perfekter Programmierung und Wirtschaftlichkeit haben wir auszuhalten. Das hat nichts mit DE-Mütigung zu tun.

    Jörg Reinholz

    1. Hi(gh)!

      Wie auch immer. Den Widerspruch zwischen perfekter Programmierung und Wirtschaftlichkeit haben wir auszuhalten. Das hat nichts mit DE-Mütigung zu tun.

      Jörg Reinholz

      Aber wie gesagt, hier ging es ausnahmsweise nicht um Wirtschaftlichkeit - es wäre keine Katastrophe gewesen, wenn ich mit der Sache erst eine Woche später fertig geworden wäre...

      Gerade deshalb wurmt es mich ja, dass ich nach zwei vergeblichen Anläufen schon aufgegeben habe!

      Aber wer hat mir eigentlich den Floh ins Ohr gesetzt, dass richtige Programmierer (tm) unbegrenzt belastbare Übermenschen sind, die selbst unter Gulag-Bedingungen noch Code für die Ewigkeit schaffen?

      Bis bald im Khyberspace!

      Yadgar

      1. Aber wie gesagt, hier ging es ausnahmsweise nicht um Wirtschaftlichkeit - es wäre keine Katastrophe gewesen, wenn ich mit der Sache erst eine Woche später fertig geworden wäre...

        Hier in dieser Welt kostet eine Woche Programmierer aber eine Menge Geld.

        Jörg Reinholz

  4. Hi there,

    Also ich weiss nach über dreissig Jahren professioneller (naja, sagen wir kommerzieller;) Programmiertätigkeit wie unorganisiert Anwender denken können und wie Sie auch im 21. Jahrhundert auf die mindesten Belange einer halbwegs automatisierten Datenverarbeitung pfeiffen.
    Ich hatte einmal den Auftrag einer kommunalen Einrichtung, die für den Bezug einer bestimmten Leistung quasi jedem zweiten Bürger irgendeine Sonderkondition versprochen hatte. Deswegen war dem auch mit einem Standard-WaWi-Programm nicht ums Verrecken beizukommen. Was hätt' ich machen sollen (mein erster Gedanke war es, den Bürgermeister zu erschlagen - das kam aber aus naheliegenden Gründen nicht in Frage), also hab ich halt um die Sonderkonditionen eine Eiertanzprogrammierung aufgeführt.
    DIE Lösung gibt es ohnehin nicht und meist ist es auch Illusion, in der Zeit, die einem für die meisten Projekte bleibt, so zu programmieren, daß man damit ein Modul hat, das man später wieder ohne Probleme verwenden kann und das quasi, einem programmiertechnischen kategorischen Imperativ folgend, als Beispiel für alle nachfolgenden Programmierergenerationen herhalten kann.
    Also um es abzuschliessen, ein fahler Geschmack bleibt vielleicht, aber gedemütigt fühl' ich mich dabei nicht, auch und schon gar nicht, weil es meist die Rahmenbedingungen sind, die eine bessere Lösung nicht zulassen...

    1. Hi,

      [..] weil es meist die Rahmenbedingungen sind, die eine bessere Lösung nicht zulassen...

      So habe ich das auch erlebt. Firmen, die mit ihrem Code _im produktiven Umfeld_ wachsen, da ist überhaupt keine Zeit, über zweckmäßigere Lösungen nachzudenken (*). Auch dann nicht, wenn der Code zu einem Monster wird, wo selbst für Alteingesessene die Zeitaufwendungen potentiell anwachsen und ein neuer Kollege gar keine Chance hat, auch dann nicht, wenn er sich mit grausamen Konstrukten identifizieren muss.

      (*) selbst dafür habe ich Verständnis. Emotionslos hingegen sehe ich das nicht, fürs Engagement einen Arschtritt zu kriegen, für das Engagement, mit einem Monster von Code überhaupt eine Lösung gefunden zu haben. Auch wenn ein Kunde nicht bereit ist, für solche Einzelfälle den vollen Stundensatz zu zahlen, ein GF hat seinen Beruf verfehlt, wenn er dass nicht im Rahmen anderer Projekte puffern kann.

      Hotte

  5. Ich versteh dein Problem nicht. Du hast doch

    (will heißen: logisch konsequenteste)

    gehandelt. Du hast die beste Lösung versucht und gefunden. Wäre es so gewesen, dass du mehrere Lösungen hättest und man dich gezwungen hätte die schlechteste zu wählen (ja solche Chefs soll es geben), dann könnte dein Programmierstolz verletzt sein.

    Gruß
    Der Mann im Ohr
    T-Rex

    1. Hi(gh)!

      Ich versteh dein Problem nicht. Du hast doch

      (will heißen: logisch konsequenteste)
      gehandelt. Du hast die beste Lösung versucht und gefunden. Wäre es so gewesen, dass du
      mehrere Lösungen hättest und man dich gezwungen hätte die schlechteste zu wählen (ja solche > Chefs soll es geben), dann könnte dein Programmierstolz verletzt sein.

      Wenn ich fristgebunden programmiere, dann wäre es mir auch egal, ob eine Lösung jetzt orthodox oder superelegant ist oder noch ein paar Millisekunden schneller hätte sein können, Hauptsache es funktioniert... und ich bekomme mein Honorar!

      ...aber ich bin bis auf weiteres Hobbyprogrammierer und stehe nicht unter Zeitdruck - es sei denn, ich habe irgendjemandem, der das Programm dann auch nutzen will, versprochen, es zu einem bestimmten Termin fertig zu bekommen. Und wenn ich im Prinzip alle Zeit der Welt habe, ärgere ich mich mitunter schon darüber, wenn ich nur eine Anfängerlösung hinbekomme.

      Wobei ich in diesem konkreten Fall die Panne mit dem 26. Januar 1995 wahrscheinlich hätte vermeiden können, wenn ich von Anfang an die Schwingungen-Wahlen gesondert in den Datenbankentwurf integriert hätte (hätte, hätte, Fahrradkette...)... aber da die Initative von mir ausging (nicht, dass ich mich Stephan Schelle von musikzirkus-magazin aufgedrängt hätte), wollte ich möglichst früh ein Ergebnis als Muster präsentieren können und habe dann halt eben mehr oder weniger einfach drauflosprogrammiert...

      Bis bald im Khyberspace!

      Yadgar

      1. Das klingt danach dass du noch auf der Suche nach der Eierlegendenwollmilchsau bist. Also nichts dagegen wenn du besser werden und etwas lernen willst. Aber ein Projekt (Auch Hobby Projekte) wollen mal ein "Ende" haben (wobei ein Projekt niemals ein Ende haben wird).
        Es gibt immer schnellere und elegantere Lösungen. Aber irgendwann ist die Zeit die man nach einer noch besseren Lösung sucht, den Aufwand nicht wert den diese Lösung an Ertrag bringt.

        Ein Beispiel.
        Ich hab mal nach einem Ding gesucht. Hab dabei Preise verglichen. Das hat mich locker 48 Stunden arbeit gekostet. Irgendwann hatte ich das vermeintlich billigste Angebot. Habs bestellt. Just 2 Wochen später hab ich es billiger gesehen. Hätte ich die 48 Stunden gearbeitet, hätte ich das was mich das Ding gekostet hätte wieder drin gehabt.

        Hoffe ich konnte dir mit dieser irrsinnig weisen Geschichte die Augen öffnen mein kleiner Padaban.

        Gruß
        du wirst bekommen
        T-Rex

  6. Hallo,

    P. S. Ach übrigens, die fertigen Listen gibt es auf besagter Seite unter der Rubrik "Schwingungen" (ist leider in Frames programmiert, so dass ich keinen Direktlink angeben kann)...

    Ob deine Arbeit gut oder schlecht ist, ist erst mal zweitrangig wenn es die gewünschten Aufgaben erfüllt sind und dabei das Ganze schnell und sicher ist. Das Resultat zählt. Was allerdings das Design und die Bedienung betrifft, hoffe ich Du bist nicht für diese Framewüste verantwortlich.

    Gruss
    Mike

    1. Hi(gh)!

      Ob deine Arbeit gut oder schlecht ist, ist erst mal zweitrangig wenn es die gewünschten
      Aufgaben erfüllt sind und dabei das Ganze schnell und sicher ist.

      Ich vermute mal, dass es das ist... die weiteren Wartungsarbeiten halten sich in Grenzen, da der Datenbestand abgeschlossen ist - "Schwingungen" als Radiosendung gibt es seit April 1995 nicht mehr und wird es auch in Zukunft mit sehr großer Wahrscheinlichkeit nicht mehr geben (dafür kann man sich seit dieser Zeit jeden Monat für derzeit 5 Euro eine Schwingungen-CD mit aktueller elektronischer Musik kaufen)

      Das Resultat zählt. Was allerdings das Design und die Bedienung betrifft, hoffe ich Du bist > nicht für diese Framewüste verantwortlich.

      Nein, bin ich nicht... so zu coden habe ich mir schon vor zehn Jahren abgewöhnt (vgl. Afghanistan-Chronik)!

      Bis bald im Khyberspace!

      Yadgar

      Now printing: Schwingungen: 1984... auf meinem Star LC-10, NIÄÄÄRRRRRGGGG, NIÄÄÄÄRRRRRGGGGG...