Ein lokales College unterrichtet C ++ an College-Studenten im ersten Jahr (16 Jahre) ohne vorherige Programmiererfahrung.
Ist C ++ als erste Programmiersprache geeignet?
Ein lokales College unterrichtet C ++ an College-Studenten im ersten Jahr (16 Jahre) ohne vorherige Programmiererfahrung.
Ist C ++ als erste Programmiersprache geeignet?
Antworten:
Nachdrücklich nein .
Für jedes Ziel, das Sie für Studenten vorhaben, wäre eine andere Sprache oder eine andere Folge von Sprachen schneller und besser. Beispiele.
"Die Schüler müssen grundlegende Konzepte verstehen."
"Low-Level" -Codierung besteht nicht darin, Objekte new
abzurufen, sie zurückzuspeisen delete
und gelegentlich einen Zeiger zu haben, der auf eine Stelle zeigt, an der er nicht sein sollte. Funktionen, Klassen und Vorlagen sind keine Low-Level-Funktionen. RAII, 12 Möglichkeiten zu nutzen const
, std::ostream::operator<<
, protected
und new
sind nicht Low-Level - Konzepte. Diese Dinge haben geringe Auswirkungen, und Sie überspringen diese für Monate oder bis zu einer zukünftigen Klasse und unterrichten stattdessen Berge von C ++ - Semantik.
Ich empfehle Assembler mit einer guten Umgebung und Lehrmaterial wie MIPS oder MMIX. Wenn Sie es eilig haben, bringen Sie C mit Umwegen bei, um sich zumindest die Assembler-Ausgabe anzusehen. Dies wird Ihnen das gesamte Verständnis vermitteln, das C ++ und noch viel schneller macht.
"Die Schüler müssen die Objektorientierung verstehen."
Die in C ++ integrierte Objektorientierung ist für das Unterrichten von OO-Konzepten oder fast jedem anderen übergeordneten Konzept viel zu kompliziert. Siehe Die C ++ FAQ für eine schöne, warum lange Liste der möglichen Gründe. Entweder müssen Sie all diese Dinge erledigen, was bei neuen Programmierern sehr, sehr lange dauern wird. oder Sie müssen eine Menge davon überspringen und die neuen Programmierer im Dunkeln lassen - effektiv, weil Sie C ++ nicht wirklich kennen!
Ich empfehle, zuerst eine einfachere Hochsprache mit Objekten zu lernen (Python, Ruby, Squeak, Common Lisp, Racket), wenn Sie überhaupt C ++ unterrichten müssen. Darüber hinaus lernen Sie Polymorphismus als ein Konzept, das durch den Besuch einer funktionalen Sprache von OO getrennt ist.
"Die Schüler müssen Vorlagen und Vorlagen-Metaprogramme verstehen."
Niemand fragt das wirklich, aber ich wünschte, sie würden. C ++ hat nette Vorlagen und STL ist cool, aber sie sollten keine ausreichend hohe Priorität haben, um C ++ zuerst zu unterrichten. Das Erlernen des OCaml- oder Haskell-Systems und das anschließende Nachrüsten dieser Konzepte sind möglicherweise schneller.
"Die Schüler müssen lernen, Probleme zu lösen."
Ja, Sie bekommen das in jeder Sprache und Sie bekommen mehr, wenn es in fast jeder anderen Sprache als C ++ ist, weil es viel weniger Gepäck gibt. In den häufig gestellten Fragen zu C ++ finden Sie eine Liste aller Dinge, die die Schüler lernen werden, anstatt Fähigkeiten zur Problemlösung.
"All dies und wir müssen nur eine Sprache verwenden." oder "Arbeitgeber wollen es." oder "Wir brauchen eine Sprache im C-Stil." oder...
Unterrichten Sie mehr als eine Sprache.
Die Idee, dass Sie Zeit oder Energie sparen, indem Sie nur eine Sprache lehren oder lernen, ist geradezu lächerlich. Es basiert auf der Idee, dass das Erlernen einer Sprache genau X Mannmonate dauert ( TIPP! TIPP! ), Wobei X eine einzelne Zahl oder eine Zahl pro Sprache ist. Dies ist fast identisch mit der Idee, dass Sie Zeit und Geld sparen können, indem Sie all diese "Anforderungen" und "Test" -Müll überspringen.
Bei Mehrfachsyntaxen können Sie die Schüler in gefährlicher Weise lähmen, wenn Sie ihnen beibringen, die C-Syntax in jeder Sprache zu erwarten, indem Sie sie wild gegen andere Sprachen voreingenommen machen.
Fast jeder Pfad ist schneller und besser als der Start mit C ++. Das Erlernen einer einfachen Hochsprache und dann C ++ wäre schneller. Assembler und dann C ++ zu lernen wäre schneller. Alles andere als C ++ wird die Schüler schneller dorthin bringen und sie werden viel mehr wissen, um zu booten. Unterrichten Sie C ++ einfach nicht zuerst.
Nein, C ++ ist selbst für erfahrene C ++ - Entwickler eine schwierige Sprache. Selbst für die einfachsten Algorithmen müssen Sie viele der sprachlichen Feinheiten erklären. Betrachten Sie ein Hello World-Beispiel:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}
Was ist das für ein #include
Befehl? Was ist std::cout
. Warum das ::
? Was ist <<
? Ohhh, es ist ein überladener Operator! Was ist ein überladener Operator? Sooo, denn ints
es verschiebt sich ein bisschen, aber was auch immer es std::cout
ist, es gibt Sachen an die Konsole aus. Ohhh, std::cout
ist ein Stream und Streams haben ihren <<
und >>
Operator überladen.
Sehen wir uns das gleiche Beispiel in Python an:
print("Hello World!")
Das war's, lass uns ein paar Algorithmen programmieren.
Es ist wahrscheinlich keine gute Muttersprache: komplexe Syntax, viele Regeln, alte Sprache, fehleranfällige Speicherverwaltung. Bringen Sie Ihren Schülern lieber etwas Besseres wie Smalltalk bei, oder etwas Schöneres zum Programmieren wie Python oder etwas Funktionales wie Haskell.
Sie können später im Leben C ++ lernen (wenn sie nicht anders können), nachdem sie bessere Sprachen gelernt haben.
Kurze Antwort: Ja!
Ich würde sagen, dass jede Sprache ein geeigneter Anfang ist, aber insbesondere C ++ (oder Äquivalent). Heutzutage sind C # und Java die wichtigsten Programmiersprachen, mit denen Sie schnell lernen, sich auf APIs und IDEs zu stützen. Mit C ++ haben Sie jedoch die Möglichkeit, das Programmieren von Grund auf zu erlernen, einschließlich Leistungsoptimierung usw.
Es ist nie eine schlechte Idee, die Grundlagen des Programmierens, Schleifens und Sortierens zu erlernen, bevor Sie sich blind auf eine in .Sort () integrierte Sprache verlassen.
Eigentlich glaube ich, dass es aus einem sehr praktischen Grund eine gute Wahl als Muttersprache ist: Nach dem Erlernen von C ++ scheint es ein Kinderspiel zu sein, jede andere Sprache zu lernen, auf die Sie stoßen.
Ich habe mir C ++ beigebracht, als ich 15-16 war.
Es ist besser, die Magie anderen zu überlassen und das Innenleben der Dinge selbst zu lernen.
Kurz gesagt, wenn Sie die C ++ - Einstiegssyntax und -Semantik nicht verstehen, sind Sie nicht so gut im Umgang mit Computern. Es ist nicht so schwer. Es gibt keinen guten Grund, "C mit Klassen" zu vermeiden.
Wenn Sie davon ausgehen, dass die Schüler anfangen, an der Metaprogrammierung von Vorlagen zu arbeiten, polymorphe Aufrufe abzuleiten und Hierarchien für mehrere Vererbungen zu entwirren, ist dies für eine Einstiegsklasse für jede Art von Sprache lächerlich.
Es besteht eine sehr schlechte Tendenz, die Komplexität der Programmierung für Studenten zu verbergen. Das ist nicht gut (vgl. Spolsky's Java Schools Essay). Diese Leute landen auf dem DailyWTF, wenn sie nicht den Kopf klar kriegen. Abstraktionen lecken, und wenn (nicht wenn) die Abstraktion leckt, ist das schlimmer, als damit umgehen zu müssen. Ich habe gearbeitet für den Einstieg in C ++ Studenten als TA. Entweder müssen Dinge vollständig verborgen sein oder sie müssen in das Licht gebracht werden, um untersucht zu werden. Magie ist der Feind des Lernenden.
Wenn ich eine zu Maschinencode kompilierte Startsprache empfehlen müsste, wäre wahrscheinlich eine Pascal-Variante der beste Ansatz. Es hat einen regelmäßigeren und strukturierteren Ansatz als die C-Familie, wie ich mich erinnere.
Ich würde 'nein' sagen - ich hatte die Begeisterung und den Wunsch, Programmieren zu lernen, und bin gleich mit C ++ in mein Einführungsjahr am College gestartet. Zusammen mit einem Lehrer, der C ++ unterrichtete, als wäre es eine andere Sprache (Konzepte, die für ihn Sinn machten, nicht unbedingt Konzepte der Sprache oder der realen Welt), und Projekten, die jede Woche sofort auf uns geworfen wurden, stürzte ich ab und verbrannte mit die Hälfte der Klasse. Als ich überhaupt verdauen, experimentieren und anwenden konnte, was mir beigebracht wurde, hatte ich Probleme mit den Hausaufgaben des Projekts, die gleichzeitig als Tests dienten. Ich würde argumentieren, dass es mehr ein 200-Level-Kurs als 100 war.
Ich habe wirklich mein Bestes versucht. Ich habe nicht um Mitgefühl gebeten, ich wusste, dass es eine Herausforderung sein würde, aber der Lehrer würde mir nicht einmal helfen. Ich habe gerade gesagt, ich soll das Lehrbuch lesen, so wie ich es getan habe.
Ich würde argumentieren (und einige würden nicht zustimmen), dass Ruby oder Python eine viel bessere Sprache ist, um jemanden in die Welt der Programmierung einzubrechen. Saubere, übersichtliche, lesbare und klarere Syntax.
Nein.
C ++ ist als Unterrichtssprache nur unwesentlich besser als C, eine der schlechtesten Unterrichtssprachen überhaupt. Es führt zu einer Menge Komplexität im Vorfeld, einige Teile der Sprache sind zutiefst nicht intuitiv und die meiste Zeit lernen Sie mehr über C ++ als über das Programmieren im Allgemeinen.
Das soll nicht heißen, dass C ++ (oder C) schlechte Sprachen sind oder dass es sich nicht lohnt, sie zu lernen. Nur, dass es bessere Unterrichtssprachen wie Python gibt.
string
Datentyp , dass Überlastungen Operatoren wie +
, =
und ==
Dinge zu tun , dass die Schüler mehr oder weniger erwartet, im Vergleich zu , wie String - Verarbeitung Bedürfnisse in C getan werden daher „marginal“ . Ich würde es auch nicht als Unterrichtssprache empfehlen.
Es gibt zwei wesentliche Arten der postsekundären Bildung: die Universität und die Handelsschule. Der Unterschied besteht darin, worauf Sie nach dem Abschluss vorbereitet sein möchten. Im Automobilbereich ist es egal, ob Sie Mechaniker oder Maschinenbauingenieur sind.
Davon abgesehen ist C ++ eine großartige Muttersprache, wenn Sie Ingenieur werden möchten, und eine miese, wenn Sie das Programmieräquivalent eines Mechanikers sein möchten.
Eine Einführung in C ++ wird viel Zeit damit verbringen, über Datentypen, Definitionen, Deklarationen, Zeiger, Speicherzuweisung usw. zu sprechen. Dies ist eine großartige Grundlage, wenn Sie mehrere Semester damit verbringen möchten, etwas Nützliches zu tun, aber wissen möchten, dass Sie die Grundlage haben, um mit jedem Grad an Komplexität fertig zu werden.
Wenn Sie andererseits in der Lage sein möchten, etwas Nützliches schneller zu erledigen, es aber nicht stört, wenn die Domäne und die Komplexität begrenzt sind, dann wird es eine Verschwendung sein, die gesamte Zeit im Voraus auf diese Konzepte auf niedrigerer Ebene zu verwenden. Es gibt viele Programmierer, die einen großartigen HTML-Formularprüfer schreiben können, aber keine Ahnung haben, wie sie mit dem Entwerfen eines Gerätetreibers umgehen sollen.
Sicher. Meine erste Sprache war C, aber das war wirklich nur, um unsere Klasse in C ++ zu erleichtern. Es hat mir die Arbeit mit Java erleichtert, als ich an der Universität war. C ++ hat möglicherweise eine etwas steilere Lernkurve, aber wenn es richtig unterrichtet wird, sollte es in Ordnung sein.
Nein, C ++ ist nicht als Muttersprache geeignet. Wie hier gezeigt, teilen viele professionelle Programmierer diese Meinung, aber dies ist auch eine Meinung, die professionelle Lehrer vertreten.
Dies ist ein Bericht des Dekans der Carnegie Mellon University über die Verwendung von C ++ für einen Einführungskurs in das Programmieren für Studienanfänger:
Standardsprachen wie C oder C ++ sind für diesen Kurs nicht geeignet, da ihre Komplexität und Mängel sowohl informelle als auch mechanisierte Argumentationstechniken behindern.
Die CMU bietet zwei Einführungskurse an, einen imperativen und einen funktionalen. SML wurde für die funktionale Programmierung ausgewählt. Ich weiß nicht, was für den Imperativkurs gewählt wurde, aber der Bericht erwähnt unter Verwendung einer Teilmenge von C.
Auf jeden Fall kann C ++ die allererste Sprache sein. Aber es geht darum, wie gut es gelehrt wird.
Jeder sagt, die erste Sprache sollte sehr einfach zu verstehen sein. Mein Punkt ist jedoch, dass die meisten Leute mit dem Programmieren im Grundstudium beginnen. So können Sie etwas lehren, das sie erfassen können. Und mit C ++ können Sie von einer niedrigeren zu einer höheren Programmierebene wechseln.
Nein auf keinen Fall.
Wenn ich meinen Willen hätte, würde ich seine Verwendung in einem akademischen Umfeld fast vollständig verbieten. Nicht aus Gründen, die den bereits gemachten zuwiderlaufen, sondern weil zu viele glauben, dass C ++ (oder dessen Variationen) die Antwort für fast jedes Problem ist, da Sie es in nahezu jeder Situation verwenden können. Es ist der Schraubenzieher der Programmierung.
Einige Leute benutzen es, um Schrauben festzuziehen, ein absolut vernünftiges Werkzeug für die Arbeit. Andere benutzen ihn wie einen Brecheisen, obwohl er oftmals effektiv ist, nicht wirklich ideal, da ein Schraubendreher, egal was dein Vater dir sagt, kein Brecheisen ist und aufgrund von Missbrauch katastrophal ausfällt, weil die Zusammensetzung des Schafts nicht absichtlich gebaut ist für die Art von Kräften würde ein Prybar begegnen. Wieder andere könnten versuchen, es als Schlag oder Meißel zu verwenden, und sie werden fast immer auf Probleme stoßen, da der Griff des Schraubendrehers nicht für die Art von auffallendem Missbrauch konstruiert wurde, der Schlag oder Meißel standhalten sollen.
Meiner Meinung nach besteht die Aufgabe eines Programmierers darin, echte Probleme generell in Automatisierung umzusetzen, die einen gewissen Grad an verbesserter Effizienz (Verringerung der Ressourcenbindung für eine Aufgabe), Geschwindigkeit (Verringerung der Zeit für die Ausführung einer Aufgabe) und Vorhersagbarkeit (Erhöhung der Wiederholbarkeit) bietet einer Aufgabe) oder Organisation (Sensibilisierung für die Beziehung zwischen Aufgaben).
Während es verständlich ist, dass jeder, der Programme ausführt, über ein allgemeines Wissen über den Betrieb von Computern auf niedriger Ebene und insbesondere über die E / A- und Speicherzuweisung von Geräten verfügen sollte, ist es auf jeden Fall ungewöhnlich, dieses Wissen in nennenswertem Umfang wirklich nutzen zu müssen, geschweige denn für die große Mehrheit der Aufgaben. Der Versuch, dies zu tun, ohne den breiteren Kontext des Problems zu verstehen, birgt ein unnötiges Risiko für eine Anstrengung.
Es ist absurd, dass eine erste Programmiersprache C / C ++ oder nahe Varianten sein sollte, da die Klasse von Problemen, die C und seine Derivate lösen, für einen willkürlich großen Prozentsatz der gegenwärtigen und zukünftigen Probleme sicherlich nicht angemessen ist (es sei denn, man muss sie retten) ein früheres Schraubenzieherprogramm), und in der Tat handelt es sich eher um eine winzige Menge kommender Probleme. Die meisten Programmierer werden trotz der zunehmenden Verbreitung kleiner mobiler, miteinander verbundener Geräte niemals in der Lage sein, Kernfunktionen des Betriebssystems oder direkte Geräteschnittstellen zu entwickeln. Die meisten werden so arbeiten und leben wie wir. Beheben und Auslaufenlassen von Code, der mehr als zwei Generationen alt ist, Implementierung auf Technologie, die bereits in die Jahre gekommen ist, oder Arbeiten am Rande der Technologie in der Killer-App (x + 1).
Als erste Sprache würde ich mir Lego NXT ansehen, eine leichte, aber sehr funktionsreiche Variante von LabView. Während Lego NXT in kommerziellen Unternehmen nicht weit verbreitet ist, wird es die grundlegende Natur dessen darstellen, was es ist, auf eine "sensorreiche" Weise zu programmieren. Ich könnte es mit einer etwas plattformneutralen Skriptsprache wie Javascript oder TCL / TK kombinieren. Beides hat relativ geringe Auswirkungen auf das, was Sie zu entdecken haben, um sehr einfache, aber effektive Aufgaben zu erledigen, mit hoher Rendite in Bezug auf die Rückkopplungsschleife und Flexibilität, um unterschiedliche Grade der Problemkomplexität einzuführen und zu lösen. Darüber hinaus bietet es den Schülern eine gute Gelegenheit, das Potenzial zu erforschen, das in der Dosenumgebung geboten wird: Sie können versuchen, in der Dunkelheit und bei Feuchtigkeit zu arbeiten.
Nachdem sie gelernt haben, die Vierzylinder-Automatik zu fahren, steigen sie in den großen manuellen Hotrod v8 ein, wenn sie wirklich interessiert und motiviert sind. Wenn Joel die Rockstar-Programmierer unter keinem Stein unter seinen Füßen finden kann, muss er möglicherweise weiter woanders suchen oder überdenken, warum er möglicherweise mehr als ein paar Schraubendreher in seinem Werkzeugkasten braucht.
Einige Punkte, an denen Anfänger leicht Fehler in C ++ machen, sind:
Zuweisungen machen, wo Sie = vs == testen wollten
Fehlt;
Lesbarkeit von geschweiften Klammern gegenüber beispielsweise Pascal-Anfang-Ende
Und dann gibt es alle Include-Dateien, Makros, Speicherverwaltung usw. zu verwechseln.
Daher würde ich sagen, dass C ++ nicht die beste Sprache für den Anfang ist - es besteht jedoch kein Zweifel, dass es sehr nützlich sein kann, wenn Sie es gelernt haben.
Ich würde - wie andere auch vorgeschlagen haben - C #, Java oder vielleicht sogar VB verwenden - und eine gute IDE mit Syntax-Highlight, Debugger usw., um die Wiederherstellung nach Fehlern zu vereinfachen.
Als ich am College war, war C ++ die Grundsprache, die während des ersten Studienjahres unterrichtet wurde. Die Theorie war, dass es einige komplexe Programmierkonzepte enthielt. Wenn Sie es also beherrschen, können Sie andere Sprachen lernen. Es diente mir gut als eine gute Grundlage.
Trotzdem war ich in meinem letzten Jahr Mitglied eines Komitees, um festzustellen, ob ich die Hauptsprache auf Java umstellen sollte oder nicht. Nach Gesprächen mit mehreren prominenten Arbeitgebern und einigen Alumni der Abteilung wurde festgestellt, dass ein Wechsel zu Java das beste Interesse der Studenten war. Die Arbeitgeber, mit denen wir gesprochen haben, wollten, dass die Leute Erfahrung in einer Sprache haben, die sie verwenden, um sie einzustellen. Ich glaube, jetzt, 10 Jahre später, verwenden sie immer noch Java als ihre Hauptsprache.
In ähnlicher Hinsicht haben wir uns bemüht, ein paar neue College-Absolventen mit wirklich guten C ++ - Kenntnissen einzustellen. Wir konnten keine finden.
Ich würde Ja sagen. Aber jede Sprache kann eine Muttersprache sein. Ich denke, C ++ ist gut, denn es ist zwar komplex und manchmal schwierig, aber es zeigt Ihnen, was Sie wirklich tun können (weniger Einschränkungen). Darüber hinaus verfügt es über ein objektorientiertes Design, mit dessen Hilfe Sie sich auf das Erlernen anderer Sprachen vorbereiten können.
C ++ war meine erste Sprache und ich bin froh, dass es so war. Es hat mich früh zum Nachdenken gebracht und ich bin dankbar dafür. Aber am Ende kommt es wirklich darauf an, was Sie tun möchten. Die Sprache spielt keine Rolle, denn wenn Sie mit einer Sprache gut umgehen können, werden Sie wahrscheinlich keine Probleme haben, eine andere Sprache zu lernen. Was möchten Sie tun? Spiele machen? Programm für Handys? Jeder wird Werkzeuge und Sprachen haben, die besser dafür geeignet sind.
C ++ ist eine Expertensprache, keine Anfängersprache ... würde ich zuerst C sagen, nicht Java oder C # oder Python ... warum? weil C Ihnen beibringt, sich um Ihr Gedächtnis und einige knifflige Begriffe wie Zeiger zu kümmern, die von allen Sprachen "verborgen" sind und dennoch überall vorhanden sind. Ich habe so viele junge Entwickler gesehen, die nicht einmal verstehen, warum manchmal Speicher freigegeben werden sollte, und glauben, dass der Garbage Collector kein kleiner Zwerg ist, der alle Coding Craps bereinigt: Sie instanziieren, sie instanziieren und boomen, es explodiert, selbst wenn sie XXXXGb haben RAM ... Aber sie verstehen nicht, warum der Müllsammler nicht einfach alles magisch säubert! Und ich habe diese Art von Entwicklern gesehen, die in C ++ (und noch verrückter in Corba) programmiert haben, und es war ein Gemetzel !!!!!!!!!! Ich würde also raten, das Programmieren in C zu lernen und dann nach Python / Java / C # zu gehen, um die Objektkonzepte und den ganzen Zucker zu finden. Wenn du das alles verstehst, gehst du zu C ++ und spürst die Kraft von C ++, aber du entdeckst auch alle seine Gefahren und warum es von niemandem benutzt werden sollte;)
NEIN. Es gibt so viele Dinge, die C ++ hat, dass es für Neulinge schwierig ist, sie zu verstehen. Steigen Sie nicht in die Fallacie "Alle Programmiersprachen sind gleich" ein.
Beginnen Sie mit Basic oder Pascal (ignorieren Sie das "Veraltete") und später mit C / C ++ / Java / C # / Perl. Oder wenn Sie eine Chance haben, zuerst mit Logo & Karel und dann mit Basic oder Pascal.
PD Einige Universitäten und Kollegen haben eine Programmiersprachen- und Vergleichsklasse, und es kommt vor, dass ich diese Klasse unterrichtet habe ;-)
Sie können eine beliebige Sprache auswählen, um die Grundlagen der Programmierung zu erlernen. Ich habe Sachen in C / C ++ gelernt. aber 7 Jahre später werden die Tools / Sprachen in meiner Schule geändert und sie bevorzugen Java / C #. Die Sprachen sind nur Werkzeuge. Was Sie brauchen, um besser zu werden, sind die Grundlagen. ZB lernen Menschen im MIT die Grundlagen des Algorithmus mit Python. zB Java kann für die Webprogrammierung gut sein. C / C ++ ist jedoch gut für Dienste und Hochleistungsanwendungen. Es hängt also von Ihren Situationen ab.
Wenn "geeignet" für "möglich" steht, ja. Wenn für "gut", definitiv nein.
Es ist möglich, C ++ zu mögen, sogar zu lieben, aber dafür sollten Sie mehrere Sprachen lernen und ein Jahrzehnt lang mit verrotteten Codebasen arbeiten. Machen Sie Erfahrungen mit dem "Entwickeln von nicht-trivialer Software, die tatsächlich funktioniert" - dann wird C ++ Charme haben.
Nicht am Anfang, wenn Sie jungfräulich sind, sich mit kleinen, einfachen (aber angeblich interessanten und lustigen) Problemen beschäftigen.
Ich würde mit Python beginnen, gefolgt von SICP (Schema) oder ähnlichem. Möglicherweise umgekehrt oder verschachtelt. Mit denen kannst du einfach loslegen und das Problem lösen. Anstatt das System zu bekämpfen, im tiefen Schlamm herumzulaufen und alle möglichen unlogischen Macken und ihre historischen Gründe zu lernen.
Später, wenn Sie bereits Ihren Weg aus einer Papiertüte heraus programmieren können, wechseln Sie zu Bare-Metal: Lernen Sie Montagemethoden und verschiedene Architekturen sowie möglicherweise Knuths Mix. Ich meine nicht das Speichern von Opcodes oder viele echte Dinge, nur um Speicher, Register, die ALU, Caches, Interrupts und den Lesezustand zu verstehen.
Dann können Sie mit dieser Grundlage anderen Sprachen, einschließlich C ++, ausgesetzt sein. Vielleicht eine gute Idee, zwischendurch etwas "Geschichte und Evolution der Sprachen" hinzuzufügen.
Ich habe mit C ++ in der Mittelschule angefangen. Ich habe ein Exemplar dieses Buches gekauft: C ++ How to Program von Deitel und Deitel . Dieses Buch ist ziemlich gut.
Ehrlich gesagt gibt es hier keine richtige oder falsche Antwort, ich persönlich fand, dass C ++ greifbar war. Ich habe es den ganzen Weg zu OOP gelernt (ich bin auf "das" gestolpert, was ich jetzt nicht verstehe, wie ich das nicht bekommen kann, aber was auch immer). Probieren Sie es aus, lassen Sie sich nicht entmutigen. Wenn Sie nicht weiterkommen, schauen Sie sich andere Sprachen an und lernen Sie immer wieder neue. Die Idee ist, dass, wenn Sie dasselbe Konzept in 2-3 verschiedenen Formen sehen, Sie sie besser verstehen werden. Wie ich bereits sagte, verwirrte mich das Konzept des Zeigers "this", aber als ich dasselbe in Python sah (stattdessen "self" genannt), ergab es für mich sofort Sinn, weil ich es in C ++ verstanden hatte. Lerne Java, wenn du es an so vielen Hochschulen unterrichten kannst. Lernen Sie Python oder Ruby, da es die Sprache Ihres Lebens ist und wenn Sie mehr Nischen- / Neuheiten wie Clojure (und all die anderen Lisps), Haskell, Scala ... entdecken können.
Ich würde mit Java oder C # beginnen. Wenn Sie C ++ lernen möchten, ist es wahrscheinlich einfacher, nachdem Sie die Grundlagen erlernt haben, wie z. B. was eine Klasse ist, wie Schleifen und Gabeln (wenn, dann Anweisungen) usw. zu tun sind. Es ist viel wichtiger, das Anschauen zu lernen ein Problem oder eine mathematische Gleichung und programmieren Sie es dann, um herauszufinden, ob Sie Ihr gesamtes Gedächtnis freigegeben haben oder was auch immer.
Es scheint, als stünde hinter dieser Frage die Annahme, dass C ++ so komplex erscheint, dass ein 16-Jähriger es als erste (Computerprogrammier-) Sprache aufgreifen kann.
Wenn wir 4 oder 5 Jahre alt sind, lernen wir die meisten Konstrukte in der Muttersprache kennen, nur mit so viel Kontakt, indem wir anderen zuhören, wie sie sprechen. Es braucht ein Leben, um gute Sätze zu bilden, keine Frage.
C ++ ist sicherlich viel weniger komplex / kompliziert als zum Beispiel die meisten menschlichen Sprachen. 16-Jährige sollten es sicher abholen können. Werden sie damit großartigen Code schreiben? Ich muss warten und zuschauen.
Anfänger müssen zuerst das Programmieren schätzen. Nach meiner Erfahrung in der Ausbildung einer Klasse von Anfängern schätzten sie zuerst, was sie am besten verstanden. Wie Python vs. C # schätzen sie Python, weil es sehr gut ist und keine Symbole wie C # verwendet, was bedeutet, dass es der menschlichen Sprache sehr nahe kommt und sehr englisch ist. Daher würde ich empfehlen, das Programmieren von High-Level auf Low-Level zu lernen.