Domanda

Il prossimo autunno terrò un corso sui fondamenti della programmazione, corso di informatica del primo anno.Quali sono i pro e i contro dell’insegnamento delle indicazioni in un corso del genere?(La mia posizione:dovrebbero essere insegnati).

Modificare: Il mio problema con l'argomento "soddisfa il tuo pubblico" è che nei primi due anni di università, noi (professori) non sappiamo se gli studenti vorrebbero diventare scienziati o no...vorremmo saperlo, ma dobbiamo trovare un equilibrio tra coloro che resteranno a scuola (4 anni non fanno uno scienziato) e coloro che faranno gli ingegneri.

Decisione finale: Almeno riferimenti, ma possibilmente puntatori senza aritmetica dei puntatori.

È stato utile?

Soluzione

Per lo meno dovresti insegnare riferimenti o un concetto equivalente. Penso che probabilmente dovresti prenderti facile su cose come puntatore aritmetico, array C e stringhe, ma indirezione è un concetto molto importante nell'informatica e gli studenti dovrebbero essere introdotti.

Altri suggerimenti

Sì.

I puntatori sono alla base di un numero enorme di concetti in altre lingue di livello superiore, e sono fermamente dell'opinione che devi insegnare una certa quantità di cose di livello inferiore per facilitare una buona comprensione del perché ci preoccupiamo di qualcosa di più alto tutto.

Una volta che hai capito un po 'di come viene assegnata la memoria e di come viene affrontata e manipolata con i puntatori, spiegare molti altri costrutti diventa più facile. Ad esempio, spiegare a NullPointerException In Java, o persino il concetto di riferimenti in tali lingue è il gioco del bambino se hai qualcuno che capisca i suggerimenti in C (e meglio ancora, se fanno anche riferimenti in C ++).

Insegna loro assolutamente. Comprendere l'indiulzione è essenziale per la programmazione, sia con puntatori, riferimenti, legame dinamico o un numero qualsiasi di altre cose. Ora ovviamente non iniziare con loro, ma comprendere indirezione è almeno tanto quanto la comprensione delle idee di flusso di controllo.

Il con, naturalmente, è che alcune persone non lo ottengono e faranno male o abbandoneranno. Se questo è un percorso per le persone che vogliono essere Majors CS, non sudare perché stai solo dando loro incentivi a cambiare major prima piuttosto che dopo. Se è più o un corso di ED generale per le persone che sono un po 'interessate alla programmazione, allora probabilmente dovrebbero essere ancora introdotti, ma non classificati duramente o pesantemente.

Durante il mio primo anno come studente CS, ho seguito un corso Java in autunno che era l'introduzione generale. Il professore non ha insegnato direttamente ai suggerimenti, ma ha insegnato il concetto di riferimenti e perché è possibile modificare gli oggetti e non quando i primitivi quando entrambi sono passati in un argomento.

Durante il mio 2 ° semestre, ho seguito il corso successivo della serie, che riguardava C, e questa classe si basava fortemente sui suggerimenti.

Per un'introduzione alla classe di programmazione, direi solo menzionare riferimenti, ma non indicazioni direttamente.

Penso che un corso di "fondamentali della programmazione" dovrebbe almeno toccare l'architettura del processore di base e il linguaggio dell'Assemblea, e se lo fa, non puoi davvero fare un caso per non discutere di puntatori. Se insegni solo lingue di livello superiore (code byte), allora immagino che i suggerimenti confondono il pubblico.

Professionisti:solida comprensione del modo in cui la memoria viene utilizzata dalla macchina, della differenza tra (e delle insidie ​​​​di) puntatori ai dati sull'heap rispetto a puntatori ai dati sull'heap.puntatori ai dati nello stack, passaggio di metodi per indirizzo, ecc.

Contro:complesso per un pubblico che non è ancora informato (o non ha avuto abbastanza tempo per assimilarne i concetti) dell'architettura del computer, compreso cosa è lo stack, cosa sono i registri, le convenzioni di chiamata, ecc.

Quindi, per riassumere, dipende molto dal tuo pubblico e dalle lingue che affronterai (i puntatori non avranno significato nel contesto di LISP o Java), così come quanto in profondità sei disposto ad andare nella direzione di cos'è l'heap, cos'è lo stack, come l'ambito viene tradotto in stack (cioèperché non restituire mai un puntatore a una variabile locale), ecc.

Quando ho insegnato i puntatori a un corso di ingegneria, alla fine ho avviato un debugger su un semplice programma "ciao mondo" e ho mostrato agli studenti il ​​codice macchina effettivo, i valori dei registri e i corrispondenti dump della memoria, con la manipolazione dello stack e il passaggio dei parametri, ecc., ma erano pronti per questo.Il tuo pubblico sarebbe ricettivo a un'esplorazione così approfondita, per garantire una solida comprensione di ciò che accade dietro le quinte, e sarebbe Voi essere disposto ad arrivare a tanto?:)

Penso che non dovresti insegnarlo primo. Ma più tardi, una volta acquisiti concetti di base di programmazione.

Un buon esempio è l'ultimo libro StrousTrup: Programmazione: principi e pratica usando C ++ Dove insegna come fare un parser, l'uso di I/O (streams) e l'uso della GUI prima ancora di parlare di suggerimenti!

Penso che sarà un buon riferimento per l'insegnamento perché è più naturale capire il modo in cui costruiamo idee invece di quanti vincoli (ad esempio la gestione della memoria) dobbiamo gestire contemporaneamente per far funzionare un software. Ti consiglio davvero questo libro di avere una nuova prospettiva sull'insegnamento dei fondamenti della programmazione.

Dipende davvero dall'obiettivo del tuo corso: l'insegnamento della programmazione e dell'insegnamento dell'informatica sono due obiettivi separati, e sebbene non si escludano a vicenda, le classi introduttive generalmente non insegnano entrambi ugualmente bene. Ecco un esempio della differenza: dire che vogliamo imparare a ordinare un elenco. Un corso di programmazione in C ++ ti insegnerebbe a utilizzare la sintassi di un modello di funzione STD :: Ordina e i compiti potrebbero scrivere diversi funttori di confronto. Un corso di informatica ti spiegherebbe com'è un tipo di unione, come appare l'algoritmo in pseudo-code, e le sue caratteristiche di performance/spazio e i compiti avrebbero scritto la funzione di tipo stesso.

Quindi, se stai insegnando una programmazione introduttiva, allora sì, dovresti insegnare ai tuoi studenti i suggerimenti.

Se stai insegnando informatica, allora no, non è necessario capire i puntatori a livello introduttivo.

Chiunque si definisca un buon programmatore deve sapere come funzionano i suggerimenti; Essere un buon programmatore implica di non conoscere un solo linguaggio di programmazione, ma che sanno come funzionano i linguaggi di programmazione in generale, permettendo loro di adattarsi ai linguaggi di programmazione che non hanno mai visto prima.

Ciò non significa che un corso fondamentali del corso di programmazione dovrebbe essere insegnare puntatori.

  • Se il tuo obiettivo è quello di dare a queste persone una familiarità completa e ben arrotondata con i linguaggi di programmazione in generale, allora sì, i suggerimenti ne faranno parte.
  • Se il tuo modo di introdurli alla programmazione è usare inizialmente un linguaggio di programmazione, con l'intenzione di coprire altre lingue nei corsi successivi e i puntatori non sono rilevanti per quella lingua, allora non c'è ancora bisogno di parlare di puntatori.

Penso che ci sia molto da dire iniziando le persone in una sola lingua, piuttosto che provare a coprire ogni stile di linguaggio contemporaneamente.

Il mio primo corso di programmazione introduttiva ha usato Haskell. Non è stato fino a un corso successivo usando C che sono stati introdotti i puntatori (ero già un buon programmatore C e C ++ quando ho seguito il corso; quei soggetti erano obbligatori).

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