Software Craftsmanship
                  en pratique




      Jean-Laurent de Morlhon - 20 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
Jean-Laurent de Morlhon




              http://serpodile.com
Jean-Laurent de Morlhon




             Développeur
Master Plan


1) Qu'est ce que le Software Craftsmanship ?

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

              "Craftsmanship            Manifeste
                 over crap"           Craftsmanship




 1999             2008             2009                    2010         2011



                                                 Livre          London
                         Livre
                                             Apprencticeship   Software
                      Clean Code                             Craftsmanship
                                                Patterns
                                                               Comunity
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/
16
En bref...

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

• Manifeste au points flous, lié au manifeste
  agile
La marque "Agile"
oublie les pratiques
    techniques.
Scrum en 2011...
• Avec des post-its et des stand-
  ups
• ... Sans itérations...
• ... Sans rétrospectives...
• ... Sans pratiques techniques...
• ...                  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
2
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 démarre
  du code que l'on veut lancer
  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: Jenkins
5: Je code tout, Threads & Future FTW !
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)
Planning de CodeRetreat usuel

 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




    3 décembre 2011
Pratiquez
de nouveaux
  langages
Et à l'horizon...

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

Software Craftsmanship : en Pratique - AgileTour