{"id":80,"date":"2009-05-23T10:18:23","date_gmt":"2009-05-23T09:18:23","guid":{"rendered":"http:\/\/www.softwarearchitektur.de\/?p=80"},"modified":"2009-06-16T21:47:22","modified_gmt":"2009-06-16T20:47:22","slug":"architekten-mauern-keine-wande-und-softwarearchitekten-programmieren-nicht","status":"publish","type":"post","link":"https:\/\/www.softwarearchitektur.de\/?p=80","title":{"rendered":"Architekten mauern keine W\u00e4nde und Softwarearchitekten programmieren nicht"},"content":{"rendered":"<p>K\u00f6nnen Sie Sich vorstellen, da\u00df Sie einen Architekten beauftragen, ein schickes Einfamilienhaus f\u00fcr Sie zu bauen um dann feststellen zu m\u00fcssen, da\u00df er auch das Fundament gie\u00dft und die W\u00e4nde mauert? Nat\u00fcrlich nicht. Er wird Ihnen Entw\u00fcrfe des Hauses vorstellen und den von Ihnen gew\u00e4hlten Entwurf dann durch einen Bauunternehmer umsetzen lassen. Eventuell \u00fcbernimmt er noch die Bauleitung, er wird aber keinesfalls selbst Hand anlegen.<\/p>\n<h4>Warum also sollte ein Softwarearchitekt programmieren?<\/h4>\n<p>Auf den ersten Blick ist die Forderung, da\u00df ein Softwarearchitekt programmieren soll unsinnig. Er ist doch eine Autorit\u00e4t seines Faches, wei\u00df wie Systeme in Komponenten zerlegt werden und kann das wunderbar in UML beschreiben. Er wird also einen Entwurf erstellen, diesen in Form einer Powerpoint-Pr\u00e4sentation dem Management vorstellen, mit Hilfe eines passenden MDA-Tools den Code generieren und fertig ist das gew\u00fcnschte System.<\/p>\n<p>Die Praxis sieht  in der Regel anders aus:<\/p>\n<ul>\n<li>Das Deployment mu\u00df aufgrund von Performanz-Anforderungen so ge\u00e4ndert werden, da\u00df eine Komponente mal auf dem einen und mal auf dem anderen Knotentyp installiert wird.<\/li>\n<li>Das Protokoll zur Kommunikation zwischen zwei Knoten erzeugt zu viel Kontrolldaten und mu\u00df optimiert werden. Hierf\u00fcr setzt man am besten eine bestehende Komponente aus einem Open Source Projekt ein, da man Inter-Proze\u00df-Kommunikation nicht wirklich als seine Business Domain ansieht.<\/li>\n<li>Im Feldversuch stellt sich heraus, da\u00df ein Teil der Software nicht auf die parallele Nutzung vorbereitet ist und deshalb leider nicht reproduzierbare Ergebnisse liefert.<\/li>\n<\/ul>\n<p>H\u00e4tte man diese Aspekte der Software in einem Entwurf festhalten k\u00f6nnen oder wird man sie nach der \u00c4nderung der Software in Entwurfsdiagramm einf\u00fcgen? In der Regel nicht und das ist f\u00fcr mich eine wesentliche Eigenschaft von Software:  <strong>die endg\u00fcltige Architektur findet sich nur in der Software selbst wieder<\/strong>. Software ist im Gegensatz zu einem Geb\u00e4ude so leicht ver\u00e4nderbar, da\u00df der Entwurf sich w\u00e4hrend der Programmierung wiederholt \u00e4ndert.<\/p>\n<p>Der Softwarearchitekt mu\u00df daher Programmcode lesen k\u00f6nnen, mit der Entwicklungsumgebung umgehen k\u00f6nnen und in der Lage sein, die dynamischen Aspekte des entwickelten Systems auf der Basis von Logfiles, Coredumps und Heapdumps zu verstehen.<\/p>\n<h4>Das Verh\u00e4ltnis zwischen Architekten und Entwicklern<\/h4>\n<p>Neben der Anforderung an den Architekten, das laufende System zu verstehen um es modellieren zu k\u00f6nnen, ben\u00f6tigt er seine Programmierkentnisse auch, um seine Rolle im Team wahrnehmen zu k\u00f6nnen.<\/p>\n<ol>\n<li>Der Architekt sollte als Mentor f\u00fcr andere Entwickler arbeiten<\/li>\n<li>Der Architekt sollte verstehen, welche von anderen vorgeschlagene Komponenten zur Architektur des Gesamtsystems passen<\/li>\n<li>Der Architekt sollte Code anderer beurteilen k\u00f6nnen<\/li>\n<\/ol>\n<p>Es ist klar, da\u00df der Architekt nicht zu hundert Prozent mit Programmieraufgaben verplant sein darf. Er mu\u00df diese aber zumindest \u00fcbernehmen k\u00f6nnen. Er mu\u00df in der Lage sein, mit anderen als &#8222;Pair&#8220; an einem neuen Thema arbeiten k\u00f6nnen. Er mu\u00df Fehlermeldungen der Kunden auf den aktuellen Code beziehen und gemeinsam mit anderen L\u00f6sungsans\u00e4tze erarbeiten k\u00f6nnen. Vielleicht beschr\u00e4nkt sich seine Programmiert\u00e4tigkeit im Projekt auf die Erstellung von Prototypen; wichtig ist aber, da\u00df er Programmieren kann und von allen Teammitgliedern auch in dieser Rolle als Autorit\u00e4t wahrgenommen wird. Nur dann werden die Entwickler bei schwierigen Fragestellungen, und vor allem wenn sie vom urspr\u00fcnglichen Entwurf abweichen wollen, das Gespr\u00e4ch mit dem Softwarearchitekten suchen. Diese  Kommunikation ist die unabdingbare Voraussetzung daf\u00fcr, da\u00df eine Software nicht wuchert und entartet, sondern auch nach mehreren Versionen ein Entwurf noch erkennbar und im Team bekannt ist und die Software somit auch wartbar bleibt.<\/p>\n<h4>Links<\/h4>\n<p>Es ist nicht so, da\u00df ich der erste bin, der \u00fcber nicht programmierende Architekten nachdenkt. Das Thema ist alt und wird wieder und wieder diskutiert. Ich habe das Thema aufgrund eines aktuellen Erlebnisses aus meiner t\u00e4glichen Arbeit aufgegriffen. Einige Artikel zu dem Thema sind zu finden unter:<\/p>\n<ul>\n<li><a title=\"Architects Dont Code\" rel=\"nofollow\" href=\"http:\/\/c2.com\/cgi\/wiki?ArchitectsDontCode\" target=\"_blank\">Architects Dont Code<\/a>\n<\/li>\n<li><a title=\"How to spot the dreaded non-coding architect \" href=\"http:\/\/www.simongbrown.com\/blog\/2005\/09\/28\/should_architects_code.html\" target=\"_blank\">Should architects code?<\/a><\/li>\n<li><a title=\"How to spot the dreaded non-coding architect \" href=\"http:\/\/softarc.blogspot.com\/2007\/06\/how-to-spot-dreaded-non-coding.html\" target=\"_blank\">How to spot the dreaded non-coding architect<\/a><\/li>\n<li><a title=\"Those Who Can, Code; Those Who Can't, Architect\" href=\"http:\/\/java.sys-con.com\/node\/345637\" target=\"_blank\"><span style=\"font-size: 10pt; font-family: Arial;\" lang=\"DE\">Those Who Can, Code; Those Who Can&#8217;t, Architect<\/span><\/a><\/li>\n<li><a title=\"A story about a technical architect - Pimp my architecture\" href=\"http:\/\/www.markedgington.com\/2009\/03\/13\/a-story-about-a-technical-architect-pimp-my-architecture\/\" target=\"_blank\">A story about a technical architect &#8211; Pimp my architecture<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>K\u00f6nnen Sie Sich vorstellen, da\u00df Sie einen Architekten beauftragen, ein schickes Einfamilienhaus f\u00fcr Sie zu bauen um dann feststellen zu m\u00fcssen, da\u00df er auch das Fundament gie\u00dft und die W\u00e4nde mauert? Nat\u00fcrlich nicht. Er wird Ihnen Entw\u00fcrfe des Hauses vorstellen und den von Ihnen gew\u00e4hlten Entwurf dann durch einen Bauunternehmer umsetzen lassen. Eventuell \u00fcbernimmt er [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[6],"tags":[9,8],"_links":{"self":[{"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=\/wp\/v2\/posts\/80"}],"collection":[{"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=80"}],"version-history":[{"count":46,"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=\/wp\/v2\/posts\/80\/revisions"}],"predecessor-version":[{"id":139,"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=\/wp\/v2\/posts\/80\/revisions\/139"}],"wp:attachment":[{"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=80"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=80"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softwarearchitektur.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}