C'è una percentuale significativa di studenti che non possono imparare a programmare?

Ben I. 10/30/2017. 17 answers, 21.591 views
struggling-students

Pochi giorni fa ho avuto un sophomore di scuola superiore (che è ora nella sua terza classe CS, dopo aver superato i due precedenti) guardare questo codice Java per un solido 3-5 minuti e non è riuscito a capire cosa ha fatto:

int answer = -1;
while (answer < 1 || answer > 5){
    System.out.println("Please enter a number from 1 to 5.");
    answer = myScanner.nextInt();
} 

Non riusciva a identificare la condizione finale del ciclo, e non capiva perché la answer venisse inizialmente impostata su un numero al di fuori dell'intervallo 1-5. Le intuizioni che avrebbe bisogno di comprendere questo codice sono state trattate in una classe precedente da un insegnante diverso, ed è stata coperta una seconda volta dai primi principi nel mio.

Non ho particolarmente bisogno di aiuto con questo studente. La tuturerò e le darò i fogli di lavoro supplementari. Sarà quasi certamente gonna e va bene, ma se il passato è un buon indicatore, non potrebbe mai riuscire a mettere tutto insieme, ei progetti più grandi saranno impossibili per lei senza un aiuto esterno (che assicurerò che lei riceve).

Tuttavia, ogni anno, trovo un piccolo numero di studenti che semplicemente non sembrano farlo. Essi arrivano, ma il programma principale CS diventa sempre più difficile per loro come i loro quattro anni passano. Must it be this way?

C'è qualche prova o ragione per credere che ci siano studenti che in realtà non possono imparare a programmare? Oppure, spingendo la domanda in giro, ci sono prove o ragioni per credere che ogni studente possa davvero imparare a programmare?

5 Comments
15 chrylis 10/30/2017
Una prospettiva degna di nota è il parere di Joel Spolsky sui puntatori e "ottenerlo" : ho capito che la comprensione dei puntatori in C non è un'abilità, è un'attitudine.
7 Cort Ammon 10/30/2017
Dovrò scavare la risposta, ma una domanda come questa è stata fatta in precedenza. I commenti e le risposte puntano verso uno studio in cui un professore ha creato un "test" per determinare se si sarà mai "ottenuto" o no. Ha dimostrato che è stata una buona prova. Molti anni dopo, è tornato e ha detto: "Mi dispiace, ho sostenuto che il test ha funzionato, in realtà non lo ha fatto".
17 Ben I.♦ 10/30/2017
@CortAmmon Forse ti riferisci al famigerato Il Cammello ha Due Humps , e la sua retrazione parziale ?
7 Andrea Lazzarotto 10/31/2017
"Deve essere così?" Sì. Come per le matematiche, per suonare il pianoforte, niente. Ogni persona ha un diverso tipo di intelligenza. Alcuni sono matematici orientati, alcuni non lo sono.
14 Ben I.♦ 10/31/2017
@Lynn accetto che il codice potrebbe essere più chiaro, ma non è ancora molto complesso. Dopo quante ore di corso di studio in Java sarebbe ancora ragionevole per qualcuno non essere in grado di seguire questo codice snippet, imperfetto sebbene possa essere? 20? 100? 500? 10.000?

17 Answers


Buffy 10/30/2017.

Ci sono diversi motivi per cui gli studenti don't imparano, ma pochi non medici perché non possono. Lasciando da parte le ragioni mediche, come lo squilibrio ormonale o altri disturbi, penso che gli studenti che non imparano hanno poco desiderio di imparare o hanno avuto un insegnamento povero in passato. Anche gli studenti con alcuni disturbi dell'apprendimento possono imparare il desiderio e l'insegnamento del paziente, ma può richiedere molto lavoro e comprensione dello studente per abilitarlo. Una volta che il problema comune con gli studenti è introversione estrema. Questo può rendere difficile per lo studente cercare aiuto e fare domande. È bene se potete trovare i modi per aiutare gli studenti a trattare in modo positivo. Vedi questa domanda per ulteriori informazioni sull'idea qui.

Desiderio

Alcuni studenti non imparano quello che stai insegnando perché hanno poco desiderio di imparare e non hanno alcun incentivo a mettere nel lavoro richiesto. Possono essere nel vostro corso per ragioni sbagliate e preferirebbero essere altrove se fosse possibile. Hanno messo nel tempo, ma nient'altro. Probabilmente non c'è molto da fare per loro perché quel desiderio deve essere interno. Alcuni studenti sviluppano il desiderio dopo un periodo di indifferenza, ma non credo che questo sia comune. Ho avuto dei laureati in CS che erano solo nella maggioranza perché la loro famiglia (padre) li avrebbe sostenuti solo se rimasero. Questi studenti possono essere consigliati a studiare qualcosa di più interessante per loro, se possibile, anche se richiede che ciò oltre alla computazione. Meglio, però, se potete consigliare i genitori per sostenere meglio il loro bambino.

Naturalmente, sono necessarie alcune classi, e quindi l'interesse per alcuni sarà più alto e per alcuni sarà più basso. Se sai qualcosa degli obiettivi dello studente potresti essere in grado di connettere la classe corrente a quegli obiettivi, aumentando l'interesse e il desiderio.

Insegnamento povero

Molti studenti fanno male in CS (come nella matematica) a causa dell'insegnamento povero o indifferente; soprattutto l'atteggiamento di alcuni insegnanti che è bene lasciare alcuni studenti dietro. Non tutti gli studenti prendono la stessa quantità di sforzi per insegnare e ogni studente impara in modo diverso. Il mio solito mantra in questa situazione è che "I tuoi studenti non sono come te". Imparano diversamente da voi. La tua presenza in aula come insegnante è abbastanza prova che sei un caso speciale.

Alcuni bambini particolarmente brillanti fanno poco a scuola perché sono semplicemente annoiati e niente è abbastanza eccitante to them per mettere in sforzo. Alcuni studenti scoprono che altri soggetti sono particolarmente facili e non sanno davvero cosa sia da fare per imparare. Alcuni studenti non imparano perché nessuno li ha insegnati how to learn . Alcuni pensano che ascoltare qualcosa significa che hanno imparato e sono sorpresi più tardi quando non riescono a ricordare qualcosa, chiedendosi perché non l'hai mai insegnato a loro. Alcuni studenti hanno un'idea sbagliata fondamentale su una piccola cosa che ha sferrato in un grande blocco. Alcuni studenti non hanno mai avuto un'esperienza di apprendimento positiva (forse generalmente e forse solo in qualche argomento) e semplicemente odio tutto sul processo. Alcuni insegnanti dicono incredibilmente cose stupide agli studenti e anche alcune istituzioni hanno modi incredibilmente stupidi per affrontare gli studenti, danneggiandoli attivamente.

Ho esempi nel mio apprendimento e insegnamento di fondo di ciascuna di queste cose.

Come studente ero un pensiero non molto brillante quando ero un ragazzo ed ero quasi "trattenuto" per ripetere un primo grado. Tuttavia, ero solo annoiato annoiato con la scuola. Nessuno mi ha mai preoccupato di dirmi perché ero lì o perché o come dovrei cercare di avere successo. Essere annoiato ero un po 'di un malfattore, portando alla mancanza di sostegno da parte degli insegnanti. Più tardi, mi è stato dato un test di IQ e i risultati sono stati riportati a me come "probabilmente hai l'abilità di riuscire in un Junior College, ma probabilmente sarebbe solo frustrato da un completo programma universitario". Più tardi ho guadagnato un dottorato di ricerca, naturalmente, quindi la valutazione era un po '"off". Il primo corso in cui ho imparato qualcosa è stato in Plane Geometry in HS. Mi sono imbattuto dai problemi lì. Prima di tutto, la matematica era forse il mio peggior argomento. Il dottorato è naturalmente in matematica.

Nell'insegnamento ho avuto una volta uno studente con due problemi. In primo luogo stava morendo di una condizione cronica, ma anche era stato dato inganno la precedenza degli operatori da parte di un insegnante precoce che si rafforzava quando usava una calcolatrice tascabile troppo semplice. Non riusciva a farlo bene nella programmazione elementare e imparato ad odiarlo. Pensava che fosse stupido che non l'avesse get it e pensava che tutti i suoi insegnanti avessero anche pensato che fosse stupido. Credo di riuscire a convincerlo altrimenti prima di morire, ma abbiamo sbattuto le teste un po 'prima che il motivo per le sue difficoltà diventasse chiaro a me. Ci volle un po 'più a lungo per convincerlo che non cercavo attivamente di ingannarlo.

Una volta ho avuto una classe di studenti che stavano quasi tutti facendo molto male. Dal momento che il mio stile didattico doveva affrontarli, piuttosto che la lezione con la schiena a loro, la diagnosi era abbastanza semplice. Nessuno aveva mai insegnato loro come imparare in una classe. Sedevano passivamente e ascoltarono e guardarono, prendendosi nessuna azione. Gli ho chiesto uno perché non ha preso appunti e ha indicato la sua testa e ha detto "è tutto qui". Ebbene, avevo prove altrimenti, così ho dovuto interrompere il programma per insegnargli come imparare e costringerli a farlo. Ho discusso una parte del metodo in un'altra risposta su questo sito .

soluzioni

Tuttavia, se vuoi insegnare a ogni studente , devi know every student . Se qualcuno sta facendo male, è necessario cercare di capire perché questo è e di adattare una soluzione alle proprie esigenze. Per farlo devi avere a che fare con un ragionevole numero di studenti, ovviamente, quindi se sei un professore di 800 studenti, la cura individuale deve essere data dal tuo esercito di aiutanti. Ma anche 20 studenti so bisogno di aiuto. Questo è il motivo per cui l'abbinamento e il lavoro di gruppo sono così importanti e perché non si può sempre lasciare che gli studenti scelgano i propri gruppi. Devi ricevere un feedback dai membri dei gruppi (valutazione di pari livello) e devi trovare modi per agire su ciò che impari.

La soluzione per insegnare a ogni studente non è quella di tutelare individualmente ogni studente, ma di trovare modi in cui ogni studente possa imparare quello che hanno bisogno per imparare on their own terms. Non tutti gli studenti vogliono guadagnare primi voti. Vogliono imparare "abbastanza". Sono satisficing piuttosto che optimizing . È anche possibile farne un lavoro per loro, in modo che "non guadagnare primi voti" non significa "fallire".

Storia di successo

Una volta ho avuto due studenti (corso di compilatore) che stavano ripetendo il corso dopo la mancanza. I compagni di classe di questi due erano generalmente tra i migliori che abbia mai avuto in un gruppo. Ma questi due, apparentemente, non avevano mai avuto un'esperienza positiva in CS. Sembravano noiosi, richiedendo ripetutamente le spiegazioni delle idee più semplici. Fortunatamente il corso è stato insegnato in modo incrementale in cui gli studenti potrebbero accumulare punti verso il successo piuttosto che dimostrarlo su esami: un corso di progetto. Li convinsi di venire alle mie ore di ufficio e non c'era mai più tempo che non c'erano. Fortunatamente gli altri studenti non hanno richiesto un'alta manutenzione. Avevo anche modi semplici per gli studenti di fare domande quando lavoravano da soli e quindi questi due potrebbero ottenere piccoli aiuti ogni volta che ne avessero bisogno. Si è scoperto che questi due avvenivano (a) spiegandomi correttamente le cose alla fine del corso (b) ottenendo i voti più alti di quel termine, e (c) arrabbiando gli altri studenti che credevano di mettere questi due nella classe per farsi apparire cattivo. Il mio ultimo contatto con loro è stato quello di ricordare loro quello che avevano fatto e che potrebbero ripetere che altrove se fossero disposti a mettere la stessa quantità di lavoro. Penso che anche il lavoro di squadra ha aiutato qui e si sono sostenuti l'un l'altro in tutto. Da notare che non ho avuto bisogno di mettere più tempo nel corso per farlo. Le ore di ufficio erano necessarie e la mailing list per le domande era una caratteristica comune di tutti i miei corsi. Un'altra domanda qui cerca modi per rendere semplice questa comunicazione fuori classe , anche se penso che abbia bisogno di risposte migliori in questo momento.

5 comments
28 KRyan 10/31/2017
Anche questo manca di alcuna prova. Puoi think che "gli studenti che non imparano hanno poco voglia di imparare o hanno avuto un insegnamento povero in passato", ma potresti davvero sostenere questa affermazione con qualche prova? Ho letto prove contrarie a quella affermazione e, sebbene fosse tutt'altro che prova di qualsiasi tipo, penso che questa domanda abbia disperatamente bisogno di più delle generalizzazioni e, forse, del desiderio.
3 KRyan 10/31/2017
(Facendo due dovuta diligenza qui.) Sembra che il documento che avevo letto per suggerire che avessero prove che dimostravano che non tutti possono imparare a programmare è stata ritratta per aver esagerato le sue conclusioni. However , è possibile leggere la retrazione qui - non è ancora molto incoraggiante. Ciò dimostra che molti dei dati che sono stati inseriti nel documento ritratto sono reali e se le spiegazioni suggerite non dispongono di prove sufficienti, ci sono ancora problemi con i quali non conosciamo le cause.
2 KRyan 10/31/2017
Insomma, ancora una volta, vi consiglio caldamente di trovare delle ricerche e delle prove attuali per le tue affermazioni che la risposta alla domanda di titolo è "no". Sostiene questo e poi vai in tutte le tue ipotesi per motivi per cui gli studenti falliscono nonostante la mancanza di una popolazione destinata a fallire.
20 Buffy 10/31/2017
In realtà, dopo aver insegnato per circa 45 anni, il mio campione è> 10K. Ogni studente è un aneddoto, ovviamente, ma ce ne sono molti. Dal momento che ho anche insegnato in una grande varietà di luoghi, immagino di aver visto la maggior parte delle possibilità possibili.
1 Carl Christian 10/31/2017
@Buffy: Ho amato la tua risposta. Ora ho parlato e il mio primo lavoro di TA è stato 21 anni fa. Non hai detto una sola cosa che non è stata riconosciuta dall'esperienza personale o dall'ascolto di mio padre :)

nova 10/31/2017.

Può essere. È difficile dimostrare un negativo.

Come sapere che aiutano gli educatori in qualche modo?

Se questa conoscenza aiuta in qualche modo, come si confronta con tutti i modi in cui la credenza può essere dannosa?

  • Dare su studenti che "solo non lo faranno"
  • Non riflettere su come l'insegnamento possa migliorare, poiché quelli che sono falliti "solo non lo ottengono"
  • Notando "modelli" negli studenti che "non lo fanno"

Ci sono stati studenti che in privato avevo seri dubbi. Le spiegazioni ripetute non sono andate da nessuna parte. La traccia dopo traccia era lento e lavorato. Poi ... dopo ... alla fine ... l'hanno capito. Il prossimo anno hanno superato la classe. Più tardi, hanno ottenuto un lavoro come programmatore.

Mi sono reso conto che I just can't know . Gli studenti tornano a farlo insieme. Se avessi condiviso le mie sentenze, avrei completamente deragliato il loro successo. Posso solo aiutare ogni studente. E questo include credere che ogni studente sia in grado di apprendere la programmazione.

5 comments
8 Ben I.♦ 10/31/2017
Questa è una risposta sorprendentemente pratica.
1 kubanczyk 10/31/2017
Questa risposta dice che non importa quante previsioni sbagliate (modelli o altri) che si prova, non si può prevedere una quantità osservabile X. Come sempre. Quindi fondamentalmente dice che la scienza non può funzionare.
17 Michael0x2a 10/31/2017
@kubanczyk - vai, non essere furioso, la risposta non dice "la scienza non funziona" o qualcosa di sciocco come quello. Piuttosto, questa risposta sta dicendo che, indipendentemente da ciò che il valore previsto è, la cosa migliore per l'educatore a fare è aiutare tutti gli studenti al meglio della loro capacità. Quindi, dal momento che l'esito previsto non (o almeno non dovrebbe influenzare) come insegnare, e poiché la previsione è difficile, perché spendere sforzo preoccupante per questo?
5 Mehrdad 11/01/2017
Penso che tu sia un po 'troppo ingenuo qui. Se una persona richiede 10 volte più lavoro per "ottenere" un argomento X come persona B a scuola, allora c'è una possibilità non banale che questo sia altrettanto vero sul lavoro che era durante la scuola. Significato che l'assunzione per quel lavoro potrebbe essere cattivo sia per loro che per il datore di lavoro. Non si aspetta di vedere questo quando vengono assunti perché potrebbero (e dovrebbero) aver già speso il tempo di 10x necessario per diventare buoni come tutti gli altri che sta applicando. Ma il loro riconoscimento può essere utile per loro: possono provare a fare qualcosa in cui sono meglio.
2 nova 11/01/2017
@Mehrad Penso che state assumendo che ogni persona abbia un tasso di apprendimento intrinseco per gli argomenti di programmazione. Non credo che l'apprendimento lo supporti.

Ben I. 11/01/2017.

Come ho indicato nella domanda, è stata la mia esperienza che ci sono certi ragazzi che non sembrano mai venire. I miei dati sono tratti da un gruppo piuttosto piccolo (sicuramente sotto i 1000 ragazzi che imparano CS durante il corso della mia carriera) e l'idea di Buffy che questi studenti sono satisfying piuttosto che optimizing potrebbe essere corretto. Tuttavia, non ho visto prove convincenti. Quali prove che ho, non scientifico per quanto sia, è che in realtà ci sono studenti il ​​cui cervello non è semplicemente cablato per questo campo.

Sembra sempre il caso che, con enormi sforzi, possano ottenere alcune competenze fondamentali, ma il materiale non si inserisce "naturalmente" nel loro modo di pensare, allo stesso modo in cui non tutti possono sentire certi aspetti della musicalità . (Vedi sordità battuta e il 4% dell'umanità con amicizia congenita ).

È importante notare che non sto suggerendo che le persone con tali disabilità musicali non possono imparare nulla della musica; piuttosto, sto suggerendo che un altissimo livello di musicalità (come quello associato con il musicista professionista) non può mai essere realisticamente raggiungibile . Vale anche la pena notare che il 4% non è un numero terribilmente basso; nel corso di una carriera didattica, si incontrerebbe molti studenti con tali handicap da superare.

La programmazione richiede una notevole capacità di sequenziamento, una certa capacità intuitiva di comprendere (e garantire) post-condizioni informali e la capacità di comprendere simultaneamente più strati di astrazione.

All'interno delle normali distribuzioni di abilità, pertanto, è ragionevole che ci sia un sottoinsieme (non insubstante) di persone che avranno enormi difficoltà con l'argomento. E, simile alla musica, potrebbe non essere che non siano in grado di apprendere alcun aspetto particolare della programmazione, ma non possono mai veramente riuscire a tirarlo insieme a qualsiasi tipo di struttura, non importa quanto lavorino.

5 comments
1 Buffy 10/30/2017
Devo ammettere che alcuni hanno "enormi difficoltà". Ma non è la stessa cosa che "non può imparare". Chiedete a Stephen Hawking di difficoltà. Inoltre ammetto che non ho nessuna abilità nella musica. Ma non ho nemmeno desiderio.
6 Douwe 10/31/2017
La mia esperienza come dev (principalmente insegnante intern / junior, ma anche come insegnante quest presso la nostra uni locale) è che hai colpito il chiodo proprio sulla testa. Il confronto con l'abilità musicale è proprio a mio avviso. Tendo a dare a questi studenti lo stesso amore duro il mio insegnante di chitarra mi ha dato: se ti piace, continuare in ogni modo, ma vorrei guardare altrove per una carriera se tu dove tu. Forse impareranno "alla fine" e con "enormi difficoltà", ma lo studente che hai descritto nella tua domanda non verrà mai assunto qui, dato che valutiamo la "velocità di apprendimento" rispetto alla conoscenza reale.
6 J.R. 10/31/2017
+1 per "cablaggio". Non ho tanti punti dati (solo ~ 20), ma una volta ho insegnato "Introduzione alla programmazione per non-CS Majors", facilmente il percorso più impegnativo che ho mai insegnato - non perché il materiale era duro, ma perché tanti gli studenti hanno trovato difficile cogliere i concetti di base. C'erano tre gruppi nella classe: i "naturals", che programmavano con facilità dal primo giorno; il "perso", che ha lottato con Hello, World e ha lottato ancor più con forza mentre il corso è andato avanti; e gli "allievi", che hanno inizialmente lottato, ma alla fine hanno girato un angolo. (Solo uno dei miei studenti che termine era un allievo.)
SGR 11/03/2017
Posso parlare con la combinazione di desiderio di apprendimento e di incapacità di farlo. Non posso tenere una sintonia. Infatti, al massimo, posso solo dire che una nota è più alta o più bassa di un'altra, non più di quella. Eppure ho ancora suonato clarinetto per anni. Il mio unico riferimento per sapere se la nota era in sintonia è se qualcun altro mi ha detto, semplicemente non ho avuto la capacità di raccontarmi. Ho provato così difficile da imparare, ma sono apparentemente fondamentalmente incapace di sentire se una nota è dentro o fuori da accordi e che cosa è o no la nota.
3 SGR 11/03/2017
Ho avuto tutte le meccaniche di suonare uno strumento, non ho avuto modo di sapere se quello che stavo giocando era in realtà il passo corretto. Allo stesso modo, posso vedere uno studente che capisce tutte le parti di un programma, ma non può avere senso del programma nel suo complesso nella loro mente.

mamcx 10/30/2017.

Considerate la possibilità che questo potrebbe essere un problema con Java .

Se la tua prima lingua è APL e molti falliscono ... è una riflessione degli studenti o dell'APL?

Leggi anche:

http://lambda-the-ultimate.org/node/5481

Haskell è la giusta lingua per insegnare principi di programmazione funzionale? No! (Come spiega Simon Thompson).

Ho imparato dozzine di lingue e ho insegnato un po '. Certamente alcune lingue sono più problematiche quando altri non lo sono.


La mia teoria dell'animale domestico? Penso che se accettiamo che la maggior parte del software sia poorly designed inclusi i linguaggi di programmazione, gli utenti non stanno imparando solo come utilizzare il linguaggio di programmazione ma stanno lottando per decifrare il disegno (scarso) e qual è il vero disegno sotto.

5 comments
2 Ben I.♦ 10/30/2017
Benvenuti agli educatori di computer scienza ! Spero di sentire di più da voi in futuro.
5 Mark 10/31/2017
Sono d'accordo che ci sono lingue "sbagliate" per insegnare la programmazione. Tuttavia, se fosse possibile sviluppare una lingua "giusta" che avrebbe permesso a chiunque di imparare a programmare, mi aspetterei che nel secolo passato di cercare avrebbe prodotto almeno un certo successo.
4 mamcx 11/01/2017
Certo che non esistesse? Che ne dici di pascal o python? È da notare che la scelta del "linguaggio da insegnare" è guidata dall'idea di "deve essere uno standard industriale" e in alcuni luoghi sono stati sostituiti vecchi linguaggi utilizzati da anni per diventare trendy. Quindi non sono sicuro se questo sia dimostrato o meno.
3 Graham 11/01/2017
Se lo snippet di codice stava usando una parte oscura di Java, allora sicuramente questo potrebbe essere vero. Tuttavia è abbastanza semplice che chiunque capisce un'istruzione di tempo dovrebbe essere in grado di rispondere. E l'incapacità di capire "continua a eseguire questo codice mentre la condizione qui è vera" significa che non hanno veramente capito come funziona il codice.
4 Mark 11/01/2017
@mamcx, Sì, Pascal è stato creato come un linguaggio didattico. Quindi era Python. Così era Basic. Così è stato Logo. AppleScript ha "chiunque può programmare" come obiettivo. Wikipedia elenca quasi un centinaio di altre lingue per insegnare persone a programmare. Eppure, in qualche modo, le persone hanno ancora difficoltà. Forse non è la lingua che è il problema?

KRyan 10/31/2017.

Credo fermamente che, a parte l'handicap mentale reale, chiunque può imparare a programmare.

Tuttavia, questo è puramente una credenza; una questione presa sulla fede. È informata in parte da una certa conoscenza della psicologia e del processo di apprendimento, ma in queste cose sono al massimo un dilettante.

Le prove disponibili, purtroppo, non dimostrano che qualcuno possa imparare a programmare. Anche se la carta infame "The Camel Has Two Humps" è stata ritratta , la retrazione stessa non sta incoraggiante: i dati sottostanti, secondo la retrazione, sono tutti ancora validi e reali. Le conclusioni tratte da questi dati erano troppo forti, e in particolare l'articolo del web "Camel", che è passato in giro, ha fatto dichiarazioni molto più forti di quello, ma comunque i dati sono ancora presenti. Suggerisce un problema, e la retrazione dice solo che non sappiamo cosa provoca - non che non esista.

Inoltre, la carta cita numerosi altri nelle sue rivendicazioni di una scarsa conoscenza accademica diffusa nella scienza informatica: non si distingue da solo in that affermazione.

Quindi, la mia conclusione è fondamentalmente questa: può essere, e spero molto che sia, che tutti gli studenti possano imparare a programmare. Tuttavia, le prove disponibili suggeriscono che, se non altro, non abbiamo ancora imparato a teach tutti gli studenti a imparare a programmare. Se questo sia perché può essere fatto e non lo abbiamo ancora capito, o perché non si può veramente fare, sembra rimanere una domanda aperta.

Quindi consiglio a tutti gli educatori di informatica di cercare di tenere d'occhio lo stato dell'arte qui e di essere disposti a provare cose nuove. Lo status quo non sembra sufficiente. Certamente non è scienza settata che esiste una popolazione che cannot imparare la programmazione, per cui, anche se ciò può essere vero, è troppo presto per rinunciare a coloro che stanno fallendo in questo momento.

2 comments
Ben I.♦ 10/31/2017
Potresti essere un dilettante in questo regno, ma che sia un'analisi perfetta. Benvenuti agli educatori di computer scienza !
Shane 11/07/2017
+1. Molto triste vedere l'unica risposta che cerca di portare i dati reali agli Educatori CS così bassi. Non avrei pensato che fosse una comunità di tale fede. Vergognosa :(

Flater 10/31/2017.

Tuttavia, ogni anno, trovo un piccolo numero di studenti che semplicemente non sembrano farlo. Essi arrivano, ma il programma principale CS diventa sempre più difficile per loro come i loro quattro anni passano. Dev'essere così?

Pensare in questo modo:

Un alieno cade sulla Terra. Vede un uomo che incontra un altro essere umano. Il primo umano ruota la seconda. In risposta, il secondo spegne la prima.
L'alieno va incontro con i leader mondiali, gli scienziati, i filosofi ... Ogni volta che incontra qualcuno li spegne. Dopo averli liberati, il comportamento degli alieni è perfetto, non fa altri errori. No one corrects the alien , perché capisce che è culturalmente ignaro del suo significato e capisce che l'alieno sta cercando di dire ciao. Dal momento che l'alieno è in grado di essere amichevole, nessuno è veramente incentivato ad affrontare quel errore che l'alieno fa. Sembra che si tratti di nitpicking.

Dopo che l'alieno ha incontrato diplomatici (e persone di mentalità diplomatica), finisce per finire in situazioni in cui c'è meno buona volontà verso l'ignoranza culturale degli alieni. L'alieno inizia a notare che le persone stanno reagendo meno amichevoli verso di lui, anche se sta ancora cercando di usare saluti umani.
Con il passare del tempo, l'alieno combatte sempre di più per mantenere le interazioni con gli esseri umani a un livello amichevole. Dopo diversi anni, finalmente fallisce e finisce in una lotta con un umano arrabbiato.

Lo studente inseparato, proprio come l'alieno, era inizialmente in una posizione in cui pochi e nessuno errori potevano essere fatti (il primo anno utilizza semplicemente esempi semplici, l'alieno incontra solo persone diplomatiche). Le lacune dello studente / alieno non sono abbastanza grandi da non riuscire a un test / conversazione.
Ma come lo studente / alieno avanza attraverso i ranghi, diventa più difficile (esempi più difficili, meno persone diplomatiche). Alla fine, c'è un punto in cui gli errori dello studente / alien sono abbastanza importanti da impedire un buon esito, e questo è dove gli studenti / stranieri falliscono per la prima volta, anche se stavano facendo lo stesso errore per tutto il tempo .

Come studente, è una maledizione solo un somewhat inattaccata. Se sei completamente inattaccato, gli insegnanti si concentreranno su di te e faranno in modo di farlo. Ma se siete bloccati nella zona "non buono ma abbastanza buono", allora non puoi mai ricevere quell'attenzione dal tuo insegnante (perché si concentrano sugli studenti con problemi più grandi) e non ti verrà mai detto che quello che hai sta facendo è sbagliato.

Quando nessuno ti dice che quello che stai facendo è sbagliato, allora non puoi sapere che quello che stai facendo è sbagliato (o potrebbe essere migliorato).


C'è qualche prova o ragione per credere che ci siano studenti che in realtà non possono imparare a programmare?

Sì e no.

Ognuno è in capable di apprendere la programmazione, ma diverse persone avranno diversi livelli di intuition e learn things at a different pace .


Nel college ho studiato Digital Arts and Entertainment. Questo corso è stato unico nel mondo (in quel momento), perché era un corso completo per il design artistico (concept art, disegno a mano libera, modellazione 3D) ma anche lo sviluppo di giochi tecnici (programmazione, che vanno in matematica geometrica complessa).

C'erano due gruppi molto chiari nella nostra classe: gli artisti e gli analisti (ero nell'ultimo gruppo). Gli artisti hanno superato le classi d'arte senza rompere il sudore, ma hanno bisogno di imparare la programmazione passo dopo passo e non sembravano mai capire qualcosa intuitivo (ad es. Int divisione) senza averne intricatamente spiegato di volta in volta.

Gli analisti, d'altra parte, passavano le classi di programmazione con i colori volanti, ma spesso non riuscivano a progettare o disegnare nulla a metà decente, soprattutto rispetto agli artisti. Avrebbero dovuto ripetere più volte i disegni di prospettiva a mano libera, mentre gli artisti riuscivano a ottenerla la prima volta e poi avevano molto tempo per migliorare il loro disegno già succesivo (creando così ancor più un divario tra l'arte che artisti e analisti prodotti).

Questo corso mi ha rivelato irrimediabilmente che alcune persone sono collegate in modo diverso da altri. Era così ovvio vedere che accadesse per ogni classe che abbiamo preso. Le persone che stavano outclassing me in classe d'arte avrebbe bisogno del mio aiuto nella classe di programmazione, e viceversa.

Tra i 300 studenti che hanno iniziato il corso nel mio anno (già mi sono esclusi quelli che hanno rinunciato a metà, 300 studenti hanno preso gli esami finali del primo anno), 8 riusciti a passare tutte le classi. Quasi tutti gli altri hanno preso l'arte o la programmazione.

Questa è stata la mia seconda volta al college, e devo ammettere che il% degli studenti guidati era molto più elevato che in altri corsi. C'erano <10% di slackers, la maggior parte delle persone stavano spendendo le loro notti di progettazione (giochi o arte, a seconda che avessero la loro fantasia).

Vedendo che meno del 3% degli studenti passano sia l'arte che le classi di programmazione dimostrano il punto.


No

Ma poi ancora, 8 studenti sono riusciti a passare.

Personalmente sapevo 3 di loro. Uno non aveva programmato prima del corso, gli altri due non erano mai stati artisticamente inclini. Quindi è possible imparare un'abilità, anche se è quasi completamente ortogonale ai tuoi skillet attuali.

Sono anche un forte credente nel fatto che se qualcuno non capisce qualcosa; che semplicemente non è stato spiegato loro in un modo che ha senso per loro (o non sono stati guidati abbastanza per scoprire per se stessi).


Devi studiare l'ignoranza.

Per il tuo esempio attuale, questo significa che dobbiamo indagare su cosa esattamente non era comprensione.

Non riusciva a identificare la condizione di fine dell'anello

Qui c'è uno "spettro" di ignoranza. È importante capire quale si applica a questo studente:

  • Era cosciente di come un while sia usato in generale? (indipendentemente dal motivo per cui è stato utilizzato in questo esempio particolare)
  • Sapeva che era una condizione finale? (a prescindere da ciò che era la condizione specifica stessa)
  • Sapeva che questa era una valutazione booleana? (a prescindere da quello che stava valutando)
  • Può spiegare le valutazioni (valutando se un numero è più grande di un altro numero), ma non l'intenzione combinata di entrambe le valutazioni (valutando che il numero era tra un limite inferiore e superiore)

Sulla base di quali di queste descrive la sua situazione (o qualcosa che non ho elencato), puoi lavorare per riempire le lacune nella sua conoscenza.

Per usare il mio esempio di college, se ha una mentalità dell'artista, non può mai capire intuititively codice e leggerlo come una seconda lingua, ma dato uno sforzo sufficiente, dovrebbe essere in grado di identificare finalmente cosa succede.


Senza fare un attacco personale su di te , credo sia importante considerare che quando un insegnante considera uno studente incapace di qualcosa, questo potrebbe anche significare che l'insegnante incapable of teaching it è in incapable of teaching it .
Come insegnante, non puoi mai essere sicuri di chi sia.

Questa è una variante dell'effetto Dunning Kruger . Se si applicano i principi dell'effetto, ciò significa che è possibile che la valutazione di un insegnante dell'incapacità di imparare qualcosa di un allievo può essere semplicemente un errore interpretativo. L'insegnante non sa imparare in modo efficace questo studente e pertanto ritiene che lo studente sia in errore, anziché la propria capacità didattica.

This can be subconscious e non è in alcun modo malevolente sulla parte dell'insegnante.


Dalla mia esperienza nella programmazione dell'insegnamento (e nell'insegnamento della programmazione), il modo più efficace per misurare le abilità dello studente e insegnarli a leggere il codice è quello di giocare il gioco di breakpoint guessing game delle breakpoint guessing game .

In sostanza, metti dei punti di interruzione nel codice (questo può essere su ogni riga se si desidera), avviare il programma e far sì che gli studenti tentino di predict quale sarà il punto di rottura successivo.
Nota: questo è molto facilmente giocato. La gente ama le scommesse, quindi consentendo loro di scommettere sul risultato li insegna a capire cosa sia il risultato.

Per uno studente che è molto sottolineato e non ottenuto (come si sospetta che questo studente è), ci si aspetterebbe un'impossibilità di fare una qualsiasi previsione ragionevole, o continuamente affermando che il passo successivo non può essere previsto.

Passaggio attraverso l'intero programma. Keep repeating the same code over and over again, until she makes accurate predictions ( even if she's only reciting it from memory rather than understanding).

Once she is able to recite the steps, change one thing in the code (eg one of the numbers in the while condition). Repeat the breakpoint guessing game.

If she actively disagrees with what you say the next breakpoint will be; that's a really good thing. This means that she has an opinion about the flow of the code. Ask her to justify her claims. Do not correct her, just get her to clearly express her own thoughts. Find the error in her claims, but don't point it out.
Instead of correcting her, show what the next breakpoint is. Ask her to explain why the outcome is different from what she said. Only explain things once she gives up with explaining, or is clearly saying random things and hoping to get lucky.
As a software developer, I notice every day how often I spend talking to myself about how the code is going to flow. This is a quintessential skill for a programmer. If you're too quick to explain, you're effectively preventing her from trying to think for herself. The idea is that she shouldn't rely on what others say, but rather try to find the answer for herself.

Every person should be able to understand the logical flow of a simple code snippet, given enough repetition of the guessing game. Every human is innately able to distinguish and recognize patterns (even if they can't do it intuitively).

Everyone is capable of learning programming, but different people will have different levels of intuition and will learn things at a different pace .

The only people who actually cannot be taught something, are the people who do not want to be taught something (or do not want to put effort in learning). As long as she wants to understand it, she eventually will.


2 comments
thesecretmaster♦ 11/06/2017
I really like this answer, thank you for taking the time to write it. I hope to see you around the site more!
Flater 11/06/2017
@thesecretmaster: You're welcome :)

Nile 10/31/2017.

Always try to explain it some other way.

Try it in another language - there are reasons why BASIC and Visual Basic are used as 'beginner languages', although I would look for 'teaching languages' that entrain a better understanding and good coding habits.

I would no more teach someone to program in Java than I would teach them to fly in an F-104.

However, this isn't about syntax and choice of programming language.

There may be some flaw in your logic, or a gap that you're skating over without even realising that there's an unaddressed assumption or assumed knowledge.

There may be some error in your student's understanding - some unstated assumption or 'gap' that she's filled-in incorrectly and internalised - and she might not be aware of it. If that unstated error leads to a dead-end, that's it: game over. The exercise has failed .

It would be entirely unsurprising that she isn't able to elucidate and express the 'blocking' point: you are working to develop this ability formal logic in your student and you are both well aware that it is developing from a very low base.

The question is: can you reframe the exercise in a way that might reroute you both around a problem that neither of you can identify?

That's enough on teaching technique from me. I coach something else entirely unrelated to coding - although I do coach and mentor my fellow-programmers - and you need to discuss this with your professional colleagues in teaching.

Now to address the more general question: are there students who simply cannot be taught to program?

I'm assuming we're discounting students who have a generally-poor intellectual ability, and that this is about intelligent and able people who have some specific cognitive impairment.

Dyslexic people may have difficulty and it isn't just 'they can't read'. They can interpret symbolic information, but layout and formatting are far more important than you realise.

There are people who simply cannot dial a telephone number or retype an eight-character code unless it is broken up into smaller groups - and you will empathise with them if I tell you to type in "1101110111111111101110111111101" on your keypad right now.

What if your code sample is wriggling in front of them, like ones that binary, and they cannot pin down extract the logic from this unusable and illegible text? It doesn't matter that it's perfectly legible and comprehensible to you, or even to ninety-five percent of your students.

Dyslexic people are very good at concealing their impairment, and at working around or under or over it. Often, so good at both these skills that they work out how to read all by themselves, despite the ineffective assistance of their teachers, and are never even aware that they have dyslexia unless they are tested by professionals.

And now they've met source code, which is another reading skill: text that conveys formal logic, and has none of the structure of spoken language. Or at least, not the structures that they have learned in their internalised implementation of reading.

Try the same problem in Python. And discover that there are coders who are fluent in slicing and never, ever, code a loop - not even in those rare cases where it really is the best way to proceed: I wonder why that is?

Be warned, dyslexic people are also very, very good indeed at spatial visualisation and logical abstraction: the mistakes they make as beginners, including the attempts they make to 'bridge' over gaps like unstated assumptions and assumed knowledge, can be incredibly convoluted. This will be especially true of the mistakes or 'blocks' that they cannot elucidate and explain to you!

It is in the nature of dyslexic peoples' unconscious (but highly-developed )strategies for reading (and, say, successfully associating names with faces) that they apply extremely complex abstractions to everyday problems without even knowing.

This isn't about dyslexic students: I'm using them as one example among many, of students who can program - and program very well indeed - but can be surprisingly difficult to teach.

There is, of course, dyscalculalia: a fundamental inability to perform arithmetic. Or so I'm told: I'm still sceptical, and I would classify these rare students as "people that a long line of increasingly-specialised teaching professionals are unable to teach arithmetic".

If it's real, it probably does have an analogy in a fundamental inability to program.

I am reminded that Bertrand Russell's wife, who spoke seven European and oriental languages fluently, and who was regarded by her husband, among others, as his intellectual equal, never understood the operation of canal locks: despite all attempts at explanation, with working models, by the most eminent engineers philosophers and professors of the British Empire.

So yes, you are probably right that some people will never program; and I am completely in agreement with JWZ's assertion that the extended abstraction required to 'get' pointers, rather than merely use them in a pro-forma way, is absent from all but a tiny minority of the human beings alive today.

A final point, and a deeply unpleasant one: you may have inherited the results of bad teaching in the student's past.

Be warned, some people who are labelled 'introverted' have been very, very badly taught and it is a common malpractice in bad teaching for girls to be conditioned, by a sustained campaign of extremely negative feedback, to step back and step out of a challenging problem that they are not 'expected' to be able to solve. They will have internalised this, and they will have been very thoroughly socialised in the skill of diverting themselves - and you - around that. And they will absolutely steer you around the dangerous confrontations inherent in considering the problem to be anything other than their problem, and their fault.

This is less common with boys but it exists: and the higher education institution that you work in is, perhaps, more of a place for people who have been encouraged or permitted to excel than the place where all excellent students can enter and reach their potential.

You may be very fortunate, with this particular student, to have been given an opportunity to undo that; and, whether this is the case or not, I am very pleased to hear that you have both the will and the resources to find out what she can really do.

3 comments
1 Mehrdad 11/01/2017
I think F-104 and Java is a bad comparison... the F-104 set lots of world records for speed and altitude and had a poor safety record... that sounds much more like C.
Faheem Mitha 11/04/2017
"I am reminded that Bertrand Russell's wife". I was curious about this anecdote, which I'd never heard of before. I think it mght be Russell's grandmother, not his wife. I got an hit on Russell's autobiography, which says "She never could understand how locks on rivers worked, although I heard any number of people try to explain it to her". It's possible one of Russell's wives has a similar problem, but it seems more likely you've read a scrambled version of this anecdote, or remembered it incorrectly.
Faheem Mitha 11/04/2017
From context, his grandmother would have been born Lady Frances Anna-Maria Elliot-Murray-Kynynmound, the second wife of Sir John Russell, once British Prime Minister. They lived in Pembroke Lodge.

ctrl-alt-delor 10/31/2017.

Nature vs Nurture

It seems that nature plays a large role: you can not teach a cat to code (even though they share approximately 90% of our DNA. However most of the variance between humans is probably nurture.

See Carol Dwecks word on growth mindset, for who some learn and some don't. Note that we can have a growth mind set in some subjects, but a fixed mind set in others, “I can't do maths.”, “I can't program.”.

Everyone (that can learn anything) should be able to learn to code at the level of you example. However not everyone will be excellent at it. I have taught a lot of pupils in year7 (UK), they can do this in scratch. Many of them that had good teachers in primary school, can do it when they arrive (see choice of language below).

Therefore help students to get a growth mindset.

Syntax vs Concept

Is the student struggling with reading the language, or with the underlying concepts? If the student does not know the idea of a loop, or the higher level idea of loop until successful. Then understanding the code will be very hard, it may even rely on discovering the idea.

Therefore ensure that students understand the concepts, before teaching a language. This can be done using «robot teacher/student», or other paper/acting/physical based activities.

Procedural vs Functional vs …

Are you teaching in the best language? What influenced your choice of language? Is it the best teaching language? vs Is it popular in industry?

Bertrand Myers has claimed in (I think) “A touch of class”. That it is easier and quicker to teach Eiffel then C# and Java and …, than to teach any one of these from the start. Yes he teaches his CS student all of these languages, but starts with Eiffel, as it is easier to learn (yet also more powerful that the others, and the only pure OO language that I have seen. It is also one of the languages where all the new ideas are coming from (see also lisp) ).

In a camel has two humps (an argument for natural ability, I won't go into why this research is not valid here, but there is one thing of relevance), it looks at mutating-assignment, and shows that student that don't get mutating-assignment struggle to program.

Therefore teach mutating-assignment last. Eg functional, but you can do functional in any language.

Is this semi-functional program easier to read?

do {
    System.out.println("Please enter a number from 1 to 5.");
    myScanner.next();
} while ( myScanner.currentInt() < 1 ||  myScanner.currentInt() > 5 ) 

This code snippet uses «Command query separation», that is every method is ether:

  • a command that does something but does not return anything (a procedure), or
  • a query that returns something but has no side affects (a function).
1 comments
kubanczyk 11/07/2017

Ted Delezene 10/30/2017.

I'd like to preface this by stating that I am not an educator, and thus have had no formal training, however I have had experience while working on my undergraduate in computer science helping people to code. Then after I graduated I helped my wife through an informatics degree in which she had to take programming classes, and I found the following article to be very insightful, and actually described the problems my wife was having quite clearly.

https://blog.codinghorror.com/separating-programming-sheep-from-non-programming-goats/

Now her goal was to just pass the class, as she had no intentions of moving on to any sort of a programming degree, and I'm sure that contributed somewhat to her continued difficulty with the course, but should never fully got over the first hurdle illustrated by the article (a hurdle, that I submit your student is probably having difficulty with at this time).

The authors of the paper posit that the primary hurdles in computer science are..

  1. assignment and sequence
  2. recursion / iteration
  3. concurrency*

The article (and linked paper ( link here ) indicate that some people have extreme difficulty figuring out operator assignment, and they can't tell you the value of variables a and b after the follow chuck of pseudo code (even after explaining the basics of pseudo code).

int a = 10
 int b = 20
 a = b 

The test was administered twice; once at the beginning, before any instruction at all, and again after three weeks of class. The striking thing is that there was virtually no movement at all between the groups from the first to second test. Either you had a consistent model in your mind immediately upon first exposure to assignment, the first hurdle in programming – or else you never developed one!

I hate to use a single study / article to say there are people who can't learn to code, rather I like the idea that, armed with this knowledge, educators can better understand where to focus, and maybe develop better techniques to overcome these specific hurdles.

4 comments
5 Ben I.♦ 10/30/2017
Welcome to Computer Science Educators ! It might be worth noting that the study he is citing was partially retracted, as I described in my answer here .
2 nova 10/31/2017
I really wish Jeff Atwood would post an update / disclaimer on that blog post
1 Michael Kay 11/02/2017
I read that code fragment and saw instantly that the value of (a = b) could only be "false". Wrong! the author was writing in one language, I was reading in another. I think an immense number of these difficulties are actually caused by misunderstanding the notation.
kubanczyk 11/07/2017
The paper sourced in this answer and on CodingHorror blog was retracted by its author .

KriszDev 11/02/2017.

Well I'm not a teacher myself but I can tell about what happens in our programming classes. My class has 32 people in it and we all have to learn coding in C#, a language that basically everyone of us hates. Last year we had the best teacher in the school but he had to go away and we've got one of the worst one. The class is divided into 2 groups with each having 16 people in it. Well truth be told none of us actually wanted to be a professional code but he have to learn it as it's part of the curriculum. So from all 2 groups there are only 4-5 people who is actually interested in it for many reasons. (one wants to make games, other android apps, and the others, including me, as a hobby). Well from what I see in my group (and hear in the other) most kids are not interested in learning coding. Even though they'll need it in their finals they just don't care. When I look around at class I always see around 5-6 people using their phones or sleeping in classes. Well probably because the teacher is not good now all they know is last years things (partially, very partially) and when ti comes to writing anything complex: they just look at each other. And when you ask them why don't you learn if you are concerned about your grades? They would say "because I won't ever use it after school".

Well it's true that my class doesn't really have anything to do with coding, but the system we're in makes us learn them. I sometimes speak with other teachers who teach the kids who are in the ACTUAL class that learn coding and will work as software developers and he says that they aren't interested either . So in my school the kids, who will work as devs, are not interested in it? (that's a 32 people class too) of course there are always a few who wants to learn but in general here it's quite low.

So from what I'd seen and heard you need:

  1. first and foremost: they just look at it as an other subject to learn and have grades from. They are simply not interested in it even if that's what they'll be working as. They need will to learn it.
  2. Then there is of course the power of a good teacher. My current teacher came into this school 4 years ago and well knows nothing and is really boring. Many times we have to correct his code. The teacher should try to make the classes interesting for everyone also maybe she needs some special methods. Like as OP said some extra sheets to test on and experience.
  3. Maybe she doesn't have time to learn or thinks it's not as important as other subjects because it takes more work and time to learn and understand. (for example here we (those who know some more) usually correct other people in the class and explain why that code was wrong.)

And to end this I want to say the same as what that other teachers told me about it: They just don't care about it, they are not interested in it anymore. It's plain boring for them to look at a black console with white letters.


Loren Pechtel 11/02/2017.

(Sorry, too much for a comment) I've had a related experience back in college that I think is relevant. I was a lab assistant, the lab was sometimes used for a computer literacy for seniors class. I could see one fundamental sticking point for nearly a third of the attendees: They couldn't comprehend changing the meaning of a key. The machines were TRS-80s--they don't have a control key. The word processor needed one, thus IIRC the @ key was hijacked for the purpose.

Students either got it or they didn't, the ones that didn't never got it and struggled greatly even with the aspects of the class that didn't involve that. The ones that got it fared much better.

If they didn't understand the remapped key by the end of the second class period neither the teacher nor I had a single success.

I have seen various students that seemed about as clueless when it came to understanding code but I've never been in a position to help them over an extended period of time to see deeper into what's wrong and whether it could be overcome.


Marco Salerno 10/31/2017.

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Albert Einstein

Coding is an art. It isn't a thing for everyone, you need a vocation to be a programmer. The example that you provided, is something really basic, if she can't understand it, maybe she will never do.

There is a possibility that you aren't a good teacher, but you know, programming isn't something that you can discuss, everything has a sense, a logic, if she can't program, try to suggest her to study something different

4 comments
2 Flater 10/31/2017
I disagree with the notion that a teacher (of X) should be advising a student to not study X (arguments can be made if the student is not their student; but that is not the case here). You mention the possibility that the OP isn't a good teacher; which is exactly why he shouldn't suggest that the student quits the study, he might end up discouraging someone while the fault lies with the OP.
Marco Salerno 10/31/2017
True, that's why i used the word suggest, it's different than saying "you suck"
2 Flater 10/31/2017
That's not really the point. Whether OP phrases it rudely or kindly, it still ends up discouraging the student who may simply have been subjected to a bad teacher in the past.
NRiding 11/01/2017
Or maybe the student is not suited to the vocation, and he's doing the person and society a great favor. As I see it either the student with come to realise that its good advice and adjust their major before it's too late, or they will buckle down and work harder. It's quite possible that the student knows the correct answer, but is afraid that they are wrong so doesn't want to say anything.

NRiding 11/01/2017.

Si assolutamente. I'm not an educator myself but I've been a programmer for a long time.

Just cause you can write a few lines of code does not make you a programmer. Just like every student who learns English is not going to write a best selling novel.

Do this child a favor and steer them to a different career path. If they can't determine the function of that code snippet they how are they going to debug a truly complex problem. Do you want this person writing aircraft guidance systems, banking software, or self-driving cars?

1 comments
1 ItamarG3 11/02/2017
Welcome to Computer Science Educators ! This answer could be much better if you expand and add explanations to it.

Michael Kay 11/02/2017.

Some personal experience. I have a PhD in computer science and have had a very successful 40-year career in software development. But often, when presented with a new concept, I have had great difficulty "getting it". I think the problem happens when you build an incorrect mental model of what is going on.

I think the first time this happened was on first introduction to algebra: with x=3 and y=4, I was convinced xy had to be 34. There's nothing stupid or ignorant about this, and it doesn't mean the pupil will never overcome it: there's just a misunderstanding that has crept in somewhere, and I think it can be very hard for a teacher to discover where that misunderstanding lies, and correct it, because the teacher simply doesn't realise where the faulty step in the reasoning occurs.

Later, when introduced to programming, I remember I found it really hard to understand function calls. I don't know now what the problem was, just that I had great trouble with it. (I also found it hard to grasp that xy was no longer 34, or even 12, it was now completely unrelated to the values of x and y.)

In recent years I've taught a good number of XSLT courses. One of the areas where I find students really struggling is with recursion. The main frustration in teaching this is that you don't know why students are finding it difficult. Sure, it's a very abstract concept but it becomes so second nature that you no longer see the difficulties, and that makes it hard to help the students overcome them.


user3386 11/02/2017.

Probably almost everyone can learn to play basketball, but if you intend to go up against professionals at some point, the taller you are, the better, because they are going to be tall. If you are not going to be a professional, then no problem, just have fun.

This points out the essential question: Why are we educating people?

  • So that they can get good jobs. Parents push their kids toward or away from things for this reason. (Mine pushed me away from programming, but I resisted and became a programmer and now teach programming.) It is certainly important for everyone to be able to make a decent living, so this horn of the dilemma cannot be refuted.
  • To make well-rounded people. We all need to have some understanding of a very large and rapidly growing number of topics to function well in this world. So this horn cannot be refuted either.

It would be great if students knew early on what they were interested in (as I did) and had the drive to overcome obstacles to get there (as I did), but apparently, mystifyingly, many kids and young adults simply have no idea what they want to do for a living. I don't know where the failure lies for that, but it is the cause of the seeming dilemma that we face. More drive on the part of a student will push them to either eventually succeed, or fail fast. But, like the famous basketball coach said, "You can't teach height", and we can't impart drive.

I agree with everyone who said that it is not a teacher's job to decide what is best for a student - whether they belong in the program or not. Do your best as a teacher and stop worrying about whether it can be done or not. This is the conclusion I came to after 4 years of teaching.


Dan Mills 11/01/2017.

I am not a CS educator, I just do far too much programming in the day job.

A question if I may, what course are you teaching, Programming or Computer Science? I would be disturbed to sign up for a CS course only to have it spend significant time on programming.

From the "Computer Science" title I would expect that actually programming the things would be a very, very small part of such a course (And actually not worth many marks, so why really sweat it). There are far more important things to teach on an introductory computer science course IMO, calculus of sets, complexity, some discrete maths, introductory algorithms, maybe some computer architecture, but programming is not something that it is worth wasting much time on in a CS course.

I don't know if there is anyone who could not be taught to program, but certainly most people can be taught some formal logic and ideas about algorithms. If you can give people the tools to break big problems into manageable chunks that would be counted a win in my view, if you can give them the tools to read specifications with a sufficiently critical eye for ambiguity that would be a HUGE win even if they come out unable to write a line of Java.

1 comments
2 John Coleman 11/02/2017
"certainly most people can be taught some formal logic and ideas about algorithms." Not in my experience. It is not uncommon to see a student who has learned some of the basics of programming to nevertheless struggle mightily when they get to classes like Discrete Mathematics or Algorithms and Complexity. Introductory CS courses typically concentrate on programming for the same reason that introductory math classes concentrate on basic calculus. It isn't what the major is really about -- but it is an essential prerequisite.

Andres Alvarez 11/02/2017.

I am fairly new to teaching and found some students to simply not understand programming. Computer programming involves problem solving and some memorization and not a lot of kids are into that. Let's face it, computer programming can be a bit tedious and frustrating for a lot of people and so its no wonder why some kids don't choose a career in it. In order to be good at programming you need to have some desire and perseverance.

I find the kids that are good at math are also good at computer science. However these kids also lack a sense of creativity whereas the other kids who don't do so well in CS are more extrovert and excel in reading/writing classes.

1 comments
2 ItamarG3 11/02/2017
Welcome to Computer Science Educators ! This answer could be much better if you expand and add explanations to it.

HighResolutionMusic.com - Download Hi-Res Songs

1 BLACKPINK

Kiss And Make Up flac

BLACKPINK. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
2 Martin Garrix

Waiting For Tomorrow flac

Martin Garrix. 2018. Writer: Pierce Fulton;Mike Shinoda;Martijn Garritsen;Brad Delson.
3 Martin Garrix

Access flac

Martin Garrix. 2018. Writer: Martin Garrix.
4 John Legend

Written In The Stars flac

John Legend. 2018. Writer: Kiana Brown;Santoy;Kevin White;Mike Woods;MZMC;The Heavy Group;Rice N' Peas.
5 Martin Garrix

Yottabyte flac

Martin Garrix. 2018. Writer: Martin Garrix.
6 Alan Walker

Diamond Heart flac

Alan Walker. 2018. Writer: Alan Walker;Sophia Somajo;Mood Melodies;James Njie;Thomas Troelsen;Kristoffer Haugan;Edvard Normann;Anders Froen;Gunnar Greve;Yann Bargain;Victor Verpillat;Fredrik Borch Olsen.
7 Cardi B

Taki Taki flac

Cardi B. 2018. Writer: Bava;Juan Vasquez;Vicente Saavedra;Jordan Thorpe;DJ Snake;Ozuna;Cardi B;Selena Gomez.
8 Bradley Cooper

Shallow flac

Bradley Cooper. 2018. Writer: Andrew Wyatt;Anthony Rossomando;Mark Ronson;Lady Gaga.
9 Post Malone

Sunflower flac

Post Malone. 2018. Writer: Louis Bell;Billy Walsh;Carter Lang;Swae Lee;Post Malone.
10 Dyro

Latency flac

Dyro. 2018. Writer: Martin Garrix;Dyro.
11 Zara Larsson

Ruin My Life flac

Zara Larsson. 2018. Writer: Delacey;Michael Pollack;Stefan Johnson;Jordan Johnson;Sermstyle;Jackson Foote.
12 ZAYN

Fingers flac

ZAYN. 2018. Writer: Zayn Malik;Alex Oriet;David Phelan.
13 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
14 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
15 Sia

I'm Still Here flac

Sia. 2018. Writer: Sia.
16 Dewain Whitmore

Burn Out flac

Dewain Whitmore. 2018. Writer: Dewain Whitmore;Ilsey Juber;Emilio Behr;Martijn Garritsen.
17 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
18 Mako

Rise flac

Mako. 2018. Writer: Riot Music Team;Mako;Justin Tranter.
19 Blinders

Breach (Walk Alone) flac

Blinders. 2018. Writer: Dewain Whitmore;Ilsey Juber;Blinders;Martin Garrix.
20 Rita Ora

Let You Love Me flac

Rita Ora. 2018. Writer: Rita Ora.

Related questions

Hot questions

Language

Popular Tags