Bienvenue dans le cours de programmation !
Equipe pédagogique
- Lison Blondeau-Patissier
- Alice Brenon
- Augustin Laouar
- François Schwarzentruber
prénom.nom@ens-lyon.fr en remplaçant ç par c
Ces notes de cours sont écrites au fur et à mesure par François Schwarzentruber.
Remerciement
Je tiens à remercier Michele Pagani pour son soutien, ainsi que les chargés de TP de l'année dernière : Alice Brenon et François Pitois. François a fourni un effet considérable pour réorganiser les feuilles de TP.
Quand ?
- Cours/TP mercredi matin de 10h15-12h15
- TP d'approfondissement, mardi 8h-10h 130/E001
Evaluation
- Un TP noté sur place, créneau habituel du TP, une des semaines
- Projet sur 3 semaines à un moment de l'année
- Examen final la semaine du 12-16 janvier 2026
- Une activité extra par groupe de 2-3. Par exemple :
- Projet Wikipedia (écrire/traduire/illuster des articles)
- Projet rédaction de quizz / création d'un jeu de cartes sur la programmation
- Présentation d'une notion en cours
Pourquoi ce cours ?
Programmer = écrire des programmes qu'un ordinateur peut exécuter.
- Pour vous :
- Vous serez chercheur ou chercheuse :
- Besoin de programmer des prototypes de recherche
- Participer à des développements logiciel de grande envergures (OCaml, Rocq, outils de vérification, librairie de bio-informatique etc.)
- Vous serez enseignant ou enseignante :
- Vous allez programmer des outils pour vos cours
- Vous allez enseigner la programmation
- Dans votre propre formation, vous serez amené à programmer :
- Besoin en programmation système : langage bas niveau, assembleur et C
- Besoin en apprentissage : Python et tensorflow
- Besoin en algorithmique : comprendre les structures de données
- Besoin en logique / KR / bases de données : solveurs, requêtes, etc.
- Besoin en mathématique : calcul formel, simulation numérique, etc.
- Besoin en robotique
- Vous serez chercheur ou chercheuse :
Enjeux
- Besoins
- Spécifique à une machine VS Générique
- Besoin de prototyper (le temps de développement compte)
- Besoin d'avoir un programme sûr (fusées)
- Besoin d'être très facile à utiliser
- Besoin d'être maintenable
- Besoin de travailler à plusieurs
- Besoin d'être facilement déployable
- Outils
- Langages
- Langages de bas-niveau : assembleurs, C, Rust
- Langages impératifs : fais-ci, fais-ça
- Langages fonctionnels : uniquement des applications de fonctions et donc pas d'effets de bord
- Langages logiques
- Langages de requêtes : SQL, SPARQL (pour wikidata)
- Langue naturelle avec des LLMs
- Bibliothèques
- Pour les maths : numpy
- Pour l'apprentissage : tensorflow
- Pour les contraintes : programmation linéaire, SAT, CSP
- Gestionnaire de paquets pour les bibliothèques : cargo en Rust, pip en Python, etc.
- Gestionnaire de versions : git
- Déployement : Docker, Kubernetes
- Vérification de programmes :
- Tests unitaires : pytest
- Model checking : esbmc
- Assistant de preuve : rocq
- Langages
Contenu du cours
This course covers the C programming language and Python
.
Motivation: why studying C and Python?
Cool to study both
With C and Python we cover various aspects of programming:
C | Python |
---|---|
low-level | high-level |
memory handled by hand | memory handled automatically |
statically typed | dynamically typed |
weak types | strong types |
compiled language | compiled in byte-code, then interpreted |
tedious to install librairies | very easy to install librairies, via pip <3 |
Noticeably:
- Possible to do bindings C/Python
- Actually many Python librairies are written in C, C++ etc.
- They are both successful languages
- They are languages used at agrégation d'informatique
Why C?
- C is simple (KISS!)
- With C, you will understand how your computer works
- Important for your system and architecture courses
- C is still used for system development (but not so much!)
- The syntax of C is in many languages
- A way to understand Rust, C++... and actually programming in general (and Tensorflow is coded in C++)
Why Python?
- Python is really really really used everyhere (data science, machine learning, software development, backend, etc.)
- Python has good libraries
- Django: Tutorial
- Python is elegant
- Python steals good features from other languages (Haskell, object-programming languages)
- Python is used in education
- A way to understand OOP, Javascript, other script languages
- Python has a strong community
Good practice
- git
- tests
- bonnes structures
- commentaires (spécifications)
- good variable names, etc.
- encapsulation
- abstraction
Exercices
- Collect few software or libraries you use and look in which languages they have been developped
- Read code of the favorite software