Jeudi 7 et Vendredi 8 décembre derniers, nous avons eu le plaisir d’assister à NewCrafts Bordeaux. Première édition de son homologue Parisien, cette conférence se veut centrée sur la mouvance dite du “Software Craftmanship”. Retour sur ces deux journées.
Jour 1
La première journée de la conférence proposait une succession de talks intéressants et de très bonne qualité. Les sujets abordés entre chaque session étaient très variés, mais suivaient le même thème : comment faire des logiciels de meilleure qualité ?
La journée a commencé par une conférence de Marine Campedel concernant la façon dont notre cerveau fonctionne. On retiendra trois spécificités :
- Brain Plasticity : le cerveau passe son temps à se reconfigurer en fonction de nos pensés, notre environnement…
- Know each other to work together : on a eu l’occasion de parler de plusieurs mythes concernant le cerveau, les comportements hommes/femmes, etc. Encore une fois, on peut se conditionner par rapport à notre environnement donc il est important de rester ouvert d’esprit !
- Progress humanity : Il faut être des “savanturier” ! Rechercher ensemble et dans tous les domaines pour faire face aux nouveaux challenges !
Le second talk concernait le langage Pharo, par Christophe Demarey, un des contributeurs. Le langage est basé sur Smalltalk et dispose d’un IDE très puissant lui-même codé en Pharo. On peut tout modifier dans Pharo et ajouter des comportements à notre IDE ainsi qu’aux objets de base. De nombreux cas d’usage existent pour Pharo, aussi bien d’un point de vue web que pour de la représentation graphique.
Nous avons ensuite assisté à une présentation du “Principe de substitution de Liskov” (le L dans SOLID en programmation orientée objet) par Romeu Moura. La définition de wikipédia de ce principe ne doit certainement pas vous parler au premier abord, le speaker nous l’a résumé bien plus facilement : “on peut échanger une implémentation d’une interface par une autre implémentation de la même interface sans tout casser”. Sous forme de Type Driven Development, on a joué avec des types Java et des signatures de méthodes pour appréhender les différentes questions induites comme le principe de covariance et contravariance ou encore la problématique de gestion des dépendances temporelles. On retiendra qu’il faut arrêter de penser à notre code en tant qu’entité mais qu’il faut le voir comme un système à part entière !
Après un sandwich et des cannelés bien mérités, place à l’event sourcing du front au back par Nicole Rauch & Arnaud Bailly. Ce talk nous expliquait comment faire fonctionner un jeu web avec une architecture évènementielle composée d’un front React avec Redux et d’un back en Haskell. La problématique du langage commun entre le front et le back a été abordée, une des solutions évoquées qui nous a marqué concernait l’utilisation de contrats d’API (“consumer driven contracts”). Ainsi on réduit les problèmes de changement de specs et de mock approximatif entre les équipes, et on permet aux deux équipes de commencer à travailler sans que l’une dépende de l’autre !
Un peu de Rust avec Clément Delafargue pour continuer. Dans ce talk on appréhende les spécificités du langage. Pour lui Rust est un langage impératif, de haut niveau et disposant de fonctionnalités de langage évolué, tout en ayant une gestion de la mémoire bas niveau. C’est un langage créé pour des besoins systèmes, sans “race conditions”, avec des types algébriques ou encore du pattern matching… Une partie intéressante du talk concerne la façon dont il doit gérer l’utilisation d’un nouveau langage par les employés de Clever Cloud en tant que CTO. La société étant polyglotte, il est tout de même nécessaire de garder une cohérence. Pour ce faire ils sont notamment en cours de rédaction de guidelines pour Rust.
Un talk sur comment refactorer un code legacy par Franziska Sauerwein. Plusieurs informations clés pendant ce talk:
- Tout d’abord il ne faut pas se focaliser sur la responsabilité du code legacy, cela n’apporte que peu et instaure un climat négatif dans l’équipe.
- La dette technique peut venir des deadlines, du manque de compétence ou encore de demandes peu claires.
- Il faut communiquer ! De façon orale mais aussi écrite via documentation (même si le code fait toujours foi).
On a aussi eu un focus sur comment refacto. Il y a de nombreux pré-requis : de la documentation, des tests, connaître son IDE et une personne ayant une vision produit (pour permettre de valider). On peut ensuite commencer le refacto, le but étant de ne pas changer le comportement observable.
Le dernier talk de la première journée était orienté programmation fonctionnelle par Nicole Rauch & Michael Sperber. Ce talk utilisait le langage Idris (basé sur Haskell) pour faire de la programmation uniquement via des types. Un peu complexe pour des néophytes en Haskell mais très puissant car on peut générer du code automatiquement en spécifiant (ou en créant) les types d’entrée ou de sortie.
Une seconde journée surprenante
La seconde journée était organisée au format “open space”. Le principe est de laisser l’ensemble des participants créer leur programme pour la journée. Un board papier représentant les différents emplacements des conférences et les créneaux temporels disponibles a été alimenté tout au long de la journée par les participants souhaitant aborder un sujet. Avec pour seul mot d’ordre :
- Whoever comes, is the right people.
- Whenever it starts, is the right time.
- Wherever it is, is the right place.
- Whatever happens, is the only thing that could have. Be prepared to be surprised!
- When it's over, it's over.
Ce format bien que déroutant au premier abord était particulièrement enrichissant. Il offre la possibilité de papillonner entre les différentes thématiques et de discuter des divers sujets. Le format est très libre et on peut proposer à la volée de nouveaux sujets. Ce fut par exemple le cas où lors d’une discussion sur la bonne manière de commencer un projet, le pair programming fut mentionné et où l’on a demandé un REX sur la façon dont cela avait été mis en place dans une équipe.
Nous avons ainsi eu l’occasion de participer à des conversations et des TPs tels que :
- Qu’est ce qu’une monade en programmation fonctionnelle ?
- Comment commencer un projet ?
- Hand’s on sur le l'écosystème Pharo avec l’un de ses concepteurs.
- Initiation au TDD (Test Driven Development).
- Initiation au langage Rust.
- La collaboration visuelle illustrée par l’atelier : dessinez “comment toaster une tranche de pain”.
- Discussion autour du pair programming : organisation, apport à l'équipe.
- Échange autour d’une initiative intéressante : la création de “l’ordre des développeurs”.
En parallèle, se tenaient des ateliers plus longs (une demi-journée) pour approfondir des sujets précis. Il était proposé :
- Un atelier d’Event Storming : un Brain Storming orienté DDD (Domain Driven Design).
- Une variante du Kebab kata où l’intervenant joue le rôle d’un client avec des défauts (mais bien intentionné), dans le but de montrer les problèmes de systémique qui apparaissent à la fin de plusieurs itérations.
Nous avons cependant décidé de ne pas y aller pour voir un maximum de sujet.
En bref
Cette première édition de NewCrafts Bordeaux est un véritable succès. Nous avons eu l’occasion d’échanger sur de nombreux sujets avec bienveillance et bonne humeur, de participer aux débats et de découvrir de nouvelles pratiques pour travailler plus efficacement ou différemment.
Un grand bravo aux organisateurs et à l’année prochaine !
Théo, Raphaël et Florian