Quali sono alcuni buoni compiti per un corso introduttivo, per raggiungere gli studenti di oggi? [chiuso]

25

Insegno periodicamente una introduzione al corso di programmazione con Java . Voglio offrire ai miei studenti alcuni interessanti compiti che possono riguardare o trovare interessanti . Per lo meno, voglio degli incarichi che abbiano senso e abbiano una coesione interna (ad esempio, alcuni pessimi esercizi di programmazione sembrano fatti apposta solo per poter utilizzare il più recente costrutto di programmazione coperto).

Per darti un'idea dello scope, ecco cosa viene coperto :

  • Le assegnazioni devono essere in Java, utilizzando alcune librerie esterne possono essere fatte, ma dovrebbe essere una semplice API e non un framework completo
  • Variabili, primitive e archi
  • Input e output della console
  • if , for , while
  • Operatori aritmetici e logici
  • Grafica semplice con disegno di linee e forme
  • Metodi statici
  • Matrici monodimensionali

Gli studenti non entreranno in argomenti avanzati (ad es., nessuna ricorsione, nessuna enfasi sull'ereditarietà). Quindi, io sono non in cerca di progetti complessi: "Invitali a scrivere un compilatore C. L'ho fatto quando avevo 5 anni ed era l'unico modo che ho imparato!"

Se hai idee più avanzate dell'ambito, inseriscile nella domanda "Sfida" sotto, e non questa.

Invece, quello che sto cercando sono idee interessanti che possono essere realizzate in un breve programma. Ad esempio:

  • Gli studenti possono scrivere una versione di console del generatore di "Nome di Star Wars" . Questo è effettivamente la lettura di stringhe e l'utilizzo di substring , ma penso che sia divertente. Una variante simile potrebbe essere un programma " Mad Libs ". Ho usato questo cinque anni fa, e forse è già "vecchio".

  • Utilizzando alcuni trigsi forniti, gli studenti possono disegnare poligoni regolari e creare interessanti forme a spirale.

  • Inoltre non è fuori questione utilizzare una semplice classe di animazione con la maggior parte del codice a loro fornito. E se conosci un servizio Twitter o Facebook a cui puoi accedere con una semplice API, sarei molto interessato a sapere.

Tieni presente che questa domanda è diversa da " Domande impegnative in Java per principianti "Domanda. Non sto cercando di per sé impegnativo, solo interessante. Penso che se gli studenti lavorano su qualcosa in cui possono facilmente rispondere "perché qualcuno dovrebbe voler programmarlo?" allora impareranno meglio.

Anche problemi semplici come il calcolo di miglia per gallone possono essere buoni. Anche se, se c'è un modo per aggiornarlo per essere più rilevanti, tanto meglio. Se hai un esercizio da qualche altra parte (un libro o un sito web), cita la fonte.

Per aiutarti a pensare alla tipica matricola oggi, controlla l'elenco di Mindset di Beloit , per molti esempi che sicuramente ti faranno sentire vecchio.

    
posta Macneil 12.11.2010 - 18:58
fonte

17 risposte

9

Considerati i vincoli, suggerirei di implementare una versione di Hangman. Permetterebbe agli studenti di dimostrare tutte le tecniche a cui li state introducendo, senza essere eccessivamente complessi.

Può anche essere usato come un progetto in via di sviluppo mentre il corso avanza. per esempio. una volta che hai coperto stringhe e variabili inizia come una versione di testo

per es.

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

quindi introduci dei loop per rimuovere l'elemento taglia e incolla dal codice mentre le dieci ipotesi iniziano il conto alla rovescia ... aumentando il numero di elementi grafici lineari e la persona stick appesa / salvata alla fine del corso di 5 settimane.

Come la maggior parte delle altre persone che hanno esperienza di reclutamento e interviste ai programmatori, mi fa davvero rabbrividire che questo livello di insegnamento è necessario all'università, ma purtroppo continuerà probabilmente ad essere necessario fino a quando le scuole non tratteranno la programmazione come soggetto serio alla pari con la matematica o le scienze

    
risposta data 21.11.2010 - 02:04
fonte
7

Sembra che un gioco di avventura di testo possa essere un compito straordinario da qualche parte a metà semestre. Ho avuto una lezione che ci ha fatto giocare a Colossal Cave Adventure e poi fare il nostro gioco. Mi ha insegnato molti dei costrutti di base nelle prime fasi, ed è stato molto divertente farci coinvolgere tutti.

    
risposta data 12.11.2010 - 19:26
fonte
7

Che ne dici di utilizzare un problema o due dal link Alcuni di questi sono piuttosto interessanti e si potrebbe vedere il vantaggio di scrivere un programma per risolverli . Sono abbastanza piccoli da poter essere eseguiti in vari modi come compiti. Un altro che mi piacerebbe usare è trovare $ 1.00 parole. Ogni lettera dell'alfabeto vale la sua posizione in pochi centesimi, a = 1, b = 2. Quante parole $ 1,00 dollari puoi trovare? Ciò potrebbe comportare il file i / o (lettura in un dizionario), array, looping ecc.

    
risposta data 12.11.2010 - 21:57
fonte
6
  • Implementa un gioco di monopolio. Il monopolio ha una sequenza ovvia e si presta molto facilmente alla divisione in funzioni. Richiede anche solo un array monodimensionale e alcune classi di base. La logica è abbastanza semplice in modo che gli studenti pensino più a "come" che a "cosa" e ciò si traduce in qualcosa che può essere dimostrato agli altri.

  • Fornisci loro un file crittografato che è stato crittografato con alcune regole reversibili e chiedi loro di scrivere un decodificatore (rendilo abbastanza semplice). Ciò fornisce un ulteriore incentivo per risolverlo a causa del mistero del contenuto del messaggio.

  • Non so perché tu copri solo matrici unidimensionali e non matrici (in realtà non sono poi così diverse), ma se sei disposto a includerlo nel programma, il Game of Life di Jon Conway è anche relativamente facile e si traduce in qualcosa di divertente.

  • Un gioco come gli scacchi richiede un po 'di riflessione ma è ancora entro i confini di ciò che un principiante può fare con un'eredità minima (pezzi specifici ereditati da un pezzo di classe generale e la scheda contiene oggetti di tipo Piece) e 2D array (puoi scegliere di semplificarlo non richiedendo di implementare roba dura come il rilevamento di stelmate o incapacità di castigare se un pezzo nemico sta minacciando il percorso di arrocco).

risposta data 12.11.2010 - 19:42
fonte
4

Abbiamo creato diversi progetti con solo i / o, funzioni e operatori condizionali a scuola. Tutto fatto prima che imparassimo sulla programmazione orientata agli oggetti. Questi progetti sono avanzati lentamente per diventare sempre più difficili. Basti dire che le 4 ore che abbiamo avuto ogni settimana non erano quasi sufficienti verso la fine dell'anno.

Tutti questi progetti sono stati fatti con solo funzioni e amp; I / O:

  • Un gioco che impara. Prendi un numero di bastoncini, il pc prende un certo numero di bastoncini. Ripetere. L'ultimo che tiene in mano un bastone perde. Dovevamo creare un semplice programma di autoapprendimento che migliorasse dopo ogni partita. Un buon esempio per imparare gli array 2D.

  • Un decodificatore. conosci la crittografia Caesar, scegli una lettera e aggiungi il valore della lettera a ogni lettera della tua parola. Per esempio. chiave = 'a' e la parola="segreto". Questo diventerebbe "tfdsfq". Può essere fatto leggendo nel file e quindi creando una tabella di frequenza per ogni lettera. Leggi anche in una bibbia inglese. Quindi puoi semplicemente vedere che la lettera più usata nell'alfabeto inglese è una 'e' e risolverla. Sfida aggiunta: usa una chiave come "ab" che era il nostro compito. Buon esercizio per capire l'i / o.

  • Un creatore di codici a barre. Questo programma è stato un esercizio per chiamare una libreria esterna. Hai ottenuto un codice e hai dovuto generare un'immagine con il codice a barre. Per generare l'immagine è stata utilizzata una libreria esterna.

  • Un algoritmo genetico per risolvere il problema dei commessi viaggiatori. Si trattava di un progetto più avanzato per 2 o 3 persone. Si inizia con un percorso casuale e questa rotta migliora tutto il tempo finché non si ha una "buona rotta". Bonus: crea una mappa con il percorso.

  • Un programma di compressione lzw funzionante . Questo è stato il progetto finale di 4 persone. I parametri erano abbastanza semplici. "Zip file.txt file.zip" o qualcosa di simile. Progetto divertente ma la comprensione dell'algoritmo di lzw ha richiesto un po 'di tempo.

risposta data 17.11.2010 - 19:53
fonte
3

Un calcolatore sarebbe un buon progetto per l'apprendimento delle operazioni aritmetiche. Puoi renderlo una semplice app console basata su menu o una GUI. Quattro funzioni (+, -, *, /) per iniziare, con punti extra per cose più complesse come la radice quadrata, ecc.

Per la gestione delle stringhe, suggerirei alcuni problemi di convalida. Gli indirizzi e-mail vengono in mente - lasciandoli deselezionati può portare a buchi di SQL injection, o altre cose, e sono relativamente semplici da convalidare. Per accodare, magari hai un programma che può prendere il primo, il secondo nome e il cognome e metterli insieme con gli spazi, e anche prendere un nome completo e analizzarlo in ogni componente. Il primo è usato più del secondo nella vita reale, ma non sono stato in grado di pensare a un altro scenario di analisi che sarebbe stato abbastanza semplice.

Per dimostrare i metodi statici, è possibile assegnare un problema di ricerca della posta elettronica. Avere un file di nomi ed e-mail e il costruttore statico potrebbe inserire i nomi / e-mail in un elenco, con un metodo statico per trovare l'e-mail per un determinato nome.

Spero che ti diano delle idee! Buona fortuna con la tua classe.

    
risposta data 12.11.2010 - 19:28
fonte
3

Una cosa molto interessante e interessante per un compito è scrivere un'implementazione del Gioco della vita di Conway in 2D. Si adatta molto bene alle strutture dati di base dell'array, è divertente e abbastanza facile da fare, ma richiede ancora un po 'di riflessione. Potrebbe aprire anche qualche curiosità e sperimentazione (AI).

Gli studenti avanzati possono scrivere una versione in 3D per punti extra.

    
risposta data 12.11.2010 - 20:19
fonte
3

Vorrei ripetere su un generatore di numeri primi.

Assegnazioni

  1. Stampa i primi da 1 a 100.
  2. Stampa i primi da input1 a input2.
  3. Registra e stampa i dati sulle prestazioni di prima generazione.
  4. Dati sulle prestazioni del grafico di prime generazione.
  5. Iterate sull'ottimizzazione dell'algoritmo di il generatore di numeri primi.
risposta data 17.11.2010 - 19:07
fonte
2

Sto utilizzando la libreria ACM per aiutare gli studenti di introduzione a fare grafica e giochi semplici. Siamo stati in grado di fare giochi base, basati su due giocatori con nient'altro che le abilità che hai delineato. Questa settimana stanno facendo il gioco Fox and Hounds .

Ho cercato di evitare l'I / O della console il più a lungo possibile. Al giorno d'oggi è un concetto estraneo a molti studenti, poiché sono tutti cresciuti con le GUI. Quindi mi concentro su MVC, ottenendo il modello corretto e aggiungendo la GUI solo dopo aver testato il loro modello. I test vengono eseguiti tramite test unitari automatizzati e il riquadro dei codici in BlueJ . No public static void main() è necessario, sempre.

    
risposta data 13.11.2010 - 05:19
fonte
2

Ho insegnato l'intro modo nel secolo scorso, ed era BASIC, ma come te volevo che gli studenti avessero intrapreso un divertente progetto di loro invenzione. Quindi ho suggerito un sacco di possibilità:

  • Un semplice gioco di avventura, come Wumpus
  • Simulazione sportiva (solo testo, grafica per gli ambiziosi) per il baseball o qualsiasi altra cosa
  • Scienza, come simulare l'evoluzione genetica
  • Sport / scienza, come le corse in barca a vela
  • Finanza, come avere la propria banca per le persone della tua famiglia o gli investimenti
  • Musica o semplici giochi grafici

... o qualsiasi cosa pensassero gli studenti. Verrebbero da me e diranno "che ne dici di un programma per fare XYZ?" e direi sempre "Grande", e quindi magari guidarli un po 'per non renderlo troppo complicato.

Di solito i loro progetti sono diventati poche centinaia di righe di codice e si sono sempre divertiti.

P.S. Ho dato questo incarico dopo che gli studenti erano competenti con strutture di controllo di base, I / O, array e file sequenziali. Si trattava di un progetto a termine, una parte importante del loro grado, e ho avuto incarichi intermedi intermedi, come una parte del percorso, quindi non hanno provato a fare tutto alla fine e hanno colpito un muro. Volevo coinvolgerli all'inizio del semestre il più possibile, quando avevano abbastanza competenze per iniziare, in genere intorno alla settimana 6 o 8.

    
risposta data 17.11.2010 - 22:38
fonte
1

Ho avuto un insegnante per scrivere un programma per il quale hai scritto i moduli. Fondamentalmente, era un gioco e dovevi scrivere un algo per risolverlo, tutto era lì per renderlo grafico e bello e funzionare bene. Forse dovresti scrivere la tua struttura di gioco e dare loro gli strumenti di base che sono versioni stupide di cose interessanti che possono fare in un secondo momento, fuori dagli schemi in cui le hai inserite.

    
risposta data 17.11.2010 - 16:47
fonte
1

Nel mio corso introduttivo, tre progetti mi sono stati mostrati

Scrivi un programma per visualizzare un Mondrian pittura
Scrivi la prima parte di un gioco BrickBreaker, fai rimbalzare la palla all'interno di un'area specifica Scrivi un gioco di avventura basato sul testo

Dalla mia classe di algoritmi
Implementa un triangolo Serpinski

Questi quattro progetti mi hanno dato una grande comprensione dell'elaborazione delle stringhe, della randomizzazione, della grafica, della ricorsione e dell'animazione.

    
risposta data 17.11.2010 - 17:27
fonte
1

Tutti gli studenti sono in classe CS? La mia ipotesi non lo sarebbe. Mi piacerebbe trovare incarichi che siano personalizzati per le major della classe.

Esempi:

  • Gli studenti di arte possono scrivere un programma che prende le dimensioni di un pezzo di tela e una cornice per calcolare la quantità della tela non disponibile per la pittura (a causa del wrapping e della graffatura della tela attorno al fotogramma). / p>

  • Gli studenti di Econ potrebbero calcolare l'interesse composto su un articolo.

  • Gli studenti di matematica potevano scegliere i problemi da Project Euler.

risposta data 17.11.2010 - 20:10
fonte
1

Al liceo, ho seguito un corso introduttivo di programmazione e abbiamo utilizzato Karel J. Robot . Fornisce una GUI per visualizzare il tuo robot e ha un set di sensori e metodi di movimento molto semplice che devi estendere per farlo fare cose interessanti. Penso che sia buono perché i robot sono facili da capire per le persone che non hanno ancora sviluppato una conoscenza della differenza tra il software.

C'è anche Processing , che ho appena scoperto, che è stato originariamente progettato per insegnare la programmazione, ed è anche in java.

    
risposta data 18.11.2010 - 18:23
fonte
0

Sarò il dissenziente qui. Penso che dovresti dare loro problemi di tipo commerciale validi per risolvere non playtoys. Se non sono abbastanza seri da interessarsi e motivarsi con il tipo di lavoro che faranno realmente come professionista, preferirei che li abbia bocciati nel corso introduttivo. Il vero lavoro non è fare cose interessanti, ma soddisfare le esigenze del cliente. Ho anche visto un sacco di persone che possono fare il salto tra ciò che stanno imparando in un gioco e usando le stesse tecniche nella programmazione aziendale.

Ogni senior sviluppatore e responsabile delle assunzioni che conosco è disgustato dalla qualità dei neolaureati. Cerca di concentrarti su ciò di cui hanno bisogno per imparare a lavorare nel mondo reale e dimentica di renderlo divertente.

    
risposta data 12.11.2010 - 19:56
fonte
0

Un incarico per costruire un widget stupido sui loro telefoni cellulari. Qualcosa che potrebbero mostrare ai loro amici. Ho un telefono AT & T super-economico e prende file jar di qualche tipo.

    
risposta data 12.11.2010 - 22:56
fonte
0

I compiti più importanti che ho visto costringono le persone a pensare a qualcosa che altrimenti non avrebbero considerato. Qualcosa del tutto al di fuori del semplice materiale del corso, qualcosa che sembra impossibile. Qualcosa che ha più soluzioni valide.

Alcuni che mi hanno colpito:

  1. AI di Roshambo (usati nel corso di intelligenza artificiale all'UOA). Una semplice funzione che restituisce -1, 0, 1 per il rock, la carta, le forbici. Le IA sono un po 'l'una contro l'altra e le statistiche sono raccolte da un programma di utilità aggregato. Questo incarico sorprende costantemente le persone in quanti approcci sono fattibili (e quanti si comportano così male).

  2. Semplici problemi di ordinamento con caratteristiche impossibili. Ordina un file di lunghezza infinita con memoria finita. Questo problema ha scosso le mie fondamenta di pensiero negli algoritmi. Ci sono molti problemi correlati: medie con finestre su dati di lunghezza infinita, ecc., Ognuno costringe una soluzione a qualcosa apparentemente impossibile.

  3. Problemi di simulazione che sembrano banali. Simulazioni del traffico (veicolo, rete), simulazioni di auto da corsa (sinistra, destra, più veloce, più lento), simulazioni di negozi di alimentari.

  4. Problemi di rete (una grande debolezza nei laureati con cui ho lavorato negli ultimi anni). Problemi di rete peer con i palmari, ad esempio, dimostrando la complessità dei problemi di sincronizzazione n, gli aggiornamenti peer, la peer trust, ecc.

  5. Piccole lingue (un'altra debolezza nei recenti voti). Sviluppa un piccolo linguaggio per una semplice IA di gioco (dama, roshambo, carri armati, mojo CSS, bot di Twitter). Pensare a concetti di design, interpretazione e azioni del linguaggio è fondamentale.

risposta data 21.11.2010 - 21:14
fonte

Leggi altre domande sui tag