Insegnare C ++ agli studenti delle scuole superiori per la prima volta: dove tracciare la linea?

35

Seguirò un team di studenti delle scuole superiori per la PRIMA gara di robotica, la maggior parte dei team qui sviluppa [il proprio software per robot che utilizza C ++. Per molti degli studenti del team questa sarà la loro prima introduzione alla programmazione. Non avrei scelto C ++ per insegnare la programmazione ai liceali (ad esempio Python o Javascript sarebbero stati più semplici, credo) ma la scelta è stata impostata.

Voglio insegnare loro il C ++ corretto (ad esempio, evitare un dialetto misto C / C ++, ad esempio C +) ma non voglio spaventarli con una complessità inutile. Per quello che riguarda:

  • Dovrei iniziare a utilizzare STL dal primo giorno, esp. vector o semplicemente bastone con gli array standard? Gli array sono più facili da introdurre ma gli errori del puntatore potrebbero essere più difficili da catturare.
  • Per I / O, dovrei attenermi a cout , ecc. oppure pensi che printf sarebbe più facile da imparare?
  • Ci sono risorse online per C ++ che sono adatte per questi giovani studenti?

Grazie!

EDIT : grazie per così tante risposte eccellenti. Oltre a C ++ accelerato , suggerito da molte persone, ho trovato che C ++ Per tutti è un testo eccellente.

    
posta recipriversexclusion 21.04.2015 - 00:38
fonte

17 risposte

40

Penso che dovresti iniziare con i tipi di dati che la lingua ha incorporato come matrici e indicatori, e quando i tuoi studenti li comprendono, passa alle classi e OO, quindi all'STL.

La ragione è che puoi insegnare alle persone a capire gli array senza capire molto altro oltre alle variabili e all'architettura del computer sottostante, ma non puoi insegnare loro a capire vector senza prima insegnare loro le classi. Se usi l'STL fin dall'inizio, i tuoi studenti dovranno semplicemente vivere senza avere la minima idea di come vector funzioni esattamente. E quando arriverai a quel punto, non avranno una buona conoscenza dei puntatori, degli array e delle cose che ti vengono dal fare cose come scrivere la tua classe vettoriale, scrivere la tua classe di liste collegate, ecc. Che sarà necessario per apprezzare e sfruttare le sue caratteristiche. Mi infastidisce quando gli studenti dicono "che cos'è?" e gli insegnanti dicono "semplicemente ignoralo, lo imparerai più tardi."

E come Demian ha sottolineato nei commenti, la decifrazione dei messaggi relativamente criptici che ricevi dagli errori del modello è molto più difficile della comprensione degli errori che potresti ottenere dagli array / costrutti non template.

Non mi sento allo stesso modo su cout e printf . Nessuno dei due livelli è inferiore all'altro, a parte il fatto che cout utilizza l'overloading dell'operatore.

Questo può sembrare stupido, ma io sono assolutamente fanatico di far capire alle persone gli elementi base di tutto prima di passare alle astrazioni. Non dovresti usare puntatori intelligenti finché non sei abile con i puntatori grezzi, nessun vettore prima degli array, quel genere di cose.

Lo dico spesso, ma lo dirò di nuovo: è meglio insegnare prima agli studenti a lunga divisione e poi lasciare che usino una calcolatrice piuttosto che permettere loro di usare una calcolatrice e poi insegnare loro una lunga divisione.

Per quanto riguarda i libri per insegnare ai principianti, consulta la lista principale di buoni libri C ++ .

    
risposta data 23.05.2017 - 14:40
fonte
38

Questa è la mia esperienza. Prendilo per quello che vale.

Guardando indietro a quando ho iniziato a programmare, vorrei davvero che avrei imparato a memoria prima . No, non è eccitante. Ti farà glassare. Ma è un concetto ridicolmente facile da insegnare. Basta mostrare un tavolo 1-D e farli passare attraverso alcuni esercizi mentali:

Lesson 1:
This is 10 bytes of memory. This is the letter "a" being put into cell number 3. "a" is the value, and 3 is the address. OK? This is the number 3 being put into cell 5. Its value is 3 and it's address is 5. Now what can the number 3 mean? Well it could be just a number 3 -or- it could be a reference to address 3. Just like 1 might be a number or might be a country code. It's just a number, it all depends on how we treat it.

Lesson 2:
Let's learn to count in binary. Let's count to 10 using binary finger counting. Interesting no? See how that only needed 4 fingers? So we say that only 4 bits are needed (1/2 cell). What's the highest you can count to on one hand (answer is 31). How about 2 hands (answer is 1023). Explain how more bits means higher number ranges. Remind them that a memory cell is 8 bits. Ask what happens when a number needs more than 8 bits. How would they put a multi-byte number into memory (in a logical way)? Introduce them to chars, shorts, integers, and longs.

Lesson 3:
Here's a program I wrote in C++. It uses 32-bit integers. And this here is also a number. But this is a number used for pointing. By using this little asterisk thingie we're making a promise that the number is going to be used for pointing. And here's how we point it at the first number. The little ampersand fills the value in for us. Neat huh?

eccetera. Una volta scaricata la memoria di base, tutto il resto è dolce. Sono gli studenti poveri che pensano che il compilatore stia facendo qualcosa di magico (o che non devono mai pensare alla gestione della memoria) che tendono a lottare di più. E C ++ confonde le acque perché alcune cose vengono automaticamente ripulite (cioè un vettore normale) mentre altre cose non lo fanno (cioè un vettore assegnato usando "nuovo"). E non farmi nemmeno iniziare sulle stringhe (char * vs. std :: string - prova a spiegarlo senza conoscenza del puntatore).

Non so su quale piattaforma sarà destinata la tua competizione robot, ma se si tratta di un ambiente con memoria limitata, le capacità di gestione della memoria sono fondamentali.

Modifica

Una volta che hai insegnato loro i fondamenti, allora sì dico di andare C ++ fino in fondo. Tecnicamente sono solo diverse librerie, ma sì, non c'è motivo di confonderle con più di un paradigma. Dare loro strumenti C ++ (che include puntatori e matrici).

    
risposta data 12.09.2011 - 06:10
fonte
31

Should I start using STL from day one, esp. vector or just stick with standard arrays? Arrays are easier to introduce but the pointer errors may be harder to catch.

sicuramente andrà bene usando i tipi di libreria standard. un std::string o std::vector è quello che dovrebbero usare spesso e (la stragrande maggioranza delle implementazioni di) questi tipi offrono una qualche forma di rilevamento degli errori e gestione degli errori, astraendo molte delle complessità dagli studenti.

puoi trascorrere una buona quantità di tempo insegnando agli studenti come è strutturata la memoria e come gestire la memoria (stile C), oppure puoi andare direttamente al lavoro usando i tipi idiomatici della lingua quindi spiegare i dettagli di implementazione, se necessario (e quando hanno una migliore comprensione di ciò che è una matrice e dove sono utilizzati).

la sintassi di std::vector (create / read / write) non è molto più complicata di una matrice C. in confronto, la gestione manuale della memoria e tutti gli errori comuni che i nuovi studenti fanno con i C array sono molto più difficili da imparare, insegnare e usare.

For I/O, should I stick to cout, etc. or do you think printf would be easier to learn?

cout . personalmente, penso che cout sia più facile da imparare. forse, cosa più importante, dovresti scegliere cout perché è più sicuro, versatile e ti consente di definire come viene stampato un oggetto, il che significa che hai già funzionalità integrate e typesafety usando alcuni tipi di libreria standard. infine, ti ritroverai con programmi misti quando ti rendi conto che potrebbero anche aver bisogno di imparare cout oltre a printf .

infatti, penso che dovresti leggere C ++ accelerato, di Koenig e Moo ed eventualmente usarlo per istruzioni (rispondendo alla domanda 3 indirettamente). nel libro, introducono std::cout appena prima di return (pagina 3) e salvano puntatori e array fino al capitolo 10. se potessi copiare e incollare la prefazione di quel libro come risposta alla tua domanda, lo farei. (nota: ti consiglio di leggerlo per la prospettiva di insegnare c ++).

Modifica Ecco la prefazione

Are there any online resources for C++ that are suitable to use for such young learners?

se non vuoi usare Accelerated C ++ (che presuppone un certo background con la programmazione in generale), allora forse ti piacerebbe Eckel's Thinking in C ++ . Non l'ho letto, ma è un testo introduttivo C ++ liberamente distribuito.

    
risposta data 12.09.2011 - 12:26
fonte
11

Una cosa da considerare è che nel tipico sistema FIRST le strutture di dati di qualsiasi forma (structs, classes, array, vettori, liste) giocano un ruolo molto piccolo. In genere gestisci una quantità molto piccola di dati del sensore e usali per decidere una quantità molto piccola di movimenti dell'attuatore.

Ma ciò che fa gioca un ruolo enorme e può essere molto difficile da capire sono tutte le diverse forme di controllo che continuano.

Quindi metterei molta enfasi sul controllo. Inizia con le basi: if , for , while . Invitali a praticarli molto. Invitalo a conoscerli bene ...

... ma poi diventa più difficile. Qualsiasi codice di robot di dimensioni moderate arriva ad alcuni schemi di controllo più complessi:

  • Un grosso ciclo "principale", che chiama tutto

  • Macchine di stato (queste vengono visualizzate molto)

  • Salvataggio di valori precedenti / contatore corrente (come per PID)

Questi sono difficili da capire per i principianti. Pensare a come un programma si muove attraverso un codice come questo è fonte di confusione, potresti non rendertene conto ora, ma lo è. Darà ai tuoi studenti molti più problemi rispetto alla lingua stessa.

Inoltre, buona fortuna! Spero che la stagione vada bene.

    
risposta data 12.09.2011 - 09:19
fonte
8
  • Should I start using STL from day one, esp. vector or just stick with standard arrays? Arrays are easier to introduce but the pointer errors may be harder to catch.

Il problema con gli array è che qualsiasi cosa tranne gli esempi di libri di testo semplici richiede array di dimensioni dinamiche, e nel momento in cui hai bisogno di array di dimensioni dinamiche, std::vector è molto più semplice. Inoltre, l'unico modo per gestire in modo sicuro array di dimensioni dinamiche è quello di includerli nella tua classe, il che sarebbe un errore di% scomposizione in std::vector .
Contrariamente alla credenza inspiegabilmente popolare, gli studenti possono utilizzare caratteristiche che richiedono l'implementazione di complesse meccaniche senza sapere come implementare tali animali stessi. Come ho detto in un commento: non penseresti nemmeno di pensare di non insegnare le stringhe in altre lingue, solo perché la loro implementazione è complessa, vero?

  • For I/O, should I stick to cout, etc. or do you think printf would be easier to learn?

Perché un insieme di convenzioni di stringa in formato arcaico che fanno esplodere il tuo programma attraverso il tetto nel momento in cui ottieni qualcosa di sbagliato (che accade nel momento in cui cambi una typedef in qualche intestazione apparentemente non correlata) è preferibile al tipo di sicurezza di std::cout ?

  • Are there any online resources for C++ that are suitable to use for such young learners?

La maggior parte delle risorse C ++, online o meno, sono cattive. E non sto parlando di usare caratteri o linguaggio difficili da leggere. Sto parlando di errori fattuali lampanti. Esistono pochissime buone risorse C ++, principalmente una o due dozzine di libri . L'unico che conosco è online Thinking in C ++ di Bruce Eckel.

Per un decennio, ho insegnato C ++ a studenti con background molto diversi usando Koenig / Moo C ++ accelerato come base. Il mio corso è cambiato molto in quel decennio, ora non è affatto vicino al libro, tranne per il principio di base: Usa gli idiomi moderni, corretti e sicuri fin dall'inizio. Non insegnare ai tuoi studenti come manipolare manualmente la memoria, solo per averli poi disimparare a favore di idiomi più sicuri. Come puoi vedere ad alcune delle risposte fornite qui, questo non funziona: quelli che una volta insegnavano ai metodi manuali, in primo luogo, raramente capiranno mai il vantaggio di usare idiomi moderni e sicuri.

    
risposta data 23.05.2017 - 14:40
fonte
7

Se vuoi insegnare il C ++, inizierei direttamente con i costrutti C ++ come vettore e cout, invece del sottoinsieme C come printf.

    
risposta data 12.09.2011 - 04:50
fonte
7

Should I start using STL from day one ...?

Sì. L'utilizzo di matrici native in C ++ è soggetto a errori e semplicemente cattiva pratica il 99% delle volte.

For I/O, should I stick to cout, etc... ?

Sì.

Are there any online resources for C++ that are suitable to use for such young learners?

Non sono così giovani. Imparare a programmare non richiede saggezza, solo motivazione e una mente aperta. Non riesco a pensare a qualcosa insegnato negli ultimi due anni di scuola superiore che sarebbe meglio preparare uno studente per imparare a programmare. Hai guardato Pensare in C ++ di Bruce Eckel? È disponibile per il download gratuito e molto ben recensito. Per favore evita il popolare ma orribile C ++: come programmare e tutti i libri di Sam's Teach Yourself C ++ ... .

    
risposta data 12.09.2011 - 07:36
fonte
5

Mi è stato insegnato il C ++ al liceo come un primo linguaggio di programmazione, sebbene fosse più simile a "C +", ora che ne parli; abbiamo usato cout per scrivere il testo nella console e nei file, ma anche alcune funzioni C ( getch() era il mio preferito).

Penso che il modo più efficace (e forse divertente) di insegnare le basi sia l'uso di un curriculum orientato all'obiettivo: iniziare a mostrare come produrre materiale, quindi input da tastiera, quindi semplice I / O di file, ecc. semplice gioco basato sul testo (o equivalente alla robotica). Quindi, quando chiedono "Come faccio X?", Puoi abbattere X in termini di esempi che hanno già visto, ad es. "Per prima cosa devi ottenere l'input dell'utente come abbiamo fatto in Z, quindi ..." (ovviamente non è così facile in pratica dato che X sarà probabilmente qualcosa che hanno bisogno di ulteriore conoscenza per poterlo fare, es. "Grafica 3D", ma potresti ancora spiegare come vorrebbe lavorare in un modo ad alto livello).

Gli esempi che gli mostri inizieranno come magia incisa su una scatola nera, i cui misteri vengono svelati mentre pezzi del puzzle di programmazione vengono lentamente scoperti. Ad esempio, i tuoi studenti apprenderanno le basi di if s abbastanza rapidamente, ma probabilmente non realizzeranno che un'espressione booleana non è esclusivamente limitata all'utilizzo all'interno di una condizione di if (che porta al classico codice if (blah) return true; else return false; ).

Le sottigliezze del fatto che tu scelga un array o un vettore come un contenitore sembreranno inizialmente irrilevanti per gli studenti. Un vettore / array sarà semplicemente un modo per avere un sacco di variabili come una variabile, accessibile tramite un indice. Attenersi a uno dove è possibile. I puntatori non saranno compresi fino a più tardi. Questo non vuol dire che non dovresti spiegare le cose; solo che non puoi spiegare tutto in una volta, e le cose che spieghi non saranno completamente assorbite. Gli umani imparano organicamente, non in modo lineare. Stavo usando cout per un paio anni prima di aver capito correttamente cosa fosse l'overloading dell'operatore!

Oh, e non aver paura della ripetizione. "Questo è come il programma Hello World che abbiamo fatto - ricorda come abbiamo scritto il testo alla console?" (no ...) "Ripercorriamolo per essere sicuri." ... E fai domande! Mantieni gli studenti impegnati con divertenti esempi e molte interazioni.

C ++ è un linguaggio complesso e, indipendentemente da ciò che fai, una quantità significativa di quella complessità (e quella del mestiere di programmazione in generale) andrà persa nei tuoi studenti. Tutto ciò che mostri loro sarà nuovo per loro; la maggior parte non affonderà ad un livello profondo di comprensione (almeno, non subito). Come funziona la memoria, come interagiscono i componenti di un PC, quali sono lo stack e l'heap, i puntatori, le classi, anche i loop e le catene if non saranno correttamente capite dalla maggioranza. Questo va bene! Non devono essere capiti per essere usati - una quantità incredibile di programmi interessanti può essere scritta con funzioni di 1000 righe super-brutti con% ridondante nidificato di quintuplo if e 43 variabili denominate cose come x_2r . L'importante è che gli studenti imparino e migliorino costantemente . Le scatole nere vanno bene finché diventano trasparenti (o almeno grigio traslucido) nel lungo periodo. Alla fine del corso, potrebbero non sapere quali sono i pattern di design, ma dovrebbero essere in grado di guardare indietro ai programmi che hanno scritto nelle prime settimane e cringe al loro codice. Dovrebbero capire a un livello significativo di dettagli come funziona il primo programma che hanno scritto (mentre quando lo hanno scritto non avevano idea). Ma loro non sapranno tutto - ancora .

    
risposta data 12.09.2011 - 05:41
fonte
5

Ho preso un sacco di lezioni di programmazione nella mia vita dalla scuola superiore all'università. Posso dire che non ho imparato molto dalla mia prima classe c ++ oltre a come stampare cose su uno stream.

Il mio consiglio, da giovane studente, che negli ultimi anni ha avuto solo un vero lavoro come sviluppatore, è non sminuire le cose. Dì loro cosa stanno facendo e come funziona fino al livello del sistema operativo (non c'è bisogno di entrare in IMO comp in inglese).

Penso che insegnare loro C sia un modo migliore per farlo (sarà quasi sempre compilato come C ++ come sai). Insegnare loro cosa sia realmente il terminale, come il loro programma interagisce con esso, che una stringa è una matrice di caratteri terminata con un \ 0 in memoria, quale malloc è e come C ++ lo astrae, come un char e un int sono memorizzati nella memoria , ecc ... Queste cose sono ciò che rende qualcuno in realtà sapere come risolvere un problema quando lo incontrano nello sviluppo.

Non posso sottolineare l'importanza di lasciare che i bambini programmino e di essere lì principalmente per rispondere alle domande. Nella mia esperienza, impari una lingua usandola. Libri e lezioni possono essere utili e sono necessari per iniziare, ma alla fine, dico di dare loro un file C / C ++ e di dire: Questo è un esempio di X, vorrei che tu facessi Y (che può essere fatto hackerando X). Mostra loro come usare le pagine man (se usano * NIX) o mostrale cplusplus.com e lascia che esplorino la std libs per capire le cose da soli.

TL; DR Lascia che i bambini insegnino loro stessi. Essere lì per fornire la struttura e rispondere alle domande.

Inoltre: le liste collegate sono la verità!

    
risposta data 12.09.2011 - 09:50
fonte
4

Non stai insegnando loro a programmare in modo generale, stai insegnando loro una sorta di programmazione incorporata usando Robot e così via. Se ho capito bene.

In primo luogo, penso che dovresti controllare quali librerie utilizzerai e cosa ti serve.

Se ti capita di avere una libreria C da usare o C-like con un sacco di puntatori e C-array, allora suppongo che tu abbia bisogno di un modo per insegnargli come usarlo o perché lo usi.

Ma puoi mostrare loro dei semplici codici per avviarli con stringhe e vettori, ecco come funziona C ++. Ciò non significa che non puoi insegnare loro dei suggerimenti.

Forse dovresti chiarire le differenze tra C ++ di basso livello (che assomiglia a C) e C ++ di alto livello con STL. Una delle cose più difficili in C ++ per i principianti è vedere cos'è C, cos'è il C ++ e quali sono le diverse API di sistema.

Dato che l'obiettivo qui non è quello di imparare la programmazione generale, ma di inserire una competizione Robot, avrei orientato l'insegnamento in questo modo.

    
risposta data 12.09.2011 - 10:05
fonte
2

Ho iniziato a insegnare agli studenti C ++ alla fine dell'anno scorso e quest'estate anche al nostro PRIMO team di robotica.

Usiamo il programmazione - Principi e pratica con C ++ di Stroustrup . Ho trovato il libro accessibile, leggibile e ben organizzato. Abbiamo avuto circa 6 studenti per leggere da soli i capitoli. Sono lì per aiutarli con la terminologia e le domande. Fanno tutti gli esercizi del libro.

Ho fatto lavorare gli studenti attraverso il capitolo 14. Saltare i capitoli sui flussi (non utile per la programmazione FRC). Attraverso il capitolo 14 è utile perché ottengono un'introduzione alle sottoclassi. Tuttavia, probabilmente hanno bisogno di andare più avanti nel libro per capire meglio costruttori e distruttori relativi alle sottoclassi.

Non sottovalutare i tuoi studenti. Gli studenti sono felici di avere il libro, leggere, imparare e fare gli esercizi; e questo era durante l'estate nel loro tempo libero! Ci sono molti studenti che non capiranno. Dovrebbero passare a qualcos'altro; non tutti comprendono la programmazione.

La barriera più grande non è la lingua o il libro; è l'ambiente di sviluppo. Visual Studio Express può essere scoraggiante per i nuovi utenti. Puoi essere prezioso nell'aiutare gli studenti a concentrarsi sulla programmazione piuttosto che sull'ambiente. Tuttavia, l'apprendimento dell'ambiente è prezioso in quanto i programmatori impiegano molto tempo ad adattarsi ai nuovi sistemi di sviluppo.

Buona fortuna.

    
risposta data 14.09.2011 - 18:08
fonte
1

Dici di voler insegnare loro il C ++ ma non insegnare loro alcun costrutto C, ma la maggior parte dei costrutti di programmazione che dovranno prima conoscere sono comuni a tutte le lingue e le versioni C ++ sono radicate in C:

  1. Ecco come si crea un programma [int main (..) {return 0; }]. Fornire una panoramica di base sull'ambiente di programmazione che si desidera provare. Avranno bisogno di sapere come creare un progetto e in realtà compilarlo / eseguirlo.

  2. Questa è una variabile. Le variabili possono memorizzare dati (int, char, float, ecc.).

  3. Stringhe (quelle in C ++ sono più facili da usare con cin).

  4. Ecco come leggi e scrivi dati (cin, cout). "Ciao,% s!"

  5. Condizioni (i computer devono prendere decisioni).

  6. Loops (i computer sono bravi a fare la stessa cosa più e più volte). Mostra while e per loop.

Questo dovrebbe richiedere circa due lezioni di un'ora ciascuna. Assicurati di preparare una serie concisa di note a cui possono fare riferimento nel componente pratico. Non stai cercando di renderli dei programmatori brillanti, quindi dai esempi di come leggere dalla console, creare strutture e tutto ciò che dovrebbero fare. Utilizzare solo funzioni supportate dalla lingua, non librerie di utility personalizzate. Li confonderai solo di più.

Sin dall'inizio, guidate con l'esempio e mostrate loro esempi di codice ben definito. I rientri devono essere corretti, corposi e parentesi coerenti nello stile con cui si è più a proprio agio. I nomi delle variabili dovrebbero essere significativi. Se mostrate la pessima come un esempio, impareranno che lo slop è accettabile. È un brutto punto di partenza. Sottolinea l'importanza di ottenere il rientro corretto: ho scoperto che quando il lotto che insegnavo rientravano coerentemente nel loro codice, erano più facilmente in grado di vedere dove stavano andando male. Ciò era dovuto al fatto che la maggior parte dei loro errori era un ambito non corretto per le operazioni (mettendo operazioni in loop / condizionali che non dovevano essere o inverse).

Quindi passa al lavoro pratico. Il modo migliore per imparare qualcosa è di romperlo e capire perché. Dovrai assicurarti che abbiano un ambiente facile da usare per compilare il loro codice. Documentalo con schermate nelle tue mani.

Un buon esempio che mi ha aiutato ad ingannare alcuni concetti è stato quello di costruire una macchina di Coca Cola:

  • Emette un menu di voci e prezzi (la memorizzazione del menu era una matrice di una struttura definita dall'utente. Potrebbe essere una classe in C ++). L'output richiedeva un ciclo.
  • Leggi nella selezione dell'utente.
  • Chiedere denaro all'utente. Potrebbero semplicemente inserire la denominazione della moneta in centesimi (1, 5, 10, 20, 50, 100, 200 in Aus). Ignora denominazioni sconosciute. Mentre l'utente non ha messo abbastanza soldi, continua a chiedere (loop).
  • Calcola la modifica richiesta (divisione modulo), fornendo il numero minimo di monete. Stampa l'output sullo schermo.
  • Attendi il prossimo utente.

Dopodiché puoi passare ai costrutti C ++; non vuoi immergerti troppo prima di poter almeno fare un programma di base.

E soprattutto, hai un sacco di tempo libero e pazienza da dedicare alle domande. Ce ne saranno molti, e molti di loro ti faranno rabbrividire perché sono così banali che la risposta è ovvia per te.

    
risposta data 12.09.2011 - 06:40
fonte
1

Penso che non dovresti insegnare cose dal punto di vista del C ++ ("C ++ hello world"), ma dal dominio del problema - in questo caso, la robotica - punto di vista. Quindi, il tuo mondo Ciao sarebbe lampeggiare un led o guidare un motore.

Naturalmente potresti / dovresti decomporre ogni piccola attività di robotica in un sottoinsieme di azioni C ++ che hanno un significato concettualmente significativo, coinvolgendo tipi, funzioni e operazioni di IO.

Per quanto mi riguarda, non sono un programmatore professionista e ho cercato di imparare Java, C ++ e Python. Ho davvero iniziato a realizzare qualcosa (Python) quando ho avuto (reali) problemi da risolvere. Questo mi ha portato dritta al punto, evitando un'eccessiva attenzione ai dettagli di implementazione incidentale del linguaggio stesso.

Quindi consiglierei: non leggere il manuale di una lingua, ma invece imparare a fare le cose con la tua lingua preferita. Questo è ciò che rende le persone motivate, credo.

    
risposta data 12.09.2011 - 18:19
fonte
0

Insegnerei un C ++ rigoroso. Sai come quando scrivi printf e lo dai a piccoli parametri o al tipo sbagliato succede qualcosa di strano? e se usi dei puntatori non validi possono accadere cose brutte? NON INSEGNARE CHE

Dal primo giorno vorrei insegnare come usare i riferimenti, STL e dire che PERDONO I MARCHI per usare i puntatori. Non insegnare neanche a puntatori intelligenti. L'unica volta che noto di usare i puntatori è quando faccio GUI e gli oggetti (come una scatola di immagini) devono esistere ed essere un'immagine valida o nulla. Per la programmazione da console non ho usato i puntatori (smart o raw) per molto tempo.

Quindi insomma non insegnare loro nulla che possa dare loro problemi. Insegnare iostreams, struct, dire loro che perdono i segni anche su typecast e non provare a insegnare design. Non vuoi che qualcuno diventi un Professionista stagionato

    
risposta data 12.09.2011 - 08:33
fonte
0

Non è una serie di conferenze in C ++, ma COMP1917 di Richard Buckland è una serie di conferenze ottimamente eseguita sulla programmazione in C (seguito da COMP1927 , strutture dati).

Secondo me, C ++ è troppo complesso per i nuovi studenti, ma C è più semplice e fornisce una buona base per la programmazione dei sistemi che i nuovi programmatori C ++ spesso mancano.

    
risposta data 12.09.2011 - 19:17
fonte
0

Vorrei iniziare con pezzi significativi di codice boilerplate, aiutarli a "fare qualcosa di interessante" con la programmazione subito e perfezionare la loro comprensione di come le cose funzionano nel tempo. Non hanno bisogno di apprezzare o comprendere tutte le complessità del C ++ per fare un lampeggio LED. Devono solo sapere "se inserisci questo codice, farà lampeggiare il LED". E poi "hey, parliamo di cos'è un loop ora, se scrivi un loop, puoi far lampeggiare il LED 50 volte senza dover scrivere 50 righe di codice, non è bello?" Ora parliamo di condizionali, quando l'utente preme il pulsante A sul control box, vogliamo attivare la pneumatica per alzare un flag, ecco come aggiungeremo il codice per farlo. Oppure, se lo switch 2 sulla nostra scatola di controllo è attivato, eseguiamo il motore di foratura in retromarcia anziché in avanti. Ecco come appare una dichiarazione condizionale e come si indica al motore del trapano quale direzione eseguire ....

Se mantenete le cose focalizzate sull'insegnare loro "abbastanza" per risolvere i problemi a cui sono interessati, renderà le cose molto meno opprimenti e più accessibili. Se sono veramente interessati e vogliono capire le complessità, probabilmente torneranno indietro e leggeranno un libro completo sulla programmazione o sul corso estivo presso il locale JC.

Fai un elenco delle "cose che vogliono essere in grado di controllare" sul loro robot e trasforma ognuno di loro in una lezione ... qual è il minimo che devono sapere ...?

  • fai qualcosa di "bello da vedere" se un interruttore si trova in una particolare impostazione?
  • indicare a una valvola pneumatica di aprirsi o chiudersi (ad es. un attacco grabber)?
  • attiva e disattiva i motori del trapano (per il drivetrain)?
  • fare in modo che il robot cambi direzione se un sensore di rilevamento ostacoli è attivato?
  • il robot commuta tra le modalità 2 ruote e 4 ruote motrici?
  • regola la sensibilità del joystick?
  • ecc.

Mi limiterei ad insegnare i contros che sono più infallibili, come insegnerei cout su printf, perché gli specificatori di formato sono molto facili da mescolare e un identificatore errato è spesso una ricetta automatica per mandare in crash il programma. Allo stesso modo, il vettore offusca alcune delle complessità di gestione della memoria. Non preoccuparti di tutti i dettagli su come funzionano le cose, o cosa sia la libreria STL, solo il minimo che devono sapere per realizzare X (che potrebbe richiedere l'utilizzo di una infrastruttura della libreria STL, ad esempio)

    
risposta data 16.09.2011 - 23:06
fonte
0

Utilizza Come programmare C ++ di Deitel e Deitel. Libro di testo ECCELLENTE secondo me.

Sembra che tu stia cercando di insegnare ai novizi come programmare e poi farli programmare ad un livello avanzato allo stesso tempo. Se speri di dar loro un po 'di scimmie, vedi la scimmia fare snippet di codice senza capire che sei destinato a fallire.

Stai lontano da STL per una classe per principianti.

Se hai già una soluzione di codifica per il tuo robot - o una IDEA MOLTO BUONA di come apparirà allora forse puoi "mappare" le lezioni nel libro di testo alle attività di codifica per il robot. Ma lascia che il libro di testo dia impulso all'apprendimento.

Se imposti forzatamente la codifica, dando agli studenti lezioni molto strette e l'esposizione alla lingua, allora penso che man mano che l'oceano del codice che scrivi diventerà sempre più grande, sarà come aver appena imparato a remare con i cani e affogare perché è richiesto nuoto REALE.

Non si tratta di "dovrebbero imparare cout o printf?" È una questione di apprendimento sufficiente per avere informazioni su come scrivere codice per determinati compiti di programmazione del robot da risolvere.

Se si trattasse di un compito di lettura, quali sarebbero i risultati se tutti sapessero che sono semplici frasi verbali e solo la metà del vocabolario KNOW sarà richiesto.

    
risposta data 07.10.2011 - 03:29
fonte

Leggi altre domande sui tag