Mein Repertoire an Vorträgen, Schulungen, Trainings und Workshops umfasst die Themenbereiche Softwareentwicklung, Softwarequalität, Software Craftsmanship und Funktionale Programmierung.

Sollten Sie Interesse an einem dieser Vorträge oder Workshops haben oder haben Sie eigene Wünsche in diesen Themengebieten, freue ich mich über Ihre Kontaktaufnahme.

Softwareentwicklung und Softwarequalität

Specification by Example

Ein Überblick über die Kernideen hinter Specification by Example, gefolgt von einem kurzen Workshop, in dem die Teilnehmer anhand eines Beispiels die Unterschiede zu konventionellen Tests hautnah erfahren können.
Art: Vortrag oder Kurzworkshop (2 - 3 Stunden)

Domain-Driven Design - Fachlichkeit im Mittelpunkt der Software und ihrer Entwicklung

Das zentrale und kennzeichnende Merkmal einer jeden Software ist ihre Domäne, also ihre Fachlichkeit. Daher ist es essentiell für den Erfolg des Projektes, diese während des gesamten Entwicklungsprozesses in den Mittelpunkt zu stellen.

Domain-Driven Design hat genau dies zum Ziel: Hier lernt das gesamte Team (einschließlich der Entwickler) von Anfang an gemeinsam alle relevanten Aspekte der Domäne (und damit der entstehenden Software) kennen. Eine gemeinsame Sprache von Fachbereich und Entwicklern bildet sich dabei fast schon von selbst heraus und wird stetig weiterentwickelt.

Das im Zuge des domänengetriebenen Designs enstandene Modell zeigt üblicherweise abgegrenzte Bereiche im entstehenden Softwaresystem auf, die für die Modularisierung des Codes genutzt werden können. Die Beziehungen zwischen diesen Modulen werden genauso betrachtet wie die Abläufe innerhalb eines Moduls. Zur Implementierung der Module bietet Domain-Driven Design eine Reihe von taktischen Patterns an, die je nach Bedarf zum Einsatz kommen können.

Im Kurs werden wir diese Stufen gemeinsam anhand eines größeren Beispiels durchlaufen und nach und nach ein detailliertes Domänenmodell entwickeln. Auch mögliche Vorgehensweisen bei der Implementierung werden wir beleuchten -- allerdings nur theoretisch, um den Rahmen des Kurses nicht zu sprengen.

Da nicht jedes Projekt auf der grünen Wiese beginnt, schauen wir uns zum Abschluss des Kurses noch an, wie wir mit bestehenden Codebasen umgehen können und welche Möglichkeiten es gibt, die Domäne aus existierendem (Legacy-)Code herauszuarbeiten und sichtbar zu machen.

Art: Vortrag oder Workshop (2 Tage)
Inhalt
  • Einführung
  • Event Storming - Was passiert eigentlich genau in meiner Domäne?
  • Strategic Design - Wie kann ich die Domäne gut strukturieren?
  • Context Mapping - Was passiert zwischen den einzelnen Teilen?
  • Tactical Design - Wie kann ich die Domäne sinnvoll implementieren?
  • DDD im Legacy Umfeld

React.js und Redux - Webapplikationen deklarativ erstellen

Die zunehmende Leistungsfähigkeit von Browsern erlaubt es, mehr und mehr Applikationslogik ins Frontend zu verlagern. Diese sogenannten Single-Page-Apps ermöglichen eine deutlich kürzere Antwortzeit auf Benutzeraktionen, da die jeweiligen Berechnungen und Anzeigen auf dem Computer des Benutzers stattfinden und die Ladezeiten der Seiten über das Netzwerk wegfallen. In den letzten Jahren sind einige Frameworks für die Entwicklung von Single-Page-Applikationen entstanden und teilweise auch schon wieder in Vergessenheit geraten. React.js gehört zu den jüngeren Vertretern dieser Gattung und besticht vor allem durch seine Leichtgewichtigkeit, da es sich ganz gezielt auf die Benutzeroberfläche konzentriert. Genau genommen handelt es sich noch nicht einmal um ein Framework, sondern um eine Library, was dem Entwickler viel Freiraum lässt. Auch die technische Umsetzung von React.js, die eine deklarative Beschreibung der Webapplikation erlaubt und die quasi ohne die sonst allgegenwärtigen Events und Listener auskommt, sorgt für Leichtgewichtigkeit. Redux kümmert sich um die Verwaltung des Zustands und das Bearbeiten von Aktionen und ist ein perfekter Partner für React.js.

Der Workshop bietet eine Einführung in die Entwicklung (und im zweitägigen Workshop auch in das Testen) von Single-Page-Applikationen mit React.js und Redux.

Art: Vortrag oder Workshop (1 oder 2 Tage)
Inhalt für 1 Tag Inhalt für 2 Tage
  • Einführung in ECMAScript 6, Babel und Webpack
  • React.js Komponenten
    • Class Components
    • Functional Components
    • Strukturierung der Komponenten
    • Verwaltung von Zustand in React.js
  • Redux Store
    • Verwaltung von Zustand mit Redux
    • Actions und Reducers
    • Asynchrone Actions und Thunks
  • Nützliche Werkzeuge
  • Einführung in ECMAScript 6, Babel und Webpack
  • React.js Komponenten
    • Class Components
    • Functional Components
    • Strukturierung der Komponenten
    • Verwaltung von Zustand in React.js
    • Inline Styles
  • Redux Store
    • Verwaltung von Zustand mit Redux
    • Actions und Reducers
    • Asynchrone Actions und Thunks
    • Strukturierung der Actions und Reducers
  • Nützliche Werkzeuge
  • Tests
    • Shallow Rendering
    • Mocha und Must.js
    • Enzyme Testbibliothek
    • Mounted Rendering mit jsdom
    • Integrationstests mit Sinon

Refactoring Legacy Code - „From Push to Pull“

In betriebswirtschaftlicher Software trifft man häufig auf ein Entwicklungsmuster, das wir „Push“ getauft haben: Ergebnisse werden irgendwo berechnet und in eine Ergebnisstruktur hineingeschoben („push“), dort häufig auch im weiteren Verlauf nachbearbeitet, ohne dass später nachvollziehbar ist, auf welchem Weg ein bestimmter Ergebniswert entstanden ist. Der Workshop, der aus einer realen Codebasis entstanden ist, zeigt den Teilnehmern, welche Probleme mit „Push“-Code verbunden sind. In kleinen, nachvollziehbaren Schritten werden die Teilnehmer angeleitet, die Codebasis in eine „Pull“-Struktur umzubauen. Diese zeichnet sich dadurch aus, dass die Berechnung von Ergebniswerten isoliert und lokal erfolgt. Zum Weiterverarbeiten der Ergebniswerte werden diese aus den Berechnungsobjekten herausgezogen („pull“). Auf diese Weise sind die einzelnen Berechnungen klar nachvollziehbar und isoliert testbar.
Art: Workshop (1/2 Tag)

Funktionale Programmierung

Einführung in die Funktionale Programmierung

Funktionale Programmierung ist derzeit in aller Munde. Nicht nur die klassischen funktionalen Programmiersprachen erleben einen Aufschwung, auch viele andere Sprachen erweitern ihren Sprachumfang um funktionale Bestandteile. In diesem Workshop wollen wir herausfinden, warum dies so ist und was die funktionale Programmierung so besonders macht. Dabei werden wir ganz praktisch vorgehen und unsere Erfahrungen hauptsächlich durch Programmieren gewinnen. (Im zweitägigen Workshop soll auch das automatisierte Testen nicht zu kurz kommen.) Zu guter Letzt schlagen wir eine Brücke zurück zu Ihrer alltäglichen Arbeit und versuchen herauszufinden, wie sich Aspekte der funktionalen Programmierung in das Arbeiten mit nicht-funktionalen Sprachen wie Java, C# oder C++ einbringen lassen.
Art: Vortrag oder Workshop (1 oder 2 Tage)
Inhalt für 1 Tag Inhalt für 2 Tage
  • Einführung
  • Warum eigentlich funktionale Programmierung?
  • Erste Schritte in einer funktionalen Programmiersprache
  • Funktionen, Currying
  • Listen, Tupel
  • Typinferenz
  • Polymorphe Typen
  • Pattern Matching
  • Lambda Expressions
  • Algebraische Datentypen
  • Rekursive Funktionen
  • Rekursive Datentypen, Zusammenhang mit rekursiven Funktionen
  • Bibliotheksfunktionen: filter, map, fold/reduce, ...
  • Funktionale Programmierung in nichtfunktionalen Sprachen
  • Einführung
  • Warum eigentlich funktionale Programmierung?
  • Erste Schritte in einer funktionalen Programmiersprache
  • Funktionen, Currying
  • Listen, Tupel
  • Typinferenz
  • Polymorphe Typen, Typklassen
  • Pattern Matching
  • Lambda Expressions
  • Algebraische Datentypen
  • Rekursive Funktionen
  • Rekursive Datentypen, Zusammenhang mit rekursiven Funktionen
  • Bibliotheksfunktionen: filter, map, fold/reduce, ...
  • Ein- und Ausgaben (Konsole, Dateien)
  • Automatisiertes Testen
  • Property-Based Testing mit QuickCheck
  • Funktionale Programmierung in nichtfunktionalen Sprachen

Monaden

Ein Ausflug in die höheren Weihen der funktionalen Programmierung. Monaden sind ein wichtiges Konzept, das hier anschaulich erklärt wird.
Art: Vortrag

Clean Code / Software Craftsmanship

Code Retreat / Legacy Code Retreat

Ein Code Retreat ist eine Übungsform, die darauf abzielt, sich durch wiederholte Implementierung desselben Problems diesem von verschiedenen Richtungen zu nähern und sich gleichzeitig auf das Einüben hilfreicher Vorgehensweisen zu konzentrieren. Während man bei einem Code Retreat ein Problem immer wieder „von Null auf“ löst, bearbeitet man bei einem Legacy Code Retreat immer wieder dieselbe Codebasis und lernt so, wie man mit Legacy Code geeignet umgehen kann.
Art: 1 Tag

Craftsman Swaps

Ein aus der Software Craftsmanship-Bewegung stammender Terminus, der die aktive Mitarbeit eines Entwicklers in einer anderen Firma über einen begrenzten Zeitraum bezeichnet. Die verschiedenen Möglichkeiten für einen solchen Austausch sowie die sich daraus ergebenden Vorteile werden kurz vorgestellt. Im Anschluss ist Raum für Diskussionen sowie den Austausch der Teilnehmer gegeben.
Art: Vortrag

NICOLE RAUCH 2014-2017 ©