My Flight Has Been Delayed

… due to general awesomeness.

Nachdem ich hier in letzter Zeit fast nur noch an dem Forschungsprojekt arbeite und kaum zum Sightseeing komme, blieb mir nichts anderes übrig, als meinen Aufenthalt zu verlängern. 🙂

Heute hab ich endlich die lange geplante Umbuchung vorgenommen. Neuer Reiseplan:

31. Juli 18:00 ab Auckland, 19:25 an Sydney

7. August 21:10 ab Sydney, 8. August 13:45 an Düsseldorf

Wird also etwas mehr als nen Monat später, ich fliege von Auckland statt von Christchurch und hab ne Woche Aufenthalt in Sydney. See ya then, guys.

Vielleicht benötigt man ja auch mal einen Kleinwagen…

…  für nen Ausflug, oder fürs Rumreisen, oder so…

Ist schon ein paar Wochen her, aber ich hab endlich ein Auto gekauft! Yay! Nach über zwei Monaten hatte es die Uni hier endlich mal hinbekommen, das Geld von meinem Stipendium zu überweisen. And by coincidence hat mich kurz vorher Natascha, mit der ich schon im Februar ’n bisschen rumgereist war, gefragt, ob ich ihren Wagen kaufen will. Wollte ich. Und so hat für 1.500 $ ein 1989er Honda Civic Automatik den Besitzer gewechselt. Farbe? Na was wohl: Rot natürlich.

Die ersten Trips hat der Wagnen auch schon hinter sich. Zuerst über die Canterbury Plains, dann nach Queenstown (war ein abenteuerlicher Trip – nicht nur wegen des Jumps. Aber mehr dazu wenn ich aus den ganzen Fotos von der aaaawsome Landschaft ne angemessene Auswahl getroffen hab), und zuletzt nach Westport. More to come.

I might as well … JUMP!

(Ohne Worte)

Hoffentlich komm ich in den nächsten Tagen dazu, was zu schreiben. Gibt im Moment ein bisschen was zu erzählen, aber auch viel zu tun 🙁

Bis bald!

Ornithologie

Nein, das hat was mit Vögeln zu tun. Hier geht es um ONTOlogie. In der Philosophie ist die „Lehre vom Sein“ ein Bereich der Metaphysik (womit  wir wieder beim Kategorie-Namen wären…). Ürgs. Was hat das mit Computern zu tun?

Die Agenten unterhalten sich, wie erwähnt, mit Nachrichten. Jetzt wäre es gut, wenn jeder Agent das „verstehen“ würde, was die anderen Agenten in ihre Nachrichten schreiben. Wenn er also Begriffe wie „Container“ oder „Schiff“ oder „Lagerblock“ erkennt und darüber hinaus noch „weiß“, dass ein „Container“ in einen „Lagerblock“ im „Schiff“ „verladen“ werden soll. Und genau diese Begriffe und Zusammenhänge beschreibt man mit einer Ontologie. Im Grunde ist sie eine Mindmap für Computerprogramme. Alle möglichen Daten, die in meinem System vorkommen, sind also ontologisch beschrieben, damit die Agenten was damit anfangen können. (Onto-)Logisch, oder? 🙂 Die Nutzung einer Ontologie hat noch ein paar andere Vorteile beim Programmieren, mit denen ich Euch jetzt aber nicht auch noch nerven werde.

Ein ziemlich großer Bereich beim Konstruieren eines Systems ist aber gerade, herauszufinden mit was für Daten es sich auseinandersetzen soll. Und „Daten“ bedeutet hier nicht einfach Zahlen, z.B. Messergebnisse oder so. Jedes „Ding“ aus der wahren Welt, das von dem Programm bearbeitet werden soll, muss in den Computer abgebildet werden. Dabei geht es darum, zu abstrahieren und zusammenzufassen. Z.B. ist es mir ziemlich egal, ob ein Container nun gelb, grün, oder ROT ist. Was mir vielleicht nicht egal ist ist, wem er gehört, z.B. Hamburg Süd oder Hapag Lloyd oder so, weil davon abhängen kann, wo er gelagert wird. Wenn mein ContMAS allerdings aus den verschiedenfarbigen Containern ein Bild im Lager zusammensetzen sollte, das man sich aus nem Flugzeug angucken kann, wäre die Farbe schon wichtig (das ist ja wohl mal eine GRAN-DI-OSE Idee für ein Easteregg. Allerdings ’n bisschen viel Aufwand …). Was bei solchen Überlegungen herauskommt, ist ein Datenmodell, und zwar für einen spezifischen Anwendungszweck, nämlich eben für die Modellierung eines Containerhafens. Wenn man das hat, ist das schon mal die halbe Miete. Die andere Hälfte besteht dann daraus, festzulegen, wie mit diesen Daten umgegangen werden soll und wie sie geändert werden, wenn z.B. ein Container aus dem Schiff ins Lager wandert. Bei allem, was mit Computern zu tun hat, geht es nur darum: Zusammenhänge aus dem „wahren Leben“, so zu vereinfachen und zusammenzustellen, dass man sie automatisiert bearbeiten kann.

Schaltet auch beim nächsten Mal wieder ein, wenn es heißt: Rette Mich Wer Kann!

Viel-Handelnden-Gebilde

Wat is en Multiagentensystem? Da stellen wa uns ma janz dumm und saagen:

Ein Agent soll soetwas sein, wie ein eigenständig laufendes Programm, das von sich aus bestimmte Aktionen durchführt. Klingt nach KI, künstlicher Intelligenz. Ich bin SEHR skeptisch bei solchen Begriffen. Es KANN etwas mit dem zu tun haben, was in dem Forschungsgebiet untersucht wird, welches diesen Begriff als Namen trägt. Ein Agent könnte aber auch einfach ein Programm sein, das jede E-Mail ausdruckt, die man empfängt. Nicht besonders intelligent, die ganzen Viagra-Angebote auch noch auf Papier zu bannen… Tatsächlich ist der Begriff „Agent“ nirgends scharf definiert, jeder versteht ein bisschen was anderes darunter. Und neu ist das auch nicht wirklich, schon ewig gibt es Programme, die im Hintergrund laufen und scheinbar „selbstständig“ irgendwelche Aktionen ausführen.

Was zur Hölle ist dann ein MULTIagentenSYSTEM? Nunja, im Grunde genommen ein Programm, das aus vielen kleinen Programmen besteht, die alle mehr oder weniger selbstständig ihre Aufgaben versehen. Und diese Agenten arbeiten dabei zusammen und versuchen eine gemeinsame Aufgabe zu erfüllen.

Was soll der Quatsch? Dann kann man doch auch direkt nur ein Programm entwickeln, wozu viele kleine? Sicher kann man. Aber das wird ZIEMLICH schwierig zu durchschauen. Je komplexer die Aufgabe, desto komplexer wird auch das Programm, um sie zu lösen. Und wie schon erläutert ist die Aufgabe „Einen Containerhäfen darstellen“ schon ziemlich komplex. Der Trick ist also „divide et impera“: Die Aufgabe aufteilen in viele kleine Aufgaben und diese dann an mehrere kleinere, einfacher zu durchschauende Programme verteilen, eben diese Agenten. Dabei kann es passieren, dass Ergebnisse entstehen, die man überhaupt nicht erwartet oder einprogrammiert hat, die Agenten zeigen ein emergentes Verhalten.

Auch nichts neues, mag der eine oder andere einwerfen. Threadprogrammierung gibt es auch schon ewig. Dabei versucht man eben das zu tun, was zu erläutern ich mich soeben bemüht habe: Ein Programm in mehrere kleine unterteilen, die parallel und unabhängig voneinander ausgeführt, also auch an mehrere Prozessoren verteilt werden können. Diese arbeiten dann gleichzeitig und die modernen Multiprozessor-Systeme spielen erst ihre wahre Stärke aus. Schließlich ist dem Lager, das grade den besten Standplatz für einen Container sucht, ziemlich egal, was gleichzeitig der Kran treibt.

Stimmt, gibt es auch schon ewig, aber ein Problem entsteht dabei immer: Die einzelnen Threads müssen synchronisiert werden, d.h. an bestimmten Stellen im Programmablauf müssen sie aufeinander warten, z.B. weil ein Zwischenergebnis von dem einen Programm an das andere weitergegeben werden muss. Das ist nun relativ kompliziert und findet meistens direkt im Quellcode beim Programmieren von Hand statt. Was fehleranfällig und aufwändig ist. Ein Multiagentensystem (oder besser ein vorgefertigtes Framework dafür, so wie JADE) fungiert jetzt als Abstraktionsschicht. Der Programmierer (also z.B. im Moment ich) muss sich relativ wenig Gedanken um die Synchronisierung machen, das übernimmt JADE. Und noch einen weiteren Vorteil gibt es: Man kann sehr einfach mehrere Computer zu einem System zusammenschließen und dann z.B. den Lageragenten auf dem einen und den Kranagenten auf einem anderen Computer ausführen. Die Agenten merken davon nichts, denn sie unterhalten sich nur über Nachrichten. Die Zustellung übernimmt das Framework, und ob die Nachricht jetzt von einem anderen Computer kommt oder nicht ist dem Agenten herzlich egal.

Soviel dazu. Aber da war doch noch so ein anderes komisches Wort. Ornitologie? Dazu mehr beim nächsten Mal.

ContMAS: Klingt komisch…

...is aber so!

Was kann es also? Es kann den Transportweg eines Containers durch einen Hafen darstellen, also die einzelnen Schritte, vom Schiff, über Kran, der Fläche darunter, dem Transportwagen (Straddle Carrier) bis zum Lager. Es kann die Zeit, die so ein Transport benötigt, ausrechnen. Und es bietet jede Menge mögliche Ansatzpunkte und Erweiterungsmöglichkeiten. Eine davon ist, den „optimalen“ Stellplatz für einen bestimmten Container herauszufinden. Im Moment wird der einfach zufällig ausgesucht. Aber alles ist so vorbereitet, dass der genetische Algorithmus von Thomas zur Optimierung der Containerverteilung im Hafen zur Bestimmung genutzt wird. Der ist recht glücklich darüber, sich nicht wieder sein eigenes Modell bauen zu müssen, sondern auf eins zurückgreifen zu können.

Ich meinerseits greife auch auf etwas zurück, und zwar auf eine „Visualisierung“ von einem Kommilitonen in Deutschland, Nils. Er hat für sein Projektseminar/Bachelorarbeit etwas entwickelt, was theoretisch alle möglichen sich-bewegenden Ob- oder Subjekte mit einer bestimmten Technik darstellen kann. In der letzten Woche haben wir zum ersten Mal versucht, unsere beiden Teile zusammenzuschmeißen, also mein Modell irgendwie sichtbar zu machen, so dass man auch SIEHT, wenn ein Straddle Carrier durch den Hafen fährt, und nicht nur eine langweilige Textausgabe bekommt wie „Fahre los.“ – „Bin angekommen. Habe 1 Minute gebraucht.“ Und bei dem Versuch ist es nicht geblieben. Innerhalb von 3 Tagen haben wir es zum Laufen gebracht, und das war ein schönes Erfolgserlebnis.

Wir beide greifen auch noch auf etwas anderes zurück, nämlich auf die schon häufiger erwähnten „Multiagentensysteme“ und „Ontologien“. Was hat es damit auf sich? Das sehen wir dann beim nächsten Mal. Aber jetzt kommt eh nichts mehr, also: Abschalten!

Modellbau

Was bisher geschah.

Und jetzt die Fortsetzung:

Wie gesagt gibt es jede Menge Literatur über Containerhäfen in allen möglichen Variationen. Eigentlich erstaunlich, könnte man meinen. Was kann schon so schwer daran sein, ein paar „genormte“, also immer gleiche, Metallkisten von einem LKW auf ein Schiff zu stellen? Nichts weiter. Wenn es nur ein paar sind. Bei Schiffen mit 14.000 (Danke an Jo! War mein Fehler. Die momentan größten (MSC Daniela)  fassen 13.800 TEU,  aber der Hafen von Otago fertigt nur Schiffe ab, die etwa ein zehntel davon sind. Hatte mich bei der Zahl vertan) 1.400 Containern Kapazität (und das sind nur die kleinsten) wird es da schon etwas komplizierter und es ergeben sich jede Menge Probleme und zwar auf allen möglichen Ebenen. Wie sollte der Hafen von vornherein aufgebaut sein, wo die Anlegestellen, wo die Lager und wo die Bahngleise liegen? Wie sollen die Container im Hafen sortiert werden, chaotisch, nach Frachtart, nach Schiff auf dem sie landen sollen, oder vielleicht nach Farbe? Wieviele und welche Kräne und anderen Geräte im Hafen sollen für ein spezielles Schiff eingesetzt werden? Wie sollen die Container auf dem Schiff verstaut werden? Um nur die offensichtlichsten aufzuführen. Weiteres Problem: Alles muss so schnell wie möglich sein und dabei so wenig wie möglich Aufwand (also Bewegungen der Geräte) verursachen UND auch noch flexibel auf Änderungen reagieren können. Da reicht es schon, wenn der Hafenlotse das Schiff wegen Wind andersherum anlegen lässt als geplant und der ganze schöne Stauplan kann per du sein, weil die Reihenfolge der Reihen beim Laden ungünstig ist.

Naja, ist ja nicht weiter schlimm, sowas kann ja ein Computer ausrechnen, der gibt dann automatisch einen neuen Stauplan aus.

Ah.

So.

Tja, ein Computer muss aber erstmal verstehen, worum es eigentlich geht. Dem muss man beibringen, was ein Container ist, und warum man nicht einfach einen unter einem anderen wegnehmen kann, ohne vorher alles darüber umzuschichten. Wie alle Geräte im Hafen gleichzeitig an verschiedenen Stellen arbeiten. Und das nennt man ein Modell. Keins aus Holzklötzen, sondern eins aus Codezeilen. Hat man einmal so ein Modell gebastelt (und zeigt es anderen, damit sie gucken können, ob es einigermaßen realistisch ist), dann kann man damit jede Menge schicke Sachen machen: Vor dem Bau eines Hafens verschiedene mögliche Lageplan-Varianten ausprobieren, automatisch den besten Platz zum Lagern eines bestimmten Containers finden. Schauen, was passiert, wenn 95% aller Stellplätze belegt sind und was man dagegen machen kann, oder eben einen Stauplan automatisch erzeugen und ggf. dynamisch verändern, wenn z.B. ein Container, der ganz unten stehen sollte, nicht rechtzeitig zum Beladen vom Zoll freigegeben wird. Letzten Endes könnte man sogar die Kräne und Fahrzeuge zu einem gewissen Grad automatisch steuern.

Bevor also irgendjemand einen von seinen tollen Plänen, die er sich gemacht hat, um ein bestimmtes Problem (besser) zu lösen, ausprobieren kann, braucht er dafür erstmal ein Modell. Das baut sich dann jeder selber und legt dabei auf unterschiedliche Sachen Wert, austauschen kann man die nicht untereinander. Und hergeben tut das natürlich erst recht niemand, denn jemand anders könnte ja einen Vorteil davon haben!

Und das ist ContMAS, das Produkt meines Projektseminars und in weiterentwickelter Form Gegenstand meiner Bachelorarbeit NICHT. Also, schon ein Modell. Aber ich versuche, es möglichst flexibel zu gestalten, so dass man es für möglichst viele unterschiedliche Zwecke gebrauchen kann. Und so, dass man es gut erweitern kann. Denn mein Modell kann ruhig jeder haben, ich gebe es als OpenSource frei, so wie, meiner Überzeugung nach sämtliche Forschungsergebnisse an Unis freigegeben werden sollten. Ich glaube kaum, dass ich damit die „Welt der kapitalisierten Forschungsausbeuter“ aufrolle und revolutioniere. Ist auch gar nicht mein Ziel. Aber jedenfalls weiß ich dann, dass es ein freies Modell gibt, dass sich nicht scheut, den Vergleich mit irgendeinem anderen anzutreten. Und natürlich fänd ichs toll, wenn irgendjemand das benutzt oder weiterentwickelt, denn das würde zeigen, dass es nicht allzu schlecht ist. Man wird sehen. Vielleicht schon im nächsten Teil?

Was ich hier eigentlich mache

Ich hatte ja neulich schon ein wenig von diesem ominösen „Projekt“ berichtet, bei dem ich mitmache. Aber wie sieht das nun eigentlich genau aus, und was habe ich davon?

Das Projekt soll im Endeffekt die Jade Corporation dabei unterstützen, ihr Produkt Jade Master Terminal zu verbessern. Jedoch wird wohl nichts von dem, was ich oder die anderen programmieren direkt ein Teil von JMT werden. Vielmehr sollen die firmeneigenen Programmierer die Ideen aufnehmen und dann umsetzen und in JMT einfließen lassen. Unser (damit meine ich alle hier an dem Projekt beteiligten) unmittelbares Ziel ist eine Präsentation, die Ende Juni für etwa 40 Personen gehalten werden soll, denen dabei vermittelt wird, warum Jade eigentlich seit Jahren soviel Geld in die Uni pumpt. Wir haben also einerseits unsere eigentlichen „akademischen“ Ziele, etwas herumzuexperimentieren und am Ende jeweils eine halbwegs kohärente wissenschaftliche Arbeit zu produzieren, die etwas neues zeigt, oder etwas bekanntes anwendet oder überträgt oder nachweist. Daneben müssen wir uns aber auch über die wirtschaftliche Bedeutung einige Gedanken machen, und uns auf Sachen konzentrieren, die unmittelbarer nützlich sind.

Z.B. wird Port Otago, der Kunde von JADE, kaum in nächster Zeit auf ein vollautomatisches Containertransportsystem umsteigen. Den Einsatz eines solchen in einem kleinen Hafen zu untersuchen wäre also total ungünstig. Und darüber hinaus wollen die Leute bei dieser Präsentation auch gerne etwas sehen, was einigermaßen schick wirkt und einfacher zu erfassen ist als seitenlange Textausgaben oder wirre Nachrichtendiagramme. In einer Bachelor-Arbeit kann man sich mit Tabellen, Diagrammen viel Text und ein paar geschönten Bildschirmfotos vielleicht davonstehlen und ein paar hypothetische Szenarien aufstellen, bei der Präsentation soll alles etwas „praxisnäher“ sein. Das bedeutet jetzt keineswegs, das sei per se schlecht, es macht nur die ganze Angelegenheit etwas … interessanter.

Wie schon geschrieben, ist es auch eine Herausforderung, die verschiedenen Teile überhaupt irgendwie zusammenzuführen und da einen einheitlichen Prototypen draus zu stricken. Aber Systemintegration ist ja schließlich eins der Aufgabenfelder eines Systemingenieurs und der Mensch wächst mit seinen Herausforderungen. Ich hatte zu Beginn (was heißt: so etwa bis Anfang Februar) ja ohnehin keine genaue Vorstellung, was das hier so alles gibt und wie meine Bachelorarbeit aussehen könnte. Aber so langsam kristallisiert sich das heraus.

Alles dreht sich um dieses Multiagentensystem, was ich schon für das Projektseminar gebaut habe: ContMAS. Der Stand des Projektseminars ist, von Außen betrachtet, nicht sonderlich spannend: Es gab ein kleines Fensterchen, in das man ein paar Daten eingeben kann, einen Knopf drückt und dann kann man lustige bunte Pfeile in einem Nachrichtensequenzdiagramm erscheinen sehen. Doll. Im Hintergrund passiert hingegen ne ganze Menge. Den Aufbau dieses Systems und seine Grundlagen, nämlich Multiagentensysteme (und besonders JADE) und Ontologien habe ich dann in der Projektseminararbeit niedergelegt. Im Grunde war der ganze Prototyp nicht viel mehr als ein Proof-Of-Concept, dass man einen Containerhafen durch ein Multiagentensystem, was auf JADE basiert und dessen Agenten sich mit Hilfe einer Ontologie verständigen, darstellen kann. In seeeehr beschränktem Umfang.

Ist jetzt nicht so, als ob ich (bzw. mein Prof) der erste gewesen wäre, der darauf gekommen ist. Es gibt einige wissenschaftliche Artikel und sogar ein Buch, bei dem es um das System im Container Terminal Altenwerder in Hamburg geht, dem angeblich „modernsten Hafen der Welt“. Aber hier sind wir wieder bei wissenschaftlichen Produkten: Jede Menge heiße Luft. Die meisten schlagen vor, stellen vor, bieten an, probieren aus; und zwar verhältnismäßig abstrakte Modelle die recht weit davon entfernt sind, direkt überprüfbar zu sein. Da gibt es keine chemische Formel, die man im Labor zusammenbrauen könnte, oder eine mathematische, die man nachrechnen könnte, keinen Quellcode den man ausführen könnte. Nööö, die spannenden, überprüfbaren Ergebnisse behält jeder schön für sich. Könnte ja Geld mit zu verdienen sein. Da gibt es dann Sätze wie „ein System nach der hier vorgestellten Art wird momentan entwickelt und soll in Zukunft in Hafen XYZ eingesetzt werden“. Danke schön. Weiterdenken ist also nicht, man muss wieder von vorne anfangen. Sowas nervt mich! Wie soll man denn da nachweisen, das eine neue Methode besser ist als die bisherigen oder eine andere vorgestellte?

Fortsetzung folgt…

And now for something completely different

Wenn ich nun mal so ein schickes Blog hier habe und auch noch eine Leserschaft, die mehr oder weniger regelmäßig vorbeischaut, dann nutz‘ ich mal die Gelegenheit, verbreite ein paar krude Ansichten und langweile die geschätzten Leser damit. Soll schließlich hinterher niemand behaupten, Wir Hätten Nicht Alles Getan, Um Die CD Voll Zu Kriegen!

Den Anfang mach ich noch mit einer genaueren Erläuterung der mit der Anfertigung der Bachelorarbeit in Zusammenhang stehenden Aktivitäten in meinem Projekt. Wird so eine kleine Serie, um die Spannung zu halten und nicht mit zu langen Texten zu überfordern ;-). Die KfHs spare ich mir für diese Beiträge, sie seien dem geneigten Konsumenten als Übungsaufgabe zur Zusammenfassung und Vertiefung des Gehörten überlassen, um Ihn in den Reigen der Prosumenten des ach-so-großartigen Web 2.0 aufzunehmen. Das Kommentarfeld steht hierfür wie auch für jegliche kon- oder destruktive Kritik zur Verfügung. Delektiert mich mit einem Diskus. Äääh, Diskurs.

B.Sc. Angew. Inf. – Sys. Eng. In A Nutshell

Donnerstag Abend, eine typische Studentenparty in Essen (oder wahlweise mal wieder eine Kneipentour durch den SOL Square in Christchurch, NZ). Die übliche Frage: „Und, was studierst Du?“ – „Englisch und Sport auf Lehramt, und Du?“ – „Systems Engineering.“ – „Ah…“ [Verständnisloser Blick]

Aber ich dachte, der Hanno studiert irgendwas mit Computern?

Ich hab jetzt schon ein paar mal das Wort „Systemingenieur“ ,verwendet. Denn so sehe ich mich. Ich bin (oder „werde, wenn ich mal groß bin“) kein Informatiker, sondern ein Ingenieur. Was ist ein Ingenieur? Ein Ingenieur löst Probleme. Nicht ganz so wie Mr. Wolf („Ich bin Mr Wolf. Ich löse Probleme.“). Es ist ein bisschen wie das bekannte Zitat von Ashleigh Brilliant: „I don’t have any solution, but I certainly admire the problem “:. „Bewundern“ bedeutet allerdings: Erstmal schaut man sich das Problem sehr genau an, und versucht, es zu verstehen. Warum existiert es, WER hat überhaupt ein Problem. Ein klassisches Problem für einen „klassischen“ Ingenieur ist eine Schlucht. An sich erstmal kein Problem. Aber wenn jemand rüber will, ists halt schon eins. Naja, dann bauen wir halt ne Brücke rüber, klare Sache. Aber bevor irgend ein Bauingenieur anfängt, eine Brücke zu konstruieren, muss er erstmal jede Menge Fragen stellen und das Problem verstehen: Wer will rüber? Wie oft? Was will er alles mitnehmen? Und nicht ganz unwichtig ist auch: Wie tief ist die Schlucht, wie breit, und wie ist der Untergrund auf den beiden Seiten? Besonders unterschiedlich davon ist die Situation bei einem Computersystem eigentlich nicht. Ein neuer Geldautomat? Na klar! Für drinnen oder draußen? Nur EC-Karten oder auch Kreditkarten? Quittungsdrucker? Mehrsprachige Benutzerführung? Vielleicht akustische Benutzerführung für Blinde? Diese Phase bezeichnet der erfahrene Systemingenieur als Requirements Engineering: Anforderungserhebung.

<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } –>Jetzt ist man in einem so großen Projekt wie beim Brückenbau selten allein. Die Anforderungen müssen also auch noch niedergelegt werden. Am besten so, dass man hinterher noch was damit anfangen kann, und nicht nur man selbst, sondern auch die anderen Beteiligten. Weitere Stolperfalle: Anforderungen bleiben seltenst die ganze Zeit über gleich, sie müssen während der gesamten Projektlaufzeit gut beobachtet und „gemanaged“ werden. Vielleicht soll auf einmal auch eine Bahnlinie über die Brücke verlaufen, zusätzlich zu den Autos? Oder die Sicherheitslage verschärft sich und die Brücke muss stabil genug für Kampfpanzer werden. Oder der Geldautomat soll nach China exportiert werden können und daher Schrift von rechts nach links darzustellen in der Lage sein.

Der nächste Schritt ist dann die Konstruktion. Man kann natürlich einfach anfangen, ein paar Stahlträger zusammenzuschweißen und sich langsam in die Schlucht hineinzutasten. Wird schon irgendwie klappen. Deutlich geschickter ist es aber doch, erstmal ein paar Sachen durchzurechnen, ein Modell zu bauen, es im Windkanal zu testen, einen recht genauen Plan aufzustellen, den dann zu überprüfen und zu verfeinern und ihn DANN umzusetzen. Same goes with Programmen: Es gibt die verschiedensten Möglichkeiten, ein Programm zu konstruieren, ohne es direkt zu programmieren. Für fast jeden (un)denkbaren Aspekt gibt es Modellierungsarten und Diagrammformen. Vom Entity-Relationship-Modell für Datenstrukturen, über Datenflussdiagramme, Ereignisgesteuerte Prozessketten, Komponentendiagramme, Petri-Netze, Endliche Zustandsautomaten bis hin zu UML-Nachrichtendiagrammen oder UML-Klassendiagrammen. Einen großen Unterschied zwischen Programmen und Brücken gibt es aber schon: Während es bei Brücken schwierig bis unmöglich ist, das Ergebnis eines einmal realisierten Plans automatisch zu verändern wenn sich der Plan ändert, geht das bei Programmen schon. Zumindest theoretisch. Es kommt ganz darauf an, wie man die gemachten Pläne nutzt. Man kann schön gezeichnete UML-Diagramme ausdrucken und einem Programmierer in die Hand drücken, der setzt sie dann in Code um, ganz so wie der Stahlarbeiter die Brücke nach den Blaupausen zusammenschweißt. Man könnte aber auch aus den Diagrammen automatisch Quellcode generieren lassen, den groben Rahmen und die Struktur des Programms, und diese dann von Programmieren mit sinnvollen Erweiterungen anreichern lassen. Dingen, die man in einem Diagramm nicht darstellen kann, Aspekte, die beim Modellieren der Abstraktion zum Opfer gefallen sind. Und wenn alles so funktionieren würde, wie es sollte, dann könnten einige dieser Änderungen sich auch wieder automatisch in den Diagrammen wiederfinden. Jedenfalls könnte man bei den vorher angesprochenen Änderungen in den Anforderungen einfach das Modell ändern und die Änderungen dann in den Programmcode einfließen lassen. Klingt das nur für mich günstiger und schneller, als alles von vornherein in kryptischen Code zu gießen, den man nur umständlich ändern kann? Tatsächlich ist einiges hiervon nicht ganz so einfach umzusetzen, wie es klingt und die Toolunterstützung (also die Hilfe durch Programme, die helfen sollen, Programme zu bauen) hinkt an vielen Stellen den Visionären Ideen des Software Engineering hinterher.

Zwei weitere Vorteile haben Diagramme und Modelle: Man kann sie besser überprüfen und Testen als fertige Programme, bei denen alle möglichen Eventualitäten ausprobiert werden müssen. Das ist nämlich der nächste Schritt nach der Umsetzung der Pläne, also der Programmierung, das Testing. Bei Brücken ist das nicht ganz so offensichtlich, wird aber sicherlich auch betrieben. Schon während des Baus werden immer wieder Messungen durchgeführt, um festzustellen, ob das, was da gebaut wird, auch dem entspricht, was man sich vorher überlegt hat. In diesem Punkte sind die „klassischen“ Bauingenieure einen Schritt voraus. Testing dieser Art wird nämlich bei der Programmentwicklung heutzutage immer noch häufig sträflich vernachlässigt.

Der zweite Vorteil ist die Dokumentation. Selten entwickelt man ein Programm nur für sich selbt. Häufig sollen Schaaren von Menschen hinterher damit arbeiten, und sei es nur, um zu überprüfen, ob auch alles richtig funktioniert. Ein Bild sagt häufig mehr als tausend Worte, und so sind die Konstruktionsmodelle ein guter Ausgangspunkt für die Programmdokumentation und Hilfedateien, die den Benutzern den Umgang und die Funktionsweise erklären sollen.

Ich habe während dieser Ausführungen den Eindruck erweckt, als ob all die Punkte einzelne Schritte sind die, hintereinandergereiht, zum gewünschten Ergebnis führen. Doch hier ist noch ein Unterschied zum Brückenbau: Man kann alles gleichzeitig machen! Nachdem die ersten Anforderungen erhoben worden sind, kann die Konstruktion des Modells beginnen und vielleicht sogar schon ein erster kleiner Prototyp programmiert werden, der auf die gewünschten Funktionalitäten getestet wird. Währenddessen können aber weitere Anforderungen erhoben werden und in die Konstruktion und die Umsetzung einfließen. Wenn alles so läuft wie es sollte, dann „… Isse Kreislauf!“. Daher kommt auch die manchmal gebrauchte Bezeichnung Lifecycle Management.

Bei all dem muss man immer auch berücksichtigen, dass das entwickelte System eigentlich niemals für sich alleine steht, sondern fast immer mit anderen Systemen zusammenarbeitet. Passender Spruch hier: „Every System is someone’s subsystem“. Die Verbindungen mit diesen anderen Systemen, die sogenannten Interfaces, müssen daher auch genau festgelegt, gebaut, beachtet und getestet werden. Dann kann man das entwickelte System auch Jahre später noch nutzen oder weiterentwickeln, anstatt ständig wieder von vorne anfangen zu müssen.

Es ist jetzt keineswegs so, dass sich das alles auf die Entwicklung reiner Software beschränkt. Zunächst mal steckt „soft“ware heutzutage fast überall, in Autos, Geldautomaten, nem Herd, Spielzeug, Handy, der Jalousiesteuerung oder dem bekannten PC. Praktisch immer muss auch jemand damit arbeiten, nämlich ein Mensch! Dieser spielt daher beim Systems Engineering eine wichtige Rolle. Die Arbeitsabläufe, in denen das neue System teilhaben soll, müssen gut verstanden sein, sonst ist es am Ende im besten Fall überflüssig, im schlechtesten Fall eine Mehrbelastung, statt eine Erleichterung und Hilfe. Hinzu kommen noch die rein physikalisch-technischen Aspekte auf der Hardware-Seite. Aber die überlass ich gerne den Maschinenbau- oder Elektroingenieuren. Während die auf ihr Gebiet spezialisiert sind, sind wir sozusagen Spezialisten fürs Ganze (nicht etwa „für Alles“), die Zusammenarbeit der Einzelteile und nach Außen.

So, zu den ganzen Methoden und Modellen werfe man nun noch eine geballte Ladung theoretisches Hintergrundwissen (die tatsächliche „Informatik“: Zustandsautomaten, Markov-Ketten, Turing-Maschinen, blabla), ein bisschen aufgeblasene BWL (sieht nach viel aus, fällt aber in sich Zusammen wie Zuckerwatte. Nur nicht ganz so süß), sperrige Mathematik (hat man dran zu knabbern und liegt schwer im Magen), eine Priese Projektmanagement, einen Hauch (nur nicht zu viel, sonst verschluckt man sich dran!) von praktischem Projekt und wissenschaftlicher Arbeit sowie in meinem Fall zum aufpeppen noch jede Menge nahrhafte und abgefahrene Netzwerkkurse, rühre um und fertig ist der frischgebackene Bachelor Of Science Angewandte Informatik – Systems Engineering.

Aber versuch mal, das alles nach 2-3 Bier auf ner Party zur erklären, während im Hintergrund Lady Gaga quäkt und der Mob tobt.

Nein, lass es lieber. Hat eh keinen Zweck. Also die schnelle Methode:

„Der Studiengang heißt komplett ‚Angewandte Informatik – Systems Engineering’…“ – „Ah, Informatik, alles klar!“. Zack, Stempel drauf, ab in die Klischee-Schublade. Herzlichen Glückwunsch.

Jetzt ist man in einem so großen Projekt wie beim Brückenbau selten allein. Die Anforderungen müssen also auch noch niedergelegt werden. Am besten so, dass man hinterher noch was damit anfangen kann, und nicht nur man selbst, sondern auch die anderen Beteiligten. Weitere Stolperfalle: Anforderungen bleiben seltenst die ganze Zeit über gleich, sie müssen während der gesamten Projektlaufzeit gut beobachtet und „gemanaged“ werden. Vielleicht soll auf einmal auch eine Bahnlinie über die Brücke verlaufen, zusätzlich zu den Autos? Oder die Sicherheitslage verschärft sich und die Brücke muss stabil genug für Kampfpanzer werden. Oder der Geldautomat soll nach China exportiert werden können und daher Schrift von rechts nach links darzustellen in der Lage sein.

Der nächste Schritt ist dann die Konstruktion. Man kann natürlich einfach anfangen, ein paar Stahlträger zusammenzuschweißen und sich langsam in die Schlucht hineinzutasten. Wird schon irgendwie klappen. Deutlich geschickter ist es aber doch, erstmal ein paar Sachen durchzurechnen, ein Modell zu bauen, es im Windkanal zu testen, einen recht genauen Plan aufzustellen, den dann zu überprüfen und zu verfeinern und ihn DANN umzusetzen. Same goes with Programmen: Es gibt die verschiedensten Möglichkeiten, ein Programm zu konstruieren, ohne es direkt zu programmieren. Für fast jeden (un)denkbaren Aspekt gibt es Modellierungsarten und Diagrammformen. Vom Entity-Relationship-Modell für Datenstrukturen, über Datenflussdiagramme, Ereignisgesteuerte Prozessketten, Komponentendiagramme, Petri-Netze, Endliche Zustandsautomaten bis hin zu UML-Nachrichtendiagrammen oder UML-Klassendiagrammen. Einen großen Unterschied zwischen Programmen und Brücken gibt es aber schon: Während es bei Brücken schwierig bis unmöglich ist, das Ergebnis eines einmal realisierten Plans automatisch zu verändern wenn sich der Plan ändert, geht das bei Programmen schon. Zumindest theoretisch. Es kommt ganz darauf an, wie man die gemachten Pläne nutzt. Man kann schön gezeichnete UML-Diagramme ausdrucken und einem Programmierer in die Hand drücken, der setzt sie dann in Code um, ganz so wie der Stahlarbeiter die Brücke nach den Blaupausen zusammenschweißt. Man könnte aber auch aus den Diagrammen automatisch Quellcode generieren lassen, den groben Rahmen und die Struktur des Programms, und diese dann von Programmieren mit sinnvollen Erweiterungen anreichern lassen. Dingen, die man in einem Diagramm nicht darstellen kann, Aspekte, die beim Modellieren der Abstraktion zum Opfer gefallen sind. Und wenn alles so funktionieren würde, wie es sollte, dann könnten einige dieser Änderungen sich auch wieder automatisch in den Diagrammen wiederfinden. Jedenfalls könnte man bei den vorher angesprochenen Änderungen in den Anforderungen einfach das Modell ändern und die Änderungen dann in den Programmcode einfließen lassen. Klingt das nur für mich günstiger und schneller, als alles von vornherein in kryptischen Code zu gießen, den man nur umständlich ändern kann? Tatsächlich ist einiges hiervon nicht ganz so einfach umzusetzen, wie es klingt und die Toolunterstützung (also die Hilfe durch Programme, die helfen sollen, Programme zu bauen) hinkt an vielen Stellen den Visionären Ideen des Software Engineering hinterher.

Zwei weitere Vorteile haben Diagramme und Modelle: Man kann sie besser überprüfen und Testen als fertige Programme, bei denen alle möglichen Eventualitäten ausprobiert werden müssen. Das ist nämlich der nächste Schritt nach der Umsetzung der Pläne, also der Programmierung, das Testing. Bei Brücken ist das nicht ganz so offensichtlich, wird aber sicherlich auch betrieben. Schon während des Baus werden immer wieder Messungen durchgeführt, um festzustellen, ob das, was da gebaut wird, auch dem entspricht, was man sich vorher überlegt hat. In diesem Punkte sind die „klassischen“ Bauingenieure einen Schritt voraus. Testing dieser Art wird nämlich bei der Programmentwicklung heutzutage immer noch häufig sträflich vernachlässigt.

Der zweite Vorteil ist die Dokumentation. Selten entwickelt man ein Programm nur für sich selbt. Häufig sollen Schaaren von Menschen hinterher damit arbeiten, und sei es nur, um zu überprüfen, ob auch alles richtig funktioniert. Ein Bild sagt häufig mehr als tausend Worte, und so sind die Konstruktionsmodelle ein guter Ausgangspunkt für die Programmdokumentation und Hilfedateien, die den Benutzern den Umgang und die Funktionsweise erklären sollen.

Ich habe während dieser Ausführungen den Eindruck erweckt, als ob all die Punkte einzelne Schritte sind die, hintereinandergereiht, zum gewünschten Ergebnis führen. Doch hier ist noch ein Unterschied zum Brückenbau: Man kann alles gleichzeitig machen! Nachdem die ersten Anforderungen erhoben worden sind, kann die Konstruktion des Modells beginnen und vielleicht sogar schon ein erster kleiner Prototyp programmiert werden, der auf die gewünschten Funktionalitäten getestet wird. Währenddessen können aber weitere Anforderungen erhoben werden und in die Konstruktion und die Umsetzung einfließen. Wenn alles so läuft wie es sollte, dann „… Isse Kreislauf!“. Daher kommt auch die manchmal gebrauchte Bezeichnung Lifecycle Management.

Bei all dem muss man immer auch berücksichtigen, dass das entwickelte System eigentlich niemals für sich alleine steht, sondern fast immer mit anderen Systemen zusammenarbeitet. Passender Spruch hier: „Every System is someone’s subsystem“. Die Verbindungen mit diesen anderen Systemen, die sogenannten Interfaces, müssen daher auch genau festgelegt, gebaut, beachtet und getestet werden. Dann kann man das entwickelte System auch Jahre später noch nutzen oder weiterentwickeln, anstatt ständig wieder von vorne anfangen zu müssen.

Es ist jetzt keineswegs so, dass sich das alles auf die Entwicklung reiner Software beschränkt. Zunächst mal steckt „soft“ware heutzutage fast überall, in Autos, Geldautomaten, nem Herd, Spielzeug, Handy, der Jalousiesteuerung oder dem bekannten PC. Praktisch immer muss auch jemand damit arbeiten, nämlich ein Mensch! Dieser spielt daher beim Systems Engineering eine wichtige Rolle. Die Arbeitsabläufe, in denen das neue System teilhaben soll, müssen gut verstanden sein, sonst ist es am Ende im besten Fall überflüssig, im schlechtesten Fall eine Mehrbelastung, statt eine Erleichterung und Hilfe. Hinzu kommen noch die rein physikalisch-technischen Aspekte auf der Hardware-Seite. Aber die überlass ich gerne den Maschinenbau- oder Elektroingenieuren. Während die auf ihr Gebiet spezialisiert sind, sind wir sozusagen Spezialisten fürs Ganze (nicht etwa „für Alles“), die Zusammenarbeit der Einzelteile und nach Außen.

So, zu den ganzen Methoden und Modellen werfe man nun noch eine geballte Ladung theoretisches Hintergrundwissen (die tatsächliche „Informatik“: Zustandsautomaten, Markov-Ketten, Turing-Maschinen, blabla), ein bisschen aufgeblasene BWL (sieht nach viel aus, fällt aber in sich Zusammen wie Zuckerwatte. Nur nicht ganz so süß), sperrige Mathematik (hat man dran zu knabbern und liegt schwer im Magen), eine Priese Projektmanagement, einen Hauch (nur nicht zu viel, sonst verschluckt man sich dran!) von praktischem Projekt und wissenschaftlicher Arbeit sowie in meinem Fall zum aufpeppen noch jede Menge nahrhafte und abgefahrene Netzwerkkurse, rühre um und fertig ist der frischgebackene Bachelor Of Science Angewandte Informatik – Systems Engineering.

Aber versuch mal, das alles nach 2-3 Bier auf ner Party zur erklären, während im Hintergrund Lady Gaga quäkt und der Mob tobt.

Nein, lass es lieber. Hat eh keinen Zweck. Also die schnelle Methode:

„Der Studiengang heißt komplett ‚Angewandte Informatik – Systems Engineering’…“ – „Ah, Informatik, alles klar!“. Zack, Stempel drauf, ab in die Klischee-Schublade. Herzlichen Glückwunsch.