Software Craftsmanship
                  en pratique




      Jean-Laurent de Morlhon - 4 Octobre 2011
Jean-Laurent de Morlhon

                   Directeur Technique
                          Xebia


                  +12 ans expérience IT
                  +6 ans pratiques agiles


                       @morlhon
                   http://blog.xebia.fr
                   jlmorlhon @ xebia.fr
http://serpodile.com
Master Plan


Qu'est ce que le Software Craftsmanship ?

   Comment *je* le mets en pratique.
Software
Craftsmanship
     ???
CRAFTMAN-CHIPS
                 @elemerdy
http://www.artisanat.fr/
http://www.economicthought.net/2011/02/selective-attention/
Historique
    Livre                                            1ère Conf
 Pragmatic                    1ère Conf          Craftsmanship US
Programmers               Craftsmanship EU

                                                                   2nde conf
              "Craftsmanship            Manifeste              Craftsmanship EU
                 over crap"           Craftsmanship




 1999             2008             2009                    2010




                         Livre                   Livre
                      Clean Code             Apprencticeship
                                                Patterns
Software Craftsmanship




        est une approche de développement logiciel qui
             met l'accent sur les «coding skills» des
                          développeurs.
Crafts.man




  Un homme qui pratique son métier avec une grande habileté.
! ART


    http://dannorth.net/2011/01/11/programming-is-not-a-craft/
13
En bref...

  • Une définition commune
  • Métaphores que l'on peut interpréter
    de façon très différentes (art, guilde
    etc...)

  • Manifeste au points flous, lié au
    manifeste agile
La marque "Agile"
oublie les pratiques
    techniques.
• Scrum...
• ... Sans itérations...
• ... Sans pratiques techniques...
• ... Sans rétrospectives...
• ...


                               http://www.martinfowler.com/bliki/FlaccidScrum.html
Coding

         Process
Coding   Process
Respect
 ingénieur logiciel

        !=

     Respect
ingénieur structure
Savoir dire Non !
Apprentissage
© 2004 Warner Bros. Entertainment Inc. All Rights Reserved.
Musique

                                                                                  Musicien                            Professeur de
                                   Musiciens d’élite
                                                                               professionnels                           musique
    5 ans                             2-3 h / Semaine                          2-3 h / Semaine 2-3 h / Semaine
    8 ans                              6 h / Semaine                           2-3 h / Semaine 2-3 h / Semaine
    12 ans                             8 h / Semaine                            6 h / Semaine   4 h / Semaine
    16 ans                            22 h / Semaine                           11 h / Semaine 7 h / Semaine
    20 ans                             30+ / Semaine                           24 h / Semaine 12 h / Semaine
  Nb heures
 Accumulées :                          10 000 heures                              8 000 heures                         4 000 heures


The Role of Deliberate Practice in the Acquisition of Expert Performance K. Anders Ericsson, Ralf Th. Krampe, and Clemens Tesch-Romer; 1993
En résumé
• Un mouvement.
• Agile *avec* les pratiques techniques
• Respect du rôle de l'ingénieur
• Apprentissage / Mentoring
En pratique...
AGILE
                        TDD


SOLID           CRAFT     Entrainement




  Déploiement
                         YAGNI
    Continu
Agile...

XP   Scrum      Kanban
SOLID
5 Principes
 Single Responsability
 Open Closed
 Liskov Substitution
 Interface Segregation
 Dependency Inversion



                         http://blog.xebia.fr/2011/07/18/les-principes-solid/
http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/




                    Jenga
Ecrire du logiciel ce n'est pas une partie de
http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/




                       faire.
  Ce n'est pas parce qu'on peut le faire qu'il faut le
http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/




  Une opération à coeur ouvert n'est pas
 nécessaire lorsqu'on enfile un vêtement.
http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/




                                                                                             Ca cancane comme un canard, ressemble à un canard mais à
                                                                                             besoin de pile. Vous avez surement la mauvaise abstraction.
http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/




             Où voulez vous brancher cela ?
http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/




                      électrique dans le mur ?
      Est ce que vous souderiez directement un branchement
YAGNI

You Aren't Going to Need It !
Exercice
Q: Vous avez un jar exécutable qui exécute du
  code que l'on veut rendre exécutable
  régulièrement. L'accès au logs passés est
  important. Un novice doit pouvoir les
  visualiser.


1: Cron Job
2: Talend
3: Quartz Scheduler
4: Je code tout, Threads & Future FTW
5: Jenkins
red
                 switch !




           TDD
refactor   flow   green
TDD

      C'est difficile.

On y arrive, ça s'apprends.

Ils n'en reviennent jamais.
Déploiement Continu

 Build < 2-3 minutes.
 Dépendance binaire
 Test unitaire + intégration
 Déploiement de l'application complète
 Dés la 1ère itération (sans surcout)
http://happyprog.com/pairhero
S'entrainer !

Kata (seul)
Coding Dojo (en groupe)
Code Retreat (tout plein)
Typical CodeRetreat Planning

10h00                                         14h00
        Code Session 1     Code Session 4

        Retrospective 1    Retrospective 4
11h00                                         15h00
        Code Session 2     Code Session 5

        Retrospective 2    Retrospective 5
12h00                                         16h00
        Code Session 3     Code Session 6

        Retrospective 3
                                              16h40
13h00                     Day Retrospective
                                              ...
            Lunch

14h00
Global Day of Code Retreat




   december 3rd 2011
Learn
   New
Languages
Et à l'horizon...

• Domain Driven Design
• Clean Code...
• TDD ++ (practice, practice practice !)
• 1 langage par an
raising the bar
?

Software Craftsmanship: En pratique