Cours libres et passant à l’échelle avec Jupyter, GitLab, …#

Diapos et tutoriel interactif en ligne:
https://tutoriels-jupyter.pages.in2p3.fr/
Nicolas M. Thiéry, Enseignant-Chercheur, Laboratoire Interdisciplinaire des Sciences du Numérique (LISN), Université Paris-Saclay
21 octobre 2023, Bron, Campus du Libre 2023
Résumé#
Info 111, MethNum, ISD sont des cours d’introduction à la programmation, au calcul, à la science des données délivrés chaque année à plusieurs centaines d’étudiants de L1 de la Faculté des Sciences d’Orsay. Nous présenterons l’organisation et la pile technologique libre mise en place pour passer à l’échelle tout en concentrant les forces sur l’aide individuelle aux étudiants: autonomisation avec des documents pédagogiques interactifs (Jupyter, Markdown, MyST), mise à disposition d’un environnement de travail en ligne (JupyterHub+conda), gestion des devoirs avec une forge logicielle (GitLab+Travo), correction automatique avec nbgrader, coordination et production collaborative des ressources pédagogiques (GitLab). Tous les documents et outils sont libres et à votre disposition.
Contexte: grands cours en Licence Math, Info, Physique (2017-)#
Info111 : Introduction à la Programmation Impérative (en C++)
~250 étudiant.es, de novice complet à deux ans de NSI (30%)
~9 groupes de 25-30 étudiants, 9 enseignants
~10 semaines à 2h amphi + 2h TP + 2h TD
Autres cours
Attention
Contexte
Hétérogénéité des étudiants : expérience, motivation, objectifs, …
Massification
Moyens humains en tension
Indication
Enjeux
Qualité de l’enseignement, pour tous
Joie d’apprendre et d’enseigner
Au programme#
Documents pédagogiques interactifs riches avec Jupyter
Carnets numériques et Jupyter
Bénéfices et bémols constatés; bonnes pratiques
Outillage
Environnements virtuels
Disponibles en tout lieu, tout temps, tout dispositif
Collaboration avec les forges (GitLab+Travo)
Chantiers en cours
Documents pédagogiques riches interactifs avec Jupyter#
Carnet numérique (notebook)?#
Document interactif entrelaçant Narration, Calcul, Visualisation, Interaction et Programmation
Indication
Example
Ces diapos sont un carnet numérique!
Concrètement?#
Jusqu’ici, nous avons vu de la narration: raconter une histoire
Maintenant, voici un petit calcul mathématique :
from sympy import *
x = symbols('x')
integrate( x/(x**2+2*x+1), x)
Un peu de visualisation de données :
from ipyleaflet import Map, Marker
#center = (48.70180933810075, 362.16683685639214)
center = (48.842417580826314, 362.3446074074784)
m = Map(center=center, zoom=15)
marker = Marker(location=center, draggable=True)
m.add_layer(marker);
m
Un peu d”interaction:#
from ipywidgets import Button, IntSlider, HBox, Label
slider = IntSlider(value=3, vmin=0, vmax=10)
button = Button(description="Click me!")
label = Label()
def on_click(event):
label.value = str(slider.value)
button.on_click(on_click)
HBox([slider, button, label])
Un peu de programmation, avec visualisation:
from laby.global_fr import *
Laby("1b")
debut()
avance()
droite()
avance()
prend()
Exemple : transmettre des idées et des faits à via la visualisation interactive de données#
2006: TED talk Les meilleures stastistiques que vous ayez vues de Hans Rosling
Maintenant au bout des doigts des enseignants et étudiants pour explorer :
from wealth_of_nation import application
application
(tiré de la documentation de bqplot)
Exemple : Étude d’un algorithme de parcours de graphes#
Narration#
Programmation : l’algorithme#
%run -i graph_networkx
def parcours_visualisation(G, u):
"""
INPUT:
- 'G' - un graphe
- 'u' - un sommet du graphe
OUTPUT: la liste des sommets `v` de `G`
tels qu'il existe un chemin de `u` à `v`
"""
marked = {u} # L'ensemble des sommets déjà rencontrés
todo = {u} # L'ensemble des sommets déjà rencontrés, mais pas encore traités
player.player.reset(copy.deepcopy(locals()))
while todo:
# Invariants:
# - Si `v` est dans `marked`, alors il y a un chemin de `u` à `v`
# - Si `v` est dans `marked` et pas dans `todo`
# alors tous les voisins de `v` sont dans dans `marked`
v = todo.pop()
# Observation des variables locales
player.set_value(copy.deepcopy(locals()))
for w in G.neighbors(v):
if w not in marked:
marked.add(w)
todo.add(w)
# Observation des variables locales
player.set_value(copy.deepcopy(locals()))
v = None
# Observation des variables locales
player.set_value(copy.deepcopy(locals()))
return marked
Calcul#
G = examples.parcours_directed()
parcours_visualisation(G, "A")
{'A', 'B', 'C', 'D', 'F', 'G', 'H'}
Visualisation#
player
Quoi de neuf?#
Indication
Litterate Programming (Donald Knuth 1984)
Entremêler code et texte
pour expliquer la logique du code
en l’intégrant dans une narration
Indication
Litterate Computing
Entremêler calcul et texte
pour expliquer la logique du calcul
en l’intégrant dans une narration
Le carnet Mathematica (1990’s-)#

Le carnet R (circa 2010-)#

Le carnet SageMath (2007’s-)#

Le carnet IPython (2010’s-)#

Quoi de neuf, vraiment, avec Jupyter? https://jupyter.org#

Jupyter?#
Une communauté internationale transverse: académie, industrie, société civile
qui développe des standards ouverts, des logiciels libres et des services web
pour le calcul avec l’humain dans la boucle
Innovations#
Technologies web modernes
En tout lieu, tout temps, sur tout dispositif
Libre, ouvert, interopérable
Julia, Python, R, C++, et des dizaines d’autres langages et systèmes
Une porte ouverte sur l’univers du calcul libre
Très modulaire
Flexibilité pour une large gamme de cas d’usages (mais aussi complexité)
Massivement adopté#
pour l’enseignement, la recherche (sciences dures -> SHS), l’ingénierie, la science des données
millions d’utilisateurs et de ressources
Amazon SageMaker, Google Colaboratory, Microsoft Azure Notebooks, Bloomberg BQuant, Intel Trusted Analytics Platform, IBM Watson Studio, Saturn Cloud, noteable.io
Massivement adopté pour l’enseignement#
Data 8: science des données pour tous les étudiants à UC Berkeley
500k élèves des lycées utilisant Capytale
Livre teaching and learning with Jupyter, Barba et al.
Exemple : à Paris-Saclay#
En Licence, Master, Doctorat, recherche, …
600/1000 étudiants de L1 de la faculté des sciences
8000 utilisateurs
En Physique, Math, Info, Géosciences, Agronomie, Chimie, Médecine, STAPS, Droit, …
Pour:
La programmation (un peu)
Le calcul
Exemple: Méthodes Numériques en L1-L3 de physiqueLa science des données, l’IA
ParcourSup!
Avec Python, C++, SageMath, R, shell, …
Bénéfices, bémols, bonnes pratiques#
Bénéfices#
Autonomie et personnalisation
grâce à la structure narrative, à la micro-scénarisation, aux retours immédiats
massification, gestion hétérogénéitéEngagement
grâce à l’interaction et la liberté d’explorationFlexibilité
n’importe où, n’importe quand, sur n’importe quel terminal
hybridation, publics empêchés
Bémols#
⚠ le flot routinier des carnets ⚠#
Défile, défile, défile. Exécute, exécute, exécute.
Penser?
⚠ la pagaille des carnets ⚠#
Une feuille de papier (ou un tableau) est un dispositif très flexible:
gribouiller, dessiner, esquisser, calculer, écrire, composer, …
Une utilisation adéquate demande de la formation!
Les carnets ne sont pas différents!
⚠ accompagner, oui, mais pas trop ⚠#
Ils prennent l’habitude d’être très accompagnés
un peu moins débrouillards
Bonnes pratiques#
Raconter une histoire :
carnets courts : un carnet = une histoire unitaire
(favorise aussi la réutilisation)Externaliser le code ne faisant pas partie de la narration
Note: JupyterLab fournit aussi un éditeur de code raisonnable
Micro-scénariser les activités des étudiants
avec une attention à la charge cognitive, au temps d’attention
avec des carnets préstructurés (ou pas!), au rôle bien défini
avec une variété d’actions: lire, essayer, expérimenter, coder, débogguer, prendre des notes, …, s’arrêter et réfléchir!
avec interactions et retours visuels
Former les étudiants, les équipes pédagogiques
Les carnets ne remplacent pas les outils spécialisés!
IDE (programmation seule), traitement de texte (narration seule), …
Outillage#
Diapos interactives#
JupyterLab-deck (presque là)
Mini applications interactives (avec les widgets Jupyter)#
from ipywidgets import Button, IntSlider, HBox, Label
slider = IntSlider(value=3, vmin=0, vmax=10)
button = Button(description="Click me!")
label = Label()
def on_click(event):
label.value = str(slider.value)
button.on_click(on_click)
HBox([slider, button, label])
Une pièce du puzzle#
Rédiger l’exercice avec solutions :
def max(x,y): ### BEGIN SOLUTION if x > y: return x else: return y ### END SOLUTION
Mais aussi: tests, notes aux enseignants, …
Extraire automatiquement l’exercice pour les étudiants :
def max(x,y): // REMPLACER CETTE LIGNE ET LA SUIVANTE PAR VOTRE RÉPONSE raise NotImplementedError();
Par exemple avec nbgrader.
Tester automatiquement la version enseignant! Par intégration continue!
Publier:
Carnets comme fichiers texte (with jupytext)#
Indication
Quel intérêt?
Permet d’utiliser son éditeur de texte et ses outils favoris
Ne stocke pas les sorties
Facilite la gestion de version
Économise de la place disque
Vers un standard Jupyter?
Texte structuré riche (avec MyST)#
Publication (avec jupyter-book ou MySTMD)#
Comment produire un site web statique depuis une collection de carnets et documents Markdown?
Fonctionnalités
Table des matières, références croisées, bibliographie, ….
Expérience utilisateur pour le lecteur
Navigation riche (prévisualisation, recherche, …)
Sur tout support (ordinateur, tablette, téléphone)
Accessible
Efficace
Référençable et indexable (exemple: «voir la définition des conditionnelles en C++»)
Export pdf, word, …
Documents avec Markdown / MyST / Jupyter#
Cas d’usage
fiches de TD
sujets d’examens
blog
articles, thèses, propales, …
Par rapport à Word / ODT / …?
Expérience utilisateur pour le lecteur
Séparation fond / forme
Robuste
Automatisation
Par rapport à LaTeX?
Expérience utilisateur pour le lecteur
Séparation propre contenu / programmation
Environnements virtuels#
Comment permettre aux étudiant.es (et enseignant.es!) d’accéder facilement aux logiciels requis?#
Salles de TP sous Linux
Environnements virtuels en ligne:
Machines personnelles
Comment garantir l’installation de tous les artefacts requis (logiciels,données, …)?#
De façon homogène en salle TP, en ligne, sur mon portable, sur celui des étudiants
Gestion d’environnements, de paquets: conda, pip, …
Publication interactive (avec JupyterLite)#
Jupyter entièrement dans le navigateur du lecteur
Avec votre contenu!Exemple: ce tutoriel Jupyter
Pas d’infrastructure requise: just une page web statique
Technos sous-jacente en pleine expansion: Webassembly, pyolite, … comme dans Capytale
Publication interactive (avec Binder)#

Gestion des devoirs#
Le problème#
Comment gérer les devoirs informatiques dans votre cours?#
Typiquement: devoirs «à trous» pour du calcul ou de la programmation
préparer
publier
distribuer
collecter
corriger manuellement ou automatiquement
distribuer les retours
Aujourd’hui: une pièce du puzzle: Travo
Une idée#
Enseigner les sciences computationnelles est une forme de collaboration sur du code
Utilise la Forge, Luc!#
Par exemple «GitHub ClassRoom».
Modèle:
l’enseignant prépare et publie un devoir comme un dépôt git
l’étudiant télécharge le devoir (clone)
l’étudiant dépose sont travail comme divergence (fork) de ce dépôt git
Caveat 1: protection des données personnelles#
Caveat 2: intégration avec le système d’information de l’institution#
Solution: utiliser une forge déployée sur site#
Par exemple: GitLab
Caveat 3: la gestion de version et les forges, c’est trop compliqué pour les étudiants!#
Solution: automatiser l’interaction avec Git et GitLab!#
Travo à la rescousse!
L’interface basique pour les étudiants#
Télécharger le devoir :
travo fetch https://gitlab.com/travo-cr/demo-assignment.git
Déposer le devoir :
travo submit demo-assignment
L’interface graphique pour les étudiants#
from course import course
course.student_dashboard()

Quel rapport entre Travo, Jupyter, nbgrader?#
Travo apporte des fonctionnalités supplémentaires pour les devoirs basés sur Jupyter (tableau de bords, correction assistée).
Travo peut être utilisé comme service d’échange alternatif pour nbgrader.
Pourquoi utiliser une forge pour l’enseignement?#
Propriétés#
Un espace de stockage collaboratif partagé
Avec authentification et gestion des droits
Avec traçabilité forte (gestion de version: git)
Conçu pour héberger du code
Conçu pour la collaboration
Conçu pour gérer des processus
Très grande souplesse d’utilisation:
Interface web riche
Automatisation via API
Cas d’usage#
Gestion des devoirs
Édition collaborative du matériel pédagogique
Édition, production et hébergement site web du cours
Discussions pédagogiques par tickets
Interactions étudiants par tickets?
Travo: Gestion des devoirs étudiants avec GitLab#
Développé par des enseignants de l’Université du Québec À Montréal et l’Université Paris-Saclay; et vous?
Testé sur le terrain#
Trivial à utiliser pour les étudiants
Testé sur des cours à toute échelle (10-250 étudiants) à tous les niveaux
Fonctionnalités riches#
équipes pédagogiques, groupes étudiants, sessions, travail de groupe, gestion des droits, …
soutien l’autocorrection par intégration continue, la détection de plagiat
intégration avec Jupyter et nbgrader
toute la puissance de la gestion de version et des forges!!!
Léger, flexible, modulaire, extensible, soutenable, distribué, respectueux des données personnelles#
Juste une petite bibliothèque Python
API shell, API Python, interface Jupyter
S’adapte à vos processus
S’adapte à votre infrastructure
toute instance GitLab à laquelle les étudiants ont accès
salle de TP, ordinateur personnel, service en ligne, …
Expose progressivement les étudiants à la gestion de version, aux forges#
Comment faciliter la collaboration avec et entre les étudiant.es?#
Collaboration temps réel
Depuis 10 ans dans Cocalc.com; enfin en train d’arriver dans JupyterLabCollaboration asynchrone avec Git
Comment corriger les devoirs?#
Correction automatique ou assistée:
Par Intégration Continue sur GitLab
Avec nbgrader (pour carnets Jupyter), …
Les étudiants peuvent s’auto-évaluer, ont un retour tôt
Chantiers en cours#
Évaluation des étudiants#
Problématique: évaluer de grandes cohortes d’étudiants?
évaluation formative et sommative
chronophage
triche
Indication
Projets évaluées par soutenance courte (5+5 min) en binôme
Avec un carnet numérique comme mini-rapport et support de présentation
Trame fournie avec tests + démo (exemple)
Indication
Examens sur papier
Pourquoi : plus robuste, peu de triche
Correction des copies scannées avec CorrectExam
(analogue libre et souverain de GradeScope
correction collaborative, par grille, semi-automatique
Merci à nos amis de Rennes!Banque d’exercices testés
Difficultés:favoriser la réutilisation?
diffuser librement sans permettre la triche?
Détection de plagiat
Chantier: adapter CopyDetect
Alternative libre à MOSS
À adapter aux carnets numérique
Voir aussi: sherlock)
Problématiques
Comment ancrer les apprentissages?
Comment personnaliser les apprentissages?
Au delà de «même documents pour tous, chacun à son rythme»Comment mieux suivre les étudiants?
Chantiers en cours:
Flash cards
Chantier : Les générer automatiquementExerciseurs, avec randomisation et répétition espacée
Chantier : Convergence PLaTon et JupyterTableaux de bords
Indication
Stratégie
Utilisation d”annotations sémantiques dans les documents
concepts, compétences, …Utilisation des traces d’apprentissage
Éthique, bienveillante, sobre, simple, souveraine, loyale, …
Du bon usage des agents conversationnels (Chat-GPT, …)#
Attention
Défis
Bons usages pédagogiques
Souveraineté, données personnelles
Contrôle
Impact environnemental
Chantier
Déployer un/des agents conversationnels locaux?
Intégration dans nos instances Jupyter, notamment avec Jupyter-AI?
Résumé#
Indication
Documents pédagogiques interactifs riches avec Jupyter, MyST, …
Une communauté internationale transverse: académie, industrie, société civile
qui développe des standards ouverts, des logiciels libres et des services web
pour le calcul avec l’humain dans la boucleUn écosystème riche d’outils extensibles et composables
Indication
Environnements virtuels
Disponibles en tout lieu, tout temps, tout dispositif
En ligne: Cocalc, myDocker, JupyterHub, JupyterLite, Binder, …
En local: salle TP, machine personnelle
Déploiement reproductible avec
conda
,pip
, …
Indication
Collaboration avec les forges (GitLab+Travo)
Gestion des devoirs : distribution, collecte, correction, …
Travail en équipe pédagogique : gestion de projet, communication, édition collaborative
Ce sont juste des outils!#
Explorer et partager les bonnes pratiques!
À l’université Paris-Saclay (comme à beaucoup d’endroits!)#
De nombreuses expérimentations
Une adoption croissante qui transforme l’enseignement
À vous!#
Partagez vos pratiques
Réutilisez et adaptez tout ou partie du matériel pédagogique
Adoptez par touches successives les outils présentés
Discutons :-)
Comment favoriser la robustesse des exercices?#
Un défi avec les exercices sur ordinateur : le diable est dans les détails!
Mon exercice est-il vraiment faisable par mes étudiants aujourd’hui?
Même après la dernière mise à jour?
Même après ma retouche cosmétique?
Mes solutions sont-elles à jour?
Avec 3 30 étudiants en TP : très difficile de signaler des erratum