Le langage C pour le curieux
Ce livre est un cours du langage C. Il essayera d’expliquer en profondeur les aspects de ce langage et dans une seconde partie abordera horizontalement de nombreux domaines tangents au langage C, parmi ceux-ci l’algorithmie, l’industrialisation, les mathematiques necessaires au domaine algorithmique ou à la programmation “graphique”. Voyez apprendre le C en une heure pour une version abrégée.
Concepts de base
Savoir lire et écrire un programme C.
- Utilité du C
- Historique du C
- Premiers programmes
- Afficher du texte, des nombres
- Calculs, opérateurs arithmétiques
- Mémoire, types
- Expressions
- Structures de controle
- Fonctions avancées
- Boucles
- Valeurs litérales, transtypage ou cast
- Pointeurs
- Tableaux
- Structures, unions et énumérations
- Chaines de caractères, texte
- Préprocesseur
- Mémoire dynamique
- Listes chainées
- Erreurs les plus courantes
- Librairie standart
- Ressources et bibliographie
Concepts avancés
Elaborer des programmes C de qualité.
- Tableaux dynamiques : flexible length arrays
- VLA et Matrices
- Blocs anonymes et réclamation de ressources
- Usage avancé du goto
- Priorité des opérateurs
- Valeurs littérales avancées
- Types avancés, typedef
- Points de sequence
- Maitriser les entrees sotries printf(), scanf() et strto_()
- Préprocesseur avancé
- Multithreading
- Multiprocessing
- Parallélisme
- Générécité
- « Interfaces » avec les pointeurs de fonction
- Blocs __asm__
- Comprendre les formats PE, ELF,…
- Fonctions à nombre d’arguments variables
- Librairies statiques et dynamiques
- “link time optimisations”
- Le C/C++
- ASCII, extensions ANSI
- Unicode, mbtowc
- Aspects les plus anciens, as, UNIX
- Comportement indéfini
- Évolutions futures
Industrialisation
Transformer son programme en application utilisable.
- Travail en équipe avec Git
- Automatisation avec Makefiles
- Visual studio
- Cmake
- Test et couverture
- GDB et debogueurs intégrés
- Qualité, robustesse et montée en charge
- Design patterns
- Performance
- Fuzzing
- Déployement, packages et installeurs
- Benchmark et optimisations
- Librairies notables
- Archivage et compression
- Conteneurisation, docker
- Documentation
- CI/CD
Algorithmie
Connaitre et savoir choisir les structures de données et algorithmes nécessaires à la solution d’une tâche.
- Complexité algorithmique
- Recherche, Tris
- Listes chaînées avancées
- Matrices
- Hachage
- Hachage ouvert
- Arbres binaires
- Arbres AVL
- Arbres préfixes
- Graphes
- Plus court chemin, pathfinding
- Sac à dos
- Programmation dynamique
- Programmation compétitive, ludique
Communication réseau
La communication avec une ou plusieurs machines distantes.
- Notions de base du réseau, couches OSI
- Berkeley sockets, winsock
- TCP/UDP
- Remote procedure call : RCP
- Qualité service
- JSON, CBOR
Creation CLI
Elaborer des programmes utilitaires robustes et de qualité.
- Interface du cli
- Pipes
- Optparse
- Documentation efficace, manpages
- Codes d’echappement ANSI
- Menu a choix multiple
- Couleurs
- Art ascii, freetype
- Temps réél, conio
Creation GUI et graphique
Créer des applications graphiques de bureau utilisables avec une souris.
- Création de fenêtre
- Nuklear
- Win32
- GTK
- Art ascii
- Low poly
- OpenGL
- Textures et shaders
- Etat de l’art
- Bases mathématiques de 3D
Accessibilité
Jeu vidéo
- Conception, game design, level design
- Boucle principale
- Traitement d’évènements périphériques
- Architecture orientée acteurs
- Acteurs,ECS
- Scripting pour le jeu vidéo
- Génération procedurale
- Jeu vidéo en ligne, QOS, latence, compensation de latence
- Classements, matchmaking
- SDL
- CSFML
- Allegro
- Raylib
- Irrlicht, Ogre 3D, cocos
- Win32 pour le jeu
- DirectX
- Vulkan
- Ressources jeu vidéo
Intelligence artificielle
- Minimax
- Bases d’algèbre linéaire
- Optimisation
- Apprentissage supervisé
- Apprentissage non supervisé
- Apprentissage par renforcement
- Réseau de neurones (apprentissage profond)
- GAN
- Traitement langage naturel (NLP)
- Traitement du bruit
- Catégorisation d’images
- Catégorisation sons