Mémoriser Python
Mémoriser Python
Je me suis lancé comme défi de mémoriser Python in a Nutshell, un livre de 700 pages qui est une référence synthétique du langage de programmation Python.
Mon objectif était :
- de challenger ma mémoire
- d'aller en profondeur sur le langage
- d'améliorer ma compréhension de l'écosystème
- d'envoyer le signal que je m'engage avec Python (autant à moi qu'au monde)
Mes hypothèses étaient que :
- j'allais prendre plus de plaisir à travailler une fois la référence en tête
- les bénéfices allaient être supérieurs aux efforts requis
- cela allait améliorer ma confiance en moi
Mon processus a consisté à lire sur ordinateur, prendre des notes en split-screen, et créer des cartes de révision pour Anki.
Anki est un outil de mémorisation basée sur le principe de répétition espacée.
L'idée derrière la technique de la révision espacée est que pour mémoriser une information pour toujours, il suffit de la réviser le lendemain, puis trois jours plus tars, une semaine plus tard, un mois plus tard, ... avec des intervalles de plus en plus espacés. La courbe de l'oubli s'atténue à chaque fois que l'on parvient à rappeler l'information.
J'ai mis 3 mois à terminer ce projet en y consacrant en moyenne 2h/jour.
Voici les principales erreurs que j'ai commises.
Erreur #1 : créer des cartes trop théoriques
Les cartes de définitions sont des rabbit holes.
Il est difficile d'arrêter une définition équilibrée : précise et en même temps concise ; naturelle et en même temps exacte sur les termes ; non pédante ; claire ; intuitive ; orale.
Il est possible de simplifier une définition en itérant dessus. Mais même simplifiées, les définitions restent des cartes difficiles à mémoriser par rapport à des cartes "pratiques".
Cela tombe bien : l'aspect pratique est ce qui apporte le plus de valeur.
à droite : version simplifiée après plusieurs itérations
Un développeur lit du code et écrit du code.
Les deux questions les plus importantes sont donc :
- Comment lire truc ? (ex : que renvoi
"abc" + "hello"
?) - Comment exprimer machin ? (ex : comment concaténer
s1
ets2
?)
Toujours avec le cas du starred pattern, voici un exemple de bonne carte :
Cette carte est bonne car :
- la question est concise et tient sur une ligne
- la réponse est directe et tient en quelques mots
- une démonstration est jointe et permet démontrer le résultat rapidement
Takeaways :
- Fait des cartes avec des exemples concrets.
- Sois concis dans les questions et les réponses, élimine chaque mot inutile.
Erreur #2 : créer trop de cartes d'un coup
Au début, je me suis concentré sur la partie facile :
- lire
- prendre des notes
- structurer mes notes en cartes de révision
Puis, après 3 semaines de lecture, j'ai exporté mes cartes dans Anki. Aïe.
Je me suis retrouvé avec 800 éléments à mémoriser. D'un coup.
On peut visualiser le flux de travail de ce projet ainsi :
- lire génère des notes
- les notes génère un travail de formatage
- le formatage génère des cartes ANKI à mémoriser
- ne pas mémoriser crée un embouteillage
En concentrant mon énergie sur lire et en délaissant le travail de mémorisation, j'ai créé un grand stock de cartes à mémoriser. Cela a bloqué mon flux de travail, et je n'ai reçu tardivement le feedback que mes cartes étaient étaient trop compliquées, pas assez éprouvées, et trop nombreuses.
Il s'en est ensuivi un cycle d'un mois dédié à mémoriser, éditer pour simplifier, mettre en pratique pour vérifier, mémoriser, simplifier, mémoriser, simplifier, mémoriser ... Jusqu'à overdose.
Takeaways :
- Mémorise au fil de l'eau.
- La mémorisation n'est pas gratuite. Les cartes de révision encadrent et facilitent le travail de mémorisation, mais cela demande quand même fournir des efforts et du temps. Ne mémorise que l'essentiel. S'il manque une information, tu pourras ajouter une carte plus tard.
Erreur #3 : créer des cartes sur parole
Créer une carte pour un truc que tu n'as pas mis en pratique ne sert à rien.
D'abord parce que l'information ne se fixe pas.
Manipuler un objet permet de créer une connexion avec, de développer une intuition sur son fonctionnement, d'explorer ses fonctionnalités, de se poser des questions. C'est une étape importante du processus d'apprentissage. C'est un lieu commun de le dire, mais je suis tombé dans le piège de dévorer la lecture sans m'arrêter pour pratiquer. Cela donne l'impression d'aller plus vite et de savoir. Mais en fait l'information ne se fixe pas. Et infine, je ne sais pas faire + de choses.
Ensuite, parce que l'information n'est pas fiable.
À plusieurs reprises, j'ai trouvé des informations inexactes dans le livre. Je me suis mis à douter de mes cartes. Et j'ai fini par retravailler toutes celles que j'avais créées sans les avoir vérifiées.
Note que les définitions ne sont pas vérifiables. C'est un problème. Et c'est un argument de plus pour aller vers des cartes pratiques, orientées action. Idem, les affirmations sur le comportement interne sont difficilement vérifiables - même si tu peux regarder le code source de CPython.
Takeaways :
- Lire sans créer ou pratiquer est du gâchis.
- Fait de manipuler et jouer avec la notion une priorité.
- Ne mémorise pas une information que tu n'as pas vérifiée.
Les cartes servent à mémoriser ce que tu as appris, pas à apprendre en premier lieu.
Erreur #4 : créer des cartes exotiques
Certains modules et certaines méthodes sont exotiques.
Il est intéressant de savoir qu'ils existent, noter dans quel contexte ils ont été introduits et quels problèmes ils résolvent. Il peut être intéressant les manipuler et noter comment les utiliser sur des cas courants (on parle parfois de recipes), mais c'est tout.
Il n'est pas pertinent de mémoriser toutes les utilisations.
Une solution est de mémoriser just in time plutôt que just in case :
- prendre des notes
- les tester, les vérifier
- créer des cheat sheets autour de chaque concept
- ne créer des cartes que pour les connaissances que tu viens chercher
Takeaways :
- You ain't gonna need it
- Ne crée pas plus de 3 cartes sur un module exotique
Conclusion
En lisant Python in a Nutshell, j'ai beaucoup appris sur le langage, sa syntaxe, et le contenu de la bibliothèque standard. Après avoir passé +200 heures à l'étudier, je me sens plus proche du langage, plus connecté à lui. Je connais mieux ces contours et ce qu'il ne contient pas, ses limites.
En parallèle de cette lecture, j'ai écouté plusieurs podcasts de Guido Van Rossum, le créateur du langage. C'est aussi une écoute que je recommande pour comprendre la philosophie du langage est ses grandes tendances d'évolution.
Anki est un outil formidable. Cela fait partie des outils que j'aurais aimé connaître durant ma scolarité. C'est le buddy parfait pour mémoriser de la poésie, des formules de mathématiques, du vocabulaire d'Anglais.
Une remarque ? Dis-moi 💙