Programmieren: Unterschied zwischen den Versionen
(Definitionen von Programmierung ergänzt; PRIMM ergänzt) |
(Stream ergänzt) |
||
Zeile 1: | Zeile 1: | ||
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. | 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 == | ==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 | 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 === | ===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> | 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 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" />. | 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" />. | ||
Zeile 17: | Zeile 17: | ||
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. | 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 ==== | ====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. | 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 ==== | ====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. | 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. | 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 ==== | ====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. | 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. | ||
Zeile 37: | Zeile 37: | ||
===STREAM=== | ===STREAM=== | ||
STREAM ist ein Programmierprozess, welcher das Ziel hat, einfach genug zu sein, um in einem Einsteigerkurs neben dem Programmieren selbst unterrichtet zu werden. Dabei soll in möglichst wenigen, einfach nachvollziehbaren Schritten ein erstes lauffähiges Programm entstehen, um die ersten Erfolgserlebnisse so schnell wie möglich zu erzielen. STREAM teilt sich auf in die Schritte Stubs, Tests, Representations, Evaluation, Attributes, und Methods. STREAM in Reinform setzt eine objektorientierte Programmiersprache voraus, kann aber auch ohne viel Aufwand auf funktionale oder hybride Programmiersprachen übertragen werden. | |||
==== Stubs ==== | |||
Im ersten Schritt erstellen die Schüler:innen ein sogenanntes "laufendes Skelett", d.h. ein Programm, welches zwar kompiliert, aber noch nichts tut. Dazu erstellen sie nur eine Klasse mit ihren gewünschten Methoden allerdings ohne Übergabeparameter. Die Methodenrümpfe bleiben ebenfalls leer, mit Ausnahme von einfachen Rückgabewerten, damit das Programm kompiliert (z.B. bei einer Methode vom Rückgabetypen int die Zeile "return 0;"). | |||
==== Tests ==== | |||
Im zweiten Schritt werden Testfälle festgelegt. Diese stellen eine Konkretisierung der Anforderungen an jede Methode dar. Dies geschießt im Anfängerkurs üblicherweise durch die Lehrkraft, die diese lediglich austeilt. Viele IDEs bieten dafür bereits integrierte Tools, in die lediglich eine CSV-Datei importiert werden muss. | |||
==== Representations ==== | |||
Im dritten Schritt denken sich die Schüler:innen mindestens zwei, ggf. auch mehrere mögliche Repräsentationen für die Eingabeparameter der Methoden sowie für die Attribute der Klasse aus. Z.B. könnte das Datum in einer Datums-Klasse ähnlich wie bei der UNIX-Time in Form einer einzelnen Zahl gespeichert sein, welche die Tage seit einem festgelegten Anfangstag bezeichnet; oder sie könnten in der Form von drei separaten Zahlen abgelegt sein, welche den Tag, den Monat, und das Jahr darstellen. | |||
==== Evaluation ==== | |||
Nachdem die Schüler:innen sich die Repräsentationen ausgedacht haben, geht es darum, sie zu vergleichen. Dazu wird für jedes Vergleichskriterium eine sogenannte "Representation Evaluation Matrix" (REM) erstellt, in welcher jede Methode, die implementiert werden soll, auf Basis des Kriteriums bewertet wird. Für einen Einsteigerkurs ist das einzig notwendige Kriterium der Aufwand, die Methode bei gegebener Repräsentation zu implementieren; bei Anwendung des Verfahrens auf fortgeschrittenem Level würden sich u.A. auch Laufzeiteffizienz als Vergleichskriterium anbieten. | |||
Im Beispeil einer Datums-Klasse könnte eine REM zum Implementationsaufwand z.B. so aussehen: | |||
==== Attributes ==== | |||
Bevor im letzten Schritt die Methoden implementiert werden, müssen nun die Attribute angelegt und an geeigneter Stelle initialisiert werden. Die Attribute sollten dabei direkt mit ihrer jeweiligen Funktion und u.U. Constraints annotiert werden. Z.B. sollte bei der Datums-Klasse - bei einer Repräsentation in Form von drei separaten Variablen für Tag, Monat, Jahr - der Monat mit "1 <= month <= 12" annotiert werden. | |||
==== Methods ==== | |||
Der letzte Schritt ist der, in dem die Methoden tatsächlich implementiert werden. Dabei ist es wichtig, dass immer nur eine Methode auf einmal implementiert und dann getestet wird, bevor die Schüler:innen zur nächsten Methode fortschreiten. | |||
Beim implementieren einer Methode gilt außerdem das Mañana-Prinzip, welches besagt: "Falls du beim Implementieren das Gefühl hast, du könntest eine Hilfsmethode gebrauchen, implementiere deine Methode so als gäbe es die Hilfsmethode bereits; implementiere die Hilfsmethode später." Diese Hilfsmethoden müssen, damit das Programm weiterhin kompiliert, immer direkt als Stubs erstellt werden (s. Schritt 1). | |||
===Schwierigkeiten von und Strategien für das Unterrichten von Programmierung=== | ===Schwierigkeiten von und Strategien für das Unterrichten von Programmierung=== | ||
Zeile 45: | Zeile 68: | ||
[[Kategorie:Glossar]] | [[Kategorie:Glossar]] | ||
[[Kategorie:Lehrinhalt]] | [[Kategorie:Lehrinhalt]] | ||
<references /> |
Version vom 1. Februar 2022, 20:39 Uhr
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
STREAM ist ein Programmierprozess, welcher das Ziel hat, einfach genug zu sein, um in einem Einsteigerkurs neben dem Programmieren selbst unterrichtet zu werden. Dabei soll in möglichst wenigen, einfach nachvollziehbaren Schritten ein erstes lauffähiges Programm entstehen, um die ersten Erfolgserlebnisse so schnell wie möglich zu erzielen. STREAM teilt sich auf in die Schritte Stubs, Tests, Representations, Evaluation, Attributes, und Methods. STREAM in Reinform setzt eine objektorientierte Programmiersprache voraus, kann aber auch ohne viel Aufwand auf funktionale oder hybride Programmiersprachen übertragen werden.
Stubs
Im ersten Schritt erstellen die Schüler:innen ein sogenanntes "laufendes Skelett", d.h. ein Programm, welches zwar kompiliert, aber noch nichts tut. Dazu erstellen sie nur eine Klasse mit ihren gewünschten Methoden allerdings ohne Übergabeparameter. Die Methodenrümpfe bleiben ebenfalls leer, mit Ausnahme von einfachen Rückgabewerten, damit das Programm kompiliert (z.B. bei einer Methode vom Rückgabetypen int die Zeile "return 0;").
Tests
Im zweiten Schritt werden Testfälle festgelegt. Diese stellen eine Konkretisierung der Anforderungen an jede Methode dar. Dies geschießt im Anfängerkurs üblicherweise durch die Lehrkraft, die diese lediglich austeilt. Viele IDEs bieten dafür bereits integrierte Tools, in die lediglich eine CSV-Datei importiert werden muss.
Representations
Im dritten Schritt denken sich die Schüler:innen mindestens zwei, ggf. auch mehrere mögliche Repräsentationen für die Eingabeparameter der Methoden sowie für die Attribute der Klasse aus. Z.B. könnte das Datum in einer Datums-Klasse ähnlich wie bei der UNIX-Time in Form einer einzelnen Zahl gespeichert sein, welche die Tage seit einem festgelegten Anfangstag bezeichnet; oder sie könnten in der Form von drei separaten Zahlen abgelegt sein, welche den Tag, den Monat, und das Jahr darstellen.
Evaluation
Nachdem die Schüler:innen sich die Repräsentationen ausgedacht haben, geht es darum, sie zu vergleichen. Dazu wird für jedes Vergleichskriterium eine sogenannte "Representation Evaluation Matrix" (REM) erstellt, in welcher jede Methode, die implementiert werden soll, auf Basis des Kriteriums bewertet wird. Für einen Einsteigerkurs ist das einzig notwendige Kriterium der Aufwand, die Methode bei gegebener Repräsentation zu implementieren; bei Anwendung des Verfahrens auf fortgeschrittenem Level würden sich u.A. auch Laufzeiteffizienz als Vergleichskriterium anbieten.
Im Beispeil einer Datums-Klasse könnte eine REM zum Implementationsaufwand z.B. so aussehen:
Attributes
Bevor im letzten Schritt die Methoden implementiert werden, müssen nun die Attribute angelegt und an geeigneter Stelle initialisiert werden. Die Attribute sollten dabei direkt mit ihrer jeweiligen Funktion und u.U. Constraints annotiert werden. Z.B. sollte bei der Datums-Klasse - bei einer Repräsentation in Form von drei separaten Variablen für Tag, Monat, Jahr - der Monat mit "1 <= month <= 12" annotiert werden.
Methods
Der letzte Schritt ist der, in dem die Methoden tatsächlich implementiert werden. Dabei ist es wichtig, dass immer nur eine Methode auf einmal implementiert und dann getestet wird, bevor die Schüler:innen zur nächsten Methode fortschreiten.
Beim implementieren einer Methode gilt außerdem das Mañana-Prinzip, welches besagt: "Falls du beim Implementieren das Gefühl hast, du könntest eine Hilfsmethode gebrauchen, implementiere deine Methode so als gäbe es die Hilfsmethode bereits; implementiere die Hilfsmethode später." Diese Hilfsmethoden müssen, damit das Programm weiterhin kompiliert, immer direkt als Stubs erstellt werden (s. Schritt 1).
Schwierigkeiten von und Strategien für das Unterrichten von Programmierung
<references group="Caspersen, Michael E., 2017 - Teaching Programming" /> <references />