You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
9.1 KiB

5 years ago
# Rallye Driven Development
5 years ago
5 years ago
## Definition von RDD
1. Code ist nur Mittel zum Zweck, setze so wenig wie nötig davon ein
- Jede Zeile muss sich stets aufs Neue beweisen
- Tests:
- Tests dürfen nie zum Selbstzweck existieren - "weil man das so macht"
- Abdeckung ist vollkommen egal
- Nur wichtiger Code muss getestet sein
5 years ago
- Wann ist ein Test wichtig? Wenn er Klärung bringt
- Bringt diese Zeile Code mir etwas?
- Befriedigt sie nur irgendwelche Frameworks oder Patterns?
- Wozu braucht man während eines Rennens eine Klimaanlage oder elektrische Fensterheber?
5 years ago
2. Alles hat seine Kosten
- Meistens kostet es dich Komplexität
- Und damit den Verstand
5 years ago
- Vergleichbar mit Werbung und Aufmerksamkeit
- Cyclomatic Complexity / Cognitive Complexity
- Physik: überschüssige Energie wird Wärme; Code: überschüssiger Code wird Komplexität
- Quattro-Autos waren schwerer als die Konkurrenz, brauchten mehr Leistung, die Fahrer mussten lernen, mit den Wagen zu fahren
3. Verbaue dir nicht deine Möglichkeiten
- Änderungen werden kommen (Kunde)
- Änderungen werden nötig sein (Architektur)
- Du wirst Änderungen vornehmen wollen (Aufräumen)
- Es wird inkompatible Änderungen geben (DB)
- Keine Annahmen treffen, explizit sein
- Nicht zuviel in einer Aufrufhierarchie machen
- Das Differential muss auf der Rennstrecke tauschbar sein
5 years ago
4. Der gesunde Menschenverstand hat das letzte Wort
- Kürzerer Code mag besser sein, aber wenn er unlesbar ist, ist er unwartbar und damit unbrauchbar
5 years ago
5 years ago
## Zusammenfassung
Rallye-Meisterschaften stellen die Fahrzeuge, ihre Fahrer und die Konstrukteure vor ganz besondere Herausforderungen. Im Gegensatz zu Rundrennen wird hier nicht auf speziell konstruierten Strecken, sondern auf abgesperrten Straßen- und Schotterabschnitten bei Wind und Wetter gegen die Uhr gefahren. Dabei reicht die Variation von waldigen Strecken in Finnland bis zum afrikanischen Kontinent. Um diesen stark unterschiedlichen Ansprüchen zu genügen und die Fahrzeuge derartig anpassbar zu gestalten, muss vor allem eins gegeben sein: Simplizität.
Ich möchte bei meinem Vortrag Parallelen zwischen der Softwareentwicklung und dem Rallyefahren herausarbeiten und versuchen, Prinzipien aus dem Sport auf unsere Tätigkeit als Entwickler anzuwenden.
Wie schafft man es beispielsweise seine Software so zu konstruieren, dass man am Straßenrand das Differential auswechseln kann? Wieviel Schrauben muss man am Kotflügel lösen, um mitten im Sprint eine größere Anpassung an der Architektur vorzunehmen?
Dabei soll auch nicht davor zurückgeschreckt werden, mit alteingesessenen Mustern und Grundsätzen zu brechen, um herauszufinden, ob sie wirklich so universell sind, wie es viele glauben. Denn: ohne radikal zu denken, schafft man es nicht, von 0 auf 100 in unter 2,6 Sekunden auf Schotter zu beschleunigen.
## Dramatis persona
Aus Goslar stammend und mit Braunschweig als Wahlheimat arbeite ich seit mehr als 10 Jahren als Javaentwickler in allen Bereichen, die Software zu bieten hat. Dabei interessiert mich am Meisten die Meta-Seite der Entwicklung: wie baut man Code, der noch in der fernen Zukunft flexibel und wartbar ist? Wie kann man zusammen an Software arbeiten, ohne sich gegenseitig auf die Füße zu treten? Dabei beschäftige ich mich nicht nur mit Java allein, sondern habe im Bereich Cluster-Computing Kotlin zu schätzen gelernt und beim privaten Programmieren Clojure entdeckt und mich dabei Hals über Kopf darin verliebt.
5 years ago
5 years ago
## Was
- Wo findet sich Komplexität
5 years ago
- Unterschied Technische Komplexität und Fachliche Komplexität
5 years ago
- Schlaue Lösungen / Schlaues Denken
5 years ago
- Reinsteigern in Verfeinerung von Lösungen
- Rauszoomen
5 years ago
- Nur langweiliger Code ist guter Code
- Über Dinge reden, die nicht da sind
- Dinge so bauen, dass sie nicht fehlschlagen können
- Bei bestehenden Mustern bleiben
5 years ago
- Der Marsianer
5 years ago
- Clojure
5 years ago
- cli build tool
- Simple vs Easy
- Functional design patterns
- https://de.slideshare.net/ScottWlaschin/fp-patterns-buildstufflt
5 years ago
- Tools -> Spargelschäler der IT-Welt
5 years ago
- https://medium.com/the-minimalist/the-minimalist-programmer-c36e16ebf8ef
5 years ago
- Definitionen von Complexity
5 years ago
- Complexity is anything that makes software hard to understand or to modify.
- Wieviel Dinge muss man im Kopf behalten, um eine Aufgabe umsetzen zu können
- Dazu zählt auch eine gute Umgebung - IDE und Arbeitsumgebung
- Wieviele Aufgaben wurden mir erteilt
- In wie vielen Projekten stecke ich drin
5 years ago
- Aussagen zu Complexity
5 years ago
- Complexity is more apparent to readers than to writers. If other people think a piece of code is complex, it is
- Isolating complexity in places that are rarely interacted with is roughly equivalent to eliminating complexity.
- Complexity is caused by obscurity and depen dencies.
5 years ago
- Lindbergh war der Meinung, dass beim Ausfall eines Motors eines voll beladenen mehrmotorigen Flugzeugs die verbleibenden Motoren die Maschine auch nicht in der Luft halten könnten. Das Risiko eines Motorenausfalls steige aber mit der Zahl der Motoren.
5 years ago
- https://de.wikipedia.org/wiki/Spirit_of_St._Louis
5 years ago
- Messy codebase die funktioniert, ist besser als eine saubere, die nicht funktioniert
- Sarah Mei: Carving services out of a monolith and carving objects out of a large class are the same skill
5 years ago
- Object boundaries sind einfacher anzupassen als service boundaries
5 years ago
- Was will man mit einer Architektur erreichen?
5 years ago
- Einfache Erweitbarkeit
- Der Fachlichkeit gerecht werden
- Best Practices einhalten
- Technologische Neugier befriedigen
- Dem Code Struktur geben
5 years ago
- Wo will man lose Kopplung erhalten?
5 years ago
- DB und Backend, Applikationen, Services, Layer, Slices, Klassen, Objekten, Funktionen
5 years ago
- Wer kennt die Anforderungen
- Tradeoff zwischen Cost of Understanding und Cost of Change
- Was sind Layer
5 years ago
- Systemgrenzen
- Klassengrenzen
- Packages
- Proxies in Menschenkommunikation
- Architekturgewichse
- Patterns
- Factory
- Decorator
- Systemische Hürden
- Docker
5 years ago
- Branches
- Git-Flow
- "Das geht so aber nicht in Git-Flow"
- Benamung
5 years ago
- Paradigmenwechsel
- Coderauschen
5 years ago
- Wer hat schon OO so richtig verstanden?
5 years ago
- Warum benutzen wir es denn?
- Teamowner lädt jemanden in ein Team ein, Eingeladener erhält Mail
- Entities: Team, Owner, Account, Member
- Wer ist Akteur?
- Wo ist das Aggregate Root?
- DDD oder OO nach ursprünglicher Lehre?
- Domänenservice?
- Wer verschickt die E-Mail?
- Event-Hub?
- Für ein Programm, das < 5k Locs hat und zwei verschiedene Events?
- Wer hindert mich daran, alles in den MVC-Controller zu packen und es funktioniert?
- Refactoring ist immernoch möglich
5 years ago
- Tesla wird von einer Reihe Python-Skripten zusammengehalten
5 years ago
- https://twitter.com/atomicthumbs/status/1032939617404645376
5 years ago
- Alles hat seine Kosten
5 years ago
- Ist man bereit sie zu zahlen
- Ist es wert
- Hat man genug Budget
5 years ago
- SOLID
5 years ago
- Single Responsibility
- Was ist eine Responsibility überhaupt
- Open/Closed
- Aber wir wollen doch Code ändern können!
- "Code bauen ist einfacher, als ihn zu verändern"
- Mehr Code oben drauf? Ernsthaft?
- Liskov substitution
- A: B, überall wo A, auch B benutzen können
- Composition over Inheritance?
- Wer kümmert sich schon darum?
- Interface Segregation
- Keine großen Klassen!
- Ach was
- Dependency Inversion
- Von Abstraktionen abhängen
- Interface - Impl
- DI ist Implementierung von D
- Objekte reingeben lassen
- Entscheidungen nach außen delegieren
- Gute Idee
- Global State?
- Wer kennt überhaupt alle einzelnen Bedeutungen
- Ist es dann so wichtig?
5 years ago
- Verhalten testen, nicht Implementierung
5 years ago
- Kennt eure Werkzeuge und lernt, sie effektiv einzusetzen
- Opel Ascona 400
- ca 1T fahrbereit
- 230 bis 300 PS
- Audi Quattor mit Allrad und 300PS, aber auch 1,2T Gewicht, gleichzeitig im Rennen
- Röhrl gewinnt Weltmeisterschaft
- Fiat Abarth 131
- 2 Liter Hubraum, 140 PS
- Röhrl 1980 Weltmeister
- Setzte sich durch gegen
- Lancia Stratos HF 280PS, Ferrari-Motor, V6, 2,4L, 880kg
- Saab 99 Turbo, 200PS
- Mercedes 450 SLC 5.0, 5L, V8, 225PS
- Im Fiat 131 Homologationsmodell wurden an der Vorderachse untaugliche, da zu schwache, Bremsen verbaut. Für den Motorsport war dies egal, am Rennmodell wurden Motorsportteile verwendet.
5 years ago
- UNIX ping hat ca 1000 Zeilen Code
5 years ago
- Designer schieben Elemente hin und her um zu gucken, wie ELemente anders angeordnet aussehen
- Warum kann so etwas in Software nicht gemacht werden?
- Warum wird das nicht vorangetrieben?
- Warum wird das aktiv vermieden?
5 years ago
- Welche Architekturstufen gibt es?
- Stufe 0: Keine
- Stufe 1: Architektur aus dem Internet
- Zwiebel
- DDD
- Microservices
- Stufe 2: Mit Wissen selbst auf Anwendungsfall angepasst