Fort- und Weiterbildung  /  04/04/2019  -  04/05/2019, 09.00 bis 17.00 Uhr

Seminar »Pragmatischer Softwareentwurf«

Sie wollen als Softwareentwickler produktiver werden? Dann ist systematische und visuelle Problemlösung das, worauf Sie sich zuerst konzentrieren sollten. Effektiver und sauberer Code beginnen lange bevor Sie die erste Zeile Code schreiben: er beginnt in Ihrem Kopf.

Softwareentwurf ist in Ungnade gefallen. Früher war er eine ehrenvolle Disziplin unter dem Dach eines ehrenwerten Gewerbes: Software Engineering. Dann kamen Agile, und TDD, und Software Craftsmanship. Bewusster, systematischer Softwareentwurf wurde in kurzer Zeit zum Synonym für BDUF (Big Design Up-Front) von Astronautenarchitekten. Und das ist sicherlich keine Aufgabe, die es wert ist, dass echte Programmierer sich damit abgeben, die hart daran arbeiten, Kunden in kleinen Schritten Mehrwert zu liefern. 

Aber so sehr der frühere Ansatz der Softwareentwicklung auch problematisch war, Design als Relikt von Elfenbeinturm-Denke zu brandmarken, hat das Kind mit dem Bade ausgeschüttet. Das Ergebnis: mehr Code, weniger Struktur, mehr Gesprächsstoff, weniger gemeinsames Verständnis.

Ziel

Dieser Workshop versucht daher, für Sie etwas von dem, was verloren gegangen ist, wieder zu gewinnen. Es geht darum, ein Gleichgewicht zwischen Formalismus und Zweckmäßigkeit zu finden. Er bringt explizites, bewusstes, systematisches Software-Design dorthin zurück, wo es hingehört: in die Schützengräben der Softwareentwicklung. Jeder Entwickler sollte zumindest die Grundlagen des Softwareentwurfs beherrschen. Das bedeutet, dass er/sie in der Lage sein sollte, Modelle für Lösungen vor und unabhängig vom Code zu entwickeln und auszudrücken.

Beim Software-Design geht es darum, das Probleme auf einem Whiteboard und im Team zu lösen. Es findet deklarative Lösungen, die erst später mit formalen Sprachen wie C#, Java, C++ etc. implementiert werden. 

Und Softwareentwurf ist vergleichsweise billig. Er ermöglicht einem Team, schnell Alternativen zu erkunden und gleichzeitig ein gemeinsames Verständnis für eine Domäne zu entwickeln. Sobald die Codierung beginnt, verknöchern Lösungen. Sie werden schwer wandelbar. Modelle von Lösungen jedoch, die sind viel formbarer.

Explizites Software-Design ist einfach eine Frage der Produktivitätssteigerung: Lösungen werden leichter gefunden, werden besser akzeptiert und können besser koordiniert implementiert werden. Dies unterstützt Teamarbeit wie Agilität.

Das muss jedoch auf praktische Weise geschehen. Da ist kein Platz für die eine allumfassende, einheitliche Lösung; da ist kein Platz für Ideologien. Deshalb ist dieser Workshop auch keine weitere UML-Promotion-Veranstaltung. Vielmehr lehrt er einen sehr eklektischen, praxiserprobten Ansatz für das Software-Design. Sein Hauptziel ist es, Entwicklern ein Denkwerkzeug an die Hand zu geben, das es ihnen ermöglicht, Lösungen in ihren Köpfen zu entwickeln, sie schnell für sich und andere zu visualisieren und am Ende leicht in sauberen Code zu übersetzen.

»Flow-Design«, wie der Ansatz genannt wird, bezieht sich sowohl auf Objektorientierung (OO) als auch auf funktionale Programmierung (FP); er geht sogar zurück zu den Wurzeln von OO und stellt Messaging in den Vordergrund. Auf diese Weise wird die Entwicklung von Legacy-Code im Kern angegangen: Flow-Design beseitigt endlich funktionale Abhängigkeiten. Liebgewonnene Prinzipien wie SOLID werden dabei relativiert, so dass die Umsetzung mit einem Test-first-Ansatz einfacher wird.

Erleben Sie, wie Software-Design als entscheidende Phase der Softwareentwicklung zurückgewonnen werden kann. Das ist nicht nur für Architekten relevant, sondern für jeden Entwickler. Erleben Sie, wie sich leichtgewichtiger Entwurf anfühlt. Beginnen Sie mit sauberem Code, bevor Sie kodieren. Nachhaltige Produktivität ist möglich!