Develop Yourself

Ein Plädoyer für mehr
Software Handwerkskunst

Ole Rößner

About me

  • Ole Rößner
  • 35 Jahre
  • verheiratet, 1 Sohn
  • neusta GmbH (Bremen)
  • Entwickler & Coach
  • Symfony Enthusiast
  • Clean Code Evangelist
  • Krachmacher A.D.

 

        @djbasster

Was macht einen guten Musiker aus?

  • Er kennt die Theorie?
  • Er weiß, wie sein Instrument funktioniert?
  • Talent?

Üben

Üben

Üben

Was macht einen guten Sportler aus?

  • Fitness?
  • Veranlagung?
  • Talent?

Üben

Üben

Üben

Und Softwareentwickler?

Der typische Entwickler

  • Kommt aus Ausbildung oder Uni...
  • ...oder ist Quereinsteiger...
  • ...mit einer Fülle theoretischem Wissen
  • ...und wird sofort auf hochkomplexe Projekte losgelassen

     
  • "Trainiert" wird während der Arbeit

Quelle: Giphy

Softwareentwicklung?

  • Kreativer Prozess
  • &
  • Handwerk

Handwerk?

Quelle: Giphy

Der Elektriker

Ein Vergleich

Ohne freundliche Genehmigung von Wikipedia

Die Kabel müssen nachvollziehbar verlegt und ausreichend dimensioniert sein für zukünftig zu erwartende Energiebedarfe.

Die Absicherung muss ordnungsgemäß ausgeführt sein, Elektroherd und Durchlauferhitzer sollen gleichzeitig betrieben werden können und darüber hinaus sollen Steckdosen in ausreichender Anzahl und an den richtigen Plätzen vorhanden sein.

Der Elektriker kennt aktuelle Technologien und berät den Auftraggeber kompetent.

Unter Umständen muss er dem Kunden aber auch unmissverständlich klarmachen, dass preisgünstigere Vorschläge (z. B. Kabel diagonal zu verlegen, um Kupfer zu sparen, oder weniger Absicherungen einzubauen) keine gangbare Lösung darstellen.

Wer hatte ein Déjà-vu?

Ein gutes Programm hat ein sauberes Layout, verwendet sinnvolle Namen,
ist ausführlich kommentiert und verwendet Konstrukte der Sprache
derart, dass maximale Robustheit und Lesbarkeit des Programms erreicht
werden. Die Erstellung eines solchen Programms erfordert vom
Programmierer Sorgfalt, Disziplin und ein gutes Stück handwerklichen
Stolz.

Ian Sommerville, „Software Engineering“, Addison-Wesley 1987

Softwarehandwerk?

  • Keine Einstiegsvoraussetzungen
  • "Auch schlechter Code funktioniert"
  • Kein Blick "hinter die Fassade"
  • Es gibt nicht "den richtigen Weg"!

Manifest für Softwarehandwerkskunst

Die Entstehung

  • 1992: "What Is Software Design?" (J. W. Reeves)
  • 1999: "The Pragmatic Programmer" (A. Hunt, D. Thomas)
  • 2001: "Software Craftmanship" (P. McBreen)
  • 2008: Erweitertes "Agile Manifesto" (B. Martin)
  • 2008: "Manifest für Softwarehandwerkskunst"

Manifest

Als engagierte Software-Handwerker heben wir die Messlatte für professionelle Softwareentwicklung an, indem wir üben und anderen dabei helfen, das Handwerk zu erlernen.

 

​Durch diese Tätigkeit haben wir diese Werte schätzen gelernt:

Manifest

  • Nicht nur funktionierende Software,
    sondern auch gut gefertigte Software
  • Nicht nur auf Veränderung zu reagieren,
    sondern stets Mehrwert zu schaffen
  • Nicht nur Individuen und Interaktionen,
    sondern auch eine Gemeinschaft aus Experten
  • Nicht nur Zusammenarbeit mit dem Kunden,
    sondern auch produktive Partnerschaften

At the lowest code level, every variable you define, every method you create, every class you decide to instantiate will play a role in the long term maintenance overhead of the application. [...] the biggest impact on your application will be done by the development team and the artifacts they create. So it is important to have developers who strive to write clean code, have good amount of automated tests, refactor constantly to improve code quality, and generally are software craftsman by heart in the first place.

Wie werde ich Softwarehandwerker?

Know your tools

  • Was sind unsere Werkzeuge?
    • Editor
    • Tastatur
  • Was ist unser Material?
    • Programmiersprachen
    • Libraries
    • Muster
    • Kreativität

Euer Editor

http://www.smbc-comics.com/comic/punishment

Shortcuts!

https://www.reddit.com/r/gifs/comments/3bw9jt/exclusive_footage_of_wb_coding_the_pc_version_of/

Customize!

http://gif-database.tumblr.com/post/16324905512

Plugins!

Wozu das alles?

Bedienung automatisieren

  • Reflex
  • Muscle Memory

Muscle memory [...] is a form of procedural memory that involves consolidating a specific motor task into memory through repetition. When a movement is repeated over time, a long-term muscle memory is created for that task, eventually allowing it to be performed without conscious effort.

Komplexität erfordert Übung

Findet euren Weg!

Training

Kata

  • Konzept kommt aus dem Kampfsport
  • Weitergabe von Wissen
  • Bewegungsabläufe automatisieren bis zur Perfektion
  • Wiederholung
  • Sicheres Terrain

Randori

  • Kata mit mehreren

Code Kata

  • Simples Problem
  • Timeboxed
  • ...von der grünen Wiese
  • Baby Steps
  • Iteratives, agiles Vorgehen

Kata Workflow

  • Entferne ablenkende Faktoren
  • Öffne deine Entwicklungsumgebung
  • Stelle dir den Wecker
  • Beginne zu Coden
    • immer TDD (red, green, refactor)!
  • Stop @ Timebox
  • Rekapituliere

Randori Workflow

  • "Come red - Go red"
  • Mini Schritte
  • Person A: red, green, refactor, red
  • Person B: red, green, refactor, red
  • Person (C|A): red, green, refactor, red
  • usw.

Aber immer das Gleiche, wird das nicht langweilig?

  • Sucht euch Themen
    • SOLID, Pattern, No-Mouse, No Test Framework, Merciless Refactoring, No-If, On-the-Project Refactoring
  • Selbstreflektion
  • Es trainiert
  • Probiert mal neue Sprachen aus

Kata Projekte?

Einstiegs-Katas

OMG, Live Coding!

FizzBuzz


    FizzBuzz::process(int $input) : string
$input process($input)
1 "1"
2 "2"
3 "Fizz"
5 "Buzz"
6 "Fizz"
10 "Buzz"
15 "FizzBuzz"
30 "FizzBuzz"

FizzBuzz in 10 min

Zusammenfassung

  • TDD unter optimalen Bedingungen
  • Refactoring
  • YAGNI
  • "Done is better than perfect"
  • Evaluierung

Was macht einen guten Musiker Softwareentwickler aus?

  • Er kennt die Theorie!
  • Er weiß, wie seine Werkzeuge funktionieren!
  • Talent!

Üben!

Üben!

Üben!

Vielen Dank!

Quellen

Develop Yourself 2018

By Ole Rößner

Develop Yourself 2018

Softwareentwicklung ist mehr als stumpfes Code runter schreiben. Es vereint logisches Denken, Kreativität und handwerkliches Können. Handwerklich? Unter dem Leitgedanken der Software Craftmanship Bewegung beleuchten wir den handwerklichen Teil der Softwareentwicklung, die Importanz bestimmter Tools und das regelmäßige Training in Form von Code Katas.

  • 1,172