Als ich am College war, war ich unter anderem Tutor für den Einführungskurs zum Programmieren. Das Problem, das Sie beschreiben, ist nicht ungewöhnlich. Abhängig von Ihrer spezifischen Rolle können Sie unterschiedliche Ansätze verfolgen.
Erstens würde ich mich an den Professor wenden, der den Kurs mit einem konkreten Feedback darüber unterrichtet, welche Konzepte die Schüler nicht verstehen, wenn dies ein weit verbreitetes Problem ist, das erhebliche Teile der Schüler in der Klasse betrifft, und wenn Sie dazu Zugang haben Sie kann entweder zusätzliche Überprüfungen dieses Materials vornehmen, wenn es in der Amtszeit wieder auftaucht, oder den Lehrplan für künftige Amtszeiten verbessern.
Wenn Sie zusätzlich zu Ihrer Laborzeit einen Diskussionsabschnitt für den Kurs unterrichten, wäre dies eine wunderbare Zeit, um die verwirrenden Aspekte der Vorlesung zu erläutern und sie konkreter zu machen und sicherzustellen, dass alle Grundlagen verstanden werden.
Wenn Sie mit diesen Schülern nur während Ihrer Zeit im Tutoring-Labor arbeiten, können Sie diese Zeit weiterhin verwenden, um den Schülern entweder einzeln oder nacheinander die konzeptionellen Bausteine beizubringen, die sie benötigen, um zu verstehen und ihre Hausaufgaben machen.
Sie fühlen sich im Unterricht so verloren, dass sie nicht einmal wissen, wo sie anhalten und Fragen stellen sollen. Wenn dies der Fall ist, kehren Sie mit ihnen zu den Grundlagen zurück. Wo waren sie im Kurs, als sie das letzte Mal verstanden hatten, was los war? Wenn sie unsicher sind oder "nie" verstanden werden, müssen Sie möglicherweise bis zum Anfang zurückgehen, um hallo Welt zu erklären, ihnen Dinge beizubringen, wie was eine Variable ist, wie der Computer ihre Liste von "Anweisungen" aufnimmt und dies versucht Tun Sie sie in der richtigen Reihenfolge, aber der Computer ist nicht so "schlau" wie wir. Sie müssen also sehr wörtlich sein und die Dinge genau richtig sagen, damit der Computer sie versteht usw.
Das ist eigentlich ein Punkt des Kampfes und der Frustration, den ich in den Nicht-Majors-Programmierkursen oft gesehen habe. Die Schüler schreiben einen Code. Es scheint "ungefähr" zu sein, aber dann werden sie es kompilieren und es gibt einen Fehler, einen sehr kryptischen Fehler. Und sie haben keine Ahnung, was daran falsch ist. Und stundenlang auf ihren Code starren. Dann endlich herausfinden, dass es etwas ist, das trivial erscheint, wie ein fehlendes Semikolon oder eine Klammer an der falschen Stelle. Dann kompilieren sie es noch einmal und es gibt immer noch einen Fehler, es ist etwas anderes. Sie haben einen Variablennamen beim zweiten Mal anders geschrieben. Und so weiter. Also fragen sie einen Freund oder Tutor oder jemanden um Hilfe und sie können direkt antworten: "Oh, füge das einfach hinzu und dann wird es funktionieren." Ihre Erfahrung ist also, dass das Programmieren ein bisschen "mysteriös" ist.
Das ist ein Bereich als Tutor, in dem Sie viel Raum haben, um zu helfen. Abhängig von ihrem Frustlevel habe ich möglicherweise unterschiedliche Ansätze, um herauszufinden, warum ihr Code nicht funktioniert. Wenn sie es irgendwie verstehen, gebe ich ihnen vielleicht Tipps und versuche ihnen dabei zu helfen, es selbst herauszufinden. Aber wenn sie gerade am Ende ihres Seils stehen und bereit sind, frustriert aufzugeben, gebe ich ihnen oft ein paar kostenlose Antworten und versuche dann, ihnen Fragen wie "Verstehst du, warum diese Änderung dein Programm repariert hat?" Zu stellen ? "
Für einige Schüler, insbesondere für Nicht-Hauptschüler, fehlt möglicherweise die methodische Liebe zum Detail, um ein guter Programmierer zu sein oder Spaß am Programmieren zu haben. Sie können sie durch Strategien in der Hand halten, damit sie auf die Details achten und methodisch genug sind, um die Probleme zu lösen, auch wenn es eine Herausforderung für sie ist.
Aber anal-remanent, dass die Schüler ihren Code "richtig" einrücken - so oft verursachen beginnende Programmierer Probleme mit der Verschachtelung und dem Gültigkeitsbereich, weil sie nicht passende geschweifte Klammern oder ähnliches haben, weil sie nicht darauf achten, was unter was verschachtelt ist. Geben Sie ihnen eine Checkliste mit "Dinge, die überprüft werden müssen, wenn Ihr Programm nicht kompiliert werden kann", indem Sie den gesamten Code richtig einrücken und sicherstellen, dass die geschweiften Klammern übereinstimmen. Stellen Sie sicher, dass alle Zeilen in Semikolons enden, insbesondere um die Zeilennummer, in der der erste Fehler angezeigt wird nach oben usw.
Bringen Sie ihnen bei, früh zu kompilieren und häufig zu kompilieren. Schreiben Sie den minimalen Skelettcode (sagen wir Hallo Welt), kompilieren / testen Sie. Fügen Sie ein paar Zeilen hinzu und kompilieren Sie erneut. Es ist viel einfacher, Fehler zu finden, wenn Sie nur einen kleinen Eimer mit Änderungen betrachten, nicht einen großen.
Helfen Sie ihnen zu lernen, wie Sie ein Problem in kleinere lösbare Probleme aufteilen können. Dies ist dasselbe, was wir als professionelle Programmierer tun, um viel schwierigere Probleme zu lösen, die wir nicht lösen können. Sie zerlegen es so lange in Stücke, bis Sie zu etwas gelangen, das Sie entweder zu lösen wissen oder das Sie erforschen können, um zu lernen, wie man löst. "Welche Schritte müssten Sie unternehmen, um zu einer funktionierenden Lösung zu gelangen?" Nun, zuerst brauchst du einen Skelettcode (Hallo Welt). Wissen Sie, wie das geht? Ja, großartig. Wenn wir fertig sind, können Sie damit beginnen! Dann muss es eine Datei als Eingabe lesen. Erinnerst du dich daran, in Kapitel 4 darüber gelesen zu haben? Nicht wirklich? Warum siehst du dir das nicht an, nachdem du die Welt zum Laufen gebracht hast, und sieh dir an, wie weit du davon entfernt bist, das zum Laufen zu bringen, und ruf mich dann zurück und ich ' Ich werde dir noch weiter helfen, wenn du feststeckst. In den ersten Fällen müssen Sie möglicherweise nur eine nummerierte Liste der Schritte erstellen, die zur Lösung des Problems erforderlich sind, damit sie anhand eines Beispiels lernen können, wie das Problem aufgelöst wird.
Wenn sie etwas, aber nicht das gesamte Material im Unterricht erhalten, ermutigen Sie sie, Fragen im Unterricht zu stellen, da neun von zehn Schülern nicht die einzigen sind, die das nicht verstehen, und der Professor wahrscheinlich nur etwas Wichtiges beschönigt hat.
Wenn sie "Stunden" damit verbringen, auf einen Fehler zu starren, es aber nicht herauszufinden, ist das eine Verschwendung ihrer Zeit, sie lernen nicht viel daraus. Oft sind Fehler Einsichtsprobleme, und es ist eine Frage der richtigen Einsicht, um sie zu lösen, und sie haben möglicherweise kein Talent für diese Art von Problemen. Schlagen Sie andere allgemeine Vorgehensweisen vor, wenn Sie nicht weiterkommen: Bitten Sie einen anderen Freund in der Klasse um Hilfe (lernen Sie gegebenenfalls einige Klassenkameraden kennen), beginnen Sie die Hausaufgaben frühzeitig, damit er Zeit zum Stoppen hat, und treten Sie später ein Fragen Sie während der Öffnungszeiten im Tutorlabor nach oder gehen Sie zur Sprechstunde des Professors. Wenn sie an Cramming gewöhnt sind, was sich gut für Auswendiglernen eignet, stoßen sie auf eine Wand der Frustration, wenn sie Es geht bei der Programmierung mehr um Problemlösung als um das Auswendiglernen. Zeigen Sie ihnen, wie sie Syntaxbeispiele aus ihrem Lehrbuch, Stapelüberlauf usw. nachschlagen können. Ermutigen Sie sie, eine Frage in einem privaten Fragenforum zu stellen, falls vorhanden.
Bringen Sie ihnen bei, wie sie eingrenzen können, wo der Code nicht mehr funktioniert. Kommentiere Sachen aus, bis du zu etwas zurückkommst, das läuft, und füge dann langsam Sachen hinzu, bis du wieder diesen Segfault bekommst.
Viele dieser Ideen könnten in Handzettel umgewandelt werden, wenn sie häufig auftauchen. Strategien sind normalerweise der Teil, den Professoren beschönigen - sie verbringen ihre Zeit mit der Syntax, der Semantik des Schreibens von Loops, Arrays, I / O usw. Aber nicht genug Zeit damit, was ich mache, wenn ich es versuche um meinen Code auszuführen und er kompiliert einfach nicht oder stürzt bei mir ab? "
Wenn es um konzeptionelle Dinge geht, insbesondere um Grundlagen wie "Was ist eine Variable?" Oder "Was ist eine Schleife?" Wenn sie dies nicht verstehen, können sie nicht mit dem Rest des Kurses mithalten. In einem vorlesungsbasierten Kurs hat der Professor möglicherweise nicht die Zeit, jede Frage zu beantworten oder zu helfen, dass die Glühbirne für jeden einzelnen Schüler ausgeht. Und das ist ein Grund, warum Tutoren so wichtig sind, um Programmieren zu lernen. Sie benötigen möglicherweise individuelle Anweisungen mit zusätzlichen Analogien, um ein bestimmtes Thema konkretisieren zu können.
Da Sie in C ++ unterrichten, stelle ich mir vor, dass der Unterricht ein abstraktes Thema ist, für das einige Schüler Schwierigkeiten haben, es zu "verstehen". Oft wird die Abstraktion von Klassen anhand von Beispielen gelehrt, die einem zufälligen Objekt der realen Welt entsprechen, wie beispielsweise einem "Geldautomaten", und es werden Analogien zum Objekt der realen Welt hergestellt. Möglicherweise verfügen Sie über Variablen, mit denen Sie verfolgen können, wie viel Geld sich im Geld befindet, und über Methoden, die Regeln ähneln, die dem Geldautomaten mitteilen, wie er auf bestimmte Bedingungen usw. reagieren soll und andere Schüler verstehen einen anderen besser.
Zeichne wann immer möglich Bilder für sie. Wie ein Sequenzdiagramm dessen, was im Laufe der Zeit passiert, damit sie das Gesamtbild dessen sehen, was der von ihnen geschriebene Code tut. Der Benutzer klickt auf diese Schaltfläche. Dann sollte das Programm mit x, y und z antworten. Zeichnen Sie ein Array wie ein Bündel von Postfächern bei der Post, die jeweils nur eine Nummer enthalten können, sowie Zeiger wie Pfeile, die auf die "Adresse" auf der Vorderseite des Postfachs zeigen. Etc.