Es gibt keine Programmierer!
Gestern Abend gab es (wieder einmal) eine Diskussion über Klassendesign für Spiele im SFML IRC Channel. Der Auslöser war die Frage wieso globale Variablen und Singletones keine gute Idee sind. Nur kurz als Nebenbemerkung; für globale Variablen kann man schneller einmal einsehen, dass es nicht praktisch ist, denn man kann von überall darauf zugreifen, somit taucht in einer Klasse plötzlich aus dem ‘Nichts’ eine Variabel auf und es lässt sich nur mühsam herausfinden in welchem Zustand ein globales Objekt hat. Weiter könnte man auch mehrere Instanzen einer solchen Klasse erstellen und würde noch mehr Probleme erhalten. Eine Singletone löst das letztere Problem, kann jedoch auch immer noch überall eingebunden werden.
Die Diskussion dauerte dann noch eine Weile. Ich habe nun aber gelernt, dass eine Idee mit dem Gedanken “überall” bereits falsch ist. Es ist möglich des Design eines Programms oder Spiels so zu wählen, dass Grafik und Logik getrennt behandelt werden und nur einige wenige Klassen in der Hierarchie zuoberst stehen. Das Architekturmuster MVC (Model-View-Controller) erfüllt vor allem die erste Bedingung. Somit ist meine Idee, dass eine Programm-Klasse all etwas ‘grösseren’ Klassen als Membervariablen speichert und ein Zeiger auf das Objekt der Programm-Klasse an all Unterklassen weitergegeben wird, ebenfalls ziemlich falsch.
Nun zurück zum Titel.
Während man früher auf Lochkarten seine Programme bzw. Rechenoperationen “schrieb”, sich später mit Assembler und kurz darauf Pascal oder Fortan beschäftigte, so ist man heute mit den verschiedensten Hochsprachen zu ziemlich verwöhnt. Wir müssen uns nicht mehr um grundlegende Dinge kümmern, z.B. wie man nun Text auf den Bildschirm kriegt, sondern können einfach Funktionen in den mitgelieferten oder ergänzten Sprachbibliotheken aufrufen. Ja es lässt sich sogar so weit treiben, dass der Programmierteil trivial wird. Die Syntax und Semantik einer Sprache sind so kompakt und (meist) gut definiert, dass dies ein Computer eigentlich viel besser könnte als wir, doch genau an diesem Punk kommt der Mensch dann wieder ins Spiel. Ein Programm besteht zwar auch Syntax und Semantik, doch was dem Programm Leben einhaucht ist die Architektur, das Design.
Es ist nicht das Kennen jeder einzelnen Funktion in PHP, welches einer Website die benötigte Sicherheit gibt, nein es ist die Idee und das Design des Programmierers, welcher ein sicheres Login-Skript schreibt. Somit lässt sich eigentlich sagen, dass es keine Programmierer gibt, sondern nur Designer.
Diese Argumentation hält sich jedoch doch (leider) nur in der Theorie, denn in der Praxis werden viele Programme ohne wirkliches Design entwickelt oder es wird mit vielen “Hacks” das grundlegende, aber halt nicht komplette, Design zerstört. Natürlich oft zum mehr oder weniger Guten des Kunden, denn ein paar “Hacks” einzubauen spart sehr viel Zeit im Vergleich zu einem kompletten Redesign, auf der anderen Seite können sich so sehr schnell viele Fehler und Sicherheitslücken einschleichen.
Schlussendlich ist das Design ein Luxusproblem der Hochsprachen. 😉
Trackback – Permanent Link
Singeltons und globale Variabeln sind gerade in Multi-Thread Anwendungen wie spielen immer eine Gefahr…
Software Architektur (wie das Design heisst was du meinst) hat seine Hochkonjunktur schon wieder etwas hinter sich. Früher hat man «Jahre» geplant, wie man eine Applikation aufbauen will aber heute mit Agiler Programmierung geht man viel schneller an die Ausführung und macht die nötigen Anpassungen danach.