Peter Bucher Ralf Westphal

Blog

Nutze den Augenblick
und teile der Welt mit, was Du zu sagen hast.

Argot

Freitag, 26. September 2008, 14:20 Uhr
Permalink | Kommentare (0) | Kommentare als RSSRSS

Wie ich selbst erst erfahren habe, bezeichnet der französische Begriff argot im allgemeinen Sinne einen Jargon, der nur von einer dedizierten Menge von Personen als Fachsprache genutzt wird. Auf diese Bedeutung spielt der Name des Projektes Argotic Syndication Framework an, dessen selbstgewählte Parole frei übersetzt

Wir beherrschen die Sprache bereits, so dass Sie sie nicht lernen müssen.

lautet. Mit Argotic steht ein Framework für .NET zur Verfügung, das einen abstrahierten Zugriff auf diverse Syndikationsformate ermöglicht, unter anderem auch RSS, Atom, OPML, APML, BlogML und RSD. Dieser Zugriff kann dabei nicht nur lesend, sondern auch schreibend stattfinden, so dass es für in .NET geschriebene Anwendungen beispielsweise ein leichtes ist, einen RSS-Feed zu konsumieren oder einen ebensolchen zu erstellen.

Auf Argotic aufmerksam wurde ich durch Alexander Zeitler, seines Zeichens MVP, der mir dieses Framework als Antwort auf meine Frage empfohlen hat, wie man mit möglichst geringem Aufwand zwei RSS-Feeds zu einem gemeinsamen zusammenführen könnte. Daher an dieser Stelle: Vielen Dank für den wirklich ausgesprochen guten Tipp!

Basta! 2008: Warum Microsoft den Kampf im Web gewinnen wird

Dienstag, 23. September 2008, 22:08 Uhr
Permalink | Kommentare (2) | Kommentare als RSSRSS

Nachdem ich gestern bereits einen Workshop auf der Basta! 2008 veranstalten konnte, habe ich heute Abend noch eine Session mit dem zugegebenermaßen ein wenig provokanten Titel Warum Microsoft den Kampf im Web gewinnen wird gehalten.

Das Thema der Session war, warum Microsoft all seinen Konkurrenten im Web 2.0 wie beispielsweise Google, Adobe oder Sun zum Trotz dennoch gute Chancen hat, mit Silverlight ausgesprochen erfolgreich zu sein.

Was mich besonders gefreut hat, war, dass meine These von den Teilnehmern nicht einfach nur stillschweigend hingenommen wurde, sondern dass sich nach meiner Session noch eine rege Diskussion ergeben hat, in der einige durchaus interessante Aspekte zur Sprache kamen.

Als größtes Problem für Silverlight wurde dabei von allen Teilnehmern eindeutig das derzeitige Deployment gesehen, dass Microsoft Silverlight nämlich nur als optionales Windows-Update anbietet - was von den meisten Endanwendern aber entweder nicht bemerkt oder aus Unwissenheit ignoriert werden dürfte.

Die spannende Frage bleibt, wie Microsoft es erreichen wird, Silverlight eine Verbreitung zukommen zu lassen, die es Entwicklern ermöglicht, im großen Stil auf Silverlight zu setzen. Man darf gespannt sein ...

PS: Die nächste Gelegenheit, mich live zu treffen, besteht auf der diesjährigen AJAX in Action, auf der ich am 29. Oktober 2008 eine Session zum Thema Silverlight 101 halten werde.

Basta! 2008: XAML revisited

Montag, 22. September 2008, 22:27 Uhr
Permalink | Kommentare (1) | Kommentare als RSSRSS

Die Basta!, ihres Zeichens die größte deutschsprachige Konferenz zu .NET und Visual Studio, öffnete heute zum bereits zwanzigsten Male ihre Pforten. Nachdem ich in den vergangenen Jahren regelmäßig mit Sessions vertreten war, hatte ich heute die Ehre, direkt am ersten Tag einen halbtägigen Workshop zum Thema XAML veranstalten zu können.

Da ich mir bereits im Vorfeld überlegt hatte, dass es auch an einem halben Tag nicht möglich sein würde, alle Steuerelemente und Konzepte von XAML gebührend vorzustellen, habe ich eine andere Taktik gewählt. Anstatt also sämtliche Steuerelemente einzeln vorzustellen, habe ich mich auf die Fragen beschränkt, die in den gängigen Referenzen zu XAML nicht abgedeckt werden.

Als Themen hatte ich insbesondere gewählt:

  • Hard- und Softwarevoraussetzungen für WPF
  • WPF unter XP vs WPF unter Vista
  • WPF vs XAML
  • Der x:-Namensraum
  • Attribute in Elementschreibweise
  • Routed Events und Event Bubbling
  • WPF auf dem Desktop und WPF im Web
  • Visual Studio vs Expression Blend
  • Entwickler vs Designer
  • Prototyping mit XAML
  • Model-View-ViewModel (MVVM)

Auch wenn es ein Experiment war, in einem Workshop über XAML eher den Kontext von XAML zu beleuchten und den Einsatz von XAML zu hinterfragen, hat den Teilnehmern diese Art der Darstellung äußerst gut gefallen - die konkreten Steuerelemente kann man schließlich immer noch dann, wenn man sie eines Tages braucht, in einer geeigneten Referenz nachschlagen.

Empfehlenswert als Nachschlagewerk zu XAML halte ich insbesondere das Buch Windows Presentation Foundation von Dirk Frischalowski. Der in dem Workshop erwähnte XAML-Editor war übrigens kaxaml, ein leichtgewichtiger, kompakter, kostenloser und vor allem schneller Ersatz für Expression Blend, mit dem man sich hervorragend in die Sprache XAML einarbeiten kann.

Von Entwurfsmustern und Werkzeugen

Freitag, 19. September 2008, 22:32 Uhr
Permalink | Kommentare (0) | Kommentare als RSSRSS

Der österreichische Philosoph und Autor Paul Watzlawick hat folgenden Satz formuliert:

"Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel."

Diese Aussage begründet in meinen Augen äußerst zutreffend, warum es für Architekten ausgesprochen wichtig ist, Entwurfsmuster zu kennen. Gregor Biswanger hat in seinem Kommentar zu meinem Blogeintrag Architektur = Planen + Entwurfsmuster angemerkt, dass ein gezieltes Denken in Entwurfsmustern mehr schaden als nutzen könne.

Und ich muss zugeben: Gregor hat damit vollkommen recht! Auch ich vertrete den Standpunkt, dass man nicht versuchen sollte, möglichst viele Entwurfsmuster auf Biegen und Brechen in eine Architektur zu stopfen, denn letztlich verfehlt man damit in der Regel sein Ziel und arbeitet daher kontraproduktiv.

Statt dessen sehe ich Entwurfsmuster als Werkzeuge, deren Kenntnis äußerst hilfreich sein kann, deren Einsatz aber auch bewusst und bedacht für jedes Muster individuell entschieden werden muss. Der Bedarf bestimmt also im Idealfall, welches Werkzeug benutzt wird, und nicht die eigene Fähigkeit, das Werkzeug tatsächlich benutzen zu können.

Im Prinzip verhält es sich mit Entwurfsmustern somit wie mit handwerklichen Werkzeugen, wie beispielsweise Hammer, Schraubenzieher und Säge: Um einen Nagel in der Wand zu befestigen, genügt ein Hammer, es ist nicht notwendig, den Schraubenzieher oder die Säge zu verwenden. Trotzdem ist es sinnvoll, auch diese Werkzeuge zu kennen, so dass man nicht versucht, auch eine Schraube mit dem Hammer in die Wand zu treiben.

Allgemein kann man also sagen, dass ein großes Wissen zwar von Nöten ist, um Probleme überhaupt erkennen zu können, dass aber Erfahrung und Weisheit dazugehören, sein Wissen zielgerichtet einsetzen zu können.

Architektur = Planen + Entwurfsmuster

Donnerstag, 11. September 2008, 11:25 Uhr
Permalink | Kommentare (4) | Kommentare als RSSRSS

Vor einigen Tagen habe ich versucht, die Frage Was ist Architektur?, die mir Peter Bucher einige Wochen zuvor gestellt hat, zu beantworten. Peter hat daraufhin meinen Eintrag direkt aufgegriffen und ihn in einem eigenen Eintrag um einen wesentlichen Aspekt ergänzt.

Ein guter Anfang um den Zielen "Qualitativ gute Software" und "Entwickler" Rechnung zu tragen, ist sicher die vorgängige Auseinandersetzung mit den Anforderungen. Also auch mal den Block zur Hand nehmen. Etwas auf Papier bringen, aus verschiedenen Blickwinkeln betrachten und dann erst einen Prototyp zu bauen.

Diesen Sätzen möchte ich mich ohne jegliche Einschränkung anschließen, meiner Meinung nach kann man den Aspekt der Planung für die Architektur nicht genug betonen, er ist sozusagen die Essenz des Ganzen.

Doch warum ist das so? Warum ist eine vernünftige Planung so wichtig für die Softwareentwicklung?

Die Antwort ist simpel: Es liegt daran, dass grundlegende Korrekturen desto teurer werden, je weiter fortgeschritten das Projekt ist. Im Prinzip ist es wie beim Hausbau:

  • Den Grundriss des Hauses auf dem Papier zu ändern, bevor mit dem Bau begonnen wurde, ist simpel.
  • Den Grundriss des Hauses zu ändern, sobald das Fundament gelegt wurde, ist möglich, aber mit Aufwand verbunden.
  • Den Grundriss des Hauses zu ändern, bevor abschließend das Dach aufgesetzt wird, ist extrem aufwändig und teuer.

Genauso verhält es sich bei der Softwareentwicklung: Je früher eine Änderung notwendig ist, desto weniger Code ist direkt (und indirekt!) betroffen und desto weniger langwierige Änderungen sind notwendig. Da jede Codeänderung zudem entsprechenden, eigentlich vermeidbaren, Testaufwand nach sich zieht, wird schnell klar, warum dies so ist.

Es rentiert sich also durchaus, eine Software zunächst grundlegend und detailliert zu durchdenken, bevor man sich an die Implementierung begibt. Besonders nützlich ist natürlich, wenn sich für gewisse Situationen bereits Lösungsansätze oder Vorgehensweisen bewährt haben, die man lediglich erneut einsetzen muss. Dann wird nämlich der Aufwand so wohl für die Planung wie auch für die Entwicklung geringer.

Daraus wird auch ersichtlich, warum Entwurfsmuster für die Softwarearchitektur eine so große Rolle spielen: Sie geben dem Architekten erprobte Werkzeuge an die Hand, um gewisse Aufgaben zu lösen. Für eine gute Architektur ist es zwar nicht ausreichend, Entwurfsmuster miteinander zu kombinieren, aber sie zur Hand zu haben und zu wissen, welches Entwurfsmuster man in welchem Kontext wie einsetzen kann, ist enorm hilfreich.

Außerdem erleichtern Entwurfsmuster die Kommunikation zwischen Architekten und Entwicklern, denn beide Seiten haben damit eine gemeinsame Terminologie, die exakt definiert wurde. So bleibt weniger Raum, in dem Missverständnisse entstehen können, und es lassen sich überflüssige Diskussionen vermeiden.

Häufig werde ich gefragt, wie man beginnen sollte, sich mit Architektur zu beschäftigen. Ich habe dafür zwar kein festes Schema, denn einen großen Teil macht schlichtweg die Erfahrung und die Beschäftigung mit der Materie aus, aber ich rate fast jedem Entwickler, der mich dies fragt, dazu, sich mit Entwurfsmustern auseinanderzusetzen und versuchen, zu verstehen, warum diese so und nicht anders aufgebaut sind.

Im Lauf der Zeit ergeben die einzelnen, zunächst isoliert erscheinenden Entwurfsmuster, dann ein Netz, das sich immer dichter verknüpfen lässt, und man beginnt, die Konzepte hinter den Entwurfsmustern zu verstehen. Ist dieser Punkt erst einmal erreicht, so kann man dies durchaus als einen gelungenen Start in die Welt der Architektur bezeichnen.

Was ist Architektur?

Mittwoch, 3. September 2008, 18:37 Uhr
Permalink | Kommentare (2) | Kommentare als RSSRSS

Von Zeit zu Zeit wird man in seinem Leben mit einer bestimmten Art von Fragen konfrontiert, bei denen jeder - vor allem man selbst - davon ausgeht, dass man diese mit Leichtigkeit beantworten können müsste, aber: Nichts da! Just in dem Moment, in dem man zu einer Antwort ansetzt, fällt einem ein Aspekt ein, den man noch nicht bedacht hat. Und je länger man über die Antwort nachdenkt, desto tiefer steigt man in die verworrenen Feinheiten der Frage ab und kommt nach Tagen zu dem Ergebnis, dass man eigentlich mit dem Nachdenken und all den neu gewonnenen Erkenntnissen noch einmal ganz von vorne anfangen müsste.

Vor einigen Wochen war es bei mir wieder einmal so weit: Peter Bucher, MVP für ASP.NET und ein von mir äußerst geschätzter MSN-Kontakt, hat mich gefragt, wie ich eigentlich den Begriff der Softwarearchitektur definieren würde. Als Architekt, so dachte ich, müsste mir die Antwort bereits vorformuliert auf der Zunge liegen, nur noch darauf wartend, dass ich sie ausspreche. Meine spontane Antwort lautete, dass ich erst einmal einen Tag Bedenkzeit benötigte.

Aus dem einen Tag sind inzwischen einige Wochen geworden, und ich glaube, die Frage inzwischen zumindest nach bestem Wissen und Gewissen als Diskussionsgrundlage beantworten zu können. Ich bin mir sicher, dass ich mindestens einen, garantiert aber eher zahlreiche Aspekte nicht abgedeckt habe, aber eben deshalb stellt meine Antwort auch nur eine Grundlage für eine weiterführende Diskussion dar.

Der Frage von Peter liegt meines Erachtens eine andere, tiefer gehende Frage zu Grunde: Wie schreibt man gute Software? Letztendlich geht es bei der Entwicklung von Software auch in Zeiten von C#, WPF und Silverlight immer noch um das klassische EVA-Prinzip: Irgendwelche Daten werden eingegeben, sie werden verarbeitet und schließlich wieder ausgegeben. Egal, ob es sich um eine kryptische Konsolenanwendung oder eine grafisch aufpolierte und moderne Web 2.0-Anwendung handelt, die in der neuesten Hype-Technologie geschrieben wurde: Fehlt einer dieser drei Aspekte, verliert die entsprechende Anwendung ihren Sinn.

Anders formuliert: Anwendungen sind dazu da, um Probleme zu lösen, wobei das Wort Problem im weitesten Sinne gebraucht wird (auch das Schreiben einer E-Mail an meine Schwiegereltern ist in diesem Zusammenhang ein Problem, obwohl ich sehr nette Schwiegereltern habe). Man könnte also auch sagen, Anwendungen sind dazu da, um Aufgaben zu meistern, die wir ihnen stellen, und die wir ohne sie (zumeist) nicht lösen könnten. Natürlich kann ich an Stelle einer E-Mail auch einen Brief auf einer Schreibmaschine schreiben, aber das hätte dann nichts mehr mit Software zu tun.

Wann ist also eine Software gut? Dann, wenn sie die zu lösende Aufgabe löst, wenn sie also ihre Funktion erfüllt, wegen derer sie überhaupt erst geschrieben wurde. Doch dies ist - wenn nicht falsch - so doch im äußersten Maße unzureichend. Denn die Bereitstellung der Funktionalität ist zwar eine notwendige Voraussetzung, sie ist aber bei weitem nicht die einzige: Neben der Funktionalität spielen zahlreiche Faktoren wie Stabilität, Portabilität, Erweiterbarkeit, Austauschbarkeit, Wartbarkeit, ... eine Rolle - und hier kommt schnell eine weitere Frage ins Spiel: Interessant ist auf einmal nämlich nicht mehr, was gemacht wird, sondern wie es gemacht wird.

Genau das ist der entscheidende Unterschied zwischen Programmierung, Entwicklung und Architektur: Während sich die Programmierung mit dem reinen Was auseinandersetzt, beschäftigt sich Architektur mit dem Wie. Und die Schnittstelle zwischen beidem - quasi die architekturbewusste Programmierung - ist die Entwicklung. Deshalb besteht für mich auch immer ein großer Unterschied zwischen Programmierern und Entwicklern - während erstere nur versuchen, ihren Code irgendwie herunterzuschreiben, denken zweitere auch darüber nach, wie man Code beispielsweise effizient, sicher oder performant gestaltet.

Nun ist es aber auch so, dass es nicht nur einen einzigen Weg gibt, der glücklichmachend ist - das Wie kann also auf viele verschiedene Arten umgesetzt werden. So könnte der Schwerpunkt der Entwicklung beispielsweise auf eine möglichst gute Erweiterbarkeit oder eine möglichst gute Portabilität gelegt werden. Idealerweise sollten alle diese Aspekte gleichermaßen berücksichtigen, aber das ist aus Zeit-, Geld- oder sonstigen Gründen oftmals nicht möglich. Häufig schließen sich bestimmte Aspekte sogar gegenseitig aus. Performance und Plattformunabhängigkeit beispielsweise: Entweder schreibt man performanten, an eine Plattform optimierten und damit gebundenen Code - oder generischen, plattformunabhängigen Code, der dafür nicht mehr das Optimum aus der jeweiligen Plattform herausholt.

Insgesamt ergeben sich daraus viele verschiedene Stile, wie man das Wie leben kann. Und letztendlich führen diese Überlegungen, die für jede Software neu angestellt werden müssen, letztlich zu einer bestimmten Art und Weise der Herangehensweise - eben der Architektur.

Zusammenfassend könnte man also sagen, dass Architektur das vorausschauende Planen einer Software unter Berücksichtigung aller derzeitig und potenziell zukünftig relevanten Aspekte in dem ihnen zustehenden Maß ist, ohne dabei die Funktionalität aus den Augen zu verlieren, auf Grund derer die Software überhaupt erst entwickelt wird.