Hello,
J'envisageais aussi d'écrire sur le C++, et je suis plutôt pour organiser un parcours dans le même esprit que pour Python, étant donné la complexité et la diversité du langage.
Je pense aussi que ça permet de mieux répartir les efforts entre les différents sujets, et d'avoir des résultats intermédiaires concluants (tel tuto est définitivement terminé), plutôt qu'un énorme big-tuto-qui-déchire jamais terminé (et de débattre trop longtemps sur le plan).
Je pensais au plan suivant pour un tuto d'introduction (dans les grandes lignes) :
- Introduction : présentation, installation d'outils, hello world
- Bases du langage : types de base (sans pointeurs), boucles, fonctions
- Structurer ses données : POO côté utilisateur avec la STL
- introduction à la notion de classe avec std::string [l'utilisateur s'affranchit de la représentation interne d'une chaîne, des problèmes d'allocation, etc]
- les conteneurs de la STL, couteau-suisse qui permet de structurer les données [+ range-for]
- partager des données [références, smart pointers, pas de raw pointers]
- POO côté programmeur : classes, méthodes, surcharge d'opérateurs, sémantiques de classe, polymorphisme
D'autres parties pourraient faire l'objet de tutoriels séparés (je n'ai pas vu d'ordre évident entre elles, et le lecteur n'a pas forcément besoin d'approfondir toutes les notions). On pourrait en regrouper certaines sous "C++ avancé".
- Notions de compilation (commun C/C++) : compilation séparée des classes, comment linker une bibliothèque (et comment en écrire une)
- Gestion des erreurs : exceptions, principe RAII (+ parler des pointeurs nus et de new/delete)
- Bibliothèque standard (hors conteneurs) : streams, chrono, random, math, regex
- std::algorithm : notion d'itérateur, présenter les lambdas (+ std::function, std::bind & cie)
- Créer ses propres templates : introduction, variadic templates + des notions plus poussées sur ce qu'on peut faire avec les constexpr et la SFINAE
- Programmation parallèle : std::thread, mutex, condition_variable, atomic
Autres notions en vrac :
Et des tutoriels qui dépassent le langage à proprement parler :
Pour résumer, sur le début du cours, je suis plutôt d'accord avec le plan de plan de mehdidou99, mais je trouve plus logique de séparer la STL (indispensable pour structurer ses données) du reste de la bibliothèque standard (qui définit des fonctions pour interagir avec le monde extérieur).
Et je ne sais pas trop quoi faire de la partie std::algorithm, qui risque peut-être d'être un peu complexe à aborder au début. C'est une notion utile qui doit être connue (pour éviter de re-coder soi-même std::sort et cie), mais il est AMHA important d'approfondir ce qui se cache derrière itérateur et lambdas, pour éviter des erreurs d'itérateurs invalides (qui peuvent être dramatiques au niveau mémoire), et comprendre ce qu'on capture vraiment dans les lambdas (avec le foncteur sous-jacent).
Pour les exceptions, je vois mal en parler avant de savoir hériter une classe. Et en parler trop tôt pourrait encourager à les utiliser dans ses algorithmes comme des "super-break", ce qui n'est pas forcément le plus adapté/performant. Au passage on peut reprendre les idées de Jon Kalb sur le sujet (partie 1, partie 2, partie 3).