2024-01-11#
In einem Workshop sollten wir Kollegen neulich Ideen entwickeln, wie man die Lehre an unserer HAW verändern und verbessern könnte – verbunden mit dem Hinweis, dass wir bei diesem Gedankenexperiment gerne auch “groß” denken dürfen. Hier also eine Idee.
Gegenstandsbereich: Erste Einführung in die Programmierung, hier am Bsp. python-101.
Historie#
In den vorangehenden zwei Durchführungen von Programmieren 1 wurden KI- und WIF-Studierende in der selben Veranstaltung unterrichtet. Dabei hat sich gezeigt, dass Studierende der KI und der WIF in Bezug auf Voraussetzungen, Interessen, Kontexte der Programmierung sehr unterschiedlich sind.
Situationsanalyse: Warum sind die Lernenden so heterogen, worin unterscheiden sie sich?
Studierende mit einer IT-affinen Vorbildung (typischerweise Fachinformatiker, auch Autodidakten, die nebenher in einer Softwarefirma jobben) treffen auf Schul-Absolventen, die völlige Programmier-Neulinge sind.
Studierende mit einer starken Technik-Affinität treffen auf Studierende, die Programmieren (noch) als notwendiges Übel betrachten, und die (noch) nicht die tiefe Befriedigung kennen, die ein eleganter Einzeiler verschaffen kann.
Es ist bekannt, dass Lernende ein unterschiedliches Lerntempo haben, und dass es natürlich unterschiedliche Lerntypen gibt.
Auch die Einbettung der selben Veranstaltung in verschiedene Curricula generiert Unterschiede: KI-Studierende üben auch in anderen KI-bezogenen Veranstaltungen theoretisch wie praktisch die Programmierung mit Python, während WIF-Studierende statt dessen eher codier-ferne (z.B. BWL-nahe) Veranstaltungen besuchen.
Es überrascht nicht, dass in der Vergangenheit in der selben Klausur mit dem selben Bewertungsmaßstab deutliche Unterschiede im Notenspektrum von WIF und KI festzustellen waren.
Status quo#
Seit WS 2023 wird Programmieren 1 für die Studiengänge KI und WIF komplett getrennt unterrichtet, mit unterschiedlichem Lehrmaterial und unterschiedlichen Klausuren. Mögliches Problem: Diese sog. “äußere Differenzierung” reagiert zwar auf das Problem der curricularen Einbettung, nicht aber auf die anderen Unterschiede in den Eingangsvoraussetzungen.
Idee#
Idee: Ersetze die rein äußere Differenzierung auf Modulebene durch eine gemischt äußere und innere Differenzierung. Konkret:
fast, regular, newbie#
Wir anerkennen, dass es bei den Studierenden unterschiedliche Voraussetzungen und Bedürfnisse gibt, und bedienen diese. Dazu gehen wir heuristisch von z.B. diesen drei Gruppen aus:
A fast track: Studierende mit profunden Vorkenntnissen, großer Motivation, Leistungsorientierung
B regular track: “normale” Studierende (normative Annahme), die auch bisher schon die durchschnittlichen Adressaten der Veranstaltung waren
C newbies: Studierende, die zwar schlau sind, sich aber eben doch das erste Mal intensiver mit Progammierung beschäftigen.
bedarfsorientierte Ressourcenallokation#
Ziel der Veranstaltung Programmieren 1 ist es, unsere Lehr-Ressourcen so einzusetzen, dass alle Studierenden A1 erreichen. Mögliche Maßnahmen:
gleicher Basis-Stoff für alle Gruppen, aber Extra-Angebote für die Leistungs-Elite. Idee: Nach A1 geht es ja weiter; auch im A1-Modul kann A2-Stoff geboten werden – wenn sich die Klausur dennoch auf A1 beschränkt.
anderer Unterricht (Vorlesung, Übung, andere innovative flankierende Angebote) für B- als für A-Studierende; ggf. ist es sinnvoll, eine B- und C-Übung gleichzeitig in nebeneinaderliegenden Räumen anzubieten
zusätzliche Angebote für Newbies
Heuristik: Python ist eine Sprache#
Heuristik: Interpretiere eine Programmiersprache wie Python im Wortsinn als eine Sprache. Wir sind damit in der Lage, Programmierunterricht heuristisch als (natürlich einen etwas anderen, aber im Prinzip doch als einen) Sprachunterricht zu interpretieren. Folge:
Definiere in geeigneter Weise für Python Niveaustufen, wie sie auch im Gemeinsamen Europäischen Referenzrahmen für Sprachen (GERS) definiert sind (https://www.europaeischer-referenzrahmen.de/):
A1 – Anfänger
A2 – Grundlegende Kenntnisse
B1 … etc.
Verwende für die Definition von Niveaustufen nicht Kategorien von Grammatik oder Vokabular, sondern – wie heute üblich – Kompetenzen i.S. von Situationen oder Problemtypen, die man auf einer bestimmten Niveaustufe bewältigen kann.
Eine oberflächliche Online-Recherche ergibt, dass für natürliche Sprachen ganz grob ca 150h Lernzeit – entspricht 5 ECTS – pro Niveaustufe anzusetzen sind. Das würde bedeuten, dass wir auch in bezug auf Programmiersprachen nach einem Semester ein A1-Niveau erreichen wollen sollen. Aber das sind normative Überlegungen, um die es hier nicht wirklich geht.
Was versteht man unter Kompetenzorientierung? Kanz knapp:
keine Kompetenz: “Weiß, wie man eine Datei einliest”
Kompetenz nur grammatisch: “Kann eine Datei einlesen”
Eine einfache Leitfrage, um sich einer Kompenzorientierung zu nähern, lautet: “Was kann man, wenn man das kann?
Mögliche Kompetenzen, die man in Python auf A1-Niveau erreicht haben sollte, könnten z.B. sein:
Kann eine Textdatei einlesen und alle darin enthaltenen email-Adressen in eine CSV-Datei schreiben.
Kann in Python in einer CSV-Datei die Zeilen- und Spaltensummen berechnen
Wichtig: Im GERS ist die Bestimmung der Niveaustufen fast ausschließlich durch Kompetenzen bestimmt. Das dazu benötigte Vokabular oder bestimmten grammatikalischen Kategorien leiten sich daraus ab, sind aber nicht selbst “axiomatischer” Bestandteil der Niveaustufen.
Der Vergleich natürliche Sprache -> Programmiesprache hinkt natürlich, aber ist möglich, nicht uninteressant, und erfordet eben einen Transfer:
Schreiben und Lesen ist direkt übertragbar.
Hören und Sprechen macht natürlich wenig Sinn für Programmiersprachen.
In Programmiersprachen dafür zentral die Unterscheidung von (a) Code, derjedenfalls für Maschinen verständlich ist vs. (b) Code, der auch für Menschen verständlich ist: Das betrifft die Benennung von Variablen, aber auch die Kommentierung von Code. Auch bedenken: Auch Computer-Code ist zum Teil eine Kommunikation zwischen Menschen. (Mit unkommentiertem, obfuskierten Code kann niemand etwas anfangen.)
auch ähnlich die Granularität von Texten und der Interaktion mit der Maschine:
für Einsteiger kurze, direkte Interaktionen in Jupyter Notebooks auf Zellen-Ebene
einzelne gekapselte Funktionen (in Jupyter möglich, aber unschön)
kompilierte Programme, Modulariserung etc.
Konflikte#
Curriculare Bindung vs. Freiheit#
Wenn man sich auf ein Set von Kompetenzen z.B. für ein Niveau A1 einigt, erzeugt das ein gewisses Maß an Verbindlichkeit für den Dozenten: Einschränkung der Freiheit von Forschung und Lehre? … hier ist eine Abwägung erforderlich … Aber auch heute schon ist es üblich, im Curriculum eines Studienganges die Inhalte von Modulen aufeinander abzustimmen.
Stundenplan: Ein Kern des Konzepts besteht darin, die Praktika der Gruppen A, B, C so zu legen, dass die Studierenden eine freie Auswahl haben, und insbesondere nach Bedarf und Interesse auch wechseln können.
Der “Leistungsnachweis (LN)” wird bisher als Nachweis einer Leistung verstanden. Wer den LN benötigt, aber die Leistung nicht in unabhängiger Eigenleistung hinbekommt, verhält sich systemrational, wenn er Lösungen kopiert und verschleiert. Auch dabei lernt man – aber lernt man das richtige? Besser wäre es, einen Übungsbetrieb aufzubauen, bei dem die Studierenden freiwillig in die Übung kommen, weil sie einen Mehrwert für das eigene Lernen sehen.
Evaluation#
Ich bin ein Fan von Evaluation. Aber bitte funktional – und vor allem professionell, siehe
Eine falsch angewandte Evaluation zerstört Motivation und Lernmöglichkeiten, bei Dozenten wie bei Lernenden.
Wir haben derzeit eine Lehrveranstaltungs-Evaluation (LVE): Unsere bisherige LVE evaluiert vorwiegend die aktive Performanz des Dozenten. Dabei wird übersehen, dass Lehren nicht automatisch zu Lernen führt: Lernen müssen die Studierenden selbst, siehe Klaus Holzkamp: Wider den Lehr-Lern-Kurzschluß (1996). Jedenfalls für Sprachen gilt, dass man sie selbst aktiv sprechen muss, wenn man sie erlernen will. Im Hörsaal Python gezeigt zu bekommen erzeugt nur wenig Lernen; auch eine Sprache wie Python zu erlernen erfordert aktives Codieren in einer Umgebung, die geeignete Rückmeldungen gibt und Erfahrungen ermöglicht.
Erforderlich ist statt dessen eine Lernumgebungs-Evaulation (1): Im Kern ist es wichtig zu evaluieren, ob die Studierenden bestimmte Kompetenzen gut erlernen können: Schafft es der Dozent, zum Stoff eine Lernumgebung aufzusetzen, in der vielfältige Lernformen, Lernbedarfe und -Interessen etc. unterstüzt werden – insbesondere auch dann, wenn ein Lernender mit dem Lehrstil, dem Tempo, den gutgemeinten Erklärungen oder Aufgabenstellungen etc. des Dozenten nicht so gut zurechtkommt? … Mit dem Fokus auf die Lernumgebung geht auch und vor allem ein Rollenwechsel vom Inhalts-Erklärer zum Lernbegleiter einher. … Auch überlegen: Muss überhaupt jeder einzelne Dozent “sein” (“eigenes” etc.) Lehr- und Lern-Arrangement aufbauen? Jedenfalls für Python-101 gibt es jede Menge Online-Material, das z.T. mit enormen Ressourcen qualitätsgesichert aufgebaut wurde – und besser ist als vieles, was ein HAW-Professor mit 18 SWS Lehrleistung in den Semesterferien aufbauen kann. Könnte nicht Lehre besser werden, wenn ein Dozent an einer kleinen HAW seine Rolle “nur” darin sehen würde, verschiedene Gruppen von Studierenden mit verschiedenen Fähigkeiten und Bedürfnissen geeignet durch Lernmöglichkeiten hindurchzuführen, die an gut ausgestatteten Institutionen wie KIT, MIT etc. aufwändig entwicklet wurden? Feedback zu geben? Lernbedarfe zu erkennen, auf verschiedne Lernmöglichkeiten und -Wege hinzuweisen?
Lernumgebungs-Evaulation (2): Unterstützt die Institution die Dozenten überhaupt darin, ihre Lehrvorstellungen zu realisieren? Gibt es genügend Arbeitsplätze für Kleingruppenarbeit? Gibt es in den Räumen genügend Steckdosen für die mitgebrachten Laptops? Funktioniert das Ethernet einwandfrei, lässt es genügend Endgeräte zu, stimmt die WLAN-Ausleuchtung? Werden die erforderlichen Zertifikate zuverlässig bereitgestellt, funktiuoniert die Aktualisierung?
Evaluation von Lernen, Prüfung, Constructive Alignment: Unterstützen die verfügbaren Prüfungsräume und -Regularien das zu prüfen, was in der Lehrveranstaltung Lernveranstaltung gelehrt gelernt werden sollte? Persönliche Meinung JB: Im Jahr 2024 an einer technisch orientierten Hochschule ein Fach wie Python 1 noch auf Papier prüfen zu müssen mag institutionell nachvollziehbar sein, ist im Ergebnis aber dennoch deprimierend.
Feedback: Sinnvoll wäre es, dass Studierende während des Semesters jederzeit und anonym mit idealerweise ausgewerteten Tests ihr bisher erreichtes Sprachniveau testen können. Dazu werden hunderte von kleinen Mikro-Aufgaben benötigt. Natürlich gibt es so etwas schon – Codewars.com leistet das zwar nur grob und unzuverlässig, aber dennoch besser als unsere üblichen Leistungsnachweise (s.o.).