Domanda

Sto per iniziare (con altri programmatori) una programmazione e un amplificatore; club di algoritmi nella mia scuola superiore. La lingua prescelta è C ++ - mi dispiace, non posso cambiarlo. Possiamo presumere che gli studenti abbiano poca o nessuna esperienza sugli argomenti di cui sopra.

Quali pensi siano i concetti di base su cui dovrei concentrarmi?

So che insegnare qualcosa che è già ovvio per me non è un compito facile. Mi rendo conto che al primo incontro dovrebbe essere data un'estrema attenzione - per non spaventare gli studenti - quindi te lo chiedo.

Modifica: ho notato che probabilmente la principale differenza tra programmatori e principianti è "il modo di pensare del programmatore" - Intendo concettualizzare i problemi come, sapete, algoritmi. So che è solo una questione di pratica, ma conosci qualche tipo di esercizi / concetti / cose che potrebbero stimolare lo sviluppo in questo settore?

È stato utile?

Soluzione

Rendi divertente la programmazione!

Le cose possibili di cui parlare sono le competizioni di programmazione che il club potrebbe tenere o potrebbe partecipare a livello locale. Competo in concorsi di programmazione a livello universitario (ACM) e so per certo che li hanno anche a livelli inferiori.

Questo tipo di eventi può davvero attirare un po 'di spirito competitivo e avvicinare i membri del club.

Neanche le cose devono necessariamente riguardare la programmazione. Forse suggerire di organizzare una festa LAN in cui giochi, discutere di programmazione, ecc. Potrebbe essere una buona idea.

In termini di argomenti reali da affrontare che sono correlati alla programmazione / algoritmo, suggerirei come gruppo di tentare alcuni di questi problemi di programmazione in questa presentazione della competizione di programmazione " Sfide di programmazione " ;: Amazon Link

Iniziano con problemi di programmazione abbastanza basilari e lentamente progrediscono in problemi che richiedono varie Strutture dati come:

  • Stack
  • code
  • Dizionari
  • Alberi
  • Etc

La maggior parte dei problemi è data in C ++.

Alla fine si evolvono in problemi più avanzati che coinvolgono Graph Traversal e algoritmi Graph popolari ( Dijkstra's , ecc.), Problemi di Combinatrics, ecc. Ogni problema è divertente e riportato in una piccola "storia". come il formato. Attenzione però, alcuni di questi sono molto difficili!

Modifica: Pizza e Soda non fanno mai male nemmeno quando si tratta di convincere la gente a presentarsi per le riunioni del club. Il nostro club ACM offre pizza ogni incontro (una volta al mese). Anche se la maggior parte di noi si presenterebbe comunque è una bella rompighiaccio. Soprattutto per i nuovi club o soci.

Altri suggerimenti

Abbattendo

Per me, la particolarità della programmazione è la necessità di suddividere le attività in passaggi abbastanza piccoli per il computer . Questo varia in base alla lingua, ma il fatto che potresti dover scrivere un "per ciclo" solo per contare fino a 100 ci si sta abituando.

Il " top-down " l'approccio può aiutare con questo concetto. Si inizia creando una funzione principale per il proprio programma, come

filterItemsByCriteria();

Non hai idea di come funzionerà, quindi suddividilo in ulteriori passaggi:

(Nota: non conosco C ++, quindi questo è solo un esempio generico)

filterItemsByCritera() {
  makeCriteriaList();
  lookAtItems();
  removeNonMatchingItems();
}

Quindi si scompone ulteriormente ciascuno di quelli. Molto presto puoi definire tutti i piccoli passi necessari per rendere la tua lista di criteri, ecc. Quando tutte le piccole funzioni funzionano, quella grande funzionerà.

È un po 'come il gioco dei bambini in cui continuano a chiedere " perché? " dopo tutto quello che dici, tranne che devi continuare a chiedere " come? "

Elenchi collegati: una classica domanda di intervista, e per buoni motivi.

Vorrei provare a lavorare con un sottoinsieme C e non provare a iniziare con le cose OO. Questo può essere introdotto dopo aver compreso alcune delle basi.

Un saluto!

Penso che stai ottenendo MODO davanti a te nel forzare una lingua specifica e lavorare su argomenti specifici e un curriculum .. Sembra che tu (e alcuni dei rispondenti) stia confondendo " consigliando un club di programmazione " con "condurre una classe di programmazione". Sono cose molto diverse.

Vorrei riunire il gruppo e il gruppo dovrebbe decidere cosa esattamente vogliono uscire dal club. In sostanza, crea un "charter" per il club. Quindi (e solo allora) puoi prendere decisioni come la lingua / piattaforma preferita, la frequenza con cui incontrarti, cosa accadrà alle riunioni, ecc.

È possibile che l'approccio migliore sia un "sondaggio", in cui vengono esplorate lingue / piattaforme diverse. Oppure si può scoprire che l'approccio migliore è uno "attuale", in cui gli argomenti cambiano (come un club del libro) su base regolare (questo mese è puntatori, il mese prossimo è l'ordinamento, il seguente è ricorsione, ecc.) e poi esempi e discussioni si verificano in varie lingue.

A parte, prenderei in considerazione un "linguaggio agnostico" orientamento per il club. Incoraggia i bambini a esplorare diverse lingue e piattaforme.

Buona fortuna e ottimo lavoro!

Beh, è ??un club di programmazione, quindi dovrebbe essere DIVERTENTE! Quindi direi di immergerti subito nell'esperienza. Inizia spiegando cos'è un metodo main (), poi chiedi agli studenti di scrivere un programma Hello World. Migliorare gradualmente il programma Hello World in modo che abbia funzioni e stampa gli input dell'utente.

Direi di non andare troppo in algoritmo per i principianti, lasciali giocare prima con C ++.

Qualcuno di cui sopra, "rende la programmazione divertente". È interessante oggi che le persone non imparino per motivi di apprendimento. Molte persone vogliono gratificazione istantanea .

Insegna un po 'di logica usando la programmazione. Questo aiuta a risolvere il problema (ed è). Quello di classe che ho in testa sono indovinare i giochi.

  • Invitali a creare un programma che indovina un numero compreso tra 0 e 100.
  • Fagli fare un clone di black jack ... L'ho fatto in base :-(

Crea istruzioni cartacee.

  1. Spiega le " Uova fritte " storia. Chiedi all'auditorio cosa farebbero per farsi le uova fritte. Fagli notare il passo a cui pensano. Probabilmente riceverai un algoritmo con meno di 5 passaggi. Quindi spiega loro quanti passaggi devono essere scritti se vogliamo insegnare a un computer a friggere le uova. Qualcosa del tipo:
1) Go to the Fridge 
2) Open the fridge door 
3) Search for eggs 
4) If there are no eggs - go to the shop to buy eggs ( this is another function ;) ) 
5) If there are eggs - calculate how many do you need to fry 
6) Close the fridge door 
7) e.t.c. :)
  1. Inizia con le basi di C - sintassi semantics e.t.c, e parallelamente a ciò spiega gli algoritmi molto basilari come il bubble sort.
  2. Dopo che l'auditory ha familiarità con la programmazione strutturata (ciò potrebbe richiedere diverse settimane o mesi, a seconda della frequenza con cui si tengono le lezioni), è possibile passare a C ++ e OOP.

Il contenuto nella programmazione De ++ di Deitel & Deitel è un'introduzione decente, e gli esercizi proposti alla fine di ogni capitolo sono dei bei problemi di gioco.

In sostanza, stai parlando di: - strutture di controllo - funzioni - array - puntatori e stringhe

Potresti voler dare seguito a un'introduzione all'STL (& ok; ora che l'abbiamo fatto nel modo più difficile ... ecco un'opzione più semplice ")

Inizia facendo capire loro un problema come per esempio l'ordinamento. Questo è molto semplice e dovrebbero essere in grado di relazionarsi abbastanza velocemente. Quando vedono il problema, presentano loro gli strumenti / la soluzione per risolverlo.

Ricordo come mi sono sentito quando ho mostrato per la prima volta un esempio di merge-sort. Potrei seguire tutti i passaggi ma per cosa diavolo ero? Fai quindi desiderare una soluzione a un problema e capiranno lo strumento e la soluzione molto meglio.

inizia con un semplice "ciao mondo" programma. Questo introduce nozioni di base come le variabili, la scrittura in un flusso e il flusso del programma.

Quindi aggiungere complessità da lì (elenchi collegati, file io, ottenere l'input dell'utente, ecc.)

Il motivo per cui dico di iniziare con ciao mondo è perché il bambino vedrà un programma in esecuzione molto velocemente. È un feedback quasi immediato, poiché avranno scritto un programma in esecuzione fin dall'inizio.

IMO, Big-O è uno dei concetti più importanti per l'apprendimento dei programmatori principianti .

Partecipa a un contest di debug. Fornire esempi di codice che includano un bug. Partecipa a un concorso per vedere chi può trovare di più o più velocemente.

Esiste un libro eccellente, How Not to Program in C ++, che potresti usare per iniziare.

Impari sempre meglio dagli errori e preferisco imparare da qualcun altro.

Permetterà anche a coloro che hanno poca esperienza di apprendere tramite il codice vedere, anche se il codice funziona solo quasi.

Oltre alle risposte a questa domanda , ci sono alcune importanti argomenti da trattare. Ecco un esempio di come potresti strutturare le lezioni.

Prima lezione: terminologia e sintassi

Terminologia da includere: variabile, operatore, loop (iterazione), metodo, parola riservata, tipo di dati, classe

Sintassi da coprire: assegnazione, operazione, if / then / else, per loop, mentre loop, seleziona, input / output

Seconda lezione: costruzione dell'algoritmo di base

Copri alcuni semplici algoritmi, che coinvolgono alcuni input, forse un ciclo for o a while.

Terza lezione: Argomenti dell'algoritmo più avanzati

Questo è per cose come ricorsione, manipolazione di matrici e matematica di livello superiore. Non devi entrare in argomenti troppo complessi, ma introdurre una complessità sufficiente per essere utile in un progetto reale.

Lezione finale: progetto di gruppo

Crea un progetto in cui i gruppi possano essere coinvolti.

Queste non devono essere lezioni di un giorno. Puoi diffondere gli argomenti su più giorni.

Lo pseudocodice dovrebbe essere il primo.

Modifica: se sono principianti della programmazione totale, farei il primo semestre solo sulla programmazione. Una volta arrivato a un livello in cui parlare di algoritmi avrebbe senso, allora lo pseudocodice è davvero importante da mettere sotto controllo.

Grazie per le tue risposte!

E come insegneresti loro a risolvere i problemi?

Conosco un gruppo di studenti che conoscono la sintassi C ++ e alcuni algoritmi di base, ma non possono applicare le conoscenze che conoscono quando risolvono problemi reali - non conoscono l'approccio, il modo in cui trascrivere i loro pensieri in una serie di passaggi rigorosi. Non parlo di approcci di "alto livello" come la programmazione dinamica, avidi ecc., Ma di mentalità algoritmica di base.

Suppongo sia solo a causa del cattivo processo di apprendimento che stavano attraversando. In altre scienze - la matematica, ad esempio - sono davvero brillanti.

Solo perché hai familiarità con gli algoritmi non significa che puoi implementarli e solo perché puoi programmare non significa che puoi implementare un algoritmo.

Inizia con ogni argomento (mantieni la programmazione separata dalla progettazione di algoritmi). Una volta che hanno una maniglia su ciascuno, inizia lentamente a riunire i due concetti.

Wow. Il C ++ è uno dei peggiori linguaggi possibili con cui iniziare, in termini di quantità di schifezze non correlate di cui hai bisogno per far funzionare qualsiasi cosa (Java sarebbe leggermente peggio, immagino).

Quando insegni ai principianti in un ambiente pesante come una caldaia, è normale iniziare con " ecco un semplice programma C. Discuteremo di cosa sia tutta questa merda nella parte superiore del file per dopo, ma per ora, concentrati sulle linee tra 'int main (void)' e l'istruzione 'return', che è dove tutto il lavoro utile viene realizzato " ;.

Una volta superato questo punto, i concetti di base da includere includono le strutture di dati di base (array, elenchi collegati, alberi e dizionari) e gli algoritmi di base (ordinamento, ricerca, ecc.)

Chiedi al tuo club di imparare come programmare effettivamente in qualsiasi lingua insegnando i concetti di creazione di software. Invece di esaurire un acquisto di una dozzina di licenze per Visual Studio, chiedi agli studenti di utilizzare compilatori, creare sistemi, file sorgente, oggetti e librerie per trasformare il loro codice C in programmi. Sento che questo è davvero l'inizio e abilita effettivamente questi bambini a capire come realizzare software su qualsiasi piattaforma, senza stampelle su cui molte istituzioni educative amano fare affidamento.

Per quanto riguarda il linguaggio di scelta - congratulazioni - scoprirai che C ++ è molto ricco nel farti pensare a scorciatoie matematiche e milioni di modi per rendere il tuo codice ancora migliore (o per implementare schemi fantasiosi).

Alla domanda: quando stavo cominciando a programmare, cercavo sempre di scomporre un problema di vita reale in più passaggi e poi, vedendo la somiglianza tra attività o dati che trasformano, cercavo sempre di trovare un più pigro, più facile, modo più magro per attuarlo.

L'eleganza è venuta dopo l'apprendimento di schemi e algoritmi reali.

Hank: Big O ??? intendi dire ai programmatori principianti che il loro codice è di O (n ^ 2) e il tuo è di n log n ??

Potrei vedere alcuni modi diversi per farlo:

1) Elementi base della programmazione di base. Cosa sono le dichiarazioni condizionali, ad es. switch e if / else? Cosa sono le dichiarazioni di ripetizione, ad es. per e mentre i loop? Come li combiniamo per far diventare un programma la sequenza di passi che vogliamo? Potresti prendere qualcosa di semplice come sommare un conto della spesa o convertire temperature o distanze dalla metrica all'imperiale o viceversa. Quali sono i tipi di variabili di base come una stringa, un numero intero o un doppio? Anche qui potresti avere Algebra booleana per un'idea avanzata o possibilmente insegnare come fare l'aritmetica nella base 2 o 16 che alcune persone potrebbero trovare facili e altre che trovano difficile.

2) Algoritmicamente quali sono blocchi predefiniti simili. L'ordinamento è un argomento piuttosto semplice che può essere ampiamente discusso e analizzato per cercare di capire come renderlo più veloce del semplice scambio di elementi che sembrano fuori servizio se impari il Bubblesort che è il modo più cerebrale di fare.

3) Elementi di compilazione e di runtime. Che cos'è uno stack di chiamate? Che cos'è un mucchio? Come viene gestita la memoria per eseguire un programma, ad es. i pezzi di codice e pezzi di dati? Come apriamo e manipoliamo i file? Che cos'è la compilazione e il collegamento? Cosa sono i file di creazione? Parte di questo è semplice, ma può anche essere sorprendente solo per vedere come funzionano le cose che potrebbero essere ciò che il club copre la maggior parte del tempo.

Questi prossimi 2 sono un po 'più impegnativi ma potrebbero essere divertenti:

4) Discutere varie idee alla base di algoritmi come: 1) Dividi e conquista, 2) Programmazione dinamica, 3) Forza bruta, 4) Creazione di una struttura di dati, 5) Riduzione di un problema a uno simile già risolto ad esempio I numeri di Fibonacci sono un classico problema ricorsivo per dare ai programmatori principianti, e 6) L'idea di essere, "avido", " come in un esempio di modifica se ti trovavi in ??un paese in cui i tagli delle monete dove a, b e c. Potresti anche entrare in alcuni esempi di teoria dei grafi come un albero di spanning di peso minimo se vuoi qualcosa di un po 'esotico, o i venditori ambulanti per qualcosa che può essere facile da descrivere ma un dolore da risolvere.

5) Funzioni matematiche. Come programmeresti un fattoriale, che è il prodotto di tutti i numeri da 1 a n? Come calcoleresti le somme di varie serie aritmetiche o geometriche? Oppure calcola il numero di combinazioni o permutazioni di elementi r da un set di n? Dato un insieme di punti, approssimare il polinomio che soddisfa questo requisito, ad es. in un piano bidimensionale chiamato xey potresti dare 2 punti e fare in modo che le persone capiscano quali sono la pendenza e l'intercetta y se hai già risolto coppie di equazioni lineari.

6) Elenchi che possono essere implementati utilizzando liste e matrici collegate. Quale è meglio per vari casi? Come si implementano le funzioni di base come inserire, eliminare, trovare e ordinare?

7) Strutture di dati astratte. Cosa sono le pile e le code? Come costruisci e testa le lezioni?

8) Puntatori. Questo porta a enormi quantità di argomenti come come allocare / disallocare la memoria, che cos'è una perdita di memoria?

Questi sono i miei suggerimenti per vari punti di partenza. Penso che iniziare una discussione possa portare ad alcuni posti interessanti se riesci a riunire alcune persone a cui non dispiace parlare della stessa materia settimana dopo settimana in alcuni casi poiché l'ordinamento può essere un argomento enorme da trattare bene se vuoi ottenere nei punti più fini delle cose.

Ragazzi, potreste costruire il progetto TinyPIM da " Libreria standard C ++ da Scratch " e poi, quando funziona, inizia a progettare le tue estensioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top