-
Notifications
You must be signed in to change notification settings - Fork 2
25 avril 2017
Emmanuel Gaillot edited this page Apr 25, 2017
·
1 revision
- 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
- « 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 ?
On regarde le jeu de la Bataille.
- 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
-
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
- Christophe écrit un test :
-
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'
?
- Transformer la classe
-
Deuxième débrief
- Discussion sur la loi de Demeter. Est-ce à
Bataille
, ou à l'appelant deBataille
(en l'occurrence, le test), de traduire'9'
et'J'
de manière utilisable parBataille
?
- Discussion sur la loi de Demeter. Est-ce à
-
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 !
- des variables globales qui auraient dû être des attributs de classe (ex
- 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
-
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 ?
- introduire la notion (méthode ? classe ?) de
-
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