Vous consultez actuellement la version statique de ce tutoriel. Cliquez ici pour ouvrir la version interactive.

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

Contenu

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

_images/jupyter.png

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

Démo!

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#

  1. Documents pédagogiques interactifs riches avec Jupyter

    • Carnets numériques et Jupyter

    • Bénéfices et bémols constatés; bonnes pratiques

    • Outillage

  1. Environnements virtuels

    • Disponibles en tout lieu, tout temps, tout dispositif

  1. Collaboration avec les forges (GitLab+Travo)

  1. 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)
log(x+1)+1x+1

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-)#

_images/notebook_Mathematica.png

Le carnet R (circa 2010-)#

_images/rmarkdown.png

Le carnet SageMath (2007’s-)#

_images/notebook-sage.jpg

Le carnet IPython (2010’s-)#

_images/lorenz.jpg

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

_images/jupyter-community.jpg

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#

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 physique

    • La 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’exploration

  • Flexibilité
    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#

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])

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

Une pièce du puzzle#

  1. 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, …

  2. 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.

  3. Tester automatiquement la version enseignant! Par intégration continue!

  4. Publier:

Carnets comme fichiers texte (with jupytext)#

Exemple

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)#

MyST (Markdown Structured Text):

  • une extension de Markdown

    • encarts (repliables), onglets, références croisées, bibliographie, …

    • extensible

  • un écosystème d’outils

pour les documents scientifiques et techniques

démo

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

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?#

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)#

_images/reproducible_logbook.png

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()
_images/student_dashboard.png

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#

travo-cr/travo/

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 JupyterLab

  • Collaboration 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 automatiquement

  • Exerciseurs, avec randomisation et répétition espacée
    Chantier : Convergence PLaTon et Jupyter

  • Tableaux 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 boucle

  • Un é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 :-)