01 75 60 34 00 | conseil@ensae.fr | Prenez RDV |

Programmation avec Julia

LANGAGES & LOGICIELS 2 jours (12 h) Initiation 890 € HT

Objectifs pédagogiques

  • Manipuler une session de travail Julia
  • Comprendre ce qui distingue Julia des autres langages tels Python et R
  • S’initier à la programmation Julia
  • Se familiariser à l’écosystème des packages Julia prioritairement dans le cadre des sciences des données

Programme détaillé

Premiers pas en Julia 3h

  • Présentation et installation de Julia
  • Prise en main avec présentation des divers environnements de travail :
    • console
    • package Visual Studio
    • notebooks Pluto.jl, jupyter (via IJulia.jl)
  • Découverte du gestionnaire unique des packages Julia

Présentation des concepts de programmation spécifiques à Julia 3h

  • Découverte du paradigme tout en UN langage (la principale originalité par rapport à ses concurrents Python et R)
  • Performance grâce à la compilation JIT
  • Arborescence des nombreux types couplée au mécanisme de programmation “multiple dispatching” (concept de programmation plus général que la programmation OOP)
  • Langage de type LISP (comme le R et à la différence de python)
  • Interaction facile avec d’autres langages (C, C++, Python, R, …)

Session de type sciences des données 3h

  • Manipulation de données
  • Initiation aux graphiques
  • Introduction des graphiques interactifs
  • Premières analyses statistiques

Divers compléments 3h

  • Développer son package en Julia
  • Quelques comparaisons avec ses concurrents directs Python et R
  • Tour d’horizon des principaux domaines où Julia est utilisé

Public visé

Toute personne souhaitant acquérir les bases de Julia, notamment ceux évoluant dans le monde de la data : Data Scientists, Data Analysts, Data Engineers…

Prérequis

Sans être obligatoire, des notions de base en programmation ainsi que des connaissances de base en techniques statistiques sont un plus. Idéalement, être déjà utilisateur soit de R soit de Python.

Approche pédagogique

Moyens pédagogiques
Exposé théorique de concepts Applications pratiques sur ordinateur Échanges sur les pratiques et expériences des participants Suivi pédagogique individualisé Temps de questions / réponses Exercices, quiz, etc.
Méthodes pédagogiques
Méthode expositive Méthode démonstrative

Julia et le problème des deux langages

En calcul scientifique, il a longtemps fallu choisir entre un langage interactif et agréable, comme Python, R ou MATLAB, mais lent dès qu’on écrit une boucle, et un langage compilé, comme C ou Fortran, rapide mais laborieux. La pratique courante consiste à prototyper dans le premier puis à réécrire les parties critiques dans le second : c’est le « problème des deux langages ». Les bibliothèques NumPy ou les packages R les plus rapides sont d’ailleurs écrits en grande partie en C, C++ ou Fortran.

« Parce que nous sommes gourmands » (2012)

Le 14 février 2012, Jeff Bezanson, Stefan Karpinski, Viral Shah et Alan Edelman publient sur le blog du projet « Why We Created Julia ». Ils y réclament « la vitesse du C avec le dynamisme de Ruby », la commodité de R pour la statistique, celle de MATLAB pour l’algèbre linéaire, et résument : « parce que nous sommes gourmands ». La version 1.0, qui garantit la stabilité du langage, sort en août 2018. En 2019, Bezanson, Karpinski et Shah reçoivent le prix James H. Wilkinson, qui récompense tous les quatre ans un logiciel de calcul numérique.

Une version compilée pour chaque type

Julia compile chaque fonction au moment de son premier appel (compilation just-in-time, via LLVM), en une version spécialisée pour les types des arguments reçus. La méthode exécutée dépend du type de tous les arguments, et pas seulement du premier comme dans la programmation orientée objet classique : c’est le multiple dispatch.

struct Cercle
    r::Float64
end

struct Rectangle
    l::Float64
    h::Float64
end

aire(c::Cercle) = π * c.r^2
aire(r::Rectangle) = r.l * r.h

aire.([Cercle(1.0), Rectangle(2.0, 3.0)])   # [3.14159…, 6.0]

Chaque appel est dirigé vers la bonne méthode et compilé pour elle. Un package peut ainsi ajouter une méthode à une fonction définie ailleurs, pour ses propres types, sans modifier le code d’origine : c’est ce qui permet aux packages Julia de se combiner facilement.

Le revers : le temps du premier appel

Compiler a un coût. Le premier appel d’une fonction, ou le premier graphique d’une session, attend la fin de la compilation. Ce délai (time to first plot) a longtemps été le principal reproche fait à Julia ; depuis la version 1.9 de mai 2023, les packages conservent leur code machine compilé, ce qui le réduit fortement. La vitesse n’est pas non plus automatique : un code dont les types varient en cours d’exécution perd l’essentiel de son avantage, et une opération NumPy vectorisée, déjà exécutée en C, n’est pas plus lente que son équivalent Julia. Le gain est le plus net quand le calcul ne se vectorise pas : boucles, simulations, algorithmes itératifs.

Pour qui vient de Python, la formation Python initiation présente l’écosystème auquel Julia est le plus souvent comparé.

Voir aussi

Autres formations
Autres