Ich bin ein Anfänger. Kann ich direkt mit dem Erlernen von C ++ 11 beginnen? oder muss ich altes C ++ lernen? [geschlossen]

36

Ich bin ein Anfänger und habe nur wenig Programmierkenntnisse.

Wäre es gut, wenn ich C ++ direkt aus Büchern lernen würde, die sich mit neuem C ++ 11 befassen, oder sollte ich die alten besten C ++ - Bücher durcharbeiten?

Sollte ich wenig über C ++ wissen, bevor ich C ++ 11 lerne? oder kann ich direkt von dort aus starten?

Würde es ein Problem verursachen, wenn ich direkt von C ++ 11 aus starte? Wenn nein, schlagen Sie einige Bücher zu C ++ 11 vor.

Dhananjay
quelle
18
Warum diese negativen Punkte? Wurden diese Fragen bereits beantwortet? Dürfen Neulinge nicht hinterfragen? Hoes forscht jemand in dieser Angelegenheit? Ich denke, einer der besten Wege ist, jemanden mit mehr Erfahrung zu fragen. +1, da Neulinge auch Führung verdienen
adosaiguas
12
@ Simon Das klingt für mich nach einer konzeptionellen Frage zur Softwareentwicklung: Wo fange ich an? Und woher weißt du, dass er kein professioneller Programmierer ist? ;)
adosaiguas
4
@MSalters Apropos Bücher; Accelerated C ++ ist ein großartiges Buch, wenn auch etwas vereinfacht. Barbara E. Moo ist eine großartige Autorin und ihr Einfluss auf das Buch ist leicht zu bemerken. Aber das Buch in Frage in der Tat ist „alt“. Doch nicht alle Hoffnungen gehen verloren - es gibt ein hochgeschätztes Buch mit dem Titel C ++ Primer von Lippman , Lajoie und Barbara E. Moo . Die fünfte Ausgabe wurde diesen Monat (August 2012) veröffentlicht und aus den ersten Kapiteln, die ich aus meinem Buch gelesen habe Kopie, dies ist ein ausgezeichnetes Buch über C ++ 11. Der Einfluss von Moo ist wieder da. Sie ist eine Göttin, wenn es um technisches Schreiben geht.
zxcdw
2
@ Simon Programmers — Stack Exchange is a site for professional programmers...In diesem Fall würde es Ihnen etwas ausmachen , mich zu der Site für Anfängerprogrammierer zu führen? Ich bin auch ein Neuling in der
Programmierung
2
Ich denke, diese Frage ist aufgrund der FAQ eindeutig vom Thema abweichend (vielleicht wurde sie zu dem Zeitpunkt nicht gestellt, als sie zuerst gestellt wurde). Es wird gefragt, "welche Sprache (Version) ich als nächstes aufgreifen soll", es handelt von Bildungsratschlägen und es werden Ressourcen in geringer Größe angefordert - drei der Standardschlussgründe.
Doc Brown

Antworten:

38

Es gibt viele Verbesserungen der Benutzerfreundlichkeit, die C ++ 11 für Anfänger verständlicher machen, insbesondere für diejenigen, die Erfahrung in anderen Sprachen mit diesen Funktionen haben. Andere Änderungen in C ++ 11 sind nur für fortgeschrittene Benutzer von Interesse, sodass Sie wahrscheinlich überfordert sind, wenn Sie sich ein Buch zulegen, in dem hauptsächlich die Unterschiede vermittelt werden. Stellen Sie sicher, dass jedes Buch, das Sie erhalten, für Anfänger von C ++ geeignet ist.

Davon abgesehen müssen Sie wahrscheinlich irgendwann den alten Weg erlernen, da es eine Menge vorhandenen Code gibt und selbst neuer C ++ 11-Code die alten Methoden enthält, wenn der Programmierer dies wünscht. Ich schreibe C ++, und meine Firma hat sich noch nicht einmal damit beschäftigt , C ++ 11-kompatible Compiler zu evaluieren , geschweige denn einen in der Produktion zu verwenden.

Karl Bielefeldt
quelle
Ich lerne aus C ++ Primer 4. Edition. gutes Buch zu Beginn?
Dhananjay
1
Es wird gute Kritiken und sieht auf der richtigen Ebene sein, aber ich habe nicht auf Anfänger-Niveau C ++ Bücher in einer sah lange Zeit, so dass ich nicht die beste Person bin zu fragen. Ich denke, Sie brauchen die 5. Ausgabe, wenn Sie C ++ 11 behandeln möchten.
Karl Bielefeldt
es ist ok und ja, ich weiß, dass die fünfte Ausgabe c ++ 11 abdeckt.
Dhananjay
10

Sie müssen kein altes C ++ verwenden, um C ++ 11 zu verwenden. Es gibt neue Funktionen in C ++ 11, die jedoch optional sind. Zu wissen, wie man C ++ 11-Funktionen einsetzt, könnte von Vorteil sein, und es wäre sicherlich kein Nachteil, wenn man mit älteren (vor 11) Codebasen arbeitet, wenn man die Besonderheiten der älteren Versionen kennt.

C ++ lernen ist ein guter Ort, um mit dem Lernen zu beginnen. Anhang B zeigt Ihnen die C ++ 11-Funktionen, nachdem Sie die Grundlagen erlernt haben.

Ich kann verstehen, warum einige Leute Java / CSharp usw. als einfachere alternative Sprachen vorgeschlagen haben, aber ich habe ein bisschen C ++ gelernt, bevor ich zu CSharp übergegangen bin, und ich bin deshalb kein schlechter Programmierer Syntax / Funktionalität und mit einer soliden Grundlage in C ++ können Sie jede andere zwingende OOP-Sprache leicht erlernen.

Joel
quelle
8

Es ist schwer zu sagen.

Altes C ++ ist eher ein Minenfeld, und es ist schön zu lernen, wie man ein solches Biest navigiert. Sie werden auch verstehen, warum die Dinge so gemacht werden, wie sie sind, und welche Auswirkungen die verschiedenen Konstrukte haben.

Andererseits ist altes C ++ nicht das, was Sie wollen, wenn Sie Code schreiben.

Aber andererseits ist altes C ++ das, was eine Menge Industrie für weitere 20 Jahre antreibt.

Ich liebe C ++ 11, aber es ist vorerst nur in Startups verwendbar. Nicht in großen älteren Codebasen. Wenn Sie direkt zu C ++ 11 springen, verfügen Sie möglicherweise über nicht entwickelte Kenntnisse in bösen C ++ - Teilen. Diese Methode schlägt fehl, sobald einige fortgeschrittene C ++ 11-Konstruktionslecks oder -abstürze auftreten, da sie syntaktisch korrekt, aber logisch inkorrekt verwendet wird.

Coder
quelle
Warum sollten große Teile der Industrie ihre Compiler nicht aktualisieren, abgesehen vom Bereich der eingebetteten Nischensysteme? Risiko (auch bei Unit-Tests)? Konservatismus?
TheLQ
1
@TheLQ: Ich denke ... Aber wenn ich überlege, was ich tun würde, wenn ich ein Chef wäre, würde ich höchstwahrscheinlich dasselbe tun. Es sei denn, es gibt spürbare Kosteneinsparungen im Vergleich zu Migrationskosten.
Coder
1
@TheLQ: Codebasen müssen erst auf eine neuere Version des Compilers umgestellt werden. Es ist selten, dass ein Projekt eine neue Compilerversion willkürlich anpasst. In einem neuen Projekt wird mit größerer Wahrscheinlichkeit ein neuer Compiler verwendet (sofern dieser nicht mit altem Code interagiert).
Martin York
1
@Coder: Was unterscheidet C ++ 11 von C ++ 03? Wenn Sie es lernen, wird es nicht direkt in C ++ 03 übersetzt. Es gibt ein paar neue Funktionen, die das Schreiben vereinfachen, aber nichts, was Sie daran hindert, in diese Minenfelder zu gelangen.
Martin York
1
@TheLQ: Ja, das sind im Grunde die Prozesse, aber Sie haben den Integrationstest vergessen (der komplexeste Teil. Nicht alle Anwendungen sind eigenständig (eigentlich würde ich sagen, dass dies die Minderheit ist)). Sie müssen sicherstellen, dass Ihr gesamter Code funktioniert und korrekt interagiert (nicht nur mit Ihrem Code, sondern auch mit dem Kundencode). Dies ist ein Prozess von Monaten, wenn nicht sogar von Tests und Validierungen. Wenn einige Ihrer Kunden nicht auf C ++ 11 umsteigen, müssen Sie möglicherweise beide Versionen auf einigen Systemen beibehalten (zum Glück ist gcc mit der Abwärtskompatibilität sehr gut, aber nicht alle C ++ - Compiler-Anbieter sind es).
Martin York
8

Trotz vieler Verbesserungen in C++11, C++ist immer noch keine einfache Sprache. Obwohl Java nicht so einfach ist, wie manche vielleicht denken, ist es dennoch eine einfachere Sprache mit sehr guter Leistung (oft fast so schnell wie C++) und bietet bessere IDEs (vielleicht Visual C++so gut wie aktuelle Java-IDEs, aber hier unter Linux kein Glück) umfassendere Standardbibliothek (das JDK), mehr Bibliotheken (z. B. Hibernate , Spring , JEE , Lucene usw.) und keine Speicherverluste (na ja, fast keine - Sie können in Java immer noch einen Speicherverlust erstellen, dies ist jedoch schwieriger als in C++). Um fair zu sein, mit modernen C++11ist es viel einfacher, Speicher Lauch zu vermeiden.

C ++ 11 hat viele coole Funktionen wie Lambdas, Auto-Keyword, Bewegungssemantik und vieles mehr. Es ist definitiv eine viel bessere Sprache als C++98früher. In dieser Übersicht von Herb Sutter finden Sie Informationen zu den neuen Funktionen in C++11: Elements of Modern C++Style.

Zusammenfassend denke ich, dass jeder mindestens einiges lernen sollte C++. Wenn Sie die Programmierung in haben Java, Scala, Rubyoder Pythonfür die letzten zehn Jahre und nie berührt Coder C++, jetzt mit C++11Ich denke , es ist Zeit zu lernen , ist C++11Ihre Programmierkenntnisse und zu verbessern , während dies zu tun.

Ich werde C++in den kommenden Jahren wahrscheinlich nicht viel bei der Arbeit verwenden und wenn ich eine leistungsfähigere Sprache als benötige Java, werde ich wahrscheinlich Scala wählen, aber ich werde C++11die neuen Funktionen genauer betrachten und versuchen, sie zu lernen und zu verstehen, insbesondere die über Multithreading und Parallelität.

Denken Sie daran: Es ist immer hilfreich, eine neue Programmiersprache zu lernen, auch wenn Sie nicht vorhaben, sie in der Produktion zu verwenden.

Jenny Casarino
quelle
1

Atmen Sie tief ein und lesen Sie diesen Artikel von Peter Norvig.

Hast du das gelesen Ok, wenn Sie ein Anfänger sind, müssen Sie in kleinen Schritten beginnen. -Sprache hier einfügen- kann später erscheinen. Schauen Sie sich Coursera oder Udacity an, um einige Einführungskurse in die Informatik zu erhalten.

Wenn Sie das erledigt haben, empfehle ich Ihnen, sich langsam durch die Programmiersprache C von K & R zu arbeiten, wenn Sie eine C-Sprache eingestellt haben.

Arbeiten Sie an den Grundlagen, der Rest wird rechtzeitig kommen.

lwm
quelle
10
Ich verstehe nicht, wie dies die Antwort auf die gestellte Frage ist. C ist nicht einmal dieselbe Sprache wie C ++.
Vartec
1
C ++ basiert jedoch auf C und ist weitgehend abwärtskompatibel: Die überwiegende Mehrheit der modernen C-Syntax ist direkt auf C ++ anwendbar. Da C einfacher ist als jede andere Version von C ++, bietet das Erlernen von C zunächst eine gute, zusammenhängende Ausbildung in der grundlegenden C ++ - Syntax und -Semantik - und hilft dabei, einige der ansonsten unverständlichen Warzen in der größeren Sprache zu erklären ...
Sturm
2
@comingstorm Das erste, was ein C-Programmierer tun sollte, ist, fast alles, was er über C weiß, zu verlernen und dann C ++ zu lernen. Es gibt subtile Unterschiede, die Sie beißen könnten.
B 29овић
1
Außerdem leiht der idiomatische moderne C ++ - Code nicht viel von C, abgesehen von der Syntax. Es ist nicht so, dass wir immer noch C-Strings und Malloc / Free verwenden. Als Anfänger der Sprache ist es besser, ein Buch wie C ++ Primer 5th Edition, Accelerated C ++ usw. in die
Hand
1

Aktuelle Einführungsbücher zu C ++ behandeln zunehmend auch C ++ 11. Ich habe Sam's Teach Yourself C ++ gelesen, nachdem ich fast zehn Jahre mit Skriptsprachen, aber nicht mit C / C ++ gearbeitet hatte, und fand es wirklich hilfreich. Ich habe mich sehr schnell mit den zentralen Ideen von C ++ (einschließlich einer Menge von STL) vertraut gemacht und war mir sehr vieler Details bewusst, die sich in C ++ 11 unterscheiden.

Wie einige andere Poster erwähnt, C ++ 11 ist in vielerlei Hinsicht leichter als ältere Standards mit Scripting-Stil Zusätze wie auto, for(int &i : m_vector){}usw. Also , wenn Ihr „wenig Wissen“ aus Sprachen wie Python oder Matlab kommt, werden Sie feststellen , C ++ 11 etwas "natürlicher" als die früheren Standards.

Ich möchte auch darauf hinweisen, dass die Compilerkompatibilität für C ++ 11 ( fast ) vollständig ist, sodass es kein Problem mehr gibt, Code zu haben, der "zu aktuell zum Kompilieren ist".

Kurz gesagt, mach es.

mmdanziger
quelle
-1

Zu meiner Zeit galt C als Voraussetzung für C ++, insbesondere für Programmieranfänger. Weil man herausfinden muss, was eine Sprache macht und warum sie so gestaltet wurde. C hat eine Menge großartiger und ausreichender Ideen für die Programmiersprache, die niemals veraltet sein werden. Daher halte ich dies für den besten Start.

Und nachdem Sie eine grundlegende Sichtweise in Bezug auf das Programmieren haben, müssen Sie möglicherweise auswählen, was als nächstes getan werden soll, was bedeutet, dass Sie eine Sprache auswählen müssen, um so tief wie möglich zu lernen. Egal wie tief Sie gehen, es kann im Allgemeinen entscheiden, wie tief Sie für eine andere Sprache gehen können, was bedeutet, dass unabhängig von der Anzahl der Sprachen, die Sie gelernt haben, die tiefste immer die erste ist, die Sie ausgegraben haben. Ich habe mich mit Java befasst und einige Java-Modelle selbst erstellt, um die Kernelfunktionalität besser zu verstehen.

Danach können Sie möglicherweise lernen, was Sie wollen, da Sie die Technologie der Programmiersprache vollständig verstehen. Ich habe angefangen, C #, Go, Python und sogar Scala zu lernen und habe viele Projekte zum Spaß / zur Arbeit gemacht. Der persönliche Rekord liegt bei 3 Monaten vom Erlernen einer Sprache bis zum 1.0-Leiter eines Entwicklungsprojekts.

In meinem Fall ist mein erstes Programm über 15 Jahre her und ich kann mich nicht einmal daran erinnern, was es ist. Ich glaube, wenn du hart genug arbeitest, wirst du definitiv besser und schneller als ich.

WinstonWu
quelle
Dies beantwortet nicht die gestellte Frage
Mücke
Entschuldigung. Ich möchte nur sagen, auch nicht. Es ist egal, was Sie letztendlich lernen möchten, nur die Basis der Programmiersprache kann entscheiden, wie tief Sie in diesem Bereich graben können. Gleichzeitig muss man mehr Zeit damit verbringen, als einen kurzen Schuss zu machen.
WinstonWu
-2

Ich denke, als Anfänger müssen Sie zuerst C ++ - Konzepte durchgehen, da C ++ 11 und alles wie eine neue Version ist, aber C und C ++ die Basis für jede Art von Entwicklung sind. Sobald Sie C ++ gelernt haben, werden die meisten Konzepte automatisch gelöscht.

Pooja Runija
quelle
1
Willkommen bei den Programmierern! Ich bin mir nicht sicher, ob Ihre Antwort diese Frage so sehr ergänzt. und grammatikalisch ein bisschen chaotisch. Ich habe Probleme, dem zu folgen, was Sie sagen wollen. Könnten Sie Ihre Antwort erweitern und vielleicht Beispiele hinzufügen, warum sich C ++ 11 so stark unterscheidet, dass das Erlernen von C und früheren Versionen des C ++ - Standards besser ist?
Martijn Pieters
-3

C ++ ist eine wirklich großartige und mächtige Sprache. Es ist jedoch auch eine große Verantwortung für den Programmierer.

Wenn Sie noch kein Programmierer sind, machen Sie es sich leichter und beginnen Sie mit C #. Die Syntax basiert auf C ++, aber die Fehlerbehandlung ist viel anfängerfreundlicher und hilft Ihnen, wenn etwas schief geht.

Wenn Sie mit Methoden, Klassen und Vererbung vertraut sind und sich in einer Umgebung entwickeln möchten, in der das Verwalten von Speicher- und Systemressourcen wichtiger ist als die Produktivität, ist C ++ eine gute Wahl, und ich möchte zunächst den aktuellen Standard erlernen. Beachten Sie, dass Sie in C ++ den Speicher verstehen und aktiv verwalten müssen. Machen Sie hier Fehler und alles, was Sie bekommen, ist entweder ein Core-Dump oder Ihre Daten enthalten Bytes, die keinen Sinn ergeben. Und oft hängt der Punkt, an dem Sie das Problem finden, nicht davon ab, wo die Ursache tatsächlich liegt.

Michael Shaw
quelle
1
Wenn man mit C # anfängt, gewöhnt man sich daran, auf hoher Ebene zu programmieren (OOP, Automatic Memory Management), ohne zu wissen, was "hinter den Kulissen" passiert. Wenn diese Person dann zu C ++ wechselt, werden ihm wichtige Kenntnisse über C / C ++ fehlen (ich denke hauptsächlich an die Speicherverwaltung, aber es gibt noch mehr). Es mag noch irreführender sein, weil C ++ und C # eine sehr ähnliche Syntax haben, aber was der Code tatsächlich kompiliert, ist völlig anders. Denken Sie daran, dass das OP sein Interesse an C ++ klar zum Ausdruck gebracht hat.
Eti
Das OP gab auch an, dass sie wenig Programmierkenntnisse haben. Ihre erste Sprache als C ++ zu lernen ist eine große Herausforderung. Es ist weitaus besser, sich für Schlachten und eine Reihe kleinerer Schlachten zu entscheiden, da Sie mit größerer Wahrscheinlichkeit Erfolg haben.
Michael Shaw
-6

Warum willst du mit C ++ anfangen?

Ich persönlich empfehle gegen C ++ als Muttersprache. Es ist knifflig, komplex, schwierig ... einfach viel niedriger und "unsicherer" als die meisten anderen Programmiersprachen.

Ich empfehle, C #, Java, Python oder Javascript ... und ein gutes Buch auf dem Weg zu wählen. Sie werden viel mehr Spaß damit haben.

dagnelies
quelle
3
Ich stimme dem nicht als Verallgemeinerung zu. Der Übergang vom einfachen Leben von Java / C # / Python usw. zu einer komplexeren Welt von C und C ++ ist nicht so einfach. Wenn Sie wirklich darauf eingestellt sind, eine Programmiersprache zu lernen, ist das Erlernen von C und C ++ schwierig, wird aber so viel zurückgeben. Wenn Sie später in Java, C #, Python usw. programmieren möchten, ist diese Änderung viel einfacher, als wenn Sie von dort nach C oder C ++ wechseln. Zusammenfassung: C / C ++ ist anfangs schwieriger, erleichtert jedoch den Wechsel zu einer anderen OO-Sprache.
Martiert
2
C ++ ist die beste Grundlage für den Start. Die Programmierung ist komplex und am Ende muss man mit einer Hardware arbeiten. C ++ ist eine erstaunliche Möglichkeit, dies ohne ein falsches Sicherheitsgefühl zu lernen.
Coder
Die Frage der Operation hängt vollständig von ihrem Entwicklungszweck ab.
Unabhängige
1
Ich bin damit nicht einverstanden. Das Erlernen von C ++ hat mehrere Vorteile und erleichtert das Erlernen anderer Sprachen wie Java und C #, um nur einige zu nennen.
Anthony
2
@Dhananjay: C ++ ist um ein Vielfaches schwieriger als Java ... Java ist wie ein Babybike, eine extrem vereinfachte Version von C ++. Letzteres wäre ein schnörkelloses Fahrrad ohne Bremsen. Wenn Sie Java bereits als schwierig empfinden, wird C ++ Ihnen zu schaffen machen. Meine 2 Cent.
dagnelies