Quando ero al college, ero un tutor per l'introduzione al corso di programmazione tra gli altri corsi. Il problema che stai descrivendo non è raro. A seconda di quale sia il tuo ruolo specifico, potresti avere diversi approcci che desideri adottare.
In primo luogo, se questo è un problema diffuso che interessa porzioni significative degli studenti in classe, se hai accesso a farlo, mi rivolgerei al professore che insegna al corso con un feedback specifico su quali concetti gli studenti non riescono a comprendere, in modo che lui o può o incorporare un'ulteriore revisione di quel materiale man mano che si ripresenta nel termine, o migliorare il curriculum per i termini futuri.
Se insegni una sezione di discussione per il corso oltre al tempo di laboratorio, sarebbe un momento meraviglioso per spiegare le cose che erano confuse durante la lezione e contribuire a renderle più concrete e assicurarsi che i fondamenti fossero tutti compresi.
Se l'unica volta che lavori con questi studenti è durante il tuo tempo nel laboratorio di tutoraggio, puoi comunque usare questo tempo per insegnare agli studenti uno a uno, o pochi alla volta, i mattoni concettuali di cui hanno bisogno per capire e completa i compiti.
Potrebbero sentirsi così persi in classe che non sanno nemmeno dove fermarsi e fare domande. In tal caso, torna alle basi con loro. Dove erano nel corso l'ultima volta che hanno capito cosa stava succedendo? Se non sono sicuri o "mai" compresi, potresti dover ricominciare da capo a spiegare il mondo, insegnando loro cose come una variabile, come il computer prende la loro lista di "istruzioni" e cerca di fateli in ordine, ma il computer non è così "intelligente" come noi, quindi dovete essere molto letterali e dire cose che il computer capisce esattamente, ecc.
Questo è in realtà un punto di lotta e frustrazione che ho visto abbastanza frequentemente nei corsi di programmazione non-major. Gli studenti scrivono del codice. Sembra "a proposito" giusto, ma poi vanno a compilarlo e dà un errore, un errore molto enigmatico. E non hanno idea di cosa ci sia che non va. E fissa il loro codice per ore. Poi finalmente ho capito che era qualcosa che sembra banale, come un punto e virgola mancante o un tutore nel posto sbagliato. Poi lo compilano di nuovo, e c'è ancora un errore, è qualcos'altro. Hanno digitato un nome variabile in modo diverso la seconda volta che lo hanno usato. E così via. Quindi chiedono aiuto a un amico, un tutor o qualcuno, e possono rispondere dall'alto della testa "oh, basta aggiungere questo lì e poi funzionerà". Quindi la loro esperienza è che la programmazione è un po '"misteriosa"
Questa è un'area come tutor, dove hai molto spazio per aiutarti. A seconda del loro livello di frustrazione, potrei avere approcci diversi per aiutarli a capire perché il loro codice non funziona. Se riescono a ottenerlo, potrei dare loro dei suggerimenti e provare ad aiutarli a capire da soli. Ma se sono solo alla fine della loro corda per essere pronti a rinunciare frustrati, spesso darò loro un paio di risposte gratuite e poi proverò almeno a porre loro domande come "capisci perché questo cambiamento ha risolto il tuo programma? ?"
Per alcuni studenti, in particolare i non-major, potrebbero non avere la metodica attenzione ai dettagli necessaria per essere un buon programmatore o godere della programmazione. Puoi tenerli a mano attraverso strategie per aiutarli a prestare attenzione ai dettagli ed essere abbastanza metodici per risolvere i problemi anche se è una sfida per loro.
Ma anal-ritentivo sugli studenti che indentano il loro codice "correttamente" - così spesso, i programmatori principianti creano problemi con l'annidamento e l'ambito perché hanno parentesi graffe o simili perché non prestano attenzione a ciò che è nidificato sotto ciò. Fornisci loro una lista di "cose da controllare quando il tuo programma non verrà compilato", come indentare correttamente tutto il codice e assicurarti che le parentesi graffe corrispondano, assicurati che tutte le righe finiscano in punto e virgola, specialmente attorno al numero di riga in cui viene visualizzato il primo errore su, ecc.
Insegnate loro a compilare presto e compilare spesso. Scrivi il codice skeleton minimo (diciamo ciao mondo), compila / prova. Aggiungi qualche riga, compila di nuovo. È molto più facile trovare errori se stai guardando solo un piccolo secchio di modifiche e non un grosso secchio.
Aiutali a imparare come scomporre un problema in piccoli problemi risolvibili. Questa è la stessa cosa che facciamo come programmatori professionisti che risolvono problemi molto più difficili che non sappiamo risolvere. Continui a scomporlo in pezzi fino ad arrivare a qualcosa che o sai come risolvere o puoi fare qualche ricerca per imparare a risolvere. "Quali passi dovresti prendere per arrivare a una soluzione funzionante?" Bene, prima avresti bisogno di un po 'di codice scheletro (ciao mondo). Sai come farlo? Sì, fantastico, quindi quando abbiamo finito di parlare puoi iniziare facendo così! Quindi deve leggere un file come input. Ti ricordi di averlo letto nel capitolo 4? Non proprio? Perché non vai a dargli un'occhiata dopo aver fatto ciao il mondo in esecuzione, e vedere quanto vicino puoi arrivare a farlo funzionare e poi richiamarmi e io ' Ti aiuterò un po 'di più quando rimarrai bloccato. Le prime volte potrebbe essere necessario creare un elenco numerato per loro dei passaggi necessari per risolvere il problema, in modo che possano imparare dall'esempio come scomporre il problema.
Se stanno ricevendo un po 'di materiale in classe, ma non tutto, incoraggiali a porre domande in classe, perché nove volte su dieci, non sono gli unici studenti a non capire, e il professore probabilmente ha semplicemente sorpreso qualcosa di importante.
Se trascorrono "ore" a fissare un bug ma non a capirlo, è una perdita di tempo, non stanno imparando molto da esso. Spesso i bug sono problemi di insight, ed è una questione di trovare la giusta intuizione per risolverlo, e potrebbero non avere un talento per questi tipi di problemi. Suggerisci altri approcci generali da adottare quando rimangono bloccati: chiedi aiuto a un altro amico della classe (conosci alcuni compagni di classe se necessario per farlo), inizia a fare i compiti in anticipo in modo che abbiano il tempo di fermarsi e poi entrano il laboratorio del tutor e porre domande durante gli orari di apertura o andare negli orari di ufficio del professore. Se sono abituati a stipare, che funziona bene per i soggetti della memorizzazione, colpiranno un muro di frustrazione quando " di fronte alla programmazione che riguarda più la risoluzione dei problemi che la memorizzazione. Mostra loro come cercare esempi di sintassi dal loro libro di testo, stackoverflow, ecc. Incoraggiali a pubblicare una domanda su un forum di domande di classe privata, se presente.
Insegna loro come restringere la posizione in cui il codice smette di funzionare. Commenta le cose fino a quando non torni a qualcosa che funziona, quindi aggiungi lentamente le cose fino a quando non ottieni di nuovo quel segfault.
Molte di queste idee potrebbero essere trasformate in dispense se escono molto. Di solito le strategie sono la parte in cui i professori sorvolano: trascorrono il loro tempo sulla sintassi, sulla semantica di come scrivere loop, array, I / O, ecc. Ma non c'è abbastanza tempo speso per "cosa devo fare quando provo eseguire il mio codice e semplicemente non si compila o si blocca su di me? "
Quando si tratta di cose concettuali, in particolare fondamentali, come "cos'è una variabile" o "cos'è un ciclo?" non capire che impedirà loro di essere in grado di tenere il passo con il resto del corso. In un corso basato su lezioni, il professore potrebbe non avere il tempo di rispondere a tutte le domande o aiutare la lampadina a spegnersi per ogni singolo studente. E questo è uno dei motivi per cui i tutor sono così importanti per l'apprendimento della programmazione. Potrebbero aver bisogno di istruzioni personalizzate con analogie aggiuntive per rendere concreto un determinato argomento.
Dato che insegni in C ++, immagino che le lezioni emergano come un argomento astratto che alcuni studenti hanno difficoltà a "ottenere". Spesso l'astrazione delle classi viene insegnata con esempi corrispondenti ad alcuni oggetti casuali del mondo reale, come una "macchina ATM", e vengono fatte analogie con l'oggetto del mondo reale. Potresti avere variabili per tenere traccia di quanti soldi ci sono dentro, hai dei metodi, che sono come regole che dicono alla macchina bancomat come rispondere a condizioni particolari, ecc. A volte un'analogia è quella che "si attacca" per una persona in particolare e altri studenti ne comprendono meglio uno diverso.
Quando possibile, disegna immagini per loro. Come un diagramma di sequenza di ciò che accade nel tempo per aiutarli a vedere il quadro generale di ciò che fa il codice che stanno scrivendo. L'utente fa clic su questo pulsante. Quindi il programma dovrebbe rispondere eseguendo x, ye z. Disegna una matrice come un gruppo di caselle postali presso l'ufficio postale che può contenere ciascuna un solo numero e puntatori come frecce che puntano verso "l'indirizzo" nella parte anteriore della scatola. Eccetera.