Première année (L3 SIF)
La première année du cursus d'informatique de l'ENS Rennes (également appelé L3 Informatique parcours SIF - L3 SIF) est construit autours d'un tronc commun important et de quelques options plus spécialisées. L'objectif de la première année est d'uniformiser le niveau en informatique et de s'assurer que tous les étudiants du département ont des bases solides.
La tableau suivant récapitule les cours disponibles :
L3 SIF – Semestre 1 | L3 SIF – Semestre 2 | |||
Tronc commun | Options (2 à choisir) | Tronc commun | Tronc commun | Options (1 à choisir) |
ANG1- Anglais 1 | MPI1 - Mise à niveau MPI | ANG2 – Anglais 2 | SYS2 – Architecture et Systèmes 2 | IMG - Image |
SEM1 – Séminaire | INTL – Intégration de Lebesgue | SEM2 – Séminaire | STAT - Statistiques | MPI2 - Mise à niveau MPI 2 |
ALG1 – Algorithmique 1 | DIST - Algorithmique distribuée | STAG – Stage (6 semaines minimum) |
PRG2 - Programmation 2 | CRYPTO - Cryptographie |
PRG1 - Concept des langages de programmation | Opti - Optimisation | ALG2 – Algorithmique 2 | Pédago - Pédagogie | |
FND1 - Fondements | FND2 – Fondements de l’informatique 2 |
TRAN - Transitions | ||
SYS1 - Architecture et Systèmes |
Le reste de cette page détaille les différents modules disponible en première année.
Modules communs semestre 1 et semestre 2
Séminaires d'initiation à la recherche
Cette section comprends les modules d'initiation à la recherche suivants :
- Séminaire 1 (SEM1) - Semestre 1
- Séminaire 2 (SEM2) - Semestre 2
L'objectif des modules d'initiation à la recherche est de former les élèves aux métiers de la recherche. Les deux modules de séminaires permetttent aux élèves d'ouvrir leurs perspectives scientifiques en rencontrant des chercheurs.ses représentant tous les aspects de la recherche en informatique.
Mise à niveau MPI
- MPI1 (MPI1) - Semestre 1
- MPI2 (MPI1) - Semestre 2
- Responsable du cours : David Pichardie
Les modules de MPI proposent une remise à niveau vis-à-vis du programme officiel de CPGE filière MPI. Le contenu couvre ainsi toutes les notions de ce programme qui ne sont pas vues en CPGE MP option Informatique, ou cursus L1-L2 universitaire.
Cette option est fortement recommandée pour tout étudiant issu d'un de ces cursus.
Anglais
Cette section comprends les modules suivants :
- Anglais 1 - Semestre 1
- Anglais 2 - Semestre 2
Les étudiant.e.s suivent des cours d'anglais chaque semaine en fonction de leur niveau.
L3 SIF - Semestre 1
Algorithmique 1 (ALG1)
- Responsable du cours : François Schwarzentruber
- Page web du cours : http://people.irisa.fr/Francois.Schwarzentruber/algo1/
- Description :
L'objectif est un cours d'introduction à l'algorithmique pour un public varié. Le contenu du cours est construit pour les personnes qui ont des familiarités avec le programme MPI (classe préparatoire maths-physique-informatique) voient des choses nouvelles. Le cours est abordable aussi pour des personnes qui n'ont pas suivi le programme MPI. Le but est de savoir rédiger des démonstrations mathématiques de terminaison/correction d'algorithmes. Pour cela, on s'appuie sur des thèmes variés comme : diviser pour régner avec la FFT, l'étude de structures de données, les flots dans les graphes, la programmation linéaire, l'apprentissage et la NP-complétude.
Concepts des langages de programmation (PRG1)
- Responsable du cours : David Baelde
- Description :
L'objectif du cours est de compléter l'apprentissage du langage OCaml et de la programmation fonctionnelle en général, mais surtout de découvrir les principaux concepts qu'on retrouve dans tous les langages de programmation. Comprendre ces concepts et savoir les identifier permettra par la suite aux étudiants d'apprendre plus facilement de nouveaux langages, et même d'en concevoir.
Concrètement, le volet "introduction à la théorie des langages de programmation" aborde le lambda-calcul, la sémantique opérationnelle, ainsi que le typage. Sur un plan plus pratique, le cours traite des mécanismes de structuration à large échelle comme le système de modules d'OCaml, la gestion mémoire automatique, ou encore des technique de programmation fonctionnelle avancée comme les continuations ou la défonctionalisation.
Langages Formels et Calculabilité (FND1)
- Responsable du cours : Gilles Lesventes
- Page web du cours :https://foad.univ-rennes.fr/course/view.php?id=1011252
- Description :
Ce cours est un approfondissement des notions de théorie des langages formels vue en classes préparatoires et une introduction à la calculabilité.
Nous étudierons successivement la classe des langages rationnels puis la classe des langages algébriques avec les outils qui leur sont associés (expressions rationnelles, grammaires, automates finis ou automates à pile).
La théorie de la calculabilité cherche à identifier la classe des fonctions qui peuvent être calculées à l'aide d'un algorithme. Une bonne appréhension de ce qui est calculable et de ce qui ne l'est pas permet de voir les limites des problèmes que peuvent résoudre les calculateurs.
La notion de fonction calculable sera rattachée à la notion de résolution de cette fonction par un modèle de calcul particulier, la machine de Turing. On introduira un autre modèle de calcul, celui des fonctions récursives et on montrera sommairement leur équivalence.
Architecture et Systèmes (SYS1)
- Responsable du cours : Martin Quinson & Guillaume Didier
- Page web du cours : https://mquinson.frama.io/ensr-arcsys1/
- Description : Ce cours est conçu pour donner aux élèves issus d'une classe préparatoire en MP ou MPI une bonne maîtrise du langage C, et une bonne compréhension des réseaux informatiques (pile OSI et pile TCP/IP). Il constitue de plus une première introduction rapide à l'assembleur et aux concepts et défis clés des systèmes d'exploitation. Ce module est centré sur l'acquisition des concepts plus que sur la maîtrise des technologies, même si la pratique tient une place importante. Après avoir suivi ce cours, vous saurez :
- Écrire et debugger des petits programmes en C, avec tous les éléments principaux du langage (y compris les sockets) ;
- Survivre au terminal UNIX et y utiliser les 5 ou 6 commandes de base.
- Vous connaîtrez le modèle en quatre couches d'Internet, avec une bonne compréhension générale du fonctionnement des principaux algorithmes et protocoles des couches 2, 3 et 4 (la couche 1 n'est pas abordée).
Intégration de Lebesgue (INTL)
- Responsable du cours : François Bolley
- Description : On étudie les notions de théorie de la mesure (tribus, tribus boréliennes et mesures positives), on construit l’intégrale de Lebesgue par rapport à une mesure puis on en étudie les propriétés et on en met en avant la force, notamment par les liens avec l'intégrale de Riemann et les théorèmes de convergence monotone et dominée, et son utilisation avec notamment les espaces de Lebesgue, la transformation de Fourier et la convolution.
Algorithmique distribuée (DIST)
- Responsable du cours : Davide Frey et George Giakkoupis
- Page web du cours :
- Description : This course introduces fundamental aspects of distributed computing, including communication and coordination, locality, symmetry breaking, fault-tolerance, and asynchrony. In particular, in this course we will explain the key challenges of distributed computing; describe the main models; present fundamental distributed problems, including consensus, leader election, clock synchronization, mutual exclusion, and various distributed graph problems; describe classic distributed algorithms for these problems; analyze their correctness and complexity; and also provide lower bounds and impossibility results highlighting the limitations of distributed algorithms. The focus of the course will be on theoretical foundations, but there will also be a lab with a implementation assignment.
Optimisation (Opti) et Algèbre
- Responsable du cours : Baptiste Huguet et Felix Ulmer
- Description :
- optimisation :
Ce cours présente l'étude des problèmes d'optimisations. Il s'articule
autour de trois principales questions :
1) l'existence de solutions,
2) la caractérisation des solutions et
3) l'approximation algorithmique de ces solutions. Les problèmes d'optimisation étudiés
sont de trois sortes : problèmes sans contraintes, contraintes de type
égalités et contrainte de type inégalités. Pour chacune de ces
familles, une approche appropriée est développées.
- algèbre :
- Corps finis et polynômes sur les corps finis
- Cryptosystème El Gamal sur les corps finis
- Cryptosystème El Gamal sur les courbes elliptiques (très très brève introduction)
- Codes correcteurs d'erreurs, codes de Reed-Solomon, codes BCH
- Cryptographie avec les codes correcteurs: Cryptosystème Mc Eliece.
L3 SIF - Semestre 2
Algorithmique 2 (ALG2)
- Responsable du cours : François Schwarzentruber
- Page web du cours : http://people.irisa.fr/Francois.Schwarzentruber/algo2/
- Description :
Dans ce module, sont abordés des notions d'algorithmiques avancées. Le but est toujours de savoir formaliser des notions utilisées en algorithmique et d'écrire des démonstrations mathématiques. Les sujets sont variés : algorithmes dans les solveurs SAT, programmation linéaire entière, théorème de dualité en programmation linéaire, algorithmes d'approximation, algorithmes probabilistes, dérandomisation, complexité paramétrée, algorithmes en ligne, algorithmes quantiques.
Logique (FND2)
- Responsable du cours : David Baelde
- Description :
La logique formelle, née des préoccupations de mathématiciens au début du XXIème siècle, occupe aujourd'hui occupe une place centrale en informatique, notamment via les multiples langages de modélisation et de spécification qu'on y utilise. La logique n'est pas un langage unique mais le champ d'étude d'une multitude de langages qu'on conçoit, analyse, implémente...
Le cours introduit les concepts fondamentaux de la logique informatique, à travers l'étude approfondie de la logique classique propositionnelle et du premier ordre: syntaxe, sémantique, systèmes de preuve notamment en calcul des séquents, preuve automatique via la résolution, théorèmes de compacité, de Herbrand, de complétude...
Architecture et Systèmes 2 (SYS2)
- Responsable du cours : Steven Derrien
- Page web du cours : https://foad.univ-rennes.fr/course/view.php?id=1009204
- Description : La première partie du cours étudie les principes de fonctionnement des circuits numériques ainsi que leur rôle dans la mise en oeuvre d'un calculateur à jeu d'instructions. Une fois ces notions posées, le cours s'intéresse aux relations liant les composantes logicielles et matérielles d'un système informatique. Y est abordé la notion de langage machine, de gestion de mémoire (pile, tas) et d'entrée/sorties. Dans une seconde partie, le cours aborde les principes et techniques utilisées pour améliorer les performance et l'efficacité énergétique des architectures matérielles. On y abordera entre autre les notion de hiérarchie mémoire, de parallélisme, etc..
Statistiques (STAT)
- Responsable du cours : François Schwarzentruber
- Page web du cours : https://people.irisa.fr/Francois.Schwarzentruber/stat/
- Description :
L'objectif du module est d'avoir des bases en théorie des probabilités et statistiques. Il s'agit de savoir rédiger des démonstrations mathématiques simples impliquant des probabilités. Il s'agit aussi d'apprendre à réaliser des simulations et tests statistiques en Python. Nous verrons des exemples illustrant diverses lois de probabilité. Nous illustrerons les grands théorèmes comme la loi des grands nombres et le théorème centrale-limite. Nous abordons les estimateurs et le clustering. Le cours termine avec le test du chi2.
Programmation 2 (PRG2)
- Responsable du cours : Martin Quinson
- Page web du cours : https://mquinson.frama.io/ensr-cpp/
- Description : L'objectif du module est de donner une bonne maîtrise du langage C++. Le temps imparti ne permet pas de couvrir l'intégralité de ce langage si vaste et complexe, mais nous couvrirons les bases du langage (STL, flux, templates, surcharge d'opérateurs), la norme C\++11 (RAII, smart pointers) et nous aborderons quelques points de la norme C\++23 (ranges). Nous verrons également comment organiser un projet selon les cannons de la programmation orientée objet (polymorphisme, dispatch, covariance, classes et héritage), ainsi que l'implémentation classique de ces concepts en C++ (vtable, name mangling et schémas mémoires). Si le temps le permet, nous aborderons des notions plus avancées de génie logiciel (test, intégration continue).
Image (IMG)
- Responsable du cours : Emmanuel Caruyer
- Page web du cours : http://emmanuelcaruyer.com/imagerie-numerique.php
- Description : Le cours présente une introduction au traitement numérique des images. Une première partie explore les différentes représentations (transformée de Fourier, ondelettes, ...) et l'intérêt de ces représentations pour le filtrage, la compression ou l'échantillonage parcimonieux. Une seconde partie s'intéresse aux méthodes variationnelles pour la restauration des images ou la résolution de problèmes inverses. Enfin, la notion d'image est étendue à des signaux dont le support a une topologie différente, telle que la sphère ou les graphes.
Cryptographie (CRYPTO)
- Responsable du cours : Adeline Roux-Langlois
- Description : L’objectif de ce cours est de proposer une introduction à la cryptographie symétrique et asymétrique, et de définir les primitives cryptographiques classiques telles que le chiffrement et la signature, ainsi que leur sécurité. Nous aborderons en particulier :
- les notions de chiffrement symétrique, MAC et fonction de hachage,
- les notions de chiffrement asymétrique, la sécurité IND-CPA et les constructions classiques RSA, ElGamal et le chiffrement de Regev, ainsi que leurs preuves de sécurité.
- les signatures numériques.
Stage (STAG)
- Responsable du cours : Martin Quinson
- Description : L'objectif de ce module est de préparer votre recherche de stage de recherche de fin d'année. Nous aborderons ensemble les différents laboratoires pouvant vous accueillir, les conditions administratives et matérielles d'un stage réussi, puis nous vous accompagnerons dans la recherche d'un stage à proprement parler. Enfin, nous préparerons la soutenance de stage que vous ferez pour conclure ce stage, pendant la semaine de rentrée en début de votre M1.
Mise à jour le 6 février 2024