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.
quelle
Antworten:
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
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
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Ich würde auf einem Primzahlgenerator iterieren.
Zuordnungen
quelle
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.quelle
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:
... 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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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:
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).
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.
Simulationsprobleme, die trivial erscheinen. Verkehrssimulationen (Fahrzeug, Netzwerk), Rennwagensimulationen (links, rechts, schneller, langsamer), Lebensmittelgeschäftsimulationen.
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.
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.
quelle