Document de travail sur le plan de la formation py-edu-fr-science

Document de travail sur le plan de la formation py-edu-fr-science#

Pour réfléchir à ce qu’on doit mettre dans cette formation#

Cette formation Python avancé pour la science (“science” au sens large) s’adresse à des personnes développant déjà en Python et qui souhaiteraient progresser en programmation.

On sait qu’il peut y avoir des profils assez différents, par exemple :

  • Personnes utilisant Python pour des petits calculs avec Numpy / Pandas (peut être aussi des libs orientées IA) et des visualisations avec Matplotlib (et autres libs de visu).

  • Utilisateurs de Anaconda pas à l’aise avec les environnements Python ou conda.

  • Développeuse / mainteneuse d’un petit paquet lié à un domaine spécifique / une application particulière.

  • Professeur-e “PI” de gros projets voulant mieux comprendre les codes de ces “collaborateurs”.

  • Technicien-ne/ingénieur-e voulant plus utiliser Python pour par exemple créer des applications ou plus utiliser programmatiquement un outil.

ça peut être des collègues de l’ESR, des étudiants, des personnes travaillant dans des entreprises privées, …

Une façon de réfléchir à ce que l’on voudrait mettre dans cette formation est de penser à ce qu’on conseillerait en priorité à de telles personnes pour les aider avec Python et les lancer sur une dynamique de progrès.

Sujets#

  • Bonne maîtrise du langage

  • Compréhension que Python et son écosystème bouge beaucoup (donc utile de rechercher et adopter solutions “modernes”)

  • Calculer versus Programmer, et savoir choisir le bon environnement en fonction de l’activité; exemple: combiner carnets numériques (Jupyter, …) pour explorer et documenter les calculs et modules pour programmer les artefacts requis dans ces calculs.

  • Bon environnement de développement et software engineering (éditeurs, Python project versioning, packaging, testing, linting, formatting)

    • Modern Python packaging (PyPA, history, PEP 517 & 518), conséquences pour mainteneurs et utilisateurs

    • Écosystème conda (Anaconda, conda, conda-forge, mamba, Pixi, évolution licence Anaconda…)

    • Modern Python project managers (PDM, UV, Pixi) et lock files

    • Outils de documentation (Sphinx, MkDocs, …)

  • Bonne maîtrise de Numpy

  • Bonne maîtrise de Pandas simple

  • Bonne maîtrise de Matplotlib en utilisant prioritairement son interface objet (fig, ax = plt.subplots())

  • Connaissance de quelques bibliothèques scientifiques (scipy, xarray, scikits, h5py, h5netcdf, mpi4py, Dask?, Sage?, …) et autres Textual/Rich, Click, FastHTML, Voilà, Streamlit, Taipy…

  • Savoir où chercher et demander.

  • Connaissance des interpréteurs Python et de comment les utiliser

    (CPython, PyPy, GraalPy, MicroPython, …)

  • Compréhension des limitations de Python et des stratégies classiques de contournement

    • nativement pas de compilateur (pour checks et production langage machine optimisé)

    • startup time

    • real time

    • parallélisme et GIL

    • GPU

    • Barrière natif versus Python

  • Gradual typing and type checkers / linters

  • Stratégies d’optimisation de performance séquentielle

    • importance tests

    • importance bench and profiling

    • hot code very concentrated + premature optimization

    • CPython usually fast enough for cold code

    • algos and complexity!

    • avoid useless computations

    • importance compilation for optimized machine code

    • importance locality and arrays, notion of SIMD

    • move the Python/native barrier

    • Numpy vectorized

    • ahead of time compilation (can be through transpilation)

    • JIT compilation

  • Parallélisations

    • GIL (+ note free-threading)

    • concurency versus real parallelization

    • concurency (Asyncio, Trio)

    • intra process versus multi processes

    • threads versus OpenMP

  • Other languages, notes on wrapping and integration

    (Java, JavaScript/TypeScript, C/C++, Fortran, Julia, Rust, Mojo, …)

  • Outils

    • threading

    • multiprocessing

    • Cython

    • Numba

    • Pythran

    • JAX

    • Codon

  • Examples on real algorithms (NBody, DTW, Cort, ?)

  • GPU

    • General introduction

    • Specific to Python (with Numba, PyOpenCL, PyCuda, Taichi, CuPy, JAX, pyvkfft, …)

  • Interface avec les bases de données SQL et No-SQL

  • Python for the web

    • backend: Django, Flask, FastHTML

    • frontend, in the browser: JupyterLite, FastHTML, PyScript, …

  • Future & science fiction

    • Subinterpreters

    • Free-threading

    • Faster CPython and CPython JIT

    • HPy

    • Mojo