Was sind einige gute Aufgaben für einen Einführungskurs, um die heutigen Studenten zu erreichen? [geschlossen]

25

Ich unterrichte regelmäßig eine Einführung in den Programmierkurs mit Java . Ich möchte meinen Schülern spannende Aufgaben geben, mit denen sie sich identifizieren oder die sie interessant finden können . Zumindest möchte ich Aufträge, die sinnvoll sind und einen internen Zusammenhang aufweisen (zum Beispiel scheinen einige sehr schlechte Programmierübungen nur erfunden zu sein, damit Sie das neueste abgedeckte Programmierkonstrukt verwenden müssen).

Um Ihnen einen Überblick über den Umfang zu geben, werden folgende Themen behandelt :

  • Die Zuweisungen müssen in Java erfolgen, wobei eine externe Bibliothek verwendet werden kann, es müsste sich jedoch um eine einfache API und nicht um ein vollständiges Framework handeln
  • Variablen, Primitive und Strings
  • Konsolenein- und ausgabe
  • if, for,while
  • Arithmetische und logische Operatoren
  • Einfache Grafiken mit Linien- und Formzeichnungen
  • Statische Methoden
  • Eindimensionale Arrays

Die Studierenden werden nicht auf fortgeschrittene Themen eingehen (z. B. keine Rekursion, keine Betonung der Vererbung). Daher suche ich keine komplexen Projekte: "Lassen Sie sie einen C-Compiler schreiben. Ich habe es getan, als ich 5 Jahre alt war, und es war der einzige Weg, wie ich gelernt habe!"

Wenn Sie Ideen haben, die weiter fortgeschritten sind als der Umfang, posten Sie diese bitte in der unten verlinkten "Herausfordernden" Frage und nicht in dieser.

Stattdessen suche ich interessante Ideen, die in einem kurzen Programm verwirklicht werden können. Beispielsweise:

  • Die Schüler können eine Konsolenversion des Generators "Star Wars Name" schreiben . Dies ist effektiv das Lesen und Verwenden von Strings substring, aber ich denke, es macht Spaß. Eine ähnliche Variante wäre ein " Mad Libs " -Programm. Ich habe es vor fünf Jahren benutzt und vielleicht ist es schon "abgestanden".

  • Mit einem Trigger können die Schüler regelmäßige Polygone zeichnen und interessante Spiralformen erstellen.

  • Es ist auch nicht ausgeschlossen, eine einfache Animationsklasse zu verwenden, in der der größte Teil des Codes enthalten ist. Und wenn Sie einen Twitter- oder Facebook-Dienst kennen, auf den mit einer einfachen API zugegriffen werden kann, würde mich das sehr interessieren.

Bitte beachten Sie, dass sich diese Frage von der Frage " Herausfordernde Java-Fragen für Anfänger " unterscheidet. Ich suche keine Herausforderung an sich, nur interessant. Ich denke, wenn die Schüler an etwas arbeiten, können sie leicht antworten: "Warum sollte jemand das jemals programmieren wollen?" dann lernen sie besser.

Selbst einfache Probleme wie das Berechnen von Meilen pro Gallone können gut sein. Umso besser, wenn es eine Möglichkeit gibt, es zu aktualisieren, um relevanter zu sein. Wenn Sie eine Übung von einem anderen Ort (einem Buch oder einer Website) haben, geben Sie bitte die Quelle an.

In der Beloit Mindset-Liste finden Sie viele Beispiele , anhand derer Sie sich sicherlich alt fühlen.

Macneil
quelle
Aus Neugier denken Sie, auf welchem ​​Niveau unterrichten Sie, dass Themen wie Rekursion und objektorientiertes Design zu weit fortgeschritten sind? Diese Themen wurden in meinem Einführungskurs zum Programmieren im ersten Semester ausführlich behandelt. Ich denke, Sie tun Ihren Schülern einen schlechten Dienst, wenn Sie versuchen, die Kursarbeit zu simpel zu halten.
Mayra
@Mayra: Dies ist für die Einführung in den Programmierkurs der erste Kurs für CS-Majors. Ich suche spannende Probleme für die Schüler in den ersten 5 Wochen (oder sogar am ersten Tag) und nicht nur am Ende. Es ist eine echte Herausforderung, an diesen Anforderungen zu arbeiten (und glauben Sie mir, dass einige Probleme außerhalb meiner Kontrolle liegen), daher wende ich mich an Sie, um Hilfe zu erhalten.
Macneil

Antworten:

9

Angesichts der Einschränkungen würde ich vorschlagen, eine Version von Hangman zu implementieren. Auf diese Weise können die Schüler alle Techniken demonstrieren, mit denen Sie sie vertraut machen, ohne zu komplex zu sein.

Es kann auch als Entwicklungsprojekt im Verlauf des Kurses verwendet werden. ZB wenn Sie Zeichenfolgen und Variablen behandelt haben, beginnen Sie als Textversion

z.B

You have 10 guesses left.      * * * E * * T
What is your next guess?

Führen Sie dann Schleifen ein, um das Ausschneiden- und Einfügen-Element aus dem Code zu entfernen, während die 10 Vermutungen abwärts zählen. Dies führt dazu, dass am Ende des 5-wöchigen Kurses Liniengrafiken und die Stick-Person aufgehängt / gespeichert werden.

Wie die meisten anderen Leute, die Erfahrung mit der Anwerbung und Befragung von Programmierern haben, schreckt es mich wirklich zurück, dass dieses Niveau an Studiengebühren an der Universität benötigt wird, aber leider wird es wahrscheinlich so lange benötigt, bis die Schulen die Programmierung als ernstes Thema auf Augenhöhe behandeln Mathematik oder Naturwissenschaften

Michael Shaw
quelle
Großartige Idee! Ich denke, ich werde diesen verwenden. :-) Übrigens, was meinst du mit "Unterrichtsniveau"? Wie bei den Kosten?
Macneil
Es ist eher eine Beschwerde über den Mangel an Programmierunterricht vor der Universität. Stellen Sie sich vor, Sie kommen an die Universität, um Chemie zu studieren und das erste Semester damit zu verbringen, über Atome, Moleküle und Elektronen zu sprechen. 3 Jahre sind einfach zu kurz, um Informatik zu verstehen.
Michael Shaw
Mir gefällt diese Idee sehr gut, da keine komplexen Grafiken erforderlich sind und dies in einer Befehlszeile recht gut möglich ist. Es macht Spaß und ist kein weiterer mathematischer Problemlöser.
Joppe
7

Klingt so, als ob ein Text-Abenteuerspiel irgendwann Mitte des Semesters eine großartige Aufgabe sein könnte. Ich hatte eine Klasse, die uns dazu brachte, Colossal Cave Adventure zu spielen und dann unser eigenes Spiel zu machen. Es hat mir schon früh viele grundlegende Konstruktionen beigebracht, und es hat so viel Spaß gemacht, dass sich alle damit beschäftigten.

Morgan Herlocker
quelle
2
Klingt lustig, aber halte es klein.
7

Wie wäre es mit ein oder zwei Problemen von http://projecteuler.net/? Einige davon sind sehr interessant und man könnte den Vorteil sehen, ein Programm zu schreiben, um sie zu lösen. Sie sind klein genug, um mehrere Aufgaben zu erledigen. Eine andere, die ich gerne benutze, ist das Finden von Wörtern im Wert von 1,00 USD. Jeder Buchstabe im Alaphabet ist seine Position in Cent wert, dh a = 1, b = 2. Wie viele $ 1.00-Dollar-Wörter können Sie finden? Dies kann Datei-I / O (Einlesen eines Wörterbuchs), Arrays, Schleifen usw. beinhalten.

Gratzy
quelle
1
+1 für Project Euler. Sehr cool. Obwohl einige der Probleme etwas zu weit fortgeschritten sind, gibt es viele, bei denen dies nicht der Fall ist.
Macneil
Ich liebe Project Euler, aber ich bin mir nicht sicher, ob es Spaß gemacht hätte, wenn ich die Übungen an der Universität gemacht hätte.
Oliver Weiler
Nein, nicht alle von ihnen würden Spaß machen, aber einige, ich denke, wir sind eine gute Wahl
Gratzy
6
  • Implementieren Sie ein Monopoly-Spiel. Monopoly hat eine offensichtliche Reihenfolge und lässt sich sehr leicht in Funkitonen aufteilen. Außerdem sind nur ein eindimensionales Array und einige Grundklassen erforderlich. Die Logik ist so einfach, dass die Schüler mehr über das "Wie" als über das "Was" nachdenken und daraus etwas resultieren, das anderen demonstriert werden kann.

  • Geben Sie ihnen eine verschlüsselte Datei, die mit einer umkehrbaren Regel verschlüsselt wurde, und bitten Sie sie, einen Decoder zu schreiben (machen Sie es aber einfach genug). Dies gibt einen zusätzlichen Anreiz, es zu lösen, da der Inhalt der Nachricht rätselhaft ist.

  • Ich weiß nicht, warum Sie nur eindimensionale Arrays und keine Matrizen abdecken (sie sind wirklich nicht so verschieden), aber wenn Sie bereit sind, das in das Spiel des Lebens von Jon Conway aufzunehmen, ist das auch relativ einfach und führt zu etwas Spaß.

  • Ein Spiel wie Schach erfordert einige Überlegungen, bleibt jedoch im Rahmen dessen, was Anfänger mit minimaler Vererbung tun können (bestimmte Teile erben von einem Stück der allgemeinen Klasse, und das Brett enthält Objekte vom Typ Stück) und 2D-Arrays (Sie können dies auswählen) Vereinfachen Sie dies, indem Sie keine harten Dinge wie die Erkennung von Stelmen oder die Unfähigkeit, eine Burg zu errichten, implementieren, wenn feindliche Teile den Burgenpfad bedrohen.

EpsilonVector
quelle
+1 für den Monopoly-Spielvorschlag. Was 2D-Arrays betrifft, stimme ich absolut zu, dass sie zu sehr interessanten Aufgaben führen können. Es gibt jedoch Einschränkungen, die dazu führen, dass 2D-Arrays nicht mehr realisierbar sind (z. B. das Lehrbuch ist bereits repariert, und eine Milliarde anderer fakultätspolitischer Themen, mit denen ich Sie nicht langweilen werde, und ich werde Sie auch nicht mit meiner persönlichen Meinung dazu langweilen Angelegenheiten außerhalb meiner Kontrolle).
Macneil
Ah, wir mussten ein Monopolspiel in der Schule schaffen. Und ein Verschlüsselungsbrecher.
Carra
+1 für Monopol. Bitten Sie die Schüler, nach der Codierung die Wahrscheinlichkeit einer Landung auf den verschiedenen Grundstücken zu ermitteln. Dieses Wissen hilft wirklich strategisch.
Joshdick
4

Wir haben einige Projekte mit nur I / O, Funktionen und bedingten Operatoren in der Schule erstellt. Alles erledigt, bevor wir uns mit objektorientierter Programmierung befassten. Diese Projekte entwickelten sich langsam und wurden immer schwieriger. Es genügt zu sagen, dass die 4 Stunden, die wir jede Woche hatten, gegen Ende des Jahres bei weitem nicht ausreichten.

Alle diese Projekte wurden nur mit Funktionen & I / O durchgeführt:

  • Ein Spiel, das lernt. Sie nehmen eine Reihe von Stöcken, der PC nimmt eine Reihe von Stöcken. Wiederholen. Der Letzte, der einen Stock hält, verliert. Wir mussten ein einfaches Selbstlernprogramm erstellen, das mit jedem Spiel besser wurde. Gutes Beispiel zum Erlernen von 2D-Arrays.

  • Ein Code-Breaker. Sie kennen die Caesar-Verschlüsselung, wählen einen Buchstaben aus und addieren den Wert des Buchstabens zu jedem Buchstaben Ihres Wortes. ZB key = 'a' und das Wort = "secret". Dies würde "tfdsfq" werden. Sie können dies tun, indem Sie die Datei einlesen und dann für jeden Buchstaben eine Häufigkeitstabelle erstellen. Sie lesen auch in einer englischen Bibel. Dann können Sie einfach sehen, dass der am häufigsten verwendete Buchstabe im englischen Alphabet ein 'e' ist, und es lösen. Hinzugefügte Herausforderung: Verwenden Sie einen Schlüssel wie 'ab', der uns zugewiesen wurde. Gute Übung, um I / O zu verstehen.

  • Ein Barcode-Hersteller. Dieses Programm war eine Übung, um eine externe Bibliothek aufzurufen. Sie haben einen Code erhalten und mussten mit dem Barcode ein Bild erzeugen. Eine externe Bibliothek wurde verwendet, um das Bild zu generieren.

  • Ein genetischer Algorithmus zur Lösung des Problems der Handlungsreisenden. Dies war ein fortgeschritteneres Projekt für 2 oder 3 Personen. Sie beginnen mit einer zufälligen Route und diese Route verbessert sich ständig, bis Sie eine "gute Route" haben. Bonus: Erstellen Sie eine Karte mit der Route.

  • Ein funktionierendes lzw-Kompressionsprogramm . Dies war das letzte 4-Personen-Projekt. Die Parameter waren recht einfach. "Zip file.txt file.zip" oder ähnliches. Ein lustiges Projekt, aber das Verstehen des lzw-Algorithmus hat eine Weile gedauert.

Carra
quelle
Sehr interessant ... Auf welche Schule bist du gegangen? War das alles in deinem ersten Jahr?
Macneil
Es war ein Kurs, um die Menschen für die Fachrichtung Informatik zu begeistern. Nach diesem Jahr können Sie Ihre Spezialisierung noch ändern. Die Schüler kannten grundlegende Schleifen, einige I / O zum Bildschirm / Dateien und Funktionen.
Carra
3

Ein Taschenrechner wäre ein gutes Projekt zum Erlernen von Rechenoperationen. Sie können eine einfache menübasierte Konsolen-App oder eine grafische Benutzeroberfläche erstellen. Vier Funktionen (+, -, *, /) mit zusätzlichen Punkten für komplexere Dinge wie Quadratwurzel usw.

Für die Behandlung von Zeichenfolgen würde ich einige Validierungsprobleme vorschlagen. E-Mail-Adressen kommen in den Sinn - wenn sie nicht markiert sind, kann dies zu SQL-Injection-Lücken oder anderen Dingen führen, und ihre Validierung ist relativ einfach. Verwenden Sie zum Anhängen möglicherweise ein Programm, das Vor-, Mittel- und Nachnamen verwendet und diese mit Leerzeichen verknüpft. Nehmen Sie auch einen vollständigen Namen und analysieren Sie ihn in jede Komponente. Das erste wird im wirklichen Leben mehr verwendet als das zweite, aber ich konnte mir kein anderes Parsing-Szenario vorstellen, das einfach genug wäre.

Um statische Methoden zu demonstrieren, können Sie ein Problem mit der E-Mail-Suche zuweisen. Haben Sie eine Datei mit Namen und E-Mails, und der statische Konstruktor könnte die Namen / E-Mails mit einer statischen Methode in eine Liste aufnehmen, um die E-Mail für einen bestimmten Namen zu finden.

Hoffe, diese geben Ihnen einige Ideen! Viel Glück mit deiner Klasse.

Michael K
quelle
1
+1 Danke! Dies ist genau die Art von Antwort, die ich suche.
Macneil,
Spiele machen mehr Spaß als Taschenrechner.
3

Eine sehr interessante und coole Sache für einen Auftrag ist das Schreiben einer Implementierung von Conways Game of Life in 2D. Es lässt sich sehr gut auf grundlegende Array-Datenstrukturen abbilden, macht Spaß und ist recht einfach zu handhaben, erfordert jedoch noch einige Überlegungen. Es kann auch zu Neugier und Experimenten führen (KI).

Fortgeschrittene Schüler können eine Version in 3D schreiben, um zusätzliche Punkte zu erhalten.

Martin Wickman
quelle
3

Ich würde auf einem Primzahlgenerator iterieren.

Zuordnungen

  1. Primzahlen von 1 bis 100 drucken.
  2. Primzahlen von Eingabe1 bis Eingabe2 drucken.
  3. Performance-Daten der Prime Generation aufzeichnen und drucken.
  4. Graph Performance-Daten der Prime Generation.
  5. Algorithmusoptimierung des Primzahlengenerators durchlaufen.
Dacracot
quelle
2

Ich benutze die ACM-Bibliothek , um Intro-Schülern zu helfen, einfache Grafiken und Spiele zu erstellen. Wir waren in der Lage, einfache Zwei-Spieler-Spiele mit nur den von Ihnen beschriebenen Fähigkeiten zu spielen. Diese Woche machen sie das Fox and Hounds- Spiel.

Ich habe versucht, mich so lange wie möglich von der Konsolen-E / A fernzuhalten. Heutzutage ist dies für viele Studenten ein Fremdwort, da sie alle mit GUIs aufgewachsen sind. Daher konzentriere ich mich auf MVC, stelle das Modell richtig und füge die GUI erst hinzu, nachdem sie ihr Modell getestet haben. Das Testen erfolgt über automatisierte Komponententests und das Code Pad in BlueJ . Nein public static void main()ist nötig, niemals.

Barry Brown
quelle
interessant. Vielleicht würden Sie Ihre Erfahrungen in einem Artikel oder Blogeintrag festhalten?
2

Ich habe im letzten Jahrhundert auf Intro-Art unterrichtet, und es war BASIC, aber wie Sie wollte ich die Schüler dazu bringen, ein lustiges Projekt zu beginnen, das sie sich selbst ausgedacht haben. Also schlug ich eine Reihe von Möglichkeiten vor:

  • Einfaches Abenteuerspiel wie Wumpus
  • Sportsimulation (nur Text, Grafiken für den ambitionierten) für Baseball oder was auch immer
  • Wissenschaft, wie die Simulation der genetischen Evolution
  • Sport / Wissenschaft, wie Segelbootrennen
  • Finanzen, wie eine eigene Bank für die Menschen in Ihrem Haushalt oder Investitionen
  • Musik oder einfache Grafikspiele

... oder was auch immer die Schüler dachten. Sie kamen zu mir und sagten: "Wie wäre es mit einem Programm, um XYZ zu machen?" und ich würde immer "Großartig" sagen und sie dann vielleicht ein wenig anleiten, um es nicht zu kompliziert zu machen.

Normalerweise waren ihre Projekte ein paar hundert Codezeilen, und sie haben es immer genossen.

PS Ich gab diese Aufgabe, nachdem die Schüler mit grundlegenden Kontrollstrukturen, E / A, Arrays und sequentiellen Dateien vertraut waren. Es war ein Semesterprojekt, das einen Großteil ihrer Klasse ausmachte, und ich hatte Zwischenmeilenstein-Aufgaben, wie einen Umriss auf halbem Weg, also versuchten sie nicht, alles am Ende zu machen und gegen eine Wand zu stoßen. Ich wollte sie so früh wie möglich in dieses Thema einbeziehen, wenn sie genug Fähigkeiten hatten, um anzufangen, normalerweise in der 6. oder 8. Woche.

Mike Dunlavey
quelle
1

Ich habe von einem Lehrer ein Programm schreiben lassen, für das Sie Module geschrieben haben. Im Grunde war es ein Spiel und man musste ein Algo schreiben, um es zu lösen, alles war da, um es grafisch und hübsch zu machen und gut zu funktionieren. Vielleicht solltest du dein eigenes Spiel-Framework schreiben und ihnen grundlegende Tools geben, die verworrene Versionen von coolen Dingen sind, die sie später außerhalb der Box, in die du sie gesteckt hast, ausführen können.

Inkognito
quelle
1

In meinem Einführungskurs stachen drei Projekte bei mir heraus

Schreiben Sie ein Programm, um ein zufälliges Mondrian- Gemälde anzuzeigen.
Schreiben Sie den ersten Teil eines BrickBreaker-Spiels und lassen Sie den Ball in einem festgelegten Bereich herumspringen
Schreiben Sie ein textbasiertes Abenteuerspiel

Aus meiner Algorithmenklasse
Implementieren ein Serpinski-Dreieck

Diese vier Projekte gaben mir ein großartiges Verständnis für die Verarbeitung, Randomisierung, Grafik, Rekursion und Animation von Zeichenfolgen.

Jason
quelle
1

Sind alle Schüler in der Klasse CS Majors? Ich würde nicht raten. Ich würde mir Aufträge einfallen lassen, die auf die Majors in der Klasse zugeschnitten sind.

Beispiele:

  • Kunststudenten könnten ein Programm schreiben, das die Maße eines Stücks Leinwand annimmt und einen Rahmen, um die Größe der Leinwand zu berechnen, für das Malen nicht zur Verfügung stellt (da die Leinwand um den Rahmen gewickelt und geheftet wird).

  • Econ-Studenten können Zinseszinsen für einen Artikel berechnen.

  • Mathematikstudenten könnten Probleme aus Project Euler auswählen.

Kavet Kerek
quelle
1
Die Klasse ist für Majors und Nicht-Majors. Viele sind in der Biologie.
Macneil
Interessant. Idee: Finden Sie ein Bild von einzelligen Organismen, die im Wasser herumschwimmen. Konvertieren Sie das Bild in B & W. Schreiben Sie ein Programm, um die Anzahl der Organismen im Wasser zu zählen. Daraus ergeben sich alle möglichen interessanten Diskussionsthemen: Kantenerkennung, Unterscheidung zwischen Wasser und Nichtwasser, Staubbeseitigung usw.
Barry Brown,
gut für bio, die offensichtliche Sache, die in den Sinn kommt, sind zellulare Automaten. Sie können auf bioquest.org eine Beute machen , um ein paar Ideen zu bekommen.
Kavet Kerek
1

In der High School nahm ich an einem Einführungskurs teil und wir verwendeten Karel J. Robot . Es bietet eine Benutzeroberfläche zum Anzeigen Ihres Roboters und verfügt über eine Reihe grundlegender Sensoren und Bewegungsmethoden, die Sie erweitern müssen, damit er interessante Aufgaben ausführt. Ich denke, es ist gut, weil Roboter für Leute, die den Unterschied zwischen Software noch nicht verstanden haben, einfach zu verstehen sind.

Es gibt auch Processing , das ich gerade entdeckt habe und das ursprünglich dazu gedacht war, Programmieren zu lehren, und es ist auch in Java.

Nick Donohue
quelle
0

Ich werde hier der Dissenter sein. Ich denke, Sie sollten ihnen gültige Business-Typ-Probleme geben, um keine Playtoys zu lösen. Wenn es ihnen nicht ernst genug ist, um sich für die Art von Arbeit zu interessieren und sie zu motivieren, die sie tatsächlich als Profi ausführen, wäre es mir lieber, wenn Sie sie im Einführungskurs ausschließen würden. Bei echter Arbeit geht es nicht darum, coole Sachen zu machen, sondern die Bedürfnisse des Kunden zu erfüllen. Ich habe auch viele Leute gesehen, die nicht den Sprung zwischen dem, was sie in einem Spiel lernen, und der Verwendung der gleichen Techniken in der Geschäftsprogrammierung schaffen können.

Jeder leitende Entwickler und Einstellungsmanager, den ich kenne, ist von der Qualität der jüngsten Absolventen angewidert. Konzentrieren Sie sich auf das, was Sie lernen müssen, um in der realen Welt zu arbeiten, und vergessen Sie, dass es Spaß macht.

HLGEM
quelle
Ich denke, viele Studenten würden ein Geschäftsproblem interessant finden. Wenn Sie etwas Konkretes vorschlagen und Ihre Antwort verbessern können, wäre das hilfreich. Ich suche nach Einzelheiten.
Macneil
1
Es sollte ein Problem sein, das sie (leicht) mit ihrem TI-83-Rechner nicht machen können. Ein weiterer Steuerrechner wird es nicht schaffen.
Barry Brown
1
Diese Studenten sind neu im Programmieren und müssen in diesem Kurs ihre Babysitter-Schritte absolvieren. Es langweilig zu machen, ist vielleicht nicht die effizienteste Art, ihnen das Programmieren beizubringen, und wir sollten uns die besten Lehrer ansehen, anstatt sie zu zwingen, die Java-Spezifikation von Ende zu Ende zu rezitieren.
1
Nein. Diese Projekte sollen vor allem Spaß machen. Unterhaltsame Projekte können schwierig sein. Tatsächlich sind die meisten meiner Lieblingsprojekte schwieriger als die tägliche Programmierung, die ich bei der Arbeit mache.
Carra
2
Ich verstehe Ihren Standpunkt, aber ich bin zumindest teilweise und zumindest für einen Einführungskurs nicht einverstanden. Es gibt viele Möglichkeiten der Programmierung, und ich denke, ein Kurs wie dieser sollte verschiedene Dinge abdecken, die Programme tun können. Den Schülern zu zeigen, dass Computer nur für Probleme gut sind, die wir als "notwendig für das Geschäft" erachten, macht ein kreativer Programmierer nicht, weil dies ihre Denkweise einschränkt. Ich denke, dass ein gut gestalteter Kurs die Schüler dazu herausfordern würde, reale Probleme zu lösen, und zusätzlich die unterhaltsamen Dinge zeigt, die Computer tun können, wie das Programmieren eines Spiels
Nick Donohue,
0

Eine Aufgabe zum Erstellen eines albernen Widgets auf ihren Mobiltelefonen. Etwas, das sie ihren Freunden zeigen konnten. Ich habe ein supergünstiges AT & T-Telefon und es werden JAR-Dateien benötigt.

Paul Nathan
quelle
0

Die wichtigsten Aufgaben, die ich gesehen habe, zwingen die Leute, über etwas nachzudenken, das sie sonst nicht in Betracht gezogen hätten. Etwas ganz anderes als das einfache Kursmaterial, etwas, das unmöglich erscheint. Etwas, das mehrere gültige Lösungen hat.

Einige, die mich beeindruckt haben:

  1. Roshambo AIs (verwendet im AI-Kurs an der UOA). Eine einfache Funktion, die -1, 0, 1 für Stein, Papier, Schere zurückgibt. Die AIs spielen gegeneinander und die Statistiken werden von einem aggregierten Hilfsprogramm gesammelt. Diese Aufgabe überrascht die Menschen immer wieder, wie viele Ansätze machbar sind (und wie viele so schlecht abschneiden).

  2. Einfache Sortierprobleme mit unmöglichen Eigenschaften. Sortieren Sie eine Datei von unendlicher Länge mit endlichem Speicher. Dieses Problem hat mein Denken in Algorithmen erschüttert. Es gibt viele verwandte Probleme: Fenstermittelwerte für Daten mit unendlicher Länge usw., die jeweils eine Lösung für etwas erzwingen, das anscheinend unmöglich ist.

  3. Simulationsprobleme, die trivial erscheinen. Verkehrssimulationen (Fahrzeug, Netzwerk), Rennwagensimulationen (links, rechts, schneller, langsamer), Lebensmittelgeschäftsimulationen.

  4. Netzwerkprobleme (eine große Schwäche bei den Absolventen, mit denen ich in den letzten Jahren zusammengearbeitet habe). Peer-Netzwerkprobleme mit Handhelds, die beispielsweise die Komplexität von N-Sync-Problemen, Peer-Updates, Peer-Vertrauen usw. belegen.

  5. Kleine Sprachen (eine weitere Schwäche in den letzten Abschlüssen). Entwickeln Sie eine kleine Sprache für eine einfache Spiel-KI (Dame, Roshambo, Panzer, CSS-Mojo, Twitter-Bots). Das Nachdenken über Konzepte des Sprachdesigns, der Interpretation und des Handelns ist von grundlegender Bedeutung.

Bruce Alderson
quelle
Kennen Sie das Ergebnis von Papier, Stein und Schere oder sehen Sie, wie die Geschichte war?
Macneil
Ja, die Historien sind im C-Beispiel über Arrays verfügbar (dies gilt jedoch auch für Java, Ruby usw.). Schauen Sie sich die ursprüngliche Seite des Wettbewerbs an: webdocs.cs.ualberta.ca/~darse/rsbpc.html
Bruce Alderson