Une formation à l'algorithmique pour tous
Responsables de la sélection de l'équipe de France aux Olympiades Internationales d'Informatique depuis 1997, les membres de l'association France-IOI (association loi 1901) ont concentré leurs efforts sur le développement d'un site web de formation à l'algorithmique, www.france-ioi.org. Ce site a permis aux candidats français de progresser d'année en année et d'emporter 27 médailles aux Olympiades, dont 2 d'or, 5 d'argent et 20 de bronze.
À l’origine destinée à l'entraînement des candidats aux Olympiades, cette plate-forme de formation a évolué vers un outil permettant à tout francophone de s’initier aux bases de la programmation et de découvrir petit à petit l’algorithmique, avec la possibilité de continuer jusqu’à un niveau très élevé. Désormais, ce sont plusieurs centaines d’exercices qui sont résolus chaque jour sur le site.
La validation automatisée des programmes écrits par ces élèves, l’aspect ludique des exercices proposés, la possibilité d’avancer à son propre rythme, l’entraide favorisée entre les utilisateurs font partie des atouts de cette plate-forme. Les membres de l’association France-IOI, tous bénévoles, ajoutent régulièrement de nouveaux exercices, cours et outils et encadrent de petits groupes d'élèves lors des stages organisés plusieurs fois par an.
Pour intéresser un plus grand nombre de jeunes aux sciences du numérique, l’association prépare avec Allistène et l’ENS Cachan l’organisation en novembre 2011 du concours Castor (www.castor-informatique.fr), organisé pour des classes entières dans de nombreux collèges et lycées. Au delà de l'organisation d'un concours, notre objectif est de les initier à ce domaine, tout en mettant à leur disposition de quoi continuer leur apprentissage.
C’est tout naturellement que l’association s’est intéressée à l’introduction récente de l’algorithmique dès la classe de Seconde et à la future spécialité informatique en classe de Terminale. Un contenu adapté à l’utilisation de l’algorithmique dans le cadre du programme de mathématiques est en cours d’élaboration et nous nous proposons de mettre gratuitement notre plate-forme à disposition des enseignants du secondaire dans le cadre de leur cours. Dans la suite de ce document nous présenterons plus en détail l'activité de l’association et en particulier le projet que, dès à présent, nous mettons en place en collaboration avec les enseignants.
Les
Olympiades Internationales d’Informatique (IOI) , créées sous l’impulsion de l’UNESCO en 1989, rassemblent désormais chaque année plus de 300
participants de plus de 80 pays. Ces jeunes collégiens et lycéens se mesurent individuellement lors de deux épreuves
de 5 heures chacune, durant lesquelles ils doivent résoudre 3 problèmes algorithmiques. Pour résoudre un sujet, ils doivent programmer un
algorithme efficace qui lit les données du problème et calcule la solution demandée, leurs programmes informatiques étant évalués
automatiquement par une succession de tests.
À
titre d’illustration, le problème suivant est une version résumée d’un des sujets des Olympiades 2011 : “Vous êtes perdu dans un labyrinthe
comportant 100 000 pièces et dont vous disposez du plan. Certaines pièces sont reliées par des chemins de diverses longueurs, donc prenant plus
ou moins de temps à parcourir. Malheureusement, le gardien du labyrinthe peut à tout instant bloquer un et un seul des
chemins et vous empêcher d'aller dans la direction de votre choix. Sachant que le gardien va tout faire pour vous retarder
le plus possible, écrivez un programme qui calcule le temps minimum qu'il vous faudra pour vous échapper.”
Les résultats décevants de la France lors de ses premières participations aux Olympiades ont mis en évidence que, en l’absence de cours de programmation ou d’algorithmique dans le secondaire, la simple sélection des meilleurs jeunes programmeurs français ne suffirait probablement jamais à obtenir des résultats honorables à cette compétition de haut niveau. Malgré les solides bases en programmation dont faisaient preuve ces jeunes autodidactes, la mise en place d’une formation supplémentaire en algorithmique s’avérait indispensable. La volonté d’obtenir de meilleurs résultats lors des Olympiades a donc amené les responsables de cette sélection à développer petit à petit une véritable formation à la programmation et à l’algorithmique.
La création de ce site d'entraînement en 2001 a eu un effet très net sur les résultats de la France, qui ont très rapidement progressé. Lors des Olympiades 2011, lorsqu'un élève de terminale, Paul Kirchner, se classe 9e mondial et emporte une médaille d'or, il amène à 27 le nombre de médailles emportées par la France depuis le début de notre participation. Comme bon nombre de nos anciens médaillés, il a depuis rejoint l'association pour former les générations suivantes. Ces bons résultats renforcent la motivation de l'équipe de bénévoles, qui améliore ou crée régulièrement de nouveaux cours, exercices et corrections, et développe le site internet en ajoutant des fonctionnalités (conseils automatisés, système d’entraide, éditeur en ligne...).
En complément de
la formation à distance, 4 stages de
formation d’une semaine sont organisés chaque année pour des publics débutants ou confirmés, dans les locaux parisiens de l’école d’ingénierie
informatique EPITA, sponsor de l’association.
EPITA, école pionnière dans le domaine de l'informatique, soutient la participation française aux IOI depuis la première année en 1996 en finançant l'ensemble des frais associés, notamment l'hébergement des participants aux stages d'entraînement et les frais de transport vers le site de la compétition. C'est également EPITA qui a pris l'initiative de nous proposer de créer en 2004 une association spécialement dédiée à cette activité, à l'origine effectuée au sein de l'association Prologin.
À l’origine destinée à la formation des candidats français pour les Olympiades, la plate-forme est désormais utilisée par de nombreux francophones du monde entier. Les collégiens et lycéens ont ainsi été rejoints par des étudiants, des enseignants ou plus généralement des personnes intéressées par l’apprentissage de la programmation et de l’algorithmique. Une ouverture à d'autres pays est également en cours.
Outre les épreuves de sélection aux Olympiades, des concours “France-IOI” dédiés aux utilisateurs du site sont organisés chaque année. De plus, nous collaborons avec nos homologues australiens de l'AIOC (Australian Informatics Olympiad Committee) pour l'organisation du concours annuel FARIO (French-Australian Regional Informatics Olympiad) entre les meilleurs candidats des deux pays.
Nous incitons également nos utilisateurs à participer aux concours USACO (USA Computing Olympiad), organisé tous les mois pendant l'année scolaire par nos homologues américains, et pour lesquels nous sommes en charge de la traduction française des sujets.
L’association collabore avec l’ENS Cachan et Allistène pour organiser en novembre 2011 la première édition française du Castor Informatique. Ce concours international d’informatique (www.castor-informatique.fr), dont la première édition a eu lieu en 2004 en Lituanie, est désormais organisé dans une quinzaine de pays et attire chaque année plus de 200 000 participants. Sans nécessiter aucun pré-requis en informatique ou programmation, l'objectif de ce concours est de faire découvrir les sciences du numérique aux collégiens et lycéens.

La préparation de contenus et l'organisation de stages sont autant d'occasions de réfléchir à l'efficacité de diverses approches pédagogiques, à la meilleure manière de présenter un concept et même aux techniques permettant de créer des contenus originaux et ludiques. Les Olympiades Internationales sont également l'occasion pour nous d'échanger autour de ces idées avec nos homologues du monde entier, de manière informelle mais aussi par le biais de publications. Les responsables de l'association ont ainsi participé à plusieurs reprises à la conférence organisée lors des Olympiades, notamment pour présenter les articles suivants :
De plus, pour encourager une meilleure collaboration au niveau international, nous avons co-organisé en mai 2010 un atelier de travail réunissant à Dagstuhl, en Allemagne, une dizaine de représentants de pays participant aux IOI. Les résultats de cet atelier ont été présentés dans l'article suivant :
Pour son numéro spécial Algorithmique de l'été 2011, la rédaction du magazine Quadrature a fait appel aux membres de l’association France-IOI. Nous avons répondu à cet appel et rédigé l'ensemble des articles du numéro, abordant des thèmes comme les mariages stables (utilisés pour l’affectation des lycéens aux formations post-bac), l’utilisation d’algorithmes de graphes en finance, l’aléa en informatique ou encore la théorie des graphes implicites.
Enfin, nous participons à la 4ème édition du colloque DIDAPRO (DIDActique des PROgiciels). Les thèmes abordés sont l'enseignement de l'informatique et sa didactique. L'article proposé, "France-IOI : l’apprentissage de l’algorithmique pour tous", est consultable à cette adresse.
Un projet de collaboration avec l’équipe MOCAH de l’Université Pierre et Marie Curie est en cours d’élaboration, un des membres de l’association (Loïc Février) effectuant sa thèse sous la direction de Jean-Marc Labat. Cette collaboration, montée dans le cadre d’un appel à projet de la région Île-de-France, porterait sur l’utilisation de plates-formes automatisées d’apprentissage pour l’enseignement de l’algorithmique dans un cadre scolaire.
Une demande d’agrément auprès du ministère de l'Éducation Nationale est en cours de préparation, et celle-ci nous permettra de promouvoir plus aisément nos activités à destination des établissement scolaires.
De nombreux autres pays participant aux Olympiades ont développé des sites où leurs candidats peuvent s'exercer sur divers exercices d'algorithmique, mais très peu disposent d'un outil de formation aussi complet que celui que nous proposons. Le développement d'une telle plate-forme représente un travail considérable, et les responsables de plusieurs pays sont donc venus vers nous pour discuter de collaborations possibles. Cette collaboration commence par la traduction de notre plate-forme, à laquelle nous avons récemment ajouté la possibilité du choix de la langue. L'Argentine (via l'OIA) a ainsi bien entamé une traduction en espagnol, et l'Allemagne et la Lituanie commencent tout juste.
Hormis les quelques stages que nous organisons chaque année, l'ensemble de la formation de notre public se fait à distance, au travers de notre site d'entraînement. L'essentiel de l'activité de l'association est donc consacré à l'amélioration constante des contenus et des outils qui composent cette plate-forme, et à la réflexion sur les méhodes d'enseignement mises en œuvre. Nous allons présenter ici quelques exemples des outils et des principes pédagogiques que nous avons développés au fil des années.
Le cœur de notre plate-forme est un système qui permet aux élèves de valider les programmes qu'ils écrivent, et ce de manière totalement automatisée. Ils peuvent savoir en quelques secondes s’ils ont correctement résolu l'exercice sur lequel ils travaillent, ou s'ils doivent y réfléchir à nouveau. On s'assure ainsi que chaque concept est réellement compris avant de passer à la suite du cours ou à l'exercice suivant. Valider un exercice ne signifie cependant pas qu'on l'a parfaitement maîtrisé, et une correction détaillée est systématiquement présentée, décrivant les différentes approches qui étaient possibles et expliquant comment la solution pouvait être écrite de manière simple et élégante. Lire les solutions modèles d'exercices sur lesquels on a soi-même travaillé permet de progresser très rapidement. Les entraîneurs sont également là pour faire occasionnellement des suggestions personnalisées aux élèves, leur évitant par exemple de prendre certaines mauvaises habitudes. L’automatisation de la validation des exercices permet également le déblocage de nouveaux exercices ou chapitres au fur et à mesure de la progression.
Tout est mis en œuvre afin que jamais un élève ne soit complètement bloqué sur un exercice et ne finisse par se décourager. Nous sommes très attentifs à ce que la difficulté des exercices proposés soit en progression douce, mais surtout, nous offrons la possibilité aux élèves d'obtenir de l'aide sous différentes formes. Notre expérience montre que les sources de difficultés sur un sujet donné sont souvent les mêmes, et nous proposons ainsi pour chaque exercice des conseils automatiques qui ciblent ces points de blocage les plus courants. Un utilisateur peut, en un simple clic, obtenir un petit coup de pouce automatique qui, sans lui donner la solution, est juste suffisant pour le débloquer et lui permettre de continuer de lui-même. Lorsque cela ne suffit pas, un système d'entraide lui permet de se faire aider personnellement par un entraîneur ou par un utilisateur plus expérimenté ayant déjà résolu l'exercice. Là encore, il ne s'agit pas de donner la solution à l'élève, mais uniquement ce dont il a besoin pour pouvoir continuer à avancer. Nous vérifions que les utilisateurs appliquent ce principe lorsqu'ils en aident d'autres.
Pour rendre l'apprentissage motivant et attrayant, les exercices sont présentés sous la forme d'une petite histoire amusante, mettant souvent en œuvre des personnages que l'on retrouve dans diverses situations d'un exercice à l'autre. On retrouve aussi cet aspect ludique qui motive les élèves, dans le système de validation des exercices, qui rappelle les jeux, souvent addictifs, où l'on doit remplir des missions successives, et valider un certain nombre de niveaux. La mise en avant très claire des exercices validés et de ceux restant à résoudre renforce l'envie de continuer à progresser.
Toujours en reprenant ce qui fait le succès de nombreux jeux, l'élève accumule des points et voit son score augmenter à chaque fois qu'il résout un nouvel exercice, avec la possibilité d'obtenir un bonus lorsqu'il réussit un exercice rapidement, du premier coup et sans aide. Cet aspect ludique fait partie de ce que nous souhaitons continuer à développer, et nous préparons ainsi un système où l'on fait progresser son personnage sur différents critères comme la persévérance, la précision ou l'altruisme. Cela rappelle ainsi certains jeux d'aventure, avec la grande différence que lorsque l'on fait progresser son personnage, on a soi-même réellement progressé.
Pour faciliter l’accès aux débutants, la plate-forme peut être utilisée sans installer de logiciel chez soi, la formation se déroulant entièrement en ligne, grâce à un éditeur de codes sources utilisable depuis son navigateur. Il est ainsi possible de programmer sa solution, de la tester sur les exemples fournis (ou ses propres exemples) puis de soumettre son programme pour évaluation, tout cela en ligne. L’élève peut ainsi commencer à résoudre des exercices en quelques minutes et ce depuis n’importe quel ordinateur connecté à internet. Après un temps, quand on a résolu un certain nombre de problèmes, nous expliquons en détail comment installer et utiliser un environnement de développement sur son propre ordinateur. La maîtrise de ce type d'outils (éditeur, compilateur) fait en effet partie de l’apprentissage.
Internet regorge de contenus et tutoriaux divers dans le domaine de l'informatique. De nombreux cours présentent ainsi la syntaxe et les spécificités des langages de programmation, et l'on peut facilement trouver des descriptions et implémentations de nombreux algorithmes classiques. La quantité et la diversité des ressources disponibles sur internet ou dans les librairies sont telles que l'on peut facilement se sentir submergé.
Ce que propose France-IOI avec son site d'entraînement se différencie de tout cela et est assez unique, tant au niveau du contenu que de la forme. Il ne s'agit pas de proposer un ensemble de cours sur divers langages, mais une formation progressive, complète et cohérente qui se concentre sur la compréhension et la maîtrise des concepts fondamentaux de la programmation et de l'algorithmique, où l'élève est en permanence guidé et accompagné dans son apprentissage.
Si le système d'évaluation automatique des solutions accepte une petite sélection de langages de programmation (tels que le C, C++, Java, Caml, Pascal et Python) et si les cours et solutions sont le plus souvent présentés en langages C++ ou Caml, ce que l'on enseigne n'est pas la syntaxe de ces langages mais une véritable maîtrise des concepts universels de la programmation tels que la notion de variable, de boucle, de tableau, de fonction, etc. dont un langage n'est que le support. Ces concepts peuvent être décrits assez succintement, mais leur réelle maîtrise ne peut s'acquérir qu'après de nombreuses heures de pratique et de mise en œuvre dans des situations variées. C'est ce que permet l'entraînement sur notre sélection d'exercices spécialement conçus pour faciliter cette maîtrise.
Lorsque l'on atteint ensuite les niveaux plus avancés en algorithmique, l'essentiel n'est pas de décrire les classiques tels que l'algorithme de Dijkstra, ou les tables de hachage. Ce qui compte, et sur quoi nous nous concentrons, c'est d'apprendre à l'élève comment analyser un problème, faire des dessins et travailler à la main sur des exemples, chercher à résoudre des versions simplifiées du problème et le tourner dans tous les sens, jusqu'à trouver une solution. Les algorithmes classiques ne sont que des briques de connaissances que l'on acquiert en apprenant à développer sa capacité à résoudre des problèmes algorithmiques.
Les corrections qui accompagnent chaque exercice sont un élément majeur de la formation, car elles présentent non seulement une solution modèle simple et bien écrite, mais décrivent en détail les étapes de la réflexion qui permettent d'aboutir à cette solution. Cet effort sur l'analyse du processus de réflexion nous a permis au fil des années, de mettre au point une véritable méthode de résolution de problèmes algorithmiques, qui est enseignée au fur et à mesure de la formation.
Pour plus de détails sur notre méthode d'enseignement, nous vous invitons à consulter l’article “Teaching Algorithmics for Informatics Olympiads: The French Method” reproduit en annexe.
Sur votre réseau social favori, vous possédez un certain nombre d'amis. Vous pouvez aller sur la page de vos amis afin de savoir combien ils ont d'amis chacun. Le réseau social va également vous indiquer combien d'amis vous avez en commun avec chacun de vos amis. Cependant, vous aimeriez en savoir un peu plus. Plus précisément, vous vous demandez combien il y a de gens qui font partie des amis de vos amis et qui ne font pas déjà partie de vos amis.
Compter à la main prendrait bien trop de temps, donc vous décidez d'écrire un programme pour cela. Votre programme doit prendre en entrée votre identifiant, ainsi qu'une liste de relations d'amitiés, c'est-à-dire une liste de paires d'identifiants de personnes. Il doit ensuite calculer le nombre d'amis de vos amis qui ne sont pas (encore) vos amis.
Nous décrivons ici le projet à la date du 20 septembre 2011.
La dernière version est disponible en ligne sur www.france-ioi.org/lycees/projet/
C'est avec un grand enthousiasme que nous avons accueilli il y a deux ans l'introduction de l'algorithmique dans le programme de mathématiques des lycées. La compréhension des principes de la programmation et de l'algorithmique par les élèves leur permet de mieux appréhender une société où l'informatique est désormais omniprésente. Plus important encore, le mode de raisonnement mis en œuvre lors de l'écriture d'un programme ou de la création d'un algorithme est différent des raisonnements habituellement associés à l'apprentissage classique des mathématiques et des sciences, et son étude élargit la gamme d'outils de réflexion dont disposent les élèves.
Notre enthousiasme initial a cependant fait place à une certaine déception lorsque les élèves de divers horizons que nous cotoyons nous ont fait part de leur sentiment mitigé sur cette introduction et son effet dans leurs classes. Loin d'éveiller un intérêt pour la programmation et l'algorithmique, son enseignement avait souvent tendance à ennuyer les élèves, qu'ils découvrent tout juste ce domaine ou qu'ils soient déjà des passionnés.
C'est en communiquant directement avec des enseignants en mathématiques que nous avons mieux compris la situation et réalisé qu'ils considéraient eux-mêmes ne pas encore savoir comment bien enseigner l'algorithmique. Ils nous ont indiqué qu'ils étaient très demandeurs d'outils qui les aideraient dans cette tâche et, alors que nous avions déjà imaginé la possibilité que notre site puisse être utilisé dans un cadre scolaire, ils nous ont confirmé que notre plate-forme correspondait très bien à leurs attentes.
La préparation d'un ensemble de contenus et exercices dédié à l'enseignement de la partie algorithmique du programme de mathématiques des lycées est rapidement devenue la priorité numéro 1 de l'association.
La plate-forme que nous utilisons pour la formation à l'algorithmique de nos utilisateurs peut-être très rapidement adaptée afin de proposer un contenu s'adressant aux enseignants en mathématiques et à leurs élèves. Ce contenu, constitué de rapides cours et d'un grand nombre d'exercices, assurant une maîtrise des concepts de base de la programmation, puis explorant les utilisations de l'algorithmique dans le cadre des programmes de mathématiques est d'ores et déjà en cours d'élaboration. L'aspect technique de la plate-forme étant déjà en place, nous serons en mesure de proposer un premier ensemble de contenus adaptés dès début Novembre 2011, à la rentrée des vacances de la Toussaint.
La création de ce contenu se fait dès le départ en collaboration étroite avec les enseignants, l'un d'eux ayant d'ailleurs rejoint l'association dès le démarrage du projet. C'est pour eux et pour leurs élèves que nous créons cette nouvelle section de notre site, et nous serons donc très à l'écoute de leurs observations, critiques ou demandes. De nouveaux contenus seront créés régulièrement en tenant compte de leurs suggestions, et nous inviterons les enseignants qui le souhaitent à créer eux-mêmes de nouveaux contenus que nous pourrons intégrer à la plate-forme et mettre à disposition de tous.
Nous tenons à préciser que les membres de l'association sont tous bénévoles, leur seul objectif étant de faire découvrir l'algorithmique au plus grand nombre de jeunes possible. La plate-forme restera accessible gratuitement à tous ses utilisateurs, élèves et enseignants.
L'expérience que nous possédons dans la rédaction de sujets algorithmiques destinés à des débutants et notre étude des programmes de mathématiques nous permet de proposer rapidement un ensemble d'exercices, en rapport avec ces programmes, intéressants algorithmiquement parlant, et ludiques, dans l'esprit de tous nos exercices.
La plate-forme permet la vérification automatique de la validité des programmes des élèves, donc ceux-ci peuvent avoir un retour immédiat sur les programmes et être informés de la présence d'erreurs à corriger. L'enseignant peut se concentrer sur l'aide à apporter aux différents élèves et non sur la vérification fastidieuse de la validité de leurs codes informatiques.
Dès la classe de seconde, on peut constater une grande disparité dans le niveau de connaissances en programmation des différents élèves. Par son système de progression automatisé, la plate-forme permet à chacun de trouver des exercices adaptés à son niveau. Certains élèves pourront ainsi commencer directement les exercices plus mathématiques ou des exercices plus algorithmiques présents par ailleurs sur le site.
Il sera possible aux enseignants de suivre la progression de chacun des élèves ou de la classe entière à travers une page de supervision. Ils pourront vérifier quels exercices ont été faits, voir le niveau atteint par chacun, les difficultés rencontrées, toutes ces données pouvant leur être présentées automatiquement. Il sera aussi facilement possible de suivre les élèves sur plusieurs années.
Le site internet ne demandant aucune installation de logiciel, chaque élève pourra travailler sur les exercices en séance de travaux pratiques mais aussi chez lui (ou au CDI par exemple). L'évaluation automatique et les corrections lui permettront de travailler en autonomie tout en étant sûr de ses réponses. La continuité permise par la plate-forme et la simplicité d'utilisation permet ainsi de donner facilement du travail à la maison et de vérifier qu'il a bien été effectué.
L’aspect ludique de la plate-forme poussera les élèves à progresser rapidement dans la résolution des exercices algorithmiques et mathématiques et nous sommes convaincus qu’ils y prendront rapidement goût.
L'une des principales difficultés lors de l'apprentissage des concepts fondamentaux de la programmation est que, pour écrire et faire fonctionner un programme, il faut non seulement trouver quel algorithme utiliser, mais il faut également exprimer cet algorithme dans un langage purement textuel, sans erreurs. L'ordinateur est impitoyable et force le programmeur à une rigueur absolue, ce qui peut être frustrant pour des débutants qui n'ont pas l'habitude d'une telle sévérité.
Une solution souvent proposée pour éviter cette difficulté consiste à enseigner la programmation à l'aide d'outils graphiques tels que Scratch, Alice, Algobox et bien d'autres. La programmation se fait alors à la souris, en combinant des éléments graphiques, ce qui rend l'erreur de syntaxe impossible.
Notre point de vue est qu'en cherchant à éviter la frustration des jeunes élèves face à l'ordinateur, ces outils ne font que retarder l'apprentissage d'un fait incontournable : l'ordinateur ne se contente jamais d'à peu près, et ne tolère aucune erreur. La programmation graphique ne permettra jamais d'éviter l'oubli de l'incrémentation d'un compteur ou l'inversion d'un opérateur de comparaison. L'apprentissage de la rigueur est donc une étape essentielle, et l'éviter, alors que tout est encore relativement simple, ne fait que le rendre plus difficile et frustrant lorsque les concepts deviennent plus abstraits.
Nous considérons que l'apprentissage de la syntaxe est une très bonne occasion de comprendre en douceur que l'on ne peut pas se contenter d'à peu près face à la machine. La solution que nous proposons est simple et efficace : présenter les éléments syntaxiques un par un, et faire écrire et valider de nombreux programmes à l'élève après chaque introduction d'un nouvel élément syntaxique.
L'élève est ainsi confronté très tôt et très fréquemment au problème de la rigueur, mais en commençant par des programmes d'une seule ligne : l'erreur est identifiée par une simple relecture et une comparaison à la syntaxe donnée en exemple. Au moment de passer à l'élément syntaxique suivant, l'élève maîtrise les éléments précédents, et a donc moins de difficultés à trouver de lui-même ses erreurs. Il prend confiance petit à petit et est mieux préparé au besoin de rigueur de la conception d'algorithmes, qui est plus difficile à acquérir et que les outils graphiques ne pourront jamais éluder.
Notre plate-forme permet la résolution d'exercices et leur validation automatique dans plusieurs langages comme C, C++, Java, Caml, Pascal et Python (la liste s'agrandit régulièrement selon les demandes), et cette liberté du choix du langage existera pour les exercices de la section destinée aux lycées. Le choix d'un langage pour commencer la programmation a une importance toute relative, car les concepts fondamentaux sont les mêmes quelle que soit la syntaxe utilisée. Cependant, si les exercices sont eux indépendants du langage, nous avons choisi de nous concentrer en priorité sur le langage Python pour la rédaction des cours et corrections, car il nous semble particulièrement bien adapté aux débutants :
Il est facile à installer, et disponible gratuitement sur toutes les plate-formes. C'est un langage interprété, qui ne nécessite pas une phase supplémentaire de compilation.
Il est déjà utilisé par les enseignants de lycées et des corrections en Python sont proposées aux exercices d'algorithmique dans plusieurs manuels scolaires.
Sa syntaxe est très claire et simple à lire. Un programme d'une instruction ne contient qu'une ligne : cette instruction. L'indentation obligatoire fait prendre conscience aux élèves que bien présenter un programme est important pour faciliter sa compréhension.
Il est utilisé par les professionnels, et les élèves l'ayant appris pourront continuer leur apprentissage de l'algorithmique en Python sans limite, et l'utiliser pour programmer de véritables applications. Ils pourront par exemple l'utiliser pour leur TPE.
Il permet l'affichage de graphismes, fonctions et autres courbes, ce qui permet aux élèves de visualiser les résultats obtenus par leurs algorithmes. Il peut par exemple s'agir de représenter la convergence d'une suite numérique ou encore la répartition statistique d'un ensemble de valeurs pour étudier visuellement leur distribution.
La partie "Algorithmique (objectifs pour le lycée)" des programmes de mathématiques (en seconde, puis en filière ES et S) propose aux élèves de formaliser, en langage naturel, les algorithmes qu'ils ont déjà découverts au collège et ceux qu'ils découvriront lors de leurs études au lycée. Cette formalisation est alors propice à la création d'un programme informatique mettant en pratique ces algorithmes formalisés, la lecture et l'interprétation d'algorithmes plus complexes faisant également partie des objectifs formulés par ces programmes.
Il est également demandé aux élèves de savoir vérifier leur programmes et contrôler leur validité. Cette vérification peut se faire de plusieurs manières, la plus naturelle étant d'exécuter manuellement le programme sur des exemples. La vérification automatique des programmes, si elle ne remplace pas cette première vérification manuelle, permet d'aider les élèves dans cette tâche en évaluant leurs programmes sur un ensemble de tests couvrant un grand nombre de cas possibles.
L'algorithmique ayant sa place dans tous les champs des mathématiques, les problèmes nécessitant l'écriture de petits programmes doivent donc être en relation avec les autres thèmes du programme de mathématiques (fonctions, géométrie, statistiques et probabilité, logique) mais aussi avec les autres disciplines enseignées ou la vie courante.
Dans le cadre d'une résolution de problème de nature algorithmique, les élèves doivent connaître la notion de variable, d'affectation et être capable d'effectuer un calcul simple, d'évaluer une formule dépendant de ces variables. Ainsi doivent-ils notamment savoir écrire un programme donnant la valeur d'une fonction évaluée sur une valeur donnée en entrée. Ils ont donc besoin de connaître les instructions d'entrée-sortie nécessaires à leur programme pour lire les données sur lesquelles il doivent travailler et pour afficher le ou les résultats demandés.
Dans un second temps, les élèves doivent découvrir la notion de boucle et donc savoir programmer un calcul avec un nombre d'itérations fixé (boucle "répéter"). Une fois cette notion maîtrisée, l'introduction des instructions conditionnelles puis des boucles de type "tant que" leur permet d'aborder des calculs à nombre d'itérations variable. Ils doivent aussi écrire des programmes capables de tester certaines propriétés des données et d'agir différemment selon la valeur de ces propriétés : il s'agit de maîtriser les embranchements conditionnels ("si", "sinon").
Dans un premier temps, au travers d'exercices les plus ludiques possible, les élèves découvriront puis maîtriseront l'ensemble des connaissances requises par le programme. Dans un second temps, un ensemble d'exercices à visée plus mathématique leur sera proposé, ces exercices étant alors répartis par filière (seconde puis première ou terminale, ES ou S) et selon le thème mathématique abordé.
Les 9 concepts suivants, représentant les bases de l'algorithmique et de la programmation tels que définis dans les programmes de mathématiques, seront présentés l'un après l'autre aux élèves et un ensemble complet d'exercices sera proposé afin d'assurer que l'élève maîtrise chacun d'entre eux avant de passer au suivant.
Les premiers exercices proposés permettent la découverte de la programmation en utilisant l'ordinateur comme une calculatrice. Il s'agit de montrer aux élèves comment afficher simplement une valeur et surtout que les opérateurs mathématiques ("+", "-", "*", "/") fonctionnent comme on s'y attend, notamment au niveau de la priorité des opérateurs et du parenthésage. On n'utilise pas de variables à ce niveau.
On montrera dans cette partie comment l'instruction utilisée précédemment pour l'affichage du résultat d'un calcul permet également d'afficher du texte.
De programmes ne comportant qu'une seule ligne, on passe à la présentation du principe de l'exécution séquentielle des instructions d'un programme. Les exercices de cette partie sont prévus pour être graphiques : la liste des instructions à écrire permet de manipuler des objets qui se déplacent et l'on constate visuellement l'exécution dans l'ordre des instructions du programme. Il pourra s'agir d'écrire la liste des instructions permettant de sortir d'un petit labyrinthe ou de résoudre un petit exemple du problème des tours de Hanoï. La visualisation de l'exécution des instructions se fera sous la forme d'une petite animation.
On fait prendre consience aux élèves que les programmes créés précédemment montrent rapidement leurs limites lorsque le nombre d'instructions est important, et surtout lorsqu'elles se répètent à l'identique. La notion de répétition est alors introduite sous une forme simplifiée, où il s'agit de répéter un ensemble d'instructions un nombre fixe de fois, et ce sans utilisation de variable. Elle est mise en application à la fois sous la forme d'exercices graphiques mais également au travers d'affichages de motifs de texte, comme l'affichage d'un rectangle ou d'un damier. Les répétitions simples ainsi que les répétitions imbriquées seront donc abordées par les élèves.
La notion de variable est alors introduite ainsi que le principe de l'affectation d'une valeur à une variable. Cette notion étant parfois difficile à intégrer, un soin tout particulier sera apporté à sa présentation. Son introduction se fera grâce à des exercices graphiques dans lesquels on peut réellement "voir" la case mémoire ainsi que son contenu qui évolue au fil des instructions. Après ces quelques exercices de manipulation, on combinera l'utilisation de variables et de répétitions pour faire des calculs complexes (calcul d'une puissance, somme des entiers de 1 à 100), afficher un compte à rebours ou une table de multiplication.
L'objectif pour l'élève est de maîtriser la notion de variable, de bien comprendre le fonctionnement de l'affectation et de percevoir l'intérêt d'utiliser des variables lors des étapes intermédiaires d'un calcul.
Si les instructions d'affichage ont déjà été présentées au fil des exercices précédents, il est nécessaire de savoir lire des données afin que les programmes puissent interagir avec l'utilisateur. L'accent sera porté ici sur la différence entre modifier les données directement dans le code du programme et les fournir à celui-ci, entre le programme qu'il est nécessaire de corriger à chaque utilisation et celui qui, une fois écrit, est utilisable par tous de manière interactive. Les exercices demanderont par exemple des calculs simples sur les données en entrée, le calcul d'une somme d'entiers, ou l'écriture d'un programme capable d'évaluer une fonction sur une entrée donnée.
Les premiers exercices sur les conditionnelles s'assureront que l'élève comprend le principe et demanderont des comparaisons simples sur les données fournies (par exemple "quelle est la valeur la plus grande ?"), des vérifications ("est-ce un triangle rectangle ?"). Une fois les deux composants "si" et "sinon" maîtrisés, des exercices permettront de combiner les variables, les répétitions et les conditions dans un même programme.
Sur un ou deux exemples, on fera comprendre à l'élève l'intérêt de pouvoir écrire un programme qui s'arrête après un certain nombre d'itérations inconnu à l'avance, ce que ne permet pas le type de boucle qui a été présenté plus tôt. Par exemple, on souhaite pouvoir programmer le jeu du "c'est plus, c'est moins", dans lequel l'utilisateur doit deviner un nombre choisi par le programme. La structure "tant que" est alors introduite puis appliquée sur de nombreux problèmes.
Les conditions étudiées pour le moment sont des conditions simples, sans opérateurs logiques. Le raisonnement logique et la maîtrise des opérateurs "et" et "ou" étant également au programme de mathématiques, ils seront introduits et utilisés par exemple pour afficher un damier de taille quelconque.
Il est important de noter que, si nous avons présenté ici certains exercices en quelques mots, les exercices proposés aux élèves feront tous l'objet d'une histoire amusante présentant le problème. Nous avions précédemment évoqué l’aspect ludique de la plate-forme et nous avons encore une fois parlé de jeux : il nous semble essentiel que les élèves prennent un réel plaisir à développer de petits programmes, à apprendre de nouveaux outils, et le facteur ludique est une grande motivation.
À la suite d'une discussion avec des IA-IPR de l'académie de Versailles, il nous est apparu qu'il était peut-être souhaitable d'aborder deux concepts à la marge du programme : les tableaux et les fonctions. Sans en faire des notions prioritaires pour les lycées, nous mettrons à disposition les contenus pour les enseigner et présenter leur utilité pratique.
À la vue de l'ampleur prise par les statistiques et probabilités dans les nouveaux programmes de la série S (environ un tiers du programme de mathématiques) et des directives qui demandent l'exploitation algorithmique de ces thèmes il paraît naturel d'introduire la notion de tableau.
Celle-ci se présente comme un prolongement de la notion de variable et ne pose pas de grosses difficultés de compréhension alors que son utilité est flagrante. Autant il est possible de se passer de cette notion pour calculer les termes d'une suite ou en faire la somme, pour évaluer une moyenne ou un écart-type, pour étudier numériquement la vitesse de convergence d'une suite, ... Autant elle devient indispensable pour la représentation graphique d'une fonction, pour l'étude graphique d'une convergence, des fluctuations statistiques, la représentation d'histogrammes ou de lois de probabilité. Introduire la notion de tableau permettra donc à l'élève non seulement d'exploiter des données, mais de les produire ou d'analyser la manière de le faire.
La notion de fonction est difficile à aborder dans sa globalité, mais on peut l'introduire progressivement et partiellement. On se restreindra au départ à des fonctions qui ne dépendent que de leurs paramètres en évitant la syntaxe d'accès aux variables globales. On travaillera longuement avec des fonctions dont tous les paramètres sont passés par copie, avant d'aborder le cas des tableaux dont une fonction peut modifier le contenu (les fonctions à effets de bords ne seront pas abordées en dehors de ce cadre très restreint). La notion de fonction récursive ne sera pas présentée dans la section dédiée aux lycées.
L'enseignant reste libre de présenter ou non ces notions à la limite du programme. Les élèves ne seront cependant pas limités dans leur apprentissage, puisqu'ils auront toujours la possibilité de continuer vers des notions plus poussées d'algorithmique, et pourront progresser sur le reste du site, que ce soit dans le cadre du lycée ou sur leur temps libre.
À la lecture des utilisations conseillées de l'algorithmique dans les programmes de mathématiques, on peut voir que tous les champs des mathématiques sont concernés, même si certains sont plus propices à l'écriture de programmes informatiques.
En particulier, le domaine des probabilités et statistiques se prête bien à la simulation numérique par exemple de lois de probabilités simples, de lancers de dés ou de tirages avec remise. La loi des grands nombres peut également être illustrée expérimentalement et l'étude de l'évolution des données permet de parler d'espérance. En première ES on évoque également l'utilisation d'un lissage par moyenne et l'étude de son impact sur la courbe représentant la série étudiée.
L'étude des suites numériques est l'occasion d'écrire de petits programmes permettant de calculer de manière itérative les termes de la suite puis de faire des conjectures qui pourront alors être vérifiées mathématiquement (par exemple la divergence de la suite, notion dont la définition est au programme). L'étude du comportement asymptotique de ces suites amènera naturellement à se poser la question de la vitesse de convergence d'une suite qui pourra être étudiée puis représentée sous la forme d'une courbe, figurant l'écart à la limite en fonction du nombre d'itérations.
Les fonctions et leur étude permettent également de proposer un certain nombre d'exercices, par exemple de représenter
graphiquement certaines fonctions (en calculant les valeurs avec un algorithme) ou en traçant la tangente à une courbe.
La méthode d'Euler, également au programme (filière S), peut être programmée et l'écart avec la courbe de la vraie
primitive peut être étudié. Bien que non explicitement au programme, il peut être intéressant de présenter à cette
occasion le calcul approché d'intégrale (formule du rectangle, du trapèze voire de Simpson) sous le point de vue de la
simulation numérique.
La résolution d'une équation par dichotomie est également proposée et cette technique très importante en algorithmique
pourra être appliquée à d'autres domaines.
En géométrie, un certain nombre de calculs ou de tests (intersection, parallélisme..) peuvent être effectués sous la forme de programmes et en arithmétique (terminale S, spécialité maths) la presque totalité du programme peut donner lieu à des exercices de nature algorithmique. Par exemple, tout ce qui concerne les nombres premiers (test de primalité, Crible d'Ératosthène, décomposition en facteurs premiers) ou les calculs de PGCD et PPCM forment des exercices intéressants.
Enfin, n'oublions pas les autres domaines comme la résolution d'équations ou d'inéquations, l'étude des polynômes du second degré (évaluation, factorisation, formes réduites et canoniques) ou la trigonométrie.
De nombreux exercices peuvent être partagés entre les années et les filières, aussi n'avons nous pas séparé les exercices par année et filière dans notre présentation, plutôt axée sur une vision globale de l'utilisation de l'algorithmique dans un cadre mathématique. Cette séparation sera bien entendue mise en place sur la plate-forme, avec également une répartition des exercices par thèmes.
Dans le cadre de ce document nous avons pris soin de séparer les exercices permettant un apprentissage des concepts fondamentaux de ceux qui sont plus mathématiques. En pratique, des exercices à visée mathématique pourront être utilisés lors de la présentation de ces concepts et il ne sera pas nécessaire de maîtriser tous ceux-ci avant d'aborder les exercices liés au programmes. Pour chaque exercice nous indiquerons en pré-requis les concepts à maîtriser afin de pouvoir l'aborder en tout sérénité.
Nous n'avons pas, jusqu'à présent, évoqué la nouvelle spécialité informatique pour la terminale S qui se mettra en place à la rentrée 2012. Cette spécialité n'étant pas encore enseignée, il nous est difficile d'en parler dès maintenant mais nous ne doutons pas que la plate-forme que nous proposons aux enseignants de lycée puisse s'avérer utile pour cette spécialité, en tout cas pour les thèmes "Langages et programmation" et "Algorithmique". Nous sommes prêts à collaborer avec les futurs enseignants de cette spécialité dans ce sens. Il ne s'agit cependant pas d'un objectif prioritaire pour nous, cette spécialité étant réservée à un petit nombre d'élèves (dans un premier temps en tout cas). Le projet que nous présentons est destiné au plus grand nombre d'élèves possible, dès la classe de seconde.
Le jeu de cartes d'Alice et Bob comporte N cartes, toutes différentes. Ils aimeraient savoir combien de paquets de P cartes différents il est possible de former (l'ordre des cartes dans le paquet n'a pas d'importance, et ils ne forment qu'un paquet à la fois).
Pour
fêter la fin des cours, vous organisez une soirée jeux chez vous et, avec vos amis, vous décidez de jouer à un jeu
de dés. La règle est très simple : chacune des N personnes présentes choisit un nombre puis, tous à la fois, vous lancez
un dé chacun. Vous regardez alors la somme des valeurs des dés et, si quelqu'un avait choisi ce nombre, il gagne.
Vous voulez maximiser vos chances de gagner et pour cela vous souhaitez savoir, pour chaque
nombre possible, à quel point il est intéressant de le choisir.
D'après la légende, lorsque le sage Sissa, créateur du jeu d'échecs, présenta son invention au roi Belkib, celui-ci lui offrit de choisir sa récompense. Le sage très humble, ne demanda qu'un peu de riz, et proposa que le roi fasse déposer un grain de riz sur la
première case, 2 sur la seconde, 4 sur la troisième et ainsi de suite.
Contrairement au roi, vous réalisez que le nombre total de grains de riz placés sur les 64 cases de l'échéquier est énorme.
Vous vous demandez cependant quelle hauteur de riz on obtiendrait si on étalait la quantité totale sur toute la surface du royaume, que l'on supposera comme ayant une superficie proche de celle de la France, à savoir 500 000 km2. On considèrera pour simplifier qu'un grain de riz occupe en moyenne un volume d'1 mm3
La
tour de contrôle d'un nouvel aéroport doit être équipée d'instruments de très haute précision, qui sont susceptibles
d'être perturbés par les installations électriques des environs. En particulier, les ingénieurs sont préoccupés par la
proximité des voies de TGV qui desserviront l'aéroport et des émissions électromagnétiques de ses lignes électriques.
Disposant d'un certain nombre de possibilités de positionnement de la tour de contrôle, l'architecte vous demande
d'écrire un programme qui détermine laquelle de ces positions est la plus éloignée de la voie ferrée. Cette dernière
peut être considérée comme une droite sans limites, dont on vous fournira deux points distincts.
Alice et Bob disposent d'un très grand nombre (on le suppose illimité) de cartes à jouer rectangulaires, toutes de dimensions identiques. Ils désirent les disposer côte à côte, dans le même sens et sans les découper, afin de former un carré. Aidez-les à trouver quelles sont les dimensions minimales de ce carré, en fonction de la taille de leurs cartes.
Vous participez à un tout nouveau jeu télévisé dont le principe est le suivant : une courbe croissante est en train d'être tracée devant vous et vous avez le droit de la regarder pendant 5 secondes, puis on vous bande les yeux et vous devez
alors dire "stop" quand vous pensez que la courbe a atteint la valeur 1 000 000. En étudiant attentivement les émissions
précédentes, vous avez réussi à trouver quelle fonction était utilisée pour générer la courbe. Il s'agit de la fonction
a * exp(x) + b * x3 + c, les entiers a, b et c étant bien sûr différents pour chaque candidat.
Lors de votre passage à l'émission, vous regardez les valeurs de la courbe pendant les premières secondes et vous en
déduisez les valeurs de a, b et c. Ensuite il vous suffit d'estimer au bout de combien de temps la valeur 1 000 000 va
être atteinte pour remporter le million.
Vous devez donc, étant donné la valeur aux temps 0, 1, 2, 3, 4 et 5 secondes estimer le plus précisément possible au bout
de combien de temps le million est atteint.
Faire découvrir et aimer l'algorithmique au plus grand nombre d'élèves possible a toujours été un des objectifs principaux de l'association France-IOI. La plate-forme de formation ouverte à tous et comprenant de nombreux exercices progressifs, l'organisation de concours de programmation ou du concours Castor, la rédaction d'articles (académiques ou de vulgarisation) sont autant de moyens de toucher un public aussi large que possible. L'introduction de l'algorithmique au lycée nous offre une nouvelle possibilité.
Nous avons présenté dans ce document notre conception de l'enseignement de l'algorithmique et la mise en oeuvre de ces idées sur notre plate-forme. Ce site internet, nous nous proposons de le mettre à disposition des enseignants de lycée en y ajoutant un ensemble de cours et d'exercices, adaptés aux lycéens, qui permettent un apprentissage rapide des concepts fondamentaux puis leur application sur des problèmes en lien avec le programme de mathématiques.
Nous espérons pouvoir, dans le futur, collaborer étroitement avec les enseignants en mathématiques afin de prendre en compte leurs remarques et besoins pour améliorer l’outil que nous pouvons leur proposer. Nous souhaitons rappeler que nous prévoyons de mettre en place, sur notre plate-forme, ces exercices dédiés au programme de lycée dans un futur très proche à savoir dès début Novembre 2011, à la rentrée des vacances de la Toussaint.
Ce projet est toujours en cours d'élaboration et nous espérons que vous pourrez par vos remarques et suggestions nous aider à l'améliorer et à le concrétiser le mieux possible. Nous sommes à l'écoute de toute personne portant un intérêt à ce projet et vous pouvez nous contacter par email à l'adresse projet.lycees@france-ioi.org
Merci par avance pour vos remarques et suggestions.
Une fois le projet mis en place, nous espérons que vous pourrez également nous apporter votre soutien et nous aider à le faire connaître auprès des principaux intéressés, les enseignants et élèves de lycée.
Mathias Hiron : entraîneur de l'équipe de France aux IOI depuis 1997, président de l'association, consultant en développement logiciel.
Arthur Charguéraud : ancien candidat, vice-président de l'association, en post-doctorat au Max Planck Institute.
Guillaume Ryder : ancien candidat (1 médaille de bronze), employé chez Google.
Mehdi Bouaziz : ancien candidat (1 médaille de bronze, 1 d'or), élève à l'ENS Paris.
Jacques-Henri Jourdan : ancien candidat (1 médaille de bronze, 1 d'argent), élève à l'ENS Paris.
Benjamin Butin : ancien candidat (1 médaille de bronze), employé chez Google.
Amaury Pouly : ancien candidat, en thèse au LIX (École Polytechnique).
Ismael Belghiti : ancien candidat (1 médaille de bronze), élève à l'ENS Paris.
Loïc Février : en thèse au Lip6 (Paris 6), celle-ci concernant l'enseignement de l'algorithmique et de la programmation, notamment dans le cadre du lycée.
Louis Jachiet : ancien candidat (2 médailles de bronze), élève à l'ENS Paris.
Timothée Lacroix : ancien candidat (1 médaille de bronze), élève à l'ENS Paris.
Paul Kirchner : ancien candidat (2 médailles de bronze, 1 d'or), en classe préparatoire au lycée Louis-le-Grand.
Guillaume Le Blanc : agrégé de mathématiques depuis 1987, actuellement en poste au lycée de la Vallée de Chevreuse.
Teaching Algorithmics for Informatics Olympiads: The French Method.
Disponible à l'adresse http://www.france-ioi.org/lycees/projet/french_method.pdf
France-IOI : l’apprentissage de l’algorithmique pour tous.
Disponible à l'adresse http://www.france-ioi.org/lycees/projet/didapro.pdf
Creating Informatics Olympiad Tasks: Exploring the Black Art.
Disponible à l'adresse http://www.mii.lt/olympiads_in_informatics/pdf/INFOL031.pdf
Get Involved! The IOI Workshop 2010, Its Goals and Results.
Disponible à l'adresse http://www.mii.lt/olympiads_in_informatics/pdf/INFOL066.pdf
Pour un aperçu du type de contenu produit par les membres de France-IOI, nous vous proposons de lire un exemple de sujet présent sur la plate-forme ainsi que sa correction.
Proposé à nos élèves lors du concours France-IOI de Juillet 2006 ce sujet, intitulé "Collier de bonbons", est destiné à
des élèves ayant déjà un très bon niveau en algorithmique. Précisons que les outils utilisés dans sa résolution vont bien au delà de ce que nous visons dans le cadre du projet pour les lycées.
Il est disponible à l'adresse :