Ein Unterrichtsbeispiel davon ist in diesem Video bei 1:09:56 zu sehen.
Ein Unterrichtsbeispiel davon ist in diesem Video bei 1:09:56 zu sehen.
Ein Computerprogramm zu schreiben umfasst verschiedene Schritte: das Vorhaben planen, die Anweisungen „kodieren“ und testen, etwaige Fehler ausfindig machen und ggf. das Programm so abändern, dass es richtig funktioniert. Bei diesen Aktivitäten erkunden Schüler eine einfache Programmiersprache, indem sie verschiedene Rollen annehmen, um diese Elemente des Programmierens deutlich zu machen.
Dies ist nicht völlig wirklichkeitsfremd. Die meisten umfangreichen Programme werden von einem aus mehreren Personen bestehenden Team geschrieben, wobei die Rollen des Entwerfens, des Programmierens und des Testens oftmals voneinander getrennt werden. Programme werden erstellt, wenn es eine Problemstellung zu lösen gilt, um anderen Menschen zu helfen, ihr Leben zu vereinfachen. Die Leute, die diese Programme mithilfe einer Programmiersprache schreiben, werden Programmierer (eventuell auch Entwickler oder Softwareentwickler) genannt. Sie schreiben die Anweisungen bzw. Befehle, um dem Computer zu sagen, was er zu tun hat. Um sicherzustellen, dass der Code auch genau so funktioniert, wie er für die vorgesehenen Benutzer funktionieren soll, muss jemand das Programm testen und dem Programmierer zurückmelden, was berichtigt werden muss und warum. Das sind die Tester. Bei kleineren Projekten wird das Testen für gewöhnlich von der Person übernommen, die das Programm geschrieben hat. Bei größeren Programmen wird der Testvorgang jedoch oftmals separat ausgeführt, teilweise, um die Arbeitslast zu verteilen, mitunter aber auch, da Programmierer eventuell mit dem Programm so vertraut sind, dass sie es nicht aus der Sicht eines Benutzers betrachten können.
Bei den Kidbots-Aktivitäten findet das Programmieren getrennt vom Testen statt. Zum einen, um zu vermeiden, dass die Programmierer ihr Programm hastig abändern, zum anderen sollen die Schüler dabei unterstützt werden, besser zu verstehen, dass es beim Programmieren darum geht, zusammenzuarbeiten, die gewünschten Ergebnisse gründlich zu durchdenken und Problemstellungen gemeinsam zu lösen.
Programmieren oder „Kodieren“ findet statt, wenn jemand (ein Programmierer) Anweisungen in einer Programmiersprache eingibt, sodass der Computer weiß, was er zu tun hat (Programmierer beschäftigen sich auch mit vielen anderen Dingen). Zu den für jüngere Schüler häufig verwendeten Programmiersprachen gehören Scratch, ScratchJr, Python, Snap!, Blockly und ein paar ältere Programmiersprachen wie Basic und Logo (die auch heute noch beliebt sind).
Ein Programmierer zu sein bedeutet nicht nur, die einzelnen Befehle einer Programmiersprache zu kennen, sondern auch zu wissen, wie die Funktionsbausteine, wie beispielsweise Schleifen, IF-Anweisungen, Variablen, Eingabe und Ausgabe, so zusammengesetzt werden, dass der Computer die vorgesehenen Aktionen ausführt. Dazu gehört den allgemeinen Prozess zur Erreichung des Ziels auszuarbeiten, diesen Prozess in einer bestimmten Programmiersprache darzustellen und sicherzustellen, dass die beabsichtigten Vorgänge ausgeführt werden.
Zwischen Mathematik und Programmieren bestehen enge Zusammenhänge. Gute Programmierer müssen über ein solides mathematisches Grundwissen verfügen, da ein Programm im Grunde genommen eine mathematische Formel ist und die Erstellung der richtigen Programmstruktur ausgeprägtes logisches Denken erfordert.
Sequentielle Anweisungen zu erteilen ist ein wichtiger Bestandteil aller Programmiersprachen. Die Kidbots-Aktivität schafft daher die Voraussetzungen dafür, konventionellere Sprache zu verstehen. Zudem wird die Fähigkeit trainiert, Programmabläufe vorherzusagen, Fehlerstellen zu ermitteln, und zu verstehen, dass es mehrere richtige Möglichkeiten gibt, ein Lösungskonzept zu programmieren.
Sequentielle Anweisungen erteilen zu können, gut mit anderen zusammenzuarbeiten und zu verstehen, wie eine große Problemstellung in kleine Teile zerlegt wird und diese Teile dann nacheinander angegangen werden, sind praktische Fertigkeiten, die sich von der Computerprogrammierung auf andere Aufgaben der Schüler übertragen lassen.
Was war hinsichtlich der durch das Unterrichten dieser Einheit erzielten Lernerfolge am überraschendsten?
Welche der Schüler sind bei den Aufgaben sehr systematisch vorgegangen?
Welche Schüler sind bei den Aktivitäten sehr detailliert vorgegangen?
Wie würde ich das Unterrichten dieser Einheit anders gestalten?
Aus allen Lektionen ergeben sich Verbindungen zu informatischem Denken. Nachstehend sind ein paar allgemeine Verbindungen aufgeführt, die diesen Inhalt betreffen.
Teaching computational thinking through CSUnplugged activities supports students to learn how to describe a problem, identify what are the important details they need to solve this problem, break it down into small logical steps so that they can then create a process which solves the problem, and then evaluate this process. These skills are transferable to any other curriculum area, but are particularly relevant to developing digital systems and solving problems using the capabilities of computers.
Diese informatischen Denkkonzepte sind alle miteinander verbunden und stützen sich gegenseitig. Insoweit möchten wir jedoch anmerken, dass nicht alle Aspekte des informatischen Denkens in jeder Unterrichtseinheit oder Lektion vorkommen. Wir haben jeweils die für Sie wichtigen Verbindungen hervorgehoben, um Ihre Schüler in Aktion zu beobachten. Unser Artikel zu informatischem Denken enthält weitere Hintergrundinformationen dazu, wie wir informatisches Denken definieren.
Im Rahmen dieser Unterrichtseinheit werden die Schüler Algorithmen erstellen, um den Bot „zu programmieren“, sich auf dem Gitterfeld fortzubewegen. Das algorithmische Denken konzentriert sich darauf, dass Schüler lernen, einen Anweisungssatz zur Ausführung einer Aufgabe in die richtige Reihenfolge zu bringen, in ihren Algorithmen bestimmte Arten von Anweisungen zu verwenden und gleichwertige Möglichkeiten zu finden, um dasselbe Ergebnis zu erreichen.
Die von den Schüler bei diesen Aktivitäten vorgenommene „Programmierung“ ist eine abstrakte Version der Programmierung, die wir auf Computern anhand von konventionellen Programmiersprachen vornehmen. In dieser Unterrichtseinheit verwenden die Schüler einen kleinen Satz sehr einfacher Anweisungen als Programmiersprache, schreiben ihre Programme in einfachen Worten und geben ihre Anweisungen mündlich an den Bot weiter. Auf diese Weise lernen Schüler, wie beim Programmieren Abläufe gesteuert werden, und können das Erstellen von Algorithmen üben, ohne zunächst eine Programmiersprache lernen zu müssen oder technische Terminologie und Werkzeuge zu benötigen.
Auch die Auswahl von Befehlen für die Programmiersprache veranschaulicht die Anwendung von Abstraktion (wie beispielsweise ein „L“ oder einen Pfeil zu verwenden, um den Befehl „Links“ darzustellen).
In Lektion 3 wenden die Schüler noch eine weitere Ebene der Abstraktion an, wenn einige Anweisungen innerhalb einer Schleife zusammengefasst werden.
Jede Aktivität dieser Unterrichtseinheit gibt den Schülern Gelegenheit, Dekomposition zu üben, während sie die gewünschten Bewegungen des Bot in einfache und spezifische Anweisungen zerlegen. Zudem werden sie dazu animiert, ihre Programme schrittweise zu entwickeln, indem sie die ersten paar Schritte schreiben, diese testen und dann das Programm um weitere Schritte ergänzen, anstatt zu versuchen, die gesamte Aufgabenstellung auf einmal zu lösen.
Wenn die Schüler ihre Algorithmen und Programme in dieser Unterrichtseinheit schreiben, werden sich viele unterschiedliche Muster in der Abfolge der Anweisungen ergeben. Gegebenenfalls wird der Bot anhand von Befehlsgruppen angewiesen, sich in eine bestimmte Richtung zu bewegen, wie beispielsweise ein Quadrat vorwärts schreiten, und wenn die Schüler diese Muster erkennen, können sie diese Befehlsgruppen wiederverwenden, wenn der Bot dieselbe Bewegung später erneut ausführen soll.
Wenn die Schüler ihre Programme schreiben und testen, werden sie diese auch auswerten, um über die wichtigste Frage beim Programmieren, nämlich „Hat das Programm funktioniert?“, zu befinden. Beim Testen ihrer Programme können sie ermitteln, ob diese ihre Aufgabe erfüllt haben oder nicht.
Es wird fast immer mehrere Programme geben, die die Schüler zur Ausführung einer Aufgabe einsetzen können, allerdings werden manche effizienter sein als andere, da sie weniger Schritte anwenden. Die Schüler können diese vergleichen und erläutern, warum sie denken, dass bestimmte Programme besser sind als andere.
Auch verschiedene Programmiersprachen können verglichen werden. Wir untersuchen, die Anzahl der verfügbaren Anweisungen zu verringern – in manchen Fällen können diesselben Ergebnisse erzielt werden (die Sprache hat die gleiche Verarbeitungsfähigkeit), unter Umständen sind jedoch die Programme länger.
Die Schüler werden über die gesamte Unterrichtseinheit hinweg kontinuierlich ihr logisches Denkvermögen anwenden. Beim Planen ihrer Algorithmen müssen sie sich Schritt für Schritt überlegen, was bei jeder Anweisung geschehen wird, wie beispielsweise „an diesem Punkt steht die Figur in diese Richtung, wenn ich also dann zweimal sage vorwärts bewegen, wird sie auf diesem Quadrat ankommen“. Darüber hinaus müssen sie beim Debugging nicht ordnungsgemäß funktionierender Programme ebenfalls logisch vorgehen. Sie müssen sich jede Anweisung genau ansehen und genau bestimmen, wo etwas schiefläuft und wie sie den Fehler beseitigen können, damit sich das Programm erwartungsgemäß verhält.