Ich unterrichtete Einführungsprogrammierung auf College-Ebene. Es war ein Brot-und-Butter-Kurs, die ganze Fakultät hat es gemacht, und ich denke, wir haben es ganz gut gemacht. Wir folgten einem gemeinsamen Text und hatten gemeinsame Prüfungen, aber wir hatten jeweils unsere eigene Unterrichtsmethode, die funktionierte. Es ist schon lange her, aber gelegentlich kann ich einem Kind das Programmieren beibringen, und das ganze Bild ist ungefähr gleich.
Ich beginne ganz unten, so konkret wie möglich. Was die Schüler wissen, ist eine Struktur. Sie haben bereits viele Konzepte. Darauf aufbauend baue ich weitere Konzepte auf und beschneide Konzepte, die möglicherweise kontraproduktiv sind. Gleichzeitig bringe ich sie zum Lernen .
Ich hatte einen kleinen Computer mit einem Intel 8008-Chip, einem EPROM und einigen Schaltkreisen gebaut. Ich hatte es so programmiert, dass es ein kleines Duett spielt, wenn der I / O-Chip mit ein paar Lautsprechern verbunden war. Ich würde erklären, wie das kleine Programm funktioniert, mit einer inneren Schleife, um einen Zähler herunterzuzählen. Das wäre eine Verzögerung. Dann würde es das Ausgangsbit umschalten und es erneut tun. Es würde das für eine Weile tun und dann zu einer anderen Verzögerung wechseln, eine andere Tonhöhe geben und so weiter. Der Speicherchip hatte einen kleinen Timer, und wenn ich eine Kondensatorleitung unter einen der Timereingänge steckte, lief das Programm sehr langsam . Die Klasse hörte die Lautsprecher klicken, klicken, klicken ... Ich wollte, dass die Klasse verstand, dass der Computer Schritt für Schritt sehr einfache Dinge tat. Dann würde ich die Kondensatorleitung abnehmen und die "Musik" würde losgehen. (Beifall)
Dann hatte ich einen Simulator für einen sehr einfachen Dezimalcomputer mit 1000 Speicherplätzen gebaut, von denen jeder eine 4-stellige Dezimalzahl mit Vorzeichen enthielt. Es gab sehr einfache Opcodes wie "Add to Accumulator", "Jump If Negative" und so weiter. Ich würde sie kleine Programme in dieser "Maschinensprache" schreiben lassen, wie das Hinzufügen von zwei Zahlen oder das Aufaddieren einer Liste von Zahlen. Dann könnten sie zusehen, wie es in einem Schritt funktioniert, oder die Eingabetaste gedrückt halten, um zu sehen, wie es "schnell" läuft.
Ziel war es, das Konzept zu etablieren, dass Computer nur eine sehr kleine Anzahl von verschiedenen Grundoperationen ausführen können, und zwar einzeln. Dies soll dem Eindruck entgegenwirken, dass Computer kompliziert sind und alles zur gleichen Zeit erledigt werden.
Von da an programmierten wir in einer "echten" Sprache (BASIC :), angefangen mit sehr einfachen, aber interessanten Programmen, über Bedingungen, Schleifen, Arrays, Dateien, Zusammenführen und so weiter. Das Ziel war es, eine ausreichende Anzahl von Fähigkeiten bereitzustellen, damit sie ein Projekt ihrer Wahl übernehmen können, da dies das einzige ist, was das Programmieren interessant macht - die Verwendung, für die Sie es einsetzen können. Ich würde einige Ideen für Projekte rausschmeißen, und dann würden sie es von dort nehmen. Ich würde um schriftliche Ideen und dann um Fortschrittsberichte bitten, damit sie nicht auf die letzte Minute verschoben werden und dann in Panik geraten. Ich denke, die Projekte waren der beste Teil, weil sie aus eigener Kraft lernten.
Diese anfängliche Grundlage für ein sehr konkretes Verständnis dessen, was Computer tun, erleichterte das spätere Unterrichten von Konzepten erheblich, da es sich ansonsten um echte Geschwindigkeitsschwankungen wie Arrays oder (in einem späteren Kurs) Zeiger handelte. Wir neigen dazu, das Konzept der "Abstraktion" als dieses wunderbare Ding zu verherrlichen, aber es muss auf einem konkreten Fundament gebaut werden, nicht auf Luft.