{"id":497,"date":"2011-11-18T15:56:50","date_gmt":"2011-11-18T14:56:50","guid":{"rendered":"http:\/\/blog.my-gate.net\/2011\/11\/es-gibt-keine-programmierer\/"},"modified":"2015-11-10T15:32:22","modified_gmt":"2015-11-10T13:32:22","slug":"es-gibt-keine-programmierer","status":"publish","type":"post","link":"https:\/\/duerrenberger.dev\/journal\/2011\/11\/18\/es-gibt-keine-programmierer\/","title":{"rendered":"Es gibt keine Programmierer!"},"content":{"rendered":"<p><a href=\"\/wp-content\/uploads\/2011\/11\/meh.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px\" title=\"meh\" border=\"0\" alt=\"meh\" align=\"right\" src=\"\/wp-content\/uploads\/2011\/11\/meh_thumb.png\" width=\"242\" height=\"82\" \/><\/a>Gestern Abend gab es (wieder einmal) eine Diskussion \u00fcber Klassendesign f\u00fcr Spiele im <a href=\"http:\/\/sfml-dev.de\/irc\" target=\"_blank\">SFML IRC Channel<\/a>. Der Ausl\u00f6ser war die Frage wieso globale Variablen und Singletones keine gute Idee sind. Nur kurz als Nebenbemerkung; f\u00fcr globale Variablen kann man schneller einmal einsehen, dass es nicht praktisch ist, denn man kann von \u00fcberall darauf zugreifen, somit taucht in einer Klasse pl\u00f6tzlich aus dem \u2018Nichts\u2019 eine Variabel auf und es l\u00e4sst sich nur m\u00fchsam herausfinden in welchem Zustand ein globales Objekt hat. Weiter k\u00f6nnte man auch mehrere Instanzen einer solchen Klasse erstellen und w\u00fcrde noch mehr Probleme erhalten. Eine Singletone l\u00f6st das letztere Problem, kann jedoch auch immer noch \u00fcberall eingebunden werden.<\/p>\n<p>Die Diskussion dauerte dann noch eine Weile. Ich habe nun aber gelernt, dass eine Idee mit dem Gedanken \u201c\u00fcberall\u201d bereits falsch ist. Es ist m\u00f6glich des Design eines Programms oder Spiels so zu w\u00e4hlen, dass Grafik und Logik getrennt behandelt werden und nur einige wenige Klassen in der Hierarchie zuoberst stehen. Das Architekturmuster <a href=\"https:\/\/de.wikipedia.org\/wiki\/Model_View_Controller\" target=\"_blank\">MVC (Model-View-Controller)<\/a> erf\u00fcllt vor allem die erste Bedingung. Somit ist meine Idee, dass eine Programm-Klasse all etwas \u2018gr\u00f6sseren\u2019 Klassen als Membervariablen speichert und ein Zeiger auf das Objekt der Programm-Klasse an all Unterklassen weitergegeben wird, ebenfalls ziemlich falsch.<\/p>\n<p>Nun zur\u00fcck zum Titel.    <br \/>W\u00e4hrend man fr\u00fcher auf Lochkarten seine Programme bzw. Rechenoperationen \u201cschrieb\u201d, sich sp\u00e4ter mit Assembler und kurz darauf Pascal oder Fortan besch\u00e4ftigte, so ist man heute mit den verschiedensten Hochsprachen zu ziemlich verw\u00f6hnt. Wir m\u00fcssen uns nicht mehr um grundlegende Dinge k\u00fcmmern, z.B. wie man nun Text auf den Bildschirm kriegt, sondern k\u00f6nnen einfach Funktionen in den mitgelieferten oder erg\u00e4nzten Sprachbibliotheken aufrufen. Ja es l\u00e4sst 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\u00f6nnte 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.     <br \/>Es ist nicht das Kennen jeder einzelnen Funktion in PHP, welches einer Website die ben\u00f6tigte Sicherheit gibt, nein es ist die Idee und das Design des Programmierers, welcher ein sicheres Login-Skript schreibt. Somit l\u00e4sst sich eigentlich sagen, dass es keine Programmierer gibt, sondern nur Designer.<\/p>\n<p>Diese Argumentation h\u00e4lt sich jedoch doch (leider) nur in der Theorie, denn in der Praxis werden viele Programme ohne wirkliches Design entwickelt oder es wird mit vielen \u201cHacks\u201d das grundlegende, aber halt nicht komplette, Design zerst\u00f6rt. Nat\u00fcrlich oft zum mehr oder weniger Guten des Kunden, denn ein paar \u201cHacks\u201d einzubauen spart sehr viel Zeit im Vergleich zu einem kompletten Redesign, auf der anderen Seite k\u00f6nnen sich so sehr schnell viele Fehler und Sicherheitsl\u00fccken einschleichen.<\/p>\n<p>Schlussendlich ist das Design ein Luxusproblem der Hochsprachen. \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gestern Abend gab es (wieder einmal) eine Diskussion \u00fcber Klassendesign f\u00fcr Spiele im SFML IRC Channel. Der Ausl\u00f6ser war die Frage wieso globale Variablen und Singletones keine gute Idee sind. Nur kurz als Nebenbemerkung; f\u00fcr globale Variablen kann man schneller einmal einsehen, dass es nicht praktisch ist, denn man kann von \u00fcberall darauf zugreifen, somit [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[91,258,292],"class_list":["post-497","post","type-post","status-publish","format-standard","hentry","category-pc","tag-design","tag-mvc","tag-programmierung"],"_links":{"self":[{"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/posts\/497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/comments?post=497"}],"version-history":[{"count":1,"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/posts\/497\/revisions"}],"predecessor-version":[{"id":735,"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/posts\/497\/revisions\/735"}],"wp:attachment":[{"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/media?parent=497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/categories?post=497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/duerrenberger.dev\/journal\/wp-json\/wp\/v2\/tags?post=497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}