L'informatique à Polytechnique

Les deux premières années

Notre but principal est d'amener un maximum de polytechniciens jusqu'à ce que nous considérons être le niveau minimum de connaissances en informatique. Pour ce faire, il faut gérer :
  1. l'hétérogénéité des élèves dans ce domaine à l'entrée de l'école et pour une majorité d'entre eux, leur quasi-analphabétisme en informatique ;
  2. la particularité de l'informatique d'être à la fois comme les mathématiques, une science et un art de l'artificiel, mais d'avoir aussi comme la physique, la chimie ou la biologie des aspects très concrets ;
  3. le problème de la masse d'élèves ;
  4. et bien sûr les contraintes de l'emploi du temps.
Compte tenu de tout cela, nous ne pouvons aujourd'hui amener tous les élèves à ce que nous jugeons être le minimum de connaissances. Notre programme est organisé pour en amener le maximum. Il faut souligner qu'il est malheureusement difficile d'agir sur une les vraies causes du problème, les programmes du secondaire et des classes préparatoires.

En quoi consiste ce niveau : Il inclut la compréhension des fondements de l'algorithmique, la programmation, la théorie de la calculabilité ; une connaissance de base du fonctionnement et de l'architecture des systèmes informatiques ; et, cela va de soi, une maîtrise d'outils essentiels comme le traitement de texte, le réseau (courrier et recherche d'information), les tableurs. Il faut insister sur le spectre très large de cette connaissance qui va, en caricaturant, du théorème d'incomplétude de Goedel à savoir publier une page sur le Web.

Pour arriver à ce niveau, nous proposons une voie rapide et une voie plus progressive. (Voir schéma). Les différents cours de ces deux premières années sont :

  1. Informatique 1A : Introduction à l'informatique
  2. Informatique 1B : Les bases de la programmation et de l'algorithmique
  3. Informatique 2A : Les bases de la programmation et de l'algorithmique
  4. Informatique F: Fondements de l'Informatique
La Voie Progressive consiste en Informatique 1A, Informatique 2A, Informatique F; et la Voie Rapide en Informatique 1B, Informatique F.

Bien sûr, on ne peut garantir dans l'emploi du temps actuel que tous les élèves iront jusqu'à Informatique F. Tous auront au moins fait Informatique 1 (A ou B), et d'autres 2A ou 2B. Les cours 1B et 2A sont presque identiques. Le cours 2B devrait permettre à un nombre encore plus important d'élèves de se familiariser avec l'informatique à leur propre vitesse.

Informatique 1A

Ce cours s'adresse à des élèves ayant peu ou pas de connaissances en informatique.

Informatique 1B

Ce cours s'adresse à des élèves ayant déjà des connaissances en informatique du niveau de Informatique 1A ou acceptant de combler certaines lacunes par du travail personnel. Le programme est pratiquement celui d'Informatique 1A, mais en accéléré pour permettre aux élèves d'aller plus loin.

Informatique 2A

Ce cours consiste à amener les élèves au niveau de fin d'Informatique 1B. Il s'agit principalement de couvrir des notions un peu plus avancées de programmation. Ce cours a un aspect plus concret que Informatique 1B et comprend un mini projet.

Informatique 2B

Informatique F

Pour beaucoup d'élèves (les non-informaticiens), ce sera leur dernier cours en informatique. Il faudra donc compléter leur vision générale du domaine pour aboutir aux notions d'informatique qu'un ingénieur doit connaître actuellement.


La troisième année

Cette année doit permettre un approfondissement en informatique, et s'adresse aux élèves intéressés par l'informatique. Elle s'appuie sur deux majeures d'informatique: Informatique 3A et Informatique 3B. Les cours de ces majeures seront guidés par les principes suivants :

Majeure 3A (1er semestre de 3ème année)

2 cours obligatoires: 1 cours parmi les 2 suivants: 1 cours d'approfondissement

Majeure 3B (2ème semestre de 3ème année)

2 cours obligatoires: 1 cours parmi les 2 suivants: 1 cours d'approfondissement Quelques exemples possibles de [CS1] et [CS2] sont cryptographie, réseaux d'ordinateurs, Logique et programmation, Intelligence artificielle, Optimisation, Circuits digitaux, théorie des graphes, compilation avancée, algorithmique géométrique. Le choix proposé dépendra de multiples critères comme la disponibilité des enseignants.

Comme référence pour ces cours, on peut à la fois se repérer Curriculum 91 de l'ACM, ou à la liste suivante (non exhaustive) de liens:

JJ: il faudrait compléter, MERCI!

Contenus des cours

  • [AR] Architecture Von Neumann, etc
    Référence: Hennessy/Patterson
  • [AT] Automates finis, automates à piles, classification de Chomsky, machines de Turing, exemples de problèmes indécidables, fonctions récursives de Kleene, théorèmes de récursion, théorème de Rice, thèse de Church, machines non-déterministes, classe NP, P-space, exemples élémentaires de réductions.
    Référence: Kozen, Hopcroft/Ullman
    JJ: autre manière de faire ce cours, prendre Pascal/Java à la place des machines de Turing, mais ca risque de ne pas être facile
  • [PL] Machines virtuelles, représentation des types de données, contrôle, typage, partage, données modifiables, gestion mémoire, sémantique, paradigmes de programmation.
    Références: Sethi, Gunter, Mitchell, Reynolds, Tennent, Winskel
    JJ: il me faut plus de réflexion pour comprendre l'articulation entre apprentissage d'un langage (ML) et une théorie simple suffisamment générale pour s'appliquer à d'autres langages; aller vers Prolog me parait demander un investissement théorique dément... pour l'intéret que ca représente..
  • [DC] Protocoles et généraux byzantins...
    Références: Tannenbaum, Lynch
    JJ: help, help!!
  • [OS] Allocation de ressources,
    Références: Tannenbaum, Silberchatz
    JJ: faut regarder ces livres
  • [AA] Algorithmes NP,
    Références: Cormen, Garrey/Graham
    JJ: help, tout en étant assez précis!!
  • [DB] SQL, langages de requêtes, modèle relationnel, et quoi??
    Références: Abiteboul1, Abiteboul2, Ullman
    JJ: help, help, help, objets + tableaux 2D!!
  • [CO] langage machine, analyse lexicale, analyse syntaxique, syntaxe abstraite, portée des variables, blocs d'activation, génération de code à 3 adresses, blocs de base, allocation de registres, ordonnancement et sélection des instructions.
    Références: Aho/Sethi/Ullman, Appel
    JJ: demander à Didier