Ich werde ein Team von Highschool-Schülern für den ERSTEN Robotik-Wettbewerb betreuen. Die meisten Teams hier entwickeln [ihre Robotersoftware mit C ++. Für viele Studenten im Team ist dies die erste Einführung in die Programmierung. Ich hätte C ++ nicht gewählt, um Highschoolern das Programmieren beizubringen (zB Python oder Javascript wären meiner Meinung nach einfacher gewesen), aber die Wahl ist gefallen.
Ich möchte ihnen richtiges C ++ beibringen (dh einen gemischten C / C ++ - Dialekt vermeiden, dh C +), aber ich möchte sie auch nicht mit unnötiger Komplexität erschrecken. Für diese Angelegenheit:
- Soll ich ab dem ersten Tag mit STL anfangen?
vector
oder einfach bei Standard-Arrays bleiben? Arrays sind einfacher einzuführen, aber die Zeigerfehler sind möglicherweise schwerer abzufangen. - Sollte ich mich bei I / O an
cout
usw. halten oder denkst du, esprintf
wäre einfacher zu lernen? - Gibt es Online-Ressourcen für C ++, die für solche jungen Lernenden geeignet sind?
Vielen Dank!
EDIT : Danke für so viele hervorragende Antworten. Zusätzlich zu Accelerated C ++ , das von vielen Leuten vorgeschlagen wird, habe ich festgestellt, dass C ++ für jedermann ein ausgezeichneter Text ist.
Antworten:
Ich denke, Sie sollten mit den Datentypen beginnen, die die Sprache wie Arrays und Zeiger eingebaut hat, und wenn Ihre Schüler diese verstehen, fahren Sie mit Klassen und OO fort, dann mit der STL.
Der Grund dafür ist, dass Sie Menschen das Verstehen von Arrays beibringen können, ohne viel anderes als Variablen und die zugrunde liegende Computerarchitektur zu verstehen. Sie können ihnen jedoch nicht das Verstehen beibringen,
vector
ohne ihnen zuerst Klassen beizubringen . Wenn Sie die STL von Anfang an verwenden, müssen Ihre Schüler damit leben, keine Ahnung zu haben, wievector
genau dies funktioniert. Und dann, wenn Sie an diesem Punkt angelangt sind, werden sie Zeiger und Arrays und Dinge, die Sie durch das Schreiben Ihrer eigenen Vektorklasse, das Schreiben Ihrer eigenen Klasse für verknüpfte Listen usw. erhalten, nicht gut genug verstehen seine Funktionen zu schätzen und zu nutzen. Es ärgert mich, wenn Schüler sagen "Was ist das?" und Lehrer sagen: "Ignoriere es einfach, du wirst es später lernen."Und wie Demian in den Kommentaren ausführte, ist das Entschlüsseln der relativ kryptischen Nachrichten, die Sie aus Vorlagenfehlern erhalten, erheblich schwieriger als das Verstehen der Fehler, die Sie aus Arrays / Nicht-Vorlagenkonstrukten erhalten können.
Ich fühle mich nicht die gleiche Weise über
cout
undprintf
. Keiner ist untergeordneter als der andere, außer dasscout
eine Operatorüberladung verwendet wird.Das mag blöd erscheinen, aber ich bin absolut fanatisch , wenn es darum geht, die Grundbausteine von allem zu verstehen, bevor ich zu den Abstraktionen übergehe. Sie sollten keine intelligenten Zeiger verwenden, bis Sie mit rohen Zeigern vertraut sind, keine Vektoren vor Arrays, so etwas.
Ich sage das oft, aber ich sage es noch einmal: Es ist besser, den Schülern zuerst die lange Unterteilung beizubringen und sie dann einen Taschenrechner benutzen zu lassen, als sie einen Taschenrechner benutzen zu lassen und sie anschließend die lange Unterteilung lernen zu lassen.
Informationen zu Büchern für Anfänger finden Sie in der Hauptliste der guten C ++ - Bücher .
quelle
vector
Over-Arrays. Ich bin zerrissen.std::string
und gibtstd::vector
?! Stimmen die 32 C-Programmierer zu? Ich unterrichte C ++ seit einem Jahrzehnt, um Anfänger, Studenten, die ein Jahr Java hatten, und Programmierer zu programmieren. Ich benutzestd::string
undstd::vector
vom ersten Tag an. Sie sind einfach zu bedienen, egal was ihre Innereien sind. (Sie würden nicht davor zurückschrecken,std::vector
können, um es verwenden zu können. Und Klassen sind ein äußerst grundlegender Bestandteil von C ++. Was nicht grundlegend ist, ist das Debuggen aller Fehler, die sie bekommen, mit nativen Arrays und Zeigern.new
Stichwort, bist du gleich wieder in die Speicherverwaltung terrirory. Und oft fragen Bibliotheken nach Hinweisen, und Sie müssen sich fragen: "Wird das Eigentum sein? Oder muss ich es noch bereinigen?". Fundament meinen Fuß. Eher wie ein Nagel oder Kitt oder so.Das ist meine eigene Erfahrung. Nimm es für alles, was es wert ist.
Im Rückblick auf , als ich begann Programmierung, mag ich wirklich , ich würde über das Gedächtnis gelernt hat zuerst . Nein, es ist nicht aufregend. Es wird dich überglühen lassen. Aber es ist ein lächerlich leicht zu unterrichtendes Konzept. Zeigen Sie einfach eine 1-D-Tabelle und lassen Sie sie ein paar mentale Übungen machen:
und so weiter. Sobald Sie Grundgedächtnis haben, ist alles andere Kuchen. Es sind die armen Studenten, die davon ausgehen, dass der Compiler etwas Magisches tut (oder dass sie nie über Memory Management nachdenken müssen), die am meisten zu kämpfen haben. Und C ++ trübt das Wasser, weil einige Dinge automatisch bereinigt werden (dh ein normaler Vektor), während andere Dinge nicht bereinigt werden (dh ein mit "new" zugewiesener Vektor). Und lassen Sie mich nicht einmal mit Strings anfangen (char * vs. std :: string - versuchen Sie es zu erklären, ohne Zeigerwissen).
Ich weiß nicht, auf welche Plattform Ihre Roboterwettbewerbe abzielen, aber wenn es sich um eine Umgebung mit begrenztem Speicher handelt, sind die Fähigkeiten zur Speicherverwaltung von entscheidender Bedeutung.
BEARBEITEN
Sobald Sie ihnen die Grundlagen beigebracht haben, sage ich, gehen Sie C ++ den ganzen Weg. Technisch gesehen sind sie nur verschiedene Bibliotheken, aber es hat keinen Sinn, sie mit mehr als einem Paradigma zu verwechseln. Geben Sie ihnen C ++ - Tools (einschließlich Zeiger und Arrays).
quelle
Verwenden Sie auf jeden Fall Standardbibliothekstypen. a
std::string
oderstd::vector
ist das, was sie häufig verwenden sollten, und (die überwiegende Mehrheit der Implementierungen von) diese Typen bieten eine Form der Fehlererkennung und Fehlerbehandlung, während viele der Komplexitäten von den Schülern abstrahiert werden.Sie können einen guten Teil der Zeit damit verbringen, den Schülern beizubringen, wie das Gedächtnis strukturiert ist und wie das Gedächtnis verwaltet wird (C-Stil), oder Sie können direkt mit den idiomatischen Arten der Sprache arbeiten und dann bei Bedarf Implementierungsdetails erläutern (und wenn sie eine haben) ein besseres Verständnis dafür, was ein Array ist und wo sie verwendet werden).
Die Syntax von
std::vector
(Erstellen / Lesen / Schreiben) ist nicht viel komplizierter als die eines C-Arrays. Im Vergleich dazu sind die manuelle Speicherverwaltung und alle häufigen Fehler, die neue Lernende mit C-Arrays machen, weitaus schwieriger zu erlernen, zu lehren und zu verwenden.cout
. Ich persönlich denkecout
, es ist einfacher zu lernen. Vielleicht ist es noch wichtiger, dass Sie wählen,cout
weil es sicherer und vielseitiger ist und Sie definieren können, wie ein Objekt gedruckt wird. Dies bedeutet, dass Sie bereits über integrierte Funktionen und eine integrierte Typensicherheit verfügen, die einige Standardbibliothekstypen verwenden. Schließlich werden Sie nur mit gemischten Programmen am Ende , wenn Sie merken , dass sie auch lernen müssen , könnencout
zusätzlich zuprintf
.Tatsächlich denke ich, Sie sollten Accelerated C ++ von Koenig und Moo lesen und es möglicherweise für Anweisungen verwenden (indem Sie Frage 3 indirekt beantworten). In dem Buch führen sie
std::cout
kurz vorreturn
(Seite 3) ein und speichern Zeiger und Arrays bis Kapitel 10. Wenn ich das Vorwort dieses Buches als Antwort auf Ihre Frage kopieren und einfügen könnte, würde ich. (Anmerkung: Ich empfehle, dass Sie es für die Perspektive des Lehrens von c ++ lesen).Bearbeiten Hier ist das Vorwort
Wenn Sie Accelerated C ++ nicht verwenden möchten (was im Allgemeinen einige Hintergrundinformationen zur Programmierung voraussetzt), möchten Sie vielleicht Eckels Denken in C ++ . Ich habe es nicht gelesen, aber es ist ein frei verbreiteter C ++ - Intro-Text.
quelle
std::cout
der Einführung werden geschweifte Klammern eingeführt =) (es ist eine einfache Zerlegung des allgegenwärtigen "Hallo, Welt")Eine zu berücksichtigende Sache ist, dass in typischen FIRST-Codes Datenstrukturen jeglicher Form (Strukturen, Klassen, Arrays, Vektoren, Listen) eine sehr geringe Rolle spielen. In der Regel verarbeiten Sie eine sehr kleine Menge von Sensordaten und entscheiden anhand dieser Daten über eine sehr kleine Menge von Aktuatorbewegungen.
Was jedoch eine große Rolle spielt und sehr schwer zu verstehen ist, sind die verschiedenen Formen der Kontrolle , die stattfinden.
Deshalb habe ich viel Wert auf Kontrolle gelegt. Beginnen Sie mit den Grundlagen:
if
,for
,while
. Lassen Sie sie viel üben. Lass sie diese gut kennenlernen ...... aber dann wird es schwieriger. Jeder Robotercode von mittlerer Größe bekommt schließlich einige schwierigere Kontrollmuster:
Große "Haupt" -Schleife, die alles aufruft
Zustandsautomaten (diese tauchen häufig auf)
Speichern vorheriger Werte / laufender Zähler (wie bei PID)
Diese sind für Anfänger schwer zu verstehen. Der Gedanke daran, wie sich ein Programm durch Code wie diesen bewegt, ist verwirrend, aber Sie werden es vielleicht nicht bemerken. Es wird Ihren Schülern viel mehr Probleme bereiten als die Sprache selbst.
Auch viel Glück! Hoffe die Saison läuft gut.
quelle
Das Problem bei Arrays ist, dass alles außer einfachen Lehrbuchbeispielen Arrays mit dynamischer Größe erfordern und der Moment, in dem Sie Arrays mit dynamischer Größe benötigen,
std::vector
viel einfacher ist. Die einzige Möglichkeit, mit Arrays mit dynamischer Größe sicher umzugehen, besteht darin, sie in Ihrer eigenen Klasse zu verpacken, was eine schlechtestd::vector
Abzocke wäre.Im Gegensatz zu dem aus unerklärlichen Gründen landläufigen Meinung können die Schüler nutzen Funktionen , die komplexe Mechanik erfordern , ohne zu wissen umgesetzt werden , wie man implementieren sich solche Tiere. Wie ich in einem Kommentar gesagt habe: Sie würden nicht einmal daran denken, Strings in anderen Sprachen nicht zu unterrichten, nur weil ihre Implementierung komplex ist, oder?
Warum sollte ein Satz von Zeichenfolgenkonventionen im archaischen Format, die Ihr Programm in dem Moment in die Luft jagen lassen, in dem Sie etwas falsch machen (was passiert, wenn Sie eine
typedef
scheinbar nicht verwandte Überschrift ändern ), der Typensicherheit vonstd::cout
vorgezogen werden?Die meisten C ++ - Ressourcen, online oder nicht, sind schlecht. Und ich spreche nicht von schwer lesbaren Schriften oder schwer lesbarer Sprache. Ich spreche auffällig offensichtliche sachliche Fehler. Es gibt nur sehr wenige gute C ++ - Ressourcen, meist ein oder zwei Dutzend Bücher . Das einzige, von dem ich weiß, dass es online ist, ist Bruce Eckels Denken in C ++ .
Seit einem Jahrzehnt unterrichte ich C ++ Schülern mit sehr unterschiedlichem Hintergrund auf der Grundlage von Accelerated C ++ von Koenig / Moo . Mein Kurs hat sich in diesem Jahrzehnt sehr verändert, ist nun weit entfernt von dem Buch, abgesehen von dem zugrundeliegenden Prinzip: Verwenden Sie die modernen, korrekten und sicheren Redewendungen von Anfang an. Bringen Sie Ihren Schülern nicht bei, wie man das Gedächtnis manuell manipuliert, nur um sie später dazu zu bringen, dies zugunsten sichererer Redewendungen zu verlernen. Wie Sie an einigen der hier gegebenen Antworten sehen können, funktioniert dies nicht: Wer einmal die manuellen Methoden erlernt hat, wird selten den Vorteil der Verwendung moderner, sicherer Redewendungen verstehen.
quelle
Wenn Sie C ++ unterrichten möchten, würde ich direkt mit C ++ - Konstrukten als Vektor und Cout beginnen, anstelle der C-Teilmenge wie printf.
quelle
Ja. Die Verwendung nativer Arrays in C ++ ist fehleranfällig und in 99% der Fälle eine schlechte Praxis.
Ja.
Sie sind nicht so jung. Programmieren zu lernen erfordert keine Weisheit, nur Motivation und Offenheit. Ich kann mir nichts vorstellen, was in den letzten zwei Schuljahren unterrichtet wurde, um einen Schüler besser auf das Programmieren vorzubereiten. Haben Sie sich Bruce Eckels Denken in C ++ angesehen ? Es steht zum kostenlosen Download zur Verfügung und ist sehr gut bewertet. Bitte vermeiden Sie das beliebte, aber schreckliche C ++: How to Program und all die Sam's Teach Yourself C ++ ... Bücher.
quelle
Ich war C ++ in der High School als ersten Programmiersprache gelehrt, obwohl es war eher wie „C +“, jetzt, wo du es erwähnst; Wir haben
cout
zum Schreiben von Text auf die Konsole und Dateien verwendet, aber auch einige C-Funktionen (getch()
war mein Favorit).Ich denke, die effektivste (und möglicherweise unterhaltsamste) Art, die Grundlagen zu vermitteln, ist die Verwendung eines zielgerichteten Lehrplans: Beginnen Sie mit der Veranschaulichung der Ausgabe, der Tastatureingabe, der einfachen Datei-E / A usw. basiertes Spiel (oder das Äquivalent zur Robotik). Wenn sie dann fragen: "Wie mache ich X?", Können Sie X anhand von Beispielen aufschlüsseln, die sie bereits gesehen haben, z. B. "Zuerst müssen Sie die Eingaben vom Benutzer erhalten, wie wir es in Z getan haben, dann ... "(Offensichtlich ist es in der Praxis nicht so einfach, da X wahrscheinlich etwas ist, wofür sie zusätzliche Kenntnisse benötigen, z. B." 3D-Grafiken ", aber Sie könnten trotzdem erklären, wie es auf hohem Niveau funktionieren würde Weg).
Die Beispiele, die Sie zeigen, beginnen als Black-Box-Magie, deren Rätsel gelöst werden, wenn Teile des Programmierpuzzles langsam herausgefunden werden. Zum Beispiel werden Ihre Schüler die Grundlagen von
if
s ziemlich schnell erlernen , aber sie werden wahrscheinlich nicht erkennen, dass ein boolescher Ausdruck nicht ausschließlich auf die Verwendung innerhalb einerif
Bedingung beschränkt ist (was zu klassischemif (blah) return true; else return false;
Code führt).Die Feinheiten, ob Sie ein Array oder einen Vektor als Container auswählen, erscheinen den Schülern zunächst irrelevant. Ein Vektor / Array ist einfach eine Möglichkeit, viele Variablen als eine Variable zu haben, auf die über einen Index zugegriffen werden kann. Bleib bei einem, wo du kannst. Hinweise werden auch erst später verstanden. Das heißt nicht, dass man Dinge nicht erklären sollte; nur dass du nicht alles auf einmal erklären kannst und das, was du erklärst, nicht vollständig absorbiert wird. Der Mensch lernt organisch, nicht linear. Ich hatte
cout
ein paar Jahre lang verwendet, bevor ich richtig verstand, was Operatorüberladung war!Oh, und hab keine Angst vor Wiederholungen. "Das ist wie das Hello World-Programm, das wir gemacht haben - erinnern Sie sich, wie wir Text in die Konsole geschrieben haben?" (nein ...) "Lass es uns noch einmal durchgehen, nur um sicherzugehen." ... und Fragen stellen! Beschäftigen Sie die Schüler mit lustigen Beispielen und viel Interaktion.
C ++ ist eine komplexe Sprache, und unabhängig davon, was Sie tun, geht Ihren Schülern ein erheblicher Teil dieser Komplexität (und der Komplexität des Programmierhandwerks im Allgemeinen) verloren. Alles, was Sie ihnen zeigen, wird ihnen neu sein. Das meiste davon wird nicht auf einer tiefen Ebene des Verständnisses versinken (zumindest nicht sofort). Wie Speicher funktioniert, wie die Komponenten eines PCs interagieren, was Stack und Heap sind, Zeiger, Klassen, sogar Schleifen und If-else-Ketten werden von der Mehrheit nicht richtig verstanden . Das ist in Ordnung! Sie müssen nicht verstanden werden, um verwendet zu werden - eine erstaunliche Menge cooler Programme kann mit superhässlichen 1000-Zeilen-Funktionen mit fünffach verschachtelten redundanten
if
s und 43 Variablen geschrieben werden, die so genannte Dingex_2r
. Wichtig ist, dass die Schüler ständig lernen und sich verbessern. Black Boxes sind in Ordnung, solange sie langfristig transparent (oder zumindest durchscheinend grau) werden. Am Ende des Kurses können, sie wissen nicht , was Design prasselt sind, aber sie sollen sie schrieben in den ersten Wochen und bei den Programmen der Lage, zurück zu blicken erschaudern bei ihrem Code. Sie sollten sehr genau verstehen, wie das erste Programm, das sie geschrieben haben, tatsächlich funktioniert (während sie beim Schreiben keine Ahnung hatten). Aber sie werden nicht alles wissen - noch .quelle
Ich habe eine Reihe von Programmierkursen in meinem Leben von der High School bis zum College absolviert. Ich kann sagen, dass ich in meiner ersten C ++ - Klasse nicht viel anderes gelernt habe, als Dinge in einen Stream zu drucken.
Als junger Student, der erst in den letzten Jahren als Entwickler gearbeitet hat, rate ich mir, die Dinge nicht zu beschönigen. Sagen Sie ihnen, was sie tun und wie es auf Betriebssystemebene funktioniert (Sie müssen sich nicht mit comp eng IMO befassen).
Ich denke, es ist besser, ihnen C beizubringen (es wird, wie Sie wissen, immer noch als C ++ kompiliert). Lehre sie, was das Terminal wirklich ist, wie ihr Programm damit interagiert, dass ein String ein Array von Zeichen ist, das mit \ 0 im Speicher endet, was malloc ist und wie C ++ es abstrahiert, wie ein char und ein int im Speicher gespeichert sind , ect ... Diese Dinge lassen jemanden tatsächlich wissen, wie er ein Problem lösen kann, wenn er in der Entwicklung darauf stößt.
Ich kann nicht betonen, wie wichtig es ist, das Kinderprogramm zuzulassen und hauptsächlich dort zu sein, um Fragen zu beantworten. Nach meiner Erfahrung lernst du eine Sprache, indem du sie verwendest. Bücher und Lektionen können hilfreich sein und sind notwendig, um zu beginnen, aber am Ende sage ich, gib ihnen eine C / C ++ - Datei und sage: Dies ist ein Beispiel für X, ich möchte, dass Sie Y tun (was getan werden kann durch Hacken von X). Zeigen Sie ihnen, wie man Manpages benutzt (wenn sie * NIX benutzen), oder zeigen Sie ihnen cplusplus.com und lassen Sie sie die Standardbibliotheken erkunden, um die Dinge selbst herauszufinden.
TL; DR Lassen Sie die Kinder sich selbst unterrichten. Seien Sie dabei, um Struktur zu schaffen und Fragen zu beantworten.
Auch: Verknüpfte Listen sind die Wahrheit!
quelle
Sie bringen ihnen nicht generell das Programmieren bei, Sie bringen ihnen eine Art eingebettetes Programmieren mit Robotern und dergleichen bei. Wenn ich es richtig verstanden habe
Zunächst sollten Sie prüfen, welche Bibliotheken Sie verwenden möchten und welche Sie benötigen.
Wenn Sie zufällig eine C-Bibliothek zur Verwendung haben oder eine C-ähnliche Bibliothek mit vielen Zeigern und C-Arrays, dann brauchen Sie wahrscheinlich eine Möglichkeit, ihnen die Verwendung beizubringen oder warum Sie sie verwenden.
Sie können ihnen jedoch einige einfache Codes zeigen, um sie mit Zeichenfolgen und Vektoren vertraut zu machen. So funktioniert C ++. Das bedeutet nicht, dass Sie ihnen keine Zeiger beibringen können.
Vielleicht sollten Sie die Unterschiede zwischen C ++ auf niedriger Ebene (was C ähnelt) und C ++ auf hoher Ebene mit der STL deutlich machen. Eine der schwierigsten Aufgaben in C ++ für Anfänger ist es, herauszufinden, was C ist, was C ++ ist und welche unterschiedlichen System-APIs es gibt.
Da das Ziel hier nicht das Erlernen der allgemeinen Programmierung ist, sondern die Teilnahme an einem Roboterwettbewerb, habe ich den Unterricht so ausgerichtet.
quelle
Ich habe Ende letzten Jahres angefangen C ++ zu unterrichten und diesen Sommer auch für unser FIRST Robotics Team.
Wir verwenden die Programmierung von Stroustrup - Prinzipien und Praxis unter Verwendung von C ++ . Ich fand das Buch zugänglich, lesbar und gut organisiert. Wir haben ungefähr 6 Studenten die Kapitel alleine durchlesen lassen. Ich bin da, um ihnen bei Terminologie und Fragen zu helfen. Sie machen alle Übungen im Buch.
Ich ließ die Schüler Kapitel 14 durcharbeiten. Überspringen der Kapitel in Streams (nicht nützlich für die FRC-Programmierung). Durch Kapitel 14 ist nützlich, weil sie eine Einführung in Unterklassen bekommen. Sie müssen jedoch wahrscheinlich weiter in dem Buch gehen, um Konstruktoren und Destruktoren, die sich auf Unterklassen beziehen, besser zu verstehen.
Unterschätzen Sie Ihre Schüler nicht. Die Schüler freuen sich, das Buch zu haben, es zu lesen, zu lernen und die Übungen zu machen. und das war im sommer auf eigene zeit! Es gibt viele Studenten, die das nicht verstehen. Sie sollten zu etwas anderem übergehen; nicht jeder versteht programmierung.
Die größte Barriere ist nicht die Sprache oder das Buch; Es ist die Entwicklungsumgebung. Visual Studio Express kann für Erstanwender entmutigend sein. Sie können den Schülern dabei helfen, sich auf die Programmierung und nicht auf die Umgebung zu konzentrieren. Das Erlernen der Umgebung ist jedoch wertvoll, da Programmierer viel Zeit damit verbringen, sich an neue Entwicklungssysteme anzupassen.
Viel Glück.
quelle
Sie möchten ihnen C ++ beibringen, aber keine C-Konstrukte beibringen, aber die meisten Programmierkonstrukte, die sie zuerst kennen müssen, sind allen Sprachen gemeinsam, und die C ++ - Versionen sind in C verwurzelt:
So erstellen Sie ein Programm [int main (..) {return 0; }]. Geben Sie einen grundlegenden Überblick über die Programmierumgebung, die Sie auch ausprobieren möchten. Sie müssen wissen, wie man ein Projekt erstellt und es tatsächlich kompiliert / ausführt.
Dies ist eine Variable. Variablen können Daten speichern (int, char, float usw.).
Strings (C ++ - Strings sind mit cin einfacher zu verwenden).
So lesen und schreiben Sie Daten (cin, cout). "Hallo,% s!"
Bedingungen (Computer müssen Entscheidungen treffen).
Schleifen (Computer können immer wieder das Gleiche tun). Show while und for Schleifen.
Das sollte ungefähr zwei Stunden dauern. Stellen Sie sicher, dass Sie eine kurze Liste von Notizen erstellen, auf die in der praktischen Komponente verwiesen wird. Sie versuchen nicht, sie zu brillanten Programmierern zu machen. Geben Sie Beispiele dafür, wie Sie von der Konsole aus lesen, Strukturen erstellen und alles, was sie sonst noch tun müssten. Verwenden Sie nur sprachunterstützte Funktionen, keine benutzerdefinierten Dienstprogrammbibliotheken. Sie werden sie nur mehr verwirren.
Gehen Sie von Anfang an mit gutem Beispiel voran und zeigen Sie ihnen Beispiele für übersichtlichen Code. Die Einrückungen sollten korrekt sein und in Klammern stehen, die dem Stil entsprechen, mit dem Sie sich am wohlsten fühlen. Variablennamen sollten aussagekräftig sein. Wenn Sie Slop als Beispiel zeigen, werden sie feststellen, dass Slop akzeptabel ist. Es ist ein schlechter Ausgangspunkt. Betonen Sie, wie wichtig es ist, dass Einrückungen korrekt sind. Als das, was ich unterrichtete, ihren Code konsistent einrückte, konnten sie leichter erkennen, wo sie falsch liefen. Dies lag daran, dass die meisten ihrer Fehler einen falschen Bereich für Operationen darstellten (das Einfügen von Operationen in Schleifen / Bedingungen, die nicht vorgesehen waren, oder umgekehrt).
Dann machen Sie mit der praktischen Arbeit weiter. Der beste Weg, etwas zu lernen, ist es, es zu brechen und herauszufinden, warum. Sie sollten sicherstellen, dass sie eine benutzerfreundliche Umgebung haben, um ihren Code zu kompilieren. Dokumentieren Sie es mit Screenshots in Ihren Handouts.
Ein gutes Beispiel, das mir geholfen hat, einige der Konzepte zu entwickeln, war der Bau einer Cola-Maschine:
Danach können Sie zu C ++ - Konstrukten wechseln. Sie möchten nicht zu weit eintauchen, bevor sie zumindest ein Basisprogramm erstellen können.
Und vor allem haben Sie viel Zeit und Geduld, um sich Fragen zu widmen. Es wird viele geben, und die meisten werden dich erschrecken, weil sie so trivial sind, dass die Antwort für dich offensichtlich ist.
quelle
Ich denke, Sie sollten Dinge nicht aus C ++ - Sicht lehren ("C ++ Hallo Welt"), sondern aus der Sicht des Problems - in diesem Fall der Robotik -. Ihre Hallo-Welt würde also eine LED blinken lassen oder einen Motor antreiben.
Natürlich könnten / sollten Sie jede winzige Robotikaufgabe in eine Untergruppe von konzeptionell aussagekräftigen C ++ - Aktionen zerlegen, die Typen, Funktionen und E / A-Operationen umfassen.
Ich selbst bin kein professioneller Programmierer und habe versucht, Java, C ++ und Python zu lernen. Ich habe wirklich angefangen, etwas (Python) zu erreichen, als ich echte (einfache) Probleme zu lösen hatte. Das hat mich auf den Punkt gebracht, ohne übermäßige Aufmerksamkeit auf zufällige Implementierungsdetails der Sprache selbst zu richten.
Daher würde ich raten: Lies nicht das Handbuch einer Sprache, sondern lerne, Dinge mit der Sprache deiner Wahl zu tun. Das ist es, was die Leute motiviert, denke ich.
quelle
Ich würde strenges C ++ unterrichten. Weißt du, wie etwas Seltsames passiert, wenn du printf schreibst und es kleinen Params oder dem falschen Typ gibst? und wenn Sie ungültige Zeiger verwenden, können schlimme Dinge auftreten? LERNEN SIE DAS NICHT
Vom ersten Tag an unterrichtete ich, wie man Referenzen benutzt, STL und sagte, dass man MARKS verliert, wenn man Zeiger benutzt. Lehren Sie auch keine intelligenten Zeiger. Das einzige Mal, dass ich bemerke, dass ich Zeiger verwende, ist, wenn ich GUI und Objekte (wie ein Bildfeld) existiere und ein gültiges Bild oder null sein muss. Für die Konsolenprogrammierung verwende ich seit langem keine Zeiger (smart oder raw) mehr.
Also lehre sie kurz gesagt nichts, was ihnen Schwierigkeiten bereiten könnte. Unterrichten Sie Iostreams und Strukturen, und teilen Sie ihnen mit, dass sie auch beim Typografieren Spuren hinterlassen. Versuchen Sie nicht, Design zu unterrichten. Sie wollen nicht, dass jemand ein erfahrener Profi wird
quelle
Es ist keine C ++ - Vorlesungsreihe, aber Richard Bucklands COMP1917 ist eine hervorragend durchgeführte Vorlesungsreihe zum Programmieren in C (gefolgt von COMP1927 , Datenstrukturen).
Meiner Meinung nach ist C ++ für neue Studenten zu komplex, aber C ist um Welten einfacher und bietet eine gute Grundlage für die Systemprogrammierung, die neuen C ++ - Programmierern allzu oft fehlt.
quelle
Ich würde mit einer großen Anzahl von Code-Bausteinen beginnen, ihnen dabei helfen, bei der Programmierung sofort etwas Gutes zu tun, und ihr Verständnis für die Funktionsweise der Dinge im Laufe der Zeit verfeinern. Sie müssen nicht alle Feinheiten von C ++ kennen oder verstehen, damit eine LED blinkt. Sie müssen nur wissen, "wenn Sie diesen Code dort ablegen, wird die LED blinken." Und dann: "Hey, lass uns darüber reden, was eine Schleife jetzt ist. Wenn du eine Schleife schreibst, kannst du die LED 50-mal blinken lassen, ohne 50 Codezeilen schreiben zu müssen. Ist das nicht cool?" Lassen Sie uns nun über die Bedingungen sprechen. Wenn der Benutzer die Taste A auf der Steuerbox drückt, möchten wir die Pneumatik aktivieren, um eine Flagge zu hissen. Hier ist, wie wir Code hinzufügen, um dies zu tun. Oder wenn der Schalter 2 an unserer Steuerbox eingeschaltet ist, lassen wir den Bohrmotor in umgekehrter Richtung statt in Vorwärtsrichtung laufen.
Wenn Sie sich darauf konzentrieren, sie "gerade genug" zu unterrichten, um die Probleme zu lösen, an denen sie interessiert sind, werden die Dinge viel weniger überwältigend und zugänglicher. Wenn sie wirklich interessiert sind und die Feinheiten verstehen wollen, werden sie wahrscheinlich zurückgehen und ein umfassendes Buch über Programmierung lesen oder einen Sommerschulkurs bei der örtlichen JC besuchen.
Machen Sie eine Liste der "Dinge, die sie steuern können" auf ihrem Roboter und machen Sie aus jedem eine Lektion ... was müssen sie mindestens wissen, um ...?
Ich würde mich daran halten, die Konstrukte zu lehren, die am besten für Kinder geeignet sind, wie ich Cout über Printf lehren würde, da Formatspezifizierer sehr einfach zu verwechseln sind und ein falscher Spezifizierer oft ein automatisches Rezept ist, um Ihr Programm zum Absturz zu bringen. Ebenso verschleiert der Vektor einige der Speicherverwaltungskomplexitäten. Machen Sie sich keine Gedanken darüber, wie die Dinge funktionieren oder wie die STL-Bibliothek aussieht. Sie müssen nur das Mindeste wissen, um X zu erreichen (was zum Beispiel die Verwendung einer STL-Bibliotheksdatenstruktur erfordern könnte).
quelle
Verwenden Sie, wie C ++ von Deitel und Deitel programmiert wird. AUSGEZEICHNETES Lehrbuch meiner Meinung nach.
Klingt so, als würden Sie Anfängern beibringen, wie man programmiert, und sie gleichzeitig auf fortgeschrittenem Niveau programmieren lassen. Wenn Sie hoffen, ihnen einen Affen zu geben, dann tun Affen Codierungsschnipsel, ohne zu verstehen, dass Sie zum Scheitern verurteilt sind.
Halten Sie sich für einen Anfängerkurs von STL fern.
Wenn Sie bereits eine Codierungslösung für Ihren Roboter haben - oder eine SEHR GUTE IDEE, wie sie aussehen wird -, können Sie die Lektionen im Lehrbuch möglicherweise den Codierungsaufgaben für den Roboter zuordnen. Aber lassen Sie das Lehrbuch das Lernen vorantreiben.
Wenn Sie die Codierung erzwingen, den Schülern sehr enge Lektionen erteilen und der Sprache ausgesetzt sind, wird der Ozean an Code, den Sie schreiben, meiner Meinung nach immer größer. Es ist, als hätten Sie gerade das Hundepaddeln gelernt, und Sie ertrinken, weil Sie WIRKLICH schwimmen ist erforderlich.
Es ist nicht eine Frage von "sollten sie cout oder printf lernen?" Es geht darum, genug zu lernen, um zu verstehen, wie man Code für bestimmte Roboterprogrammierungsaufgaben schreibt, die gelöst werden müssen.
Wenn dies eine Leseaufgabe wäre, was wären die Ergebnisse, wenn alles, was sie wüssten, einfache Subjekt-Verb-Sätze wären und nur die Hälfte des Vokabulars, das Sie WISSEN , benötigt wird.
quelle