Skip to content

Latest commit

 

History

History
234 lines (117 loc) · 23.7 KB

File metadata and controls

234 lines (117 loc) · 23.7 KB

🔝 Retour au Sommaire

Ressources pour aller plus loin

Projets, contributions et apprentissage continu


Le chapitre 48 de cette formation recense les livres de référence, les conférences, les standards et les communautés de l'écosystème C++. Cette section ne duplique pas ce contenu. Elle se concentre sur les prochaines actions concrètes : projets personnels pour consolider vos acquis, projets open source auxquels contribuer, certifications reconnues, formations complémentaires, et pratiques de veille technologique à intégrer dans votre routine.


1. Projets personnels pour consolider vos acquis

La meilleure façon d'ancrer les compétences de cette formation est de les mobiliser ensemble sur des projets intégrateurs. Chaque projet ci-dessous est conçu pour solliciter plusieurs modules simultanément, avec un niveau de difficulté croissant.

Niveau intermédiaire

Un outil CLI de monitoring système. Créez un outil en ligne de commande qui affiche en temps réel l'utilisation CPU, mémoire, disque et réseau d'une machine Linux. Ce projet mobilise la programmation système (lecture de /proc et /sys), le parsing de fichiers texte, CLI11 pour les arguments, fmt ou std::print pour l'affichage formaté, et les threads pour la collecte périodique. Dockerisez l'outil et distribuez-le en paquet DEB.

Modules sollicités : 7 (filesystem, threads), 8 (parsing), 9 (build system), 12 (CLI), 13 (Docker, packaging).

Une bibliothèque de structures de données. Implémentez vos propres versions de vector, unordered_map, shared_ptr et d'une structure lock-free (queue ou stack). Chaque structure doit être templatée, testée avec Google Test, benchmarkée avec Google Benchmark, et documentée avec Doxygen. Le projet CMake doit inclure les sanitizers et la couverture de code.

Modules sollicités : 2–5 (mémoire, POO), 4 (smart pointers, move semantics), 5 (STL, templates), 9 (CMake), 10–11 (tests, profiling).

Un convertisseur de formats de configuration. Un outil qui lit du JSON, YAML, TOML ou XML et le convertit dans n'importe lequel des autres formats, avec validation de schéma et messages d'erreur exploitables. Utilisez CLI11 pour l'interface, nlohmann/json, yaml-cpp, toml++ et pugixml pour les formats, et std::expected pour la gestion d'erreurs.

Modules sollicités : 6 (gestion d'erreurs), 8 (parsing), 12 (CLI).

Niveau avancé

Un serveur HTTP/1.1 minimaliste. Implémentez un serveur HTTP capable de servir des fichiers statiques et de répondre à des requêtes REST (GET, POST, PUT, DELETE). Utilisez les sockets POSIX avec epoll pour le multiplexage, std::jthread pour le pool de threads, spdlog pour le logging structuré, et des métriques Prometheus (nombre de requêtes, latence, erreurs). Dockerisez le serveur avec une image distroless et créez un pipeline CI/CD complet.

Modules sollicités : 7 (sockets, epoll, threads), 8 (parsing HTTP), 9 (CMake), 10 (profiling), 11 (tests), 13 (Docker, CI/CD, observabilité).

Un moteur de base de données clé-valeur. Implémentez un store clé-valeur persistant avec un moteur de stockage basé sur un LSM-tree simplifié (memtable en mémoire + SSTables sur disque). Ajoutez un protocole réseau (inspiré de Redis RESP), un client CLI, des snapshots, et de la réplication basique. Ce projet est un excellent intégrateur de compétences système, réseau, concurrence et optimisation.

Modules sollicités : 5 (mémoire), 7 (filesystem, threads, sockets), 8 (sérialisation binaire), 9 (CMake), 14 (optimisation cache).

Un ray tracer progressif. Implémentez un ray tracer capable de rendre des scènes 3D avec éclairage, réflexions, réfractions et ombres. Commencez par le tutoriel Ray Tracing in One Weekend (Peter Shirley, disponible gratuitement en ligne), puis optimisez avec du SIMD, des BVH (Bounding Volume Hierarchies), et de la parallélisation multi-thread. Benchmarkez chaque optimisation.

Modules sollicités : 4 (move semantics), 5 (templates), 14 (SIMD, cache, parallélisme), 16 (patterns).

Niveau expert

Un framework de tâches asynchrones. Implémentez un task scheduler inspiré de std::execution (Senders/Receivers) avec un thread pool, des continuations, et un modèle de cancellation. C'est un projet qui demande une maîtrise profonde de la concurrence, des templates avancés, et du design d'API moderne.

Modules sollicités : 4 (C++26, templates avancés), 5 (STL), 7 (threads, atomiques), 14 (lock-free, memory ordering).

Un interpréteur de langage. Implémentez un interpréteur pour un petit langage (un sous-ensemble de Lox, Lua ou un langage custom) avec lexer, parser, AST, et évaluateur. Ajoutez un REPL, un garbage collector basique, et des bindings vers des fonctions C++. C'est un projet qui teste en profondeur votre maîtrise du C++ (polymorphisme, std::variant, visitor pattern, gestion mémoire) et qui est très valorisé en entretien.

Modules sollicités : 3–5 (POO, templates, STL), 6 (gestion d'erreurs), 8 (parsing), 16 (patterns, type erasure).


2. Contribuer à l'open source

La contribution open source est le moyen le plus efficace de progresser au-delà d'un cadre de formation. Vous lisez du code écrit par des experts, vous recevez des code reviews exigeantes, et vous apprenez les conventions d'un projet de production. Voici des projets triés par niveau d'accessibilité.

Projets accessibles pour une première contribution

Ces projets ont des processus de contribution documentés, des issues taguées "good first issue", et des communautés accueillantes envers les nouveaux contributeurs.

nlohmann/json. La bibliothèque JSON la plus utilisée en C++. Le code est propre, bien testé, et les issues couvrent un large spectre (bugs, features, documentation, performance). C'est un excellent premier projet car vous l'avez utilisé pendant la formation.

CLI11. Le parser d'arguments en ligne de commande couvert en section 36.1. Le projet est de taille modeste, le code est lisible, et les mainteneurs sont réactifs. Contribuer à un outil que vous maîtrisez est le moyen le plus naturel de commencer.

spdlog. La bibliothèque de logging couverte en section 40.1. Les issues portent souvent sur des cas d'utilisation spécifiques, des améliorations de performance, ou le support de nouvelles plateformes.

Google Test / Google Benchmark. Les frameworks de test et de benchmarking que vous avez utilisés tout au long de la formation. Les issues "good first issue" portent souvent sur la documentation, les messages d'erreur, ou de petites améliorations fonctionnelles.

fmtlib/fmt. La bibliothèque de formatage qui a inspiré std::format et std::print. Le code est un modèle de C++ moderne haute performance. Les contributions peuvent porter sur les formateurs custom, les performances, ou le support de nouvelles plateformes.

Projets intermédiaires

CMake. Le build system central de la formation. Le code source est en C++ et les contributions sont possibles sur les générateurs, les modules Find, la documentation, et les nouvelles fonctionnalités. Comprendre le code de CMake en profondeur est un atout rare et différenciant.

Envoy Proxy. Le proxy L7 écrit en C++ utilisé comme data plane dans les architectures service mesh (Istio). C'est un projet de grande envergure avec une communauté active et des processus de contribution bien rodés. Les contributions peuvent porter sur les filtres HTTP, les métriques, le support de protocoles, ou les optimisations de performance.

ClickHouse. La base de données analytique colonne écrite en C++. Le projet est massivement open source, très actif, et les issues couvrent un spectre large (nouvelles fonctions SQL, optimisations de requêtes, formats de données, intégrations). C'est une immersion directe dans le backend haute performance.

Godot Engine. Le moteur de jeu open source dont le cœur est en C++. C'est le point d'entrée le plus accessible pour la trajectoire Game Development : les contributions vont des corrections de bugs dans le renderer aux nouvelles fonctionnalités du physics engine, en passant par l'amélioration des outils d'édition.

Projets avancés

LLVM/Clang. Le compilateur que vous avez utilisé tout au long de la formation. Contribuer à LLVM (passes d'optimisation, backends, sanitizers) ou à Clang (diagnostics, clang-tidy checks, support de nouvelles fonctionnalités du standard) est un investissement majeur mais extrêmement formateur. C'est l'un des projets C++ les mieux conçus au monde.

Linux Kernel. Si la trajectoire System Programming vous attire, contribuer au noyau Linux (en C, mais la compréhension du C++ système est un atout) est le graal. Commencez par le staging tree (drivers en cours de nettoyage) et les corrections de documentation. Le processus de contribution (mailing lists, patches formatés avec git format-patch) est particulier mais bien documenté.

Bonnes pratiques de contribution

Avant de soumettre votre première pull request sur un projet, prenez le temps de lire attentivement le fichier CONTRIBUTING.md, de comprendre le style de code du projet (souvent enforced par un .clang-format et un .clang-tidy), d'exécuter la suite de tests localement, et de commencer petit. Une correction de typo dans la documentation, un test manquant, ou une amélioration d'un message d'erreur sont des contributions légitimes et bienvenues. La qualité et le soin apportés à une petite contribution comptent plus que l'ambition d'une grande.


3. Certifications et formations complémentaires

Certifications pertinentes

Il n'existe pas de certification C++ universellement reconnue comparable au CKA (Kubernetes) ou à l'AWS Solutions Architect. La compétence C++ se démontre principalement par le code (projets, contributions open source, entretiens techniques). Cependant, certaines certifications adjacentes renforcent significativement un profil C++ selon la trajectoire choisie.

CKA / CKAD (Certified Kubernetes Administrator / Developer). Pour la trajectoire DevOps/SRE. Valide la capacité à administrer et développer pour Kubernetes. La préparation à ces certifications complète directement les compétences Docker et CI/CD de la formation.

AWS / GCP / Azure certifications (Associate level). Pour les trajectoires Backend et DevOps. Les certifications cloud valident la connaissance des services managés (compute, storage, networking, monitoring) dans lesquels vos applications C++ seront déployées.

Embedded Linux certifications (Yocto Project, LFCE). Pour la trajectoire Embedded/IoT. La Linux Foundation propose des certifications sur l'administration Linux embarqué et la construction de distributions custom avec Yocto/OpenEmbedded.

FRM / CQF (Financial Risk Manager / Certificate in Quantitative Finance). Pour la trajectoire Finance quantitative. Ces certifications valident les compétences mathématiques et financières qui complètent votre profil technique.

Formations complémentaires recommandées

Cours en ligne de référence pour le C++ avancé. Les cours de Kate Gregory sur Pluralsight couvrent le C++ moderne avec une pédagogie excellente. Les talks CppCon sur YouTube sont une mine : chaque année, les meilleurs experts du langage présentent des sujets pointus en 60 à 90 minutes, avec des slides et du code disponibles. La chaîne YouTube de Jason Turner (C++ Weekly) propose des épisodes courts et réguliers sur des points précis du langage.

Systèmes distribués. Le cours MIT 6.824 (Distributed Systems), disponible gratuitement en ligne, est la référence pour comprendre les algorithmes de consensus, la réplication, et la tolérance aux pannes. Il utilise Go pour les labs, mais les concepts s'appliquent directement à vos projets C++ backend.

Programmation graphique. Pour la trajectoire Game Development, le cours Learn OpenGL (learnopengl.com) est le meilleur point d'entrée gratuit pour la programmation graphique moderne. Le tutoriel Vulkan Tutorial (vulkan-tutorial.com) prend le relais pour l'API Vulkan. Les deux sont en C++.

Rust. Quel que soit votre trajectoire, apprendre Rust en complément du C++ est un investissement de plus en plus pertinent. The Rust Programming Language (le "Rust Book", disponible gratuitement en ligne) est le point d'entrée officiel. Votre maîtrise du C++ — gestion de la mémoire, ownership, références, concurrence — vous donne un avantage considérable pour comprendre le modèle de Rust, qui formalise et enforce à la compilation des concepts que vous gérez manuellement en C++.


4. Compétitions et challenges techniques

Les compétitions de programmation et les challenges techniques sont un moyen efficace de renforcer votre maîtrise algorithmique et votre fluidité en C++. Ils vous entraînent à écrire du code correct et performant sous contrainte de temps, ce qui est directement applicable aux entretiens techniques.

Advent of Code. Un calendrier de l'Avent de puzzles algorithmiques (décembre chaque année, mais les archives restent accessibles). Les problèmes sont de difficulté croissante et se prêtent bien au C++ : parsing d'entrée, structures de données, algorithmes de graphes, optimisation. C'est aussi une excellente occasion de pratiquer les Ranges, std::expected, et les dernières fonctionnalités du standard.

LeetCode / HackerRank / Codeforces. Plateformes de problèmes algorithmiques avec support C++. LeetCode est particulièrement pertinent pour la préparation aux entretiens des grandes entreprises technologiques. Concentrez-vous sur les catégories "Medium" et "Hard" pour consolider vos acquis en structures de données et en algorithmes.

Google Code Jam / Meta Hacker Cup (archives). Bien que certaines de ces compétitions aient été interrompues, leurs archives restent accessibles et contiennent des problèmes de haute qualité. Les solutions publiées par les participants sont une source d'apprentissage précieuse.

Compiler Explorer challenges. Utilisez Compiler Explorer (godbolt.org) pour explorer le code assembleur généré par vos solutions. Comprendre pourquoi une implémentation génère un assembly plus efficace qu'une autre renforce votre intuition pour l'optimisation, la vectorisation automatique, et les interactions entre le code source et le compilateur.


5. Veille technologique : construire une routine

La veille n'est utile que si elle est régulière et ciblée. Voici une routine réaliste qui ne demande pas plus de 30 minutes par jour.

Flux quotidien (10-15 minutes)

Reddit r/cpp. Le subreddit est le meilleur agrégateur quotidien de nouvelles C++ : articles, annonces de bibliothèques, discussions techniques, retours d'expérience. Parcourez les titres et lisez les posts qui correspondent à votre trajectoire.

Hacker News. Le flux est généraliste (pas spécifique au C++), mais les articles sur les systèmes, la performance, les langages de programmation et l'infrastructure y sont régulièrement mis en avant. Filtrez mentalement ou utilisez un outil comme hnrss.org pour cibler les sujets pertinents.

RSS / newsletters. Abonnez-vous à quelques sources de haute qualité plutôt qu'à beaucoup : le blog d'Anthropic (IA et systèmes), le blog LLVM (compilateurs), le blog de Sutter's Mill (Herb Sutter, membre éminent du comité C++), Modernes C++ (Rainer Grimm), et le blog isocpp.org (actualités du comité de standardisation).

Flux hebdomadaire (15-30 minutes)

C++ Weekly (Jason Turner, YouTube). Un épisode par semaine, 5 à 15 minutes, sur un point précis du langage. Le format court est idéal pour une veille régulière sans investissement lourd.

This Week in Rust. Si vous suivez la trajectoire d'interopérabilité C++/Rust, cette newsletter hebdomadaire est la meilleure source pour rester à jour sur l'écosystème Rust.

Release notes des outils. Suivez les releases de vos outils principaux — GCC, Clang, CMake, Conan — pour connaître les nouvelles fonctionnalités et les corrections de bugs. Les changelogs sont souvent la meilleure documentation sur les améliorations récentes.

Flux mensuel / trimestriel

Papiers du comité (WG21). Les proposals C++ sont publiées sur open-std.org et sur le GitHub du comité (cplusplus/papers). Vous n'avez pas besoin de tout lire : concentrez-vous sur les papiers qui ont atteint le stade "plenary vote" ou qui concernent votre domaine de spécialisation. Le blog de Herb Sutter et le compte r/cpp résument régulièrement les avancées des réunions du comité.

Conférences (enregistrements). CppCon, Meeting C++, C++ Now et ACCU publient leurs talks sur YouTube quelques semaines après l'événement. Sélectionnez 2 à 3 talks par mois en fonction de vos centres d'intérêt. Les keynotes donnent une vision stratégique du langage ; les talks techniques approfondissent des sujets précis.

Outils de veille

Compiler Explorer (godbolt.org). Au-delà de la veille, c'est un outil de travail quotidien. Testez-y les nouvelles fonctionnalités des compilateurs, comparez le code assembleur généré par GCC et Clang, explorez le support des dernières features C++23 et C++26.

C++ Insights (cppinsights.io). Cet outil montre le code C++ tel que le compilateur le voit après transformation (lambdas déssucrées, templates instanciés, range-based for décomposé). C'est un accélérateur de compréhension pour les fonctionnalités complexes du langage.

Quick C++ Benchmark (quick-bench.com). Un outil en ligne pour créer et partager des micro-benchmarks C++. Utile pour vérifier rapidement une intuition de performance ou comparer deux implémentations alternatives.


6. Construire un portfolio technique

Dans un marché où les compétences C++ sont recherchées mais difficiles à évaluer sur un CV, un portfolio technique visible est un différenciateur important. Voici comment le construire.

GitHub comme vitrine

Votre profil GitHub est souvent la première chose qu'un recruteur technique consulte. Structurez-le avec intention.

Maintenez 2 à 3 projets personnels de qualité plutôt qu'une dizaine de projets inachevés. Chaque projet doit avoir un README complet (description, build instructions, exemples d'utilisation, architecture), un CMakeLists.txt propre, des tests, un CI/CD fonctionnel (badge vert visible sur le README), et un code formaté avec clang-format. La qualité du packaging et de la documentation compte autant que le code.

Vos contributions open source apparaissent automatiquement dans votre historique de contributions. Même de petites contributions régulières (corrections de bugs, améliorations de documentation, reviews) construisent un historique qui démontre votre capacité à travailler dans un contexte professionnel collaboratif.

Blog technique

Écrire sur ce que vous apprenez est le meilleur moyen de consolider vos connaissances et de vous rendre visible. Un article de blog bien écrit sur un sujet technique précis (comment vous avez optimisé une structure de données, comment vous avez intégré Protobuf dans un pipeline CI/CD, comment vous avez diagnostiqué un bug de concurrence avec ThreadSanitizer) a plus d'impact qu'un CV.

Vous n'avez pas besoin d'une plateforme complexe. Un dépôt GitHub Pages avec un générateur de site statique (Hugo, Jekyll) suffit. L'important est la régularité (un article par mois est un bon rythme) et la qualité du contenu technique.

Préparation aux entretiens techniques

Les entretiens C++ en entreprise combinent généralement trois volets : algorithmique (LeetCode-style), conception système (system design), et questions spécifiques au langage C++ (move semantics, RAII, undefined behavior, templates, concurrence).

Pour le volet langage, les questions les plus fréquentes portent sur la Règle des 5, la différence entre unique_ptr et shared_ptr, le fonctionnement de la vtable, les captures de lambdas, std::move sur un objet const, la différence entre constexpr et consteval, les data races et comment les éviter, et le coût des exceptions. La formation couvre tous ces sujets ; revisez les sections correspondantes avant un entretien.

Pour le volet conception système, le livre System Design Interview (Alex Xu) complété par votre connaissance concrète des composants C++ (serveurs réseau, bases de données, caches, message queues) vous donne un avantage sur les candidats qui n'ont qu'une vision théorique.


7. Rejoindre la communauté C++

En ligne

Les communautés mentionnées au chapitre 48 (Stack Overflow, Reddit r/cpp, Discord C++, Compiler Explorer) sont vos points de contact quotidiens. Deux conseils pour en tirer le meilleur parti : répondez aux questions, pas seulement posez-en — expliquer un concept à quelqu'un d'autre est le test ultime de votre compréhension ; et partagez vos découvertes — un post montrant un benchmark surprenant, un bug subtil, ou une utilisation élégante d'une fonctionnalité C++23 contribue à la communauté et vous rend visible.

En personne

Les meetups C++ locaux existent dans la plupart des grandes villes. En France, les meetups Paris C++ et les événements organisés par les communautés DevOps/SRE locales sont des occasions de rencontrer des praticiens, de présenter vos projets, et de découvrir comment d'autres entreprises utilisent C++ en production.

Les conférences (CppCon aux États-Unis, Meeting C++ en Allemagne, ACCU au Royaume-Uni, C++ on Sea, CPPP en France) sont des investissements plus lourds mais à fort impact. Assister à une conférence C++ accélère votre réseau, votre veille et votre motivation de manière difficile à reproduire autrement. Si le budget est une contrainte, les enregistrements vidéo sont disponibles gratuitement sur YouTube, et certaines conférences proposent des tarifs réduits pour les étudiants et les contributeurs open source.

Mentorat

Si votre environnement professionnel ne compte pas de développeurs C++ seniors, cherchez un mentor dans la communauté. Les serveurs Discord C++ (#include et C++ Alliance) ont des canaux dédiés au mentorat. Les contributions open source créent naturellement des relations de mentorat avec les mainteneurs des projets. N'hésitez pas à demander des code reviews sur vos projets personnels — la plupart des développeurs expérimentés sont heureux de partager leur expertise quand la demande est précise et respectueuse de leur temps.


Récapitulatif des prochaines étapes

En sortie de cette formation, voici un plan d'action concret sur les trois prochains mois.

Mois 1 : Consolider. Choisissez un projet personnel de niveau intermédiaire et menez-le à terme (code, tests, CI/CD, documentation, publication sur GitHub). Identifiez un projet open source qui vous intéresse et lisez son code source, ses issues ouvertes, et son guide de contribution.

Mois 2 : Contribuer. Soumettez votre première contribution open source (même petite). Commencez un projet personnel de niveau avancé. Installez votre routine de veille (Reddit, C++ Weekly, release notes). Si vous visez une trajectoire spécifique, commencez les compétences complémentaires identifiées dans la section Trajectoires professionnelles.

Mois 3 : Rayonner. Publiez un premier article de blog technique. Participez à un meetup ou un événement communautaire. Soumettez une deuxième contribution open source plus substantielle. Évaluez vos progrès avec la grille d'auto-évaluation du Récapitulatif et ajustez votre plan.

Ce rythme est soutenable à long terme. La progression en C++ est un marathon, pas un sprint — mais c'est un marathon où chaque kilomètre parcouru augmente votre valeur sur le marché et votre capacité à résoudre des problèmes complexes.


⏭️ Checklist du développeur C++ Cloud Native