Kurs "Professionelle Softwareentwicklung"

Beschreibung

Ein Universitätsstudium in Informatik dreht sich hauptsächlich um Konzepte. Das ist grundsätzlich sinnvoll, den diese Konzepte sind erheblich langlebiger und breiter anwendbar als konkrete Einzelheiten es wären. Leider bleibt dabei vieles Detaillierte, das für konkrete Softwareentwicklung aber nun mal wichtig ist, weitgehend auf der Strecke. Dieses Defizit soll diese Veranstaltung reduzieren.

Auch hier geht es zwar zum großen Teil um Konzepte, aber immer nur um solche, die direkt mit Softwareentwicklung zu tun haben und anhand konkreter, persönlicher, praktischer Anwendung -- und zwar (im Gegensatz zu den meisten Softwareprojekt-Lehrveranstaltungen) mit gemeinsamer Reflektion über die Anwendung.

Die besprochenen und eingeübten Konzepte lassen sich drei verschiedenen (aber mit einander eng verbundenen) Sphären zuordnen:
  • Softwareentwurf und -strukturierung (und zwar objektorientiert)
  • Vorgehensmethoden (z.B. in den Bereichen Prototyping, Automatisierung, inkrementelle Verbesserung)
  • Persönlichkeitsentwicklung (Aspekte wie Konsequenz, Verantwortlichkeit, Kommunikationsfertigkeiten)

Wichtig: Jede/r Teilnehmer/in muss ein bereits weit vor der Veranstaltung begonnenes Softwareprojekt haben (bei einer Firma, für eine Firmengründung oder als Open-Source-Projekt), an dem er/sie über die gesamte Dauer dieser Lehrveranstaltung hinweg jede Woche mitarbeitet (in aller Regel im Team) und das als Umgebung für das Einüben der Konzepte dient.
Dies ist eine harte Teilnahmevoraussetzung.


Organisatorisches

Veranstalter

Voraussetzungen/Zielgruppe, Einordnung, Leistungpunkte etc.

Unverzichtbare Voraussetzung für die Teilnahme ist ein eigenes Softwareprojekt wie oben beschrieben, das für die gesamte Dauer der Veranstaltung mit mindestens 6 Wochenstunden von für die Themen dieser Veranstaltung frei verfügbarem Aufwand weitergeführt wird.

Zielgruppe sind Studierende, die durch intensives Üben Fertigkeiten aufbauen möchten, die gute und professionell arbeitende Softwareentwickler/innen benötigen.

Die Veranstaltung ist eine Wahlveranstaltung für den Studiengang Master Informatik mit 5 Leistungspunkten.

Termine und Nachrichten

  • Vorlesung (in der neuen Masterordnung wird das Methodenkurs heißen): Montags, 12-14 Uhr
  • Übung (in der neuen Masterordnung wird das Praxisseminar heißen): Montags, 14-16 Uhr

Prüfungsmodalitäten

Zur Note zählen die einzelnen Arbeitsergebnisse, sie Sie für die jeweiligen Übungsaufgaben erbringen und in der Veranstaltung vorstellen (die Vorstellung selbst ist dabei ein wichtiger Bestandteil dieses Arbeitsergebnisses, denn seine Werke und Tätigkeiten angemessen erklären zu können ist eine wichtige Kompetenz).

Es zählen ferner die Intensität und Qualität der Teilnahme an der allgemeinen Diskussion in der Übung.

Eine Abschlussprüfung (als Klausur oder mündliche Prüfung) gibt es nicht.

Stoffplan

  1. 2014-10-13:
    • V: Professionalität und Verantwortung (Folien)
      [ClCr]: Kap. 1-3, [PrPr]: Kap. 1, [CoCo]: Kap. 33-34
    • Übung: Die erste Hälfte der Teilnehmenden stellen ihr Projekt vor: Zweck, Benutzer, Technologie, Team, meine Rolle, Stärken/Schwächen (z.B. Entwurf, Codestruktur, Defektdichte, Automatisierungsgrad, Prozesse).
  2. 2014-10-20:
    • V: Praktiken von Grad Rot von clean-code-developer.de (Folien)
      • Prinzipien: Don´t Repeat Yourself (DRY); Keep it simple, stupid (KISS); Vorsicht vor Optimierungen! (VO); Favour Composition over Inheritance (FCoI).
      • Praktiken: Pfadfinderregel befolgen (BSR); Root Cause Analysis durchführen (RCA); Versionskontrollsystem einsetzen; Einfache Refaktorisierungen anwenden (Extract Method, Rename); Täglich reflektieren.
    • Übung: Die zweite Hälfte der Teilnehmenden stellen ihr Projekt vor
  3. 2014-10-27:
    • V: Praktiken von Grad Orange (Folien)
      • Prinzipien: Single Level of Abstraction (SLA); Single Responsibility (SRP); Separation of Concerns (SoC); Source Code Konventionen.
      • Praktiken: Issue Tracking; Automatisierte Integrationstests; Lesen, Lesen, Lesen; Reviews.
    • Übung: 5-10 aus dem Hut Gezogene stellen zu je zwei der Praktiken der Vorwoche (also Rot) vor, a) welchen Zustand ihr Projekt/Code bzw. ihr eigenes Verhalten hatte b) was sie unternommen haben, um diesen Zustand zu verbessern Das ist jeweils mit konkreten Codebeispielen zu untermauern.
  4. 2014-11-03:
    • V: Praktiken von Grad Gelb (Folien)
      • Prinzipien: Interface Segregation (ISP); Dependency Inversion Principle (DIP)/Dependency Injection (DI); Liskov Substitution Principle (LSP); Principle of Least Astonishment (PLA); Information Hiding (IH).
      • Praktiken: Automatisierte Unit Tests; Mockups (Testattrappen); Code Coverage Analyse; Teilnahme an Fachveranstaltungen; Komplexe Refaktorisierungen.
    • Übung: wie vor zu Grad Orange
  5. 2014-11-10:
    • V: Praktiken von Grad Grün (Folien)
      • Prinzipien: Open Closed Principle (OCP); Tell, don´t ask (TDA); Law of Demeter (LoD).
      • Praktiken: Continuous Integration (CI); Statische Codeanalyse (Metriken); Inversion of Control Container (ICC); Erfahrung weitergeben; Messen von Fehlern.
    • Übung: wie vor zu Grad Gelb
  6. 2014-11-17:
    • V: Praktiken von Grad Blau (Folien)
      • Prinzipien: Entwurf und Implementation wiederholen einander nicht; Implementation spiegelt Entwurf; You Ain´t Gonna Need It (YAGNI)/Defer Commitment;.
      • Praktiken: Continuous Delivery (CD); Iterative Entwicklung; Komponentenorientierung; Test first.
    • Übung: wie vor zu Grad Grün
  7. 2014-11-24:
    • V: Grad Weiß (Folien)
      • Umfasst alle Prinzipien und Praktiken der vorherigen Grade zusammen: Übersicht nach thematischen Gruppen
      • Kurze Wiederholung von Woche 1: Professionalität und Verantwortung
      • Allgemeine Lehren: Begriffe hinterfragen!; Zweck im Auge behalten!; Maß halten!!
      • Beispiele für Themen, die wir nicht besprochen haben
      • Einstieg in das Thema der nächsten Woche: Agiles Testen
    • Übung: wie vor zu Grad Blau
  8. 2014-12-01:
    • V: Agiles Testen
      Testarten; Zweck: Risiken reduzieren; Kosten und Gefahren von Tests; Eigenschaften guter Testsuites; Methoden: Attrappen/Isolation, Test-First/Test-Last, outside-in/inside-out/middle-out, TDD; gemeinsame TDD-Übung (Randori)
    • Übung: wie vor zu Grad Weiß (also wahlfrei)
  9. 2014-12-08:
    • V: Arbeiten mit Altcode (Agiles Testen, Teil 2)
      Von der Theorie zur Praxis: Testbarkeit herstellen bei Legacy Code, Rollen von Refactoring
    • Übung: zum Einüben von TDD 2 Katas von cyber-dojo.org in Paararbeit (mit Ping Pong Pair Programming) machen und darüber berichten: Probleme, Aha-Erlebnisse, Erfolgserlebnisse.
  10. 2014-12-15:
    • V: Zweiter Durchgang mit Grad Rot:
      Einige komplexere Aspekte und Beispiele sind bislang nur angerissen worden und werden jetzt vertieft.
    • Übung: Ein paar Integrationstests schaffen an einer Stelle, wo bislang keine Testbarkeit gegeben ist, aber eine Änderung ansteht.
  11. 2015-01-05:
    • V: Zweiter Durchgang mit Grad Orange
    • Übung: Einsatz von weiteren zwei der Prinzipien und Praktiken von Grad Rot.
  12. 2015-01-12:
    • V: Zweiter Durchgang mit Grad Gelb
    • Übung: wie vor zu der Vertiefung von Grad Orange
  13. 2015-01-19:
    • V: Zweiter Durchgang mit Grad Grün
    • Übung: wie vor zu der Vertiefung von Grad Gelb
  14. 2015-01-26:
    • V: Zweiter Durchgang mit Grad Blau
    • Übung: wie vor zu der Vertiefung von Grad Grün
  15. 2015-02-02:
    • Keine Vorlesung mehr, sondern im ersten Zeitabschnitt Übung, im zweiten Fazit.
    • Übung: wie vor zu der Vertiefung von Grad Blau
    • Persönliches Fazit:
      • Welche Prinzipien und Praktiken habe ich schon (halbwegs) stabil in mein Verhalten aufgenommen?
      • Welche zwei bis vier davon erscheinen mir am wertvollsten? Warum?
      • Für welche zwei bis vier erwarte ich, dass ihr Wert für mich künftig noch stark zunehmen wird? Warum?
      • Mit welchen ringe ich noch? Warum klemmt es da?
      • (Diese Gruppen müssen nicht alle Praktiken abdecken)
  16. 2015-02-09: Zusatzchance für Leute mit aktueller Note 5

Quellen

Unsere Hauptquelle

Bücher

  • [ClC] Robert Martin: Clean Code: A Handbook of Agile Software Craftsmanship, (bei Safari, Zusammenfassung)
    • Robert Martin (voller Name Robert C. Martin) firmiert auch häufig unter Bob Martin oder unter Uncle Bob.
    • ersatzweise gibt es auch eine lange Reihe von Artikeln, die frei verfügbar sind und ähnliches Material enthalten
  • [ClCr] Robert Martin: The Clean Coder: A Code of Conduct for Professional Programmers, (bei Safari, Zusammenfassung)
  • [CoCo] Steve McConnell: Code Complete, 2nd ed., (bei Safari)
  • [Legacy] Michael Feathers: Working Effectively with Legacy Code (Präsentation dazu, Vorläufer-Artikel)
  • [PrPr] Andrew Hunt, David Thomas: The Pragmatic Programmer: From Journeyman to Master, (bei Safari, Zusammenfassung)
  • [TDD] Lasse Koskela: Test Driven: Practical TDD and Acceptance TDD for Java Developers, (bei Safari)
  • [XP2] Kent Beck: Extreme Programming Explained: Embrace Change, Second Edition (bei Safari)
  • [xUTP] Gerard Meszaros: xUnit Test Patterns: Refactoring Test Code (siehe Website xunitpatterns.com für die meisten der Buchinhalte; Buch bei Safari)

Auf viele der Bücher aus obiger Liste bekommt man Volltextzugriff, indem man ein Safari-Abonnement abschließt oder indem man professional member bei der ACM wird.

Wissenschaftliche Artikel

Auf diese Artikel bekommt man mit einer FU-Berlin-IP-Adresse automatisch Volltextzugriff. Nötigenfalls also VPN benutzen.

Online-Quellen

Blick über den Zaun

Diese Quellen betreffen nicht die Themen, die wir hier im Kurs direkt besprechen, sondern angrenzendes.

  • Suzanne und James Robertson: Requirements in Agile Projects (Audio, 60 Minuten)
    Ein Interview von Software Engineering Radio über den richtigen Blickwinkel auf agile SW-Entwicklung insgesamt und die dafür nötige Kultur. Sehr empfehlenswert.



Historie des Stoffplans

  • 2014: erste Durchführung

(Kommentare)

Wenn Sie Anmerkungen oder Vorschläge zu dieser Seite haben, können Sie sie hier (möglichst mit Datum und Name) hinterlassen:

 

SWTIDSR