Info 111 « Introduction à la programmation impérative » (site enseignants)#

Bienvenue sur le site web / dépôt git des enseignants du cours Info 111 « programmation impérative » (code apogée: OLIN115).

Le dépôt Git est l’espace collaboratif principal pour les enseignants du cours. Il est complété par quelques dépôts privés.

Vous trouverez ci-dessous les informations sur l’organisation et l’infrastructure du cours.

Avertissement

[2021-09] Une partie des informations ici présentes a besoin d’un bon coup d’époussetage …

Séances de TD et TP#

La prise en charge d’un groupe de TD/TP (42.5 eq TD, soit 120h-160h de travail effectif) inclut :

  • 9 séances de TD de 1h30 ;

  • 12 séances de TP de 2h ; compter 3-4h pour la dernière séance (soutenances de projet) ;

  • participer au renouvellement des fiches de TD/TP ;

  • participer à la préparation du projet, la rédaction de nouveaux exercices PL ; amélioration du site web, contribution à laby-jupyter, … Voir répartition des tâches ci-dessous ;

  • participer à la préparation, la surveillance et la correction de l’examen mi-semestre, de l’examen finale ou de l’examen de deuxième session ;

  • assister à au moins un des amphis.

Sauf exception, les séances de TD et TP ont lieu la même journée, les deux étant typiquement regroupées le matin (8:45-10:15, 10:30-12:30). Le sujet de TP est usuellement dans la continuité du sujet de TD, ce qui donne de la souplesse. Par exemple, si la salle de TP est disponible, il est envisageable d’envoyer en TP les élèves ayant fini le TD en avance.

Absences#

Infrastructure pour le cours#

Rédaction des fiches de TD et TP#

Conventions de codage#

Organisation des dépôts Info111 et Private#

  • Info111 : matériel pédagogique public: cours, td, tp; informations pour les étudiants ;

  • Private matériel pédagogique et autres documents privés (sujets de projet, d’examen, …), forum de discussion ;

  • Info111/Semaine*/: les cours et sujets de TD et TP de chaque semaine.

    Ces fiches sont conçues pour être à tiroir pour permettre à chaque étudiant de trouver à manger selon son niveau. Le principe est donc de focaliser chaque séance sur la fiche du jour. Bien sûr on peut répondre aux questions sur les fiches précédentes, mais on ne cherche pas à les finir.

    Les fiches peuvent être consultées sur la page web, avec solutions et notes pour les enseignants cachées ou non:

  • Private/Projet-*/ : les sujets de projet ;

  • Private/Exercices/ : une base d’exercices pour les contrôles et examens ;

  • Private/2022-2023/ExamenMiSemestre/, Private/2022-2023/Examen/ : les sujets de partiel, examen, …

  • Info111/Pedagogie/ : notes sur les discussions pédagogiques ;

  • Private/2013-2014/, … : archives des années précédentes ou documents pédagogiques d’autres formations ;

  • _build : répertoire où sont fabriqués les fichiers à mettre sur la page web.

Notes de projet et de TD/TP#

La saisie des notes de projet et de TD/TP se fait sur eCampus. Vous pouvez partir du modèle fourni. Les adresses électroniques sont fabriquées automatiquement à partir des prénom et nom ; comme elles servent de clé d’identification, il faudra ajuster manuellement quelques unes d’entre elles.

Il ne restera plus qu’à exporter en CSV les deux pages correspondant aux deux projets, à supprimer les premières lignes définissant le barème, puis à importer le tout dans eCampus : Espace de cours -> Tableau de bord -> Carnet de Notes -> Import -> Import CSV, en alignant sur l’adresse électronique et sur les éléments de note appropriés (projet, TD/TP). Alternativement, vous pouvez saisir les notes à la main à partir de Affichage -> Affichage simplifié -> Sélectionner un élément d'évaluation.

Note : vous pouvez obtenir la liste des étudiants de votre groupe à partir de la liste des participants de l’espace du cours MPI, en rajoutant les filtres groupe de TD XXX et Rôle: étudiant. Il y aura des photos pour quelques-uns d’entre eux. Vous pouvez ensuite exporter cette liste en une fiche vierge avec nom, prénom, email des étudiants avec Choisir -> Télécharger tout en bas de page.

La note de TD/TP est à votre libre appréciation. Vous pouvez tenir compte de la présence, de la participation, d’éventuels exercices rendus. En gros :

0: jamais venu
5: venu épisodiquement
10: présent régulier mou
15: présent et actif
20: au taquet

Pour ma part (Nicolas), je profite des soutenances (où j’ai les étudiants et leurs noms simultanément sous les yeux) pour mettre un commentaire sur l’engagement de chacun d’entre eux en TD/TP, que je traduis ensuite en note de TD/TP en tenant compte des autres éléments (présence, dépôts réguliers, …).

Vous pouvez aussi accéder au rendu TP de vos étudiants sur GitLab. Cela peut se faire en vous rendant sur la page GitLab d’un devoir pour un groupe donné. Voici par exemple l’adresse du devoir Semaine1 pour le groupe MI1 : https://gitlab.dsi.universite-paris-saclay.fr/Info111/2022-2023/MI1/Semaine1

En cliquant sur « fork » en haut à droite, on peut voir tous les dépôts étudiants correspondants à ce devoir. Par ailleurs, chaque étudiant a une page GitLab où vous pouvez voir ses projets auxquels vous avez accès. Le lien est de la forme : https://gitlab.dsi.universite-paris-saclay.fr/viviane.pons (remplacez par l’identifiant prenom.nom de votre étudiant dans l’URL). Cela permet d’avoir une vue d’ensemble des dépôts de l’étudiant. Si vous cliquez sur le dépot d’une semaine donnée, vous verrez s’afficher le score de correction automatique. En cliquant sur le score, vous pourrez explorer les carnets des étudiants, après exécution et correction automatique.

Pour pouvoir exécuter les devoirs de vos étudiants, vous pouvez récupérer l’ensemble des dépots d’une semaine donnée pour un groupe donné avec la commande :

$ info-111 collect Semaine1 MI1

(soit depuis votre machine si vous avez installé l’environnement de travail, soit depuis le serveur JupyterHub).

Pour avoir une vue d’ensemble des scores des étudiants sur tous les TP, vous pouvez suivre les instructions suivantes :

  • connectez-vous à JupyterHub via la case départ

  • ouvrez un carnet Python

  • exécutez les commandes suivantes, après avoir ajusté le nom de votre groupe :

Avertissement

student_group = "MI3"

import os
os.environ['LANG'] = 'fr_FR.UTF-8'
from ComputerLab.course import course
import pandas as pd
course.forge.login()
assignments = [f"Semaine{i}" for i in range(1, 11)]
dfs = {
    a: course.collect_scores(a, student_group=student_group)
    for a in assignments
}
df = pd.concat(dfs.values())

summary = df.groupby(["student", "assignment"])[["auto_score", "max_auto_score"]].sum()

def score(row):
    auto_score = row["auto_score"]
    max_auto_score = row["max_auto_score"]
    if pd.isna(max_auto_score) or pd.isna(auto_score) or max_auto_score == 0:
        return -1
    else:
        return int(auto_score / max_auto_score*100)

scores = summary.apply(score, axis=1)#.convert_dtypes()
scores.name = "score"
scores = scores.reset_index()
scores = scores.pivot(index="student", columns = "assignment", values="score")

scores = scores[assignments]

from matplotlib.colors import LinearSegmentedColormap  # type: ignore
score_cmap = LinearSegmentedColormap.from_list("score_cmap", ["red", "orange", "green"])

scores.style.format(precision=0).background_gradient(cmap=score_cmap, vmin=0, vmax=100)

Attention : la correction automatique n’est pas encore 100% robuste, donc le tout est à prendre avec un grain de sel. Un score de -1 indique que le devoir a été déposé, mais qu’il n’y a pas eu de correction automatique, soit parce que celle-ci a échoué, soit parce qu’il n’y a pas de correction automatique cette semaine-là.

Utilitaires

Pour tout compiler (requiert un certain nombre de logiciels : Jupyter Book, …) :

$ make web

Pour compiler un sujet de TD ou de projet (en principe, il devrait suffire d’une bonne installation de LaTeX) :

$ make Devoirs/Semaine1/TD.pdf
$ make Solutions/Semaine1/TD.pdf
$ make Enseignants/Semaine1/TD.pdf

Pour mettre à jour la page web (pour l’instant seul Nicolas a les permissions pour le faire) :

$ make install