Est-ce correct si je ne connais pas le C mais que je suis bon en C ++? [fermé]

23

J'ai une question à laquelle je pense qu'il est préférable de répondre ici.

Je suis assez bon avec C++, bon car je suis à l'aise avec la langue, j'ai lu Accelerated C++et fait presque tous les exercices.

Cependant, j'ai un gros problème. Dois-je apprendre C? Je ne l'ai jamais fait Cde ma vie. Je viens de C++commencer avec la programmation. Probablement parce que j'ai toujours voulu savoir pourquoi tout le monde appelle la langue si complexe. Maintenant que je connais la réponse à cette question;)

Je suis particulièrement intéressé à savoir si je peux survivre sans savoir Cdans le monde d'aujourd'hui. Par exemple, si je donne un entretien dans une entreprise, si je leur dis que je ne sais pas C- est-ce qu'ils le prendront comme OK? Les deux langages avec lesquels je suis bon sont Python et C ++. Je pose cette question car j'ai entendu dire que les entreprises demandent des structures de données lors des entretiens. Donc, s'ils me demandent de l'implémenter, et si je le fais en C ++, est-ce acceptable?

Et les gens qui disent "comment pouvez-vous ne pas connaître le C quand vous C ++", ne répondez pas :) Je ne m'offusque pas, mais je ne comprends pas pourquoi l'apprentissage du C est une condition préalable.

SS
la source
1
L'article cité par DumbCoder concerne la popularité du C dans la programmation embarquée.
ChrisW
2
@ChrisW - Oui, mais cela montre toujours que C n'est pas si facile à maîtriser, pas que C ++ est facile à maîtriser.
DumbCoder
@DumbCoder: Oh non, programmation intégrée. Combien d'emplois sont intégrés par rapport au bureau?
DeadMG
@DeadMG - La maîtrise d'une langue n'a rien à voir avec le nombre d'emplois disponibles pour cette langue. Et d'où vous est venue l'idée que C n'est utilisé que dans la programmation embarquée?
DumbCoder

Réponses:

36

Si vous connaissez le C ++, je n'apprendrais pas le C juste pour le plaisir. Vous ne devriez pas trouver trop difficile d'apprendre si et quand vous en avez besoin.

Je préfère de loin rencontrer quelqu'un qui prétend connaître le C ++ mais pas C que quelqu'un qui prétend connaître le C / C ++.

CB Bailey
la source
Oh oui. C'est la liste d'articles en premier dans la question SO sur les mythes urbains C ++: stackoverflow.com/questions/2245196/c-urban-myths
4
+1. Si vous connaissez le C ++, pour commencer, c'est une pisse d'apprendre le C, et deuxièmement, c'est vraiment sans importance.
DeadMG
6
@DeadMG Il pourrait être facile d'apprendre la syntaxe, car il s'agit simplement de savoir quelles parties de C ++ laisser de côté, mais l'apprentissage des idiomes communs est plus difficile, et sans doute la partie la plus importante. Mais je n'apprendrais pas le C à moins d'en avoir besoin.
KeithB
6
@chubsdad tu veux dire que je ne devrais pas mettre "Je connais Java / Javascript" sur mon CV?
Incognito
@ user257493: Il n'y a rien de tel que Java / Javascript
John Dibling
23

Une réponse en plusieurs parties. Mes opinions seulement.

  1. Mon expérience (25 ans après l'université) est que le C ++, bien que de plus en plus rare, continuera d'être vital pour les systèmes intéressants dans un avenir prévisible. Je m'en tiens donc à cela comme mon principal domaine d'expertise. Le travail est dur, intéressant et important.

  2. Les programmeurs C ++ sont généralement utiles précisément parce qu'ils n'ont pas grandi dans les langages gérés, et ont donc plus de chances de comprendre ce qui se passe sous les couvertures. Il est plus facile de passer de C ++ à C # / Java que l'inverse, car la barre d'entrée est plus élevée.

  3. Donc, à mon avis, il n'est pas essentiel de comprendre le C pour programmer avec compétence en C ++, développer une compréhension des raisons pour lesquelles le C ++ existe dans le contexte du C - ses limites et ses forces et comment elles sont traitées ou non en C ++ - serait inestimable pour vous au fil du temps.

Bonne chance.

Steve Townsend
la source
Qu'est-ce qui vous fait dire que le C ++ est de plus en plus rare? D'après votre expérience, qu'est-ce qui le déplace?
Praxeolitic
13

Voici ce que Bjarne a à dire:

Connaître le C est une condition préalable à l'apprentissage du C ++, non?

Faux. Le sous-ensemble commun de C et C ++ est plus facile à apprendre que C. Il y aura moins d'erreurs de type à intercepter manuellement (le système de type C ++ est plus strict et plus expressif), moins de trucs à apprendre (C ++ vous permet d'exprimer plus de choses sans circonlocution) et de meilleures bibliothèques disponibles. Le meilleur sous-ensemble initial de C ++ à apprendre n'est pas "tout C".

Chubsdad
la source
4

Juste mon opinion personnelle: si vous connaissez le C ++, vous pouvez écrire en C. Une certaine expérience serait bien, mais ce n'est pas un problème. L'inverse n'est pas correct: la connaissance C ne permet pas d'écrire en C ++, sans apprentissage supplémentaire. Je n'ai jamais appris le C, et je l'utilise quand c'est nécessaire, sans aucun problème.

Alex F
la source
3
@Alex Farber - "Si vous connaissez le C ++, vous pouvez écrire en C". J'en doute fortement :)
DumbCoder
4
Être en désaccord. IME, les programmeurs qui apprennent d'abord le C ++ ont tendance à ne pas se rendre compte des fonctionnalités C ++ que C n'a pas. Les programmeurs qui apprennent le C en premier peuvent facilement écrire en C ++, mais démarrent de manière non idiomatique.
dan04
1
Ceci est basé sur mon expérience personnelle. J'ai appris le C ++ et fais la plupart de mon travail en C ++. Mais j'utilise C quand c'est nécessaire, sans aucun problème.
Surtout étant donné que toutes les bibliothèques de classe mignonnes ne sont pas disponibles en C.
8
Les programmeurs C ++ essayant de pirater leur chemin à travers C écrivent du mauvais code pour les mêmes raisons pour lesquelles les programmeurs C essayant de pirater leur chemin à travers C ++ écrivent du mauvais code. Les gars C utilisent C ++ comme «C avec classes» tandis que les gars C ++ utilisent C comme «C ++ sans classes».
John Dibling,
4

D'accord, tout d'abord - non, connaître le C n'est pas une condition préalable à l'apprentissage du C ++. En effet, cela peut être un obstacle.

Deuxièmement, c'est complètement situationnel. Que vous ayez ou non besoin de connaître C dépend entièrement de si le travail l'exige. Si vous voulez être un gars des systèmes embarqués, alors oui, l'apprentissage du C vous aidera. Sinon, la plupart des travaux ne l'exigent pas. Si un travail a besoin de C, il doit le dire. S'il ne le dit pas, il n'en a probablement pas besoin. En ce qui concerne les structures de données, cela revient encore à l'entreprise. Habituellement, une entreprise dira "Nous programmons dans ces langues, écrivez-nous cette structure de données. Utilisez la langue de votre choix dans la liste ci-dessus." S'ils vous demandent de l'écrire en C, vous dites simplement "Je ne connais pas C - cela ne dit pas sur mon CV que je connais C, ce travail n'est pas pour moi."

Stephen
la source
Pourquoi la connaissance de C serait-elle un obstacle à l'apprentissage du C ++? Je ne dis pas que je suis en désaccord nécessairement, mais c'est une déclaration audacieuse.
Casey Patton le
3

Par exemple, si je donne un entretien dans une entreprise, si je leur dis que je ne connais pas C - est-ce qu'ils vont le considérer comme OK?

Demandez-leur s'ils ont besoin de C (et soyez prêts à l'apprendre ou non s'ils le font).

Donc, s'ils me demandent de l'implémenter, et si je le fais en C ++, est-ce acceptable?

Je m'attendrais à ce que, s'ils vous interviewent / vous embauchent pour travailler en C ++.

S'il s'agit d'une question sur les "structures de données", vous pouvez leur demander s'ils veulent que vous montriez à l'aide de conteneurs STL ou si (parce que c'est une interview) ils veulent que vous implémentiez les structures de données à partir de zéro.

ChrisW
la source
2

C est presque un sous-ensemble approprié de C ++. Si vous ne connaissez pas C, alors vous ne connaissez pas un grand et important sous-ensemble de C ++. Avez - vous avez à apprendre ce sous - ensemble? Non. C ++ est un langage ridiculement gros et la plupart des gens choisissent un sous-ensemble et un programme avec ça. Il n'est pas nécessaire que vous connaissiez le sous-ensemble qui est C. Surtout, il n'est pas aussi important de connaître la bibliothèque standard C. Cependant, je jetterais un œil très soupçonneux sur quiconque ne comprend pas les concepts de base du C comme les pointeurs, les tableaux et le twiddling.

Frankc
la source
2

Dois-je apprendre le C?

Non, vous n'en avez pas besoin. Période.

Mais l'apprentissage de tout nouveau langage de programmation est bénéfique à long terme. L'apprentissage de langages basés sur différents paradigmes de programmation est encore plus bénéfique. Que ce soit un langage OOP (Smalltalk ou C ++), un langage dynamique (Lisp, Clojure, Python), fonctionnel (Lisp, Haskell, Erlang), concurrent (Erlang, Go, Algol 68, Smalltalk), ou autre (Fortran 03, Perl, Forth), un autre nouveau paradigme fangled frappe votre fantaisie; l'apprentissage de différentes langues vous aide à vous exposer à plusieurs pistes de réflexion, chacune avec ses propres forces et faiblesses pour aborder la tâche à accomplir.

Fortran est toujours dominant dans l'informatique numérique, COBOL est toujours un pilier des grandes compagnies d'assurance, Unix, BSD et Linux sont toujours basés principalement sur C.L'ancien code ne perd pas sa valeur avec l'âge toujours parce qu'il ne s'use pas nécessairement comme des dispositifs mécaniques qui doivent être remplacés au fil du temps. Ainsi, une langue plus ancienne peut être utile en termes d'employabilité par rapport au facteur cool d'une langue plus récente .

Tout comme étudier pour devenir multilingue dans les langues naturelles (humaines) améliore sans doute votre capacité à vous exprimer , il en va de même pour les langages informatiques.

Donc, même si je pense qu'il est important (au fil du temps) d'apprendre à maîtriser non seulement plusieurs langues, mais il est plus important de maîtriser plusieurs paradigmes de programmation.

Je suis assez bon en C ++, bon comme je suis à l'aise avec le langage, j'ai lu Accelerated C ++ et fait presque tous les exercices

Je vais sauvegarder et dire que le C ++ est un langage riche et complexe, il faudra des années d'exposition et de pratique constante pour devenir vraiment à l'aise dans toutes ses subtilités riches (ou laides).

Prenez votre temps et continuez à apprendre est le conseil le plus important que je puisse vous donner. Pour le point de vue de quelqu'un d'autre, je vous encourage à lire la programmation Teach Yourself de Peter Norvig en dix ans .

mctylr
la source
1

Une réponse très courte à votre question est: cela dépend fortement de vos besoins. Certaines entreprises comptent principalement sur C, parfois comme une relique (si C avait déjà été utilisé pendant des années là-bas). D'autres sociétés n'ont rien à voir avec C. C est un langage de niveau inférieur à, disons, Python ou Java, et la plupart des programmes d'application ne nécessitent aucune connaissance de C. Contrairement aux langages OOP, C nécessite une mentalité différente, par laquelle Je veux dire que les programmes sont structurés et organisés différemment, et certains aspects plus nuancés doivent être pris en considération. Il est généralement bénéfique d'apprendre cet idiome, même simplement pour élargir votre esprit, pour ainsi dire. Mais encore une fois, si les entreprises s'en soucieront dépendra de leurs besoins. Certains peuvent vous donner le choix du langage, certains peuvent nécessiter Java, d'autres C ++, d'autres encore C, etc. Pouvez-vous survivre? Oui aujourd'hui' Le monde de s a tellement de domaines de programmation différents que vous ne passerez peut-être même jamais par le code C. Devriez-vous apprendre le C? Je dirais - oui, quelle que soit l'utilisation ultérieure.

user400348
la source
1

Certaines personnes peuvent ne pas se sentir à l'aise de programmer en C tout en connaissant le C ++.

Il existe une structure "protectrice" autour de C ++ qui contribue à piloter non seulement la structure mais aussi les algorithmes d'un programme. Par exemple, l'aide de la structure et des algorithmes STL, l'approche de programmation orientée objet évidente, le con / destructeur, la couche abstractive ajoutée provenant des modèles ...

Alors que C est - dit - plus simple, il oblige le programmeur à injecter lui-même une structure et des algorithmes dans la modélisation du problème. Il s'agit d'une augmentation intense de la liberté de programmation.
Mais cela a un coût, car certaines personnes ont besoin d'une structure plus imposée et construisent un programme qui a tendance à être exponentiellement plus difficile à maintenir à mesure qu'il grandit. Je dis souvent que le problème n'est pas le langage (C) mais ce qu'on en fait.

Cela étant dit, en tant que recruteur, je suis heureux d'interviewer quelqu'un avec de solides compétences en C ++, mais je serais encore plus enthousiaste si elle avait suffisamment d'autonomie linguistique pour développer un projet C complet.

En outre, un bon programme C implique de bonnes compétences en système de développement, car le langage nécessite (généralement) une bonne compréhension des composants du système pour créer un exécutable efficace.

Ø bague
la source
Je ne dirais pas que cela augmente la liberté du programmeur - vous pouvez toujours écrire votre propre structure et algorithmes en C ++.
DeadMG
0

Si vous êtes à l'aise en C ++, je ne m'inquiéterais pas d'apprendre C. C ++ a beaucoup d'améliorations par rapport à C (la capacité de prendre en charge RAII avec des constructeurs / destructeurs, des conteneurs de base, des flux et des chaînes est grande).

Je suggérerais cependant d'apprendre la printfet la scanfsérie de fonctions afin que vous puissiez LIRE le code qui les utilise. Ils sont assez populaires en C ++, donc savoir comment ils sont utilisés est utile. Je ne suggère pas de les utiliser dans votre propre code sans raison très précise.

Mark B
la source
0

La seule fois où vous devez connaître C est si vous êtes censé produire du code C. Sinon, il n'y a pas de problème.

Je n'ai pas écrit C professionnellement au cours des 6 dernières années; il existe de nombreux domaines d'application mieux servis par d'autres langages (au moins du point de vue de la productivité, sinon des performances) comme Java ou C # ou Python. Vous pouvez très certainement survivre et même prospérer en tant que développeur de logiciels sans jamais toucher C.

Si vous voulez apprendre le C pour votre propre abus, c'est bien. En fonction de la façon dont vous avez appris le C ++ et de votre dépendance vis-à-vis des fonctionnalités spécifiques au C ++ (modèles, types de référence, STL, surcharge), vous pouvez flipper un peu lorsque vous réalisez que 90% des outils qui ont rendu la programmation tolérable ne sont plus disponibles. Des choses comme la gestion de la mémoire en C sont très laborieuses et fastidieuses par rapport à C ++ ou Java. Il existe également des incompatibilités entre C et C ++, et avec chaque nouvelle version de langage, cet écart va se creuser.

Il existe encore des domaines d'application où C est le bon outil pour le travail: petit, rapide, pas beaucoup de magie sous le capot, et ce n'est pas l'assemblage. Mais pour le développement d'applications générales (en particulier les applications de bureau basées sur une interface graphique), il existe de bien meilleurs outils disponibles.

John Bode
la source
-1

Je pense que si vous êtes à l'aise avec C ++, vous serez aussi avec C.

La principale différence entre les deux est que C ++ est propre - orienté objet - C n'est pas :)

Nuno
la source
1
Je suis un grand fan de C ++, mais je n'appellerais pas ça propre. Et C ++ est multi-paradigme, ce qui signifie qu'un bon code C ++ n'est pas nécessairement orienté objet.
KeithB
-1

La connaissance de C vous donnera des informations supplémentaires sur la gestion de la mémoire, etc. Tout dépend de la façon dont vous souhaitez obtenir le niveau bas et de savoir si la compréhension des choses à un levier inférieur vous aide ou non. Vous pouvez aller un peu plus loin et apprendre le langage d'assemblage, mais tout dépend de la valeur qu'il vous rapporte.

Cela dépend aussi si vous voulez programmer en C ou non. :)

Alexander Liberson
la source
-1

Oui c'est bon...

À mon humble avis, puisque vous êtes bon C++, il suffit en effet ...

Je parie qu'il y a des industries qui recherchent des programmeurs C ++ ... Mais une fois que vous êtes dedans, tout dépend des besoins de votre projet. .. Si l'entreprise est prête à vous payer, apprenez-le ...

Si vous en êtes aux premiers stades de votre carrière, les enquêteurs IME ont tendance à examiner votre attitude et la compréhension de la langue avec laquelle vous êtes à l'aise.

Au lieu d'apprendre Cpour le plaisir, apprenez un peu le C ++ de manière approfondie .. Améliorez vos compétences .. Je suis sûr qu'il y a beaucoup à apprendre ... Pour moi, il y a toujours quelque chose à apprendre en C ++ ..: )

liaK
la source
-1

Je pense que les choses les plus importantes à savoir concernant C sont les différences entre C et C ++. Vous verrez probablement un code qui a un certain style C à un moment donné, et vous ne devriez pas être confus quand vous voyez des choses comme malloc, free, printf, fopenou fclose. Vous devez également savoir en quoi ils sont similaires et en quoi ils diffèrent de leurs homologues C ++.

Vous devez également savoir que <<et >>sont des opérateurs de décalage à gauche et à droite, pas insertion opérateurs. En C ++, où vous pouvez surcharger les opérateurs, ceux-ci ont été surchargés pour effectuer l'insertion de flux et des choses similaires, mais ils sont toujours utilisés pour déplacer des entiers.

Assurez-vous de comprendre toutes les fonctionnalités de base du C ++ qui ne sont pas en C. Si vous lisez suffisamment stackoverflow.com, vous aurez vu de nombreuses questions qui impliquent les différences dans les langages et les incompréhensions des gens à leur sujet.

Vous devez également vous familiariser avec le préprocesseur C, qui est presque le même que (et souvent le même programme que) le préprocesseur C ++. Savoir comment l'utiliser vous aidera en C ++, mais il est beaucoup plus utilisé en C.

Une grande chose difficile à gérer en C que possède C ++ est les destructeurs. Ces choses peuvent être appelées partout en prenant soin de libérer des ressources, mais en C, vous devez faire tout cela de manière plus explicite. Il est facile pour les programmeurs C ++ d'oublier de le faire.

En ce qui concerne les interviews, si quelqu'un vous demande d'écrire du code pour un algorithme général en C et que vous faites quelque chose comme:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

Je ne pense pas qu'ils vont décider que vous ne savez pas ce que vous faites parce que vous ne l'avez pas fait:

struct foo x;

Et ils ne devraient vraiment pas se soucier de savoir si vous l'avez utilisé à coutmoins que ce qu'ils essaient de vous faire mettre en valeur soit votre capacité à gérer les entrées et les sorties, ce que C ++ facilite pour les cas courants.

Si vous vous retrouvez dans la position d'être interviewé pour un travail qui nécessite C, vous devriez être franc au sujet de votre manque de connaissance de C en dehors de son chevauchement avec C ++. Ils comprendront probablement qu'un bon programmeur devrait être capable de faire la transition vers C de C ++ assez rapidement.

Tout cela étant dit, C n'est pas si grand d'un langage. La bibliothèque standard est beaucoup plus petite que C ++ et ce n'est pas si grave de se familiariser avec les éléments les plus courants, donc ça ne peut vraiment pas faire de mal de l'apprendre.

nategoose
la source