Code Retreat 9 Novembre 2024


  • Sujet : Jeu de la vie
  • Meetup
  • 33 inscrit·e·s / 27 présent·e·s

Introduction

  • contraintes permanentes :
    • TDD
    • pair programming

Session 1 : Decouverte

  • Première fois pour le jeu de la vie, il est pas simple a appréhender
  • Illustration des règles pas claires => sont aller voir ailleurs (Wikipedia notamment)
  • Commencer par une grille c’est complique (6 groupes) => Il faut trouver les bonnes positions pour faire un cas a la fois moitie
  • Commencer par une cellule ça biaise ton design (i.e. design centre sur une cellule alors que l’énoncé le centre sur la grille)
  • Design avec des non cellules => plutôt qu’un état on a une position
  • Java est très verbeux pour démarrer du TDD rapidement => seulement 1.5-2 tests =>
    • discussion sur les règles
    • discussion de la TODO
    • discussion sur comment représenter le voisinage.
  • Découverte des tests paramétrés pour gérer le nombre de voisins
  • Représentation d’un etat:
    • Boolean
    • Enum
    • Union Type
  • Pas d’utilisation de la TODO list
  • cell based peut biaiser l’implémentation (bool / enum)
  • 1 groupe qui n’a modélisé que les cellules vivantes

Session 2 : Small method + Indentation once (+ Ping Pong)

  • 3 groupes satisfait de son iteration
  • chaud de faire de l’outside in
  • trop de question philosophique sur la notion de grille cellule etc
  • une baby step mega longue mais on s’en sort. C’etait un papy step. Idem pour un autre groupe papy step.
  • Hardcoder le resultat attendu permet d’iterer sur cette ligne la et avancer.
  • un groupe: un qui etait un peu perdu et a laisser le binome avancer: difficulte du choix de scenario, quoi tester, voir ce qu’il avait en tete
  • ping pong: Colin adore torturer Batipste mais il le vit bien
  • ping pong: parfois un peu challengeant de le recevoir
  • contraintes pas trop dur a respecter, a l’aise

Session 3 : Primitive Obsession + Blind navigator (+ Fluent API)

  • Qaund on tarvaille avec les gens avec lesquels on pair c’est plus simple.
  • Quelques cas de triche ou on regarde l’ecran
  • On communique avec des dessins/schema
  • Dialogue sur une orientation et pas sur l’implementation
  • Le navigateur demande souvent l’etat du projet compile tests passent
  • Fluent API => peu de changement vu que le sope est reste simple et le nommage precedent etait deja bon
  • La contrainte vecu en tant que navigateur est tres agreable on a le temps de se poser des questions
  • Peut etre rappeller le cycle TDD pour les non inities

Session 4 : TCR (+ no if statement)

  • La vitesse de frappe n’est pas la clef
  • Certains groupes ont plus jeter du code que d’en ecrire
  • Baby baby step: preparer le code pour qu’il puisse accueillir le prochain test -> boucle de 1 min
  • Inside out plutot que Outside in, impression que c’est plus facile en inside out en tcr
  • Pause d’une iteration pour permet d’implementer la prochaine iteration. Reflechir dans quelle direction on va aller
  • Discuter ensemble pour se mettre d,accord avant de lancer le chrono.
  • Beaucoup plus utilise la phase de refacto en TCR que dans les autres sessions
  • contrainte no if statement: pattern matching et etonnament trop facile en peu de temps
  • pseudo pattern matching en TS, c’etait rigolo
  • Impression que pour commit en 2 minutes, il faut discuter 7 minutes? Depend des groupes, pas forcement 7 minutes
  • Discuter va plus vite que de coder.
  • Bien modeliser le probleme avant de coder.
  • Sur un probleme complexe, parfois faut d’abord essayer d’implementer des trucs et voir ce qui se passe car difficile a anticiper.
  • Simple de discuter sur les deux prochaines iterations de 5 minutes que dans la vraie vie sur 6 mois
  • Commencer par la grid: on est aller droit dans le mur meme avec 5 minutes, vaut mieux reflechir avant ou changer de strategie
  • découpage des phases :
    • tests avec implementation hard coded implementation
    • vrai implementation
    • refactoring / nommage
  • pousse à l’action -> besoin de discussion

Session 5 : Evil TDD (+ max 1 parameters)

  • Definir une API malefique c’est drole mais quand il faut implementer les regles c’est extremement difficile
  • Liste de tous les cas un par un dans l’implementation => Possible de le contrer avec de la randomisation => Test de propriete propose par les framework de tests.
  • Difficile de devenir malefique, quelques pistes donnees par les organisateurs.
  • Ca permet aussi de decouvrir cerraines capacites de languages (support des emojis)
  • Curryfication pour contrer le max 1 parametre, max 1 parametre c’est une contrainte qui reduit evil
  • On se rend compte qu’il faut etre pragmatique a base de copier coller.
  • chaque pair a tenté de pousser un design => difficile à réconcilier
  • introduire un random dans les tests (PBT)

Retro globale

  • Varier les languages et les approches pour resoudre le kata

  • Rester sur le meme exercice permet de tester differentes approches sans revoir les regles et de se focus sur l’implementation

  • Differentes approches certaines sont plus facile a aborder => Inside out plus simple a apprehender

  • Varier les binomes permet de decouvrir et redecouvrir les pratiqes TDD.

  • Outside in peut etre simple a apprehender si on abstrait l’aspect matrice pour se concentrer sur une liste.

  • Le navigateur doit bien connaitre les regles metiers => utilisation de simulateur pour verifier nos cas de tests

  • Malgre l’habitude du kata on arrive a s’amuser toute la journee

  • Combinaisons sont pas toutes pertinantes

  • Un event IRL c’est quand meme la convivialite

  • Contraintes preferees:

    • blind navigator => force a visualiser, a mettre avec ping pong
  • Contraintes moins plebisites:

    • Evil parce que difficile a se mettre en mode malefique => faire en mob avec un evil cache
    • TCR => Empeche de creuser en profondeur un sujet
    • 4 lignes / méthodes
  • Deroulement de la journee:

    • Accueil en bas c’etait top
    • Changement d’horaire
    • Rappel de cannon TDD bien apprecie

ROTI

  • 2/5 : 1 => pas de nouvelles approches car fait souvent
  • 3/5 : 2 => pas de nouvelles approches car fait souvent
  • 4/5 : 14
  • 5/5 : 8

Session 6 : mob + calisthenics (+ immutable)

  • Inside out on a fait une methode qui ne sert a rien. Ex: methode isAlive sans avoir le vrai besoin de le faire
  • Outside in c’est plutot pour des archi plus grosse, cas reel.
  • En mob on passe pour du evil aux yeux des autres sans le faire volontairement.
  • Mob a 8 qui ne se connaissent pas c’est trop. On dirait du pair qui regarde, prend pas assez la parole et trop passif.
  • Navigator qui lead peut ecraser les personnes plus timides.
  • Contraintes pas forcement regarder attentivement.
  • Session trop courte