Schwierigkeiten und Lernbarrieren beim Programmieren Lernen Andreas Lackner Andreas Oberdorfer ALPEN-ADRIA Universität Klagenfurt Klagenfurt, Österreich ALPEN-ADRIA Universität Klagenfurt Klagenfurt, Österreich [email protected] [email protected] ABSTRACT waren. Weiters behandeln wir die Frage, wo die Ursachen für diese Probleme liegen könnten und verwenden dafür Daten einer Umfrage unter Gymnasial-Informatiklehrern und -lehrerinnen die, während einer Tagung im März 2015, zu diesem Thema befragt wurden. Die Arbeit ist wie folgt aufgebaut. Nach dieser Einleitung folgt ein Kapitel über den theoretischen Hintergrund und Programmierkonzepte beziehungsweise Lernbarrieren. Danach wird auf ähnliche, bereits existierende Arbeiten verwiesen und deren Ergebnisse kurz erläutert. Als nächstes folgt die Beschreibung der Methoden, die für die qualitative Datenanalyse angewendet wurde und eine Übersicht über die Daten, welche für diese Studie gesammelt wurden. Den Hauptteil der Arbeit stellt die Auswertung und Analyse der Ergebnisse, der vorhin schon erwähnten Umfragen, zu konzeptuellen Problemen beim Programmieren Lernen von Studierenden beziehungsweise die Sicht der Lehrenden darauf, dar. Zum Schluss folgt noch ein zusammenfassender Überblick über die Auswertung. Jeder Person, die sich selbst nicht mit dem Programmieren beschäftigt, sieht diese Tätigkeit zumeist als hochkompliziert und sehr schwer erlernbar an. Dieses Paper beschäftigt sich nun mit den Fragestellungen, welche Konzepte beim Erlernen des Programmierens häufig als sehr schwer erlernbar angesehen werden und zusätzlich mit der Frage, woran dies aus Sicht von Lehrenden, liegen kann. Keywords Lernbarrieren, problematische Konzepte beim Programmieren Lernen 1. EINFÜHRUNG Jeder Student beziehungsweise Studentin an der Alpen-Adria Universität Klagenfurt der/die ein technisches Studium absolviert, muss die Lehrveranstaltung ”Einführung in die objektorientierte und strukturierte Programmierung” (kurz ESOP) besuchen. Dabei wird als Programmiersprache Java verwendet und der Kurs ist vom Aufbau her so konzipiert, dass wirklich keine Vorkenntnisse notwendig sind um den Kurs bestehen zu können. Trotzdem lässt das Verhältnis der Anmeldezahlen und die Anzahl der positiv abgeschlossenen Studenten beziehungsweise Studentinnen darauf schließen, dass es sich hierbei um eine Art Selektierungslehrveranstaltung handelt. Damit ist gemeint, dass durch eine solche Lehrveranstaltung ein Großteil der Studenten und Studentinnen aussortiert wird. Diese Zahlen bekommt jeder Studienanfänger und -anfängerin, oft sogar über die entsprechenden Studienrichtungen hinaus, innerhalb kürzester Zeit zu hören und damit entstehen bereits von vorn herein Abneigungen gegen das Programmieren beziehungsweise im speziellen gegen diese Lehrveranstaltung. Für dieses Paper sammelten wir Daten von Studenten und Studentinnen die diese, beziehungsweise die an der Technischen Universität München äquivalent angebotene, Lehrveranstaltung besucht haben und stellten ihnen die Frage, welche Konzepte beim Programmieren Lernen sehr schwer erlernbar 2. THEORETISCHER HINTERGRUND Da in dieser Arbeit Konzepte, welche beim Erlernen des Programmierens zu Problem führen, im Vordergrund stehen, werden in diesem Abschnitt Definitionen aufgeführt, welche erklären, was unter einem Programmierkonzept zu verstehen ist. In weiterer Folge wird auf Lernbarrieren eingegangen. Im zweiten Teil dieses Abschnitts wird deshalb beschrieben, was im Zuge dieser Arbeit unter Lernbarrieren zu verstehen ist und woher deren Definitionen stammen. 2.1 Programmierkonzepte Im Kontext der Programmierung darf man das Wort Konzept nicht immer gleichwertig verstehen, wie dies im Alltagsgebrauch der Fall ist. Aus dem lateinischen ”concipere” beziehungsweise ”concipio” abgeleitet, was soviel bedeutet wie ”erfassen”, ”formulieren”, meint hier ein Konzept eine ungefähre Planung, bei welcher die Details noch nicht genau geklärt und ausformuliert sind, es sich somit um die Rohfassung eines Plans handelt. [10] In der Programmierung kommen nämlich zwei unterschiedliche Bedeutungen bei der Verwendung des Wortes Konzept vor. Geht es um die Erstellung eines Programms, bedeutet dies, ebenso wie im alltäglichen Gebrauch, dass es sich bei einem solchen Konzept um eine grobe Planung für ein Programm handelt, bei welchem die genaue Implementierung der einzelnen Methoden noch nicht endgültig definiert wurde. Beispielsweise kann es sich dabei um ein einfaches Struk1 togramm in Form eines Nassi-Shneiderman-Diagramms [7] handeln oder aber auch um eine in Pseudo-Code verfasste Programmbeschreibung. Unter Pseudo-Code versteht man eine nicht für den Computer verwendbare Beschreibung eines Programmes, sondern eine Mischung aus leicht für den Menschen lesbarer Code, welcher jedoch bereits den zu verwendenden Algorithmus großteils beschreibt. In der Lernpsychologie beschäftigt man sich hauptsächlich mit den Vorgängen, die ablaufen, wenn etwas gelernt wird. Aus den unterschiedlichsten Gründen ist der umgekehrte Fall, also woran es liegt dass etwas nicht gelernt wird, mindestens genauso interessant. In diesem Fall spricht man von Lernbarrieren. Der dänische Lerntheoretiker Knud Illeris unterteilt in seinem Buch ”Lernen verstehen” [5] diese Barrieren in unterschiedliche Bereiche: Die zweite Bedeutung des Wortes Konzept im Kontext der Programmierung tritt auf, wenn es um die sprachspezifischen Eigenschaften einer Programmiersprache geht. Hier meinen Konzepte, welche Strukturen, hier sind sowohl Datenals auch Kontrollstrukturen gemeint, eine spezielle Programmiersprache unterstützt. Diese Konzepte hängen grundsätzlichen mit den Prinzipien zusammen, die bei der Entwicklung der Programmiersprache selbst ausgewählt wurden. Am Beispiel der Programmiersprache Java lauten diese Prinzipien wie folgt: Sie muss 1. Fehllernen: Vom Fehllernen wird gesprochen, wenn das gelernte nicht dem Vermittlungsziel des Lehrers entspricht. Dabei kann es sich um eine Folge von unzureichenden Vorkenntnissen, schlechter Kommunikation oder aber auch fehlender Konzentration handeln, also wenn dem Lernenden nicht klar ist, was gelernt werden soll beziehungsweise was genau von ihm verlangt wird. Meistens lässt sich diese Barriere aber leicht erkennen und entsprechend auch einfach abbauen. Umso wichtiger ist es, ein solches Fehllernen schnell zu erkennen und die Ursachen dafür frühzeitig zu beheben um nicht das ganze Wissenskonstrukt, welches sich der Lernende aufbaut, auf falschen Grundlagen beruht und sich dadurch die bereits vorhandenen Irrtümer weiter verbreitern und verfestigen. Bezogen auf die Informatik und dem Programmieren Lernen wäre hierzu ein Beispiel, dass ein Programm nicht die gewünschte Funktion besitzt, weil falsche Annahmen von Strukturen oder Befehlen zu entsprechend falscher Verwendung derselbigen führt. 1. ”einfach, objektorientiert und vertraut” 2. ”robust und sicher” 3. ”architekturneutral und plattformübergreifend” 4. ”hochperformant” ausführbar 5. ”interpretierbar, aufteilbar und dynamisch” sein. [9] Anhand dieser Prinzipien, wie zum Beispiel ”objektorientiert”, entstehen unterschiedliche Konzepte, die zum Teil nur für solche Programmiersprachen gültig sind, welche diese Eigenschaft der Objektorientierung gemeinsam haben. Andere hingegen, wie zum Beispiel das Konzept von Datenstrukturen, sind für beinahe alle Programmiersprachen gültig. Solche Konzepte unterscheiden sich abhängig von der verwendeten Programmierumgebung normalerweise nur in der Verwendung, damit ist die Syntax gemeint, die durch die verwendete Programmiersprache vorgegeben wird. 2. Abwehr gegen Lernen: Von einer Abwehr gegen das Lernen spricht man, wenn, meist sogar unbewusst, eine Abwehrhaltung gegenüber dem Lernen eingenommen wird. Grundsätzlich ist diese Abwehrhaltung zum Lernen schon von vornherein vorhanden, also noch bevor die Lernsituation überhaupt eingetroffen ist. Illeris verweist an dieser Stelle auf den deutschen Soziologen und Sozialpsychologen Thomas Leithäuser, der in seinem Buch ”Formen der Alltagsbewusstsein” [1] typische Abwehrmechanismen beschreibt. Einige typische davon sind hier nun anhand von Beispielen aufgelistet: Wenn im Informatikstudium, aber auch bereits in der Schule, von Programmierkonzepten gesprochen wird, dann geht es vorrangig um die letztere Bedeutung, also um programmiersprachen(un)abhängige Grundideen die beim Programmieren verwendet werden. (a) Reduktion: ”das kenn ich ja schon” (b) Harmonisierung: ”das ist gleich, wie damals das ...” Gängige Konzepte sind dabei Datentypen, Speicherverwaltung, Algorithmen, Rekursion und noch viele weitere, aber auch Bereiche die nur in bestimmten Programmiersprachen verwendet werden, wie zum Beispiel bei objektorientierten die Vererbung oder Polymorphie. Eine vollständige Liste würde hier bei weitem den Rahmen dieser Arbeit sprengen und daher beschränken wir uns auch nur auf diejenigen, die bei der Auswertung der Daten vorkamen, also in den Umfragen von den Teilnehmern genannten wurden. 2.2 (c) Verschiebung: ”damit habe ich nichts zu tun” (d) Nivellierung: ”es gibt ja eigentlich gar kein Problem” Starke Ausprägungen von solchen Blockaden können sich sogar bis hin zu Phobien entwickeln und sind dann entsprechend mit starken Angstzuständen verbunden. Solche Abwehrhaltungen werden hauptsächlich gegen drei Arten von Belastungen entwickelt. Als eine Art Schutzmechanismus um die schiere Unmenge an Informationen, die als Input aufgenommen werden, auch verarbeiten zu können. Zweitens gegen die ständigen Veränderungen die unsere Gesellschaft in immer kürzeren Zyklen durchläuft. Und schließlich bleibt noch der Aspekt in unsrer sogenannten Risikogesellschaft sein eigenes Leben selbst zu bestimmen. Lernbarrieren Für dieses Paper wurden nicht nur Daten analysiert die sich damit beschäftigen welche Konzepte in der Programmierung schwer zu erlernen sind, sondern auch damit wo hier die Ursachen liegen. 2 3. Ambivalenz: Tritt ein Lernprozess auf, der unter Umständen gesellschaftlich oder beruflich vorgeschrieben wird, letztendlich jedoch bewusst abgelehnt wird, dann spricht man von einer Ambivalenz. Oft tritt diese Lernbarriere bei Menschen ohne Perspektive auf, die jedoch zum Beispiel aufgrund von Arbeitslosigkeit entsprechende Kurse besuchen müssen. Ebenso findet man diese Art häufig bei immer denselben Lehrveranstaltungen einer Studienrichtung, deren Verwendung im späteren Berufsalltag als nicht notwendig und damit auch überflüssig erachtet wird. Wichtig ist es diese Ambivalenzen zu erkennen und deren Existenz zu akzeptieren. Dadurch entwickelt sich eine Art von Ambivalenztoleranz [2] und Konflikten wird nicht mehr ausgewichen. Ein Zurückziehen und Abkapseln würde jedoch zu einer Ambivalenzabwehr führen, die eine immer weitere Entfernung, der jedoch meist notwendigen Situation, führt und später nur mehr sehr schwer abgebaut beziehungsweise akzeptiert werden kann. dien mit den Ergebnissen unserer Auswertung auf Gemeinsamkeiten, beziehungsweise Unterschiede. 3.1 1. Programmausführung: Hier ist es wichtig eine korrekte Grundvorstellung der Ausführung eines Programmes zu haben. Das heißt, es muss verstanden werden, dass Programmzeilen sequenziell ausgeführt werden, das Verhalten des Programms von der aktuell ausgeführten Zeile abhängt und nicht von den darauffolgenden. Lernende neigen dazu zu glauben, dass bei der Ausführung alle Zeilen zeitgleich eine Rolle spielen und schreiben dem Computer eine Art Intelligenz zu, mit der er erahnen kann, was in den erst später ausgeführten Zeilen geschieht. 4. Widerstand gegen Lernen: Ein Widerstand gegen das Lernen kommt, im Gegensatz zur Abwehr gegen das Lernen, in Situationen und Kontexten vor, die als inakzeptabel eingestuft werden. Ein weiterer Unterschied ist eben, dass hier der Widerstand nicht schon von Anbeginn vorhanden ist, sondern erst in der Situation entsteht, wenn sich wie oben bereits beschrieben, ein das Individuum sich einer Sache gegenübersieht, die es nicht akzeptieren will. Als Beispiel lässt sich hier die Aggression und Wut eines Kindes aufführen, welches mit einer Situation nicht einverstanden ist und entsprechend reagiert. Ein Erwachsener wird in einer Situation, mit der nicht einverstanden ist, zum Beispiel die Abweisung bei einer Arbeitssuche, entweder akzeptieren und auf Ursache dafür vielleicht sogar bei seiner eigenen Person suchen oder er reagiert mit Erklärungsversuchen und Entschuldigungen und nimmt dadurch eine Abwehrhaltung ein. Diesen Abwehrcharakter findet man auch oft bei Schülern, die die Schuld, für ihr Versagen, in der Schule, auf den Gegenstand oder den Lehrer zurückführen. Solche Erklärungsmuster werden im Laufe der Zeit immer häufiger angewendet und letztendlich stehen diese einem zweckvollen Lernen und dem damit verbundenen erfolgreichen Ausbildungsabschluss im Wege. Um nochmalig auf den Unterschied zwischen Abwehr gegen Lernen und Widerstand zum Lernen zurückzukommen, lässt sich auch unter Widerstand beziehungsweise stillem Protest ein Lernerfolg erzielen, jedoch muss eine vorhandene Abwehr zuerst abgebaut werden, um zum Ziel zu kommen. 3. Master‘s Thesis von Teemu Sirkiä Eine Arbeit, die sich mit einer ähnlichen Themenstellung wie diese beschäftigt, ist die Master’s Thesis von Teemu Sirkiä, einem Absolventen der finnischen Aalto Universität. Der Titel der Arbeit lautet ”Recognizing Programming Misconceptions”. Im Zuge dieser Arbeit wurden Programmieranfänger beobachtet und es wurde versucht herauszufinden, welche Programmierkonzepte von Lernenden falsch verstanden werden und zu Problemen beim Erlernen einer Programmiersprache führen. Sirkiä fasst diese Konzepte zu Fehlvorstellungen zusammen und unterteilt diese in fünf Kategorien. 2. Variablen und Zuweisungen: Lernende verstehen oftmals nicht, dass Variablen zu jeder Zeit nur einen Wert beinhalten können und es daher wichtig ist Variablenzuweisungen in der richtigen Reihenfolge zu schreiben. 3. Programmablauf: Das Problem beim Ablauf von Programmen kann darin liegen, dass es zu Fehlvorstellungen bei der Ausführung kommt. Lernenden fällt es hier oft schwer, zu verstehen, dass immer die nächste Anweisung ausgeführt wird. Es kommt oft zur Fehlvorstellung, dass Anweisungen in einem Art Buffer gespeichert und dann auf einmal ausgeführt werden. Vor allem bei Schleifen kann es hier zu Problemen kommen, so entsteht die Fehlvorstellung, dass bei while-Schleifen die Abbruchbedingung permanent überprüft oder bei for-Schleifen nicht verstanden wird, wo und wann, die Zählvariable erhöht wird. Bei Verzweigungen ergibt sich oft das Problem, dass der richtige Programmablauf nicht mehr nachvollzogen werden kann. 4. Funktionen und Funktionsaufrufe: Hier sind es vor allem Parameterübergaben und Rückgabewerte die zu Fehlvorstellungen führen können. Es ist schwer zu verstehen was es bedeutet, wenn ein Parameter einer Funktion übergeben wird, besonders im Fall, wenn Variablen außerhalb einer Funktion andere Namen als innerhalb haben. Dass lokale Variablen außerhalb des dafür definierten Funktionsbereichs nicht aufgerufen werden können ist auch oftmals schwer verständlich. Wenn dann auch noch Parameter als Referenzen übergeben werden (z.B. Pointer in C oder Call by Reference im Gegensatz zu Call by Value) kommen noch eine Vielzahl zusätzlicher Hürden hinzu. ÄHNLICHE ARBEITEN Im Zuge unserer Literaturrecherche sind wir auf einige Arbeiten gestoßen, welche sich mit dem gleichen oder ähnlichen Themen beschäftigen. Um einen Einblick zu erhalten, wie solche Studien geführt werden und zu welchen Ergebnissen diese kamen, folgt eine Zusammenfassung von zwei exemplarischen Studien von Teemu Sirkiä von der Aalto Universität in Finnland und von Matthew Butler und Michael Morgan von der Monash Universität in Australien. In weiterer Folge vergleichen wir auch die Ergebnisse dieser zwei Stu3 5. Objektorientierung: Der Umstieg von prozeduraler auf objektorientierte Programmierung beherbergt eine Vielzahl an zusätzlichen Potentialen für Fehlvorstellungen. Die Konzepte von Klassen, Objekten, Methoden und Referenzen sind wichtige Bauteile, doch müssen sie, um das Prinzip der Objektorientierung begreifen zu können, als Ganzes wahrgenommen werden. Das heißt, es muss verstanden werden, wie diese zusammenspielen und miteinander verbunden sind. Dies ist wichtig um unterscheiden zu können, ob es sich um einen blutigen Programmieranfänger beziehungsweise Programmieranfängerin oder um eine Person handelte, die bereits Erfahrung im Programmieren besaß. Im dritten Bereich sollten die Studenten ihre Lerngewohnheiten schildern und darüber reflektieren, ob diese vielleicht an der Entstehung von konzeptuellen Verständnisproblemen beteiligt sind. Der vierte Teil ist der wichtigste dieser Studie. Hier sollten die Befragten sich selbst bezüglich der vorhin definierten Konzepte beurteilen. Als erstes sollten sie unter Verwendung einer Siebenpunkteskala die Schwierigkeiten mit dem Verständnis jedes der einzelnen Gebiete bewerten. Eine weitere Frage, welche mithilfe der gleichen Skala beantwortet werden sollte, behandelte die Schwierigkeiten bezüglich der Implementierung der Konzepte. Für die Gestalter der Studie war es hier wichtig, zwei verschiedene Fragen zu stellen, da ihrer Meinung nach und nach Lahtinen et. al. (2005) Studenten dazu neigen, ihr Verständnis zu überschätzen. Die unterschiedlichen Fragen sollten dazu beitragen dem entgegenzuwirken. Der letzte Teil bat den Studienteilnehmern und Studienteilnehmerinnen die Möglichkeit Themenbereiche anzugeben, welche nicht in der Liste enthalten waren, bei denen sie jedoch auch große Schwierigkeiten hatten. Die Auswertung der Umfrage führte zu folgenden Ergebnissen. [11] 3.2 Studie an Programmieranfängern von Matthew Butler und Michael Morgan Matthew Butler und Michael Morgan führten eine Studie an Programmieranfängern durch, bei der es darum ging herauszufinden, welche Programmierkonzepte für Studienanfänger besonders schwer zu erlernen sind. Der Name der Arbeit lautet Learning challenges faced by novice programming students studying high level and low feedback concepts. Diese Studie richtet sich vor allem an Ersteller von Curricula und Ausbildende. Im Zuge der Studie wurden Erstsemestrige der Studienrichtung Informationstechnologie der Monash University in Melbourne, Australien befragt. Die beinhalteten Fragen bezogen sich auf den Lernaufwand und die Schwierigkeiten, welche die Lernenden in einem Programmiergrundlagenkurs hatten. Die Studie wurde im Zuge der ASCILITE 2007 in Singapur veröffentlicht. Butler und Morgan erstellten anhand des Curriculums eine Liste an Kompetenzen, welche alle nach Abschluss des Kurses beherrscht werden sollten: Auswertung für das Verstehen von Konzepten Folgende Tabelle zeigt die Auswertung der Befragung über die Schwierigkeit beim Verstehen der verschiedenen Konzepte. Die Teilnehmer und Teilnehmerinnen der Studie konnten hier, je nach Schwierigkeit, sieben Punkte für jedes Konzept vergeben. Die letzte Spalte der Tabelle zeigt den durchschnittlichen Punktewert aller Antworten. 1. Algorithmen Table 1: Durchschnittliche Schwierigkeit beim Verstehen von Konzepten (n=167) 2. Syntax Konzept Algorithmus Syntax Variablen Verzweigungen / Schleifen Arrays Funktionen OO Konzepte OO Design Testen und Debuggen 3. Variablen 4. Verzweigungen und Schleifen 5. Arrays 6. Funktionen 7. Objektorientierung Schwierigkeit groß klein mittel mittel mittel groß groß groß mittel Punkte im Durchschnitt 1.98 2.56 2.14 2.53 4.17 3.92 4.92 4.52 3.60 8. Programmieren im allgemeinen und Objektdesign Auswertung für das Implementieren von Konzepten Für die Frage, wie schwierig es ist diese Konzepte zu implementieren, wurde gleich vorgegangen. In der folgenden Tabelle sind wiederum alle Bereiche, mit den entsprechenden durchschnittlichen Ergebnissen, dargestellt. 9. Testen und Debuggen Diese Liste stellte den Kern der Studie dar. Des weiteren werden diese Themenbereiche noch in high-level und lowlevel Konzepte unterteilt. Zu den low-level Konzepten zählten hier zum Beispiel die Syntax der Programmiersprache oder der Umgang mit Variablen. Zu den high-level Konzepten gehörten Bereiche wie Objektorientierung oder Programmdesign. Für die Analyse wurden Fragen zu fünf verschiedenen Bereichen gestellt. Der erste Sektor beinhaltete Fragen über allgemeine Informationen der Studienteilnehmer, wie Alter, Geschlecht, etc.. Im zweiten Teil ging es generell um die Programmiererfahrung, die Studienteilnehmer und Studienteilnehmerinnen schon vor ihrer Studienzeit gesammelt hatten. Wie man aus den beiden Tabellen erkennen kann, gibt es eine große Korrelation zwischen den Schwierigkeiten beim Verstehen und den Schwierigkeiten bei der Implementierung der verschiedenen Konzepte. Das Implementieren fällt in fast allen Fällen etwas schwerer als das Verstehen. Wenn man die einzelnen Bereiche nach der Schwierigkeit anordnet, so sind es die high-level Konzepte, also jene die von mehr konzeptioneller Natur sind, welche die größten Hürden darstellen. Die low-level Konzepte scheinen sowohl beim Verstehen, als auch beim Implementieren, im hinteren 4 werden. Table 2: Durchschnittliche Schwierigkeit beim Implementieren von Konzepten (n=167) Konzept Algorithmus Syntax Variablen Verzweigungen / Schleifen Arrays Funktionen OO Konzepte OO Design Testen und Debuggen Schwierigkeit groß klein mittel mittel mittel groß groß groß mittel 5. Punkte im Durchschnitt 2.21 2.50 2.32 2.68 4.19 4.10 5.12 4.60 3.87 ERGEBNISSE DER UMFRAGE Die Studie zur Analyse der problematischen Konzepte beim Programmieren Lernen wurde aus Daten erstellt die aus Umfragen unter Studierenden an der Alpen-Adria Universität Klagenfurt und an der Technischen Universität München entstanden sind. Die Daten welche für die Analyse bezüglich den Lernbarrieren, die Lernende beim Programmieren im Unterrichtsfach Informatik besitzen, kamen aus einer Umfrage unter Informatiklehrern, die im Zuge des Informatiklehrertags im März 2015 befragt wurden. Teil auf. [4] 1. Anzahl der Rückmeldungen von Studierenden 4. METHODEN In diesem Teil der Arbeit wird die Vorgehensweise der empirischen Untersuchung beschrieben. Weiters werden die Formulierungsfragen nochmal ausführlich dargestellt. Es findet sich darin auch zusätzlich die Begründung für die Wahl der Forschungsmethode um die Vorgehensweise nachvollziehbar zu machen. 4.1 (a) Umfrage an der AAU: 24 Rückmeldungen (b) Umfrage an der TUM: 5 Rückmeldungen 2. Informatiklehrerumfrage zu Lernbarrieren: 64 Rückmeldungen Zielsetzung Ziel der Untersuchung war es, wie weiter oben bereits aufgeführt, herauszufinden, welche Programmierkonzepte schwer zu erlernen sind. Dafür wurden, sowohl an der Technischen Universität München als auch an der Alpen-Adria Universität Klagenfurt, Umfragen unter Studierenden durchgeführt, welche jeweils, entsprechend den Universitäten, die Einführungslehrveranstaltung zur Programmierung besuchten beziehungsweise besucht hatten. Zur zusätzlichen Analyse liegen uns die jeweiligen Vorlesungsunterlagen vor und die Daten werden auch entsprechend deren zeitlichen Behandlung in der Lehrveranstaltung und dem daraus folgenden Komplexitätsgrad ausgewertet. 4.2 6. ANALYSE UND DISKUSSION 6.1 Inhaltsanalyse der Studierendendaten Für die Analyse der Daten wurde ein qualitatives Auswertungsverfahren, besser gesagt die qualitative Inhaltsanalyse nach Mayring, gewählt. Bei Verwendung dieses Verfahrens werden keine starren Indikatoren festgelegt, sondern diese ergeben sich erst während der Analyse der Daten. Dadurch werden die Inhalte auf einer breiteren Ebene analysiert, als dies bei einer quantitativen Vorgehensweise möglich ist. Da sich Inhaltsanalyse jedoch ständig weiterentwickelt und ebenso stark von der eigentlichen Fragestellung abhängt, spezifiziert Mayring diese in sechs Kategorien. Datenerhebung Die Datenerhebung erfolgte mit Hilfe von Online-Umfragen. Diese Methode erscheint für eine solche Erhebung am geeignetsten zu sein, da die Verteilung einfach über das Mailsystem der Universität durchgeführt werden konnte und mit einer sehr großen Anzahl an Rückmeldungen zu rechnen war. Zusätzlich sind die so entstandenen Daten bereits in digitaler Form vorhanden und können daher ohne weitere Bearbeitung, wie zum Beispiel einer aufwändigen Transkription, für die Analysen verwendet werden. Weiters können die Teilnehmer einen für sie geeigneten Zeitpunkt für die Beantwortung des Fragebogens wählen und sich dabei auch ausreichend Zeit lassen. Unsere selbst durchgeführte Umfrage wurde über ein Onlineformular mit Hilfe von GoogleDocs erstellt und die Sammlung der Daten wurde ebenfalls auf derselben Plattform aufbereitet. Jede Person die den entsprechenden Link zu dieser Umfrage besaß, konnte ohne weitere Registrierung beziehungsweise Bekanntgabe von persönlichen Daten daran teilnehmen, wodurch zusätzlich garantiert werden konnte, dass keine Rückschlüsse auf die Person anhand der eingegebenen Daten gemacht werden konnte. [8] 1. Inhaltsanalyse hat Kommunikation zum Gegenstand 2. Inhaltsanalyse arbeitet mit Texten, Bildern, Noten, also mit symbolischem Material, welches in einer fixierten Form darliegt 3. Die Inhaltsanalyse soll systematisch und frei von Interpretationen durchgeführt werden 4. Die Inhaltsanalyse hat nach expliziten Regeln abzulaufen. Dadurch ist eine Nachvollziehbarkeit und Überprüfbarkeit gewährleistet. 5. Das systematische Vorgehen zeigt sich darin, dass die Analyse theoriegeleitet ist. Es geht nicht darum einen Text zu referieren, sondern diesen mit einem theoretischen Hintergrund zu analysieren. 6. Sie will durch Aussagen über das analysierte Material Rückschlüsse auf bestimmte Aspekte der Kommunikation ziehen. Über die uns zur Verfügung gestellten Daten können keine genauen Auskünfte zur Durchführung der Befragung gegeben [6] 5 6.2 Inhaltsanalyse der Lehrendendaten Die Daten der Lehrpersonen wurden nicht mit induktiv gewonnenen Kategorien codiert, sondern es wurden die 4 Unterteilungen der Lernbarrieren, die, wie oben im Kapitel über den theoretischen Hintergrund vorgestellt, von Knud Ileris definiert wurden, übernommen. Dementsprechend handelt es sich dabei um eine deduktive Datenanalyse. 6.3 Figure 1: Verteilung der Kategorien in % Verwendete Software Die Umfragen waren alle so zusammengestellt worden, dass alle Antworten als freier Text verfasst werden konnten. Um somit eine Analyse durchführen zu können, mussten die Daten zuvor codiert werden. Dazu wurde das Codier- und Analyseprogramm MaxQDA verwendet. [3] 6.4 Umfrage unter Studierenden Figure 2: Absolute Verteilung der Kategorien Wie bereits weiter oben erwähnt, wurden im Zuge dieser Studie zwei Umfragen analysiert, um herauszufiltern, bei welchen Konzepten der Programmierung Lernende Verständnisschwierigkeiten haben. Die erste Umfrage wurde in Form eines Online-Fragebogens durchgeführt. Dieser ging hauptsächlich an Studierende der Alpen-Adria Universität Klagenfurt. Des weiteren kamen noch einige Antworten von Studierenden der Technischen Universität München hinzu, welche ebenfalls entsprechende Einführungslehrveranstaltungen für die Programmierung besucht hatten. Unsere eigene durchgeführte Umfrage wurde nicht nur für diese Studie verwendet, sondern war auch Ausgangspunkt für eine weitere Studie die sich mit einem ähnlichen Thema beschäftigte. Daher bestand diese aus insgesamt drei Fragen, wobei für unsere Fragestellung lediglich eine relevant war. Diese lautete wie folgt: Variablen und Zuweisungen Diese Kategorie stellt einen Sammelbegriff für Antworten dar, bei denen Probleme bezüglich dem Verständnis für das Prinzip von Variablen als Behälter von Werten herauszulesen war. Die Schwierigkeit bezüglich diesem Konzept ist vor allem, dass Variablen nicht nur absolute, fix zugeordnete Werte enthalten können, sondern auch Referenzen auf andere Variablen, sprich Speicheradressen beinhalten können, an welchen andere Variablen gespeichert sein können, diese somit als Pointer genutzt werden. Aus diesem Grund wurde diese Kategorie in die folgenden Unterkategorien aufgeteilt: Was ist Ihnen besonders schwer gefallen? Die Frage bezog sich im Kontext des Fragebogens auf Probleme die beim Programmieren Lernen aufgetreten sind. Für die Analyse konnten von den 29 Antworten insgesamt 22 herangezogen werden, die sinngemäß beantwortet wurden. Nach der Durchführung einer qualitativen Datenanalyse nach Mayring konnten fünf Hauptkategorien festgestellt werden, welche den Lernenden am häufigsten Schwierigkeiten bereitet haben. Diese sind: 1. Zusammenhang von Variablen und (33.3%, 2) 2. Pointer (66.7%, 4) Table 3: Fünf Hauptkategorien der Auswertung Kategorie Variablen und Zuweisungen Datenstrukturen Kontrollstrukturen und Threads Objektorientierung Funktionen und Funktionsaufrufe Andere Summe Anteil in % 19.4% 19.4% 12.9% 29.0% 6.4% 12.9% 100% Die Aufteilung von Variablen und Zuweisungen, in diese Unterkategorien, sieht somit wie folgt aus: Absoluter Anteil 6 6 4 9 2 4 31 Die Probleme mit Pointern machen also einen Gesamtanteil von 12.9% der gesamten Umfrage aus, der Bereich Zusammenhänge von Variablen einen Anteil von 6.5%. Datenstrukturen In dieser Kategorie wurden Antworten zusammengefasst, welche sich auf komplexere Datenstrukturen beziehen. Die meisten Antworten die sich hier zuordnen ließen, handeln von Schwierigkeiten mit dem Verstehen von Arrays und Listen. Vor allem das Konzept von mehrdimensionalen Arrays stellt hier die größte Hürde dar. Diese Kategorie teilt sich daher wie folgt in die zwei Unterkategorien auf: Die Anzahl der Nennungen dieser Kategorien verteilen sich wie folgt über die Umfrage: Diese fünf Hauptkategorien dienen als Überbegriffe und werden in weiterer Folge genauer beschrieben und wenn möglich noch weiter in Unterkategorien aufgeteilt. 6 Figure 3: Aufteilung der Hauptkategorie Variablen und Zuweisungen in ihre Unterkategorien Figure 5: Aufteilung der Hauptkategorie Kontrollstrukturen und Threads in ihre Unterkategorien 1. Arrays (83.3%, 5) und meistens sogar gleich waren, ist es nicht notwendig diese Kategorie weiter zu unterteilen. Neben Antworten, bei denen der Umstieg auf die objektorientierte Programmierung selbst als Hürde genannt wurde, waren es vor allem die Unterschiede zwischen Objekten und Klassen beziehungsweise die Vererbung innerhalb von Klassen, die hier Probleme bereiteten. 2. Listen (16.7%, 1) Figure 4: Aufteilung der Hauptkategorie Datenstrukturen in ihre Unterkategorien Funktionen und Funktionsaufrufe Ein weiterer Bereich der genannt wurde, war das Konzept von Funktionen und Prozeduren. Mit nur zwei Nennungen, also einem Anteil von 6.4%, bleibt dieser Bereich aber deutlich hinter den anderen Kategorien. In den Antworten wurde das Konstrukt von Funktionen selbst, als auch das Anwenden von vorgefertigten und zur Verfügung gestellten Funktionen, als Problem identifiziert. Andere Hier sind Antworten zusammengefasst, welche keiner der oben genannten Kategorien zugeordnet werden konnten. Diese in eigene Kategorien aufzuteilen wäre hier jedoch nicht sinnvoll, da für jeder der vier Antworten, welche hier hinfielen, ein eigener Problembereich notwendig wäre. So befinden sich in dieser Kategorie beispielsweise Antworten, die auf Probleme mit der Syntax der Programmiersprache oder auf Schwierigkeiten mit der Entwicklungsumgebung zurückzuführen waren. Das Konzept von Arrays macht daher, mit einem Anteil von insgesamt 16.2% aller Problembeschreibungen, einen erheblichen Anteil aus und ist somit wohl eines der am schwersten zu verstehenden Konzepte für Programmieranfänger. Kontrollstrukturen und Threads Diese Kategorie liegt mit 12.9% an vierter Stelle. Hier ist eine Unterteilung in die Unterkategorien Schleifen und Threads sinnvoll, welche sich wie folgt aufteilt: Vergleich mit ähnlichen Arbeiten Vergleicht man die Ergebnisse der Analyse mit jenen, der im Vorfeld vorgestellten ähnlichen Arbeiten, so kann man viele Gemeinsamkeiten erkennen. Auch wenn die Namen der Kategorien teilweise unterschiedliche Bezeichnungen haben, so sind damit doch annähernd dieselben Konzepte gemeint. Die Überschneidungen, der bei der Analyse identifizierten fünf Hauptkategorien, mit den Konzepten der Studie von Matthew Butler und Michael Morgan kann man folgend deuten: 1. Schleifen (83.3%) 2. Threads (16.7%) Obwohl die Kategorie Kontrollstrukturen heißt, wurden hier ausschließlich Schleifen genannt. Verzweigungen wurden in den Antworten kein einziges mal erwähnt. Bei den Antworten bezüglich Threads, ist es vor allem die Parallelisierung derselbigen, die Probleme bereitet. 6.5 Umfrage unter Lehrer und Lehrerinnen Nachdem die erste Auswertung aus den Daten einer Umfrage extrahiert wurde, welche sich direkt an Studierende wandte, bezieht sich die zweite Analyse auf Daten einer Umfrage, die beim Informatiklehrertag in Bayern am 18. März 2015 durchgeführt wurde. An dieser Veranstaltung nahmen ca. 180 Informatik-Lehrer und Lehrerinnen teil, die an Objektorientierung Der Bereich, welcher in der Umfrage am häufigsten genannt wurde, ist die Objektorientierung mit einem Gesamtanteil von 29.0%. Da sich hier die meisten Antworten ähnelten 7 mieren kommt nur in der 10. Klasse vor”. Die Schüler und Schülerinnen können sich offensichtlich nicht damit identifizieren und sehen auch keinen richtigen Sinn dahinter, wenn dieses Fach nur ein Jahr lang angeboten wird. Da Lernende ja grundsätzlich an einer Weiter- und Ausbildung interessiert sind, stehen diese generell auch dem Lernen an sich nicht von Grund auf negativ gegenüber. Der relative Anteil dieser beiden Barrieren macht zusammen nur 5,4% der ausgewerteten Daten aus. Table 4: Gegenüberstellung der Konzepte der Analyse mit denen der Studie von Butler und Morgan Konzept der Analyse Variablen und Zuweisungen Datenstrukturen Kontrollstrukturen u. Threads Objektorientierung Funktionen Andere Konzept nach Butler und Morgan Variablen Arrays Verzweigungen/Schleifen OO Konzepte, OO Design Funktionen Algorithmen, Syntax, Testen Anzumerken ist hier noch, dass die Gesamtanzahl der Codierungen höher ist, als die Anzahl der Antworten die für diese Studie ausgewertet wurden, da einzelne Antworten umfangreicher verfasst worden sind und daher einzelne Teile davon unterschiedlichen Lernbarrieren zugeordnet werden konnten. bayrischen Gymnasien unterrichten. Die Frage, mit welcher sich dieses Paper aufgrund den Ergebnissen dieser Umfrage im speziellen beschäftigt, handelt von Lernschwierigkeiten, welche die Lehrenden bei den Schüler und Schülerinnen identifizieren konnten. Für diese Studie konnten von den 64 Rückmeldungen insgesamt 51 Antworten verwendet und analysiert werden, die entsprechend unserer Fragestellung sinngemäß beantwortet wurden. Wie im Abschnitt zum theoretischen Hintergrund, in welchem die einzelnen Lernbarrieren nach Knud Ileris aufgelistet und deren Definitionen genau beschrieben wurden, wurden für die Inhaltsanalyse genau diese Kategorien verwendet. Da sich die Lernbarrieren jedoch zum Teil sehr stark ähneln, beziehungsweise sich deren Symptome auch größtenteils überschneiden, lassen sich genaue Einteilungen anhand vorliegender Daten ohne Rückfragen an die Teilnehmer und Teilnehmerinnen nur sehr schwer vornehmen. Daher wurde auch die Codierung, bei nicht eindeutiger Zuordenbarkeit, fast ausschließlich anhand von Signalwörtern durchgeführt. Daraus ergibt sich auch, dass zwei der Lernbarrieren einen Großteil der Ergebnisse ausmachen. Figure 7: Absolute Verteilung der Lerbarrieren Fehllernen Der Kategorie Fehllernen konnten hingegen die meisten Antworten zugeordnet werden. Somit scheint es ein sehr großes Problem zu sein, dass die Lernenden das Programmieren nicht so lernen, wie sich dies die Vortragenden vorstellen. Eine häufige Antwort war, dass die Exaktheit beim Programmieren nicht gegeben sei, also dass mehrere Wege zum selben Ziel führen können. Als Vergleich dazu, wurde mehrmals die Mathematik genannt, in welcher es meist nur einen korrekten Lösungsweg für eine Aufgabe gibt. In der Programmierung kann jedoch zum Beispiel, jede Bezeichnung von Variablen und Methoden beziehungsweise auch deren Parameter und Rückgabewerte komplett frei gewählt werden, wodurch ohne das Verständnis für die Funktionsweise und Verwendung von Methoden auch nicht die Vielfalt der Programmierung und die Vorteile die damit einhergehen erkannt beziehungsweise in weiterer Folge verstanden und somit auch angewendet werden kann. Weiters wurde auch oft das Problem genannt, dass die Syntax nicht korrekt verstanden wird. Dies betrifft aber sowohl einfache Syntaxregeln, wie zum Beispiel dass in Java jede Anweisung mit einem ”;” (Strichpunkt) abgeschlossen werden muss, als auch die Unterscheidung zwischen einer Bedingungen und des entsprechend zutreffenden auszuführenden Codes. Da jedoch die einfachsten Syntaxregeln die Grundvoraussetzung sind, auch für bereits einfachste Programme, stellen spätere und somit komplexere Konzepte, wie oben bereits erwähnt zum Beispiel Kontrollstukturen wie If-Abfragen, oft unüberwindbare Hürden dar. Figure 6: Verteilung der Lernbarrieren in % Abwehr gegen das Lernen und Widerstand gegen das Lernen Wie aus der Graphik ersichtlich ist, treffen die Barrieren Abwehr gegen das Lernen und Widerstand gegen das Lernen am wenigsten oft zu. Überhaupt konnte nur eine einzige Antwort, der Kategorie Widerstand gegen das Lernen zugeordnet werden. Die Antwort die dieser Lernbarriere zugeordnet werden konnte, ist dass der Lehrplan sehr dicht gepackt sei. Hier erkennt man genau, dass durch die Fülle der Stunden die im Unterricht festgesetzt sind, die Schüler und Schülerinnen, mit der Zeit die Situation als inakzeptabel ansehen und sich daher ein Widerstand entwickelt. Als Beispiel für die Kategorie Abwehr gegen das Lernen scheint folgende Aussage exemplarisch zu sein: ”Program8 hier noch zu untersuchen, ob die Konzepte auch bei einem anderen Lernzugang die gleichen bleiben oder ob diese Hürden vielleicht teilweise auch durch die universitäre Unterrichtskultur entstehen. Ein Zusammenhang zwischen dem Komplexitätsgrad der behandelten Konzepte, unter der Annahme, dass dieser mit fortschreitendem Kurs höher wird, und etwaigen Problemen lässt sich nicht finden. Auffällig war jedoch, dass es meist zwei Arten von Antworten gab. Nämlich solche in welchen beinahe alle Konzepte genannt wurden, was darauf schließen lässt, dass ein Versäumnis beim Verständnis für grundlegende Konzepte, wie dies zum Beispiel ”Variablen und Datenstrukturen” sind, spätere Konzepte, die darauf aufbauen, ebenfalls nicht verstanden und somit als Problem angesehen werden. Dies entspricht genau der, im zweiten Teil der Studie festgehaltenen, Lernbarriere des Fehllernens, also dass ein Versäumnis diese Barriere aus dem Weg zu räumen, ein immer größer werdendes Fehlverständnis für Programmierkonzepte mit sich bringt. Die zweite Art sind nur ein bis drei Auflistungen von Konzepten die jedoch meist alle aus dem späteren Teil der Kurse sind. Dies scheint darauf hinzudeuten, dass die grundlegenden Konzepte gut verstanden wurden und erst bei den komplexeren Teilgebieten Probleme auftraten. Table 5: Tabellarische Auswertung der Lernbarrieren Lernbarriere Abwehr gegen das Lernen Ambivalenz Fehllernen Widerstand gegen das Lernen Summe Anteil in % 3,6% 46.4% 48.2% 1.8% 100% Absoluter Anteil 1 26 27 2 59 Ambivalenz Beinahe gleich groß war die Anzahl der Antworten die der Kategorie Ambivalenz zugeordnet werden konnten. Hier ist sehr häufig die fehlende Motivation erkennbar. Sehr viele Antworten geben genau diesen Wortlaut wieder, dass zu wenig Zeit für das Lernen eingeplant wird und daher auch die Fortschritte beziehungsweise die Ergebnisse bei schriftlichen Überprüfungen nicht zufriedenstellend sind, was einen weiteren Motivationsabfall zur Folge hat. Häufig kommt es beim Erstellen von Programmen vor, dass diese nicht korrekt funktionieren. Vor allem im Schulbereich ist dies oft der Fall weil ein kleiner Fehler vorhanden ist. Lexikalische und syntaktische Fehler werden noch häufig von der Entwicklungsumgebung gekennzeichnet, was selbstverständlich von der verwendeten Software abhängig ist, die für die Erstellung des Programm verwendet wird. Genau wie in einem Textverarbeitungsprogramm werden diese Fehler farblich markiert beziehungsweise unterwellt und können daher einfach gefunden und ausgebessert werden. Andere Fehler jedoch, die ebenfalls häufig gemacht werden, lassen das Programm zwar korrekt starten, jedoch passiert dann während der Laufzeit ein Fehler und die Entwicklungsumgebung bringt eine entsprechende Meldung. Diese Fehlermeldungen sind meist sehr umfangreich und detailliert, um Programmierern so genaue Hinweise wie nur möglich zu geben, wo und vor allem wodurch der Fehler verursacht wurde. Jedoch gerade Programmieranfänger tun sich damit sehr schwer, da sie dann der Meinung sind, dass der entsprechende Fehler ebenso groß sein muss. Hier fehlt wiederum das Interesse sich mit der Fehlermeldung zu beschäftigen und diese korrekt zu lesen beziehungsweise zu interpretieren. Hier reicht es nämlich bereits oft aus, an die angegebene Stelle im Sourcecode zu gehen, an welcher der Compiler die Übersetzung des Programms nicht mehr durchführen konnte und dort nach dem Fehler zu suchen. 7. Des weiteren sollte man aber auch daran denken, dass die hohen Misserfolgsraten der Einführungskurse ins Programmieren nicht nur von den fachlichen Hürden abhängen. Wie der zweite Teil der Studie zeigt können es auch Lernbarrieren sein, welche einen richtigen Zugang zum Programmieren verhindern. Besonders das Fehllernen und die Ambivalenz stechen hier sehr deutlich heraus. Danksagung Die Autoren möchten sich gerne bei Peter Hubwieser für die zur Verfügung gestellten Daten der Umfrage an der technischen Universität München und jene unter den Informatiklehrern bedanken, sowie für die hilfreiche Unterstützung. 8. REFERENCES [1] Formen des Alltagsbewußtseins. Campus Verlag, 1976. [2] Geschlechtertrennung - Geschlechterdifferenz : Suchbewegungen sozialen Lernens. Verlag neue Gesellschaft, 1987. [3] Maxqda homepage - http://www.maxqda.de, 2015. [4] M. Butler and M. Morgan. Learning challenges faced by novice programming students studying high level and low feedback concepts. In Proceedings ascilite Singapore 2007. [5] K. Ileris. Lernen verstehen. Julius Klinkhardt Verlag, 2010. [6] D. W. Langer. Die inhaltsanalyse als datenerhebungsverfahren - www.soziologie.unihalle.de/langer/pdf/meth1/inhaltan.pdf - 2000, 2000. [7] I. Nassi and B. Shneiderman. Flowchart techniques for structured programming http://www.cs.umd.edu/hcil/members/bshneiderman/nsd/1973. - datum: 13.06.2015, 1973. [8] W. Oberdorfer. Umfrage zum programmieren http://bit.ly/1bcycjh, 2015. ZUSAMMENFASSUNG Nach der Analyse, der von uns gesammelten und zur Verfügung gestellten Daten, konnten wir fünf Hauptkategorien herausfiltern, welche besondere Verständnishürden beim Programmieren Lernen darstellen. Die große Korrespondenz der Ergebnisse mit den Ergebnissen der Studien von Sirkiä beziehungsweise Butler und Morgen lässt darauf schließen, dass diese Konzepte globale Verständnishürden darstellen, bei welchen Programmieranfänger und -innen die meisten Schwierigkeiten besitzen. Unterteilt man diese Konzepte, wie es Butler und Morgen tun, in high-level und low-level Programmierkompetenzen, so sind es vor allem die highlevel Konzepte wie Objektorientierung und Parallelisierung, welche die größten Probleme bereiten, was sich somit auch mit deren Schlussfolgerung deckt. Da alle drei Studien mit Programmieranfängern und -innen an Universitäten durchgeführt wurden, welche alle recht ähnlich aufgebaute Programmiereinstiegskurse besuchten, bleibt 9 [9] Oracle. 1.2 design goals of the javaTM programming language http://www.oracle.com/technetwork/java/intro141325.html - datum: 10.06.2015, 1999. [10] Pons. concipio:deutsch - http://de.pons.com/ - datum: 10.06.2015, 2015. [11] T. Sirkiä. Recognizing programming misconceptions an analysis of the data collected from the uuhistle program simulation tool. Master’s thesis, Aalto University - School of Science - Degree Programme of Computer Science and Engineering, 2012. 10
© Copyright 2024 ExpyDoc