Skip to content

25 avril 2017

Emmanuel Gaillot edited this page Apr 25, 2017 · 1 revision

Participants

Les nouvelles depuis la dernière fois

  • Christophe a travaillé sur l'exercice de Word Wrap
  • Il a pratiquement terminé de lire Practical Oriented Object Design in Ruby de Sandi Metz. Il retient…
    • Focaliser sur les messages entre les classes, plutôt que sur les classes elles-mêmes
    • Limiter les dépendances entre objets
  • Il a hâte de pratiquer ce qu'il a appris :)
  • Gêné pour appliquer ça dans Rails

Les envies du jour

  • « Modéliser la réalité » :) - faire un exercice avec une composante design
  • Peut-être lire du code ? Et voir ce qu'on peut faire pour le nettoyer ?
  • … En ruby ?

Ce qui s'est passé

On regarde le jeu de la Bataille.

Le plan

  • Christophe doit implémenter une fonction resultatBataille qui prend deux listes de cartes (une pour chaque joueur) et retourne celle qui gagne
  • séquences de 15 minutes. Christophe explique ce qu'il fait. Il peut arrêter quand il se sent bloqué
  • au bout des 15 minutes, Emmanuel commente ce qui s'est passé
  • Deuxième temps : regarder le code d'un jeu de bataille déjà existant, le commenter, et proposer une pull request

L'exécution

  • Première séquence

    • Christophe écrit un test : BatailleSpec
      • des hésitations sur l'utilisation de RSpec
      • Rappel : commencer par obtenir une barre rouge, puis une barre verte
    • Christophe change de stratégie et écrit un deuxième test : CardSpec
  • Premier débrief

    • Ne pas s'énerver sur « je ne me souviens plus », vérifier à la place
    • Accepter que le « setup » est une part significative du travail du programmeur
    • Un seul problème à la fois
    • Approche Top-Down vs. Bottom-up
  • Deuxième séquence

    • Transformer la classe Bataille en module
    • Defake : Utiliser des « cartes » plutôt que des doubles de cartes, et passer une liste plutôt qu'une seule carte (deux problèmes à la fois ?)… et utiliser la comparaison
    • On tape dans le dur : comment comparer '9' et 'J' ?
  • Deuxième débrief

    • Discussion sur la loi de Demeter. Est-ce à Bataille, ou à l'appelant de Bataille (en l'occurrence, le test), de traduire '9' et 'J' de manière utilisable par Bataille ?
  • Troisième séquence

  • Main à deux cartes (sans bataille)

  • Discussion

    • importance de séparer les problèmes : discernement entre gestion d'un tour (modification des deux tas de cartes) et gestion de l'arrêt de la partie
  • Leçons apprise

    • piège de vouloir « tout modéliser »
    • difficulté à savoir ce qu'est la responsabilité d'un bloc / méthode / classe… et du coup difficulté à détecter les violations de SRP
  • … Puis on lit du code. Ce qu'on en retient :

    • des variables globales qui auraient dû être des attributs de classe (ex $simulation)
    • volonté de reproduire fidèlement le réel… même si on n'en a pas besoin (ex deal_cards : une à toi, une à moi, etc.)
    • « je ne suis pas le seul à galérer » :)
    • de la duplication de code
    • des méthodes longues
    • mélange de plusieurs niveaux d'abstraction dans une même méthode
    • … et du potentiel pour plein d'exercices !

Ce qu'on retient de la session

  • Démarrage difficile, il a fallu (se) dérouiller
  • C'est gratifiant d'avoir trouvé rapidement la solution de récursion… et surprenant de voir que ça marchait tout de suite
  • Ça demande beaucoup d'effort d'écrire du code : peur de ne pas avoir « la » bonne solution (même si on sait qu'il y en a plusieurs)
  • Attention à ne modéliser que ce dont on a besoin… et en même temps, discriminer ce dont on a besoin de ce dont on n'a pas besoin, ce n'est pas évident.
  • Plus difficile d'être actif pendant la lecture de code - et pas forcément l'impression d'apprendre beaucoup

D'ici la prochaine fois, on voudrait / pourrait…

  • Continuer le code qu'on a commencé à écrire :

    • introduire la notion (méthode ? classe ?) de Tour
    • introduire la notion de StrategieDeRangement
    • faire une expérience statistique : sur 100 parties, quelle stratégie de rangement marche le mieux ?
  • Travailler sur le code qu'on a commencé à lire :

    • pouvoir jouer avec plus de deux joueurs
    • gérer l'affichage des messages dans un logger
  • Revenir sur la Fourmi De Langton

Clone this wiki locally