web-dev-qa-db-fra.com

Devrais-je apprendre le C avant d'apprendre le C ++?

Aujourd'hui, j'ai visité une journée portes ouvertes du département CS de l'université et lors de la visite des laboratoires, nous nous sommes assis pour jouer avec quelques projets de dernière année d'étudiants de premier cycle. L’une était particulièrement bonne - une sorte de jeu d’astéroïdes FPS. J'ai décidé de jeter un coup d'œil dans le répertoire src pour découvrir que cela avait été fait en C++ (la plupart des autres projets étaient Java 3D)).

Je n'ai jamais fait de C auparavant, mais j'ai déjà lu du code C auparavant. D'après ce que j'ai vu dans le code .cpp de ce jeu, il ne semblait pas très différent.

Je suis intéressé à apprendre le C ou le C++, mais j'apprendrai probablement l’autre plus tard. Y a-t-il un avantage à apprendre les uns avant les autres et si oui, lequel?

111
Ross

Il n'est pas nécessaire d'apprendre le C avant d'apprendre le C++.

Ce sont des langues différentes . Il est courant de penser à tort que C++ dépend d’une manière ou d’une autre de C et non d’un langage entièrement spécifié.

Ce n’est pas parce que C++ partage la même syntaxe et la même sémantique que vous devez d’abord apprendre le C.

Si vous apprenez le C++, vous apprendrez finalement la plupart du C avec quelques différences entre les langues que vous apprendrez au fil du temps. En fait, c’est très difficile d’écrire en C++ car les programmeurs intermédiaires en C++ ont tendance à écrire en C/C++, que vous ayez ou non démarré avec C ou C++.

Si vous connaissez C en premier, alors c’est bien d’apprendre le C++. Vous commencerez par connaître une partie de la langue. Si vous ne connaissez pas C en premier, il est inutile de se concentrer sur une langue différente. Il existe de nombreux livres et didacticiels disponibles qui vous permettent de ne rien savoir et qui couvrent tout ce que vous apprendrez de C et qui s'applique également à C++.

S'il vous plaît voir plus de raisonnement dans cette réponse .

113
Brian R. Bondy

J'adore cette question - c'est comme demander "que dois-je apprendre en premier, faire du snowboard ou du ski"? Je pense que cela dépend si vous voulez faire du snowboard ou du ski. Si vous voulez faire les deux, vous devez apprendre les deux.

Dans les deux sports, vous dévalez une colline sur la neige en utilisant des appareils suffisamment similaires pour provoquer cette question. Cependant, ils sont également suffisamment différents pour que l’apprentissage de l’un ne vous aide pas beaucoup avec l’autre. Même chose avec C et C++. Bien qu’ils semblent être des langages dont la syntaxe est suffisamment similaire, l’esprit dont vous avez besoin pour écrire OO code vs code procédural est suffisamment différent pour que vous deviez pratiquement commencer au début, quelle que soit la langue vous apprenez en second.

72
cdonner

J'ai d'abord appris le C et j'ai suivi un cours sur les structures de données qui utilisait le C avant d'apprendre le C++. Cela a bien fonctionné pour moi. Un cours sur les structures de données en C m'a apporté une solide compréhension des pointeurs et de la gestion de la mémoire. Cela a également mis en évidence les avantages du paradigme orienté objet, une fois que j'ai appris ce que c'était.

D'un autre côté, en apprenant d'abord le C, j'ai développé certaines habitudes qui m'ont initialement amené à écrire du code C++ incorrect, comme l'utilisation excessive de pointeurs (lorsque les références C++ le feraient) et le pré-processeur.

C++ est vraiment un langage très complexe avec beaucoup de fonctionnalités. Ce n'est pas vraiment un sur-ensemble de C, cependant. Il existe plutôt un sous-ensemble de C++ composé des constructions de programmation procédurale de base (boucles, ifs et fonctions), qui est très similaire à C. Dans ce cas, je commencerais par cela, puis je progresserais dans des concepts plus avancés. comme des classes et des modèles.

Le plus important, à mon humble avis, est d’être exposé très tôt à différents paradigmes de programmation, tels que la procédure, l’objet orienté, la fonctionnalité et la logique, avant que votre cerveau ne se fige en une seule façon de regarder le monde. Incidemment, je vous recommande également fortement d'apprendre un langage de programmation fonctionnel, tel que Scheme. Cela élargirait vraiment vos horizons.

62
Dima

Si vous décidez d'apprendre les deux (et comme d'autres personnes l'ont mentionné, il n'y a aucun besoin explicite d'apprendre les deux), commencez par apprendre le C. Passer de C à C++ donne l’impression d’une progression naturelle; aller dans l’autre sens, c’est comme attacher délibérément une main derrière son dos. :-)

13
Head Geek

Je pense que vous devriez apprendre le C en premier, parce que j'ai appris le C en premier. C m'a donné une bonne compréhension de la syntaxe et des pièges avec des choses comme des pointeurs, qui se retrouvent tous en C++.

Je pense que C++ facilite la conclusion de tous ces pièges (vous avez besoin d’un tableau qui ne débordera pas lorsque vous utiliserez l’opérateur [] et un index dodgy? Bien sûr, créez une classe de tableau qui vérifie les limites), mais vous devez savoir quoi ils le sont et se font mordre par eux avant de comprendre pourquoi certaines choses sont faites.

Quand tout est dit et fait, on enseigne généralement le C++ comme suit: "Le C++ est un C avec des objets, voici le truc C et voici comment tout cela OO ça marche"), vous êtes donc susceptible de Apprenez le C de base avant tout C++ réel si vous suivez malgré tout la plupart des textes.

12
Adam Hawes

Je ne suis pas d'accord avec la majorité ici. Je pense que vous devriez apprendre le C avant d'apprendre le C++. Ce n'est certainement pas nécessaire, mais je pense que cela facilite beaucoup l'apprentissage de C++. C est au coeur de C++. Tout ce que vous apprenez sur le langage C est applicable au C++, mais le langage C est beaucoup plus petit et plus facile à apprendre.

Prenez K & R et lisez-le. Il est court et vous donnera un sens suffisant de la langue. Une fois que vous avez les bases des pointeurs et des appels de fonction, vous pouvez passer à C++ un peu plus facilement.

12
Steve Rowe

C est un langage incontournable pour le génie logiciel. C++, Java, python, ne sont pas. Vous devriez d'abord l'apprendre sans aucun doute.

12
old_timer

Dans le processus d’apprentissage du C++, vous apprendrez également la majeure partie du C. Mais gardez à l’esprit que beaucoup de code C++ n’est pas valide. Le C++ a été conçu pour être compatible avec le code C, c’est pourquoi je commencerais par apprendre le C++. Brian a écrit un bonne réponse à ce sujet.

10
John T

Non.

Il est généralement plus utile d'apprendre le C++, car il se rapproche des langages les plus modernes basés sur OO, tels que Eiffel ou C #.

Si votre objectif est d'apprendre le C++, commencez par apprendre le C++ moderne et standard. Laissez les mallocs de côté.


Mais Steve Rowea un point ...

8
Daniel Daranas

L'apprentissage C vous oblige à réfléchir plus sérieusement à certains problèmes tels que la gestion de la mémoire explicite et implicite ou la taille de stockage des types de données de base au moment de l'écriture de votre code.

Une fois que vous avez atteint un point où vous vous sentez à l'aise avec les fonctionnalités de C et les dysfonctionnements, vous aurez probablement moins de difficulté à apprendre et à écrire en C++.

Il est tout à fait possible que le code C++ que vous avez vu ne soit pas très différent du C standard, mais peut-être parce qu’il n’était pas orienté objet et n’utilisait pas d’exceptions, d’orientation objet, de modèles ou d’autres fonctionnalités avancées.

8
hillu

Tout comme les réponses à de nombreuses autres questions de la vie, cela dépend. Cela dépend de vos intérêts et objectifs en matière de programmation. Si vous souhaitez programmer des applications de bureau, éventuellement avec une interface graphique, le C++ (et la POO) est probablement une meilleure solution. Si vous êtes intéressé par la programmation matérielle sur autre chose qu'un chipset x86, alors C est souvent un meilleur choix, généralement pour sa vitesse. Si vous voulez créer un nouveau lecteur multimédia ou écrire une application professionnelle, je choisirais le C++. Si vous voulez faire des simulations scientifiques des collisions de galaxies ou de la dynamique des fluides, voyez la puissance de C.

7
Scottie T

Après avoir observé des personnes ayant appris Java d’abord en conflit avec les concepts de pointeurs et de gestion de la mémoire en C++, je dirais qu’apprendre en C est une bonne idée, afin de saisir ces deux concepts, isolés de la complexité des autres fonctionnalités C++.

6
TrayMan

Mes deux centimes:

Je suggère d’apprendre le C en premier, parce que:

  • c'est une langue fondamentale - beaucoup de langues descendent du C
  • plus de plates-formes supportent le compilateur C que le C++, qu’il s’agisse de systèmes embarqués, de puces GPU, etc.
  • selon index TIOBE C est encore environ 2 fois plus populaire que C++.
6
Agnius Vasiliauskas

Je pense qu'apprendre le C d'abord est une bonne idée.

Il y a une raison pour laquelle les cours de science-fiction utilisent encore le C.

A mon avis, pour éviter tout "encombrement" du sujet, l’obligation de demander OOP emporte.

Je pense que la programmation procédurale est le moyen le plus naturel de commencer par apprendre la programmation. Je pense que c'est vrai parce qu'en fin de compte c'est ce que vous avez: des lignes de code s'exécutant les unes après les autres.

Aujourd'hui, de nombreux textes préconisent une approche "objets d'abord" et commencent à parler de voitures et de changements de vitesse avant qu'ils n'introduisent des tableaux.

6
bobobobo

je pense que c est un langage de programmation vraiment agréable, il est compact et un peu facile à apprendre. mais si vous voulez seulement apprendre c ++, commencez par c ++. mais je vous suggère d'apprendre les deux. et si vous voulez faire ça; Je pense qu'il est préférable de commencer avec c. comme dit précédemment: c'est petit et assez facile à apprendre. pourrait être une belle étape vers un langage de programmation plus complexe comme c ++. (puisque c vous fournit des bases)

bonne chance.

3
Marnix v. R.

Certains livres en C++ supposent que le lecteur ait une connaissance minimale du langage C, mais quelle que soit la langue choisie, de nombreux langages de programmation basés sur le C/C++ sont partiels et pour l’apprentissage futur, d’autres langues seront un peu plus faciles.

0
night_crawler