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


25

Insegno periodicamente un'introduzione al corso di programmazione usando Java . Voglio dare ai miei studenti alcuni compiti entusiasmanti che possono riguardare o trovare interessanti . Per lo meno, voglio incarichi che abbiano un senso e che abbiano una coesione interna (ad esempio, alcuni pessimi esercizi di programmazione sembrano inventati solo in modo da dover usare il costrutto di programmazione più recente coperto).

Per darti un'idea di portata, ecco cosa viene trattato :

  • Le assegnazioni devono essere in Java, è possibile utilizzare una libreria esterna, ma dovrebbe essere un'API semplice e non un framework completo
  • Variabili, primitivi e stringhe
  • Ingresso e uscita della console
  • if, for,while
  • Operatori aritmetici e logici
  • Grafica semplice con disegno a linee e forme
  • Metodi statici
  • Matrici unidimensionali

Gli studenti non affronteranno argomenti avanzati (ad esempio, nessuna ricorsione, nessuna enfasi sull'eredità). Così, sto non cercando progetti complessi: "Chiedete loro di scrivere un compilatore C l'ho fatto quando avevo 5 ed era l'unico modo che ho imparato."

Se hai idee più avanzate dell'ambito, pubblicale sulla domanda "Sfidante" collegata di seguito e non su questa.

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

  • Gli studenti possono scrivere una versione per console del generatore "Star Wars Name" . Questo sta effettivamente leggendo le stringhe e usando substring, ma penso che sia divertente. Una variazione simile sarebbe un programma " Mad Libs ". L'ho usato cinque anni fa, e forse è già "stantio".

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

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

Si noti che questa domanda è diversa dalla domanda " Sfide Java per principianti ". Non sto cercando di per sé una sfida, solo interessante. Penso che se gli studenti lavorano su qualcosa in cui possono facilmente rispondere "perché qualcuno dovrebbe mai voler programmarlo?" allora impareranno meglio.

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

Per aiutarti a pensare alla matricola tipica oggi, dai un'occhiata all'elenco Beloit Mindset , per molti esempi che ti faranno sicuramente sentire vecchio.


Solo per curiosità, a quale livello di studenti stai insegnando di pensare che argomenti come la ricorsione e il design orientato agli oggetti siano troppo avanzati? Questi argomenti sono stati approfonditi nel mio primo semestre, lezione introduttiva di programmazione. Penso che stai facendo un cattivo servizio ai tuoi studenti se provi a rendere i corsi troppo semplicistici.
Mayra,

@Mayra: questo è per l'introduzione al corso di programmazione, il primo corso per major CS. Sto cercando interessanti problemi che gli studenti possano usare nelle prime 5 settimane (o anche nel primo giorno), e non solo alla fine. È una vera sfida lavorare con questi requisiti (e credetemi che alcuni problemi sono fuori dal mio controllo), quindi mi rivolgo a voi ragazzi per chiedere aiuto.
Macneil,

Risposte:


9

Dati i vincoli, suggerirei di implementare una versione di Hangman. Ciò consentirebbe agli studenti di dimostrare tutte le tecniche a cui le state introducendo, senza essere eccessivamente complesse.

Può anche essere utilizzato come progetto di sviluppo man mano che il corso avanza. ad es. una volta che hai coperto stringhe e variabili inizia come una versione di testo

per esempio

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

quindi introdurre i loop per rimuovere l'elemento taglia e incolla dal codice mentre le 10 ipotesi contano ... costruendo fino ad avere una linea grafica e la persona stick che viene appesa / salvata alla fine del corso di 5 settimane.

Come la maggior parte delle altre persone che hanno esperienza nel reclutamento e nel colloquio con i programmatori, mi fa davvero sentire che questo livello di insegnamento è necessario all'università, ma purtroppo probabilmente continuerà a essere necessario fino a quando le scuole considerano la programmazione come una materia seria alla pari di matematica o scienze


Grande idea! Penso che userò questo. :-) A proposito, cosa intendi per "livello di insegnamento"? Come nei costi?
Macneil,

È più un problema per la mancanza di lezioni di programmazione prima dell'università. Immagina di arrivare all'università per fare chimica e passare il primo mandato a parlare di atomi, molecole ed elettroni. 3 anni sono troppo brevi per capire l'informatica.
Michael Shaw,

Questa idea mi piace molto, non è necessaria una grafica complessa, può essere eseguita abbastanza bene su una riga di comando. È divertente e non è ancora un altro risolutore di problemi matematici.
Joppe,

7

Sembra che un gioco di avventura testuale potrebbe essere un compito formidabile da qualche parte a metà semestre. Avevo una classe che ci ha fatto giocare a Colossal Cave Adventure e poi creare il nostro gioco. Mi ha insegnato un sacco di costrutti di base all'inizio, ed è stato molto divertente fare in cui tutti sono entrati.


2
Sembra divertente, ma tienilo piccolo.

7

Che ne dici di usare un problema o due da http://projecteuler.net/ Alcuni di questi sono piuttosto interessanti e si potrebbe vedere il vantaggio di scrivere un programma per risolverli. Sono abbastanza piccoli che molti possono essere svolti come incarichi. Un altro che mi piace usare è trovare $ 1,00 parole. Ogni lettera dell'alaphabet vale la sua posizione in centesimi cioè a = 1, b = 2. Quante parole da $ 1,00 puoi trovare? Ciò potrebbe comportare l'I / O dei file (lettura in un dizionario), array, loop ecc.


1
+1 per Project Euler. Molto bello. Sebbene alcuni dei problemi siano un po 'troppo avanzati, ce ne sono molti che non lo sono.
Macneil,

Adoro il Project Euler ma non sono così sicuro che sarebbe stato divertente se avessi fatto gli esercizi all'università.
Oliver Weiler,

No, non tutti sarebbero divertenti ma alcuni penso che saremo delle buone scelte
Gratzy

6
  • Implementa un gioco Monopoli. 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 si traduce in qualcosa che può essere dimostrato agli altri.

  • Dai loro un file crittografato che è stato crittografato con una regola reversibile e chiedi loro di scrivere un decodificatore (rendilo comunque abbastanza semplice). Questo dà un ulteriore incentivo a risolverlo a causa del mistero sul contenuto del messaggio.

  • Non so perché copri solo matrici monodimensionali e non matrici (in realtà non sono poi così diverse), ma se sei disposto a includerlo nel programma del gioco della vita di Jon Conway è anche relativamente semplice e si traduce in qualcosa divertimento.

  • Un gioco come gli scacchi richiede qualche pensiero, 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 Pezzo) e matrici 2D (puoi scegliere di semplificarlo non richiedendo di implementare roba dura come il rilevamento di stelmate o l'incapacità di fortificare se un pezzo nemico sta minacciando il percorso di lancio.


+1 per il suggerimento sul gioco Monopoli. Per quanto riguarda gli array 2D, sono assolutamente d'accordo sul fatto che possano portare a incarichi molto interessanti. Tuttavia, ci sono vincoli che lo rendono così impossibile per gli array 2D (ad esempio, il libro di testo è già stato risolto, e un miliardo di altre questioni politiche di facoltà con cui non ti annoierò, né ti annoierò con la mia opinione personale su questi importa dal mio controllo).
Macneil,

Ah, abbiamo dovuto creare un gioco di monopolio a scuola. E un interruttore di crittografia.
Carra,

+1 per il monopolio. Una volta che gli studenti lo hanno codificato, chiedi loro di generare le probabilità di atterraggio sulle varie proprietà. Questa conoscenza aiuta davvero strategicamente.
joshdick,

4

Abbiamo creato alcuni progetti con solo I / O, funzioni e operatori condizionali a scuola. Tutto fatto prima di conoscere la programmazione orientata agli oggetti. Questi progetti sono progrediti lentamente per essere sempre più difficili. Basti dire che le 4 ore che abbiamo trascorso ogni settimana non sono state quasi sufficienti verso la fine dell'anno.

Tutti questi progetti sono stati realizzati con solo funzioni e i / o:

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

  • Una violazione del codice. Conosci la crittografia Cesare, scegli una lettera e aggiungi il valore della lettera a ciascuna lettera della tua parola. Ad esempio chiave = 'a' e la parola = "segreto". Questo diventerebbe "tfdsfq". Può essere fatto leggendo il 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 dell'alfabeto inglese è una 'e' e risolverla. Aggiunta sfida: usa una chiave come 'ab' che era il nostro compito. Buon esercizio per capire l'I / O.

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

  • Un algoritmo genetico per risolvere il problema dei venditori ambulanti. Questo era un progetto più avanzato per 2 o 3 persone. Si inizia con un percorso casuale e questo percorso migliora continuamente fino a quando non si dispone di un "percorso valido". Bonus: crea una mappa con il percorso.

  • Un programma di compressione lzw funzionante . Questo è stato il progetto definitivo per 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 del tempo.


Molto interessante ... A che scuola sei andato? È stato tutto nel tuo primo anno?
Macneil,

Era un corso per riscaldare le persone per la specializzazione in ingegneria informatica. Potresti ancora cambiare la tua specializzazione dopo quell'anno. Gli studenti conoscevano i loop di base, alcuni i / o sullo schermo / file e funzioni.
Carra,

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: lasciarli deselezionati può portare a buchi di iniezione SQL o altre cose e sono relativamente semplici da convalidare. Per aggiungere, forse avere un programma che può prendere il nome, il secondo e il cognome e metterli insieme con 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 abbastanza semplice.

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

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


1
+1 Grazie! Questo è esattamente il tipo di risposta che sto cercando.
Macneil,

I giochi sono più divertenti dei calcolatori.

3

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

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


3

Vorrei ripetere un generatore di numeri primi.

assegnazioni

  1. Stampa numeri primi da 1 a 100.
  2. Stampa numeri primi da input1 a input2.
  3. Registra e stampa i dati sulle prestazioni di prima generazione.
  4. Grafico dei dati sulle prestazioni di prima generazione.
  5. Iterate sull'ottimizzazione dell'algoritmo del generatore di numeri primi.

2

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

Ho cercato di stare lontano dall'I / O della console il più a lungo possibile. Al giorno d'oggi è un concetto straniero per 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 modello. I test vengono effettuati tramite test di unità automatizzati e Code Pad in BlueJ . Non public static void main()è necessario, mai.


interessante. Magari potresti scrivere le tue esperienze in un articolo o in un post di blog?

2

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

  • Semplice gioco di avventura, come Wumpus
  • Simulazione sportiva (solo testo, grafica per gli ambiziosi) per baseball o altro
  • La scienza, come simulare l'evoluzione genetica
  • Sport / scienza, come la corsa in barca a vela
  • Finanza, come avere una propria banca per le persone in casa o investimenti
  • Musica o semplici giochi grafici

... o qualunque cosa gli studenti abbiano pensato. Venivano da me e dicevano "che ne dici di un programma per fare XYZ?" e direi sempre "Fantastico", e poi forse li guiderei un po 'per non renderlo troppo complicato.

Di solito i loro progetti finivano per essere alcune centinaia di righe di codice e loro si sono sempre divertiti.

PS Ho dato questo incarico dopo che gli studenti erano competenti con le strutture di controllo di base, I / O, array e file sequenziali. Era un progetto a termine, una parte importante del loro grado, e avevo compiti intermedi intermedi, come uno schema a metà strada, quindi non hanno provato a fare tutto alla fine e hanno colpito un muro. Volevo coinvolgerli il prima possibile nel semestre, quando avevano abbastanza competenze per iniziare, in genere intorno alla settimana 6 o 8.


1

Ho avuto un insegnante per scrivere un programma per il quale hai scritto moduli. Fondamentalmente, era un gioco e dovevi scrivere un algo per risolverlo, tutto era lì per renderlo grafico e carino e funzionare bene. Forse dovresti scrivere il tuo framework di gioco e fornire loro strumenti di base che sono versioni stupide di cose interessanti che possono fare in un momento successivo al di fuori del riquadro in cui le hai inserite.


1

Nel mio corso introduttivo, tre progetti mi hanno colpito

Scrivi un programma per visualizzare un dipinto casuale di Mondrian
Scrivi la prima parte di un gioco BrickBreaker, fai rimbalzare la palla all'interno di un'area fissa
Scrivi un gioco di avventura basato su testo

Dalla mia classe di algoritmi
Implementa un triangolo di Serpinski

Questi quattro progetti mi hanno permesso di comprendere a fondo l'elaborazione delle stringhe, la randomizzazione, la grafica, la ricorsione e l'animazione.


1

Tutti gli studenti della classe CS sono maggiori? La mia ipotesi non lo sarebbe. Verrei con incarichi su misura per i maggiori della classe.

Esempi:

  • Gli studenti d'arte potrebbero scrivere un programma che prende le dimensioni di un pezzo di tela e una cornice per calcolare la quantità della tela non sarebbe disponibile per la pittura (a causa dell'avvolgere e pinzare la tela attorno alla cornice).

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

  • Gli studenti di matematica potrebbero scegliere i problemi dal Progetto Euler.


1
La classe è per major e non major. Molti sono in biologia.
Macneil,

Interessante. Idea: trova un'immagine di organismi monocellulari che nuotano nell'acqua. Converti l'immagine in bianco e nero. Scrivi un programma per contare il numero di organismi nell'acqua. Ciò solleverà tutti i tipi di argomenti di discussione interessanti: rilevamento dei bordi, differenziazione tra acqua e non acqua, eliminazione della polvere, ecc.
Barry Brown,

bene per la bio, la cosa ovvia che mi viene in mente sono gli automi cellulari. Puoi prendere un bottino su bioquest.org per avere qualche idea.
Kavet Kerek,

1

Al liceo, ho seguito un corso introduttivo di programmazione e abbiamo usato Karel J. Robot . Fornisce una guida per la visualizzazione del tuo robot e ha un set molto semplice di sensori e metodi di movimento 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 comprensione della differenza tra il software.

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


0

Sarò il dissidente qui. Penso che dovresti dare loro validi problemi di tipo aziendale per risolvere non i playtoys. Se non sono abbastanza seri da essere interessati e motivati ​​dal tipo di lavoro che svolgeranno effettivamente come professionisti, preferirei che li hai respinti nel corso di introduzione. Il vero lavoro non consiste nel creare cose interessanti, ma nel soddisfare le esigenze del cliente. Ho visto anche molte persone che non riescono a fare il salto tra ciò che imparano in un gioco e l'uso delle stesse tecniche nella programmazione aziendale.

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


Penso che molti studenti troverebbero interessante un problema commerciale. Se puoi suggerire qualcosa di concreto e migliorare la tua risposta sarebbe utile. Sto cercando dettagli.
Macneil,

1
Dovrebbe essere un problema che non possono fare (facilmente) sul loro calcolatore TI-83. Ancora un altro calcolatore delle imposte non lo taglierà.
Barry Brown,

1
Questi studenti non hanno familiarità con la programmazione e hanno bisogno di fare da babysitter in questo corso. Renderlo noioso non è forse il modo più efficace per insegnare loro come programmare e dovremmo guardare ai migliori insegnanti invece di farli semplicemente recitare le specifiche Java da un capo all'altro.

1
No. Questi progetti dovrebbero soprattutto essere divertenti. I progetti divertenti possono essere difficili. In effetti, la maggior parte dei miei progetti per animali domestici sono più difficili della programmazione quotidiana che lavoro.
Carra,

2
Vedo il tuo punto, ma rispettosamente non sono d'accordo, almeno in parte, e almeno per un corso introduttivo. Ci sono molte strade di programmazione che si possono prendere e penso che un corso come questo dovrebbe coprire diverse cose che i programmi possono fare. Mostrare agli studenti che i computer sono utili solo per i problemi che riteniamo "necessari per le imprese" non crea un programmatore creativo, perché limita la loro mentalità. Penso che un corso ben progettato sfiderebbe gli studenti a risolvere i problemi del mondo reale, oltre a mostrare le cose divertenti che i computer possono fare, come programmare un gioco
Nick Donohue,

0

Un compito per la creazione di un widget stupido sui loro telefoni cellulari. Qualcosa che potevano mostrare ai loro amici. Ho un telefono AT&T super economico e richiede file jar di qualche tipo.


0

I compiti più importanti che ho visto costringono le persone a pensare a qualcosa che altrimenti non avrebbero preso in considerazione. Qualcosa di completamente al di fuori del semplice materiale didattico, qualcosa che sembra impossibile. Qualcosa che ha più soluzioni valide.

Alcuni che mi hanno colpito:

  1. Roshambo AI (utilizzato nel corso AI presso UOA). Una semplice funzione che restituisce -1, 0, 1 per rock, carta, forbici. Gli IA sono uno contro l'altro e le statistiche sono raccolte da un programma di utilità aggregato. Questo incarico sorprende costantemente le persone su quanti approcci sono praticabili (e quanti si comportano così male).

  2. Problemi di ordinamento semplici con caratteristiche impossibili. Ordina un file di lunghezza infinita con memoria finita. Questo problema ha scosso le mie basi del pensiero negli algoritmi. Esistono molti problemi correlati: medie con finestre su dati a lunghezza infinita, ecc., Ognuno forza una soluzione a qualcosa apparentemente impossibile.

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

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

  5. Piccole lingue (un'altra debolezza negli ultimi laureati). Sviluppa un po 'di linguaggio per un semplice gioco AI (pedine, roshambo, carri armati, CSS mojo, bot di Twitter). Pensare ai concetti di design del linguaggio, interpretazione e azioni è fondamentale.


La carta, il rock, le forbici AI conoscono il risultato o vedono la storia?
Macneil,

Sì, le storie sono disponibili tramite array nell'esempio C (ma si applicherebbero ugualmente a Java, Ruby, ecc.). Dai
Bruce Alderson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.