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?
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?
Réponses:
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?".
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.
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
/ delete
ou 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.
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 ++
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.
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.
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».
É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.
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.