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é
- 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.
- 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
- 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..
- 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
- 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.
- Resources: algorithmica.org, chez
bgregg, chezdendibakh. - À 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 ;)