Forum Programmation.c technos cloud, rust.. Quid d'apprendre le C aujourd'hui?

Posté par  (Mastodon) . Licence CC By‑SA.
4
29
juil.
2024

Bonjour,

je m'interroge sur un apprentissage du développement de programmes informatiques
j'utilise linux et unix depuis quelques années, et windows aussi.

pour moi, au vu de la réputation qui n'est plus à faire, et de la rigueur nécessaire, je pense que le C est un très bon choix.
j'ai trouvé une chaine internet, mais je vois un peu tous les jours différents avis et astuces par rapport à leur apprentissage.

cependant, deux bémols :
1-par rapport au Rust, est ce que le C/C++ sont toujours défendables? je pense que oui, mais le futur retraité Joe Biden avait carrément imposé à l'administration US de passer au Rust pour des raisons de sécurité… est ce que le Rust joue dans la même cour au point d'être un nouveau messie, ou est ce mélanger les torchons et les serviettes?

  1. par rapport au C++, j'ai souvent entendu des devs C se plaindre de la syntaxe (du ++).. mais j'imagine que si
    le C++ est autant utilisé, c'est qu'il est nécessaire à la plupart des interfaces graphiques?

  2. au vu de la tendance actuelle des langages demandés (python, java, technos cloud, etc), à part dans l'embarqué, est ce que le C reste porteur sur le marché du travail? personnellement je le trouve très appréciable en quelques jours mais j'imagine qu'il faut plusieurs années pour être à la hauteur,

  3. est ce qu'il est préférable de faire une formation payante, ou de favoriser l'autodidaxie, via les ressources en ligne, tutos, pdf, vidéos..?

merci bcp de vos réponses :)

ressources que j'ai estimées intéressantes :
cours de FormationVidéo : https://www.youtube.com/watch?v=kKeGTDyvi1o
mooc de harvard : https://cs50.harvard.edu/x/2023/
SdZ: https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/
https://informaticienzero.github.io/c++-avec-openclassrooms-ou-comment-perdre-son-temps/

https://en.wikipedia.org/wiki/CS50

  • # Le c restera toujours le c

    Posté par  . Évalué à 10.

    Baissez la tête, pavé en approche

    Pour placer un peu le point de vu duquel je parle. Je suis dev essentiellement web a l'origine et j'ai commencé avec PHP. Depuis j'ai fait un peu de tout, java, JS, python, kotlin, react, et probablement d'autres dont je ne me souviens plus, dans le lot je n'ai fait que très peu de C, car ce n'est vraiment pas le langage du web. Mais si je pouvais changer une chose dans mon parcours ca serait probablement ça.

    Le contexte étant posé, je pense que le C est un bon langage pour commencer. Pas le plus facile très très très loin de là, mais sans le moindre doute un bon choix.

    L'avantage si tu commences par le C c'est que tu comprendras le fond de ce qui a créé tous les languages modernes (je met de côté les langages fonctionnels qui sont complètement différents).
    Si tu fais du C tu apprendras ensuite sans la moindre difficulté à faire du PHP, du python, du JS, du rust, du go. Peut importe le langage, tu devras ré apprendre l'environnement de ces languages (des syntaxes différentes, des librairies populaires, des outils spécifiques), mais sur le fond ton expérience en C sera transférable partout. C'est assez vrai pour tous les languages d'ailleurs, parceque être dev ce n'est pas juste un langage mais aussi apprendre à penser d'une façon particulière. Mais dans le cas du C on parle d'un langage suffisamment bas niveau et tellement influent dans l'histoire de la programmation que les leçons seront vraiment utilisables partout tout le temps.

    Toutes les leçons que tu apprendras en C resterons avec toi pour toute ta vie de dev. Parfois utilisées directement, parfois indirectement, mais elles te permettront toujours d'avoir une idée de comment les choses fonctionnent derrière la magie des langages modernes. L'inverse n'est pas vrai…

    Est-ce que le rust est mieux que le c pour éviter de faire des bêtises ? Oui. Mais justement un des intérêts de faire du c c'est de comprendre pourquoi ce sont des bêtises, les mécanismes fondamentaux et quand faire attention. Si rust a un mot clé "unsafe", c'est bien parceque parfois on a besoin de traverser en dehors des clous. Apprendre à coder en C c'est comme apprendre à un enfant pourquoi on traverse au bonhomme vert plutôt que de simplement lui dire "c'est interdit de traverser au rouge". Le jour où le feu sera en panne, il pourra toujours traverser par lui même…

    Pour ce qui est des débouchés professionnels, je n'imagine pas un avenir autre que très très lointain dans lequel C ne sera plus employé et recherché. Si il y a encore des demandes aujourd'hui pour Cobol, alors je peux te garantir qu'ils y aura encore des demandes pour du C dans 30 ans. De toutes façons d'ici là tu auras appris plein d'autres langages.

    Pour savoir si tu dois partir sur du C ou du C++ sans la moindre hésitation du C. Le langage est plus simple, plus clair, plus agréable, mieux construit. Oui il n'y a pas d'objets, mais pas grave, tu pourras bien apprendre l'objet dans ton prochain langage. De toutes façons c'est clairement pas en C++ que j'aimerais apprendre l'objet…

    Enfin sur la question de la formation, si tu n'es pas pris à la gorge du genre "j'ai besoin d'être formé dans les 6 mois chrono sinon j'ai plus d'endroit où habiter", je commencerai par attaquer le C en autonomie. Que tu choisisses de faire ensuite une formation plus classique ou non, l'expérience accumulée sera un atout énorme. J'ai été éléve et j'ai été prof et je peux te garantir avec une certitude absolue que pour toute formation, rentrer avec 6 mois d'avance c'est sortir avec 3 ans d'avance. C'est la même différence que commencer ta vie en naissant avec un patrimoine de 10 millions et des parents hauts fonctionnaires vs naître avec un patrimoine de 10€ et trois kit Kat fondus avec des parents ouvriers à la chaîne. Tu peux réussir dans les deux cas, mais dans le premier faudra vraiment essayer très fort pour rater…

    Tu trouveras de nombreux contenus en ligne, openclassroom a toujours été un assez bon site, mais il existe une foule d'autres options, surtout si l'anglais ne te fais pas peur.

    En matière de C le livre qui fait autorité est le K&R, ce sont les créateurs du langage C et ce livre est considéré comme la bible pour comprendre le fonctionnement de C.

    J'aurais aussi fort tendance à recommander le livre "l'art du beau code", avec une mention spéciale pour la notion de early return.

    Enfin il existe une solution à ne pas négliger si tu habites dans une grande vill et que tu as 125€ de budget, les universités publiques sont accessibles aux auditeurs libres.

    Si je devais apprendre le C aujourd'hui je ferai comme ça :
    - Commencer par un tuto en ligne style open classroom, en faisant un petit projet en parallèle pour appliquer les leçons apprises (faire des trucs au fur et à mesure qu'on apprend c'est essentiel, capital, nécessaire, obligatoire, irremplaçable, ornithorynque.
    - Puis le K&R, pour comprendre en profondeur et voir l'avis de deux mecs qui sont quand même des monstres légendaires de la programmation et de l'informatique en général. Avec un deuxième projet en parallèle.
    - Je finirait en m'inscrivant en auditeur libre pour les cours sur la sécurité en C dans une université. Vraiment spécifiquement la question de la sécurité et des bonnes pratiques en C.

    Honnêtement en suivant ça tu devrais déjà sortir avec des bases plus solides que 95% des diplômés sortis d'école…

    Après il ne restera plus qu'à faire un autre langage pour apprendre l'objet. Je dirais bien PHP + symfony le langage a un modèle objet assez classique à la différence de JS ou Python. Et ça te donnera les outils pour faire du web.

    My 2 cents.

    • [^] # Re: Le c restera toujours le c

      Posté par  (site web personnel, Mastodon) . Évalué à 4.

      Est-ce que le rust est mieux que le c pour éviter de faire des bêtises ? Oui. Mais justement un des intérêts de faire du c c'est de comprendre pourquoi ce sont des bêtises, les mécanismes fondamentaux et quand faire attention. Si rust a un mot clé "unsafe", c'est bien parceque parfois on a besoin de traverser en dehors des clous. Apprendre à coder en C c'est comme apprendre à un enfant pourquoi on traverse au bonhomme vert plutôt que de simplement lui dire "c'est interdit de traverser au rouge". Le jour où le feu sera en panne, il pourra toujours traverser par lui même…

      À prendre avec de grosses pincettes parce que la sémantique de Rust est beaucoup plus restrictive que celle du C, et du coup, il y a des choses que tu peux très bien faire en C et qui sont interdites en Rust, et si tu les fais en Rust unsafe, ton programme a de l'undefined behavior, alors que ce ne serait pas le cas du programme équivalent en C.

      Quelques exemples typiques ici : https://lucumr.pocoo.org/2022/1/30/unsafe-rust/. Et ce qu'on a le droit ou non de faire avec les pointeurs est subtil et en cours d'évolution, cf. par exemple https://www.ralfj.de/blog/2023/06/02/tree-borrows.html.

      De manière générale, je ne suis pas vraiment d'accord avec le « tu pourras facilement apprendre Rust si tu connais le C » car c'est un langage avec de vrais concepts nouveaux ou importés du monde fonctionnel (lifetimes, borrow checking, mutabilité intérieure, traits, generalized bounds, etc.), mais c'est sûr que l'expérience en C ou tout autre langage de bas niveau va aider largement.

  • # N'hésite pas

    Posté par  . Évalué à 1.

    Je ne suis pas informaticien mais je programme fréquemment pour un usage professionnel ou amateur. Quelques points en faveur de l'apprentissage du C :

    • Un gros avantage du C est sa rapidité. Par exemple, en 3D, je devais traiter un nuage de deux millions de points, pour en effacer les points parasites isolés. Il fallait détecter si un point se trouvait à plus d'une certaine distance des autres points et dans ce cas l'éliminer. J'ai d'abord réalisé le programme en R, langage plutôt bien optimisé pour ce type de traitement. Mais la durée du calcul était d'environ une heure. En C, le même algorithme s'est exécuté en 2 minutes.

    • C étant fortement typé, il est également pratique à utiliser pour extraire des données de fichier binaires.

    • Python est programmé en C. Donc autant apprendre C directement.

    Je n'ai en revanche pas d'avis sur C++, n'ayant jamais pu me faire à la programmation orientée objet. Sans doute à cause de la documentation, qui utilise un vocabulaire abscons destiné à mystifier le bas peuple. De toutes façon, en C, il y a les structures, qui permettent une programmation objet primitive.

  • # Ca dépend

    Posté par  . Évalué à 3.

    Salut,
    la vraie question est que veux tu faire ? Si c'est de l'embarqué le C est très pertinent et encore très utilisé dans l'industrie. Si tout simplement ce langage te plait alors fonce :)

    Personnellement je me suis mis au langage Go qui est excellent pour du dev système et backend et même pour faire du dev web.

  • # Mon avis sur C VS Rust

    Posté par  . Évalué à 6.

    Bien que Rust ait le vent en poupe ces derniers temps, il ne faut pas oublier que beaucoup de code est écrit en C aujourd'hui, et la réécriture d'applications rust vers C ne se fera pas forcément from scratch : certains softs seront réécrits de zéro, mais pour d'autre, la réécriture se fera progressivement en faisant cohabiter C et Rust. Du coup, connaître le C est de mon point de vue presque indispensable pendant la transition C -> Rust.

    • [^] # Re: Mon avis sur C VS Rust

      Posté par  . Évalué à 3.

      Rien ne dit qu'une transition totale va avoir lieu.

      Le Rust est une alternative au C++, mais il ne joue pas du tout dans la même cour que le C (je pense particulièrement à l'embarqué sur microcontrôleur).

      • [^] # Re: Mon avis sur C VS Rust

        Posté par  . Évalué à 2.

        Rien ne dit qu'une transition totale va avoir lieu.

        Ce n'est pas ce que je dis non plus.

        Le Rust est une alternative au C++, mais il ne joue pas du tout dans la même cour que le C (je pense particulièrement à l'embarqué sur microcontrôleur).

        Peut-être pas maintenant, mais qu'est-ce qui pourrait l'en empêcher ?

        • [^] # Re: Mon avis sur C VS Rust

          Posté par  . Évalué à 2.

          J'ai un peu exagéré ton propos, mais c'est quand même une idée assez répandue dans la communauté Rust j'ai l'impression.

          Rust est trop haut niveau, mapper les gpios, écrire à une adresse particulière, je vois pas comment on peut faire en Rust à moins de tout mettre en unsafe (plus l'overhead des structures Rust).
          En vraie alternative pour le C je parierais plutôt sur Zig.

          nb: ce n'est pas pour enfoncer Rust, j'aime beaucoup ce langage.

  • # Apprend les deux ! Et commence par le C !

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

    Le Rust est un langage très plaisant et je ne doute pas qu'il aura (et a déjà) un bel avenir. Son apprentissage te permettra d'identifier plus facilement tout un tas d'erreurs et pratiques dangereuses, et t’interrogera sur ta façon de gérer la mémoire, de concevoir des architectures etc.

    Mais sans la base du C je ne sais pas si ce sera très facile.

    Commence à faire du C, c'est simple, il y a peu de chose à apprendre (comparativement à d'autres) et ça te fera une base. Énormément de langages empreinte quelque chose au C, ça te permettra de plus facilement t'y essayer.

    Le C++ te permettra de taquiner l'objet, et est la suite logique d'un apprentissage en C.

    Et une fois que tu t'es essayé au C et C++ je pense que les propositions et limitations du Rust paraîtrons plus claires et pertinentes.

    • [^] # Re: Apprend les deux ! Et commence par le C !

      Posté par  (Mastodon) . Évalué à 2.

      Le C++ te permettra de taquiner l'objet, et est la suite logique d'un apprentissage en C.

      Mmmmm, je ne suis pas tout à fait d'accord avec ça. Le C est un langage qui reste simple et dont on peut comprendre l'intégralité rapidement (ce qui ne veut pas dire maitriser, hein…), alors que le C++ est une accumulation de surcouches au C des origines qui demande un temps très long avant d'en comprendre une bonne partie.

      Passer directement à un langage moderne (Rust, Go ?) me parait un meilleur chemin. Bon, j'avoue, je ne suis pas un spécialiste de l'objet, même si je commence à me soigner avec le Fortran moderne, et parfois à replonger dans le Perl.

      • [^] # Re: Apprend les deux ! Et commence par le C !

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

        Il y a pleins de façons de faire du c++, j'ai toujours considéré que venant du C il était plus facile de se mettre au C++ qu'à Java par exemple.
        Si on se limite à la notion de classe en c++ on se retrouve literalement avec du c with classes. Si on veut pousser il y a effectivement tout un tas de concepts plus ou moins bien integrés qui se sont ajouté au fils du temps.

        Par contre, le saut de C à Rust risque d'être assez délicat. Mais pourquoi pas hein.

        Par contre même si le rust possede des traits etc qui peuvent avantageusement remplacer l'objet, ça me parait une bonne idée d'apprendre au moins les bases de l'objet.

        • [^] # Re: Apprend les deux ! Et commence par le C !

          Posté par  . Évalué à 3. Dernière modification le 04 août 2024 à 16:29.

          D'une manière générale, il est toujours plus facile d'aborder les langages « au moment où ils apparaissent » pour des raisons relativement évidentes : on a d'abord le temps de s'habituer à un langage avant de passer au suivant et parce que le « langage suivant » en question est généralement produit pour aborder tout ce qu'il manquait dans le précédent ou y était mal conçu, ce qui rend alors les nouveautés beaucoup plus faciles à assimiler. En conséquence, faire le chemin inverse est toujours plus difficile.

          Par contre, effectivement, il faut se méfier avec le C++ parce que l'on pense souvent le maîtriser, même en toute bonne foi, alors que c'est souvent loin d'être le cas.

          On pourrait dire la même chose de tous les langages, bien sûr, mais celui-ci est non seulement beaucoup plus vaste qu'on l'imagine, mais on peut raisonnablement penser qu'on en maîtrise déjà la plupart si on maîtrise le C. Par ailleurs, si on l'a appris dans les années 1980, 1990 ou 2000, alors on n'imagine pas non plus ce qu'a été la révision C++11 en particulier, surtout comparée aux suivantes qui ressemblent plus à des mises à niveau plus ordinaires. Certains disent que c'est quasiment un nouveau langage. Ce n'est pas les mots que j'aurais choisis. Je dirais plutôt qu'il a été enrichi de pas loin de 50 % (à la louche) de son volume précédent.

          Beaucoup de développeurs C++, lorsqu'on leur demandent conseil, prescrivent d'emblée « rien en dessous de C++11 » et je pense que c'est sage. En général, aujourd'hui, je pose moi-même mes prérequis à C++11 par défaut (donc pas moins) et je ne monte au dessus que lorsque c'est nécessaire ou que j'ai vraiment envie de pratiquer les nouveautés suivantes.

  • # Oui

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

    Tu n'as pas forcément besoin de le maîtriser à fond (sauf si tu veux travailler dans une industrie comme l'embarqué, les jeux, les simulations, les fabricants de matériels…), mais il y a tellement de programmes vivants en C et en C++ que tu en auras toujours besoin (pour envoyer un patch d'un soft que tu aimes bien, pour comprendre le code d'une bibliothèque que ton code dans un autre langage utilise…).

    Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

Suivre le flux des commentaires

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