Programmieren
Bei der Definition des Programmierens kann zwischen einem engeren und weiteren Begriffsverständnis unterschieden werden. Thuné & Eckerdal (2009) unterscheiden daher fünf unterschiedliche Arten, wie Programmieren wahrgenommen werden kann. Die Wahrnehmungsweisen steigern sich dabei dahingehend, dass das Verständnis von Programmieren schrittweise immer weiter gefasst wird. Das wohl engste Verständnis von Programmieren ist das Nutzen einer Programmiersprache, um Programmtexte zu schreiben. Weiter kann Programmieren als eine Denkweise gesehen werden, die Anweisungen in einer Programmiersprache so zueinander in Beziehung setzt, dass sie bei der Ausführung des Programms geschehen. Darüber hinaus kann Programmieren als Herstellung von Computerprogrammen, wie sie im täglichen Leben vorkommen, verstanden werden. Ein noch weiteres Begriffsverständnis wird dadurch definiert, dass zusätzlich zum oben Beschriebenen, Computerprogrammierung als Argumentationsmethode gesehen wird, die eine Problemlösung ermöglicht. Das weiteste Begriffsverständnis sieht letztlich das Programmieren als eine Art des Denkens, um Probleme zu lösen, die zur Erstellung von Computerprogrammen führen, wie sie im täglichen Leben vorkommen. Zusätzlich wird Programmieren als eine Fertigkeit wahrgenommen, die außerhalb des Programmierkurses und für andere Zwecke als die Computerprogrammierung eingesetzt werden kann.
Definitionen von Programmierung
In der Literatur gibt es einige Definitionen von Programmierung, welche einander z.T. ergänzen und z.T. widersprechen. Hier sind einige aufgeführt
Programmierung als präzise Kommunikation zwischen Menschen
Matthias Felleisen sieht Programmierung als den Prozess, Code zu schreiben. Code, nach seiner Auffassung, ist ein Stück Information, welches auf möglichst präzise Weise Ideen zwischen Menschen kommuniziert. Daraus folgt unmittelbar der Anspruch, für jedes Feld der Expertise eine Programmiersprache zu haben, welche die Ideen aus dem jeweiligen Feld möglichst einfach in hoher Präzision darstellen kann. Wenn Programmierung also primär als Kommunikation zwischen Menschen gesehen wird, ist die Wahl (oder Entwicklung) der verwendeten Programmiersprache von zentraler Bedeutung. <ref>Felleisen, M.; ACM. 2018. A Programmable Programming Language. CACM 2018. https://www.youtube.com/watch?v=91hynuuM_As</ref>
Programmierung als Prozess mit Blick auf das Endprodukt
Programmierung wird von einigen Expert:innen als ein Prozess gesehen, in dem einer Maschine Anweisungen gegeben werden, welche zu einem späteren Zeitpunkt oder wiederholt auszuführen sind<ref>Alan F. Blackwell. 2002. First Steps in Programming: A Rationale for Attention Investment Models. In Proceedings of the IEEE 2002 Symposia on Human Centric Computing Languages and Environments (HCC'02) (HCC '02). IEEE Computer Society, Washington, DC, USA</ref><ref name=":0">Schulte, Carsten. 2013. Reflections on the role of Programming in Primary and Secondary Computing Education. https://panda.uni-paderborn.de/pluginfile.php/1835874/mod_resource/content/2/Schulte_2013_Reflections%20on%20the%20role%20of%20programming%20in%20primary%20and%20secondary%20computing%20education.pdf</ref>. Eine Zusammenfassung solcher Anweisungen zu einer Abfolge aus Eingabe, Verarbeitung, und Ausgabe wird auch "Programm" genannt. Manche Definitionen enthalten des Weiteren, dass die Eingabe variabel sein kann, was z.B. das Einstellen einer Mikrowelle oder das Verwenden von Markdown aus der Definition von Programmierung ausschließt - nicht aber das Programmieren von Office-Skripten<ref name=":0" />.
Diese Definition von Programmierung beinhaltet auch den Prozess, von einer Idee angefangen zu einem Endprodukt zu gelangen, welches die gewünschte automatisierte Funktion erfüllt. Dazu muss eine programmierende Person u.A. Komplexität abstrahieren und in einem kreativen Prozess neue Lösungen suchen und finden.
Ansätze zum Unterrichten von Programmierung
PRIMM
PRIMM ist ein Ansatz zur Unterrichtung von Programmierung in fünf Schritten: Predict, Run, Investigate, Modify, Make<ref>Sentance, S.; Waite, J.; Kallia, M. 2019. Teaching computer programming with PRIMM: a sociocultural perspective. https://www.tandfonline.com/doi/full/10.1080/08993408.2019.1608781</ref>. Es hat eine empirisch nachgewiesene Effektstärke von r=0.13 auf die Leistungen in Programmier-Tests.
Predict & Run
Im ersten Schritt geht es darum, dass Lernende vorhersagen, was ein Programmcode tun wird, wenn er ausgeführt wird. Nach der vollständigen Vorhersage werden die Vorhersagen unterschiedlicher Lernender miteinander verglichen und diskutiert. Erst dann wird der Code ausgeführt und das tatsächliche Ergebnis beobachtet.
Investigate
Im Investigate-Schritt bekommen die Lernenden Fragen gestellt, welche die Effekte einzelner Code-Teile abfragen. Das Beantworten der Fragen sollte in der Form von Diskussionen stattfinden, welche zwischen den Lernenden geführt werden. Damit kann u.A. auch das Vokabular zum Beschreiben von Code trainiert werden.
Um geeignete Fragen zu stellen, kann z.B. das Block-Modell verwendet werden. So können zuerst Fragen zu nicht-intuitiven Atomen, danach zu Blöcken, und schließlich zu Relationen und dem ganzen Programm gestellt werden.
Modify & Make
Zuletzt geht es darum, den Lernenden den Schritt vom Lesen und Verstehen von Code zum Schreiben von Code zu ermöglichen. Dazu werden den Lernenden Aufgaben gestellt, in denen sie ein bereits fertiges Programm modifizieren müssen, um z.B. seine Funktionalität zu ändern oder einen Bug zu fixen. Diese Aufgaben werden zunehmend umfangreicher, bis die Lernenden schließlich Aufgaben bekommen, in denen sie ein vorgegebenes Problem mit komplett neuem Code lösen müssen.
Strategien zum Gestalten von Einsteigerkursen Programmierung (Merrienboer et al.)
Experten-Ansatz
Spiral-Ansatz
Lese-Ansatz
STREAM
Schwierigkeiten von und Strategien für das Unterrichten von Programmierung
<references group="Caspersen, Michael E., 2017 - Teaching Programming" />