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

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

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:


CPython
low-levelhigh-level
memory handled by handmemory handled automatically
statically typeddynamically typed
weak typesstrong types
compiled languagecompiled in byte-code, then interpreted
tedious to install librairiesvery 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
  • 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

The Zen of Python

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