Ist es üblich, dass ein Programmierer den Unterschied zwischen C und C ++ nicht kennt? [geschlossen]


16

Während eines Interviews wurde ich gefragt, ob ich den Unterschied zwischen C und C ++ kenne.

Ich fragte mich, warum diese Frage gestellt wurde?


11
Angesichts der Anzahl der C-Fragen, die ich in den letzten Wochen mit dem Tag C ++ gesehen habe, würde ich sagen, dass es eine ziemlich wichtige Frage war.
Gort the Robot

13
Gemessen daran, wie oft ich "C / C ++" sehe, würde ich sagen, dass es sehr häufig ist.
user16764

6
Was hast du geantwortet?
Dima

8
Es ist üblich, dass ein Bewerber für einen Programmierjob überhaupt nichts weiß. Aber ich würde diese Person nicht als Programmierer bezeichnen.
Vartec

6
@Tjaart - Verstehen Sie, dass es Systeme gibt, in denen ein Byte nicht 8 Bits hat?
Ramhound

Antworten:


25

Wenn die Frage lautete: "Kennen Sie den Unterschied zwischen C und C ++?" und Sie durften nur mit "Ja" antworten, dann konnte ich Ihre Verwirrung sehen, aber wenn sie tatsächlich fragten "Was sind die Unterschiede zwischen C und C ++?" und eine offenere Antwort wurde erwartet, ich kann es als legitimen "Weg der Untersuchung" sehen, wie sie sagen.

Wenn ich zum Beispiel nur jemals in C und niemals in C ++ codiert hätte, wäre ich kaum in der Lage, vage zu antworten: "C ++ unterstützt objektorientiertes Codieren?".


40

Einige Leute haben beobachtet, dass es eine große Anzahl von Programmier-Bewerbern gibt, die überhaupt keinen Code schreiben können . Also, ja, "offensichtliche" Fragen zu stellen, ist absolut sinnvoll.


7
Das würde so ziemlich meine Antwort sein. Nachdem Sie Leute für Programmierpositionen interviewt haben, kann ich Ihnen sagen, dass das Stellen der offensichtlichen Fragen eine gute Anzahl von Kandidaten sehr leicht herausschneiden wird.
Tyanna

Eine Million Upvotes für Sie. Ich bin immer wieder erstaunt über die Anfängerfragen, die so viele Befragte nicht beantworten können.
HLGEM

1
Andererseits programmiere ich seit über 25 Jahren und es gibt einige Anfängerfragen, die ich nicht mehr wirklich beantworten kann (wird schlimmer, wenn Sie nach Definitionen fragen). Ich habe mir den in dieser Antwort verlinkten Artikel angesehen und dachte "hmmm ja, lassen Sie mich einen Moment darüber nach", während ich bei der Arbeit an der Implementierung ziemlich komplexer Systeme arbeite und im Allgemeinen keine großen Probleme habe, Lösungen zu finden. Einige dieser kleinen Fragen machen mir mehr Angst als ein mehrschichtiges System und ich stelle mir einige Multithread-Funktionen vor, Mist so ... Seltsam, ich weiß.
MetalMikester

1
tatsächlich. Wie in einem anderen P.SE-Thread erläutert, habe ich mir angewöhnt, bei Interviews mit lächerlich offensichtlichen Fragen zu beginnen ("Wie deklarieren Sie eine Variable in JS?", "Wie viele Bytes für 1 int in Java?", " Was ist ein Zeiger? "etc ...). Ich habe nichts gegen einen ersten Fehler (Stress ist ein Faktor, auch wenn ich Interviews mit Gesprächen beginne, um sie zu lockern), aber normalerweise halte ich es für vollkommen akzeptabel, aufzulegen, ohne zu gehen, wenn ich 3 Treffer bekomme, bevor ich anständige Fragen erreiche weiter oder rausschmeißen. Die 5 Minuten, die benötigt werden, um die dummen Fragen zu stellen, sind die eingesparte Zeit wert.
Haylem

3
Tatsächlich entschuldige ich mich sogar, bevor ich diese ersten Fragen stelle, da ich nicht möchte, dass erfahrene Bewerber von ihnen verdrängt werden oder dass ich sie nicht ernst nehme und das Gefühl habe, dass sie nicht hierher gehören würden.
Haylem

8

Es gibt eine ganze Reihe von ihnen. Es gibt unendlich viele Leute, die idiotische Dozenten haben, die C-Strings und newund unterrichten delete, oder veraltete Tutorials oder schlechte Bücher, die "C ++" lernen, aber tatsächlich C, die denken, die beiden stehen sich ziemlich nahe.

Wenn Sie ein Arbeitgeber sind, ist es natürlich ein großes Warnlicht, zu sagen, dass sie gleich oder sogar ähnlich sind.


2
Dies bringt einen sehr guten Punkt. Es ist akzeptabel und vielleicht sogar üblich, C zu unterrichten, aber den C ++ - Compiler zu verwenden. Dies führt natürlich zu Verwirrungen bei Schülern, die nie die Hauptunterschiede zwischen C und C ++ kennen. Ich spreche nur über die Hauptunterschiede zwischen derselben Revision.
Ramhound

4
@Ramhound: Es ist nicht akzeptabel , überhaupt . Die Tatsache, dass es üblich ist, ist orthogonal.
DeadMG

1
Die traurige Tatsache ist, dass C und C ++ fast universell schlecht unterrichtet werden. Gehen Sie zu SO und durchsuchen Sie die C- und C ++ - Tags, und Sie werden die gleichen Missverständnisse, die gleichen falschen Interpretationen und die gleichen schlechten Praktiken sehen, die immer und immer wieder wiederholt werden. Das sind nicht Leute, die zufällig die gleichen Fehler machen. Ihnen wurde beigebracht, wie man diese Fehler macht. "Mein Professor sagte ..." ist für mich jetzt fast überall eine rote Fahne.
John Bode

5

Es gibt auch einen kleinen Prozentsatz von Menschen (wie ich), die C ++ gelernt haben, bevor sie C. gelernt haben.

Ich bin sicher, Sie kennen die Unterschiede, aber wenn Sie ein Student sind, der nur eine C ++ - Klasse und keine C-Klasse hatte, werden die Teile von C ++, die nicht C-kompatibel sind, nicht offensichtlich sein.

Einige der offensichtlicheren Unterschiede, die ich kennengelernt habe (keine vollständige Liste) ( ) Strukturdatentypen konnten ursprünglich keine Funktionen enthalten und können keine privaten Mitglieder haben, was bedeutet, dass es sehr schwierig ist, die Gültigkeitsregeln eines abstrakten Datentyps durchzusetzen in C. ( ) Klassen werden in C ( ) nicht unterstützt. Die Übergabe von Verweisen mit dem Und-Zeichen-Operator ist C ++ spezifisch. ( ) C unterstützt keine Streams oder Templates. (*) malloc und free sind nur für die Verwendung in C und nicht in vorgesehen C ++


2
Ich denke, dies ist eine wichtige Erkenntnis. Früher hatten Sie einen C-Compiler, dann kam C ++, und Sie haben die Unterschiede gelernt. Jetzt haben Sie C / C ++ - Compiler und wenn Ihnen C ++ explizit beigebracht wird, ist es nahezu unmöglich zu wissen, was C und was C ++ ist, jenseits von "objektorientiertem Zeug". Außerdem bin ich mir nicht sicher, ob C / C ++ das häufigste ist Sprache im Zorn zu lernen (?)
Al Biglan

1
Ich würde sehr hoffen, dass der Prozentsatz nicht so gering ist, da diese "in C ++ konvertierten" C-Programmierer oft sehr schlechte C ++ - Programmierer sind .
sbi

1

Leider denke ich, dass es immer häufiger wird.

Ich denke, dass junge Programmierer, die gerade ihre technische Ausbildung abgeschlossen haben (oder aus denen sie ihre Fähigkeiten lernen), einfach keine älteren Sprachen wie C, C ++, Lisp, OCaml usw. lernen. Sie kommen einfach als "c # -Programmierer" oder "Java-Programmierer" heraus "usw. Und wenn sie eine Arbeit finden, fordern sie sich nicht heraus, andere Sprachen zu lernen.

Natürlich gibt es einige, die dies tun, aber von denen, mit denen ich gearbeitet habe, gibt es eine allgemeine Tendenz für die jüngeren Programmierer, diesem Muster zu folgen.

Haftungsausschluss: Da ich über Bildung spreche, kann es natürlich von Land zu Land Unterschiede darüber geben, was in der Bildung betont wird.


Von welchen Universitäten redest du? "Arkane" Sprachen? Ich musste Montage für MIPS an der Universität von Rom lernen ...
Виталий Олегович

Im Allgemeinen haben die "jungen" Programmierer, die ich getroffen habe, einen Abschluss in Ingenieurwissenschaften. Wenn Sie sich das vorstellen, haben fast alle Programmierer, mit denen ich zusammenarbeite, einen Abschluss in Ingenieurwesen, einschließlich meiner selbst.
Pete

1
C und C ++ werden noch in der Schule unterrichtet. Das Problem ist, dass meistens derselbe Compiler verwendet wird, um beide zu unterrichten. Das heißt, sie lernen nie die Unterschiede zwischen den beiden Sprachen.
Ramhound

@Pete Wenn ich als 'C # -Programmierer' herausgekommen bin, kann ich mir nicht vorstellen, C oder C ++ als 'andere Sprache' zu lernen. Sicher würde ich Ruby, Haskell, Javascript, Python mögen. Sprachen der C-Familie sind nah genug, dass es ausreicht, sie zu kennen.
Kirk Broadhurst

0

Wahrscheinlich nicht wörtlich, denn sie denken, C ++ und C sind ein und dasselbe, aber in Bezug auf das Verständnis und die Fähigkeit, die verschiedenen Funktionen von C ++ zu nutzen, ja.

Die Hauptursache ist der binäre Charakter der Auflistung von Sprachen / Tools in Ihrem Lebenslauf. Im Wesentlichen scheint der Standard zu sein, dass wenn Sie "Hello World" zum Kompilieren und Ausführen in einer Sprache haben, es in Ordnung ist, es in Ihrem Lebenslauf / Lebenslauf aufzulisten.

Die C-Version von "Hello, World!" Kompiliert und läuft auch in C ++. Wenn ich keine anderen Informationen habe, ist alles, was ich sehe, wenn ich "C ++" in einem Lebenslauf sehe, dass diese Person genug C kennt, um "Hallo, Welt!" Laufen und weiß, dass die meisten C-Programme in C ++ kompiliert werden.

In Anbetracht dessen muss ich das im Interview ein wenig untersuchen. Ich würde das wahrscheinlich nicht tun, indem ich "Ja / Nein" frage. "Kennen Sie den Unterschied?" Frage, kurz gesagt, weil es eine offensichtliche "richtige" Antwort hat. Ich würde die Kandidatin wahrscheinlich fragen, welche Sprache sie besser mochte, warum und ob es irgendwelche Vorteile für die gab, die sie nicht ausgewählt hatte.


0

Antworten

Ja, es ist üblich. Ich habe diese Situation entweder selbst, Kollegen oder Bibliothekscode von Drittanbietern gesehen.

Ich selbst arbeite zum Beispiel manchmal mit anderen Programmiersprachen oder Programmierframeworks und muss entweder eine Verknüpfung zu "reinen C" - oder "C ++" - Bibliotheken herstellen oder diese aktualisieren.

Ich hatte gerade das Problem, einen "Pure C" -Code zu modifizieren. Und mit "new" & "delete" Speicherzuweisungsfunktionen, die "c ++" sind. Der Rest des Codes war nicht objektorientiert

Der Compiler war C ++. Später verklagte ich einen anderen Compiler und entdeckte den Fehler.

Bonus

Wenn jemand mündlich oder in einem schriftlichen Test oder Web-Online-Test fragt:

"Kennen Sie den Unterschied zwischen C oder C ++?"

Und Sie antworten mit "Ja" oder "Nein".

Sie meinen wirklich:

"Kennen Sie den Unterschied zwischen C oder C ++, wenn Sie es tun, sagen Sie es mir bitte?"

Also musst du antworten:

"Ja. Der Unterschied ist, dass C ++ objektorientiert ist, obwohl Sie Pure C in einem C ++ - Programm aus Gründen der Abwärtskompatibilität verwenden können."

Manchmal werden sie dich nicht fragen, ob du es mir sagst, und sie gehen davon aus, dass du es nicht weißt. Antworten Sie nicht einfach mit "Ja" oder "Nein".


2
Nun, ich denke nicht, dass diese Antwort völlig richtig ist. Die richtige Antwort ist, dass C ++ robusten objektorientierten Code unterstützt. Es erfordert es nicht. (Was ist die Quelle dieser Verwirrung überhaupt.)
Gort the Robot

Auch "Sie können Pure C in einem C ++ - Programm verwenden" könnte bedeuten, dass "C ++ eine Obermenge von C ist, dh jedes C-gültige Programm ist auch ein gültiges C ++ - Programm" (falsch). Oder es könnte bedeuten "Sie können C ++ - Programme mit C-Bibliotheken verknüpfen" (wahr, aber die meisten Sprachen können auf die eine oder andere Weise mit C-Bibliotheken verknüpft werden.) Sie sollten in einem tatsächlichen Interview viel präziser sein.
Nikie

-2

Bearbeiten

Beachten Sie vorweg, dass diese Antwort nicht dazu gedacht ist, zu erklären, dass es keine Unterschiede gibt, oder dass ich erkläre, die Unterschiede zu kennen, oder sogar, dass ich "Hello World" in C oder C ++ kenne. Es ist eine Antwort auf die Frage, indem es die Bedingungen festlegt und darauf hinweist, dass viele Menschen die grundlegenden Unterschiede kennen (z. B. hat man einige +Zeichen im Namen) und nur sehr wenige Menschen alle oder sogar die meisten Unterschiede kennen.


Es kommt darauf an, was Sie mit "Programmierer" und was mit "Unterschied" meinen.

Ich bin ein "Programmierer" (obwohl ich mich selbst als Entwickler bezeichne) und habe Mühe, echte Unterschiede zwischen C und C ++ zu erkennen. Wenn gedrückt, würde ich wahrscheinlich sagen, dass C ++ eine Obermenge von C ist, die Namespaces und Vererbung hat; verschiedene Arten des Umgangs mit dem Gedächtnis. Ich weiß genug, um einige Fehler zu beheben oder Änderungen an Ihrem bestehenden Programm vorzunehmen, aber ich kann mir nicht vorstellen, mehr als ein einfaches Dienstprogramm in C oder C ++ zu schreiben. Ich weiß genug, um durchzukommen, aber ich male mich nicht als "Kenner" einer dieser Sprachen.

Ich kenne andere 'Programmierer' (auch Entwickler), die Ihnen nicht einmal den Unterschied zwischen Java und FORTRAN oder Javascript und Pascal erklären würden. Sie sind gut in dem, was sie tun, und sie beherrschen keine prozeduralen Sprachen.

Dann gibt es Millionen mittelmäßiger Programmierer, die kaum die Sprache kennen, mit der sie jeden Tag arbeiten.

Der Begriff "Unterschied" ist ambitioniert. Ich habe darauf hingewiesen, was ich oben als einige Unterschiede sehe, aber ich weiß, dass sie nicht endgültig und vollständig sind. Sehr wenige Leute werden jeden Unterschied kennen - viel mehr Leute werden in der Lage sein, vage Antworten (wie ich) zur Objektorientierung zu geben.


5
"Ich würde kämpfen, um echte Unterschiede zwischen C und C ++ zu geben." Sie sind sicherlich kein C ++ - Programmierer. Bitte?
sbi

2
C und C ++ sind sehr unterschiedliche Sprachen, die sehr unterschiedlich codiert sind . Sie kennen sie einfach nicht.
DeadMG

@sbi "Ich male mich nicht als" Kenner "einer dieser Sprachen." Ich lasse dich das selbst entscheiden.
Kirk Broadhurst

Feedback zu den Downvotes? Liegt es daran, dass ich den Unterschied zwischen den beiden nicht kenne? Ich würde nicht annehmen, dass dies mich von der Beantwortung der Frage ausschließen würde.
Kirk Broadhurst

1
@KirkBroadhurst: Ich glaube, ich habe angegeben, welchen Teil Ihrer Antwort ich nicht gut genug fand, um abzulehnen. Dieser Kommentar wurde fünfmal so oft angehoben, wie Sie danach abgelehnt wurden. Ich bin mir also nicht sicher, nach welcher Erklärung Sie suchen. Um es näher auszuführen: Der Begriff "Differenz" ist hier ausreichend, da C und C ++ nur oberflächliche syntaktische Ähnlichkeiten aufweisen und ansonsten sehr unterschiedliche Sprachen sind. Zu den Qualifikationen: Ich glaube nicht, dass hier eine Qualifikation erforderlich ist, aber wenn eine Antwort wie diese offensichtlich falsch ist, wird sie als nicht relevant für die Qualifikation eingestuft.
sbi

-3

Ist es üblich, dass ein Programmierer den Unterschied zwischen C und C ++ nicht kennt?

Vor zwanzig Jahren? Ja.

Heute? Nicht so viel.

Der Grund dafür ist, dass sich die Programmierlandschaft stark verändert hat. Viele der heutigen Programme sind webbasiert. Sogar für Desktops geschriebene Programme können in einer höheren Sprache als C oder C ++ geschrieben sein. Sofern Sie kein Programmierer sind, der OS-Code schreibt, wissen Sie möglicherweise nicht viel über eine der beiden Sprachen.

Ein Interviewer kann diese Frage in einem Interview stellen, um zu beurteilen, wie viel Sie über Programmiergrundlagen wissen. Wenn Sie den Unterschied zwischen C und C ++ kennen, dann wissen Sie wahrscheinlich, was objektorientierte Programmierung ist, Sie verstehen wahrscheinlich Bibliotheken und Compiler, Sie verstehen Speicherfunktionen, Referenzen, Zeiger ... viele Dinge, die die heutigen Programmiersprachen beeinflusst haben . Ich benutze C ++ nicht viel (und ich kann nicht wirklich sagen, dass ich in jeder Sprache ein ausgezeichneter Programmierer bin; die Weisheit wird mit der Zeit kommen), aber ich kann sagen, dass meine Erfahrung mit C ++ mich definitiv zu einem besseren Programmierer gemacht hat.


8
Hätte andersherum gesagt. Ich sehe jetzt mehr verwirrte Menschen als noch vor 5 bis 10 Jahren.
Haylem

@ Haylem Rückblickend denke ich, ich wollte das Gegenteil sagen .... whoops.
lunchmeat317
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.