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.
Sites (https://stackoverflow.com, …)
lists and forums (python@services.cnrs.fr, https://discuss.python.org/, …)
IA générative : outils, conséquences, comment bien 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
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