Aller au contenu
Topos Uranos

Résumé

Cette entrée n’est pas une leçon de plus, mais le bilan final du cours : elle rappelle les sept objectifs d’apprentissage que le plan d’études s’est fixés au début, montre dans une seule figure à lequel d’entre eux chaque leçon de chaque unité a été rattachée, explique comment chaque objectif a été travaillé tout au long des huit unités de contenu, distingue les objectifs qui ont une unité propre de ceux qui traversent le cours entier, réunit ce que le cours laisse au-delà de C++, apprend à lire l’autoévaluation par objectif, qui réunit le premier essai des évaluations de sortie, et indique ce que le cours laisse à Programmation en C++ II.

Objectifs d’apprentissage

  1. Énoncer les sept objectifs globaux du cours et reconnaître dans quelles unités et quelles leçons chacun a été travaillé.
  2. Distinguer les objectifs qui ont une unité propre de ceux qui en traversent plusieurs, en particulier la résolution de problèmes avec son cycle de compilation et de débogage, et la spécification et le test, et expliquer comment ces derniers s’exercent.
  3. Séparer, dans ce qui a été appris au cours, ce qui vaut dans tout langage de sa forme en C++, et expliquer ce que le cours laisse à Programmation en C++ II.
  4. Décider, à partir de l’autoévaluation par objectif, de la figure et des défis de chaque synthèse, quelles unités et quelles leçons il convient de revoir.

Ce que le cours s’est proposé

Le cours est né d’un but général : enseigner à écrire des programmes corrects à partir de rien, en faisant de la programmation elle-même, et non d’un langage, son objet. Il a choisi pour cela un instrument exigeant, C++, parce qu’il ne cache pas la machine : il oblige à déclarer les types, sépare la compilation de l’exécution, rend visibles la mémoire, le coût de la copie et les limites de chaque nombre, et punit d’un comportement indéfini ce que d’autres langages dissimulent. La leçon sur le plan d’études a déployé ce but en sept objectifs d’apprentissage globaux, qu’il convient d’avoir sous les yeux avec la numérotation par laquelle la figure les cite :

  1. Résoudre des problèmes avec des programmes : spécifier ce qui entre et ce qui sort, concevoir un algorithme, le suivre à la main, puis l’écrire, le compiler, l’exécuter et le déboguer, en interprétant les messages et les avertissements du compilateur.
  2. Choisir le type adéquat pour chaque donnée et raisonner sur les limites de sa représentation : la plage des entiers, le dépassement de capacité, l’arrondi de la virgule flottante et l’encodage du texte.
  3. Construire des expressions correctes, en connaissant la priorité, les conversions de type, les effets de bord et ce que la norme laisse indéfini.
  4. Concevoir les structures de contrôle avec des décisions et des boucles correctes, qui se terminent, et justifier leur correction par un invariant.
  5. Décomposer un problème en fonctions dotées d’interfaces claires, choisir comment passer les paramètres, et résoudre des problèmes par récursivité.
  6. Représenter et traiter des données composées (séquences, tableaux, enregistrements, texte et fichiers) avec les algorithmes de base et avec la bibliothèque standard, en estimant leur coût.
  7. Organiser des programmes plus grands en plusieurs fichiers, les spécifier par une précondition et une postcondition, les tester de manière systématique et argumenter leur correction.

Chaque leçon du cours a en outre énoncé ses propres objectifs spécifiques. Les leçons ne disent pas à quel objectif global chacun sert ; cette correspondance est une lecture faite de l’extérieur, selon la même méthode que dans les autres cours du site. Chaque objectif spécifique est rattaché à un objectif global principal et, s’il les touche, à d’autres secondaires ; chacun compte entièrement dans son principal et pour moitié dans chaque secondaire, et la leçon est reliée comme principale à l’objectif global qui réunit le plus de poids et comme secondaire aux autres qui en reçoivent. Si deux objectifs sont à égalité, celui de l’unité l’emporte et, si aucun ne l’est, celui de plus petit numéro ; ainsi, la leçon sur les variables et la mémoire, dont les objectifs se répartissent également entre le 1 et le 2, est reliée au 2, qui est celui de son unité. Les introductions suivent la même règle. Les synthèses, en revanche, suivent un critère propre : leur principal est l’objectif de leur unité, parce que leur chaîne des concepts, leur évaluation de sortie et la plupart de leurs défis réunissent ce que l’unité a enseigné ; l’unité du texte et des fichiers, qui n’a pas d’objectif propre, est comptée avec le 6, auquel appartiennent trois de ses quatre leçons. S’il en est ainsi, le cours entier prend la forme d’une colonne vertébrale : la tête est le but général ; la colonne, l’ordre des unités, chacune avec son tronçon ; chaque leçon est un nœud de ce tronçon, relié à son objectif principal, et les sept objectifs flottent autour de la colonne, soutenus par les leçons qui les nourrissent.