URL: https://linuxfr.org/users/epeios/journaux/apprentissage-de-la-programmation-comment-moderniser-les-exercices Title: Apprentissage de la programmation : comment moderniser les exercices Authors: Claude SIMON Date: 2019年08月09日T17:21:09+02:00 License: CC By-SA Tags: éducation, lycée, apprentissage, programmation, interface, atlas_toolkit et python Score: 15 [![Jeu du pendu](http://q37.info/s/pnmjfw39)](http://q37.info/s/jtdqjsx7) Eh oui, en pleines vacances, ce journal va évoquer la rentrée, et plus précisément la prochaine rentrée scolaire. Vu les résultats du [pénultième sondage](https://linuxfr.org/sondages/suis-je-un-jeune-ou-vieux-lecteur-de-linuxfr-org), cela devrait intéresser plus d'une personne ici, non pas tellement en tant qu'élève, mais plutôt en tant que parent ou grand-parent. Il se trouve, en effet, qu'au cours de l'année solaire à venir, des cours de programmation informatique vont être dispensés dans certains lycées, avant d'être généralisés à l'ensemble des lycées d'enseignement général et technologique. Ces cours étant obligatoires, l'assiduité des élèves est loin d'être acquise, d'où un intérêt particulier à rendre ces cours aussi intéressants que possible. Le langage qui été retenu par l'Éducation nationale est *Python*, probablement la version 3. Or, à la vue des tutoriels existants, qu'ils s'appuient sur *Python* ou un autre langage, la principale crainte des enseignants provient du fait que l'interface de la plupart des exercices soit textuelle. De nos jours, presque tous les jeunes possèdent un smartphone, et sont, de ce fait, habitués aux interfaces graphiques. Ils n'ont que rarement, voire jamais, eu affaire à une console texte. L'écriture de programmes avec une interface texte va leur sembler (à tord) dépassée, et donc probablement totalement inintéressante. D'où l'idée d'un outil qui permettrait de créer des exercices avec une véritable interface graphique. Cet outil, tel que je l'ai imaginé, mettra en œuvre une interface web. Il a, en outre, été conçu de manière à ce que le lancement de l'exercice provoque automatiquement l'ouverture d'un navigateur web pour donner un accès immédiat à l'interface de l'exercice en question. De plus, un code QR sera affiché pour en faciliter l'accès à partir d'un smartphone. Un autre de mes projets pédagogiques, présentés dans ce [journal](https://linuxfr.org/users/epeios/journaux/la-tortue-passe-au-web), s'appuie déjà sur cet outil. Pour un élève, un exercice consiste généralement à écrire du code effectuant certaines tâches. Pour valider ce code, et donc l'exercice, il faut en tester le comportement en modifiant les valeurs de ses différents paramètres. Cela se fait habituellement en modifiant ces paramètres directement dans le code source, ou alors lors de l'exécution, en récupérant la valeur des ces paramètres grâce à des `input(...)` (dans le cas d'exercices codés en *Python*). Avec une interface web, les élèves disposeront d'une véritable interface graphique dans laquelle ils pourront saisir à la volée les valeurs des différents paramètres. C'est beaucoup plus pratique, et également beaucoup plus proche de ce à quoi ils sont habitués avec les applications qu'ils utilisent sur leurs smartphones. À noter que les élèves ne manipuleront pas directement l'interface, ou alors seulement via des fonctions de très haut niveau. À titre d'exemple, j'ai crée un [dépôt *Github*](http://q37.info/s/tpkx4cfk) avec quelques exercices mettant en œuvre cet outil, exercices dont l'objet est d'aborder les différents concepts de base de la programmation informatique. Cependant, bien qu'indispensables, les élèves risquent d'être rapidement lassés par ces exercices, de par l'abstraction des sujets sur lesquels ils portent. Je me suis donc penché sur l'élaboration d'une autre série d'exercices, plus ludiques, mais toujours basés sur le même outil. Les exercices de cette série sont destinés à être proposés en alternances avec ceux de l'autre série. L'idée, c'est d'introduire les concepts de bases avec les exercices de la première série, puis de les mettre en œuvre avec les exercices de la seconde série. Ces exercices de la seconde série vont consister à écrire, une à une, les fonctionnalités d'un jeu, par exemple. Une fois le dernier exercice accomplit, l'élève aura un jeu entièrement fonctionnel. Prenons l'exemple du [jeu du pendu](https://fr.wikipedia.org/wiki/Le_Pendu_(jeu)) (d'où l'illustration accompagnant ce journal). Pour le premier exercice (exercice *a*), les élèves débuteront avec un fichier dont le contenu sera le suivant : ```python # coding: utf-8 import sys sys.path.append(".") from workshop.fr.a import * def lettreEstDansMot(lettre,mot): go(globals()) ``` Le but de l'exercice sera d'implémenter la fonction `lettreEstDansMot(lettre,mot)`, à savoir lui faire retourner *vrai* lorsque `lettre` est présent dans `mot`, *faux* sinon. Comme indiqué plus haut, les différentes notions nécessaires à l'implémentation de cette fonction auront été abordés à l'aide des exercices de la première série. Lorsque l'élève, pour vérifier si son code fonctionne correctement, lancera l'exercice, un navigateur web s'ouvrira sur une interface telle que reproduite dans l'illustration en début de journal. Pour faciliter les tests, il y aura, en plus, un champ texte qui affichera le mot secret, et dans lequel on pourra saisir le mot secret de son choix. Ce champ texte ne sera évidemment pas présent dans la version finale du jeu. Les tests consisteront donc à sélectionner successivement plusieurs des lettres du clavier, et vérifier qu'elles sont affichées lorsqu'elles sont contenues dans le mot secret, ou qu'une partie du pendu s'affiche dans le cas contraire. Une fois ce premier exercice correctement réalisé, on passe à l'exercice suivant (exercice *b*), pour lequel l'élève devra au préalable remplacer le `a` dans la ligne `from workshop.fr.a import *` par un `b` pour obtenir `from workshop.fr.b import *`. Il devra également ajouter la déclaration de fonction suivante: `def obtenirMasque(mot,pioches)`. Le fichier ressemblera alors à ça: ```python # coding: utf-8 import sys sys.path.append(".") from workshop.fr.b import * def lettreEstDansMot(lettre,mot): # Ici, il y aura le code que l'élève a écrit à l'occasion de l'exercice 'a'. def obtenirMasque(mot,pioches): go(globals()) ``` Vous l'aurez compris, l'exercice consistera à implémenter la fonction `obtenirMasque(mot,pioches)`, dont les notions nécessaires pour cela auront été abordés à l'aide de l'autre série d'exercices. Les tests seront réalisés dans les mêmes conditions que pour l'exercice précédent. Et ainsi de suite pour les exercices *c*, *d*, *e*... Chaque nouvel exercice reprend ce qui a été codé lors des exercices précédents, et ajoutera une nouvelle fonctionnalité à implémenter, jusqu'à l'exercice final, à l'issue duquel toutes les fonctionnalités du jeu auront été implémentées. Là aussi, j'ai crée un [dépôt *GitHub*](https://q37.info/s/7sxtcv7g) pour tester la faisabilité technique du projet, et également voir les difficultés que présenterait l'internationalisation d'un tel projet. Les répertoires `en` (version anglaise des exercices) et `fr` (version française) ne sont pas destinés à être fournis aux élèves, car ils contiennent, pour chaque exercice, un exemple de solution. Ils contiennent, en outre, des indications destinées aux enseignants. Seuls le répertoire `workshop`, ainsi que les deux fichiers ZIP, seront fournis aux élèves. Pour l'instant, les deux dépôts *Github* présentés ci-dessus ont été crées essentiellement à titre de preuves de concept. Des différents retours que j'ai eu jusqu'à présent, autant l'intérêt pédagogique que la pertinence technique de l'outil mentionné dans ce journal semblent établis. Ces deux dépôts vont donc maintenant évoluer et être complété de manière à pouvoir être mis en œuvre par les enseignants. Si vous avez des suggestions à faire à ce propos, n'hésitez pas...

AltStyle によって変換されたページ (->オリジナル) /