KIF460:Wie lernt man Programmieren (sinnvoll, effizient) ? (Austausch, Brainstorming)
Aus KIF
Programmieren lernen[Bearbeiten]
Beispiele[Bearbeiten]
- TU Darmstadt:
- Programmiervorkurs (1 Woche vor Semester)
- reines Programmieren (Java, da in Vorlesungen verwendet)
- Computersysteme in der Uni verwenden
- ohne Vorkenntnisse
- Schematisches ist ein Wenig enthalten
- Wird in der Vorlesung ausfürlich genug behandelt
- Java & Racket im 1. Semester und Java weiterhin im 2.
- bis ins 3. Semester in Uebungen enthalten
- 4. Semester Programiersprachen werden
- Programmiervorkurs (1 Woche vor Semester)
- TU Dortmund:
- Programmiervorkurs (1 Monat vor Semester)
- Auch für Studierende mit Vorkenntnissen geeignet
- Es wird auf wenigstem Vorwissen aufgebaut
- schnelles Tempo
- Fortgeschrittene helfen Anderen
- Einschraenkung auf basis Befehlssatz, erweiterte Befehle nachbauen
- Caffeine & Code
- gegen Ende des Semesters / Anfang der Semesterferien
- Tutoren von Veranstaltungen bieten privat selbstgestellte Zusatzaufgaben an
- in großer Runde
- quasi private Klausurvorbereitung
- Vorlesungen
- 1. S: typisch Java einstieg
- 2. S: Algorithmik realisieren
- 3. S: Softwaretechnik (UML, ...)
- 4. S: Softwarepraktikum (Projektgruppen, Selbststaendig, ...)
- 5. S+: Wahlpflicht Softwareentwicklungs-Vorlesungen
- 30% nur Programmieren, Algorithmik und Datenstrukturen (Java, C, Haskell)
- Programmiervorkurs (1 Monat vor Semester)
- Kiel:
- Aehnlich zu TU Dortmund
- Sozialproblematik wird mit Bonusaufgaben angegangen
- Programming challenges kurs von Fachschaft ausgehend
- Raetselaufgaben mit grossen Eingaben
- Teamarbeit
- 1.-5. Fachsemester empfohlen
- zum Spass, nicht pflicht
- 1. Semester: OOP (Java + Konzepte)
- 2. Semester: Betriebs-/Kommunikationssysteme (ein wenig C)
- 2. Semester: (Algorithmen in Java Umsetzen)
- 3. Semester: Java Nebenlaeufigkeit + Generics
- 3. : Prolog
- 4. : Softwaretechnik
- weiter nicht bekannt
- HU Berlin:
- 1 Modul 1. Semester
- Code wird vorgelesen
- Begleitend entsprechende Uebungen
- 1 Modul 1. Semester
- Tuebingen:
- 1. S: OOP
- 2. S: Prozedurell (Racket)
- Nichts weiter bis Projektarbeiten
- dort *koennen* ca. 1 bis 2 pro 10er gruppe "programmieren"
- Goettingen:
- 1. S: Java
- 1.5 S: C-Kurs
- 2. S: Haskell und Assembler
- 2. S: Gruppenarbeit Java
- Heidelberg:
- Vorkurs
- begrenzt viele Plaetze (50)
- C++
- Skript durcharbeiten mit Hilfe vor Ort
- breit gefaecherte Durcharbeitungsquote
- 1. S: C++ in 2 Modulen (Vorlesung + Uebung / Kurs mit live-Uebung)
- 2. S: Algorithmen und Datenstrukturen (Python)
- allgemein Veranstaltungen mit C++/Python ein Wenig
- Vorkurs
- HSK:
- 1. S: Clicky Bunty (Lego Mindstorms)
- 2. S: Java (langsames tempo)
- Theorie und Praxis laufen Zeitlich sehr auseinander
- Thematisch auch, Zeitlich ist groesseres Problem
- Mit Prof muss darueber gesprochen werden
- (Gespräche werden aktuel begonnen)
- TU Dresden:
- 1. S: Lego Mindstorms + Python
- C, Python, Java wie bei Anderen
- Diverse Programmierkurse von Fachschaft ausgehend
- keine Pflichtveranstaltung, wird jedoch so wahrgenomen
- nicht zwangslaeufig fuer Vorlesung benoetigt
- Emden:
- 1. S: kein Programmieren
- 2. S: Verzweiflung
Probleme / Loesungen[Bearbeiten]
Ausstehende Fragen:
- Wie geht man mit unterschiedlichen Erfahrungen um?
- Balance Praxis/Theorie?
- Wie stellt man Aufgaben verstaendlich? (Praxis vs Prinzip)
- Welche Sprache eignet sich? Wahlkriterien?
- Best practices / Coding conventions (in welchem Rahmen?)
- Ziel?
- Spass?
- Vorbereitung Studium?
- Freizeit-Motivation?
- Spannende Beispiele?
- nicht nur langweiliger Pytagoras
Meinungen[Bearbeiten]
- Nur Folien statt ausprobieren ist nicht zu empfehlen
- => Live-Coding
- grosse Probleme bei Anderen, da Prof zu schnell und Anfaenger*innen kommen nicht mit ("keine Chance")
- => Live-Coding
- Abstraktes Prinzip lernen ist schwierig
- Algorithmen + Datenstrukturen Modul ist sehr hilfreich
- Problemstellung
- Algorithmus vorstellen
- Loesung selbsstaendig
- Problem wird erkannt
- Algorithmen zusammensetzen erforderlich
- "Baukasten" von Algorithmen
- Darmstadt Vorkurs
- Anfang: Was ist programmieren Einfuehrung
- Beispiel: Kochrezept
- Anweisungsschreibweise
- 1. Kartoffeln schneiden
- 2. Kartoffeln anbraten
- 3. ...
- Anweisungsschreibweise
- Fuer Schulklassen:
- 2 Personen teams
- Aufgabe: "Druecke den Lichtschalter"
- 2. Person muss in Teilanweisungen exakt unterteilen
- "Hebe den Arm"
- ...
- Meinungsbild "Ist Unterteilung in Einzelanweisungen hilfreich?"
- Hilft nicht jedem
- eher labyrinth algorithmisch loesen (java-kara like)
- Anderen hilft es
- gerade bei niedrigem Wissensstand mit computern
- Neukombination von elementaren Bestandteilen ist essentiell zu Lernen
- Hilft nicht jedem
- Java-Kara als Beispiel
- "Zum Kleeblatt laufen" mit Kochrezeptsystem erklaeren
- 2 geschachtelte Schleifen als Einstiegsaufgabe schon schwierig
- klein anfangen "wie gebe ich x aus"
- Algorithmen + Datenstrukturen Modul ist sehr hilfreich
- Praxis / Theorie
- 3 Mal snake implementieren
- mit Array
- mit Liste
- mit OOP
- positive Erfahrung
- Es gibt nicht nur einen Weg zur Lösung
- Bausteine kennengelernt
- koennen verschieden zusammengefuegt die gleiche Aufgabe loesen
- 3 Mal snake implementieren
- Beispiel Kiel Haskell Vorlesung
- grossteil Sprachelemente kennenlernen
- es werden nur Methoden benutzen, welche auch selber implementiert werden können
- aufteilung auf
- Vorlesung
- Uebung
- Testat
- Meinung: Von Hand auf Papier programmieren ist nicht effektiv zum Lernen
- Grund: Leute, die nur am Rechner programmieren greifen auf IDE funktionen zurueck
- => fallen in (nicht E-) Klausur durch
- Goettingen
- in bis zu 5 Kohorten, genuegend Computer vorhanden fuer E-Klausur
- paar Ersties installieren IDE trotz Abraten
- Vorteil von Start am PC: Als Anfaenger*innen schnell Erfolgserlebnisse
- Grund: Leute, die nur am Rechner programmieren greifen auf IDE funktionen zurueck
- Meinung: Mit IDE beschaeftigen ist Sinnvoll
- hirzu giebt es gemischte meinungen.
Welche Sprache?[Bearbeiten]
- Wurde in vielen AKs bereits ausgiebig besprochen
- ist sehr abhaengig von Situation vor Ort
Coding conventions[Bearbeiten]
- Meinung:
- Anfangen mit schlecht Formatierten und Kommentierten Code
- Spaeter verbessern
- Gegenmeinung:
- Am Anfang immerhin erwahnen, nicht durchzwingen, aber erwaehnen
- "So macht man einen Kommentar"
- Kommentare sind Sinnvoll
- Variablennamen sind wichtig
- ...
- Am Anfang immerhin erwahnen, nicht durchzwingen, aber erwaehnen
- Aufgabenstellung enthalten "Alle funktionen muessen kommentiert werden"
- Bei nicht dokumentierten funktionen gibt es 0 Punkte
- Es wird als Sinnvoller erachtet, conventions von vornhinein zu lernen
- Nutzt guidelines nach eigener Auswahl, aber einheitlich
- Vorlesung beinhaltet haeufig code quality Bemerkungen
- ab 2. Vorlesung wird code quality in Uebungspunkte einbezogen
- Meinung: Selbsterkenntnis schwierig fuer Korrektur
- 1. S Helfen ist schwieriger bei geringer code quality
- Unnoetige Arbeit
- => Am Anfang richtige Grundzuege beibringen ist Sinnvoller
- 1. S Helfen ist schwieriger bei geringer code quality
- Viel manuelle Auswertung bei anwesenden Hochschulen, bei einigen automatisch, auch mischungen existieren
- Wenn Tutor bei Korrektur nicht durchsteigt gibt es 0 Punkte
- Testate
- => Tutor muss nicht selbst den code verstehen
- Kandidat*inn muss Code selbst erklären
- Hat Kandidat*inn seinen Code "selbst geschrieben"/verstanden
- Prof: "Bestanden."
- ohne feedback, ohne nachfragen, einfach draufschauen
Unit Tests automatisch[Bearbeiten]
- Fall A: sehr gut, da instant feedback und gute Rueckmeldung
- Fall B: schlecht, falls nur einmalige Abgabe und intransparente tests
- Fall C: 3 Versuche
- mit Rueckmeldung
- bei 3 Fehlfaellen manuelle ueberpruefung mit Teilpunkten
- Zeitbeschraenkt
- Vorgehende uebungen unbegrenzt
- Fall D: Oeffentliche und private tests
- Fall C wird allgemein nicht gut angesehen
- zu hoher Druck fuer Studierende
- mehrfaches Hochladen besser, als automatische Sperre
- Schafft aber wohl eine geringere Durchfallquote (da als Klausurzulasung nötig)
- Compileprobleme bei Abgabe sind problematisch
- imports
- Systemabhaengige Fehler
- ab 2. Semester 0 Punkte bei fehlschlagender Kompilation
Fehlermeldungen - Wie gehte ich damit um?[Bearbeiten]
- 1. Live-coding im Vorkurs:
- befehl absichtlich Falsch schreiben
- "was denkt ihr passiert?"
- ausfuehren => Fehlermeldung
- Aufbau von Fehlermeldung erklaeren
- Exkurs Fehlermeldungstypen
- Ausfuehren macht nichts kaputt, keine Angst!
- Testen von Abgaben, bei Fehlern darauf eingehen
- wie gibt man Rueckmeldung?
- strittig
- wie gibt man Rueckmeldung?
- Musterloesungen Sinnvoll?
- An HS mit IDE (Eclipse) wird funktion von IDE verwendet, um Fehler zu beheben
- 1. + 2. Vorlesung: Helpdesk
- Tutor fuer Problemfragen bzgl. Fehler (Stacktraces, ...)
- Tutoren bieten bereitwillig Hilfe an (Sprechstunden)
- Programmierkurse
- Probleme mit Fehlermeldungen wegen anderen Begrifflichkeiten in Vorlesung
- Fachbegriffe unterscheiden sich von Professor*in zu Professor*in
- Viele Begriffe aus der Informatik sind nicht allen bekannt
- aufpassen
- ermutigen zu Nachfragen
- Prof hat Schwierigkeiten, Programmierkompetenzen einzuschaetzen
- zu schnell ueber LinkedList, ...
- auch wenn leicht erscheint kann Aufgabe sehr schwierig sein
Fehlgeleitete Professoren[Bearbeiten]
- Fall A: 1., 2. S (Jena):
- 1. S: C
- 2. S: Java
- Vorlesung mit Folien
- formale Anschauung, sehr abstrakt
- keine Beispiele
- kein live coding
- Pro Woche mind. 4 Uebungsserien
- Pflichtabgaben
- Pruefungszulassung durch Uebungen
- ~8% Klausur pro Woche durch Uebungspunkte
- Problematisch fuer Programmieranfaenger*innen, da schon erste Uebung zur Klausur gehoert
- ca. 10h Aufwand pro Uebungsserie fuer Anfaenger*innen
- Testate und Kurzklausren zusaetzlich
- zu wenig Zeit am Tag
- mit Prof geredet
- Problem besteht seit Jahren
- Studierende merken, dass Vorlesung ihnen nichts bringt
- gehen ggf. nichtmehr zu Vorlesung und lernen sebststaendig
- Professor merkt, dass Vorlesung sich leert
- interpretiert als Erfolg seiner im Vorraus hochgeladenen Folien
- Meinung: Es sollte immer einen Mehrwert haben in der Vorlesung zu sein
- Fall B: Professor*in bringt getrennt Aufgaben fuer Studierende mit Vorkenntnissen
- gaben Zusatzpunkte fuer Klausur
- dadurch bevorzugung von Studierenden mit Vorkentnissen
- direkt geblockt vom Dekan
- Fall C: Mindstorm
- Vorlesung: Hier habt ihr das Programm, hier die Blaetter, macht mal.
- Profesor*in musste mild korrigieren, um das Problem zu umgehen
- Fall D: Darmstadt:
- neuer Professor hat im "rechtlichen Rahmen" ein programm aufgebaut
- hat Fachschaft und Studierende abgeblockt "nur weil ich es anders mache"
- Gespräche haben geholfen
- neuer Professor hat im "rechtlichen Rahmen" ein programm aufgebaut
Herangehensweisen an Professor*innen[Bearbeiten]
- Fall C
- Email mit details und klagen
- Prof hat sich schliesslich entschuldigt
- Als Fachschaft an Prof herangehen
- nicht als Studierende, sondern als Repraesentant
- Vertreter*innen statt Individuen
- => braucht Fachschaft, die sich fuer Studierende einsetzt und "nicht nur am Saufen interessiert ist"
- nicht als Studierende, sondern als Repraesentant
- Fall B
- Klausur musste stark runtergesetzt werden
- Es haette proaktiver gehandelt werden muessen
- Fall D
- ein Student ist nun Hilfskraft und schreibt das Skript
- Mehrfach aufgetreten, dass Studierende selbst Skript schreiben und in Vorlesungen mitwirken
- Abblocken von Professor*innen ist von Fall zu Fall extrem
- Auch andere Organisationen (Hilfsgruppen, etc.) moeglich von Fachschaft ausgehend
- Fallstudie: Angebot zum Bessern
- Protokolliertes Gespraech
- Regelmaessige Ruecksprachen
- => Auf Dauer hat sich die Situation gebessert
- Evaluation der Vorlesung mit Ampel system zur Verstaendlichkeit
- explizit am Ende eines Kapitels
- Ampel gruen => melden
- Ampel gelb => melden
- Ampel rot => melden
- Alternativ mit Link (anonymisiert)
- ggf. geringere Motivation?
- muesste getestet werden
- ggf. geringere Motivation?
Ziele der Programmierkurse[Bearbeiten]
- Viele Professor*innen
- moeglichst schnell, moeglichst viel halbwegs laufender code
- z.B. 10 minuten Sprint fuer Aufgaben ("3-Zeiler", aber enormer Stress mit Aufgabe lesen)
- einfachen Klartext in Algorithmen uebersetzen -> nicht immer Sinnvoll
- existierende Loesung implementieren wird selten in Praxis verlangt
- Softwareengineering
- Klartext Aufgaben (bis zu 2xA4)
- Pseudo-real
- Sinnvoller, als "pseudo-code-text"
- Klartext Aufgaben (bis zu 2xA4)
- Motivation zu Programmieren
- Wofuer ist es gut?
- kann Spass machen!
- Warum will ich programmieren koennen?
- Keine schwierigen Probleme am Anfang
- besser kleine Probleme für schnelleres Erfolgserlebnis
- Anregen das eigene Probleme oder Ideen in Programmen umgesetzt werden können
- Neue Sachen lernen durch eigenen Ansporn
- Wie kann ich mir selbst Informationen beschaffen?
- Negativbeispiel: Hier ist die C Referenz, lern das
- Bekannte Websites
- stack overflow
- Anekdote: Es gibt Programm das automatisch bei Fehlern stack overflow befragt und ersten fix testet
- stack overflow
- Selber erforschen von Websites ist wichtig
Erfolgreiche Freizeitanregungen?[Bearbeiten]
- Bsp: Links zu online-Raetseln fuer Freizeit
- Vorschlag für Professor*innen: Pflichtabgaben erweitern
- Normaler Teil
- + Zusatzfunktionen ohne Vorgabe koennen implementiert werden
- "Bauen Sie noch 2 Zusatzfeatures fuer 2 Bonuspunkte"
- Zusatzfeatures koennen selbst ausgedacht werden
- Kreativitaet wird gefoerder
- Im Bereich Spielentwicklung
- Bsp. Worms
- Mögliche Zusatzimplementierungen:
- andere Projectiele
- Huepfen
- ...
- Mögliche Zusatzimplementierungen:
- Bsp. Worms
- Erfolgsmodell mit sehr kreativen zusatzfeatures
- Vorschlag für Professor*innen: Pflichtabgaben erweitern
- Code wars AK
- Spass, foerdert motivation
- Professor*innen live-coding
- nicht einfach, da verschiedene Lerngeschwindigkeiten
- nach und nach an ein Problem herangehen ist vorteilhaft
- Lego Mindstorm als Motivation gemeint
- hier gescheitert, haette ggf. funktionieren koennen
- ACM Library fuer grafische objekte
- Graphisches Resultat sichtbar
- sehr einfache Programme waren am "coolsten"
- grafische Herangehensweise fuehrt zu kreativem Umgang
- ueber Aufgabe hinaus
- library weiter erforschen
- Motivationsfoerdernd
- kann aber auch einschuechternd wirken (depends on library)
Cheat sheet fuer Programmierkurse?[Bearbeiten]
- TU Darmstadt ist dabei, so etwas zu entwickeln
- Link folgt [hier]
- (Wenn ich das bis zur naechsten KIF nicht gemacht haben sollte erinnert mich dran, Viele Grueße Kevin)