Forum Programmation.c++ Quelles ressources pour apprendre sérieusement ?

Posté par  . Licence CC By‑SA.
Étiquettes :
13
14
mar.
2022

Bonjour,

TL;DR : Je cherche une ressource fiable, gratuite ou non, prioritairement en français (mais si anglais, pas de souci), pour apprendre convenablement et avec des bonnes pratiques / manières de faire le C++ moderne.


En plus long et avec du contexte :

Je souhaite me pencher sur le langage C++ après quelques temps passé sur du Python (des scripts dans un contexte sysadmin) et un peu de Go (principalement pour des serveurs HTTP dans un cadre K8S). Le code n'est pas mon métier, juste un divertissement qui m'apprend plein de choses (et ça tombe bien, j'adore apprendre des trucs).

J'en ai marre de bidouiller et je trouve la polyvalence du C++ intéressante moyennant un gros investissement (ça a l'air clairement plus bas niveau que Go, donc plus de maitrise au risque de faire n'importe quoi, donc potentiellement, ça m'apprendra bien plus de choses). Le but de cet apprentissage est pour un plaisir personnel, et non d'une utilité professionnelle.

Naïvement j'ai jeté un œil sur le tuto d'Openclassroom histoire de voir du code simple et compréhensible mais au final j'ai pas tellement vu de différence avec le C. Je me suis donc renseigné sur la ressource en question qui a l'air de faire débat.

Le tuto chez ZdS m'a l'air déjà meilleur (il y a du auto, pas de using namespace, etc) mais n'étant pas sachant sur le langage, il est facile de berner le chaland en quête de connaissances.

J'ai regardé également du côté de chez developpez.com pour voir leur ressources, la majorité date d'avant 2010, donc sans doute de la vieille norme.

Au final, je suis perdu. J'ai bien trouvé des choses réputées comme fiables que je garde sous le coude comme cppreference ou cplusplus mais ce n'est pas très didactique.

Selon vous, quelle serait la ou les meilleures ressources actuellement pour apprendre le C++ moderne (ie c++17 ou c++20 je suppose) ? Idéalement en français, mais je suis preneur d'un contenu anglais s'il est didactique et un peu fun (le langage est, selon plusieurs retours, assez ardu à appréhender). J'aime aussi les livres (Delannoy ?). Ça ne me dérange pas de mettre raisonnablement la main à la poche si nécessaire et si la qualité est au rendez-vous (cours en ligne payant par exemple ou bouquins).

Le but étant d'apprendre correctement, avec des bonnes pratiques et manières de faire, et d'aller faire un peu d'Exercism, d'Advent of Code ou Codingame pour mettre tout ça en pratique de manière rigolote dans un premier temps et forcément rencontrer des problèmes pour avancer dans le langage par la suite, bref, apprendre et pratiquer autant que possible.

Plus largement, si quelques gourous du C++ passent par ici, à quoi un débutant dans le langage doit-il faire attention quand il suit un tuto ou toute ressources pour savoir s'il se fait berner avec un mauvais enseignement ou un enseignement un peu trop "daté" ?

Je vous remercie par avance de vos lumières moulesques (un genre de euprymna scolopes mais version mollusque bivalve /o\).

Bien à vous

  • # Compliqué

    Posté par  (site web personnel) . Évalué à 3. Dernière modification le 15 mars 2022 à 09:53.

    Le C++ évolue beaucoup alors les ressources deviennent rapidement obsolètes (ou presque). Le cours du site du zero est évidemment à bannir.

    Celui du zeste de savoir est pas mal mais contient pas tout des dernières normes. En tout cas tu peux commencer par ça. Pour le reste, le plus simple est de faire de la recherche et de poser des questions. Il y a des tonnes d'articles sur le C++11, C++17 et C++23 qui vont expliquer les nouveautés, à quoi elles servent, quels problèmes elles résolvent, etc.

    git is great because linus did it, mercurial is better because he didn't

    • [^] # Re: Compliqué

      Posté par  (site web personnel) . Évalué à 8.

      Celui du zeste de savoir est pas mal mais contient pas tout des dernières normes.

      Notons qu'ils ont sorti un livre avec quelques ajouts.

      Cependant personnellement je pense que l'essentiel est d'avoir de bonnes bases en C++11 voire C++14. Le reste sont des ajouts plus spécifiques qui sont parfois utiles que dans des contextes très précis (contrairement au C++11 qui a un impact pour tout développeur C++ dans la manière de faire) et si tu as bien compris C++11 ou C++14, tu peux souvent te contenter de lire les nouveautés des normes suivantes à la main, dont notamment ce qui a été ajouté à la bibliothèque standard.

      • [^] # Re: Compliqué

        Posté par  . Évalué à 1.

        Merci bien pour les précisions. Le virage étant donc le C++11 a minima. Voilà qui aidera pour les recherches futures en quête de point précis du langage ou pour des soucis quelconques.

        Merci pour vos réponses

  • # Exercism, Advent of Code, Codingame...

    Posté par  . Évalué à 2.

    C'est une super idée d'apprendre en te faire plaisir par des sites comme CodingGame, etc. Et franchement, vas-y !

    Ceci étant dit, je ne suis pas convaincu que leurs exercices te permettent vraiment d'apprendre le C++ moderne "des projets de tous les jours".
    Ce sont souvent (de ce que j'ai vu) des exercices d'algorithmie assez brefs, dans lesquels tu vas manipuler des tableaux avec des indices. Avec probablement 2 ou 3 maps dans le tas.

    Je ne pense pas que ce soit par ce biais que tu travailles les héritages, les templates ou les traits (et leurs pièges !).

    • [^] # Re: Exercism, Advent of Code, Codingame...

      Posté par  . Évalué à 3.

      En effet, je ne compte pas "que" là-dessus pour apprendre, bien au contraire. Ces plateformes, notamment Exercism, me permettent de mettre en pratique un point précis que je viens d'étudier en guise d'exercice. J'ai du mal à trouver des idées de petits projets / exercice adaptés à mon niveau (généralement c'est bien supérieur à ce que je sais/peux faire).

      L'avantage de ces exercices étant qu'ils forcent à trouver soi-même l'algorithme qui va bien pour résoudre la problématique et laissent une liberté d'implémentation (sauf quand c'est explicitement indiqué "calculer via la distance de Manhattan").

      J'apprécie voir qu'au début ça juste marche, c'est long et plus crado et à force de comprendre l'algo / jouer avec le langage, les itérations suivantes de l'exercice sont plus propres, courtes et optimisées. Ce n'est pas grand chose mais ça fait un petit effet de progression fort sympathique quand on étudie un point du langage aussi simple que des tableaux ou autre sujet basique d'apprentissage dudit langage. Un bon moral quand on apprend, c'est toujours une bonne chose !

  • # le metier, le tas

    Posté par  . Évalué à 5.

    on aura beau dire, je penses que le meilleur apprentissage ca reste la pratique.

    en école on t'apprend rapidement l'algorithme, et un peu le langage, ensuite tu fais des TP, des exos, mais c'est dans tes projets perso et dans ton stage et ton metier futur que tu acquieres vraiment le mode de pensée (algo) et le langage.

    il ne faut pas oublier qu'un bon programme c'est avant tout un bon algorithme,
    ensuite ce n'est que de la traduction dans un langage

  • # Un livre avec de vraies pages ?

    Posté par  . Évalué à 8.

    Programmer en langage c++ de Claude Delannoy.

    Je ne sais pas si la dernière édition est bien, mais j’ai l’édition avec le C++ pré-c++2003 et je la trouve très bien, didactique, progressive.

    La nouvelle édition traite jusqu’au c++17. Comme je suis un peu vieux, j’aime bien un livre… ça permet entre autres de lire un chapitre le soir avant de s’endormir. De s’en servir de référence sans avoir à switcher de fenêtre sur l’écran. De caler un écran ou un pied de table.

    • [^] # Re: Un livre avec de vraies pages ?

      Posté par  . Évalué à 2.

      Oui, un livre au sens premier du terme (seul sens me concernant). Je préfère un bouquin donc si la dernière édition couvre ce qu'il faut, je vais envisager l'achat !

      Merci bien pour ce retour.

      • [^] # Re: Un livre avec de vraies pages ?

        Posté par  (site web personnel) . Évalué à 4. Dernière modification le 12 mai 2022 à 08:27.

        J'ai la dernière version de la série dédiée au C++ (Programmer en C++ moderne) et franchement, vu le prix et vu la qualité du livre, il n'y aucune question à se poser…
        Bonus c'est en français !!

        Par contre, selon moi, c'est indissociable de la pratique. On n'apprend pas un langage sans pratiquer. En guise d'exercice, j'ai converti tous mes scripts (perl, python, bash) en C++. Si certain se sont avérés très simples, d'autre m'ont donné du fil à retordre et j'ai beaucoup appris :)

        Sinon, deux sources que j'aime beaucoup
        * https://www.fluentcpp.com/
        * https://www.modernescpp.com/

        et les incontournables :
        * https://en.cppreference.com/w/
        * https://www.cplusplus.com/reference/

        @++

        Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée

  • # J'ai pas lu, mais ça sentirait peut-être bon chez NoStarch

    Posté par  . Évalué à 4.

    Il pourrait y avoir le "C++ Crash Course—A Fast-Paced Introduction", de 2019 par Josh Lospinoso? https://nostarch.com/cppcrashcourse

    Il est en anglais, fait ses petites 800 pages, et pour s'en faire probablement une bonne idée via son chapitre 3, "References Types": https://nostarch.com/download/samples/C++CrashCourse_Sample_Ch3.pdf

    Qui ne fait pas partie du bundle chez HumbleBundle "The Joy of Code"

  • # Livres de Nicolai Josuttis

    Posté par  . Évalué à 3.

    Il y a dix ans j'avais beaucoup apprécié le livre "The C++ Standard Library - A Tutorial and Reference, 2nd Edition" de Nicolai Josuttis. Ce n'est pas un guide d'apprentissage pour débutant mais une référence que j'avais trouvée utile afin d’approfondir et de mieux comprendre le langage et sa bibliothèque standard. J'ajoute que l'impression de la version reliée était de très bonne qualité.

    Depuis une nouvelle version est sortie, couvrant jusqu'au C++17 mais je ne l'ai jamais lu. Ce dernier semble être en auto-édition, alors attention à la qualité de la version papier.

  • # Un avis tardif

    Posté par  (site web personnel) . Évalué à 2. Dernière modification le 21 avril 2022 à 13:23.

    Je débarque après la bataille… je traîne plutôt sur les forums en ligne (d'OC/ZdS), ou la réponse qui suit t'aurait été donnée.

    Un contenu des plus modernisé que l'on trouvera sur l'enseignement du C++ est le big tuto de Zeste de Savoir, et son adaptation en livre. Le livre apporte son lot de corrections et améliorations (sur la partie OO en particulier), et un chapitre entièrement réécrit (gestion des ressources et de la mémoire).

    C'est du C++ moderne au sens premier, de 2002 et avant (non, je n'ai inversé aucun chiffres). C'est à dire, que les bonnes pratiques sont mises en avant, que la mémoire est gérée de façon transparente et … correcte. Il existe d'autres ouvrages (dont l'auteur a été cité (*)) où les derniers éléments du langage sont présentés comme des annexes tout en suivant où approche historique de l'enseignement du C++—imaginez un cours de cuisine qui commence par nous apprendre à tailler nos silex pour aller chasser le mammouth.

    Le tuto de ZdS est donc moderne au sens premier, mais aussi au sens contemporain où la norme choisie est celle du C++17 pour l'intégralité du cours: les éléments des précédentes normes qui n'ont aucun intérêt pratique pour le débutant ou la pratique professionnelle quotidienne sont passés sous silence, ou traités très rapidement sans insister dessus. Par contre, c'est un ouvrage pour débutants. Il reprend absolument tout. Mais correctement, si je puis dire. Il a été intensivement lu et relu et critiqué par des spécialistes du langage, dont certains enseignent parfois—j'en fais parti, et suis donc parti pris.

    Quelques indices pour reconnaitre un bon ouvrage:
    - les premiers tableaux enseignés sont std::array et std::vector
    - les chaînes de caractères des std::string
    - la gestion de la mémoire à la main est vue bien, mais vraiment bien après—cela concerne aussi les pointeurs, qui ne seront jamais vus avec tableaux et chaines.
    - dans la foulée de la gestion de la mémoire, voire avant, les pointeurs intelligents type std::unique_ptr<> seront abordés.
    - la familiarisation à la bibliothèque standard n'est pas reléguée en annexes/fin de la formation/livre
    - l'héritage n'est pas relégué à la factorisation de données, mais au contraire mis en avant pour la factorisation de comportements
    - et avec un peu de chances (une préoccupation très francophone), valeurs et entités seront traitées séparément car cela a des impacts sur les recettes de cuisines à appliquer. Comprendre que l'enseignement du C++ ne peut pas se résumer à "voici la syntaxe, débrouillez-vous!". Il est plus important d'associer les éléments de syntaxes aux besoins auxquels on cherche à répondre.

    (*) A noter que je suis mauvaise langue, je n'ai pas eu sa toute dernière édition entre les mains pour juger si l'enseignement du C++ avait enfin (!) été modernisé et centré sur les objectifs au lieu de la syntaxe.

    • [^] # Re: Un avis tardif

      Posté par  (site web personnel) . Évalué à 1.

      s/qui ne seront jamais vus AVEC tableaux/qui ne seront jamais vus AVANT tableaux/

      C'est pénible de ne pas pouvoir éditer nos réponses…

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.