Wie motivieren wir unser Umfeld, für Clean Code zu sorgen? - SAEC Days

Die Seite wird erstellt Klaus Zander
 
WEITER LESEN
Wie motivieren wir unser Umfeld, für Clean Code zu sorgen? - SAEC Days
23.07.2020

     Wie motivieren wir unser Umfeld,
        für Clean Code zu sorgen?

                      © John Boyd-Rainey
               SAEC Days, München/Remote, 2020
Während wir warten, ist eine URL im Chat-Fenster mit einem Formular,
damit ich besser weiß, wer vor mir sitzt. Darf ich Sie bitten, es auszufüllen?

https://forms.gle/1VEnrCGaSFQmDuDW9

                                                               .eu

                         Wer bin ich?
                     Warum stehe ich hier?
  • Ich habe viel dreckigen Code produziert
  • immer noch 
        – immer seltener
        – ich räume ihn meist gleich auf
  • Mich interessieren
        – wartbarer Code
        – eleganter Code
        – Refactoring
        – gute Objekt-Orientierung d.h. u.a. Design Patterns.
  23.07.2020                            (C) John Boyd-Rainey                     3

                                                                                             1
23.07.2020

             Ich unterrichte und coache
• Programmierung (Java, C++ usw.)
•   Patterns
•   Refactoring
•   Clean Code
•   Kurs-Teilnehmer:
      – nicht genug Zeit
      – "Chef" sieht nicht ein, dass wir "aufräumen" müssen
      – wenn wir fertig sind, bekommen wir gleich die nächste
        Aufgabe.

23.07.2020                        (C) John Boyd-Rainey      4

                           Motivation?
• Wie?
• Hat der "Chef" ein Problem?
      – Hat er eins, das er noch nicht erkannt hat
      – Schmerzen noch erträglich?
• Seine Vorteile
• Wenn unser Ziel (Clean Code in die Breite zu
  treten) richtig ist:
      – brauchen wir Wege, ihm das klar zu machen
             • Erklärungen, die er verstehen kann
      – Vergleiche helfen .

23.07.2020                        (C) John Boyd-Rainey      5

                                                                        2
23.07.2020

        Was meinten meine Kollegen?
• Mehrere:
      – "Warum brauchst du so einen Vortrag? Clean
        Code ist selbstverständlich."
• Testen = Hauptziel
      – nur sauberen Code können wir testen

• Nach meiner Erfahrung:
      – schön wäre es!

23.07.2020                    (C) John Boyd-Rainey                                      6

         Was meine ich mit "Umfeld"?
                                                             reines Herzens
                                              heldenhaft                        mutig
             Der "Kunde"

                                                     Der Clean Code             tugendhaft
                                                     Programmierer

                      Der "Chef"                                              gott-ähnlich

                                                            Der Clean
                                                           Code Coach

                           Abteilungsleiter

                                                                       Der unclean
                                                                      Programmierer
                              Projektleiter

23.07.2020                    (C) John Boyd-Rainey                                      7

                                                                                                     3
23.07.2020

             The Bottom Line (1)

• Wie motiviere ich die "Chefs", für Clean Code
  zu sorgen
• In einer Folie…

23.07.2020          (C) John Boyd-Rainey          8

     Clean Code
        saves
       money!
23.07.2020          (C) John Boyd-Rainey          9

                                                              4
23.07.2020

              The Bottom Line (2)

• Wie motiviere ich die anderen Programmierer,
  für Clean Code zu sorgen?

23.07.2020          (C) John Boyd-Rainey     10

             Clean Code
             makes you
23.07.2020
               happy!
                    (C) John Boyd-Rainey     11

                                                          5
23.07.2020

  … "Wie macht mich CC glücklich"?
• Programmierer
      – waten nicht durch Schlamm
      – suchen keine Duplikate im Code
      – bleiben produktiv.
• Der Code tut, was die Namen versprechen
• Clean Code
      –      ist Gehirn gerecht
      –      passt in Ihren Arbeitsspeicher
      –      strengt nicht an
      –      ist übersichtlich
      –      ist verständlich
      –      geht schneller… Ja! Echt!!          Wirklich!!!
• Ihr "Chef" ist glücklich, weil…

23.07.2020                            (C) John Boyd-Rainey     12

          Clean Code
             saves
23.07.2020
            money!                    (C) John Boyd-Rainey     13

                                                                            6
23.07.2020

  Überlastet der Code unsere Gehirne?
• Wie viele Sachen können wir gleichzeitig "im Kopf" haben?
• Früher "ca. 7"
• Neuerdings ca. … was meinen Sie? 4 (ja, vier!)
      – im "working memory"* ( = Arbeitsgedächtnis)
• Wenn wir versuchen, mehr Sachen gleichzeitig zu merken oder
  bearbeiten
      – anstrengend
      – unübersichtlich
      – wir machen Fehler

Clean Code ist Gehirn-gerecht
Kurze Methoden passen schmerzfrei in unsere Köpfe.
* https://en.wikipedia.org/wiki/Working_memory

23.07.2020                                       (C) John Boyd-Rainey   14

                                        Diagramme
• Ein Bild spricht…
• Verstehen wir ein Diagramm schneller als
  Code?
• JA!
• UML, SysML usw. bieten viele Möglichkeiten
      – genau/pedantisch
      – oder ganz lockere Skizzen
      – beide helfen!

23.07.2020                                       (C) John Boyd-Rainey   15

                                                                                     7
23.07.2020

                Code Säubern ist einfach
• Namen verbessern
• Methode/Funktion 5 - 7 Zeilen?
      – oder 3?
•   Methode tut EINE Sache
•   Klasse hat EINE Aufgabe
•   Methode: EIN mal einrücken
•   Viele Kommentare löschen
      – sie zeigen, dass der Code nicht für sich spricht
      – Also: Weg damit!
• Werttypen anstelle von "primitiver Obsession"
      – z.B. Klasse TelefonNummer anstelle von einem String.

23.07.2020                         (C) John Boyd-Rainey        16

                     "Definition of Done"
• "Done" kann verschiedenes bedeuten
• "Make it run, make it clean, make it fast"
• "Done":
      –      Tests
      –      grün
      –      Code ist aufgeräumt
      –      …
• Agile Projekte:
      – öffentlich sichtbare "Definition of Done"
• Clean Code gehört unbedingt dazu!
      – Das ist nicht optional,
      – also nicht "nice to have".

23.07.2020                         (C) John Boyd-Rainey        18

                                                                            8
23.07.2020

                    Ein paar Zitate

• Folgende Zitate
      – sind uns wahrscheinlich bekannt
      – aber den "Chefs" vielleicht nicht
• Sie können helfen, "Chefs" zu motivieren
      – weil sie ihn dort abholen, wo er ist.

23.07.2020                 (C) John Boyd-Rainey              19

             Rechtzeitiges Refactoring

It is the neglect of timely repair that makes
rebuilding necessary.

Richard Whately

Das gilt für einen Gartenzaun genau so wie für Code
     wenn ein "Chef" das in Frage stellt, fragen Sie, warum er
     glaubt, dass das nicht so ist.

23.07.2020                 (C) John Boyd-Rainey              20

                                                                          9
23.07.2020

   Autor von "The Mythical Man-Month"
   Ich wette, dass die einzelne Programmiererin
         Clean Code hatte
         besser ausgebildet war.
23.07.2020                 (C) John Boyd-Rainey             21

             Das Wesen des Universums
   • Programming today is a race between software
     engineers striving to build bigger and better idiot-
     proof programs, and the Universe trying to
     produce bigger and better idiots.
   • So far, the Universe is winning.
                                               Rich Cook
   • Entropie = Unordnung = ein Naturgesetz
   • Dampfende Haufen… http://geek-and-poke.com/

23.07.2020                 (C) John Boyd-Rainey             22

                                                                        10
23.07.2020

             Noch ein bisschen "Umfeld"
                                                                    reines Herzens
                                                     heldenhaft                        mutig
                    Der "Kunde"

                                                            Der Clean Code             tugendhaft
                                                            Programmierer

                             Der "Chef"                                              gott-ähnlich

                                                                   Der Clean
                                                                  Code Coach

                                  Abteilungsleiter
 Firmeninhaber

                                                                              Der unclean
                                                                             Programmierer
       Bereichsleiter                Projektleiter

23.07.2020                           (C) John Boyd-Rainey                                    23

                  Langfristig / Kurzfristig
• Projekt-Owner und Projektleiter wollen das "nächste
  Feature" einbauen lassen
• Höher in der Hierarchie finden wir manchmal Leute mit
  längerfristigem Denken
      – sie wissen, dass Quick & Dirty Lösungen später zu
        Problemen führen
• Wir müssen diese verantwortlichen Leute erreichen
• Und sie halten die Rücken der Software-Ingenieure frei
      – zum testen
      – zum refactorn
      – um den Code sauber zu machen und zu halten.

23.07.2020                           (C) John Boyd-Rainey                                    24

                                                                                                           11
23.07.2020

                      Metapher bildlich

             Vorher                        Nach dem Refactoring

23.07.2020                 (C) John Boyd-Rainey                   25

         Probleme in unserer Industrie

• Niemand sieht, wie wir arbeiten
      – ob wir eine Holzbrücke produzieren
      – obwohl eine Autobahnbrücke (implizit) bestellt
        war

• Niemand sieht, ob wir sauber arbeiten.

23.07.2020                 (C) John Boyd-Rainey                   26

                                                                              12
23.07.2020

                    Andere Ingenieure…
• Ein Brückenbau-Ingenieur kann seinem
  Kunden/Chef zeigen, wie weit sein Projekt ist
• Niemand beschwert sich, dass er Zeit nimmt, um
  die Baustelle ständig sauber zu halten
      – Das Aufräumen ist
             • selbstverständlich,
             • erwünscht und
             • Vorschrift!
• Keiner sagt, "ok, ein Fahrrad kam sicher rüber, wir
  geben die Autobahnbrücke frei".

23.07.2020                           (C) John Boyd-Rainey   27

                              Die Brücke
• Wenn eine Holzbrücke bestellt war
      – und fast fertig ist
      – kommt keiner und sagt, "Oops – kleine Änderung… wir
        wollten eigentlich eine Autobahnbrücke"
      – "… 5 km weiter südlich"
• Das passiert bei uns oft
• Bekommen wir Zeit,
      – unsere Schreiner umzuschulen?
      – unsere Holzsägen usw. wegzuräumen?
      – unsere Betonmischer aufzustellen und bedienen zu
        lernen?

23.07.2020                           (C) John Boyd-Rainey   28

                                                                        13
23.07.2020

        Das Problem unserer Industrie

• Niemand sieht die Betonmischer mitten auf
  der Straße

• Niemand sieht eine Holzkonstruktion, die
  natürlich keinen 40-Tonner trägt.

23.07.2020                   (C) John Boyd-Rainey                 29

                     Lieber "Chef"…
• … du räumst deinen Schreibtisch auf, damit du Sachen
  schnell wiederfindest
• … wenn du deinen Schreibtisch aufräumen würdest,
  würdest du Sachen schneller wiederfinden
• Räumst du deine Küche auf?
      – oder stapeln sich die dreckigen Teller neben der Spüle?
• Wenn wir JETZT unseren Code aufräumen
      – bildet sich kein Schimmel
      – sammeln sich die Ratten und Kakerlaken nicht!
• Uncle Bob's "Zahnarzt"…

23.07.2020                   (C) John Boyd-Rainey                 30

                                                                              14
23.07.2020

    Clean Code
      saves
      money!
23.07.2020                (C) John Boyd-Rainey       31

  Was hält uns vom Clean Code ab?

• Programmierer sind gewohnt,
      – lange Methoden zu schreiben
      – das Anti-Pattern "kopieren statt kapieren"
        anzuwenden
      – Code zu duplizieren
      – aufzuhören, wenn es funktioniert
• Gewohnheiten brechen!

23.07.2020                (C) John Boyd-Rainey       32

                                                                 15
23.07.2020

                      Putzmittel
 • Diagramme
       – verworrenes Verständnis der Aufgabe oder des
         Codes können wir so ans Licht bringen
       – Kommunikation wird einfacher
 • Seminare
 • Reviews
 • Coaching.

 23.07.2020               (C) John Boyd-Rainey                          33

                 Putzmittel: Die Zeit
 Programmierer brauchen Zeit, um

sauber zu programmieren
                                            ihren Arbeitsprozess
  Alternative Code-Designs                  zu reviewen
  aus zu probieren
                                                 alternative Arbeitsprozesse
über den Code zu reflektieren                    zu finden

       den Code zu reviewen
 … sonst werden wir nicht besser
 Wir arbeiten kreativ. Das kann niemand erzwingen.
 23.07.2020               (C) John Boyd-Rainey                          34

                                                                                      16
23.07.2020

    Wie motivieren wir Programmierer?
Wir zeigen ihnen, dass Clean Code
• mehr Spaß macht
• einfacher ist:
      – zu verstehen
      – zu verändern.
•   mehr Erfolg bringt
•   professioneller ist
•   zur Gewohnheit werden kann und muss
•   eine Art Eigenschutz ist
      – in 2 Wochen werden sie den Code verstehen müssen
• den Programmierern gleich hilft
Wir gehen mit gutem Beispiel voran.
23.07.2020                 (C) John Boyd-Rainey            35

    Wie motivieren wir Programmierer?

• Schmerzen bewusster machen
• Benennen
• Lösungen zeigen.

23.07.2020                 (C) John Boyd-Rainey            36

                                                                       17
23.07.2020

                          Schulungen!                 es ist Eigenwerbung,
                                                      a.d.R

• Auch wenn das wie Eigenwerbung klingt: viele
  Programmierer brauchen Schulungen in
      –      Clean Code
      –      Refactoring
      –      Design Patterns
      –      Verwendung ihrer Entwicklertools
      –      und einiges mehr
• Und "das Umfeld" braucht auch ein Training
      – dieser Vortrag ist hoffentlich ein (erster?) Schritt
• On-the-job coaching.

23.07.2020                     (C) John Boyd-Rainey                    37

   Was demotiviert Programmierer?
Oder: warum sind nicht alle sofort "Clean"?
• Anfängerbücher
• Deshalb sind kurze Methoden ungewohnt
• "Wir müssen ständig von einer Datei zu einer
  anderen springen "
• "Kollegen tun es nicht, also lasse ich es auch".

23.07.2020                     (C) John Boyd-Rainey                    38

                                                                                    18
23.07.2020

                           Broken windows
• Etwas heiles bleibt oft heil
• Wenn etwas ein bisschen kaputt aussieht, wird es
  immer kaputter
• Entropie
• https://medium.com/@matryer/broken-
  windows-theory-why-code-quality-and-simplistic-
  design-are-non-negotiable-e37f8ce23dab
• Wir müssen Energie, Zeit und Geld investieren,
  um den Code sauber zu halten

23.07.2020                                 (C) John Boyd-Rainey                         39

               Beratungsresistente Coder
• Idealerweise sieht ein Programmierer ein, dass er/sie sauberer
  kodieren soll
      – und das wird sie/er oft tun
• Falls nicht:
      – Seminar
              • ein Dritter erklärt es – d.h. kein (vielleicht jüngerer) Kollege
              • “Problems cannot be solved with the same mind set that created them.”
                         Albert Einstein
      –      Zwang!
      –      Daumenschraube? (Ok, ok, ich bin manchmal ein bisschen altmodisch)
      –      Code kann nur eingecheckt werden, wenn Metriken erfüllt sind
      –      mit Tools wie SonarQube
              • z.B. für kurze Methoden.
• Reviews.

23.07.2020                                 (C) John Boyd-Rainey                         40

                                                                                                    19
23.07.2020

                  Die schwierige Folie
• Ein Programmierer, der dreckigen Code
  hinterlässt, ist unprofessionell

• Ein "Chef", der nicht auf sauberen Code
  besteht, handelt unprofessionell
• Er muss auf sauberem Code bestehen.

                        Robert ("Uncle Bob") Martin, The Clean Coder

23.07.2020                       (C) John Boyd-Rainey                     41

             "Unprofessionelle" "Chefs"
"Chefs" (auch Kunden, Vertriebler usw.)
• sehen, dass die Software funktioniert
• geben uns gleich den nächsten Auftrag
• Die Programmierer haben keine Zeit zum Aufräumen
Ein Maler wird selbstverständlich die Zeit für die An- und Abreise, für
das Abdecken des Bodens und Wegräumen der Folien in Rechnung
stellen
Das müssen wir auch!
Unsere "Chefs" müssen das verstehen
"The Clean Coder" dem "Chef" schenken!
Wenn "Chefs" bei ihrer mangelnden Professionalität bleiben:
• müssen wir lügen
      – sagt Martin Fowler
      – sie haben nichts Besseres verdient.

23.07.2020                       (C) John Boyd-Rainey                     42

                                                                                      20
23.07.2020

 WIE motivieren wir unser Umfeld?
• "Kristallisationspunkt"?
                 – https://www.youtube.com/watch?v=lo0cp2uhxb0
• Wenn wir selbst coden: mit gutem Beispiel voran
                 – die Kollegen sehen, dass sie (nach etwas Schulung und
                   Übung) mit sauberem Code besser arbeiten können
• "Boy scout principle"
                 – wir räumen den Code immer ein bisschen auf
                 – "Kaizen" (Kontinuierliche Verbesserungs-Prozess) hat die
                   Produktivität der Japanischen Industrie revolutioniert…
                 – Wer ein sauberes Stück Code sieht, kann das als gutes
                   Beispiel nehmen, auch schön zu programmieren

23.07.2020                               (C) John Boyd-Rainey                               43

                            Produktivität / Zeit
                                     Alte Art        Professionell              Clean Code
                 6                                                              Refactoring
                                                                                Agile
                 5                                                              Tests
                                                                                Patterns
 Produktivität

                 4                                                              Pair programming
                                                                                Mob programming
                 3                                                              CI
                                                                      Crap
                 2

                 1                                                   Houston,
                                                                     we have a BIG
                                                                     Problem
                 0

                 -1
                                                                tΩ       Let's play
                                                     Zeit
                                                                        "Whack-A-
                                                                        Mole"!... 
23.07.2020                               (C) John Boyd-Rainey                               44

                                                                                                          21
23.07.2020

                           Produktivität / Zeit
                                   Alte Art        Professionell              Clean Code
                 6                                                            Refactoring
                                                                              Agile
                 5                                                            Tests
                                                                              Patterns
 Produktivität

                 4                                                            Pair programming
                                                                              Mob programming
                 3                                                            CI
                                                                    Crap
                 2

                 1                                                 Houston,
                                                                   we have a BIG
                                                                   Problem
                 0

                 -1
                                                              tΩ       Let's play
                                                   Zeit
                                                                      "Whack-A-
                                                                      Mole"!... 
23.07.2020                             (C) John Boyd-Rainey                               45

                              Alle brauchen…
•            Disziplin
•            Teamgeist
•            den Willen, besser zu werden
•            die Einsicht, dass Clean Code allen hilft
                 – und Spaß macht
                 – und zwingend erforderlich ist
                 – also nicht "nice-to-have"
• Disziplin
• Teamgeist
• den Willen besser zu…
23.07.2020                             (C) John Boyd-Rainey                               46

                                                                                                        22
23.07.2020

             Woran könnte es scheitern?
• Clean-Coding ist ein "Metaskill"
• Wir sind an den Schmerzen gewöhnt
• Wir merken nicht, wenn wir es nicht
  beherrschen
• Deswegen:
      – mehr Reviews
      – auch mit externen Coaches
      – und Projekt-übergreifend.

23.07.2020               (C) John Boyd-Rainey              47

                    Ihre Aufgabe

                   Just do it!
Tipps aus dem Zeitmanagement
• Gleich nach diesem Vortrag bitte 3 Minuten lang
   Argumente, Aktionen und Pläne aufschreiben,
   diktieren oder tippen
      – die Sie MORGEN umsetzen WERDEN
• Sprechen Sie morgen mit Ihrem Team
• Wer das nicht tut, handelt vielleicht unprofessionell?

23.07.2020               (C) John Boyd-Rainey              48

                                                                       23
23.07.2020

                 "Wie motivieren wir…?"

WIR diskutieren
• argumentieren
• machen
      – mit gutem Beispiel voran.

23.07.2020                           (C) John Boyd-Rainey          49

                        Zusammenfassung
• Lieber "Chef", denk bitte an
      – den "Knäuel" mit deinem Workflow
      – die Folie des Anstreichers auf dem Boden
• Lieber "Chef", ich bin der professioneller Software-Ingenieur
      – Ich weiß, was ich tue
      – Ich brauche diese Zeit zum aufräumen!
      – Es wäre unprofessionell, wenn ich nicht aufräumen würde
• Clean Code spart Kosten und Ärger

• Alle Programmierer müssen davon überzeugt werden,
      – dass Clean Code besser ist
             • auch für sie selbst
      – dass sie wissen, dass es einfach ist, Code auf zu räumen
      – dass alle im Team mitmachen
             • auch die "Chefs".

23.07.2020                           (C) John Boyd-Rainey          50

                                                                               24
23.07.2020

                       Mein Angebot

• Ich coache auch Teams MIT ihren "Chefs" usw.

•   Zur Not kaufe ich dafür eine Krawatte!

23.07.2020                       (C) John Boyd-Rainey   51

                               Quellen
• Hunderte von Seminar-Teilnehmern mit ihren Fragen
  und Erfahrungen
• Firmen, die ich nicht nennen darf

• Robert C. Martin
      – Clean Code
      – The Clean Coder
• Martin Fowler
      – Refactoring
• Andrew Hunt & David Thomas
      – The Pragmatic Programmer.

23.07.2020                       (C) John Boyd-Rainey   52

                                                                    25
23.07.2020

                             Vielen Dank
• … an die Organisatoren der Konferenz, meine
  Kollegen und Kursteilnehmer!
   Es gibt wieder eine URL im Chat-Fenster mit einem Feedback-Formular,
   damit ich weiß, ob Ihnen der Vortrag gefallen hat. Ich würde mich über jede
   Reaktion freuen…

   https://forms.gle/CG9zDNeP1cWnJSHX7

• Wenn Sie mehr Feedback geben möchten, oder
  Sie weiteren Kommunikationsbedarf haben, freue
  ich mich über Emails: john@boyd-rainey.de

23.07.2020                          (C) John Boyd-Rainey                         53

                                                                                             26
Sie können auch lesen