{"id":1817,"date":"2012-08-31T16:13:49","date_gmt":"2012-08-31T16:13:49","guid":{"rendered":"http:\/\/www.ollmetzer.com\/?p=1817"},"modified":"2012-08-31T16:13:49","modified_gmt":"2012-08-31T16:13:49","slug":"mein-leben-als-softwaredissident","status":"publish","type":"post","link":"https:\/\/www.ollmetzer.com\/?p=1817","title":{"rendered":"Mein Leben als Softwaredissident"},"content":{"rendered":"<p>Heute hatte ich ein Gespr\u00e4ch \u00fcber Softwareentwicklung im eCommerce Bereich. Anschliessend stellte sich bei mir erst ein Gef\u00fchl der Unzufriedenheit und schliesslich so etwas wie Frustration ein. Ich war in nahezu allen Dingen die zur Sprache kamen (Basissysteme, Frameworks, Entwicklermethoden) fundamental anderer Meinung, als mein Gegen\u00fcber. Schlimm daran fand ich, dass die andere Meinung absoluter Mainstream unter den Entwicklern ist. Ich bin also quasi ein Software-<a title=\"Wikipedia: Dissident\" href=\"http:\/\/de.wikipedia.org\/wiki\/Dissident\" target=\"_blank\">Dissident<\/a>.<\/p>\n<p><strong>Worum ging es?<\/strong><\/p>\n<p>Es fing schon mit den verwendeten Basissystemen an: Typo3 und Magento. Finde ich beide zum in-die-Tonne-treten. Warum?<\/p>\n<p>Typo3 ist in der Bedienung unglaublich umst\u00e4ndlich und einfach nicht state-of-the-art. Man hat eine Million Stellen, wo man irgendweche Settings machen muss und kann sich eigentlich nie sicher sein, dass man nicht doch noch irgendwas \u00fcbersehen hat. Der Sinn von Typoscript hat sich mir auch noch nie erschlossen. Mit einem sauberen MVC Ansatz w\u00fcrde man keine zus\u00e4tzliche Templatesprache ben\u00f6tigen. Zudem ist das System out-of the-box langsam und verbraucht viel Ressourcen auf dem Server.<\/p>\n<p>Magento ben\u00f6tigt ebenfalls sehr viel Ressourcen und es ist im Grundzustand wahnsinnig lahm. Man <em>kann<\/em> es schneller machen &#8211; aber das ist recht aufw\u00e4ndig. Zudem ist der Code \u00fcberkomplex. Wenn ich h\u00f6re, dass man Fehlersuche bei Magento ohne Debugger eigentlich vergessen kann (und das glaube ich uneingeschr\u00e4nkt), verdrehe ich die Augen. Eine Shopping-Cart ist eigentlich eine der einfachsten Webanwendungen \u00fcberhaupt. Wenn ich da einen Debugger brauche &#8211; was zum Geier soll das f\u00fcr eine Softwarearchitektur sein?<\/p>\n<p>Jira als Standard Ticketsystem bringt mich ebenfalls zur Verzweifelung. Das ist so komplex in der Bedienung wie Typo3 &#8211; allerdings in zehnfacher Potenz.<\/p>\n<p>Anschliessend ging es um die Frage, welche Frameworks sinnvoll sind. Das betraf sowohl PHP Frameworks wie Zend, Cake oder Symphony, als auch Javascript und CSS Frameworks. Dabei ist meines Erachtens die Frage: <em><\/em><\/p>\n<p><em>Sinnvoll in welcher Hinsicht?<\/em><\/p>\n<p>Mit Cake kann man ohne Frage extrem schnell Webapplikationen bauen. Ob ich dieses Konstrukt aber in Hochlastszenarien einsetzen w\u00fcrde, m\u00f6chte ich doch schwer in Frage stellen. Analog gilt f\u00fcr CSS Frameworks, dass man damit schnell ein gutes Standard-Ergebnis erzielen kann. Wenn es aber darum geht, die Frontend Performance zu optimieren, geht nichts \u00fcber eigenen Code.<\/p>\n<p>Womit wir bei der Softwareentwicklung angekommen sind. Objektorientiert wird bevorzugt &#8211; klar. Designpatterns? Ohne Frage absolut sinnvoll, wenn man komplexe Software baut. Bei Webanwendungen allerdings schwerstens \u00fcberbewertet. Hier gibt es keine laufende Applikation, die parallele Threads, Events, Multiuser, was weiss ich noch was ber\u00fccksichtigen muss. Der grundlegende Ablauf ist hier ja stets gleich:<\/p>\n<p><em>Request kommt rein, wird verarbeitet, Antwort geht raus, Ende. <\/em><\/p>\n<p>Okay, Application- und Sessionobjekt als Singleton zu programmieren macht durchaus Sinn. Ein Factory-Objekt ist hier und da ebenfalls angebracht. Aber sonst? Wenn man diese Techniken inklusive massenweise Vererbung \u00fcbertreibt, kommt man zu sehr schwer wartbarem Code (&#8222;Hallo Debugger!&#8220;), der viel Ressourcen braucht (&#8222;Rechenzentrum: Bitte nochmal zwei Blades reinschieben&#8230;&#8220;) und langsam ist.<\/p>\n<p>Langsam? Macht nix &#8211; kann man ja cachen&#8230;<\/p>\n<p>Hmm, die L\u00f6sung ist also, auf eine vermurkste, zu komplexe Architektur noch eine Softwareschicht draufzulegen und das System damit noch fehleranf\u00e4lliger zu machen? Ist ja &#8217;ne super Idee&#8230;<\/p>\n<p><strong>Conclusio<\/strong><\/p>\n<p>Und hier fiel mir auf, warum ich mit meiner Meinung h\u00e4ufig so alleine stehe. Ich bin stets auf des Suche, nach m\u00f6glichst schlanken, eleganten und performanten Architekturen. Der Mainstream ist aber, eine dicke Schicht auf die andere zu setzen und damit Bloatware zu erzeugen.<\/p>\n<p>Das l\u00e4uft mir einfach zu 100% gegen den Strich.<\/p>\n<ul>\n<li>Vielleicht liegt das daran, dass ich sowieso gerne mal dagegen bin (wie der Comic-Pinguin von Uli Stein).<\/li>\n<li>Vielleicht liegt es daran, dass ich das Programmieren im letzten Jahrtausend auf ultralangsamen 8  Bit Rechnern mit weniger als 64KB(!) Speicher gelernt habe.<\/li>\n<li>Vielleicht weil ich generell ein Faible f\u00fcr Schlichtheit und Reduktion habe.<\/li>\n<li>Vielleicht liegt es auch daran, dass es wesentlich schwieriger ist, eine elegante, einfache L\u00f6sung zu entwickeln, als ein komplexes Monstrum zu erschaffen. Meine Meinung ist: Wenn ein System sehr komplex ist, ist es einfach noch nicht gen\u00fcgend durchdacht.<\/li>\n<\/ul>\n<p>Wahrscheinlich sind alle der oben aufgez\u00e4hlten Gr\u00fcnde die Ursache f\u00fcr mein heutiges Missvergn\u00fcgen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heute hatte ich ein Gespr\u00e4ch \u00fcber Softwareentwicklung im eCommerce Bereich. Anschliessend stellte sich bei mir erst ein Gef\u00fchl der Unzufriedenheit und schliesslich so etwas wie Frustration ein. Ich war in nahezu allen Dingen die zur Sprache kamen (Basissysteme, Frameworks, Entwicklermethoden) fundamental anderer Meinung, als mein Gegen\u00fcber. Schlimm daran fand ich, dass die andere Meinung absoluter [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-1817","post","type-post","status-publish","format-standard","hentry","category-development"],"_links":{"self":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/1817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1817"}],"version-history":[{"count":1,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/1817\/revisions"}],"predecessor-version":[{"id":1818,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/1817\/revisions\/1818"}],"wp:attachment":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}