Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🇬🇧 🇫🇷

Plus d'informatique

Si tu as une formation scientifique, mais pas spécialement informatique, tu te dis peut-être parfois que tu manques d'un bagage général, que aimerais comprendre ce qu'il y a sous le capot parce que ça te permettrait de mieux comprendre tes programmes. Les sujets de cette section sont destinés à te donner les connaissances informatiques qui te permettront de mieux raisonner sur la robustesse ou les performances de ton projet.

Sujet : Les langages de programmation : comprendre une diversité

Prérequis:

  • Tu écris des scripts et du code.
  • Tu te demandes pourquoi il y a autant de langages de programmation différents.
  • Tu te demandes comment ils fonctionnent et comment, au fond, ils font fonctionner ton ordinateur.
  • Tu te demandes quelles sont leurs différences et ce qu'elles veulent dire.

À propos:

  • Structure du paysage des (nombreux) langages de programmation.
  • Architecture de la machine : disque dur, RAM, CPU.
  • Architecture du processeur : registres, calculs électroniques, assembleur.
  • Compilateurs et optimisation.
  • Interpréteurs et runtime.
  • Représentation mémoire et types de données.
  • Systèmes de typage : statique, dynamique.
  • Gestion de la mémoire : allocations et pointeurs.
  • Ramasse-miettes et examens d'emprunts.
  • Approfondissement/Discussion de quelques exemples de langages:
    • Python
    • Shell: bash/zsh/fish..
    • Julia
    • C/C++
    • R
    • Rust

En quête de performances

Sujet 1 : Structures de données et complexité algorithmique

Prérequis:

  • Structure basique des ordinateurs / des programmes (voir ci-dessus).
  • Tu te demandes pourquoi certaines opérations sont bien plus efficaces que d'autres.
  • Au delà des simples tableaux, tu te demandes comment des données structurées peuvent être représentées par un ordinateur : graphes, arbres, recombinaisons ancestrales..

À propos:

  • Agencement mémoire et structures de données.
  • Pointeurs, tableaux, listes chaînées, arbres explicites / implicites..
  • Algorithmes et complexité : constante / linéaire / polynomiale / logarithmique / exponentielle..
  • Parcours de données, indexation, tri..
  • Exemples avec ton langage de programmation préféré.

Sujet 2: Optimisation bas-niveau

Prérequis:

  • Structures de données et complexité algorithmique (voir ci-dessus).
  • Tu penses que certains programmes ne peuvent être accélérés que si tu te plonges profondément dedans.
  • Tu rêves d'en savoir plus sur le détail des architectures CPU.
  • Ça te convient d'utiliser des logiciels compliqués d'analyse de performance.

À propos:

  • Resources: algorithmica.org, chez bgregg, chez dendibakh.
  • À l'intérieur du CPU : chaînage, prédiction de branche, caches mémoire.
  • Vectorisation, élision de branche, localité mémoire, parallélisme (derniers recours).
  • Outils de profilage : échantillonnage, évènements, méthodologie.
  • .. on s'y plonge plus encore pour apprendre ensemble ;)