Einführung in Informatik

8

Ich werde diesen Sommer meinen ersten Informatik-Kurs auf Hochschulniveau unterrichten, und ich arbeite gerade daran, Ideen für lustige Aufgaben zu entwickeln, die die Studenten vervollständigen werden. Der Kurs ist der zweite im Programm, der die Analyse von Algorithmen und grundlegenden Datenstrukturen wie Stacks, Warteschlangen, Listen, Bäume usw. beinhaltet.

Ich habe eine Reihe von Ideen, mit denen ich arbeiten kann (Musik mit Markov-Ketten, Twitter-Client usw.), aber ich bin immer auf der Suche nach neuen Ideen, die für die Studenten interessant / unterhaltsam sind - schließlich Am einfachsten ist es, sich im Kursmaterial zu engagieren, wenn man Spaß hat. Ich bin auf der Suche nach Ideen für interessante Aufgaben im ersten Jahr, die Sie oder andere in der Vergangenheit abgeschlossen haben.

Bevor irgendjemand es vorschlägt, ja, ich weiß über Nifty Assignments Bescheid und habe es überprüft. Fordern Sie einfach andere Ideen, die Sie haben könnten. Wir alle erinnern uns an bestimmte Aufgaben von der Universität, an denen es besonders Spaß machte, daran zu arbeiten. Das sind die Erfahrungen, die ich im Idealfall suche.

    
Jon Stevens 20.02.2010, 06:59
quelle

8 Antworten

4

Das Problem mit "spaßigen" Aufgaben ist, dass sie oft mehr Arbeit für Schüler darstellen, als Sie es sich vorgestellt haben. Vor allem Studenten mit schlechtem Englisch und Studenten, die die Aufgaben in letzter Minute verlassen. [Und dann melde dich bei SO mit den "bitte mach meine Hausaufgaben" -Fragen.] Viele von ihnen werden Schwierigkeiten mit irgendwelchen Aufgaben haben, die du einstellst, aber du brauchst nicht die Erschwerung einer Gruppe von Schülern, die sich über die Übungen beschweren zu hart, oder nicht in Ihren Vorlesungsunterlagen abgedeckt.

Mein Rat (aus Erfahrung) ist, zu versuchen, das Hintergrundwissen und die "Herausforderung" der markierten Programmieraufgaben gering zu halten.

Das Einstellen interessanter Probleme für optionale Übungen ist eine vernünftige Idee, obwohl es wichtig ist, die Schüler davor zu warnen, Zeit auf Kosten anderer wichtigerer Arbeiten zu verbringen.

    
Stephen C 20.02.2010 07:16
quelle
2

SICP hat einige sehr schöne Aufgaben.

    
Eli Bendersky 20.02.2010 07:14
quelle
1

Ich habe die folgenden Seiten als Inspiration benutzt:

Sie können auch die Aufgaben aus Wettbewerben verwenden ( Beispiel ), aber dies wird höchstwahrscheinlich erfordern einige Arbeit auf Ihrer Seite - um Fairness bei der Verteilung der Aufträge zu gewährleisten (einige könnten schwierig sein, und nicht auf die Dinge konzentrieren, die Sie erwähnt haben).

    
Anonymous 20.02.2010 08:52
quelle
1

Paketzuweisung01; / * Stelle sicher, dass diese Klasse im Paket assignment01 ist. * /

import java.util.ArrayList; import java.util.Arrays;

/ **  * Diese Klasse ist eine Sammlung von Methoden, die verschiedene mathematische Funktionen ausführen. Die Methoden sind alle statisch. Dies  * Klasse ist Teil von Aufgabe # 1.  *  * @author ..........  * Version am 15. Juni 2010  * / Öffentliche Klasse MathLibrary {

%Vor%

}

    
caglar betos 27.09.2011 02:22
quelle
0

Eine Sache zu beachten, vielleicht nicht für den ersten Programmierkurs der Schüler, aber später, ist es, Code von früheren Aufgaben (eigene oder jemandes anderen) zur Reparatur zurück zu geben. Das funktioniert besser, wenn Sie falsche Einsendungen auswählen, idealerweise mit subtilen Fehlern.

Eine ähnliche Idee besteht darin, eine Abfolge von Laboren zu verwenden, wobei der (erfolgreich abgeschlossene) Code aus dem vorherigen Labor als Ausgangspunkt verwendet wird. Als ich vor vielen Jahren den einführenden Programmierkurs (PINK - Programmierung in inkrementellen Systemen) an der LiU gemacht habe, gab es ein Segment der Laborarbeit, das (im Wesentlichen) darauf abzielte, einen Kalender mit abstrakten Typen und Accessoren zu implementieren Ändern Sie anschließend die Implementierung des abstrakten Typs. Sehr wertvoll für die Veranschaulichung der Notwendigkeit, eine gute Schnittstelle zur Verfügung zu stellen, müssen Sie nicht Seite-Schritt, wenn nichts anderes (aus dem Gedächtnis, verbrachte ich ein oder zwei Tage nachdenken über die "Change-Implementierung", dann 15-20 Minuten tatsächlich ändern meine abstrakten Datentypen, da ich die harte Arbeit im Voraus gemacht hatte und mich nur davon überzeugen musste.)

    
Vatine 23.02.2010 14:02
quelle
0

Schwein Latein.

Lassen Sie Ihre Schüler Code schreiben, der einen Textstream von Englisch nach Pig Latin übersetzt. Die Regeln sind ziemlich einfach, aber sie erfordern einige interessante Sonderfälle, besonders wenn es um Interpunktion und Großschreibung geht um einen grundlegenden Scanner / Tokenizer zu schreiben.

Mit einem typischen Satz wie folgt:

%Vor%

Sie sollten das bekommen:

%Vor%

aber Sie werden wahrscheinlich bekommen:

%Vor%

die Satzzeichen falsch platziert hat, falsch platzierte Qu und falsche Großschreibung.

    
plinth 23.02.2010 14:25
quelle
0

Ein paar Ideen, die ich bei den Studenten gefunden habe:

  1. Fraktale Kunst - eine ausgezeichnete Art, Rekursion zu lehren, weil die Schüler den Prozess visualisieren können (zB Sierpinski-Dreieck, L-Systeme für ehrgeizige Studenten). Sie können einige ziemlich beeindruckende Grafiken, die mit kontextfreien Grammatiken erstellt wurden, bei kontextfreier Kunst sehen.
  2. Bildmanipulation - lehre die funktionale Programmierung, indem Pixelmanipulationsfunktionen auf ein Bild abgebildet werden (z. B. Farbkanäle tauschen, Gaußsche Unschärfe, Farbton manipulieren); Dies ist etwas einfacher als die typischen syntaxbaumbasierten generativen Kunst Zuordnungen.

Der schwierigste Teil beim Unterrichten von Informatikkursen auf Einführungskurs ist der Unterschied in der Programmierfähigkeit in der typischen Klasse. Also, wenn Sie Aufgaben erstellen können, die einfach genug für die weniger fähigen Studenten sein können und einfach erweitert werden können (zB durch zusätzliche Gutschrift) bis hin zu komplexeren Problemen für fortgeschrittene Studenten, dann ist das meiner Meinung nach ideal.

    
awesomo 27.02.2010 05:08
quelle
0

Eine Aufgabe, an die ich mich gerne erinnere, wenn ich an meine frühen Tage an der Universität zurückdenke, war eine Aufgabe, die uns über GUIs unterrichten sollte. Wir wurden gebeten, einen Webbrowser zu implementieren.

Die tatsächliche Darstellung von Webinhalten war nicht besonders wichtig - wir wurden ermutigt, eine Swing-Webansicht zu verwenden - es ging mehr um die Funktionalität, die dies unterstützte:

  • eine URL-Leiste
  • Geschichte
  • vorwärts und zurück
  • Einstellen einer Startseite
  • Pflege von Lesezeichen / Favoriten
  • Tabbed Browsing
  • usw.

Die Aufgabe hat Ihnen freie Hand gelassen, um eine beliebige Kombination zu wählen, vorausgesetzt, Sie haben mindestens eine feste Nummer gewählt. Dies ermöglichte es den wirklich scharfsinnigen Leuten, absolut alle Funktionen zu implementieren, wenn sie wollten, und erlaubte jedem, der es eilig hatte, einfach das Minimum zu implementieren.

Es gab noch einige Aufgaben, die im Laufe der Jahre ähnlich strukturiert waren und die immer gut abschnitten. Du wärst überrascht, wie oft die Schüler die Extrameile gehen und mehr tun als nötig ist.

Als allgemeine Faustregel schienen die Dinge, die ich selbst und meine Kursleiter am reizvollsten fanden, mehr visuell zu sein: OpenGL, GUIs, Websites usw. Alle auf Kommandozeilen basierenden Programme waren nicht so unterhaltsam.

Wenn Sie sich auf Algorithmen konzentrieren, könnte es eine gute Idee sein, die Schüler dazu zu bringen, Sortier- / Suchalgorithmen zu visualisieren. Abgesehen davon, dass man sie über ein Grafik-Framework unterrichtet, würde es helfen, den Algorithmus zu visualisieren und sein Verständnis davon zu zementieren. Sie könnten eine ähnliche Sache mit benutzerdefinierten Implementierungen von Datenstrukturen tun.

Der Schlüssel dazu wäre, ein Grafik-Framework zu finden, das einigermaßen intuitiv, gut dokumentiert, gut genutzt und gut unterstützt ist. Es gab nichts Frustrierenderes als Aufgaben, die uns dazu zwangen, Technologien zu verwenden, die niemand in der realen Welt tatsächlich verwendet. Sie wollen das Lernen dieser Technologie nicht zum schwierigsten Teil der Aufgabe machen.

Ich halte es nicht für eine schlechte Sache, dass Sie ihnen beibringen, einen Rahmen zu verwenden, der außerhalb des Rahmens des Moduls liegt: Lernen, wie man neue Frameworks und Bibliotheken verwendet, ist eine Fähigkeit, die Bedürfnisse entwickelt werden, wenn Sie ein effektiver Softwareentwickler sein wollen, und Universitäten scheinen das nicht explizit zu lehren.

    
Michael 24.03.2017 14:43
quelle