1 of 53

Sentire la Necessity

per imparare a programmare

  • teoria e metodologia
  • progettazione didattica e sperimentazione

Marco Sbaraglia, Michael Lodi, Simone Martini

Dipartimento di Informatica - Scienza e Ingegneria

2 of 53

Il paper

Marco SBARAGLIA, Michael LODI, Simone MARTINI

A Necessity-Driven Ride on the Abstraction Rollercoaster of CS1 Programming

Informatics in Education 20(2021), no. 4, 641-682,

DOI: 10.15388/infedu.2021.28

Open access: https://infedu.vu.lt/journal/INFEDU/article/721/info

3 of 53

Imparare a programmare è difficile

4 of 53

Gli scarsi risultati dei corsi introduttivi di programmazione

CS1, Computer Science 1, indica un primo corso di informatica (di una laurea informatica ma anche di altri corsi).

Gli studenti imparano

  • le basi della programmazione
  • alcuni dei fondamenti scientifici dell'Informatica

I corsi di introduzione all’informatica (CS1) di tutto il mondo registrano

  • molte bocciature
  • alto dropout
  • risultati peggiori rispetto ai corsi introduttivi delle altre scienze

⇒ non ci sono abbastanza informatici! �(né sul mercato del lavoro né in accademia)

5 of 53

Metodologie attive per introdurre la programmazione?

Le metodologie attive favoriscono l’apprendimento…quando gli studenti esplorano e costruiscono attivamente

… MA l’informatica ha molti aspetti tecnici sin dall’inizio

⇒ i novizi devono imparare concetti specifici e tecnici …molto difficile impararli per scoperta (misconcezioni)

Perciò, ancora oggi, l’approccio a CS1 è spesso tradizionale

  1. insegno i costrutti (e i relativi concetti) tramite elementi del linguaggio
  2. chiedo di applicarli

Risultati scarsi

  • l’approccio tradizionale non favorisce la motivazione
  • i novizi spesso non afferrano l’importanza di ciò che studiano
    • troppa attenzione agli aspetti tecnici ⇒ mancanza di contesto

6 of 53

Tipi di conoscenza nell’apprendimento della programmazione

Imparare a programmare richiede diversi tipi di conoscenza[McGill and Volet, 1997]

  • Sintattica: conoscere la sintassi del linguaggio di programmazione �(es. come si scrive un costrutto)
  • Concettuale: comprendere la dinamica del programma in esecuzione, cioè sapere come i costrutti funzionano e determinano l’esecuzione del codice (es. come funziona un costrutto in esecuzione) …spesso si parla di “notional machine”
  • Strategica: saper applicare conoscenza sintattica e concettuale per risolvere nuovi problemi o raggiungere un obiettivo specifico �(es. quando si usa un costrutto e perché lo si sceglie tra gli altri ⇒ come si risolve un problema con la programmazione)

7 of 53

A differenza che in altre discipline, spesso i voti di informatica non hanno una distribuzione normale ma bimodale (i risultati si polarizzano in molto negativi e molto positivi)

Spiegazione: ipotesi LEM (“Learning Edge Momentum”) [Robins, 2010]

(metafora del momento angolare o dell’interesse composto)

Nella programmazione: concetti estremamente legati tra loro

  • conoscere e padroneggiare i precedenti facilita l’apprendimento �dei successivi
  • viceversa lo rende, mano a mano, sempre più difficile

  • LEM può essere una risorsa…�ma diventa un problema se non “si cavalca l’onda”

Perché è difficile programmare: l’ipotesi LEM

8 of 53

Problem solving �prima dell’insegnamento diretto

9 of 53

Per introdurre i nuovi concetti (secondo LEM,

l’intro è uno dei momenti più critici)

Si basa sugli approcci in cui il Problem-Solving precede l’Insegnamento diretto (PS - I) [Loibl et al., 2017] che favoriscono

  • motivazione
  • apprendimenti più duraturi e profondi

in più noi vorremmo stimolare nello studente il sentimento di necessità del concetto che si vuole insegnare (concetto target)...

…PERCHÉ? �Molta ricerca dimostra che sperimentare difficoltà e anche fallire può stimolare la motivazione e, in generale, prepara ad apprendimenti significativi �(attivazione conoscenza pregressa, consapevolezza proprie lacune, riconoscimento caratteristiche del problema)

Tra i più famosi approcci PS-I c’è il Productive Failure (PF)

Proponiamo una metodologia didattica per affrontare questi problemi

10 of 53

Productive Failure [Kapur and Bielaczyc, 2012]

Pensato per la Matematica, si afferma nelle didattiche scientifiche

→ si basa sull’idea che fallire può essere una spinta all’apprendimento

È un approccio PS - I

  • Fase PS Gli studenti esplorano un problema e provano a risolverlo
    • Problema complesso ma non frustrante, basato sulle conoscenze pregresse
    • Problema posto in modo narrativo, con molti dettagli sovrabbondanti o inutili, apre a numerose tentativi di spiegazione e soluzione (multiple Representation and Solution Methods, RSM) ⇒ ostacola la ricerca delle soluzioni canoniche
  • Fase I L’insegnante analizza con la classe gli RSM degli studenti, li organizza e li assembla negli RSM canonici, evidenziando e usando il concetto target
    • si confrontano potenzialità e limiti degli RSM falliti o sub-ottimi

11 of 53

Un esempio di problema

12 of 53

Un esempio di problema nel PF

Problema mal strutturato → dati sparsi in un testo narrativo lungo e con dialoghi

  • dati imprecisi o parziali
  • dati superflui
  • unità di misura non uniformi

Nessuna indicazione su come risolverlo così da aprire a multipli RSM

Caso concreto: concetto target è velocità media in grade 7 (~12 anni)

Productive Failure vs. Direct Instruction

  • Gruppo PF: risolvono il problema mal strutturato senza aiuti; �solo dopo il tentativo, sono previste fasi di consolidamento
  • Gruppo DI: spiegazione, scaffolding, feedback dell’insegnante

Posttest

  • PF va meglio di DI nei problemi più aperti / complessi, ma anche in quelli strutturati / guidati e in quelli con rappresentazione grafica (inediti per tutti)
  • PF va meglio con studenti molto fragili in matematica

13 of 53

Esempi di RSM degli studenti

14 of 53

Necessity Learning Design

15 of 53

Necessity: un meccanismo generale

Meccanismo di Necessity�Assegnare agli studenti un problema progettato in modo che sia

  • percepito come un esercizio familiare (stesse parole, presentazione, richieste) simile a molti svolti in precedenza (su cui si è costruita padronanza)
    • capire facilmente il problema e le sue richieste
    • sentire di saperlo risolvere
  • ma costruito in modo che manchi esattamente un elemento per poterlo risolvere: il concetto target

Meccanismo generale: adattabile per altre discipline e contesti

Necessity Learning Design

Sfruttiamo il meccanismo di Necessity per creare una metodologia didattica specifica per la programmazione CS1

16 of 53

Necessity learning design (NLD)

P!S - Problem Not Solved

I - Instruction

PS - Problem Solved

Un es. di programmazione (apparentemente familiare) che lo studente non sa risolvere senza il concetto target

L’insegnante introduce il concetto target in generale e con semplici esempi (senza riferirsi all’esercizio)

Lo studente applica il concetto target per poter finalmente risolvere l’esercizio iniziale

17 of 53

Necessity learning design (NLD)

P!S Problem not solved

I Instruction

PS Problem solved

A (seemingly familiar) programming task that students cannot solve without the target concept

Teachers introduce the target concept in general and with simple examples (without referring to the assigned task)

Students apply the target concept to finally solve the assigned task

18 of 53

Il meccanismo di Necessity

Lo studente sente la necessità di qualcosa che non conosce, ma di cui può intuire le caratteristiche

L’insegnante risponde a quella necessità illustrando il concetto target con semplici esempi (generici)

Lo studente soddisfa la necessità applicando il concetto target all’esercizio iniziale

P!S - Problem Not Solved

I - Instruction

PS - Problem Solved

19 of 53

Il meccanismo di Necessity

Students feel the necessity of something they do not know but whose characteristics they can intuitively grasp

Teachers respond to that necessity by illustrating the target concept with simple and generic examples

Students satisfy the necessity by applying the target concept to the assigned task

P!S - Problem Not Solved

I - Instruction

PS - Problem Solved

20 of 53

1: Fase P!S (Problem Not Solved)

Il “problema” qui è un semplice esercizio di programmazione

  • La soluzione (il programma dello studente) è un oggetto manipolabile, la cui correttezza è automaticamente verificabile (“...funziona?”)
  • Si introducono concetti nuovi in contesti specifici* (simili a quelli noti) →�→ alto scaffolding ⇒ meno spazio per multipli RSM ⇒�⇒ NLD non si basa sul confronto degli RSM degli studenti, ma sulla necessità che sperimentano

* anche se per problemi di programmazione esistono potenzialmente infinite soluzioni

Un es. di programmazione (apparentemente familiare) che lo studente non sa risolvere senza il concetto target

Lo studente sente la necessità di qualcosa che non conosce, ma di cui può intuire le caratteristiche

21 of 53

2: Fase I (Instruction)

Fase di insegnamento diretto: l’insegnante introduce il nuovo concetto di programmazione (target) in modo generale

  • con esempi semplici e introduttivi
  • non si riferisce all’esercizio della fase P!S
    • … per non sprecare il potenziale di apprendimento insito nella sensazione di necessità sperimentata dagli studenti

L’insegnante introduce il concetto target in generale e con semplici esempi (senza riferirsi all’esercizio)

L’insegnante risponde alla necessità degli studenti illustrando il concetto target

22 of 53

3: Fase PS (Problem Solved)

Nel contesto di un esercizio già ampiamente esplorato, lo studente può giovarsi dei ragionamenti già fatti nel tentare di risolvere il problema (i suoi RSM della fase P!S) e quindi capire più facilmente:

  • l’importanza del concetto target (di cui ha sentito la necessità)
  • come applicarlo in-context
    • conoscenza concettuale: come funziona
    • conoscenza strategica: perché e come il concetto target permette di risolvere il problema posto dall’esercizio

Lo studente applica il concetto target per poter finalmente risolvere l’esercizio iniziale

Lo studente soddisfa la necessità applicando il concetto target all’esercizio iniziale

23 of 53

NLD specifico per la programmazione informatica

PF (in generale approcci PS-I)

Necessity Learning Design

Problemi complessi, ricchi di informazioni, mal strutturati, fatti �per generare molti RSM

⇒ la fase di Instruction si basa sul confronto degli RSM degli studenti

P!S

Esercizi tecnici e introduttivi: �“piccoli” e progettati per essere �simili a quelli già visti�⇒ evitare che lo studente sia sopraffatto da infinite possibilità o “diverga” troppo

La fase di Instruction illustra la soluzione canonica confrontando e discutendo gli RSM degli studenti

I

Lo studente resta con un artefatto (oggetto manipolabile, astrazione eseguibile) frutto dei propri RSM;

la fase di Instruction è semplice e generale per non sprecare �il potenziale di apprendimento

– –

PS

Lo studente ora può soddisfare �la propria necessità in context �usando il target concept �nel contesto noto dei propri RSM

24 of 53

NLD specifico per la programmazione informatica

PF (PS-I approaches in general)

Necessity Learning Design

Complex, information-rich, poorly structured problems made to generate many RSMs

⇒ Instruction phase based on �comparing students' RSMs

P!S

Technical and introductory tasks: �"small" and similar to those already experienced ⇒ prevent students from being overwhelmed by many possibilities or "diverging" too much

Instruction phase illustrates �the canonical solution by comparing �and discussing students' RSMs

I

Students are left with an artifact (manipulable object, executable abstraction), result of their RSMs;

Instruction is simple and general so as not to waste the potential for learning

– –

PS

Students can now fulfil their necessity "in context" using the target concept in the known domain of their RSMs

25 of 53

La sequenza di Necessity (P!S - I - PS) è stata concepita per

  • il “bootstrap” di nuovi concetti fondamentali
    • per introdurli in modo motivante e subito significativo
  • non per ogni fase dell’apprendimento
    • altre metodologie sono più adatte per sviluppare la padronanza �di un concetto (costrutto)

La nostra proposta:

  • usare NLD nei momenti in cui cambia l’astrazione all’interno di uno stesso linguaggio di programmazione (cioé quando si introduce un costrutto �più o meno astratto dei precedenti)

Quando usare Necessity Learning Design

26 of 53

Necessity di un cambio di astrazione:�esempi di applicazione di NLD

27 of 53

In Informatica: astrazione concetto fondamentale in moltissimi contesti diversi (review recente: [Mirolo, Izu, Lonati, Scapin, 2021])

In generale (informatica): gerarchie di astrazione

  • nei sistemi il livello n usa le funzionalità del livello n-1 e fornisce funzionalità al livello n+1 tramite un’interfaccia (pila di livelli di astrazione)
  • limitano la complessità e permettono di modificare o sostituire uno strato indipendentemente dagli altri (purché non cambino le interfacce)
  • applicazioni: linguaggi (da alto a basso livello), reti, sistemi operativi, etc.

Un linguaggio è un’astrazione (a un certo livello) della macchina fisica sottostante.

Meccanismi di astrazione interni a un linguaggio:

  • astrazioni sul controllo (nascondere dettagli procedurali) +
  • astrazioni sui dati (nascondere la rappresentazione dei dati)

Quale astrazione?

28 of 53

Astrazione all’interno di un linguaggio: l’iterazione (stesso problema)

L = [2, 4, 1, 5, 7, 3, 8, 9999, 4, 1] #lista L di interi

# stampa gli interi di L

for n in L:

print(n)

# stampa gli interi di L

for i in range(len(L)):

print(L[i])

# stampa gli interi di L

i = 0

while i < len(L):

print(L[i])

i = i + 1

for-each(più astratto - meno potente)

while / do..while(meno astratto - più potente)

for con indici

29 of 53

Astrazione all’interno di un linguaggio: l’iterazione (problemi diversi)

L = [2, 4, 1, 5, 7, 3, 8, 9999, 4, 1] #lista L di interi

# stampa gli interi di L

for n in L:

print(n)

# conta il numero di coppie adiacenti di L non in ordine crescente

cnt = 0

for i in range(len(L)-1):

if L[i]>L[i+1]:

cnt += 1

# stampa tutti gli interi di L che precedono 9999

i = 0

while i < len(L) and L[i] != 9999:

print(L[i])

i = i + 1

for-each(più astratto - meno potente)

for con indici

while / do..while(meno astratto - più potente)

30 of 53

Conoscenza sintattica, concettuale, strategica

# stampa gli interi di L

for n in L:

print(n)

# conta il numero di coppie adiacenti di L non in ordine crescente

cnt = 0

for i in range(len(L)-1):

if L[i]>L[i+1]:

cnt += 1

# stampa gli interi prima di 9999

i = 0

while i < len(L) and L[i] != 9999:

print(L[i])

i = i + 1

  • Sintattica�come si scrivono for e while in Python
  • Concettuale�quante volte i cicli vengono eseguiti; quando si interrompono
  • Strategica�uso dell’indice per accedere agli elementi adiacenti; �uso del while quando non si conosce a priori il numero di ripetizioni

31 of 53

Learning to program requires different kinds of knowledge

# prints the integers of L

for n in L:

print(n)

# counts the adjacent pairs of L �not in ascending order

cnt = 0

for i in range(len(L)-1):

if L[i]>L[i+1]:

cnt += 1

# print integers before 9999

i = 0

while i<len(L) and L[i]!=9999:

print(L[i])

i = i + 1

Syntactic knowledge

how to write for and while in Python

Conceptual

how many times the cycles are executed; when they stop

Strategic

use of index to access adjacent elements; use of while when the number of repetitions is not known in advance

32 of 53

Muoversi nell’astrazione verso l’alto e verso il basso… sempre difficile!

  • SCENDERE è difficile perché si devono considerare e gestire più dettagli (maggiore potere espressivo)...
  • ma anche SALIRE perché ci si deve liberare di meccanismi consolidatI (metafora dell’auto: da manuale ad automatica) e fare uno sforzo di astrazione

Per insegnare

  • strumenti meno astratti ma più potenti (scendere)...
  • strumenti più astratti e comodi (salire)...

… bisogna mettere gli studenti in una situazione in cui

  • è impossibile risolvere il problema senza gestire �quei dettagli
  • è “pesante” (richiede tempo, fatica, può generare facilmente errori) continuare ad usare meccanismi poco astratti

In entrambi gli scenari l’obiettivo è stimolare la Necessity del costrutto (più o meno astratto) che si vuole introdurre

33 of 53

Sequenza Necessity (pre) Esercizi di avvicinamento alla fase P!S

Lanciare una MONETA. Scrivi un programma che effettua 10'000 di lanci di una moneta e stampa il numero finale di teste e croci ottenute

teste = 0

croci = 0

for k in range(10000):

moneta = randint(0,1)

if moneta == 0:

teste = teste + 1

else:

croci = croci + 1

print(teste, croci)

34 of 53

Sequenza Necessity (pre) Esercizi di avvicinamento alla fase P!S

faccia1 = faccia2 = faccia3 = faccia4 = faccia5 = faccia6 = 0

for k in range(10**6):

dado = randint(1,6)

if dado == 1:

faccia1 = faccia1 + 1

elif dado == 2:

faccia2 = faccia2 + 1

elif dado == 3:

faccia3 = faccia3 + 1

elif dado == 4:

faccia4 = faccia4 + 1

elif dado == 5:

faccia5 = faccia5 + 1

elif dado == 6:

faccia6 = faccia6 + 1

print(faccia1, faccia2, faccia3, faccia4, faccia5, faccia6)

Lanciare un DADO. Scrivi un programma che effettua 1 milione di lanci di un dado a 6 facce e stampa il numero finale di volte che è uscita ciascuna faccia

35 of 53

Sequenza Necessity (pre) Esercizi di avvicinamento alla fase P!S

Per stimolare la Necessity, gli studenti devono aver maturato padronanza �sugli esercizi di avvicinamento

  • Obiettivo: di fronte all’esercizio della fase P!S
    • sensazione che sia “uguale” agli esercizi di avvicinamento
    • quindi “parto in quarta” perché so già risolverlo

36 of 53

Sequenza Necessity (P!S) Problem Not Solved

Estrazioni del LOTTO. Scrivi un programma che effettua 1 mln di estrazioni del lotto (num. da 0 a 89) e stampa il numero finale di volte che è uscito ciascun numero

estratto0 = estratto1 = estratto2 = ... = estratto88 = estratto89 = 0

for k in range(10**6):

numero = randint(0,89)

if numero == 0:

estratto0 = estratto0 + 1

elif numero == 1:

estratto1 = estratto1 + 1

...

...

elif numero == 89:

estratto89 = estratto89 + 1

print(estratto0, estratto1, esrtatto2,..., estratto89)

37 of 53

Sequenza Necessity (P!S) Soluzione sub-ottima

186 righe di codice

38 of 53

Sequenza Necessity (I) Fase di Instruction

Introduzione agli array semplice e generale

Sequenza di elementi dello stesso tipo.

Nome unico, elementi accessibili per indice

myArray = [7, 4, 12, 5, 1]��print(myArray[3])

>> 5

myArray[4] = 42

for i in range(len(myArray)):

print(myArray[i])

>> 7 4 12 5 42

7

4

12

5

1

39 of 53

Estrazioni del LOTTO. Scrivi un programma che effettua 1 mln di estrazioni del lotto (num. da 0 a 89) e stampa il numero finale di volte che è uscito ciascun numero

estratto = [0]*90

for k in range(10**6):

numero = randint(0,89)

estratto[numero] = estratto[numero]+1�

>> print(estratto)

>> [11108, 11193, 11144, 10964, 11277, 11158, 11127, 11132, 11231, 11108, 11184,

11133, 11131, 11041, 11119, 11093, 11066, 11345, 11184, 11208, 10786, 11125,

11030, 11182, 11088, 11170, 11143, 11345, 11080, 11056, 11140, 11163, 11162,

11045, 11180, 10971, 10947, 11081, 11162, 11115, 11267, 11106, 11002, 11104,

11019, 11040, 11318, 11141, 11152, 10883, 11095, 10997, 11043, 11192, 11038,

10990, 10988, 11112, 11010, 10899, 11194, 11000, 11165, 10992, 11071, 11081,

11371, 11196, 11038, 11065, 11214, 11188, 11135, 11066, 11096, 11146, 11123,

11227, 10945, 11270, 11236, 11215, 11158, 11175, 11149, 10888, 11195, 10985,

11028, 11075]

Sequenza Necessity (PS) Problem Solved

stesso esercizio della �fase P!S… ma ora con il target concept (gli array)

40 of 53

Come presentiamo una sequenza Necessity

  • Problema “in a nutshell”
  • Prerequisiti
  • Concetto target (in termini di conoscenza sintattica, concettuale, strategica)
  • Esempi di esercizi di avvicinamento
  • Fase P!S (Problem Not Solved)
    • Testo del problema
    • Ciò che scatena la necessity
    • La necessity scatenata
    • Eventuali soluzioni sub-ottime
  • Fase I (Instruction): il concetto target da insegnare
  • Fase PS (Problem Solved): soluzione al problema con il concetto target
  • Caratteristiche sequenza (astrazione sale o scende, sul controllo o sui dati, ...)
  • Avvertenze per gli insegnanti (es. argomenti che gli studenti non devono �sapere per non “spoilerare” la fase P!S)

41 of 53

Esempi di sequenze

Nel paper [Sbaraglia, Lodi, Martini, 2021] abbiamo presentato 4 esempi di sequenze progettate con NLD

  • La necessità dell’iterazione definita (con la geometria della tartaruga)
  • La necessità dell’iterazione indefinita
  • La necessità degli array
  • La necessità dei dizionari

42 of 53

Sperimentazione di una sequenza NLD

43 of 53

NLD per fare bootstrap degli array

2 TERZE del TECNICO tecnologico indirizzo INFORMATICA (Aldini Valeriani, BO)

  • in terza si inizia a programmare
  • sperimentazione a gennaio (gli studenti ancora novizi)
  • classi con lo stesso insegnante di informatica (e stesso ITP)
  • una classe sperimentale e una di controllo

Principali obiettivi (aperti ad osservare cose impreviste)

  • (QUANT.) Confrontare i voti tra lo storico fino a gennaio e i voti sugli array (più che i voti tra le due classi, intrinsecamente non omogenee tra loro)
  • (QUANT.) Analizzare auto-percezioni sull’apprendimento degli array (e dell’informatica in generale)
  • (QUANT.) Valutare se c’è stato un cambiamento nella motivazione
  • (QUAL.) Analizzare stati d’animo e impressioni degli studenti

Sperimentazione a scuola: contesto e obiettivi

44 of 53

Sperimentazione a scuola: design

  • Sviluppo esercizi (sulla base del design pre-esistente)
    • uguali per entrambe le classi
    • adattati al linguaggio usato (C++)
  • Supporto all’insegnante nella revisione e scelta dei materiali per l’Instruction
  • Co-costruzione verifica con gli insegnanti in linea con le modalità abituali
  • Scansione attività
    • cl sperimentale: es. avvicinamento → P!S → I → PS → consolidamento
    • cl di controllo: es. avvicinamento → I → PS → consolidamento
  • Definizione dei tempiomogenei tra le due classi

Costante comunicazione con l’insegnante per garantire

  • prerequisiti tutti raggiunti prima dell’inizio della sperimentazione
  • esercizi erogati nei momenti giusti (diversi in classe sperimentale e di controllo)
  • tempi in linea con quelli previsti normalmente per gli array

L’insegnante ha usato il materiale (esercizi, teoria, verifica) secondo le sue �modalità preferite e anche in relazione a risposta e interazione con gli studenti

45 of 53

Prime osservazioni

(Questionari e voti ancora da analizzare, ma…)

  • Nella fase di correzione degli ultimi es. di avvicinamento�molti studenti annoiati, distratti, passivi - pochi studenti attivi e coinvolti �(gli insegnanti hanno descritto questo atteggiamento come normale)
  • Appena inizia la fase di P!S reazioni forti e poca indifferenza: studenti catturati dalla sfida, in movimento nel lab per confrontarsi, alcuni “frustrati” ma non scoraggiati, altri presi nello scrivere lunghissime soluzioni sub-ottime, quasi nessuno disinteressato
  • La fase di Instruction è stata molto più seguita e partecipata nella classe sperimentale. Alcuni studenti già provavano ad usare gli array nell’esercizio �(questi però hanno faticato di più sulla conoscenza sintattica e concettuale)
  • Nella fase di PS per alcuni non è stato ovvio risolvere il problema �(la conoscenza strategica è comunque difficile; coinvolto �un altro concetto non riconosciuto prima)

46 of 53

Limiti

  • NLD solo in momenti cruciali (passaggi critici e impegnativi, ad�es. nei cambi di astrazione)
  • Se usato troppo spesso si rischia che gli studenti…
    • “mangino la foglia” (e aspettino passivamente la fase di Instruction �senza alcun beneficio per la motivazione)
    • si sentano “imbrogliati” e contestino questa modalità

47 of 53

Bibliografia

Kalish, S. (2009). Effects Of Instructor Immediacy And Student Need For Cognition On Student Motivation And Perceptions Of Learning. Electronic Theses and Dissertations. https://stars.library.ucf.edu/etd/4163

Kapur, M., & Bielaczyc, K. (2012). Designing for Productive Failure. Journal of the Learning Sciences, 21(1), 45–83. https://doi.org/10.1080/10508406.2011.591717

Loibl, K., Roll, I., & Rummel, N. (2017). Towards a Theory of When and How Problem Solving Followed by Instruction Supports Learning. Educational Psychology Review, 29(4), 693–715. https://doi.org/10.1007/s10648-016-9379-x

McGill, T. J., & Volet, S. E. (1997). A Conceptual Framework for Analyzing Students’ Knowledge of Programming. Journal of Research on Computing in Education, 29(3), 276–297. https://doi.org/10.1080/08886504.1997.10782199

Mirolo, C., Izu, C., Lonati, V., & Scapin, E. (2021). Abstraction in Computer Science Education: An Overview. Informatics in Education, 20(4), 615–639. https://doi.org/10.15388/infedu.2021.27

Robins, A. (2010). Learning edge momentum: a new account of outcomes in CS1. Computer Science Education, 20(1), 37–71. https://doi.org/10.1080/08993401003612167

Sbaraglia, M., Lodi, M., & Martini, S. (2021). A Necessity-Driven Ride on the Abstraction Rollercoaster of CS1 Programming. Informatics in Education, 20(4), 641–682. https://doi.org/10.15388/infedu.2021.28

48 of 53

Grazie

Dipartimento di Informatica - Scienza e Ingegneria

www.unibo.it

49 of 53

PRE-sperimentazione: State Motivation Scale [Kalish, 2009]

Per ciascuna delle coppie, scegli il numero che meglio descrive come ti senti rispetto alla materia Informatica.

(Riferito alla materia 'Informatica' di quest'anno, da settembre fino ad adesso.)

1 2 3 4 5 6 7

Motivato

Non motivato

Interessato

Non interessato

Coinvolto

Non coinvolto

Non stimolato

Stimolato

Non voglio studiarla

Voglio studiarla

Ispirato

Non ispirato

Non messo alla prova

Messo alla prova

Non energizzato

Energizzato

Non entusiasta

Entusiasta

Elettrizzato

Non elettrizzato

Carico

Non carico

Non affascinato

Affascinato

50 of 53

PRE-sperimentazione [adapted from Kalish, 2009]

Efficacia dell’insegnamento fino alla sperimentazione

Auto-efficacia dello studente (baseline per l’efficacia dell’insegnamento)

51 of 53

Per analizzare stati d’animo e impressioni degli studenti sulle varie fasi/attività (QUAL.)

Questionario post-attività

52 of 53

POST-sperimentazione: State Motivation Scale [Kalish, 2009]

Per ciascuna delle coppie che trovi sotto, scegli il numero che meglio descrive come ti senti rispetto alla materia Informatica dopo l'introduzione agli array.

1 2 3 4 5 6 7

Motivato

Non motivato

Interessato

Non interessato

Coinvolto

Non coinvolto

Non stimolato

Stimolato

Non voglio studiarla

Voglio studiarla

Ispirato

Non ispirato

Non messo alla prova

Messo alla prova

Non energizzato

Energizzato

Non entusiasta

Entusiasta

Elettrizzato

Non elettrizzato

Carico

Non carico

Non affascinato

Affascinato

53 of 53

POST-sperimentazione [adapted from Kalish, 2009]

Efficacia dell’ introduzione agli array

Auto-efficacia dello studente sull’ introduzione agli array (baseline)