Uploaded avatar of angelikatyborska

Analyseurs, representers et programmes : quoi de neuf dans Exercism ?

@angelikatyborska
il y a Environ 5 ans
Vidéo

Début septembre 2021, Exercism v3 a enfin vu le jour. Angelika Tyborska fait partie des mainteneurs clés qui nous ont aidés à passer la ligne d'arrivée. En plus d'être la cocréatrice des exercices d'apprentissage et du programme Elixir, Angelika a été une voix essentielle tout au long du développement de la v3, apportant des idées et un regard éclairé pendant tout le processus de construction. C'est une contributrice essentielle d'Exercism.

Dans cette présentation vidéo, Angelika nous explique quels problèmes la v3 était censée résoudre, quelques-unes des nouveautés majeures de la plateforme, et comment tout s'articule, en explorant les analyseurs, les representer et les nouveaux exercices d'apprentissage.

Transcription

L'historique d'Exercism

Exercism existe depuis un moment. Il a été créé en 2013 par Katrina Owen comme outil pour ses apprenants. En v1, ce n'était qu'une collection d'exercices d'entraînement intéressants. En v2, c'est devenu une plateforme gratuite de mentorat de code.

v3 🚀 01.09.2021

Le 1er septembre, la version 3 d'Exercism est sortie.

Dans cette vidéo, je vais te présenter les changements de la v3, t'expliquer pourquoi ils ont été faits, et comment ils vont améliorer ton expérience sur Exercism.

À propos de moi

C'est moi [photo affichée à 0:38]. Je m'appelle Angelika. Avec mon co-mainteneur Tim, nous avons développé l'outillage et plus de 30 exercices d'apprentissage pour le parcours Elixir d'Exercism v3. Je pense que dans sa nouvelle forme, Exercism a le potentiel de devenir le meilleur outil pour apprendre de nouveaux langages de programmation.

Quoi de neuf dans la v3 ?

Quoi de neuf dans Exercism v3 ? Réponse courte : beaucoup de choses.

Tous les changements majeurs introduits dans la v3 visent à traiter les plus gros problèmes que les gens rencontraient avec la v2.

Les problèmes de la v2

La v3 s'attaque à trois problèmes principaux.

Un : une installation initiale difficile. Deux : pratiquer le code sans apprendre. Trois : un temps de réponse des mentors trop long.

Problème 1. Une installation initiale difficile

Problème numéro un : une installation initiale difficile. Pour commencer avec Exercism, tu dois installer l'Exercism CLI, le langage de programmation que tu veux essayer, et il faut être à l'aise dans le terminal. Tu dois configurer ton éditeur pour la coloration syntaxique du nouveau langage, et ainsi de suite. Pour les développeurs expérimentés, toute cette installation est une perte de temps pénible. Mais pour les débutants, elle peut être un obstacle impossible à franchir.

La solution : permettre aux gens de coder dans le navigateur. Aucune installation initiale nécessaire.

Pour rendre cela possible, Exercism dispose maintenant d'un éditeur en ligne, et chaque langage de programmation a son propre exécuteur de tests dédié à l'exécution des tests des exercices Exercism.

L'éditeur en ligne

Voici l'éditeur en ligne [capture d'écran affichée à 2:25]. Il a deux panneaux, le code source à gauche et les instructions ainsi que la suite de tests à droite.

Il n'a pas de fonctionnalités sophistiquées, car son but n'est pas de remplacer tes outils préférés. Son but est de te permettre de repousser l'installation de tous les outils et dépendances nécessaires jusqu'à ce que tu sois plus à l'aise avec le nouveau langage de programmation et que tu saches si tu veux continuer à travailler avec lui.

L'éditeur en ligne est entièrement facultatif. Tu peux continuer à utiliser la CLI et travailler avec tes outils préférés sur ton propre ordinateur.

Les exécuteurs de tests

Pour que l'éditeur en ligne soit utilisable, il faut un moyen d'exécuter les tests sur la solution que tu écris dans le navigateur. C'est le rôle de l'exécuteur de tests.

Chaque langage sur Exercism a son propre exécuteur de tests. L'exécuteur de tests est chargé de rapporter les résultats des tests, mais ce n'est pas tout. Il doit aussi extraire le corps du test pour que tu saches quel code est exécuté et que tu puisses interpréter le message d'échec, mais aussi capturer la sortie du test pour que tu puisses déboguer ton code dans le navigateur avec puts, print, console.log ou toute autre fonction d'affichage proposée par ton langage.

Les exécuteurs de tests sont essentiels pour résoudre les exercices dans le navigateur, mais ils seront aussi utilisés pour les solutions soumises via la CLI. Quand tu parcours les solutions de la communauté d'un exercice donné, ou quand tu mentors un apprenant, tu peux voir si la solution passe les tests sans avoir à la télécharger et à l'exécuter en local.

Problème 2. Pratiquer le code sans apprendre

Problème numéro deux : Exercism est une plateforme pour pratiquer le code, mais elle n'offrait aucune ressource pour apprendre un langage donné depuis zéro. Il fallait d'abord le faire ailleurs.

Les exercices sur Exercism étaient conçus pour être intéressants et stimulants, mais parfois même les plus faciles sont trop difficiles pour servir de point d'entrée à un nouveau langage de programmation. C'est particulièrement vrai quand on essaie d'apprendre un langage avec une syntaxe complètement différente, ou même qui utilise un autre paradigme de programmation.

La solution : proposer l'apprentissage en parallèle de la pratique.

Avec l'ajout du programme et des exercices d'apprentissage, Exercism est maintenant devenu un excellent outil pour se plonger directement dans un nouveau langage de programmation.

Le programme

Qu'est-ce qu'un programme ? Un programme est un arbre de concepts qui constituent chaque langage de programmation. Le programme est propre à chaque parcours sur Exercism, car chaque langage de programmation est différent et possède des concepts différents.

Les concepts dépendent les uns des autres, formant ainsi diverses branches de l'arbre. Tu dois apprendre le concept précédent de la branche pour déverrouiller le concept suivant.

Par exemple, voici le début du programme Elixir [capture d'écran affichée à 5:10]. Il commence par un concept appelé « basics », qui couvre : comment définir un module, comment définir une fonction nommée, et où trouver la documentation de la bibliothèque standard. Ces connaissances sont nécessaires pour chaque exercice Exercism. Tu dois apprendre « basics » pour déverrouiller n'importe quel autre concept. Tu peux apprendre par exemple les booléens, et une fois que tu connais les booléens, tu peux apprendre l'expression cond, et ainsi de suite.

Pour te donner une idée, voici le programme complet d'Elixir [capture d'écran affichée à 6:16]. Pour l'instant, il contient plus de 50 concepts, mais il doit encore être étendu.

En haut, tu trouveras des concepts comme : les strings, les tableaux, les maps et les tuples. Au milieu : le module Enum, les expressions régulières, les structures et l'écriture de typespecs. Et à la fin : les protocoles, les processus et les tâches.

Les exercices d'apprentissage

Tu apprends les concepts du programme en résolvant des exercices d'apprentissage. Les exercices d'apprentissage sont différents des exercices d'entraînement. Ils ont été conçus pour enseigner des concepts de programmation à des apprenants qui ne connaissent pas du tout le langage en question, mais qui connaissent au moins un autre langage et les concepts de base de la programmation.

Introduction

Chaque exercice d'apprentissage commence par une introduction. L'introduction décrit les informations de base sur les concepts que cet exercice enseigne. La plupart des exercices d'apprentissage enseignent un seul concept, mais il y a des exceptions.

Cet exemple montre une introduction sur les maps d'Elixir [capture d'écran affichée à 7:12]. Elle explique ce que sont les maps, comment définir une map, comment accéder à une valeur dans une map, et ainsi de suite. Elle contient quelques exemples de code pour montrer la nouvelle syntaxe, mais pas trop, pour que tu ne puisses pas simplement copier-coller l'introduction pour résoudre l'exercice.

Instructions

Ensuite viennent les instructions. Les instructions des exercices d'apprentissage sont découpées en petites tâches. Les tâches ont été conçues pour inciter l'apprenant à utiliser les parties les plus essentielles du concept étudié.

Par exemple, l'exercice d'apprentissage qui enseigne les maps demandera à l'apprenant de créer une map, puis de lire une valeur dans une map, puis de modifier une valeur dans une map, puis de récupérer toutes les clés d'une map, et ainsi de suite.

Chaque exercice d'apprentissage a une histoire, mais cette histoire n'est pas si importante. Elle est là pour éviter d'utiliser des valeurs absurdes comme « foo bar » et « 1 2 3 », mais elle ne joue pas un grand rôle dans l'exercice, contrairement aux exercices d'entraînement.

Indices

Chaque tâche est accompagnée d'une petite liste d'indices au cas où l'apprenant serait bloqué. Les indices révèlent souvent quelle fonction précise utiliser dans quelle tâche et te conduisent vers la documentation de cette fonction.

Mettre les concepts en pratique

Mais résoudre un seul exercice d'apprentissage ne suffit pas à vraiment maîtriser le concept. Il faut aussi le mettre en pratique. C'est pourquoi nous avons passé en revue tous les exercices d'entraînement qui existaient déjà en v2 et en avons choisi quelques-uns pour mettre chaque concept en pratique.

Voici à quoi ressemble un concept dans l'arbre [capture d'écran affichée à 9:01]. Les points représentent les exercices. Le premier point, avec l'icône en forme d'ampoule, est un exercice d'apprentissage, et les autres points sont des exercices d'entraînement.

Voici à quoi ressemble un concept après avoir résolu quelques exercices [capture d'écran affichée à 9:37]. Remarque que certains exercices d'entraînement de ce concept sont encore verrouillés, même si l'exercice d'apprentissage est terminé. C'est parce que les exercices d'entraînement ne se limitent pas à la pratique d'un seul concept. Il se peut que tu doives apprendre d'autres concepts, et pas seulement les atomes [concept visible sur la capture d'écran], avant que ces exercices ne soient déverrouillés.

Les exercices d'apprentissage sont censés être triviaux pour les personnes qui maîtrisent déjà un langage donné. Mais pas d'inquiétude, ils sont entièrement facultatifs. Tu peux passer du mode apprentissage au mode entraînement, ce qui te donne un accès immédiat à tous les exercices d'entraînement intéressants sans avoir à parcourir le programme au préalable.

Le programme, un effort colossal

Un détail important que je dois mentionner pour tempérer tes attentes : développer le programme représente un effort ÉNORME. Tous les parcours n'ont pas assez de mainteneurs actifs pour avoir un programme prêt dès maintenant.

Au moment où j'enregistre cette vidéo [4 septembre 2021], les exercices d'apprentissage ne sont disponibles que dans les parcours suivants : Common Lisp, C#, Elm, Elixir, F#, Go, Java, JavaScript, Python, Ruby, Rust et Swift. Le parcours Julia lancera bientôt son programme.

Problème 3. Un temps de réponse des mentors trop long

Problème numéro trois : un temps de réponse des mentors trop long. Tous les parcours n'ont pas assez de mentors. Certains parcours en ont si peu que l'attente pour obtenir un mentorat peut aller jusqu'à un mois. Cela a toujours été extrêmement décourageant pour les apprenants. C'est un problème tellement central pour Exercism qu'il est traité sous trois angles différents.

Le retour automatisé

La solution numéro 1 consiste à fournir un retour automatisé. Une grande partie des retours que les mentors écrivent aux apprenants est répétitive. Pouvoir détecter automatiquement les erreurs courantes et les signaler directement à l'apprenant change la donne.

Recevoir un retour automatisé sur les erreurs courantes permettra à l'apprenant d'améliorer sa solution avant même de demander un mentorat, ce qui facilitera aussi le travail du mentor. Cela évitera aux mentors de devoir mentionner des détails fastidieux comme snake_case contre camelCase, et leur permettra de se concentrer sur l'essence de la solution. Dans certains cas, le retour automatisé suffira à satisfaire l'apprenant, qui ne demandera même pas de mentorat.

Dans la v3, il existe deux types d'outils pour le retour automatisé : les analyseurs et les representer.

Les analyseurs

L'analyseur est un outil qui recherche des caractéristiques précises dans une solution et renvoie à l'apprenant une liste de commentaires prédéfinis sur ce qu'il a trouvé. Lesquelles ? Cela dépend entièrement du langage et de l'exercice en question.

Par exemple, Elixir a une convention de nommage très particulière pour les fonctions et les variables. L'une des vérifications que l'analyseur Elixir effectue pour chaque exercice consiste à examiner tous les noms de variables et de fonctions. S'il trouve un nom qui n'est pas écrit en snake_case, il rappellera la convention de nommage à l'apprenant.

Une autre vérification que l'analyseur Elixir peut faire consiste à détecter l'utilisation d'un module précis. Par exemple, cette vérification [capture d'écran affichée à 13:20] qui interdit l'usage du module Enum est propre à l'exercice d'apprentissage sur la récursion. Utiliser le module Enum va à l'encontre du but de l'exercice d'apprentissage, donc l'analyseur rappellera à l'apprenant de ne pas le faire et d'utiliser la récursion à la place.

Les representer

Le deuxième outil qui nous aidera à fournir un retour automatisé sur Exercism est le representer. Le representer prend la solution et retire les parties non essentielles. Il normalise la mise en forme, supprime les commentaires et la documentation, et remplace les noms de fonctions et de variables par des espaces réservés.

La sortie du representer s'appelle une représentation. Chaque solution soumise à Exercism sera transmise au representer et sa représentation sera stockée sur la plateforme avec la solution.

Les mentors auront alors accès à une interface où ils peuvent parcourir les représentations des solutions soumises. Pour chaque représentation unique, un mentor peut laisser un retour sur cette représentation. Ensuite, ce retour sera présenté à chaque apprenant qui soumet une solution similaire ayant la même représentation. Un mentor n'a à écrire un retour qu'une seule fois, et ce retour peut atteindre toutes les personnes qui en ont besoin.

Les representer eux-mêmes sont déjà implémentés et déployés pour certains langages, mais au moment où j'enregistre cette vidéo [4 septembre 2021], l'interface pour les mentors manque encore sur la plateforme, il faut donc attendre un peu avant que cette fonctionnalité soit pleinement disponible.

Éviter les discussions de mentorat non souhaitées

Une autre solution aux longues files d'attente de mentorat consiste à éviter les discussions de mentorat non souhaitées. En v2, le mentorat était obligatoire pour les exercices principaux. Soumettre un exercice principal signifiait demander automatiquement un mentorat, et tu ne pouvais pas passer à l'exercice principal suivant sans l'approbation d'un mentor. Beaucoup d'apprenants apprenaient le langage en travaillant sur les exercices principaux, ils avaient donc besoin du mentorat pour les guider dans leur apprentissage.

Ce n'est plus le cas. Le rôle pédagogique des exercices principaux et l'approbation des mentors ont été repris par les exercices d'apprentissage et les analyseurs. Dans la v3, le mentorat est toujours facultatif et doit être demandé explicitement.

La demande de mentorat

Pour demander un mentorat, tu dois répondre à 2 questions : Qu'espères-tu apprendre de ce parcours ? et : Comment un mentor peut-il t'aider avec ta solution ? En sachant à l'avance quelles sont les attentes de l'apprenant vis-à-vis de la discussion de mentorat, le mentor peut choisir les demandes de mentorat qui correspondent le mieux à ses connaissances et à son style de mentorat, ce qui rend plus probable que les deux parties ressortent satisfaites de la discussion.

La file d'attente de mentorat et les favoris

Dans la nouvelle file d'attente de mentorat, les mentors peuvent voir des statistiques sur l'historique de mentorat de l'apprenant. Ils peuvent voir quel apprenant n'a jamais été mentoré et pourrait avoir besoin d'une revue plus attentive, et quel apprenant a déjà été mentoré de nombreuses fois et comprend comment cela fonctionne.

Les mentors peuvent aussi enfin retrouver les apprenants qu'ils ont déjà mentorés et nouer des relations avec eux. Les mentors peuvent même ajouter des apprenants à leurs favoris et s'en servir pour donner la priorité aux apprenants avec lesquels ils ont eu une bonne expérience par le passé.

Les listes de blocage

Après chaque discussion de mentorat, l'apprenant comme le mentor ont la possibilité de bloquer l'autre personne. Il existe deux listes de blocage : les apprenants bloqués et les mentors bloqués. Si, en tant que mentor, je te bloque en tant qu'apprenant, tu pourras quand même me mentorer plus tard. L'autre personne n'aura bien sûr aucune idée qu'elle a été bloquée et ne pourra donc pas riposter contre toi.

Tu peux choisir de bloquer quelqu'un pour n'importe quelle raison, mais si cette personne enfreint le code de conduite, pense aussi à la signaler explicitement pour protéger les autres utilisateurs.

Limiter les conséquences négatives des longues attentes

Enfin, la dernière étape pour régler le problème des longues attentes consiste à s'assurer que, même s'il faut parfois attendre, les conséquences négatives de l'attente restent minimes. Dans la v3, attendre un mentorat ne t'empêche pas de résoudre d'autres exercices. Tu peux continuer à progresser dans le parcours.

Une discussion de mentorat peut être terminée par l'un ou l'autre des participants. Si tu es apprenant et que l'approche d'un mentor en particulier ne te convient pas, tu peux toujours demander une autre approche, ou choisir de quitter la discussion. Quelle que soit la façon dont la discussion de mentorat se termine, l'apprenant peut demander une nouvelle discussion de mentorat avec un autre mentor pour la même solution.

Les créneaux de mentorat

Pour chaque parcours, tu peux avoir de 1 à 4 créneaux de mentorat. Avoir plusieurs créneaux de mentorat peut t'aider lorsque tu veux demander un mentorat pour un exercice difficile, qui a moins de chances d'être mentoré rapidement, tout en pouvant obtenir du mentorat sur d'autres exercices en même temps.

Les créneaux de mentorat peuvent être déverrouillés en gagnant de la réputation. La réputation s'obtient en publiant tes solutions pour que tout le monde puisse les parcourir, en mentorant des apprenants, et en contribuant à n'importe quel dépôt d'Exercism. Cela signifie que les apprenants qui contribuent le plus à la plateforme peuvent obtenir plus de mentorat.

En résumé

Voilà quelques-unes des principales façons dont Exercism a changé le 1er septembre 2021.

Nous avons ajouté les exercices d'apprentissage pour que tu puisses apprendre sans quitter la plateforme, un éditeur en ligne pour que tu puisses coder sans rien installer, et les analyseurs et les representer pour que tu puisses obtenir un retour automatisé immédiat. Nous avons aussi supprimé beaucoup de blocages frustrants du processus de mentorat.

Et il y a tant d'autres nouveautés à explorer : notre section contribution, les badges, les nouveaux profils, une page voyage avec tout ton historique Exercism, et bien plus encore.

Viens faire un tour sur exercism.org et essaie.

Merci.

11e Sep 2021 · Tu l'as trouvé utile ?