Partage
  • Partager sur Facebook
  • Partager sur Twitter

Précisions sur C ou C++

Apprentissage

Sujet résolu
    20 mai 2019 à 1:39:38

    Bonjour, 

    Après vous avoir lu un ancien topic d'o.c, j'aimerais connaître vos recommandations.

    Je suis complètement débutant, j'aime créer, j'ai aimé du peu que j'en ai touché la prog, je n'ai pas vu le temps défiler.

    On m'a conseillé (un gars d'enjmin et un autre en iut) de commencer par apprendre les variables/fonctions/boucles et tableaux en C puis de me diriger directement vers le C++.

    Si j'ai bien compris je n'en apprendrais pas plus et je ne deviendrais pas plus performant en maîtrisant d'abord le C et attaquer directement le C++, mais deux trois précisions me taraudes.

    Attaquer directement par du C++ sans rien y connaître serait valide ? 

    Il n'y aurait vraiment rien à tirer du C (à apprendre) que n'apprendrai pas le C++ ? Je veux dire par là mieux maîtriser les transferts de données, l'optimisation etc ?

    Pour débuter le conseil des deux premiers intervenants restent bons et valide ou la démarche est totalement improductive et déconseillée ?

    Ce sont mes derniers questionnements avant que je ne me lance sereinement après avoir parcouru d'innombrables questionnements et en quête de vérité, j'espère que vous pourrez me guider. Je vous remercie d'avance

    PS: j'suis presque prêt à acheter les livres, je sais pour le C++ Lippmann, reste encore un bon livre en C pour démarrer si vous avez aussi une recommandation particulière dans le cas où vous trouveriez l'idée assez pertinente de démarrez doucement par les fonctions de bases en prog C.

    Je vous remercie d'avance, honorablement Mickael.

    • Partager sur Facebook
    • Partager sur Twitter
      20 mai 2019 à 2:03:52

      > On m'a conseillé (un gars d'enjmin et un autre en iut) de commencer par apprendre les variables/fonctions/boucles et tableaux en C puis de me diriger directement vers le C++.

      SI ton but est d'apprendre le C++, commence pas le C++. Ce sont 2 langages très proche à l'origine, mais qui ont beaucoup divergé au fils des années. Rien que sur ce qu'on pourrait considérer la base (variables/fonctions/boucles), il y a de grosses différences qui apparaissent assez vite (le C++ est plus riche à ce niveau, mais aussi plus simple). Les tableaux "à la C" sont plutôt déconseillés en C++ au profit de ce qu'offre la bibliothèque standard.

      > Si j'ai bien compris je n'en apprendrais pas plus et je ne deviendrais pas plus performant en maîtrisant d'abord le C et attaquer directement le C++.

      Cela va même encore plus loin, les réflexes appris dans les 2 langages sont très radicalement différents. Appliqué les réflexes du C dans un code C++ donne un code plus compliqué et généralement avec plus de bug. En gros, un mauvais code.

      > Attaquer directement par du C++ sans rien y connaître serait valide ?

      Oui, du moment que le cours est bon. En plus du Primer, il y a le cours de ZdS (incomplet, mais plus récent).

      Quel que soit le langage, un cours pour débuter commence par les bases.

      > Il n'y aurait vraiment rien à tirer du C (à apprendre) que n'apprendrai pas le C++ ? Je veux dire par là mieux maîtriser les transferts de données, l'optimisation etc ?

      Vraiment rien :)

      Et l'optimisation et un domaine avancé, pas une chose qu'un débutant devrait s'inquiéter.

      • Partager sur Facebook
      • Partager sur Twitter
        20 mai 2019 à 2:18:25

        Déjà grand merci pour ta réponse. Je me dirige naturellement vers ces deux langages car 

        1) appris à l'école. D'où leur sérieux (je ne dis pas ça pour dénigrer, juste que si c'est au programme depuis toujours c'est que c'est pertinent)

        2) j'aimerais tout de suite partir sur de la maîtrise. Que j'apprenne à la dur. J'aimerais faire parti de cette profession et en être honoré.

        Quand je parle d'optimisation j'ai fait ce qu'on appelle un mot valise. Je veux bien sûr parler d'un programme plus proche du système pour obtenir un programme rapide, plus performant, mais aussi plus rigoureux et plus professionnel ,comprendre les subtilités de la programmation qui serait cachés dans d'autres langage. Bref qualité avant tout.

        Il y a très longtemps je partais du fait de produire un jeu vidéo, mais c'était il y a un moment. Maintenant je veux juste devenir programmeur. Cela serait il pertinent vu mon niveau totalement débutant ?

        -
        Edité par MickaelBernier 20 mai 2019 à 2:43:34

        • Partager sur Facebook
        • Partager sur Twitter
          20 mai 2019 à 3:13:16

          > 1) appris à l'école. D'où leur sérieux (je ne dis pas ça pour dénigrer, juste que si c'est au programme depuis toujours c'est que c'est pertinent)

          Bof. L'éducation à toujours eu un train de retard. Le C devrait disparaître, il est complexe et source d'erreur alors que d'autres langages ferraient mieux le taf et plus facilement. Le problème est qu'une masse considérable de code écrit en C existe aujourd'hui et qu'il faut bien le maintenir. Il y a aussi certains domaines où seul le C existe, mais cela se réduit fortement depuis l'apparition de LLVM. Mais à part dans une spécialisation particulière, je ne vois aucune raison s'apprendre le C, même si j'ai l'impression que dans l'éducation "il faut apprendre C pour faire du C++" à la vie dure.

          > 2) j'aimerais tout de suite partir sur de la maîtrise. Que j'apprenne à la dur. J'aimerais faire parti de cette profession et en être honoré.

          Ce n'est pas une bonne idée. On ne part par sur de la maîtrise sans connaître parfaitement les bases. En plus, C++ est l'un des langages le plus complexe qui soit. Personne ne connaît tout C++ et on en apprend tous les jours dessus.

          Ne brûle pas les étapes au risque d'avoir l'effet inverse de celui voulut.

          > Je veux bien sûr parler d'un programme plus proche du système pour obtenir un programme rapide, plus performant, mais aussi plus rigoureux et plus professionnel ,comprendre les subtilités de la programmation qui serait cachés dans d'autres langage.

          L'optimisation passe plus par des structures de donnée adaptée au problème qu'à des composants systèmes plus difficile à utiliser pour lesquels il existe quelque part une abstraction sûre et robuste. C'est ça aussi d'être professionnel: utiliser ce qui existe plutôt que de se prendre la tête et perdre du temps sur des détails qui n'apporte rien.

          Quant aux subtilités, elles s'apprennent avec des cours/doc, de l'expérimentation et de la pratique. Mais c'est aussi beaucoup d'info à ingurgiter pour un débutant et l'objectif premier ne devrait pas être de comprendre tous les détails. Surtout que niveau subtilité, C++ est bien garni...

          > Il y a très longtemps je partais du fait de produire un jeu vidéo, mais c'était il y a un moment. Maintenant je veux juste devenir programmeur. Cela serait il pertinent vu mon niveau totalement débutant ?

          On a tous commencé débutant.

          • Partager sur Facebook
          • Partager sur Twitter
            20 mai 2019 à 11:05:57

            Salut,

            Tous les langages de programmation -- du moins, tous ceux qui entre dans la catégorie des langages de programmation dits "de troisième génération" et dans la classe des langages dits "impératifs", en ce, compris les langages dits "orientés objet" -- vont présenter des concepts communs, tels que:

            • instructions,
            • variables,
            • types définis par l'utilisateur (sous différentes formes)
            • tests (sous plusieurs formes)
            • boucles (sous plusieurs formes)
            • algorithmes
            • collections "dynamiques" (dont le nombre d'éléments est connu uniquement à l'exécution) de donnée

            Tous vont présenter la même particularité : il ne s'agit de rien d'autre que d'un ensemble de conventions destinés à permettre la communication entre un humain et quelque chose d'aussi bête qu'un ordinateur.

            Et tous nécessiteront d'appliquer des principes, des règles et des "lois" ... très similaires.

            Seuls les langages dits "fonctionnels" présentent quelques différences "conceptuelles

            Il y a donc -- effectivement -- une "base commune", que ce soit entre C et C++ ou entre Python ou Go ou n'importe quel autre langage et ... n'importe quel autre langage de programmation entrant dans la même catégorie.

            Mais là s'arrête la comparaison, car tous les langages présentent une approche de ces concepts, une "philosophie", une bibliothèques de "fonctionnalités de base" et -- très souvent -- une syntaxe différente.

            Il n'y a donc pas plus d'intérêt à apprendre n'importe quel langage "dans l'espoir de faciliter la compréhension d'un autre" qu'il n'y en aurait  à se forcer à apprendre le latin de Jules Cesar dans l'espoir de faciliter l'apprentissage du français!

            D'un autre coté, tout comme il est utile d'apprendre la grammaire, par exemple, pour comprendre les différentes règles d'orthographe qui n'ont "rien à voir"  avec la manière d'écrire correctement les différents mots séparément, il s'avère particulièrement utile d'apprendre ces concepts, ces règles, ces principes et ces lois "hors de tout langage de programmation".

            Et, surtout, il s'avère plus qu'intéressant d'apprendre à ... exprimer l'ordre logique dans laquelle exécuter différentes instructions de manière à la rendre "suffisamment simple" que pour permettre à un ordinateur de la comprendre.

            L'idéal étant même d'apprendre à représenter cette logique -- indépendante de tout langage de programmation spécifique -- d'une manière "durable" afin de pouvoir l'utiliser "plus tard" ou de pouvoir la transmettre à quelqu'un qui la mettra en oeuvre dans un langage particulier. On se rendra d'ailleurs compte que, une fois que cette logique est correcte (qu'elle mène systématiquement au résultat souhaité) et correctement représentée (car il existe plusieurs représentation possibles), il devient possible de la traduire dans n'importe quel langage de programmation avec la certitude que la première compilation ou la première exécution (dans le cas des langages interprétés) réussie (respectant les différentes règle du langage concerné) fournisse un résultat correct et cohérent.

            Il est vrai que certains langages sont "plus adaptés que d'autres" lorsqu'il s'agit d'apprendre ces concepts.  Le malheur voulant que ces langages sont souvent"moins adaptés que d'autres" à une utilisation "industrielle":'(.

            Certaines écoles vont préférer aborder les concepts de la programmation au travers de ces langages "d'apprentissage".  D'autres (beaucoup plus, selon mon ressenti, qui est peut-être erroné)  vont préférer utiliser le C, parce que, d'une certaine manière, il représente le "plus bas niveau" des langages "de haut niveau" (ou de troisième génération), qu'il est considéré comme la "franca linguae" de l'informatique ou parce que c'est le langage le plus utilisé pour la mise en oeuvre de systèmes d'exploitation.

            Et presque toutes ne font que reproduire, d'année en année, ce qu'elles ont fait l'année précédente.  Qu'il suffise de se rendre compte que de nombreux professeurs tentent encore, en 2019, alors que qu'il y a eu quatre mises à jours importantes de la norme (je parle des normes C++05, C++11, C++14 et C++17) depuis, de nous apprendre le C++ selon la méthodologie qu'ils appliquaient en ... 1998 pour s'en convaincre!

            Quelques rares écoles enfin ont tout compris : il n'est absolument pas nécessaire d'apprendre un langage en particulier pour apprendre la programmation.  Mieux encore: il n'y a même pas besoin de mettre l'étudiant face à un ordinateur pour lui donner les bases, parce que ... des outils aussi simple qu'un (bloc de) papier et un crayon suffisent.

            Bien sur, le cours risque d'être beaucoup moins "excitant" pour l'étudiant -- il n'y a rien à faire : l'élève aime la magie qui fait qu'il suffise de taper une "formule magique" sur le clavier pour voir le résultat se dérouler devant les yeux -- et encore, cela dépendra énormément du prof qui donne cours.

            Mais, quand on y pense un tout petit peu: quelle que soit la logique ou le concept mis en oeuvre, il est tout à fait possible de l'exprimer en... francais tout à fait classique:

            J'ai une variable (numérique entière) nommée i

            J'ajoute 5 à la valeur de i

            représente une logique que l'on peut "traduire" en n'importe quel langage!

            Tout ce qu'il faut, c'est arriver à se rendre "aussi bête qu'un ordinateur", car la question qui nous vient directement à l'esprit en la voyant est :

            que vaut i après cette opération?

            Et la tentative d'apporter une réponse à cette question nous pousse "forcément" à répondre à une autre question:

            Que valait i AVANT l'opération?

            Car il semble "logique" que la valeur finale de i dépende en grande partie ... de sa valeur originale:-°:waw:

            Et là, il y a deux solutions :

            • Soit la valeur originale de i avait été définie "plus tôt" (on aura alors marqué "quelque part" que "i = XXX", et la réponse est donc que, après l'opération, i = XXX+5 (sans blague ?!?)
            • Soit la valeur originale de i n'avait pas été définie.  Et, dans ce cas, comment voulez vous que je puisse (ou qu'un ordinateur puisse) évaluer la valeur finale de i???

            Le développement informatique, c'est toujours "aussi bête que ca"!  Notez que je n'ai jamais dit que c'était "simple"... Mais c'est parfaitement "idiot" ;)

            Passer par le C pour apprendre le C++ est une très mauvaise idée.  Tout comme la simple idée de ... passer par n'importe quel langage uniquement pour en apprendre un autre.

            Mais, apprenez les bases, les notions communes aux différents langages.  Voyez ces bases comme la terre glaise à laquelle vous devrez donner forme, et vous arriverez très facilement à maîtriser n'importe quel langage, dés le moment où vous en aurez compris la "philosophie" ;)

            • Partager sur Facebook
            • Partager sur Twitter
            Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
              20 mai 2019 à 11:54:44

              Très très pertinent. Merci beaucoup pour avoir pris le temps de me répondre ;)

              • Partager sur Facebook
              • Partager sur Twitter

              Précisions sur C ou C++

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown