Archives de catégorie : Enseignement

Construction d’une machine de Turing

MT - FiguresJe travaille actuellement, sur mon temps libre, à la réalisation d’une machine de Turing. Il s’agit d’un ordinateur rudimentaire mais qui permet de réaliser (sous réserve de disposer des ressources suffisantes) tous les calculs que peuvent effectuer les ordinateurs existants, et même ceux qui n’existent pas encore (*), y compris les ordinateurs quantiques. Par contre, cette machine ne calcule pas de manière efficace et n’a donc pas d’intérêt pratique. Alors pourquoi en réaliser une « physiquement » ?

Parce que la machine de Turing occupe une place très importante en science informatique et qu’elle illustre magistralement comment un assemblage d’éléments simples permet de réaliser un système dont le comportement peut être extrêmement complexe au point n’être prévisible, en toute généralité, par aucun algorithme ni aucune machine, aussi compliquée soit-elle. Je pense que le fait de voir une telle machine en fonctionnement peut, plus qu’une simple description ou même une simulation, marquer les esprits de mes étudiants et développer leur curiosité scientifique.

D’autre part, l’analyse de l’architecture et du fonctionnement d’une telle machine montre quels sont les éléments qui la constituent, comment ces éléments échangent des informations, quels sont leurs rôles, comment ils sont eux-mêmes constitués de briques plus simples qui réalisent des opérations élémentaires. Ce genre d’exercice est essentiel pour développer les aptitudes des étudiants en matière d’ingénierie et pour les amener être capables de comprendre et de concevoir par eux-mêmes des systèmes complexes.

Je reviendrai lors d’un prochain billet sur la construction de cette machine. Je dirai juste aujourd’hui qu’elle sera composée de petits modules réalisés avec des composants électroniques simples (portes logiques, bascules D), et que l’état de chacun de ces modules sera indiqué par des leds (bleue pour 0, rouge pour 1) de manière à ce qu’il soit possible de suivre facilement toutes les étapes d’un calcul.

(*) D’après une hypothèse très sérieuse connue sous le nom de thèse de Church-Turing, émise par deux des plus célèbres mathématiciens du siècle dernier.

Coder à l’école, une bonne idée ?

Coder à l'écoleFaut-il enseigner la programmation à l’école et au collège ? L’idée a souvent été évoquée dans l’actualité de ces derniers mois. En tant qu’universitaire enseignant-chercheur en informatique, je me sens évidemment concerné par cette question.
Je tiens tout d’abord à préciser que le codage (néologisme synonyme de programmation) n’est que la partie technique de la réalisation d’une application. Avant d’arriver à cette étape, il faut avoir une idée, puis créer, à partir de cette idée, une spécification de ce que va réaliser l’application et de la manière dont les utilisateurs vont interagir avec elle. L’utilité, l’attrait et l’utilisabilité d’une application dépendent essentiellement de cette phase de conception qui n’a rien à voir avec le codage. Ce n’est donc pas parce qu’une personne sait coder qu’elle sera capable de réaliser des applications à la fois attractives ou utiles et faciles à utiliser, de la même manière qu’une personne sachant coudre ne sera pas nécessairement douée pour dessiner de nouveaux modèles de robes ou de manteaux, ou qu’un très bon musicien de sera pas nécessairement capable de composer une œuvre musicale à succès.
D’autre part, même si tout un chacun était capable de réaliser ses propres vêtements, très peu de gens utiliseraient effectivement cette compétence. La plupart d’entre eux renouvelleraient leurs garde-robes en allant dans les magasins, et ceci pour une raison très simple : concevoir et fabriquer des vêtements prend énormément de temps. De la même manière, même les gens qui maîtrisent la programmation achètent la plupart des applications dont ils ont besoin car la réalisation d’une application représente souvent des milliers d’heures de travail. Nous vivons dans une société où la plupart des biens de consommation, y compris dans le domaine de l’informatique, sont conçus et fabriqués par des professionnels spécialisés. La grande majorité des gens ne construisent pas leur voiture ni leur maison, ne fabriquent pas eux-mêmes leurs vêtements ni leurs meubles, et n’ont pas plus vocation à réaliser eux-mêmes les logiciels dont ils ont besoin, quand bien même ils auraient les compétences pour le faire.
Comme tout le monde n’a pas vocation à devenir informaticien développeur, il n’est pas nécessaire d’imposer à chacun de savoir coder.
Par contre, expliquer en classe comment fonctionne un ordinateur, ce qu’est un logiciel, comment il est conçu et réalisé, me parait être une très bonne chose, au même titre qu’expliquer le principe de fonctionnement d’une voiture hybride ou d’un congélateur. Nous vivons dans une société technologique dans laquelle avoir une culture scientifique et technique est un atout. Et puis l’école devrait être un lieu où chaque enfant progresse à son rythme, au mieux de ses possibilités, découvre et développe ses talents. Il me parait donc souhaitable que les enfants doués pour la conception technique, l’ingénierie, ou la programmation par exemple, puissent s’initier à ces domaines dans le cadre scolaire.

Plaidoyer pour un enseignement asynchrone

classe
L’archétype de l’enseignement synchrone est celui dispensé en salle de classe, à l’école ou au collège. Tous les enfants d’un même âge sont censés acquérir les mêmes compétences à la même vitesse. Il reçoivent simultanément les mêmes explications et font en même temps les mêmes exercices, dans toutes les matières enseignées.

Dans l’enseignement supérieur, beaucoup d’enseignements sont en grande partie basés sur ce modèle synchrone, notamment en ce qui concerne les cours magistraux, les séances de travaux dirigés et les évaluations. Depuis plusieurs années, j’essaie une autre approche que je présente de manière synthétique dans ce poster consultable en ligne.

Examens : la rapidité doit-elle être déterminante ?

examenLors de mes études universitaires, j’ai eu le sentiment que la plupart des examens que j’ai passé étaient des épreuves de rapidité. Plus que la difficulté intrinsèque des exercices proposés, c’est bien souvent le temps attribué pour les résoudre qui me posait problème.
Une telle sélection par la vitesse est-elle une bonne chose ? A mon avis, tout dépend de la nature des compétences évaluées ! Si la rapidité est critique pour ces compétences, alors elle doit l’être au cours des entraînements et des examens associés. Dans le cas contraire, les candidats devraient bénéficier d’un temps suffisant pour traiter confortablement les exercices proposés dès lors qu’ils maîtrisent les compétences évaluées, ce qui implique qu’une partie significative d’entre eux devrait avoir terminé l’épreuve avant le temps réglementaire.
Pendant très longtemps, j’ai utilisé la rapidité comme variable s’ajustement pour doser la difficulté de sujets d’examens que je concevais. Mais depuis que j’ai articulé mes enseignements et mes évaluations autour d’une grille de compétences, il y a quelques années, j’ai radicalement changé d’approche : je considère qu’un examen doit être une évaluation sommative permettant de déterminer ce que chaque candidat sait et ne sait pas faire au regard des compétences évaluées.
Si par exemple une des compétences à évaluer était « savoir traduire un algorithme en un programme en langage C à une vitesse minimum de 3 lignes par minutes », alors je pénaliserais à l’examen les candidats qui codent moins vite. Mais si la compétence est « savoir traduire un algorithme en un programme en langage C » sous-entendu en prenant le temps qu’il faut pour le faire bien, alors je vais faire mon possible pour que des étudiants qui codent aussi bien mais à des vitesses différentes aient la même note. L’idée est « tu sais faire ou tu ne sais pas faire, mais si tu sais faire, tu as largement le temps de le faire ».
En pratique, il faut évidemment fixer des limites. Je pense qu’un facteur deux entre le temps d’exécution des candidats les plus rapides et le temps accordé à tous peut être considéré comme raisonnable. Autrement dit, dans le cas d’une épreuve de deux heures, parmi les candidats maîtrisant les compétences évaluées, les plus rapides devraient avoir terminé en une heure.
Un tel critère d’évaluation est-il réaliste au regard des besoins des entreprises ? A mon avis oui. J’ai travaillé en entreprise pendant plusieurs années avant de devenir universitaire et il m’est arrivé de sélectionner des candidats en vue du recrutement de nouveaux collaborateurs. Comme une réminiscence de cette époque, je me demande parfois lesquels de mes étudiants je recruterais sur un poste en recherche et développement. Et la réponse est : pas les plus rapides, mais ceux qui prennent le temps d’analyser un problème à résoudre et de considérer différentes pistes susceptibles (ou pas) de conduire à une solution. La qualité du raisonnement est plus importante que la rapidité et une tendance à aller trop vite finit souvent par être contreproductive.
Ce principe, en revanche, ne me semble pas applicable aux concours. Le but d’un concours n’est pas de valider des compétences mais de classer des candidats. La rapidité est alors un moyen pratique de différencier ceux ayant donné les mêmes réponses. Mais comment prendre en compte ce critère lorsque la qualité des réponses est différente ? Je n’ai pas de réponse, n’ayant jamais été amené à concevoir des épreuves de concours.

Remarque : Les idées que je défends dans ce billet reflètent mes opinions personnelles et n’ont pas la prétention d’être des vérités universelles. Il est tout à fait possible qu’elles ne soient pas partagées par tous les enseignants. Il faut se garder de tenter d’imposer une pensée unique en matière de pédagogie.

Un poster pour apprendre mieux

Je viens de réaliser un poster qui donne de nombreux conseils aux étudiants qui ont le sentiment de ne pas utiliser au mieux leurs capacités et qui souhaitent apprendre de manière plus efficace.

Cliquez sur l’image pour visualiser le poster. Il reste certainement des coquilles. Merci de me les signaler.

Rentrée 2015

rentree3Rentrée 2015. Je suis enseignant chercheur titulaire depuis 19 ans et je commence ma 23ième année d’enseignement à l’université. Qu’est ce qu’un enseignant chercheur, que fait-il de ses journées ? Je répondrai à ces questions dans de prochains billets. Aujourd’hui, je me contenterai de donner quelques chiffres.

Au cours de l’année universitaire qui se termine, j’ai effectué un peu plus de 2000 heures de travail dont environ 1200 consacrées à l’enseignement, dont environ 240 en présence d’étudiants. Le reste de mon temps de travail a été essentiellement consacré à la recherche. Cette répartition n’a pas valeur de généralité. Certains collègues travaillent plus que moi, certains ont de lourdes tâches administratives, certains consacrent plus de temps à la recherche et moins à l’enseignement.

Ce que révèlent ces chiffres, c’est qu’en moyenne chaque heure passée devant des étudiants correspond à 5 heures de travail. A quoi sont consacrées les 4 heures restantes ? La préparations des cours, la réalisation de documents pédagogiques, la conceptions de sujets de contrôles continus et d’examen (13 contrôles continus et 7 examens en ce qui me concerne), l’auto-formation, la participation à des jurys, soutenances, réunions pédagogiques, le suivi d’étudiants en stage ou en formation en alternance, etc.

Exercices à la carte en TD et TP

Dans une classe, tous les étudiants ne progressent pas à la même vitesse, ce qui implique que si on donne le même exercice à tous les étudiants, seuls certains d’entre eux en tireront vraiment profit. Les autres seront soit en situation de blocage face à un travail qui dépasse leurs possibilités du moment, soit face à un travail trop facile pour eux et qui ne leur permettra pas d’acquérir de nouvelles compétences. Continuer la lecture