Contexte

En 2016, je fais mes premiers pas dans le supérieur et pas des moindres, car je rentre en faculté de médecine, connue en France pour l'hécatombe des étudiants que représente sa première année sélective. En effet, cette première année, connue à l'époque sous le nom de PACES (Première Année Commue aux Études de Santé), sanctionnait chaque semestre par un examen qui classait les étudiants. Pour faire simple, c'est un concours, c'est une course.

Je n'ai jamais été un élève qui rentrait dans le "moule académique" bien à la française, en effet, je détestais réviser chez moi des choses qui me semblaient inintéressantes et préférais me cultiver moi-même dans les domaines qui me passionnaient (et je dois dire que c'est toujours le cas aujourd'hui). Parmi ces domaines, je m'intéresse à la programmation, et j'avais déjà pour projet de l'allier à la médecine dans ma carrière au lieu de pratiquer une médecine actuelle que je ne considère plus dans l'ère du temps.

Conception

Alors, pourquoi attendre ? Je voulais déjà créer un truc qui allait me simplifier la vie dans mes révisions. Quitte à prendre un peu de temps à le concevoir, il faut le voir comme un investissement !

Utilisant beaucoup Discord depuis quelques années, et ayant été administrateur d'un serveur de carabins (étudiants en médecine), je me suis donc dit que c'était la plateforme de choix car elle pourrait bénéficier à tout le monde, en plus de permettre quelques fonctionnalités telles qu'un système de classement, par exemple. Sans plus attendre, après être rentré d'un cours où j'étais percuté par l'idée alors que j'étais en train de somnoler, je me suis attelé à la création d'un bot Discord qui sera écrit en Python avec le wrapper d'API discord.py (version async0.10.x à l'époque).

Dans la journée-même, le bot était déjà fonctionnel avec une cinquantaine de lignes de code. Il devait à la base présenter des QCM (questionnaire à choix multiple), et l'utilisateur devait rentrer sa réponse, tout simplement.

Un exemple d'interaction

Pour la base de données, j'ai opté pour un système de fichiers JSON car ils sont facilement manipulables, y compris par mes amis qui n'ont pas de rapport particulier avec la programmation.

Les JSON étaient synchronisés dans un dossier Nextcloud partagé entre plusieurs utilisateurs, et lus dans le serveur central par le bot. En quelques mois, à plusieurs et sans trop se fatiguer, nous avions complété la base de données avec plusieurs années d'annales provenant de la faculté et de divers instituts privés de préparation :

La base de données... ULTIME !

Comme vous pouvez le constater dans le screen, bien qu'anecdotique dans le cadre de ce billet, le bot était aussi devenu un couteau-suisse. Il proposait :

  • Une radio musicale Discord
  • Un système automatisé de rôle
  • Un ranking global de points
  • Des mini-jeux (pendu, roulette russe, etc.)

Le bot était littéralement devenu l'équivalent d'une école de préparation payante à lui tout seul. De plus, j'ai conçu un système de classement basique pour faire un ensemble de QCM et donner/retirer les points en fonction de qui répond en premier et juste :

Un système de classement basique pour s'amuser à plusieurs

On peut même dire que le bot permet de s'amuser à plusieurs en révisant ! Je trouve que ça donnait de la compétition saine et amusante, avec l'occasion de discuter ensemble de certains points obscurs des cours...

Il était possible de sélectionner un échantillon de N questions, et de sélectionner la source de cet échantillon selon :

  • L'année : pour une meilleure pertinence.
  • La source : faculté, institut X, institut Y, etc.
  • L'UE : unité d'enseignement (pharmacologie, anatomie, etc.).

Bien sûr le bot était conçu pour gérer pas mal de situations histoire de rendre son utilisation aussi intuitive que possible, par exemple, un timeout adaptif selon la nature de la question (QCM ou QCD).

  • Pour une disponibilité maximale, le bot fut hébergé sur un petit VPS chez Scaleway.
  • Pour faciliter la mise en production parallèle au développement, j'utilisais Docker comme à mon habitude.
C'est cool tout ça, je veux la même chose !

Do it yourself!

Je ne partage volontairement pas le code car il est devenu obsolète (discord.py ayant beaucoup évolué). Mais si j'ai pu donner une inspiration pour reproduire le principe, c'est déjà très bien ! Ce n'est pas compliqué d'implémenter toutes ces fonctionnalités, le plus long par contre est le remplissage de la base de données. J'avais en tête d'utiliser de l'OCR (Optical Character Recognition) pour automatiser la traduction papier vers numérique, mais je n'ai pas eu le temps à l'époque (il fallait réviser, malgré tout...).

Je ne partagerai pas non plus la base de données pour des questions légales (j'ai déjà dû censurer quelques éléments et prendre des exemples montés à l'époque), j'espère que vous le comprendrez. De plus la base de données est propre à chaque ville car bien que le programme soit plus ou moins harmonisé, le contenu des cours peut varier grandement d'une ville à l'autre.

Conclusion

Ce billet est en quelque sorte un hommage à ce bot qui nous a tant servi, et que j'ai pris du plaisir à développer, et qui n'a pas servi qu'à moi-même, loin de là.

Aujourd'hui en France, une plateforme s'est développée et que j'ai utilisée moi-même en tant que tuteur : TutoratSante. Elle propose des fonctions de QCM similaires, bien que ce ne soit pas tout à fait la même chose, mais c'est déjà une avancée majeure. Malgré tout, les instituts de préparation privés ont encore globalement une avance dans ce domaine.

Le bot était un peu le "Robin des Bois" moderne de la PACES, car il bénéficiait à des personnes qui n'avaient pas les moyens pour se payer ces gouffres à argent qui m'inspirent le dégoût. Mais ça, on en parlera peut-être un autre jour.