Softwareentwurf mit Flow-Design
Softwareentwurf mit Flow-Design
Programming with Ease - Teil 2
Über das Buch
Voraussichtlicher Erscheinungstermin: September 2020
Die Softwareentwicklung braucht mehr Planung, wenn sie nachhaltig arbeiten will.
Davon bin ich überzeugt, auch wenn es sich anachronistisch und kontraproduktiv anhört. Dass der Wasserfall überwunden wurde, ist zweifellos gut. BDUF ist natürlich keine gute Sache - aber nicht wegen des D für Design, sondern wegen des B für Big. Leider scheint diese Feinheit aber unter die Räder des guten Willens von Agilität und Software Craftsmanship gekommen zu sein.
Die Kunst des Softwareentwurfs wird nicht gelehrt, ist mein Eindruck. Systematisch, greifbar, für andere nachvollziehbar über Software nachzudenken, steht nicht hoch im Kurs. Auf dem Zettel des Agilität ist das Gespräch über inkrementelle Anforderungen im Rahmen eines iterativen Vorgehens. Super! Auf dem Zettel der Software Craftsmen sind TDD und Prinzipien der Codegestaltung. Auch super! Nicht weniger braucht es für korrekten und sauberen Code. Bei aller Notwendigkeit halte ich das aber nicht für hinreichend.
Wer sich auch mit der besten Definition of Done sofort an TDD macht, wird über kurz oder lang den Code in die Ecke der Unwartbarkeit pinseln. Verständlichkeit und Wandelbarkeit kann man nicht (oder nur begrenzt) in Code "hineincodieren". Damit ist es wie mit der Korrektheit: die lässt sich auch nicht in Code "hineintesten".
Korrektheit hat Voraussetzungen schon in der Anforderungsanalyse und braucht eine konsequente test-first Disziplin beim Codieren. Verständlichkeit und Wandelbarkeit haben ihre Voraussetzungen gleichermaßen vor der Codierung und zwar in einem expliziten Entwurf. Think before Coding muss das Motto lauten. Ansonsten startet die Codierung mit einem zu unklaren Bild und geht durch zu viele Veränderungen, die den Code unsauber zurücklassen. Denn Refaktorisierungen werden gewöhnlich als zu aufwändig angesehen; es muss ja weitergehen mit dem nächsten Issue, wenn eines erfolgreich codiert wurde. Und wohin auch refaktorisieren? Wie sieht eine saubere Struktur eigentlich aus?
Ordnung als Grundlage für langfristig hohe Produktivität musst du also planen. Du musst ein Modell deines Codes entwerfen, das du in der Codierung fast schon mechanisch umsetzt. Ja, das meine ich so: Codierung ist nach einem guten Entwurf fast langweilig. Die Lösung kennst du ja schon. Die Spannung ist dann raus aus der Softwareentwicklung, zumindest eine gewisse kreative Spannung.
Das Modell ist noch nicht der Code. Seine Beschreibung musst du also in einer anderen formalen Weise vornehmen als mit einer Programmiersprache.
Und das Modell ist schon mehr als der Lösungsansatz. Der geht dem Modell voraus und umreißt, wie du dir "ganz informell" eine Lösung ausmalst.
Denn um ein Ausmalen geht es, um Visualisierung. Für mich bedeutet Softwareentwurf visuelle Softwareentwicklung. Mit UML ist dieser Gedanke auch schon einmal verbreitet worden - nur hat UML keine Akzeptanz in der Praxis gefunden. 90% der Entwickler nutzen UML nicht. Visuellen Entwurf deshalb als gescheitert anzusehen, hieße jedoch, das Kind mit dem Bade auszuschütten. Für mich liegt der pragmatische Weg in der Mitte: Wir brauchen einen leichtgewichtigen, visuellen Entwurf. Wir brauchen eine alltagstaugliche Entwurfsmethode. Genau die möchte ich dir in diesem Buch vermitteln.
Der Softwareentwurf ist für mich die mittlere von drei Phasen, in denen du Anforderungen in hochqualitativen Code transformierst. Sie ist für mich sogar die wichtigste, weil im Entwurf das anliegende Problem grundsätzlich gelöst wird. Hier ist deine ganze Kreativität und Erfahrung gefragt. Du musst die Domäne verstehen und dein Codierungshandwerkszeug beherrschen. Beim Entwurf schreibst du zwar keinen Code, doch er kann deshalb nicht unabhängig von den Einschränkungen stattfinden, die dir Code auferlegt. Entwurf muss durch technische Kompetenz informiert werden.
Deshalb ist es mir auch sehr wichtig, dass eine Entwurfsmethode leichtgewichtig ist. Nur dann hast du genug Motivation, sie zusätzlich zu deiner Codierkompetenz zu lernen.
Und mir ist wichtig, dass du als jemand mit Codierkompetenz entwerfen lernst, weil dann sichergestellt ist, dass der so wichtige Entwurf nicht im luftleeren Raum entsteht. Entwürfe von "Astronautenarchitekten" sind nicht praxistauglich und haben der Disziplin Entwurf einige Imageschaden zugefügt.
Entwurf ist natürlich etwas anderes als Codierung. Das muss er sein, sonst würde er nichts bringen. Er ist zum Beispiel deklarativ und nicht imperativ. Dennoch glaube ich daran, dass es nicht zu schwer ist, dass du dir diese Kunst aneignest. Oder noch besser: Dein ganzes Team sollte das visuelle Entwerfen lernen. Denn mit einem visuellen Entwurf kann man im Team viel unaufwändiger und schneller Lösungsalternativen durchspielen oder überhaupt Lösungen kommunizieren.
Entwurf ist dabei zu unterscheiden von Dokumentation! Entwurf findet vor der Codierung statt. Ein visueller Entwurf nimmt Codestrukturen vorweg. Dokumentation hingegen findet nach der Codierung statt. Dafür wird UML durchaus gern benutzt - nur ist das etwas ganz anderes, als worum es in diesem Buch geht.
Du wirst hier deshalb auch keine sauberen Zeichnungen sehen. UML-Tools oder auch nur Visio benutze ich nicht und rate dir nicht, danach zu schielen. Pragmatischer Entwurf findet mit Handzeichnungen statt. Das ist ein Aspekt seiner Leichtgewichtigkeit. Sobald du mit dem "Reinzeichnen" anfängst, geht Spontaneität verloren und bekommt ein Entwurf zu viel Gewicht.
Selbstverständlich ist ein Entwurf ein Plan. Doch den darfst du nicht missverstehen als "in Stein gemeißelt". Der Plan soll dich schneller machen bei der Codierung, weil einfach so eine Menge Entscheidungen getroffen wurden, als du noch nicht unter Codierungsstress gestanden hast. Doch letztlich kannst du auch vom Plan abweichen, wenn du während der folgenden Phase neue Erkenntnisse gewinnst.
Aus der "Handschriftlichkeit" des Entwurfs folgt auch, dass er für sich genommen nur schwer zu verstehen ist. Ein Entwurf wie ich ihn meine, lebt vom Diskurs. Du kannst einen Entwurf allein anfertigen und bist damit dann vertraut. Besser allerdings, wenn du einen Entwurf im Pair oder Team gemeinsam erarbeitest. Er ist dann für alle in gleicher Weise verständlich.
Dass ein solcher Entwurf anschließend einem Dritten aber "über den Zaun geworfen" werden kann, damit er dort umgesetzt wird, halte ich für ein Missverständnis. Ein Entwurf braucht mindestens die lebendige Erklärung. Der Betrachter muss ihn sich aktiv aneignen - am besten im Dialog.
Und wie wird Software nun entworfen? Was visualisiert der ominöse Entwurf? An dieser Stelle nur kurz: vor allem Datenflüsse. Datenflüsse und Module sind für mich die default Bestandteile eines pragmatisch-praktischen, leichtgewichtigen Entwurfs. Meine Gründe dafür lege ich dir ausführlich im Buch dar. Auch wenn dir das gerade noch nicht plausibel sein mag, steht das überhaupt nicht im Widerspruch zu Objektorientierung. Im Gegenteil! Ich nehme die Objektorientierung sehr ernst, genauso wie die Funktionale Programmierung. An die wird dich auch einiges im Buch gemahnen. Deshalb ist es aber noch lange kein Buch, mit dem ich dich zur Funktionalen Programmierung bringen will. Mein Ansatz ist eklektisch: Ich benutze das mir sinnvoll Erscheinende aus beiden Welten.
Wesentliches Merkmal solchen Entwurfs ist, dass er sich leicht, geradezu mechanisch in Code transformieren lässt. Das ist mir sehr wichtig. Die visuellen Beispiele im Buch unterlege ich deshalb auch immer mit Code. Sonst glaubst du mir nicht, dass ein solcher Entwurf praktikabel ist. Bubbles don't crash ist mir auch bekannt. Deshalb muss ich dir glaubhaft machen, dass dennoch bubbles ihren Sinn haben.
Was erwartet dich konkret in diesem Band? Ich habe meine Vorstellung von einem visuellen Entwurf in mehrere Lektionen/Kapitel eingeteilt, die ich auch in Trainings vermittle. Schau dir einfach mal das Inhaltsverzeichnis an. Jedes Kapitel besteht aus einem Erklärungsteil und Übungsaufgaben. Der Text ist mit vielen Abbildungen und Code aufgelockert. Insgesamt sollte das Buch dir ca. 8+ Stunden Lesespaß geben. Und zur Bearbeitung der Übungsaufgaben kannst du auch nochmal 12-16 Stunden rechnen. Das meine ich nicht zur Abschreckung, sondern will dir zeigen, dass du hier einiges Material hast, um dich als Software Craftsman solide mit der Thematik Clean Code Development auseinander zu setzen - auch wenn ich dich hier ein wenig vom reinen Codieren abbringen will. Das Buch ist ernsthafte Lektüre für deine Weiterbildung.
Schau dir am besten einmal die Probekapitel an; oder stelle Fragen in der Community zum Buch und rund um Clean Code Development. Dann bist du hoffentlich entschlossen, es damit zu versuchen: für mehr Verständlichkeit und Wandelbarkeit in deiner Software.
Ich wünsche dir viel Freude bei der Programmierung!
-Ralf Westphal, info@ralfw.de
Ver. 1.0.0.20201203
Bundles that include this book
Table of Contents
-
-
Motivation
- Programming with Ease
- Das Softwareuniversum
-
Einleitung
- Anforderungskategorien
- It’s the productivity, stupid!
-
Produktivitätskiller
- Fehlende Korrekheit
- Fehlender Wert
- Fehlende Ordnung
- Zusammenfassung
-
Motivation
-
Die Methode
-
01 - Die Anforderung-Logik Lücke
-
Logik - Der Stoff aus dem Verhalten entsteht
- Funktionalität
- Effizienz I - Effizienz durch Algorithmen und Datenstrukturen
- Effizienz II - Effizienz durch Verteilung
- Zusammenfassung
-
Von den Anforderungen zur Logik
- Logik schwer definierbar
- Die Phasen der Programmierung
- Zusammenfassung
- Übungsaufgaben
-
Logik - Der Stoff aus dem Verhalten entsteht
-
02 - Entwurf im Überblick
-
Den Entwurf abstecken
- Hierarchie der Lösungen
- Von der Kunst lernen
- Entwerfen ist fachgerecht
- Entwerfen ist agil
- 1. Der Lösungsansatz
-
2. Das Modell
- Modellarten
- Abstraktion
- Zusammenfassung
-
Übungsaufgaben
- Aufgabe - Lösungsansatz finden
-
Den Entwurf abstecken
-
03 - Radikale Objektorientierung
- Die Welt bestehend aus Objekten?
-
Der Ursprung der Objektorientierung
- Wer hat’s erfunden?
- Die zentrale Analogie der radikalen Objektorientierung
-
Principle of Mutual Oblivion (PoMO)
- Unabhängigkeit
- Geschlossenheit
- Unidirektionalität
- Ein Prinzip als Destillat
- Implementationsidee
-
Integration Operation Segregation Principle (IOSP)
- Objekte verbinden als Verantwortlichkeit
- Ein Prinzip als Destillat
- Implementationsidee
- Philosophischer Exkurs
-
Übungsaufgaben
- Aufgabe - Mit PoMO/IOSP implementieren
-
04 - Flow-Design mit 1-dimensionalen Datenflüssen
-
0-dimensionale Datenflüsse
- Notation
- Implementation
-
1-dimensionale Datenflüsse
- Der Datenfluss als Scope
- Fließende Mengen
- Implementation
- Übungsaufgaben
-
0-dimensionale Datenflüsse
-
05 - Flow-Design mit 2-dimensionalen Datenflüssen
-
Abstraktion durch Komposition
- Stratified Design
- 2-dimensionale Datenflüsse
-
Notation
- Datenflüsse als aufgemotzte Abhängigkeitsdiagramme
- n:1 Übersetzungen
- Rekursion
- Reflexion
- Übungsaufgaben
-
Abstraktion durch Komposition
-
06 - Flow-Design mit modularisierten Datenflüssen
-
Abstraktion durch Aggregation
- Physisch kategorisieren mit dem Dateisystem
-
Module
- Abhängigkeiten
- Orthogonale Containerdimension
-
Die Modul-Hierarchie
- Klasse - Abhängigkeiten mit Kontrakten zähmen
- Namensraum - Kontraktkollisionen vermeiden
- Bibliothek - Wiederverwendbarkeit ermöglichen
- Paket - Abhängigkeiten stabilisieren
- Komponente - Die Arbeitsteilung befördern
- Service - Module plattformneutral machen
- Wave - Softwareevolution zur Laufzeit
- Die Modul-Hierarchie im Überblick
-
Datenflüsse modularisieren
- Notation & Implementation I - Funktionen
- Notation & Implementation II - Daten
- Modularisierungsbeispiel
- Reflexion
- Übungsaufgaben
-
Abstraktion durch Aggregation
-
07 - Flow-Design mit 3-dimensionalen Datenflüssen
- Die wahren Übersetzungsverhältnisse
-
Streams
- Einsatzgebiete für Streams
-
Implementation
- Continuation
- Iterator
- Fallunterscheidung in der Integration
- Polymorphie
- Warteschlange
- Reflexion
- Übungsaufgaben
-
08 - Die IODA Architektur
-
Die Softwarezelle
- System vs. Umwelt
- “Kleiderbügelarchitektur”
- Die Membran
- “Griechische Architekturen”
- Der Kern
- “Vitruvianische Architektur”
-
The Missing Concern: Integration
- IOSP in der Architektur
- Interactors
- Processors
- IODA: All together now!
- Übungsaufgaben
-
Die Softwarezelle
-
09 - Finale im Softwareuniversum
- Der Explizite Entwurf ist nötig
- Der Entwurf ist deklarativ
- Das Modell beschreibt Funktionen in Beziehungen
-
Flow-Design im 4-dimensionalen Raum
- Orientierungshilfe für die Softwareentwicklung
-
01 - Die Anforderung-Logik Lücke
-
Anhang - Musterlösungen
-
Musterlösung: 01 - Die Anforderung-Logik Lücke
-
Aufgabe 1 - Erklären
- Vom Nutzen der Modellierung für die Programmierung (ELI5)
- Reflexion
-
Aufgabe 2 - Modellieren
- Lösungsansatz
- Modell
- Reflexion
-
Aufgabe 1 - Erklären
-
Musterlösung: 02 - Entwurf im Überblick
-
Aufgabe - Lösungsansatz finden
- Lösungsansatz für die Domänenlogik
- Reflexion
-
Aufgabe - Lösungsansatz finden
-
Musterlösung: 03 - Radikale Objektorientierung
-
Aufgabe - Mit PoMO/IOSP implementieren
- Modellskizze
- Codierung der Integration
- Codierung der Operationen
- Reflexion
-
Aufgabe - Mit PoMO/IOSP implementieren
-
Musterlösung: 04 - Flow-Design mit 1-dimensionalen Datenflüssen
-
Aufgabe 1 - Modellieren und implementieren
- Lösungsansatz verfeinern: Prä-Modell
- Modell
- Implementation
- Aufgabe 2 - Reverse modeling
-
Aufgabe 3 - Lösen, modellieren, implementieren
- Lösungsansatz
- Modell
- Codierung
- Reflexion
-
Aufgabe 1 - Modellieren und implementieren
-
Musterlösung: 05 - Flow-Design mit 2-dimensionalen Datenflüssen
-
Aufgabe 1 - Implementation eines Modells
- Reflexion
-
Aufgabe 2 - Die Dimensionalität eines Modells erhöhen
- Reflexion
-
Aufgabe 3 - Anforderungen umsetzen mit 2-dimensionalem Modell
- Verstehen
- Lösen
- Modellieren
- Codieren
- Reflexion
-
Aufgabe 1 - Implementation eines Modells
-
Musterlösung: 06 - Flow-Design mit modularisierten Datenflüssen
-
Aufgabe 1 - Datenfluss modularisieren
- Schrittweise Modularisierung
- Klassendiagramm
- Bibibliotheken
-
Aufgabe 2 - Game of Life
- Lösungsansatz
- Modellierung
- Reflexion
-
Aufgabe 1 - Datenfluss modularisieren
-
Musterlösung: 07 - Flow-Design mit 3-dimensionalen Datenflüssen
-
Aufgabe 1 - Tic-Tac-Toe
- Lösungsansatz
- Modell
- Implementation
- Reflexion
-
Aufgabe 1 - Tic-Tac-Toe
-
Musterlösung: 08 - Die IODA Architektur
-
Aufgabe 1 - Umbau nach IODA
- Abhängigkeiten zeigen den Abstraktionsgradienten hinab
-
Aufgabe 2 - Enturf nach IODA inkl. Implementation
- Anforderungsanalyse
- Lösungsansatz
- Modell
- Implementation
- Reflexion
-
Aufgabe 1 - Umbau nach IODA
-
Musterlösung: 01 - Die Anforderung-Logik Lücke
- Anmerkungen
Andere Bücher dieses Autors
Authors have earned$10,052,337writing, publishing and selling on Leanpub, earning 80% royalties while saving up to 25 million pounds of CO2 and up to 46,000 trees.
Erfahren Sie mehr über das Schreiben mit Leanpub
Die bedingungslose Leanpub, Kein Risiko, 100% zufrieden Garantie
Innerhalb von 45 Tagen ab Kauf kannst du dein Geld zu 100% zurückverlangen, bei jedem Leanpub-Kauf, in nur zwei Klicks. Wir bearbeiten die Erstattungen manuell, daher dauert es ein paar Tage, bis der Betrag ankommt.
Lese die kompletten Bedingungen.
Free Updates. DRM Free.
If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).
Most Leanpub books are available in PDF (for computers), EPUB (for phones and tablets) and MOBI (for Kindle). The formats that a book includes are shown at the top right corner of this page.
Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.
Learn more about Leanpub's ebook formats and where to read them
Top Books
C++ Best Practices
Jason TurnerLevel up your C++, get the tools working for you, eliminate common problems, and move on to more exciting things!
Digital-First Events
Joep Piscaer and Jana BorutaThe only resource you will ever need to launch your digital events program.
Algebra-Driven Design
Sandy MaguireA how-to field guide on building leak-free abstractions and algebraically designing real-world applications.
Ansible for DevOps
Jeff GeerlingAnsible is a simple, but powerful, server and configuration management tool. Learn to use Ansible effectively, whether you manage one server—or thousands.
R Programming for Data Science
Roger D. PengThis book brings the fundamentals of R programming to you, using the same material developed as part of the industry-leading Johns Hopkins Data Science Specialization. The skills taught in this book will lay the foundation for you to begin your journey learning data science. Printed copies of this book are available through Lulu.
Continuous Delivery Pipelines
Dave FarleyThis practical handbook provides a step-by-step guide for you to get the best continuous delivery pipeline for your software.
Cloud Strategy
Gregor Hohpe“Strategy is the difference between making a wish and making it come true.” A successful migration to the cloud can transform your organization, but it shouldn’t be driven by wishes. This book tells you how to develop a sound strategy guided by frameworks and decision models without being overly abstract nor getting lost in product details.
node-opcua by example
Etienne RossignonGet the best out of node-opcua through a set of documented examples by the author himself that will allow you to create stunning OPCUA Servers or Clients.
Technical leadership and the balance with agility
Simon BrownA developer-friendly, practical and pragmatic guide to lightweight software architecture, technical leadership and the balance with agility.
Everyday Rails - RSpecによるRailsテスト入門
Junichi Ito (伊藤淳一), AKIMOTO Toshiharu, 魚振江, and Aaron SumnerRSpecを使ってRailsアプリケーションに信頼性の高いテストを書く実践的なアドバイスを提供します。詳細で丁寧な説明は本書のオリジナルコンテンツです。また、説明には実際に動かせるサンプルアプリケーションも使用します。本書は2017年版にアップデートされ、RSpec 3.6やRails 5.1といった新しい環境に対応しています!さあ、自信をもってテストできるようになりましょう!
Top Bundles
- #1
Software Architecture for Developers: Volumes 1 & 2 - Technical leadership and communication
2 Books
"Software Architecture for Developers" is a practical and pragmatic guide to modern, lightweight software architecture, specifically aimed at developers. You'll learn:The essence of software architecture.Why the software architecture role should include coding, coaching and collaboration.The things that you really need to think about before... - #2
CCIE Service Provider Ultimate Study Bundle
2 Books
Piotr Jablonski, Lukasz Bromirski, and Nick Russo have joined forces to deliver the only CCIE Service Provider training resource you'll ever need. This bundle contains a detailed and challenging collection of workbook labs, plus an extensively detailed technical reference guide. All of us have earned the CCIE Service Provider certification... - #3
Modern C++ by Nicolai Josuttis
2 Books
- #4
Django for Beginners/APIs/Professionals
3 Books
- #5
Modern Management Made Easy
3 Books
Read all three Modern Management Made Easy books. Learn to manage yourself, lead and serve others, and lead the organization. - #6
Cisco CCNA 200-301 Complet
4 Books
Ce lot comprend les quatre volumes du guide préparation à l'examen de certification Cisco CCNA 200-301. - #7
Mastering Containers
2 Books
Docker and Kubernetes are taking the world by storm! These books will get you up-to-speed fast! Docker Deep Dive is over 400 pages long, and covers all objectives on the Docker Certified Associate exam.The Kubernetes Book includes everything you need to get up and running with Kubernetes! - #8
The Python Craftsman
3 Books
The Python Craftsman series comprises The Python Apprentice, The Python Journeyman, and The Python Master. The first book is primarily suitable for for programmers with some experience of programming in another language. If you don't have any experience with programming this book may be a bit daunting. You'll be learning not just a programming... - #9
CCDE Practical Studies (All labs)
3 Books
CCDE lab - #10
Linux Administration Complet
4 Books
Ce lot comprend les quatre volumes du Guide Linux Administration :Linux Administration, Volume 1, Administration fondamentale : Guide pratique de préparation aux examens de certification LPIC 1, Linux Essentials, RHCSA et LFCS. Administration fondamentale. Introduction à Linux. Le Shell. Traitement du texte. Arborescence de fichiers. Sécurité...