Domanda

Domanda originale

Attualmente sono impegnato a insegnare a mio fratello a programmare.È un principiante assoluto, ma molto intelligente.(E in realtà vuole imparare).Ho notato che alcune delle nostre sessioni si sono impantanate in dettagli minori e non credo di essere stato molto organizzato.(Ma le risposte a questo post hanno aiutato molto.)

Cosa posso fare meglio per insegnargli in modo efficace?Esiste un ordine logico che posso utilizzare per scorrere concetto per concetto?Ci sono complessità che dovrei evitare fino a tardi?

La lingua con cui stiamo lavorando è Pitone, ma i consigli in qualsiasi lingua sono benvenuti.


Come aiutare

Se ne hai di buoni, aggiungi quanto segue nella tua risposta:

  • Esercizi per principianti e idee di progetto
  • Risorse per insegnare ai principianti
  • Screencast/post di blog/e-book gratuiti
  • Stampa libri adatti ai principianti

Si prega di descrivere la risorsa con un collegamento ad esso così posso dare un'occhiata.Voglio che tutti sappiano che ho sicuramente utilizzato alcune di queste idee.I tuoi contributi verranno aggregati in questo post.


Risorse in linea per insegnare ai principianti:


Libri cartacei consigliati per insegnare ai principianti

Nessuna soluzione corretta

Altri suggerimenti

Ho dovuto lavorare con diversi programmatori principianti (non ho mai scritto una riga di codice) e quest'autunno terrò un seminario doposcuola con gli studenti delle scuole superiori.Questa è la cosa più vicina alla documentazione che ho.È ancora un lavoro in corso, ma spero che sia d'aiuto.

1) FizzBuzz. Inizia con i programmi a riga di comando.Puoi scrivere alcuni giochi o strumenti divertenti molto rapidamente e apprendere tutte le funzionalità del linguaggio molto rapidamente senza dover prima apprendere gli strumenti della GUI.Queste prime app dovrebbero essere abbastanza semplici da non richiedere l'utilizzo di strumenti di debug reali per farle funzionare.

Se non altro cose come FizzBuzz sono buoni progetti.Le tue prime app non dovrebbero avere a che fare con DB, file system, configurazione, ecc.Questi sono concetti che confondono la maggior parte delle persone e quando stai solo imparando la sintassi e le funzionalità di base del framework non hai davvero bisogno di maggiore complessità.

Alcuni progetti:

  • Ciao mondo!
  • Prendi l'anno della mia nascita e calcola la mia età (solo (ora - allora) senza correzioni mensili). (matematica semplice, input, output)
  • Chiedi una direzione (su, giù, sinistra, destra), quindi racconta all'utente il suo destino (cadere in un buco, trovare una torta, ecc.). (logica booleana)
  • FizzBuzz, ma conta una volta al secondo. (Loop, timer e altra logica)
  • A seconda della loro età, ad alcuni piace molto un'app che a un certo intervallo lancia agli utenti un insulto casuale. (Loop, array, timer e casuali se rendi l'intervallo casuale)

2) Progetto semplice Una volta che hanno una buona conoscenza delle funzionalità del linguaggio, puoi avviare un progetto (i giochi semplici e divertenti funzionano bene).Dovresti provare a fare in modo che il primo progetto possa essere completato entro 6-12 ore.Non perdere tempo a progettarlo presto.Lasciamo che lo progettino anche se fa schifo.Se fallisce, parla di cosa è successo e perché ha fallito, quindi scegli un altro argomento e ricomincia.

È qui che inizi a introdurre le funzionalità di debug dei tuoi strumenti.Anche se riesci a vedere il problema leggendo il codice, dovresti insegnare loro come utilizzare gli strumenti e poi mostrare loro come potresti vederlo.Ciò ha il duplice scopo di insegnare gli strumenti di debug e insegnare come identificare gli errori senza strumenti.

Una volta, o se, il progetto diventa funzionale, puoi utilizzarlo per introdurre strumenti di refactoring.È positivo se puoi espandere il progetto con alcune semplici funzionalità che non avevi mai pianificato.Questo di solito significa refactoring e debugging significativo, dal momento che pochissime persone scrivono codice anche solo parzialmente decente la prima volta.

Alcuni progetti:

3) Progetto reale Avviare un vero progetto che potrebbe richiedere del tempo.Utilizzare un controllo del codice sorgente adeguato e impegnarsi ad avere una pianificazione.Gestisci questo progetto come un vero progetto, se non altro è una buona esperienza avere a che fare con gli strumenti.

Ovviamente è necessario adattarlo per ogni persona.La cosa più importante che ho trovato è far sì che anche le prime semplici app si applichino a ciò che interessa alla persona.

Alcuni progetti:

  • Tetris
  • Motore di blog basato su file di testo
  • La robotica più avanzata funziona

Potresti provare a usare Alice.È un programma 3D progettato per l'uso nelle lezioni introduttive di programmazione.

I due maggiori ostacoli per i nuovi programmatori sono spesso:

  • errori di sintassi
  • motivazione (scrivere qualcosa di significativo e divertente piuttosto che artificioso)

Alice utilizza un'interfaccia drag and drop per costruire programmi, evitando la possibilità di errori di sintassi.Alice ti consente di costruire mondi 3D e di controllare tramite il tuo codice (semplici) personaggi e animazioni 3D, il che di solito è molto più interessante dell'implementazione di elenchi collegati.

I programmatori esperti potrebbero considerare Alice come un giocattolo e deridere il trascinamento di righe di codice, ma ricerca dimostra che questo approccio funziona.

Disclaimer:Ho lavorato su Alice.

Raccomando Logo (ovvero la tartaruga) per comprendere i concetti di base.Fornisce un buon sandbox con feedback grafico immediato e puoi dimostrare loop, variabili, funzioni, condizionali, ecc. Questa pagina fornisce un eccellente tutorial.

Dopo Logo, passa a Python o Ruby.Raccomando Python, poiché è basato su ABC, che è stato inventato allo scopo di insegnare la programmazione.

Quando insegno la programmazione, devo assecondare il suggerimento di EHaskins di progetti semplici e poi progetti complessi.Il modo migliore per imparare è iniziare con un risultato definito e un traguardo misurabile.Mantiene le lezioni focalizzate, consente allo studente di sviluppare competenze e poi svilupparle ulteriormente, e dà allo studente qualcosa da mostrare agli amici.Non sottovalutare il potere di avere qualcosa da mostrare per il proprio lavoro.

In teoria, puoi restare con Python, poiché Python può fare quasi tutto.È un buon veicolo per insegnare la programmazione orientata agli oggetti e (la maggior parte) degli algoritmi.Puoi eseguire Python in modalità interattiva come una riga di comando per avere un'idea di come funziona o eseguire interi script contemporaneamente.Puoi eseguire i tuoi script interpretati al volo o compilarli in binari.Esistono migliaia di moduli per estendere la funzionalità.Puoi creare una calcolatrice grafica come quella fornita in bundle con Windows, oppure puoi creare un client IRC o qualsiasi altra cosa.

XKCD descrive un po' meglio la potenza di Python:"You're flying! How?" "Python!"

Successivamente puoi passare a C# o Java, anche se non offrono molto che Python non abbia già.Il vantaggio di questi è che usano la sintassi in stile C, utilizzata da molti (oserei dire la maggior parte?) linguaggi.Non devi ancora preoccuparti della gestione della memoria, ma puoi abituarti ad avere un po' più di libertà e meno controllo da parte dell'interprete della lingua.Python applica gli spazi bianchi e i rientri, il che è utile la maggior parte delle volte ma non sempre.C# e Java ti consentono di gestire i tuoi spazi bianchi pur rimanendo fortemente tipizzati.

Da lì, lo standard è C o C++.La libertà in queste lingue è quasi esistenziale.Ora sei responsabile della gestione della tua memoria.Non esiste una raccolta dei rifiuti che possa aiutarti.Qui è dove insegni gli algoritmi veramente avanzati (come Mergesort e Quicksort).Qui scoprirai perché "errore di segmentazione" è una parolaccia.Qui è dove scarichi il codice sorgente del kernel Linux e guardi nell'Abisso.Inizia scrivendo un buffer circolare e uno stack per la manipolazione delle stringhe.Poi procedi verso l'alto.

Un buon corso Python è quello del MIT Una delicata introduzione alla programmazione utilizzando Python.È tutto gratuito online e non devi essere un superstudente del MIT per capirlo.

Modificare [Justin Standard]

Questo corso utilizza questo libro online gratuito: Come pensare come un informatico
Lo trovo decisamente molto utile.

Pacchetto Python V Python -- Programmazione 3D per comuni mortali (videotutorial).

Esempio di codice:

from visual import *

floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue)
ball = sphere (pos=(0,4,0), radius=1, color=color.red)
ball.velocity = vector(0,-1,0)
dt = 0.01

while 1:
    rate (100)
    ball.pos = ball.pos + ball.velocity*dt
    if ball.y < ball.radius:
        ball.velocity.y = -ball.velocity.y
    else:
        ball.velocity.y = ball.velocity.y - 9.8*dt

Palla rimbalzante VPython http://vpython.org/bounce.gif

Inizia con la grafica Turtle in Python.

Vorrei utilizzare la grafica della tartaruga fornita di serie con Python.È visivo, semplice e puoi utilizzare questo ambiente per introdurre molti concetti di programmazione come l'iterazione e le chiamate di procedura prima di addentrarti troppo nella sintassi.Considera la seguente sessione interattiva in Python:

>>> from turtle import *
>>> setup()
>>> title("turtle test")
>>> clear()
>>>
>>> #DRAW A SQUARE
>>> down()        #pen down
>>> forward(50)   #move forward 50 units
>>> right(90)     #turn right 90 degrees
>>> forward(50)
>>> right(90)
>>> forward(50)
>>> right(90)
>>> forward(50)
>>>
>>> #INTRODUCE ITERATION TO SIMPLIFY SQUARE CODE
>>> clear()
>>> for i in range(4):
        forward(50)
        right(90)
>>>
>>> #INTRODUCE PROCEDURES   
>>> def square(length):
        down()
        for i in range(4):
            forward(length)
            right(90)
>>>
>>> #HAVE STUDENTS PREDICT WHAT THIS WILL DRAW
>>> for i in range(50):
        up()
        left(90)
        forward(25)
        square(i)
>>>
>>> #NOW HAVE THE STUDENTS WRITE CODE TO DRAW
>>> #A SQUARE 'TUNNEL' (I.E. CONCENTRIC SQUARES
>>> #GETTING SMALLER AND SMALLER).
>>>
>>> #AFTER THAT, MAKE THE TUNNEL ROTATE BY HAVING
>>> #EACH SUCCESSIVE SQUARE TILTED

Nel tentativo di portare a termine gli ultimi due compiti, avranno molti tentativi falliti, ma i fallimenti saranno visivamente interessanti e impareranno rapidamente mentre cercano di capire perché non ha ottenuto ciò che si aspettavano.

La cosa fondamentale è che la persona in questione deve avere qualche problema che vuole risolvere.Se non hai un programma che vuoi scrivere (e qualcosa di sensato e ben definito, non "Voglio scrivere il prossimo Quake!") allora non puoi imparare a programmare, perché non hai nulla che ti motivi .Voglio dire, potresti leggere un libro e avere una conoscenza approssimativa della sintassi e della semantica di una lingua, ma finché non l'avrai un programma che desideri venga scritto non coglierai mai l'ortica.

Se questo slancio esiste, tutto il resto è solo un dettaglio minore.

Non so se qualcuno ne ha già parlato qui, ma potresti voler controllare Zed Shaw'S Impara Python nel modo più duro

Spero che questo ti aiuti

http://tryruby.hobix.com/">Prova Ruby (nel tuo browser)

Questo è un libro fantastico che i miei fratellini imparavano:

http://pine.fm/LearnToProgram/

Naturalmente, la cosa più importante è iniziare un programma reale e utile di qualche tipo IMMEDIATAMENTE dopo aver finito il libro.

Se è interessato, i dettagli minori non sono la parte migliore?Usando Python, ne hai già tagliato la GUI in modo che la confusione sia sparita.Perché non scegliere un progetto, un gioco o qualcosa del genere e implementarlo.Il classico gioco di indovinare i numeri hi-lo può essere semplicemente implementato dalla riga di comando in 20-30 righe di codice (a seconda della lingua ovviamente) e fornisce variabili, condizioni, loop e input dell'utente.

Gli lascerei semplicemente scrivere tonnellate di codice.Lasciatelo guidare in tutto ciò che fate e siate disponibili a rispondere alle domande.

Che tu ci creda o no, dopo aver scritto per alcuni mesi tonnellate di codice scadente, inizierà a farsi un'idea e inizierà a scrivere programmi migliori.A quel punto, puoi impantanarti nei dettagli (memoria, ecc.) e parlare anche dei principi generali di progettazione.

Ho sentito che ciò che distingue i grandi artisti da quelli mediocri è che ogni volta che si esercitano migliorano in qualcosa, non importa quanto piccolo.Lascia che tuo fratello si eserciti e migliorerà ogni volta che si siederà alla tastiera.

Modificare:[Justin Standard]

Esteban, questo mi ricorda un recente codifica di post horror, e io Fare pensi di avere ragione.Ma penso che valga ancora la pena trovare metodi per farlo guida la sua pratica.Nessuna domanda, voglio che scriva tanto codice quanto sa fare.Questo è uno dei motivi per cui chiedo progetti di esempio.

Prima di tutto, inizia come fanno tutti gli altri:con un Ciao mondo programma.È semplice e dà loro un'idea di base del layout di un programma.Prova a ricordare la prima volta che programmavi e quanto erano difficili alcuni concetti: inizia in modo semplice.

Dopo Hello World, passa alla creazione di alcune variabili di base, all'aritmetica, quindi alla logica booleana e alle istruzioni if/else.Se hai uno dei tuoi vecchi libri di testo di programmazione, dai un'occhiata ad alcuni dei primi esempi e fagli scorrere quelli.Basta non provare a introdurre troppe cose tutte in una volta, altrimenti sarà travolgente e confuso.

Qualcosa a cui dovresti prestare molta attenzione mentre insegni a tuo fratello a programmare è che non faccia troppo affidamento su di te.Spesso, quando mi ritrovo ad aiutare gli altri, iniziano a pensare a me come a un libro di risposte a tutte le loro domande e invece di sperimentare per trovare una risposta, semplicemente me la chiedono.Spesso il miglior insegnante è la sperimentazione e ogni volta che tuo fratello ha una domanda come "Cosa succederà se aggiungo 2 a una stringa?" Dovresti dirgli di provarlo e vedere da solo.Inoltre ho notato che quando non riesco a trasmettere un concetto a qualcuno, è utile vedere del codice di esempio in cui possiamo guardare ogni segmento individualmente e spiegarlo pezzo per pezzo.Come nota a margine, le persone nuove alla programmazione spesso hanno problemi con l'idea della programmazione orientata agli oggetti, diranno di capirla quando gliela insegni ma non ne avranno un concetto chiaro fino a quando non la implementeranno effettivamente.

Insegnavo programmazione e tuo fratello ha un vantaggio principale rispetto alla maggior parte dei miei studenti che vuole imparare :)

Se decidi di andare con C un amico ha un sito che ha il tipo di programmi che quelli utilizzati dalle generazioni più anziane ricordano come digitazioni di base.I più complessi usano le ncurse che in un certo senso negano il loro uso come aiuto didattico, ma alcune di esse sono piccole cose e puoi imparare un sacco senza che ti venga insegnato.

Personalmente penso che Python e Ruby sarebbero ottimi primi linguaggi.

MODIFICARE:elenco dei compiti di programmazione per principianti apparso dall'oggi al domani potrebbe essere proprio quello che stai cercando.

Dipende davvero dallo stile di apprendimento di tuo fratello.Molte persone imparano più velocemente sporcandosi le mani e semplicemente entrandoci, cristallizzando i concetti e il quadro generale mentre progrediscono e sviluppano le proprie conoscenze.

Io preferisco iniziare con il quadro generale e approfondire il nocciolo della questione.La prima cosa che volevo sapere era come tutto si incastra, poi tutto quel gobbledygook orientato agli oggetti, poi le classi e le istanze e così via.Mi piace conoscere i concetti sottostanti e un po' di teoria prima di imparare la sintassi.Ho avuto un piccolo vantaggio perché ho scritto alcuni giochi in BASIC 20 anni fa, ma da allora non è rimasto molto.

Forse è utile delineare un processo di produzione iniziando con una dichiarazione di intenti generale, quindi un piano e/o un diagramma di flusso, quindi elaborare uno pseudo codice (tendendosi alla sintassi che utilizzerai alla fine) prima di scrivere effettivamente il codice.

La regola d'oro qui è scoprire lo stile di inclinazione del tuo studente.

Se tuo fratello ha accesso a iTunes, può scaricare le lezioni video di un corso introduttivo all'informatica tenuto da Richard Buckland presso l'Università del New South Wales.È un insegnante coinvolgente e copre i fondamenti dell'informatica e del linguaggio C.Se non altro, dì a tuo fratello di riprodurre i video in sottofondo e alcuni concetti potrebbero penetrare per osmosi.:)

COMP1917 Informatica superiore - Sessione 2008 1 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444

Se il collegamento non funziona, ecco un percorso:

Home -> iTunes U --> Ingegneria --> COMP1917 Higher Computing - 2008 Session 1

c'è un wikibook che è abbastanza buono per imparare Python.

Non so come siano i wikibook per altre lingue, ma personalmente ho imparato Python dal wikibook com'era nel febbraio 2007

ps: se non hai familiarità con wikilibri, è fondamentalmente la versione di Wikipedia della creazione di libri.è un po' difficile da descrivere, ma se dai un'occhiata ad alcuni dei libri lì vedrai come funziona

Penso che Python sia un'ottima idea.Gli darei alcuni compiti di base da svolgere da solo e gli direi che qualsiasi vicolo cieco in cui si imbatte può probabilmente essere risolto con un viaggio su Google.Per me, almeno, risolvere un problema da solo lo ha sempre fatto aderire meglio di qualcuno che mi dicesse la soluzione.

Alcuni possibili progetti (in ordine sparso):

  • Simulatore di lancio di monete.Consenti all'utente di inserire il numero desiderato di prove per il lancio della moneta.Eseguilo e visualizza i risultati insieme alla percentuale di testa o croce.

  • Crea un convertitore di temperatura con un menu che accetta l'input dell'utente per scegliere il tipo di conversione che l'utente desidera eseguire.Dopo aver scelto la conversione e averla eseguita, dovrebbe tornare al menu principale.

    Ecco un esempio di un convertitore esteso con la stessa idea: http://pastebin.org/6541

  • Crea un programma che accetti un input numerico e visualizzi il voto in lettere in cui si tradurrebbe.Finirà per valutare l'input rispetto alle istruzioni if ​​ed elif per trovare dove si adatta.

  • Crea un semplice quiz che prevede diverse scelte multiple o compila le domande vuote.Alla fine verrà visualizzato come ha fatto l'utente.Può scegliere tutte le domande che desidera.

  • Prendi un input di un numero (presumibilmente elevato) di centesimi e convertilo in denominazioni più grandi.Ad esempio, 149 penny = 1 dollaro, 1 quarto, 2 centesimi e 4 penny.

  • Crea un semplice gestore di elenchi.Essere in grado di aggiungere/eliminare elenchi e aggiungere/eliminare voci in tali elenchi.Ecco un esempio di gestore di liste di Natale: http://pastebin.org/6543

  • Crea un programma che costruirà e poi testerà se i numeri immessi formano un quadrato magico (con una matrice 2D).Ecco del codice di esempio, ma dovrebbe in realtà stampare il quadrato ad ogni passaggio per mostrare dove si trova l'utente in termini di costruzione del quadrato: http://pastebin.org/6544

Suggerirei anche di fare qualcosa con xTurtle o un altro modulo grafico per mescolare le cose ed evitare che diventi noioso.Naturalmente, si tratta di programmazione pratica e non di scripting per cui molte persone utilizzerebbero Python, ma gli esempi che ho fornito sono praticamente presi direttamente da quando stavo imparando tramite Python e ha funzionato benissimo per me.Buona fortuna!

Rendilo divertente!

Sorprendentemente Scala potrebbe essere il più semplice se ci provi Kojo

Se a tuo fratello piacciono i puzzle, lo consiglierei Sfida Python.Non lo userei come strumento didattico formale in un tutorial individuale, ma è qualcosa che può fare quando non siete insieme per sfidare se stesso e divertirsi.

Dopo aver esaminato alcuni e-book gratuiti, ho scoperto che il miglior libro per imparare a programmare era Head First Programming pubblicato da O'Reily Press.Utilizza Python come linguaggio e ti fornisce programmi su cui lavorare fin dall'inizio.Sono tutti più interessanti di "Hello World".Vale sicuramente i soldi che ci ho speso e, visto che è uscito da un po', potresti riuscire a trovarne una copia usata più economica su Ebay o Amazon.

Se vuoi insegnare le basi della programmazione, senza essere specifici della lingua, c'è un'applicazione chiamata Graffio che è stato creato al MIT.È progettato per aiutare le persone a sviluppare capacità di programmazione.Man mano che gli utenti creano progetti Scratch, imparano a creare condizioni, loop, ecc.Esiste anche una comunità di progetti scratch, da cui i progetti possono essere scaricati: in questo modo puoi esplorare i programmi di altre persone e vedere come sono stati costruiti.

Penso che una volta che ha imparato le basi (variabili, loop, ecc.) dovresti provare ad aiutarlo a trovare qualcosa di specifico che gli interessa e aiutarlo a imparare le necessità per realizzarlo.So che sono molto più propenso e motivato a fare qualcosa se mi interessa.Inoltre, assicurati di lasciarlo lottare contro alcuni dei problemi più difficili, niente è più soddisfacente del momento in cui lo capisci da solo.

Mi è stato insegnato imparando a risolvere i problemi in modo indipendente dalla lingua utilizzando diagrammi di flusso e PDL (Linguaggio di progettazione del programma).Dopo un paio di settimane, ho imparato a convertire il PDL che avevo scritto in una lingua.Sono felice di aver imparato in questo modo perché ho passato la maggior parte dei miei anni a programmare, risolvendo problemi senza essere legato a un linguaggio.Il linguaggio che utilizzo è sempre stato un dettaglio di implementazione e non parte del design.

Dover risolvere il problema scomponendolo nei suoi passaggi fondamentali è un'abilità chiave.Penso che sia una delle cose che separa quelli che possono programmare da quelli che non possono.

Per quanto riguarda il modo in cui affrontare l'ordine dei concetti di una lingua, credo che il modo più semplice sia decidere di avere un progetto in mente e affrontare i concetti quando sono necessari.Ciò ti consente di applicarli quando necessario su qualcosa che ti interessa fare.Quando si impara una lingua è bene avere in mente diversi progetti semplici e alcuni di complessità progressiva.Deciderli ti aiuterà a mappare i concetti necessari e il loro ordine.

Consiglierei anche di guardare alcuni screencast: generalmente sono creati nel contesto di una tecnologia specifica, non di un linguaggio, anche se se viene visualizzato il codice Python, andrà bene :).Il punto è che sono creati da alcuni bravi programmatori e osservare come i bravi programmatori programmano è una buona cosa.Anche tu e tuo fratello potreste fare un po' di programmazione tra pari, potrebbe essere un'idea ancora migliore.Basta non dimenticare di spiegare PERCHÉ fai qualcosa in questo modo e non in quel modo.Penso che il modo migliore per imparare a programmare sia partire dai buoni esempi e cercare di non vedere nemmeno quelli cattivi.

Robert Read ha scritto una guida utile, Come essere un programmatore, che copre un'ampia area di problemi di programmazione che un principiante potrebbe trovare utile.

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