Ist es in Ordnung, wenn ich C nicht kenne, aber gut mit C ++ umgehen kann? [geschlossen]

23

Ich habe eine Frage, die meiner Meinung nach am besten hier beantwortet werden kann.

Ich bin ziemlich gut darin C++, gut, wie ich mich mit der Sprache wohl fühle, ich habe Accelerated C++fast alle Übungen gelesen und getan.

Ich habe jedoch ein großes Problem. Muss ich lernen C? Ich habe noch nie Cin meinem Leben getan . Ich habe gerade angefangen, C++als ich mit dem Programmieren angefangen habe. Wahrscheinlich war ich immer daran interessiert zu wissen, warum jeder die Sprache so komplex nennt. Jetzt weiß ich die Antwort auf diese Frage;)

Ich bin besonders daran interessiert zu wissen, ob ich überleben kann, ohne Cin der heutigen Welt Bescheid zu wissen . Zum Beispiel, wenn ich ein Interview in einem Unternehmen gebe, wenn ich ihnen sage, dass ich es nicht weiß C- werden sie es als OK ansehen? Die beiden Sprachen, in denen ich gut bin, sind Python und C ++. Ich frage dies, weil ich gehört habe, dass Unternehmen in Interviews Datenstrukturen abfragen. Also, wenn sie mich bitten, es zu implementieren, und wenn ich es in C ++ mache, ist es akzeptabel?

Und Leute, die sagen 'Wie können Sie C nicht kennen, wenn Sie C ++', antworten Sie bitte nicht :) Keine Beleidigung, aber ich verstehe nicht, warum das Erlernen von C Voraussetzung ist.

SS
quelle
1
embeddedgurus.com/barr-code/2009/08/real-men-program-in-c Nehmen Sie Ihren Anruf entgegen.
DumbCoder
1
Der von DumbCoder zitierte Artikel befasst sich mit der Popularität von C in der eingebetteten Programmierung.
ChrisW
2
@ChrisW - Ja, aber es zeigt immer noch, dass C nicht so einfach zu beherrschen ist, nicht dass C ++ einfach zu beherrschen ist.
DumbCoder
@DumbCoder: Oh nein, eingebettete Programmierung. Wie viele Jobs sind in Embedded im Vergleich zu Desktop?
DeadMG
@DeadMG - Das Beherrschen einer Sprache hat nichts damit zu tun, wie viele Jobs für diese Sprache verfügbar sind. Und woher kam die Idee, dass C nur in der eingebetteten Programmierung verwendet wird?
DumbCoder

Antworten:

36

Wenn Sie C ++ kennen, würde ich C nicht nur deswegen lernen. Sie sollten es nicht zu schwierig finden, zu lernen, ob und wann Sie es brauchen.

Ich würde weitaus lieber jemanden treffen, der behauptet, C ++ zu kennen, aber nicht C, als jemanden, der behauptet, C / C ++ zu kennen.

CB Bailey
quelle
Oh ja. Es ist die Artikelliste
4
+1. Wenn Sie C ++ kennen, ist es zunächst einmal ein Kinderspiel, C zu lernen, und zweitens ist es wirklich unwichtig.
DeadMG
6
@DeadMG Es mag leicht sein, die Syntax zu erlernen, da man nur weiß, welche Teile von C ++ weggelassen werden müssen, aber das Erlernen der allgemeinen Redewendungen ist schwieriger und wohl der wichtigste Teil. Aber ich würde C nur lernen, wenn es gebraucht wird.
KeithB
6
@chubsdad du meinst, ich sollte nicht "Ich kenne Java / Javascript" in meinen Lebenslauf schreiben?
Inkognito
@ user257493: Es gibt kein Java / Javascript
John Dibling
23

Eine mehrteilige Antwort. Nur meine Meinungen.

  1. Nach meiner Erfahrung (25 Jahre nach Abschluss des Studiums) wird C ++ auf absehbare Zeit für interessante Systeme von entscheidender Bedeutung sein, auch wenn es immer seltener vorkommt. Daran halte ich als Hauptfachgebiet fest. Die Arbeit ist hart, interessant und wichtig.

  2. C ++ - Programmierer sind im Allgemeinen gerade deshalb wertvoll, weil sie nicht mit verwalteten Sprachen aufgewachsen sind und daher eher verstehen, was unter der Decke vor sich geht. Der Übergang von C ++ zu C # / Java ist einfacher als umgekehrt, da der Balken für die Eingabe höher ist.

  3. Meiner Ansicht nach ist es also nicht unbedingt erforderlich, C zu verstehen, um kompetent in C ++ zu programmieren, und ein Verständnis dafür zu entwickeln, warum C ++ im Kontext von C existiert - seine Einschränkungen und Stärken und wie diese in C ++ angegangen werden oder nicht von unschätzbarem Wert für Sie im Laufe der Zeit.

Viel Glück.

Steve Townsend
quelle
Was lässt Sie sagen, dass C ++ immer seltener vorkommt? Was verdrängt es Ihrer Erfahrung nach?
Praxeolitic
13

Hier ist, was Bjarne zu sagen hat:

C zu kennen ist eine Grundvoraussetzung, um C ++ zu lernen, oder?

Falsch. Die übliche Teilmenge von C und C ++ ist einfacher zu lernen als C. Es gibt weniger Tippfehler, die manuell abgefangen werden müssen (das C ++ - Typensystem ist strenger und aussagekräftiger), weniger Tricks, die gelernt werden müssen (mit C ++ können Sie mehr Dinge ohne Umschreibung ausdrücken). und bessere Bibliotheken zur Verfügung. Die beste anfängliche Teilmenge von C ++ zu lernen ist nicht "alles von C".

Chubsdad
quelle
4

Nur meine persönliche Meinung: Wenn Sie C ++ kennen, können Sie in C schreiben. Einige Erfahrungen wären nett, aber dies ist kein Problem. Das Gegenteil ist nicht richtig: C-Kenntnisse erlauben es nicht, ohne zusätzliches Lernen in C ++ zu schreiben. Ich habe C nie gelernt und benutze es, wenn es nötig ist, ohne Probleme.

Alex F
quelle
3
@Alex Farber - "Wenn Sie C ++ kennen, können Sie in C schreiben". Ich bezweifle sehr, dass :)
DumbCoder
4
Nicht zustimmen. IME, Programmierer, die zuerst C ++ lernen, tendieren dazu, nicht zu erkennen, welche C ++ - Funktionen C nicht hat. Programmierer, die zuerst C lernen, können problemlos in C ++ schreiben, beginnen aber nicht idiomatisch.
Dan04
1
Dies basiert auf meinen persönlichen Erfahrungen. Ich habe C ++ gelernt und mache den größten Teil meiner Arbeit in C ++. Aber ich benutze C, wenn nötig, ohne Probleme.
Insbesondere, wenn man bedenkt, dass nicht alle Klassenbibliotheken von cute in C verfügbar sind. Der Gewinn von Sprachen wie C ++ und Java sind die Bibliotheken, nicht die eigentlichen Sprachfunktionen.
8
C ++ - Programmierer, die versuchen, sich durch C zu hacken, schreiben fehlerhaften Code aus denselben Gründen wie C-Programmierer, die versuchen, sich durch C ++ zu hacken, schreiben fehlerhaften Code. Die C-Typen verwenden C ++ als "C mit Klassen", während die C-Typen C als "C ++ ohne Klassen" verwenden.
John Dibling
4

Okay, das Wichtigste zuerst - nein, C zu kennen ist keine Voraussetzung, um C ++ zu lernen. In der Tat kann es eine Behinderung sein.

Zweitens ist dies völlig situativ. Ob Sie C kennen müssen oder nicht, hängt ganz davon ab, ob der Job es erfordert. Wenn Sie ein Typ für eingebettete Systeme sein möchten, hilft es, C zu lernen. Andernfalls benötigen die meisten Jobs dies nicht. Wenn ein Job C benötigt, sollte es so sagen. Wenn es nicht so aussagt, braucht es es wahrscheinlich nicht. Bei den Datenstrukturen kommt es wiederum auf das Unternehmen an. Normalerweise sagt ein Unternehmen: "Wir programmieren in diesen Sprachen, schreiben uns diese Datenstruktur. Verwenden Sie die Sprache Ihrer Wahl aus der obigen Liste." Wenn sie dich bitten, es in C zu schreiben, sagst du einfach: "Ich kenne C nicht - in meinem Lebenslauf steht nicht, dass ich C kenne, dieser Job ist nicht für mich."

Stephen
quelle
Warum sollte das Kennen von C das Erlernen von C ++ behindern? Ich sage nicht, dass ich nicht unbedingt zustimme, aber das ist eine kühne Aussage.
Casey Patton
3

Zum Beispiel, wenn ich in einem Unternehmen ein Interview gebe, wenn ich ihnen sage, dass ich C nicht kenne - werden sie es als OK ansehen?

Fragen Sie, ob sie C benötigen (und ob sie bereit sind, es zu lernen oder nicht).

Also, wenn sie mich bitten, es zu implementieren, und wenn ich es in C ++ mache, ist es akzeptabel?

Ich würde es erwarten, wenn sie Sie interviewen / einstellen, um in C ++ zu arbeiten.

Wenn es sich um eine "Datenstruktur" -Frage handelt, können Sie sie fragen, ob Sie die Verwendung von STL-Containern demonstrieren sollen oder ob Sie die Datenstrukturen (weil es sich um ein Interview handelt) von Grund auf neu implementieren sollen.

ChrisW
quelle
2

C ist fast eine richtige Teilmenge von C ++. Wenn Sie C nicht kennen, kennen Sie keine große und wichtige Teilmenge von C ++. Haben Sie haben auf diese Teilmenge lernen? Nein. C ++ ist eine lächerlich große Sprache und die meisten Leute wählen eine Teilmenge und programmieren damit. Es ist nicht erforderlich, dass Sie die Teilmenge C kennen. Insbesondere ist es nicht so wichtig, die C-Standardbibliothek zu kennen. Ich würde jedoch ein sehr misstrauisches Auge auf jeden werfen, der Kern-C-Konzepte wie Zeiger, Arrays und Bit-Twiddling nicht versteht.

frankc
quelle
2

Muss ich C lernen?

Nein, das musst du nicht. Zeitraum.

Aber das Erlernen einer neuen Programmiersprache ist auf lange Sicht von Vorteil. Noch vorteilhafter ist es, Sprachen zu lernen, die auf unterschiedlichen Programmierparadigmen basieren. Ob es sich um eine OOP-Sprache (Smalltalk oder C ++), eine dynamische Sprache (Lisp, Clojure, Python), eine funktionale Sprache (Lisp, Haskell, Erlang), eine gleichzeitige Sprache (Erlang, Go, Algol 68, Smalltalk) oder eine andere Sprache (Fortran 03, Perl, Forth) anderes neues fangled Paradigma Ihre Fantasie schlägt; Durch das Erlernen verschiedener Sprachen lernen Sie mehrere Denkrichtungen kennen, von denen jede ihre eigenen Stärken und Schwächen hat, um die anstehende Aufgabe zu lösen.

Fortran ist immer noch führend im numerischen Rechnen, COBOL ist immer noch eine tragende Säule bei großen Versicherungsunternehmen, Unix, BSD und Linux basieren immer noch hauptsächlich auf C. Alter Code verliert mit zunehmendem Alter nicht an Wert, weil er nicht unbedingt abnutzt wie mechanische Geräte, die im Laufe der Zeit ersetzt werden müssen. Ältere Sprache kann also im Hinblick auf die Beschäftigungsfähigkeit im Vergleich zum coolen Faktor einer neueren Sprache wertvoll sein.

So wie das Lernen, um in natürlichen (menschlichen) Sprachen mehrsprachig zu werden, zweifellos Ihre Ausdrucksfähigkeit verbessert, bietet dasselbe den gleichen Bonus für Computersprachen.

Ich halte es also für wichtig (im Laufe der Zeit) zu lernen, nicht nur mehrere Sprachen zu beherrschen, sondern auch mehrere Programmierparadigmen zu beherrschen.

Ich bin ziemlich gut mit C ++, gut, da ich mit der Sprache vertraut bin, Accelerated C ++ gelesen habe und fast alle Übungen gemacht habe

Ich mache ein Backup und sage, dass C ++ eine reiche und komplexe Sprache ist. Es wird Jahre dauern, bis man sich mit all seinen reichen (oder hässlichen) Feinheiten auskennt und sich beständig darin auskennt.

Nehmen Sie sich Zeit und lernen Sie weiter, das ist der wichtigste Rat, den ich Ihnen geben kann. Ich möchte Sie dazu ermutigen, Peter Norvigs „ Teach Yourself Programming“ in zehn Jahren zu lesen .

mctylr
quelle
1

Eine sehr kurze Antwort auf Ihre Frage lautet: Es hängt stark von Ihren Bedürfnissen ab. Einige Unternehmen verlassen sich hauptsächlich auf C, manchmal als Relikt (wenn C dort schon seit Jahren verwendet wird). Andere Unternehmen haben nichts mit C zu tun. C ist eine niedrigere Programmiersprache als beispielsweise Python oder Java, und für viele Anwendungsprogramme sind möglicherweise keine C-Kenntnisse erforderlich. Im Gegensatz zu OOP-Sprachen erfordert C ein anderes Mindframe Ich meine, dass Programme anders strukturiert und organisiert sind und einige differenziertere Aspekte berücksichtigt werden müssen. Es ist im Allgemeinen von Vorteil, diese Redewendung zu erlernen, und zwar sozusagen nur, um den Verstand zu erweitern. Aber auch hier hängt es von ihren Bedürfnissen ab, ob sich Unternehmen darum kümmern. Einige bieten Ihnen möglicherweise eine Auswahl an Sprachen, einige erfordern Java, andere C ++, andere weiterhin C usw. Können Sie überleben? Ja heute' Die Welt von s hat so viele verschiedene Programmierbereiche, dass Sie C-Code möglicherweise nie verwenden werden. Solltest du C lernen? Ich würde sagen - ja, unabhängig von der späteren Verwendung.

user400348
quelle
1

Einige Leute fühlen sich beim Programmieren in C möglicherweise nicht wohl, wenn sie C ++ kennen.

Es gibt eine "schützende" Struktur um C ++, die dazu beiträgt, nicht nur die Struktur, sondern auch die Algorithmen eines Programms zu steuern. Zum Beispiel die Hilfe der STL-Struktur und -Algorithmen, des offensichtlichen objektorientierten Programmieransatzes, des Con / Destructor, der hinzugefügten abstraktiven Ebene, die aus den Vorlagen stammt ...

Während C - wie gesagt - einfacher ist, zwingt es den Programmierer, selbst eine Struktur und Algorithmen in die Problemmodellierung einzufügen. Dies ist eine intensive Erweiterung der Programmierfreiheit.
Aber es hat Kosten, da einige Leute mehr auferlegte Strukturen benötigen und ein Programm entwickeln, dessen Wartung exponentiell schwieriger ist, wenn es größer wird. Ich sage oft, dass das Problem nicht die Sprache (C) ist, sondern was man damit macht.

Abgesehen davon, dass ich als Personalvermittlerin froh bin, jemanden mit starken C ++ - Kenntnissen zu interviewen, wäre aber umso enthusiastischer, wenn sie genug Sprachautonomie hätte, um ein ganzes C-Projekt zu entwickeln.

Ein gutes C-Programm setzt auch gute Kenntnisse des Entwicklersystems voraus, da die Sprache (normalerweise) ein angemessenes Verständnis der Systemkomponenten erfordert, um ein effizientes Runnable zu erstellen.

Ring-Ø
quelle
Ich würde nicht sagen, dass es die Programmiererfreiheit erhöht - Sie können immer Ihre eigene Struktur und Algorithmen in C ++ schreiben.
DeadMG
0

Wenn Sie sich in C ++ wohlfühlen, würde ich mir keine Sorgen um C machen. C ++ hat viele Verbesserungen gegenüber C (die Fähigkeit, RAII mit Konstruktoren / Destruktoren, Baseline-Containern, Streams und Zeichenfolgen zu unterstützen, ist groß).

Ich würde jedoch vorschlagen, die printfund die scanfReihe von Funktionen zu lernen, damit Sie den Code, der sie verwendet, LESEN können. Sie sind in C ++ sehr beliebt, daher ist es hilfreich zu wissen, wie sie verwendet werden. Ich schlage nicht vor, sie ohne einen bestimmten Grund in Ihrem eigenen Code zu verwenden.

Mark B
quelle
0

Das einzige Mal, dass Sie C kennen müssen , ist, wenn Sie C-Code erzeugen sollen. Wenn nicht, gibt es kein Problem.

Ich habe C in den letzten 6 Jahren nicht professionell geschrieben; Es gibt viele Anwendungsdomänen, die von anderen Sprachen (zumindest aus Sicht der Produktivität, wenn nicht der Leistung) wie Java oder C # oder Python besser bedient werden. Mit Sicherheit können Sie als Softwareentwickler überleben und sogar gedeihen, ohne jemals C zu berühren.

Wenn Sie C für Ihren eigenen Missbrauch lernen möchten, ist das in Ordnung. Je nachdem, wie Sie C ++ erlernt haben und wie stark Sie auf C ++ - spezifische Funktionen angewiesen sind (Vorlagen, Referenztypen, AWL, Überladung), kann es zu Problemen kommen, wenn Sie feststellen, dass 90% der Tools, die die Programmierung tolerierbar gemacht haben, nicht mehr verfügbar sind. Sachen wie Speicherverwaltung in C sind im Vergleich zu C ++ oder Java sehr arbeitsintensiv und mühsam. Es gibt auch einige Inkompatibilitäten zwischen C und C ++, und mit jeder neuen Sprachversion wird sich diese Lücke vergrößern.

Es gibt immer noch Anwendungsbereiche, in denen C das richtige Werkzeug für den Job ist: klein, schnell, nicht viel Magie unter der Haube und keine Montage. Für die allgemeine Anwendungsentwicklung (insbesondere GUI-gesteuerte Desktop-Anwendungen) stehen jedoch weitaus bessere Tools zur Verfügung.

John Bode
quelle
-1

Ich denke, wenn Sie mit C ++ vertraut sind, werden Sie auch mit C vertraut sein.

Der Hauptunterschied zwischen beiden ist, dass C ++ sauber ist - objektorientiert - C nicht :)

Nuno
quelle
1
Ich bin ein großer Fan von C ++, aber ich würde es nicht als sauber bezeichnen. Und C ++ ist ein Multiparadigma, was bedeutet, dass guter C ++ - Code nicht unbedingt objektorientiert ist.
KeithB
-1

Wenn Sie C kennen, erhalten Sie weitere Einblicke in die Speicherverwaltung usw. Es geht darum, wie niedrig Sie werden möchten und ob es Ihnen hilft, die Dinge auf einer niedrigeren Ebene zu verstehen oder nicht. Sie könnten noch einen Schritt weiter gehen und auch Assemblersprache lernen, aber es kommt darauf an, wie viel es Ihnen wert ist.

Es kommt auch darauf an, ob Sie in C programmieren wollen oder nicht. :)

Alexander Liberson
quelle
-1

Ja, ist in Ordnung...

IMHO, da Sie gut sind C++, ist es in der Tat genug ...

Ich wette, es gibt Branchen, die nach C ++ - Programmierern suchen ... Aber wenn Sie sich erst einmal damit befasst haben, hängt alles von Ihren Projektanforderungen ab. Was auch immer erforderlich ist, Sie müssen es möglicherweise lernen. Es kann Java, .NET oder sogar C sein .. Wenn das Unternehmen bereit ist, Sie zu bezahlen, lernen Sie es einfach ...

Wenn Sie sich in einem früheren Stadium Ihrer Karriere befinden, neigen IME-Interviewer dazu, sich mit Ihrer Einstellung und dem Verständnis der Sprache zu befassen, mit der Sie vertraut sind.

Anstatt aus CGründen des Lernens , lerne C ++ ein bisschen gründlich. Verbessere deine Fähigkeiten. Ich bin sicher, es gibt viel zu lernen. Für mich gibt es immer etwas in C ++ zu lernen. )

LiaK
quelle
-1

Ich denke, das Wichtigste, was Sie in Bezug auf C wissen müssen, sind die Unterschiede zwischen C und C ++. Sie werden wahrscheinlich einige Code sehen , dass einige C - Stil in es an einem gewissen Punkt hat, und Sie sollten nicht verwechselt werden , wenn man die Dinge sehen , wie malloc, free, printf, fopen, oder fclose. Sie sollten auch wissen, wie ähnlich diese sind und wie sie sich von ihren C ++ - Gegenstücken unterscheiden.

Sie sollten das auch wissen <<und >>Links- und Rechts-Shift-Operatoren sind, keine Einfügeoperatoren. In C ++, wo Sie Operatoren überladen können, wurden diese überladen, um Stream-Einfügungen und ähnliche Vorgänge auszuführen, aber sie werden weiterhin zum Verschieben von Ganzzahlen verwendet.

Stellen Sie sicher, dass Sie alle grundlegenden Funktionen von C ++ verstehen, die nicht in C enthalten sind. Wenn Sie stackoverflow.com ausreichend gelesen haben, werden Sie viele, viele Fragen sehen, die die Unterschiede in den Sprachen und deren Missverständnisse betreffen.

Sie sollten sich auch mit dem C-Präprozessor vertraut machen, der fast mit dem C ++ - Präprozessor (und häufig auch mit dem Programm) identisch ist. Zu wissen, wie man es benutzt, wird Ihnen in C ++ helfen, aber in C stützt es sich auf viel mehr.

Eine große Sache, mit der sich C ++ nur schwer auseinandersetzen lässt, sind Destruktoren. Diese Dinge können überall aufgerufen werden, um Ressourcen freizugeben, aber in C müssen Sie das alles expliziter machen. Dies ist für C ++ - Programmierer leicht zu vergessen.

Was Interviews anbelangt, wenn jemand Sie auffordert, Code für einen allgemeinen Algorithmus in C zu schreiben, und Sie etwas tun wie:

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

Ich glaube nicht, dass sie entscheiden werden, dass Sie nicht wissen, was Sie tun, weil Sie es nicht getan haben:

struct foo x;

Und es sollte ihnen wirklich egal sein, ob Sie verwendet haben, es coutsei denn, sie versuchen, Sie zum Präsentieren zu bewegen, und Sie können mit Ein- und Ausgaben umgehen, was C ++ für häufig vorkommende Fälle einfacher macht.

Wenn Sie sich in der Lage befinden, für einen Job interviewt zu werden, für den C erforderlich ist, sollten Sie sich vorab über Ihren Mangel an C-Kenntnissen im Klaren sein, der sich nicht mit C ++ überschneidet. Sie werden wahrscheinlich verstehen, dass ein guter Programmierer in der Lage sein sollte, relativ schnell von C ++ auf C umzusteigen.

Abgesehen davon ist C keine so große Sprache. Die Standardbibliothek ist viel kleiner als die von C ++ und es ist keine große Sache, sich mit den häufigsten Stücken vertraut zu machen. Es kann also nicht schaden, sie zu lernen.

nategoose
quelle