Was ist Software?
Je mehr ich über Systemarchitekturen und vor allem die mit ihrer Herstellung, Erhaltung und Weiterentwicklung verbundenen Tätigkeiten nachdenke, desto dringender wird mein Bedürfnis nach eine Metapher für Software. Ich suche nach einer Projektion von Software und Ihrer Architektur auf physische Gegenstände.
Im Extreme Programming ist es einer der Schlüsselmomente, wenn das Team eine Metapher für die zu erstellende Software entwickelt. Es können verbale Beschreibungen für die grundlegende Funktionalität entstehen, wie z. B.:
"Diese Optimierungssoftware arbeitet eigentlich wie jemand, der wertvolle Gegenstände unterschiedlicher Größe in einen kleinen Rucksack packen soll, um einen möglichst großen Gesamtwert mitzunehmen". So eine "Einbrecher-Metapher" für eine Optimierungssoftware erleichtert das Verständnis und den Gesamtüberblick für das gesamte Team ungemein.
Schauen wir aber auf das gesamte Thema Software, so wird die Luft schon dünner. Fragt man Google so drehen sich alle Definitionen um Programme und Daten, die auf elektronischen Rechnern ablaufen. Das hilft aber überhaupt nicht, wenn man jemandem die Aufgabe stellt, Software herzustellen. Wonach soll er sich richten? Ist Softwareherstellung eine Ingenieursleistung wie in der Automobilindustrie, wo man sich an Produktlinien, Teamstrukturen und Konstruktionsprozesse halten kann? Ist Software eher ein Konsumgut und gehorcht den Regeln von Angebot und Nachfrage, hat ein Haltbarkeitsdatum und wird am Fließband aus Grundelementen hergestellt? Oder ein Pharmazieprodukt, welches jahrelang in aufwändigen Testreihen erprobt wird, bevor es auf den Rest der Menschheit (mit weitgehend bekannten Nebenwirkungen) losgelassen wird?
Vergleichen wir das mal mit Musik. Was sind die Voraussetzungen zur Herstellung von Musik? Man benötigt ein Instrument und man sollte dieses tunlichst beherrschen, d. h. es sollten keine unvorhersehbaren Ergebnisse aus seiner Bedienung entstehen. Ein guter Musiker ist jemand, der nicht nur die Grundtechniken Rhythmus und Melodie sondern auch einen kreativen Aspekt, Komposition oder Interpretation, beherrscht. Ein guter Softwarearchitekt sollte ebenfalls eine Art Handwerkszeug zur Verfügung haben, aber was ist das? Sind das die gesammelten Werke Donald Knuths? Um ehrlich zu sein, ich weiß es nicht. Ich selbst bewege mich bei allen Systemarchitekturen, die ich je entworfen habe auch immer in der Gewissheit, dass sie im Moment des Entwurfs meine beste Idee für die Lösung des Problems war. Schon eine kleine Änderung der äußeren Parameter aber reicht, dass ein System komplett versagt. Bei der Häufigkeit von Änderungen und der Gewissheit, niemals alle Anforderungen an ein System vorausahnen zu können wäre also "Robustheit" eine Eigenschaft, die ein Systemarchitekt unbedingt in seinem Entwurf berücksichtigen sollte. Fangen wir also damit an, einfache Techniken zur Robustheit von Architekturen zu sammeln.
Im Extreme Programming ist es einer der Schlüsselmomente, wenn das Team eine Metapher für die zu erstellende Software entwickelt. Es können verbale Beschreibungen für die grundlegende Funktionalität entstehen, wie z. B.:
"Diese Optimierungssoftware arbeitet eigentlich wie jemand, der wertvolle Gegenstände unterschiedlicher Größe in einen kleinen Rucksack packen soll, um einen möglichst großen Gesamtwert mitzunehmen". So eine "Einbrecher-Metapher" für eine Optimierungssoftware erleichtert das Verständnis und den Gesamtüberblick für das gesamte Team ungemein.
Schauen wir aber auf das gesamte Thema Software, so wird die Luft schon dünner. Fragt man Google so drehen sich alle Definitionen um Programme und Daten, die auf elektronischen Rechnern ablaufen. Das hilft aber überhaupt nicht, wenn man jemandem die Aufgabe stellt, Software herzustellen. Wonach soll er sich richten? Ist Softwareherstellung eine Ingenieursleistung wie in der Automobilindustrie, wo man sich an Produktlinien, Teamstrukturen und Konstruktionsprozesse halten kann? Ist Software eher ein Konsumgut und gehorcht den Regeln von Angebot und Nachfrage, hat ein Haltbarkeitsdatum und wird am Fließband aus Grundelementen hergestellt? Oder ein Pharmazieprodukt, welches jahrelang in aufwändigen Testreihen erprobt wird, bevor es auf den Rest der Menschheit (mit weitgehend bekannten Nebenwirkungen) losgelassen wird?
Vergleichen wir das mal mit Musik. Was sind die Voraussetzungen zur Herstellung von Musik? Man benötigt ein Instrument und man sollte dieses tunlichst beherrschen, d. h. es sollten keine unvorhersehbaren Ergebnisse aus seiner Bedienung entstehen. Ein guter Musiker ist jemand, der nicht nur die Grundtechniken Rhythmus und Melodie sondern auch einen kreativen Aspekt, Komposition oder Interpretation, beherrscht. Ein guter Softwarearchitekt sollte ebenfalls eine Art Handwerkszeug zur Verfügung haben, aber was ist das? Sind das die gesammelten Werke Donald Knuths? Um ehrlich zu sein, ich weiß es nicht. Ich selbst bewege mich bei allen Systemarchitekturen, die ich je entworfen habe auch immer in der Gewissheit, dass sie im Moment des Entwurfs meine beste Idee für die Lösung des Problems war. Schon eine kleine Änderung der äußeren Parameter aber reicht, dass ein System komplett versagt. Bei der Häufigkeit von Änderungen und der Gewissheit, niemals alle Anforderungen an ein System vorausahnen zu können wäre also "Robustheit" eine Eigenschaft, die ein Systemarchitekt unbedingt in seinem Entwurf berücksichtigen sollte. Fangen wir also damit an, einfache Techniken zur Robustheit von Architekturen zu sammeln.

0 Comments:
Post a Comment
<< Home