Est-il courant qu'un programmeur ne connaisse pas la différence entre C et C ++? [fermé]

16

Lors d'une interview, on m'a demandé si je connaissais la différence entre C et C ++.

Je me demandais pourquoi une telle question était posée?

Stella Lie
la source
11
Étant donné le nombre de questions C que j'ai vues au cours des dernières semaines avec le tag C ++, je dirais que c'était une question assez importante.
Gort the Robot
13
A en juger par la fréquence à laquelle je vois "C / C ++", je dirais que c'est très courant.
user16764
6
Qu'avez-vous répondu?
Dima
8
Il est courant pour un candidat à un emploi de programmation de ne rien savoir du tout. Mais je n'appellerais pas cette personne un programmeur.
vartec
6
@Tjaart - Vous comprenez qu'il existe des systèmes où un octet n'est pas à 8 bits, n'est-ce pas?
Ramhound

Réponses:

25

Si les questions étaient formulées comme "Connaissez-vous la différence entre C et C ++?" et vous avez été autorisé à répondre simplement par "Oui" alors je pouvais voir votre confusion, mais s'ils demandaient réellement "Quelles sont les différences entre C et C ++?" et une réponse plus ouverte était attendue, je peux la voir comme une "voie d'enquête" légitime, comme on dit.

Par exemple, n'ayant jamais codé en C et jamais en C ++, je serais à peine capable de répondre au-delà d'un vague "C ++ supporte le codage orienté objet?".

Kzqai
la source
40

Certaines personnes ont remarqué qu'il y a une énorme quantité de candidats à des emplois de programmation qui ne peuvent pas écrire de code du tout . Donc, oui, poser des questions «évidentes» est parfaitement logique.

Heinzi
la source
7
Cela allait être à peu près ma réponse. Après avoir interviewé des gens pour des postes de programmation, je peux vous dire que poser les questions évidentes éliminera très facilement un bon nombre de candidats.
Tyanna
Un million de votes positifs pour vous. Je suis toujours étonné des questions de niveau débutant auxquelles tant de personnes interrogées ne peuvent pas répondre.
HLGEM
1
Là encore, je programme depuis plus de 25 ans et il y a des questions de niveau débutant auxquelles je ne peux plus vraiment répondre (c'est pire si vous demandez des définitions). Je regardais l'article lié dans cette réponse et je me disais "hmmm ouais, laisse-moi y penser une minute", alors qu'au travail, je travaille sur la mise en œuvre de systèmes assez complexes et je n'ai généralement pas beaucoup de mal à trouver des solutions. Certaines de ces petites questions me font plus peur qu'un système à plusieurs niveaux et jettent des fonctionnalités multithread, des conneries comme ça ... Bizarre, je sais.
MetalMikester
1
En effet. Comme discuté sur un autre fil P.SE, pour les interviews, j'ai pris l'habitude de commencer avec des questions ridiculement évidentes ("comment déclarez-vous une variable en JS?", "Combien d'octets pour 1 int en Java?", " qu'est-ce qu'un pointeur? "etc ...). Cela ne me dérange pas une première erreur (le stress est un facteur, même si je commence des entretiens avec des conversations pour les détendre), mais généralement si je peux obtenir 3 grèves avant de poser des questions décentes, alors je considère qu'il est parfaitement acceptable de raccrocher sans aller plus loin ou les expulser. Les 5 minutes qu'il faut pour poser les questions stupides valent le temps gagné.
haylem
3
En fait, je m'excuse même avant de poser ces premières questions, car je ne veux pas que les candidats qualifiés soient dérangés par eux, ou pense que je ne les prends pas au sérieux et que je ne pense pas qu'ils n'appartiendraient pas ici.
haylem
8

Il y en a tout un tas. Il y a une infinité de gens qui ont des professeurs idiots qui enseignent les cordes en C et new/ deleteou des tutoriels obsolètes ou de mauvais livres, qui apprennent le "C ++" mais en fait le C, qui pensent que les deux sont assez proches.

Bien sûr, si vous êtes un employeur, le fait de dire qu'ils sont identiques ou même similaires est un gros voyant.

DeadMG
la source
2
Cela soulève un très bon point. Il est acceptable et peut-être même courant d'enseigner le C, mais utilisez le compilateur C ++. Bien sûr, cela crée des confusions chez les étudiants qui n'apprennent jamais les principales différences entre le C et le C ++. Je ne parle que des différences majeures entre la même révision.
Ramhound
4
@Ramhound: Ce n'est pas acceptable du tout . Le fait que ce soit courant est orthogonal.
DeadMG
1
Le triste fait est que le C et le C ++ sont presque universellement mal enseignés. Accédez à SO et parcourez les balises C et C ++, et vous verrez les mêmes idées fausses, les mêmes interprétations erronées, les mêmes mauvaises pratiques répétées encore et encore et encore. Ce ne sont pas des gens qui commettent au hasard les mêmes erreurs; on leur a appris à commettre ces erreurs. "Mon professeur a dit ..." est presque universellement un drapeau rouge pour moi maintenant.
John Bode
5

Il y a aussi un petit pourcentage de personnes (comme moi) qui ont appris le C ++ avant d'apprendre le C.

Je suis sûr que vous connaissez les différences, mais si vous êtes un étudiant qui n'a eu qu'une classe C ++, et non une classe C, les parties de C ++ qui ne sont pas compatibles C ne seront pas évidentes.

Certaines des différences les plus évidentes que j'ai apprises (pas une liste exhaustive) ( ) les types de données struct ne pouvaient à l'origine pas contenir de fonctions, et ne pouvaient pas avoir de membres privés, ce qui signifie qu'il était très difficile d'appliquer les règles de validité d'un type de données abstrait en C. ( ) les classes ne sont pas prises en charge en C ( ) le passage par référence à l'aide de l'opérateur esperluette est spécifique à C ++ ( ) C ne prend pas en charge les flux ou les modèles (*) malloc et free sont destinés à être utilisés uniquement en C et non en C ++

UN B
la source
2
Je pense que c'est un aperçu clé ... dans le passé, vous aviez un compilateur C, puis est venu C ++, donc vous avez appris les différences. Maintenant, vous avez des compilateurs C / C ++ et si vous apprenez le C ++ de manière explicite, il est pratiquement impossible de savoir ce qu'est le C et ce qui est au-delà de "l'objet orienté objet". De plus, je ne suis pas sûr que le C / C ++ soit le plus courant langue à apprendre dans la colère (?)
Al Biglan
1
J'espère vraiment que le pourcentage n'est pas aussi faible, car ces programmeurs C "convertis en C ++" sont souvent de très mauvais programmeurs C ++ .
sbi
1

Malheureusement, je pense que cela devient de plus en plus courant.

Je pense que les jeunes programmeurs fraîchement sortis de l'école technique (ou d'où ils apprennent leurs compétences) n'apprennent tout simplement pas des langages plus anciens tels que C, C ++, Lisp, OCaml, etc. Ils sortent simplement en tant que "programmeurs c #" ou "programmeurs java" ", etc. Et lorsqu'ils trouvent un emploi, ils ne se mettent pas au défi d'apprendre d'autres langues.

Bien sûr, il y en a qui le font, mais parmi ceux avec qui j'ai travaillé, il y a une tendance générale pour les plus jeunes programmeurs à suivre ce modèle.

Avertissement: Puisque je parle d'éducation, il peut bien sûr y avoir des différences d'un pays à l'autre sur ce qui est mis en valeur dans l'éducation.

Pete
la source
De quelles universités parlez-vous? Langues "arcanes"? J'ai dû apprendre le montage pour MIPS à l'université de Rome ...
Виталий Олегович
Généralement, les "jeunes" programmeurs que j'ai rencontrés ont un diplôme d'ingénieur. À bien y penser, presque tous les programmeurs avec qui je travaille ont un diplôme d'ingénieur, y compris moi-même.
Pete
1
Le C et le C ++ sont toujours enseignés à l'école. Le problème est la plupart du temps le même compilateur est utilisé pour enseigner les deux. Cela signifie qu'ils n'apprennent jamais réellement les différences entre les deux langues.
Ramhound
@Pete Si je suis sorti en tant que «programmeur C #», je ne peux pas imaginer apprendre le C ou C ++ comme «un autre langage». Je voudrais sûrement Ruby, Haskell, Javascript, Python. Les langues de la famille C sont suffisamment proches pour que d'en connaître une soit suffisant.
Kirk Broadhurst
0

Probablement pas littéralement, en ce sens qu'ils pensent que C ++ et C sont une seule et même chose, mais en termes de compréhension et de capacité à utiliser les différentes fonctionnalités de C ++, oui.

La cause principale est la nature binaire de la liste des langues / outils sur votre CV / CV. Essentiellement, la norme semble être que si vous avez compilé et exécuté "Hello World" dans une langue, il est OK de le lister sur votre CV / CV.

En l'occurrence, la version C de "Hello, World!" compile et s'exécute également en C ++. Donc, en l'absence de toute autre information, tout ce que le fait de voir "C ++" sur un curriculum vitae me dit, c'est que cette personne connaît suffisamment C pour obtenir "Hello, World!" en cours d'exécution et sait que la plupart des programmes C compileront en C ++.

Compte tenu de cela, je vais avoir besoin d'enquêter un peu sur l'interview. Je ne le ferais probablement pas en demandant "Oui / Non" "Connaissez-vous la différence?" question, bref parce qu'il a une "bonne" réponse évidente. Je demanderais probablement à la candidate quelle langue elle préférait, pourquoi et s'il y avait des avantages à celle qu'elle n'avait pas choisie.

JohnMcG
la source
0

Répondre

Oui, c'est commun. J'ai vu cette situation, moi-même, mes collègues ou le code de bibliothèques tierces.

Par exemple, moi-même, je travaille parfois avec d'autres langages de programmation ou cadres de programmation et je dois lier ou mettre à jour des bibliothèques "c pur" ou "c ++".

Je viens d'avoir le problème de modifier du code "Pure C". Et en utilisant les fonctions d'allocation de mémoire "nouvelles" et "supprimer", qui sont "c ++". Le reste du code n'était pas orienté objet

Le compilateur était C ++. Plus tard, j'ai poursuivi un autre compilateur et découvert l'erreur.

Prime

Si quelqu'un demande, verbalement, ou dans un test écrit, ou un test en ligne sur le Web:

"Connaissez-vous la différence entre C ou C ++"

Et vous répondez "Oui" ou "Non".

Ils signifient vraiment:

"Connaissez-vous la différence entre le C ou le C ++, si vous le souhaitez, dites-le moi?"

Donc, vous devez répondre:

"Oui. La différence est que C ++ est orienté objet, cependant, vous pouvez utiliser Pure C, à l'intérieur d'un programme C ++, pour une compatibilité descendante."

Parfois, ils ne vous demanderont pas "si vous le voulez bien, dites-le moi" et ils supposeront que vous ne savez pas. Ne vous contentez pas de répondre «oui» ou «non».

umlcat
la source
2
Eh bien, je ne pense pas que cette réponse soit tout à fait juste. La bonne réponse est que C ++ a un support robuste pour le code orienté objet. Il n'en a pas besoin. (Qui est la source de cette confusion en premier lieu.)
Gort the Robot
"Vous pouvez également utiliser Pure C dans un programme C ++" pourrait signifier quelque chose comme "C ++ est un surensemble de C, c'est-à-dire que tout programme C valide est également un programme C ++ valide" (faux). Ou cela peut signifier "vous pouvez lier des programmes C ++ à des bibliothèques C" (vrai, mais la plupart des langages peuvent se lier aux bibliothèques C d'une manière ou d'une autre.) Vous devriez être beaucoup plus précis dans une interview réelle.
nikie
-2

Éditer

En guise d'avant, notez que cette réponse n'est pas destinée à déclarer qu'il n'y a pas de différences ou que je prétends connaître les différences, ou même que je sais que "Hello World" en C ou C ++. C'est une réponse à la question en encadrant les termes de référence, en soulignant que beaucoup de gens connaissent les différences élémentaires (par exemple, on a des +caractères dans son nom) et très peu de gens connaîtront toutes ou même la plupart des différences.


Cela dépend de ce que vous entendez par «programmeur» et de ce que vous entendez par «différence».

Je suis un "programmeur" (bien que je m'appelle développeur) et j'aurais du mal à donner de réelles différences entre C et C ++. Si vous appuyez dessus, je dirais probablement que C ++ est un sur-ensemble de C qui a des espaces de noms et un héritage; différentes façons de gérer la mémoire. J'en sais assez pour corriger quelques bugs ou apporter des modifications à votre programme existant mais je ne peux pas imaginer écrire autre chose qu'un simple utilitaire en C ou C ++. J'en sais assez pour m'en sortir, mais je ne me peins pas comme "connaissant" l'une ou l'autre de ces langues.

Je connais d'autres «programmeurs» (également des développeurs) qui ne vous diraient même pas la différence entre Java et FORTRAN, ou Javascript et Pascal. Ils sont bons dans ce qu'ils font et ils ne font pas de langages procéduraux.

Ensuite, il y a des millions de programmeurs médiocres qui connaissent à peine la langue unique avec laquelle ils travaillent tous les jours.

Le terme «différence» est ambigu. J'ai souligné ce que je vois comme quelques différences ci-dessus, mais je sais qu'elles ne sont pas définitives et complètes. Très peu de gens vont connaître toutes les différences - beaucoup plus de gens vont pouvoir donner des réponses vagues (comme moi) sur l'orientation des objets.

Kirk Broadhurst
la source
5
"J'aurais du mal à donner de réelles différences entre C et C ++." Vous n'êtes certainement pas un programmeur C ++. S'il vous plaît?
sbi
2
C et C ++ sont des langages très différents, codés de manières très différentes. Vous ne les connaissez clairement pas.
DeadMG
@sbi "Je ne me peins pas comme" connaissant "l'une ou l'autre de ces langues." Je vous laisse décider par vous-même.
Kirk Broadhurst
Des commentaires sur les votes négatifs? Est-ce parce que je ne connais pas la différence entre les deux? Je ne suppose pas que cela me disqualifierait de répondre à la question.
Kirk Broadhurst
1
@KirkBroadhurst: Je pense avoir indiqué la partie de votre réponse que je n'aimais pas assez pour downvote, et ce commentaire a été voté cinq fois plus souvent que vous avez été downvote par la suite, donc je ne suis pas sûr de l'explication que vous recherchez. Cependant, pour élaborer: Le terme "différence" est ici suffisant, car C et C ++ ne partagent que des similitudes syntaxiques superficielles et, à part cela, sont des langages très différents. En ce qui concerne les qualifications: je ne pense pas qu'il y ait une qualification nécessaire pour répondre ici, mais quand une réponse est manifestement fausse comme celle-ci, elle sera déclassée sans rapport avec la qualification.
sbi
-3

Est-il courant qu'un programmeur ne connaisse pas la différence entre C et C ++?

Il y a vingt ans? Oui.

Aujourd'hui? Pas tellement.

La raison en est que le paysage de la programmation a beaucoup changé. De nombreux programmes d'aujourd'hui sont basés sur le Web; même les programmes écrits pour les bureaux peuvent être écrits dans un langage de niveau supérieur à C ou C ++. En tant que tel, sauf si vous êtes un programmeur qui écrit du code OS, vous ne savez peut-être pas grand-chose sur l'un ou l'autre des deux langages.

Un intervieweur peut poser cette question dans une interview pour évaluer ce que vous savez sur les principes fondamentaux de la programmation; si vous connaissez la différence entre C et C ++, alors vous savez probablement ce qu'est la programmation orientée objet, vous comprenez probablement les bibliothèques et les compilateurs, vous comprenez les fonctions de mémoire, les références, les pointeurs ... beaucoup de choses qui ont influencé les langages de programmation d'aujourd'hui . Je n'utilise pas beaucoup C ++ (et je ne peux pas vraiment dire que je suis un excellent programmeur dans n'importe quel langage; la sagesse viendra avec le temps) mais je peux dire que mon expérience avec C ++ a définitivement fait de moi un meilleur programmeur.

lunchmeat317
la source
8
Aurait dit l'inverse. Je vois plus de gens confus maintenant qu'il y a même 5 à 10 ans.
haylem
@Haylem Avec le recul, je pense que je voulais dire l'inverse .... whoops.
lunchmeat317