Pourquoi la Pythonerie - clauderouxster/Pythonerie GitHub Wiki
1981 en janvier
Je suis revenu de vacances et l'ordinateur que mon père a acheté à Noël trône sur le bureau. C'est un bloc blanc qui comprend le clavier, le lecteur de cassette ainsi que toute l'électronique de l'ordinateur avec en face un écran qui affiche l'invite de commande en vert clignotant: Ready. Pour toute documentation, j'ai un cahier entièrement en anglais que je ne comprends qu'à moitié. Le dictionnaire bilingue ne m'aide guère: Mais c'est quoi un pixel???
Je mets un certain temps à comprendre comment lire un programme depuis une cassette et il me faut quelques jours avant de commencer à écrire mes premières lignes de code. A partir de ce moment là, le goût de la programmation ne me quittera plus.
A l'époque, il n'y avait guère de choix. On ouvrait l'ordinateur directement dans l'environnement du Basic qui était à la fois le langage de programmation et le shell. Mais cette simplicité offrait aussi une approche plus directe de la programmation. On ouvrait la machine et on pouvait commencer à taper notre code et à l'exécuter directement.
Aujourd'hui, Python offre en partie cette simplicité, mais au prix d'une certaine complexité d'installation des bibliothèques nécessaires. J'ai longtemps rêvé de mettre à disposition un environnement qui nous ramènerait à la simplicité d'antan. Enfin, à une certaine simplicité.
Python en français
Le Python de la Pythonerie tourne dans le navigateur via un langage de programmation que j'ai créé il y a quelques années: LispE. LispE est compilé en WASM, ce qui permet de l'exécuter dans le navigateur. Il a été de plus conçu pour communiquer de façon transparente avec Javascript, ce qui permet d'étendre le langage avec des fonctionnalités multimédias sans trop de difficulté.
Le langage a été aussi construit pour facilement transpiler d'autres langages. La transpilation est une opération qui consiste à transformer les instructions d'un langage en un autre langage. Ici, nous transpilons du Python en LispE, le transpilateur est d'ailleurs accessible à cette adresse: transpilateur. Vous y trouverez les règles de la grammaire de transpilation et de quoi régénérer le programme en question. Personnellement, j'ai beaucoup souffert pour créer une grammaire qui corresponde peu ou prou à ce que je voulais, mais comme tout est Open Source, je vous mets à disposition l'ensemble. Si cela vous amuse, il y a bouton dans l'interface qui permet de voir à quoi va ressembler le code qui va réellement s'exécuter: λ LispE.
Et si on doit faire un Python, pourquoi ne pas le franciser...
Et pourquoi ne pas construire aussi une interface dans le Web, où l'on peut écrire et exécuter du code. Comme ça n'importe qui sans installation complexe peut commencer à jouer avec.
Et puisque jouer est souvent le premier pas, j'ai aussi quelques jeux sympas tout droit sortis des années 80:
- Serpent
- Casse-briques
- Envahisseurs
- Astéroïdes
D'un côté le code, de l'autre l'exécution. Dans le même environnement, comme autrefois avec Basic.
La Pythonerie
La Pythonerie est un environnement complet qui tourne dans le navigateur. Vous pouvez le tester directement ici: La Pythonerie, mais vous pouvez aussi l'installer via un serveur Python.
Chaque élève peut ainsi écrire ses programmes, les tester et les enregistrer sur disque pour les partager avec ses amis. Si un serveur Python est installé, alors il suffit aux élèves de créer une archive pour que celle-ci s'enregistre dans le répertoire Téléchargements de leur machine, mais aussi dans un répertoire consacré dans la machine de l'enseignant.
Il faut enfin noter que la légèreté de l'ensemble fait que le serveur peut tourner sur un Raspberry Pi et ne requiert pas de monstre informatique hors de prix.
Le langage est entièrement en français, mais avec une syntaxe Python:
# 3. Les boucles : pour et tantque
# pour ... dans : répéter pour chaque valeur
affiche("Table de 7 :")
pour i dans intervalle(1, 11):
affiche(i, "x 7 =", i * 7)
# On parcourt aussi une liste
fruits = ["pomme", "poire", "cerise"]
pour fruit dans fruits:
affiche("J'aime les", fruit + "s")
# tantque : répéter tant qu'une condition est vraie
n = 1
tantque n < 1000:
n = n * 2
affiche("Première puissance de 2 au-delà de 1000 :", n)
# sortir quitte la boucle, continuer passe au tour suivant
pour i dans intervalle(10):
si i == 3:
continuer
si i == 7:
sortir
affiche("i =", i)
Exemples
L'environnement vient avec une vingtaine de programmes fournis en exemple que l'élève peut charger et exécuter dans son navigateur:
Le navigateur
Le navigateur est universel et il possède tout ce qu'il faut pour jouer de la musique ou afficher des images. En revanche, beaucoup de ces manipulations sont assez complexes à réaliser en Javascript.
Sauf que La Pythonerie peut communiquer directement avec lui.
Ainsi beaucoup d'instructions sont en réalité directement implantées en Javascript, en particulier les instructions multimédias, pour le son et l'image. Le langage sous-jacent a été justement conçu pour pouvoir exécuter du Javascript directement, même s'il fournit près de 500 instructions natives.
# 8. Une balle qui rebondit
# animer(fonction, délai) appelle la fonction toutes les "délai" millisecondes.
# Clique sur « Arrêter » pour stopper l'animation.
x = 100
y = 100
dx = 6
dy = 4.5
rayon = 25
fonction image():
# += dans une fonction modifie la variable du programme (sinon, on écrit x =: valeur)
x += dx
y += dy
# On rebondit sur les bords
si x < rayon ou x > largeur() - rayon:
dx *= -1
si y < rayon ou y > hauteur() - rayon:
dy *= -1
fond("gris foncé")
couleur("orange")
disque(x, y, rayon)
couleur("blanc")
taille_texte(18)
texte(10, 10, f"x = {arrondi(x)} y = {arrondi(y)}")
cache_tortue()
animer(image, 20)
Ce qui donne:
RGPD
En mode Web, la Pythonerie est parfaitement compatible avec le RGPD européen et avec ses équivalents canadiens, la LPRPDE et la Loi 25 du Québec. Tout s'exécute dans le navigateur : une fois la page chargée, rien ne transite par le réseau. Aucune donnée n'est envoyée à un serveur, il n'y a ni cookie, ni mesure d'audience, ni service tiers (l'éditeur et les polices de caractères sont fournis par le site lui-même). Le nom de l'élève sert seulement à nommer les archives ; il est oublié à la fermeture de l'onglet.
Les conditions sont évidemment différentes dans le cas d'un serveur qui tourne sur une machine dans une école. Dans ce cas, l'école devra elle-même vérifier que son installation est conforme. En revanche, il faut bien se rappeler que l'exécution se fait dans le navigateur et que le serveur ne fait que servir l'application Web au démarrage et recevoir les archives des programmes produits par les élèves. Ces archives restent donc sur le serveur de l'école.
Anthropic: IA
Ce projet présente une autre particularité. Il propose sur sa page de garde un fichier dont le nom: POUR_CLAUDE.md a pour rôle de renseigner un modèle Claude ou un autre d'ailleurs sur la meilleure façon d'utiliser cet environnement. Ainsi, vous pouvez demander à un modèle de Claude de générer des programmes compatibles avec cette interface.
Non seulement, il connait les spécificités du Python francisé de La Pythonerie, mais il est capable sans difficulté de générer des jeux graphiques. D'ailleurs tous les jeux proposés ici ont été générés par Claude. Il connaît la syntaxe mais aussi les instructions particulières pour manipuler souris et clavier dans un environnement graphique. Il pourra aussi vous renseigner rapidement sur les meilleures instructions pour résoudre tel et tel problème.
N'hésitez donc pas à faire pointer Claude vers ce repo GitHub, il saura en faire bon usage.
Conclusion
Ce projet est Open Source et il est disponible ici: La Pythonerie. Mon ambition est de promouvoir l'informatique à l'âge de l'IA. J'ai voulu créer un environnement qui rappelle un peu les origines de la micro-informatique et qui offre à des enfants un espace où ils peuvent expérimenter, sans devoir disposer d'une machine puissante et sans avoir besoin d'installer quoi que ce soit.
D'ailleurs, si l'on devait être un poil honnête, le fait de tourner dans le navigateur protège aussi la machine de la maison, aucun risque que des fichiers importants ne soient détruits par inadvertance.
Enfin, le choix du français, je sais, peut faire débat, mais je me souviens de mes propres déboires à mes débuts, et je crois sincèrement que ce choix pourra aider de jeunes enfants à démarrer.
Si cela vous intéresse, vous pouvez aussi lire le mode d'emploi destiné à un jeune public.