• Teaser Home

    Clean Code Developer School

    Saubere Softwareentwicklung üben – regelmäßig, fokussiert, individuell, angeleitet

Unterrichtsplan

Unterrichtsplan

Die CCD School hat keinen Plan im üblichen Sinn. Es gibt keine festgelegte Themenreihenfolge, die in einem bestimmten Zeitraum abgearbeitet wird. Damit unterscheidet sie sich grundlegend von anderen Seminarformen.

Stattdessen arbeiten wir mit eher mit einem Themensteinbruch, aus dem wir Brocken nach Bedarf herauslösen. Oder man kann den Unterricht als eine Reise durch das Land des Clean Code Development (CCD) ansehen, bei der die Lernenden Sehenswürdigkeiten besuchen. Wie jedoch die Reiseroute verläuft… das bestimmt sich immer wieder neu und individuell nach den Bedürfnissen und Fortschritten der Lernenden.

Eine Karte dieses CCD-Landes bietet das Wiki der Clean Code Developer Initiative. Im Unterricht der CCD School geht es ganz grundsätzlich um deren Werte, Tugenden, Prinzipien und Praktiken.

Eine andere Karte kann die folgende Liste von Stichworten sein. Sie stellt einen anderen Schnitt durch die Inhalte der CCD Initiative dar und erweitert sie um methodische Ansätze:

Begriffe

  • Plan
  • Entwurf
  • Architektur
  • Modell
  • Agilität
  • Die 3 fundamentalen Kundenwünsche
  • Die Hauptaufgabe der Softwarearchitektur
  • Das Wertesystem des Clean Code Development (CCD)

Agiler Softwareentwurf

  • Zerlegung der Anforderungen in Inkremente
  • Bounded Contexts
  • Anbindung des agilen Entwurfs an die Implementierung

Horizonte des Softwareentwurfs

  • Strategischer Entwurf
  • Taktischer Entwurf
  • Situativer Entwurf

Grundlagen des Softwareentwurfs

  • Trennung von System und Umwelt
  • Trennung von Rollen und Ressourcen
  • Softwarezellen als autonome Kerne von Software
  • Horizontale Verfeinerung von Softwaresystemen
  • Vertikale Verfeinerung von Softwaresystemen
  • Zerlegung von Anforderungen in Hosts
  • Architekturmuster neu bewertet: Schichtenmodell, N-Tier Architecture, MVC

Moderne Objektorientierte Programmierung (OOP as if you meant it)

  • Messaging – die vergessene Basis der OOP
  • Principle of Mutual Oblivion
  • Integration Operation Segregation Principle
  • Interaktionsinkremente modellieren mit Message Flows

Moderne OOP mit C#

  • Enumeratoren, yield return
  • Lambda Expressions
  • Extension Methods
  • Linq und fluent APIs

Hier geht es vor allem um funktionale Ansätze der Programmierung in OO-Sprachen. Die genannten Sprachfeatures von C# finden sich aber auch in anderen Programmiersprachen. Wer mit Java, Python, Ruby, JavaScript arbeitet, wird also auch abgeholt.

Clean Code Development

  • YAGNI, KISS
  • DRY, SRP, SoC, SLA, ISP
  • IoC, DI
  • PoLA, LoD
  • CoI
  • Review, Retrospektive

Clean Team Development

  • Spinning als Kern agilen Vorgehens
  • Komponentenorientierung

TDD

  • TDD 1.0
  • TDD 2.0
  • TDD as if you meant it

Als begleitende Lektüre empfehlen wir:

The Architect´s Napkin – Der Schummelzettel” – Die Referenz zur visuellen Notation, die im Unterricht vermittelt wird.
Messaging as a Programming Model” – Beschreibung der Grundprinzipien des Flow-Designs, das systematisch zu sauberem Code im Kleinen führt.
Einen Plan im Sinne festgelegter Schritte gibt es nicht. Aber einen Plan im Sinne von thematischer Ausgestaltung und Abgrenzung natürlich schon.

Der Unterricht verläuft nur zu einem kleinen Teil frontal. Die meiste Zeit befinden sich Lehrende und Lehrer in einem Unterrichtsgespräch, in dem “Präsentationsschnippsel” sofort diskutiert werden. Darüber hinaus gibt es immer wieder Einzel- und Gruppenübungen.

Zurücklehnen und berieseln lassen, gilt in der CCD School nicht. Mitarbeit in Gedanke, Wort und Tat ist angesagt. Dazu gehört auch da Mitschreiben. Denn ein Skript existiert nicht. Es würde dem freien Fluss des Fortschritts widersprechen. Natürlich gibt es Lektüreempfehlungen und Produkte des Unterrichts werden allen Lernenden zur Verfügung gestellt – doch es gibt keine Handouts.

Zum Unterricht mitzubringen sind also nicht nur Laptop mit Entwicklungsumgebung und Spaß am Lernen, sondern auch Papier und Stift.