SlideShare a Scribd company logo
1 of 116
coding, pattern e pensiero
computazionale
Giuseppe Alessandri
PNSD – Tolentino
2017
indice
• Tecnologie
• Tecnologie e didattica
• Approcci imperativo e a eventi al coding e
– pattern monoagente-deliberativo
– pattern multiagente-deliberativo
– pattern monoagente-reattivo
– pattern multiagente-reattivo
• Scratch junior
• Pensiero computazionale e algoritmi
• Narrazione e Pensiero computazionale
• Approccio dichiarativo al coding: Prolog
una definizione (B. Arthur)
“La tecnologia è un mezzo per soddisfare uno scopo
umano. […] In quanto ‘mezzo’, la tecnologia può essere un
apparecchio fisico (un motore diesel, un frigorifero), un
processo (un processo di filtrazione nell’ingegneria chimica
o il processo risolutivo per una equazione di secondo grado,
eventualmente codificato in algoritmo), un metodo (il
metodo adottato per lo sviluppo di un algoritmo per il
riconoscimento vocale, la modalità di progettazione
didattica, ..). […]; può essere materiale […] oppure
immateriale […]. Comunque è sempre un mezzo creato per
soddisfare un fine umano”.
Cos’è la tecnologia
(Arthur)
Alessandri G., Tecnologie autonome nella didattica, verso la robotica educativa, Morlacchi, Perugia, 2013
Spesso le tre tipologie si integrano:
• un processo sviluppato con un determinato
metodo;
• un processo che ha bisogno di un apparecchio
per essere eseguito (un algoritmo);
• un processo, sviluppato con un certo metodo,
che si realizza con un determinato
apparecchio (ancora il caso di un algoritmo).
Cos’è la tecnologia
(Arthur)
Tecnologie e didattica
• Il senso del loro utilizzo oscilla in un continuo che va da forme
di sostegno alle varie discipline, facilitandone e migliorandone
l’apprendimento, ad approcci che accentuano il carattere di
autonomia delle stesse tecnologie
Tecnologie e didattica
Tecnologie di sostegno possono suddividersi in tecnologie per
presentare e tecnologie per facilitare.
• La caratteristica fondamentale delle prime è la presenza di
un elemento essenziale quale il video, attraverso il quale
l’utente riceve informazioni, ma può anche presentarne; un
esempio è il web.
• Nel web di oggi possiamo individuare i siti vetrina (è
prevalente la presentazione) e siti officina (è prevalente la
discussione, la collaborazione, la costruzione). Esempi dei
primi sono i siti degli utenti e, fra questi, quelli di forte
concentrazione informativa come i portali. Esempi del
secondo caso sono i siti per le comunità (di aiuto, di
discussone, di pratica, …), siti per la formazione,
applicazioni del web 2.0.
Tecnologie e didattica
• Tecnologie per facilitare. Sono tecnologie che si pongono fra lo
studente che apprende e l’oggetto di studio per facilitare il processo
di apprendimento introducendo delle rappresentazioni che possano
aiutare nella comprensione. Un esempio di tale tecnologia è la
simulazione che può essere considerata una ricostruzione di
qualche segmento della realtà rappresentandone un modello nella
forma e una riproduzione delle funzionalità. Il tentativo è quello di
far conoscere parti del mondo ricreandoli, in modo artificiale, e
dando all’utilizzatore la possibilità di interagire con gli aspetti che
sono riprodotti, e osservando le conseguenze delle azioni frutto
delle decisioni prese.
• Altri due esempi sono i DGS (Dynamic Geometry Software; es.
Geogebra) e i CAS (Computer Algebra System); entrambi si
riferiscono all’insegnamento della Matematica.
Tecnologie e didattica
• Tecnologie autonome. Sono quelle che permettono di sviluppare
esperienze che altrimenti non sarebbe possibile svolgere. Il loro valore
non sta nel presentare, nel miglior modo possibile, la fruizione di
mondi fittizi che realizzino il reale attraverso il digitale, ma nel
costruire questi mondi che possono essere realizzati attraverso propri
linguaggi e regole di queste tecnologie. Esse disegnano percorsi di
apprendimento consapevole nei domini che sono loro tipici e
propongono metodologie di lavoro attive e autonome.
• Le pratiche didattiche che si possono realizzare mediante tali
tecnologie delineano:
– approcci maggiormente orientati alla soluzione di problemi;
– l’assimilazione di metodologie di lavoro in grado di migliorare la
significatività del processo di apprendimento (attraverso la
realizzazione di artefatti)
Tecnologie e didattica
I tratti fondamentali dell’autonomia sono rintracciabili:
• in una maggiore sovranità rispetto alla lezione del
docente; non sono, cioè, al servizio di un itinerario già
tracciato; non sono pacchetti chiusi, o anche simulazioni
già fatte, ma sono strumenti che gli studenti possono
utilizzare per costruire conoscenze nei diversi settori
disciplinari; essi sperimentano e scoprono e formalizzano
leggi dai loro esperimenti;
• in un metodo di lavoro che privilegia l’azione;
• nella necessità di utilizzare un loro linguaggio.
Le tecnologie autonome si sostanziano nel
pensiero computazionale e nel coding
Come visto nella mappa del pensiero
computazionale, possiamo individuare diversi
approcci nella programmazione; in questo
contesto ci si riferisce a quello imperativo e a
quello a eventi e, successivamente, a quello
dichiarativo
• Approccio imperativo e a eventi
• In via prioritaria è bene conoscere il significato
di modello e, in particolare, i formalismi più
comuni per la sua rappresentazione (nel
nostro caso i linguaggi grafici e i linguaggi di
programmazione).
Si possono individuare quattro modalità di costruzione dei programmi:
monoagente, multiagente, deliberativa e reattiva:
• modalità monoagente: si riferisce a realizzazioni che si sviluppano con una
sola programmazione; l’applicazione risiede in un unico nodo elaborativo
che vive in un solo agente;
• modalità multiagente: le applicazioni risiedono su più nodi elaborativi
(elaborazione distribuita) e vivono in più agenti; si hanno, cioè, diverse
programmazioni che svolgono operazioni differenti nell’ambito di una
macro–applicazione;
• modalità deliberativa: indica la possibilità di sviluppare una applicazione
attraverso una programmazione predeterminata, rispettata passo dopo
passo, isolata rispetto all’ambiente circostante;
• modalità reattiva: in una applicazione è possibile interagire con
l’ambiente della stessa e con l’esterno; gli eventuali agenti possono
interagire fra di loro. Il suo sviluppo non è rigidamente predeterminato,
ma può tener conto delle interazioni che si sviluppano.
• Sistemando le quattro modalità sui vertici di un
diagramma si hanno quattro poli: deliberativo,
reattivo, monoagente, multiagente; di
conseguenza è possibile avere quattro
combinazioni che rappresentano quattro pattern
di riferimento per realizzare applicazioni:
monoagente-deliberativo (imperativo) (a),
multiagente-deliberativo (imperativo) (b),
monoagente-reattivo (a eventi) (d), multiagente-
reattivo (a eventi) (c) .
• Nel quadrante a (pattern monoagente–deliberativo) si ha una unica
programmazione che impone all’unico agente dei comportamenti
prestabiliti e dettati dall’applicazione; questa non prevede
interazione con l’ambiente e con l’esterno;
• nel quadrante b (pattern multiagente–deliberativo) si individuano
applicazioni con più agenti guidati da programmazioni che non
permettono interazioni fra agenti, con l’ambiente e con il mondo
esterno.
• nel quadrante d (pattern monoagente–reattivo) le applicazioni sono
costruite intorno a un unico agente che può interagire con
l’ambiente e con il mondo esterno;
• nel quadrante c (pattern decentralizzato–reattivo) si hanno più
agenti; ciascuno, con la propria programmazione, può interagire
con gli altri, con l’ambiente e con l’esterno.
Molteplici sono gli ambienti per la composizione di programmi ed è
possibile individuare una distinzione:
• fra quelli che permettono la scrittura del codice in un ambiente
testuale
• e quelli che mettono a disposizione un ambiente dove inserire le
istruzioni del linguaggio (in genere prelevabili da elenchi già
predisposti) e vicino un ambiente grafico ove vivono gli agenti
dell’applicazione.
Oggi, generalmente, le applicazioni, sviluppate secondo i dettami di uno
qualunque dei pattern presentati in precedenza, vivono in ambienti del
secondo tipo. Nelle figure seguenti sono riportati quelli di Scratch e di
Snap!
Scratch
Snap!
Dall’analisi al programma
Dall’analisi al programma: percorso che porta dalla individuazione e formulazione di un
problema alla scrittura del programma relativo.
• Definiamo come programma un insieme di istruzioni e dati, finalizzato a dei compiti ben
precisi e delimitati. Il programma viene costruito dall’uomo e viene eseguito dal computer e,
perciò, deve essere scritto utilizzando un linguaggio che l’elaboratore comprende. Per
linguaggio di programmazione intendiamo un insieme di istruzioni e di regole che definiscono
le modalità con le quali le stesse istruzioni ed i dati possono essere inseriti in un programma.
• I passi fondamentale del percorso sono:
a) analisi:
-individuazione dei dati sui quali il programma deve “lavorare”;
-individuazione del procedimento risolutivo, che generalmente prevede un
frazionamento, per passi successivi, del programma in parti via via più semplici;
b) costruzione del programma e relativa codifica utilizzando un linguaggio di
programmazione;
c) prove del programma, individuazione degli errori;
d) feed back.
Nel prosieguo vengono presentati i quattro
pattern: monoagente-deliberativo,
multiagente-deliberativo, monoagente-
reattivo, multiagente-reattivo.
Nell’insieme rappresentano un percorso
che il docente potrebbe seguire nel proprio
itinerario di alfabetizzazione sul pens.
comp. e sul coding.
• Non vuole essere un itinerario da proporre
immediatamente in aula con gli studenti, in
special modo per quelli della primaria ma,
anche, della secondaria di primo grado.
• Per costoro è meglio iniziare con un approccio
più light che preveda direttamente un impatto
con il linguaggio (preferibilmente Scratch)
impostando semplici programmi e
procedendo per prove ed errori.
• Tuttavia il docente deve essere consapevole
che il suo punto di arrivo dovrà essere l’aver
“convinto” i propri studenti che occorra,
dapprima, analizzare il problema, sviluppare
un bozza di modello risolutivo (attraverso
opportuni diagrammi, come si vedrà),
individuare il pattern che pensa possa essere
idoneo e quindi passare alla stesura del
programma.
pattern
• pattern monoagente-deliberativo
• pattern multiagente-deliberativo
• pattern monoagente-reattivo
• pattern multiagente-reattivo
pattern monoagente–deliberativo
• Il primo passo del percorso è rappresentato
dall’analisi del problema che si sviluppa
attraverso l’individuazione dei dati con i quali
operare ed il relativo procedimento risolutivo. I
dati possono essere iniziali, cioè conosciuti e
consegnati in ingresso al programma, dati creati
dal procedimento e dati in uscita. Il procedimento
può consistere in una scomposizione del
problema in parti secondo il metodo top down. Il
problema viene suddiviso in sottoproblemi, i
quali possono anch’essi essere frazionati
ulteriormente in altri sottoproblemi;
pattern monoagente–deliberativo
• il procedimento avanza fino alla individuazione di parti
non più scomponibili. Queste sono i nuclei essenziali
dello sviluppo del programma; sono, in genere, chiamate
procedure. Si passa, quindi, allo sviluppo delle stesse
utilizzando opportuni formalismi, ad esempio pseudo–
codifica o diagramma a blocchi; successivamente si
assembla il tutto nel procedimento finale, lo si traduce
nel codice del linguaggio utilizzato, lo si esegue
all’elaboratore. Spesso si evita il passaggio della scrittura
in pseudo–codifica (o diagramma a blocchi) e si scrivono
le procedure direttamente nel linguaggio di
programmazione scelto.
• Quindi il procedimento si sviluppa, attraverso
raffinamenti successivi, da una struttura generale del
problema alla formulazione finale del programma che
verrà fatto eseguire dall’elaboratore. La progettazione
nasce da prime ipotesi risolutive e si sviluppa lungo
successivi momenti nei quali si progettano nuovi
itinerari. La progettazione termina alla fine della sua
attuazione.
• Il procedimento di analisi si articola attraverso le
strutture di sequenza, confronto, ripetizione.
• Esistono diversi strumenti per formalizzare il
procedimento di analisi; presentiamo qui i diagrammi
di Jackson.
pattern monoagente–deliberativo
sequenza
Si legge “x è una sequenza di a, b, c”
pattern monoagente–deliberativo
confronto
Si legge: “x è a se vale cond 1, x è c se vale cond
2”.
pattern monoagente–deliberativo
ripetizione
Si legge “x è una ripetizione di b, per n volte”
pattern monoagente–deliberativo
• Attraverso corrette combinazioni di tali strutture è possibile sviluppare
procedimenti risolutivi.
x è una sequenza
— di a, che è una sequenza di m e n,
— di b, che è una ripetizione di z per 5 volte,
— di c, che è w se vale c1, y se vale c2.
pattern monoagente–deliberativo
• Tale diagramma si legge dall’alto verso il basso e da sinistra
verso destra; m, n, z, w, y rappresentano procedure.
• Una volta giunti a questo livello di rappresentazione del
problema, si sviluppano le varie procedure nella forma di
una pseudo–codifica o di un diagramma a blocchi e, quindi,
si codificano le istruzioni secondo il linguaggio scelto; si
‘passa’ poi il programma codificato all’elaboratore che
provvederà a eseguirlo.
• Realizziamo ora due applicazioni seguendo il procedimento
sopra delineato:
• a) costruire una casa senza finestre (Esempio 1).
• b) costruire una casa con finestre (Esempio 2).
pattern monoagente–deliberativo
Esempio 1: costruire una casa senza finestre con il corpo di 100 punti di lato ed il tetto
di 120 punti.
Si disegni su carta il seguente schema:
Analizzando si può vedere che per rappresentare una casa occorre costruire una
facciata e un tetto; la facciata è un quadrato e il tetto un triangolo; quindi il problema
è scomponibile in due procedure:
facciata, tetto.
Con i diagrammi di Jackson:
A questo punto si realizzano le varie procedure scrivendo il relativo codice in pseudo–
codifica e quindi in Snap!, Scratch.
pattern monoagente–deliberativo
Esempio 2: costruire una casa con finestre.
Si disegni su carta il seguente schema:
Analizzando si può vedere che per rappresentare una casa si possono utilizzare un
quadrato ed un triangolo (che costituiscono, nell’insieme, la casa senza finestre), due
quadrati per le finestre ed un rettangolo come porta di ingresso. Ma la casa senza
finestre è stata già costruita e la relativa procedura è disponibile, quindi:
pattern monoagente–deliberativo
Possiamo scrivere una versione equivalente del diagramma precedente,
costruendo una procedura finestre, che contiene, al suo interno, le due
procedure finestra:
pattern monoagente–deliberativo
Come esempio di utilizzo di una pseudo–codifica e dei diagrammi a blocchi,
sviluppiamo la procedura quadrato, che rappresenta il corpo della casa.
inizio
avanti 100
destra 90
avanti 100
destra 90
avanti 100
destra 90
avanti 100
destra 90
fine
Ottimizzato
inizio
ripeti 4 volte
avanti 100
destra 90
fine
Fine
(struttura di ripetizione)
inizio
ripeti 4 volte
avanti 100
destra 90
fine
Esempio di struttura di
controllo; in base al valore di
un numero si costruisce una
casa con o senza finestre
Esempio di struttura di
ripetizione; si deve ripetere il
procedimento precedente
per dieci volte; per ogni ciclo,
in base al valore di un
numero, si costruisce una
casa con o senza finestre
ripeti
# 10 volte
acq. numero
Area SPRITE
STAGE
Area SCRIPT
Area
ISTRUZIONI
Snap!
(Sito ufficiale di Snap)
Snap! È la versione 4.0 di BYOD (Build Your Own Blocks).
• Per fare la prima conoscenza di Snap! Si
utilizza il programma per la realizzazione della
casa senza finestre; dapprima senza procedure
e poi con procedure.
• Manuale Snap!
• Negli esempi seguenti, per vedere il codice
Snap! occorre un click sul simbolo
in alto a destra
con procedure
Snap!
senza procedure
mono_deliberativo_1 mono_deliberativo_2
Snap!
con procedure
con parametri
mono_deliberativo_3
mono_deliberativo_4
pattern multiagente-deliberativo
• Si parla di pattern multiagente quando le applicazioni
risiedono su più nodi elaborativi (elaborazione
distribuita). Le programmazioni possono esplicitarsi
nelle azioni di agenti che agiscono in un apposito
ambiente e hanno, teoricamente, la possibilità di
interagire fra loro, con l’ambiente e con l’esterno;
tuttavia in questo caso (pattern multiagente-
deliberativo) tutto ciò è impedito in quanto sono
deliberatamente guidati nella loro vita “di comunità”. Il
deliberare i loro comportamenti significa che i loro
movimenti, le loro azioni sono etero-dirette dall’utente
attraverso le programmazioni che ha associato ad essi.
pattern multiagente-deliberativo
pattern multiagente-deliberativo
• Riprendendo l’esempio precedente (costruzione di una
casa), possiamo implementare la costruzione del portone e
demandarlo a un secondo sprite; è possibile ipotizzare una
distribuzione dei compiti fra diversi agenti, invece nella
situazione già analizzata esisteva un unico agente con
un’unica programmazione.
• Con una soluzione decentralizzata, è possibile impostare un
procedimento che preveda un agente che costruisce la
facciata ed il tetto della casa, un secondo che si interessa
della costruzione del portone (e, volendo, un terzo che
modella le finestre). È ovvio che si potrebbe operare in altri
modi, impegnando un numero diverso di agenti e
assegnando loro compiti diversi.
Snap!
1° sprite disegna la facciata e il tetto 2° sprite disegna il portone
multi_deliberativo_1
pattern monoagente-reattivo
• Il pattern monoagente-reattivo introduce al
modo di costruire applicazioni di coding
secondo una programmazione orientata agli
eventi. Si ha un unico nodo elaborativo,
tuttavia la programmazione si sviluppa in
interazione con l’ambiente circostante (interno
ed esterno). L’applicazione si esplicita nelle
azioni di un agente che non vive in una bolla
isolata, ma interagisce con l’ambiente interno
ed esterno.
pattern monoagente-reattivo
pattern monoagente-reattivo
• Un programma in Snap!, generalmente, si sviluppa
attraverso la vita di diversi agenti chiamati sprite, a
ciascuno dei quali è possibile associare più script (insieme
di istruzioni dedicato a compiti specifici). Per simulare il
pattern che stiamo analizzando, tuttavia, dobbiamo
limitarci alla gestione di un solo sprite che interagisce con
l’ambiente nel quale vive. Ciascuno script ha un hat block in
testa che stabilisce quando deve essere eseguito. L’hat
block dà l’avvio all’evento rappresentato dalla sequenza
delle successive istruzioni (blocchi). Generalmente il nome
di un hat block inizia con la parola “quando”. Nei precedenti
esempi abbiamo sorvolato sull’uso dell’hat block per non
introdurre elementi di “reattività” in contesti deliberativi; si
ricordi, comunque, che tale blocco è indispensabile.
pattern monoagente-reattivo
• In genere uno script inizia con un blocco hat con la
parola quando (when) e l’azione che lo avvia, a indicare
quando deve andare in esecuzione. Fino ad ora
abbiamo utilizzato l’hat block
in questo caso quando si clicca sulla bandiera verde, in
alto a destra nell’interfaccia di Snap! si avviano gli
script che fanno iniziare ad agire gli sprite (nel caso
multiagente, altrimenti un solo sprite).
pattern monoagente-reattivo
Nell’esempio seguente, abbiamo quattro script; quello con:
• hat block “quando si clicca su bandiera verde”, permette
l’avvio del programma e fa spostare lo sprite al punto di
coordinate 0,0;
• hat block “quando si preme il tasto spazio”, fa avanzare lo
sprite di dieci passi (punti) sullo schermo (tenendo premuto
la barra spazio, lo sprite si muove costantemente in avanti);
• hat block “quando si preme il tasto freccia su” lo sprite
ruota di 90 gradi verso sinistra;
• hat block “quando si preme il tasto freccia giù”, lo sprite
ruota di 90 gradi verso destra.
Snap!(mono_reattivo_1)
pattern monoagente-reattivo
• Ovviamente i singoli script possono avere una
struttura più complessa; ad esempio
nell’evento collegato alla pressione della barra
spazio, nella figura seguente, si impone allo
sprite di tornare indietro di dieci passi (punti)
se si incontra il bordo della finestra dove si
sviluppa il programma.
Snap!(mono_reattivo_2)
pattern monoagente-reattivo
Differenza fra pattern deliberativo e pattern reattivo nel caso di uno sprite che deve
attraversare il seguente labirinto
pattern monoagente-reattivo
• Approccio deliberativo:
l’applicazione non sviluppa
alcuna interazione con
l’ambiente, escludendo quella
per l’avvio, e si sviluppa facendo
procedere allo sprite un
percorso predeterminato da
rilevazioni di distanze,
effettuate in fase di costruzione
dello script, e riversate nelle
istruzioni dello stesso.
pattern monoagente-reattivo
Approccio reattivo
• L’applicazione (figura seguente), si sviluppa attraverso quattro script
che gestiscono quattro eventi che permettono:
• l’avvio con il posizionamento iniziale dello sprite;
• la pressione sulle frecce, a destra e a sinistra, per far ruotare lo
sprite, a destra o a sinistra, di cinque gradi (tenendo premuta la
freccia a lungo si potrà far ruotare lo sprite dell’angolo che si vuole);
• il movimento dello sprite lungo il percorso: quando lo sprite tocca il
colore nero, torna indietro di 20 passi, quindi l’utente dovrà farlo
ruotare in modo opportuno a destra o a sinistra; quando lo sprite
incontra il bordo (a fine itinerario) viene ricollocato nella posizione
iniziale.
Approccio reattivo
Snap!(mono_reattivo_3)
l’essere reattivo dello sprite è evidenziato nei momenti di contatto con il bordo
nero della pista e con il bordo dell’ambiente nel quale agisce e di risposta alle
azioni dell’utente.
modello per pattern
monoagente-reattivo
pattern multiagente-reattivo
• Diversamente dal precedente, il pattern decentralizzato-reattivo individua
animazioni nelle quali possono vivere più sprite/agenti e permette
interazioni fra loro e con gli ambienti esterno e interno.
• Tutto ciò permette, indifferentemente, un agire autonomo e indipendente
dall’azione degli altri sprite, oppure una collaborazione fra essi.
Snap!(multi_reattivo_1)
• Nella seguente applicazione (Figura 6.2) vivono due
sprite, chiamati “sprite1” e “sprite2”, che non
interagiscono fra loro, ma solo con l’ambiente interno
(il bordo).
Snap!(multi_reattivo_2)
• È possibile farli interagire fra loro e con l’ambiente
interno (il bordo).
pattern multiagente-reattivo
• Altresì, è possibile far cooperare i due sprite sulla scena
del racconto di una storia, di un gioco, di una
simulazione. Uno sprite potrebbe invitare un altro a
eseguire delle azioni. In una storia potrebbero costruire
un dialogo, alternandosi in modo sincronizzato. È
possibile realizzare una sincronizzazione inserendo i
messaggi di uno sprite in una sequenza temporale e
quelli dell’altro in un’altra sequenza che non si
sovrapponga alla prima e, nell’insieme, le due
sequenze restituiscano un colloquio corretto fra i due
protagonisti. Tuttavia esiste una diversa modalità che
prevede che i due sprite si passino la parola (figura
seguente)
Snap!(multi_reattivo_4)
1
2
3
4
pattern multiagente-reattivo
• L’esecuzione degli script avviene, secondo la numerazione visualizzata in figura 6.4, attraverso lo scambio
dei seguenti “ciao”, “come”, “dove”. In particolare:
• l’esecuzione si avvia con un click sulla bandiera verde che lancia lo script n.1 del primo sprite (sprite1), che
– visualizza, sul video “Ciao, io sono Michele, tu chi sei?”, per 3 secondi;
– quindi invia a tutti gli sprite il messaggio “ciao” tramite il blocco di broadcast “invia a tutti ciao e
attendi”;
• il messaggio viene ricevuto solo dal secondo sprite (sprite2) attraverso lo script n. 2, che
– visualizza sul video “Ciao io sono Anna; come stai, che fai?” , per 3 secondi;
– quindi invia a tutti il messaggio “come”;
• il messaggio viene ricevuto dal primo sprite attraverso lo script n. 3, che
– visualizzerà sul video “Io sto bene; sto andando a scuola, andiamo insieme?” , per 3 secondi;
– quindi invia a tutti gli sprite il messaggio “dove”;
• questo viene ricevuto dal secondo sprite attraverso lo script n. 4, che
– visualizzerà “va bene, andiamo”, per 2 secondi.
• Quindi l’esecuzione termina.
• In questa applicazione solamente uno sprite alla volta, alternativamente, ha uno script da eseguire quando
viene inviato un messaggio di broadcast.
• Le parole “ciao”, “come”, “dove”, sono arbitrarie e sono scelte da colui che costruisce l’applicazione.
anna
sente
messaggio
“ciao”
eseguire
Invia messaggio:
Ciao! io sono Anna, come stai, che fai?
anna
sente
messaggio
“andiamo”
eseguire
Invia messaggio:
Va bene, andiamo
Scratch Junior
(https://www.scratchjr.org/index.html)
• È un ambiente visuale ed è adatto per sviluppare
esperienze di coding con bambini dai cinque ai
sette anni. Ha una interfaccia semplificata
rispetto alle versioni di Scratch e di Snap!. Gli
sprite sono chiamati character. Mantiene la
struttura di questi ambienti di livello superiore in
merito alla creazione di sfondi e/o nuovi stage,
alla modifica del character, alla registrazione di
audio e, infine, al raggruppamento di comandi.
• Inizialmente disponibile solo su iPAD, ora anche
su sistemi Android.
Un percorso
Utilizzando Scratch Junior, un possibile itinerario può essere quello presentato in precedenza con
opportune modifiche:
• Nel pattern mono-deliberativo potranno essere trattati i seguenti argomenti:
– familiarizzazione con l’ambiente di Scratch Jr;
– uso dei comandi di movimento e di gestione del character ;
– composizione di sequenze di azioni e concetti di istruzione e programma ;
– azioni ripetitive .
• In quello multi-deliberativo, verranno inseriti più character, tuttavia non interagenti fra loro e
con l’ambiente per introdurre al significato di decentralizzazione.
• Infine nei pattern mono-reattivo e multi-reattivo, si introduce il concetto di evento e si
analizza come, attraverso questo, sia possibile gestire le interazioni di un character e di più
character fra loro e con l’ambiente
Una considerazione [1]
• In linea generale, senza cioè puntare l’attenzione sulla
costruzione di applicazioni, l’attrazione che i piccoli sentono
verso i dispositivi mobili è dovuta alla possibilità di una
interazione tattile sullo schermo.
• Gli oggetti sono presi, spostati, eliminati e tutto avviene
attraverso il tatto. Diversamente da altri dispositivi digitali,
quelli mobili eliminano gli strumenti di input che
permettono di trasformare le intenzioni degli utenti,
impartite con opportune combinazioni di tasti o inclinazioni
e orientamenti di un input dedicato, in possibili comandi da
impartire. Si elimina questo passaggio intermedio e le
azioni divengono immediate interazioni con ciò che avviene
sullo schermo; l’azione è collocata sullo sviluppo della
narrazione sul video.
Una considerazione [2]
• Se l’apprendimento è dettato dall’azione sugli oggetti, in questo
caso ciò si realizza attraverso l’eliminazione di strumenti di
intermediazione.
• Gli ambienti visuali, nel caso di costruzioni attraverso il coding,
riducendo al minimo la necessità di scrivere codice e dando la
possibilità di agire per mezzo del tatto sugli oggetti astratti, possono
facilitare la costruzione di applicazioni.
• In questo caso possiamo “proprio parlare di costruzione”: i mattoni
dell’artefatto programma sono spostati e portati agendo
manualmente fra depositi e stage.
• Le stesse istruzioni hanno, nella loro veste grafica, degli ancoraggi
che permettono loro di collegarsi l’una con l’altra, quasi a
materializzare il significato astratto di programma in una costruzione
fisico-grafica reale.
Pensiero computazionale e algoritmi
• Un algoritmo è un insieme di istruzioni finalizzato alla soluzione di un
compito. Si ricorre spesso all’esempio di una ricetta per chiarirne il
significato. Può essere utile, in quanto identifica da un lato un processo e
dall’altro una serie di valori che vengono utilizzati nel processo. L’esempio
è riferito ad una ricetta per fare biscotti:
• Tale esempio può far capire il significato di algoritmo come insieme di
azioni finalizzato a un certo scopo. Chiarisce anche che un programma
agisce su “qualcosa”, in questo caso gli ingredienti, senza i quali non è
possibile fare la torta. Introduce anche al significato di azione che si ripete:
l’istruzione 3 va ripetuta sei volte.
Pensiero computazionale e algoritmi
• Realizzare programmi senza costruire un
computational thinking significa fare coding
secondo un mechanic learning by doing piuttosto
che secondo un learning by making. Chi
costruisce programmi deve essere consapevole
di concetti quali azioni ripetitive, condizionali,
algoritmo, pattern, però deve essere in grado di
agirli globalmente e non localmente. Spesso un
learning by doing diviene un procedere per prove
ed errori che interviene in punti precisi del
programma tralasciando la logica globale.
Pensiero computazionale e algoritmi
• Occorre invece riuscire a generalizzare le proprie
soluzioni, a concepire pattern e a essere
consapevoli delle operazioni di astrazione che il
costruire programmi comporta. In definitiva non
si tratta di usare regole di coding ma si tratta di
costruire esperienze significativa attraverso il
coding. Costruire programmi deve significare
sviluppare attività autentiche e non solamente
imparare codice; significa usare le proprie
capacità nell’articolare e arricchire le abilità
logiche di pensiero possedute.
Pensiero computazionale e algoritmi
• Costruire programmi è una attività di pensiero
che porta a riflettere sul proprio modo di
pensare, di analizzare e risolvere problemi;
non è quindi fine a se stessa e solamente
orientata alle cosiddette “discipline
scientifiche”, ma investe un livello che sta
sopra i contenuti disciplinari, investe la
capacità di ciascuno di astrarre, di
generalizzare.
Pensiero computazionale e algoritmi
• Il docente dovrebbe invitare lo studente alla realizzazione
di modelli di progettazione che possano essere riutilizzati,
anche attraverso delle modifiche, in situazioni diverse.
• Un patrimonio di pattern da riutilizzare permette a chi li
costruisce di affinare le proprie capacità e a chi ne fruisce di
implementare quelle di riconoscimento di similarità, quindi
di generalizzazione. Significa vedere la propria soluzione
non come fatto a se stante, ma come appartenente a una
categoria che si riesce a cogliere nei suoi aspetti
significativi. Significa saper condurre azioni, su un piano
puramente cognitivo, di riconoscimento di modelli, di
controllo e di modifica, se necessario, per un proficuo
utilizzo nel contesto che si sta gestendo.
Narrazione e computational thinking
Bruner (1986) scrive che ci sono due tipi fondamentali di pensiero
umano che sono in corrispondenza con due tipi di comunicazione:
narrativo e paradigmatico.
• La modalità narrativa è utilizzata comunemente per descrivere le
situazioni di vita nella ricchezza del loro sviluppo in un contesto;
esplicita un pensiero e lo narra, racconta di situazioni umane;
• la modalità paradigmatica descrivere concetti e situazioni, cercando
di astrarre dal contesto.
Sono due modi di ordinare l’esperienza e di costruire la realtà; il primo
è un racconto, il secondo è una descrizione ben costruita di un
argomento. La verifica li differenzia: nel secondo attiene a «processi
che permettono di stabilire una prova formale e empirica»; nel primo
«si stabilisce la più vicina approssimazione alla verità. Gli argomenti
devono convincere per la loro verità» (Balbi J., Cimbolli P., 2009, pag.
241).
Narrazione e computational thinking
• Il pensiero paradigmatico è tipico del
ragionamento scientifico: il pensiero segue una
logica formale, che procede per inferenze; è
finalizzato alla categorizzazione ed opera per
astrazione.
• Quello narrativo viene impiegato
prevalentemente nell'ambito di discorsi e
ragionamenti quotidiani; è dentro ai contesti che
forniscono categorie di senso e permettono di
interpretare fatti. I suoi enunciati sono particolari,
locali, dipendono dall’orizzonte interpretativo.
Narrazione e computational thinking
• Il mondo paradigmatico è popolato da tentativi di
costruzione scientifica della realtà, da modelli che riescano
a spiegare e a verificare la veridicità delle stesse
spiegazioni. I suoi processi sono caratterizzati da passi logici
dove vige categorizzazione e generalizzazione espressi da
procedure formali.
• Il mondo narrativo persegue una costruzione narrativa,
appunto, della realtà; non esplicita bisogni di prove e
dimostrazioni. I suoi processi sono caratterizzati da
soggettività che si sviluppa in storie che si dilatano e si
comprimono nello spazio e nel tempo, seguendo bisogni di
focalizzazioni per esplicitare valori, emozioni, capaci di
risuonare nelle coscienze (Scaratti G., Grazzani Gavazzi I.,
1998, pp. 310, 311).
Narrazione e computational thinking
• Il mondo della scuola è un terreno fertile per il
pensiero narrativo e spesso si sviluppano esperienze
vissute su palcoscenici dove recitano gli studenti e che
prevedono la realizzazione di un video per memoria
storica, ma anche come forma elementare di
drammatizzazione filmica.
• Sarebbe possibile realizzare delle storie facendole
vivere nel mondo digitale. Ambienti software
opportuni permetterebbero di unire esperienze di
narrazione con quelle di computational thinking. La
narrazione con costruzione di una storia digitale
(digital story telling) può essere un ideale terreno per
esercitare il c.t.
Narrazione e computational thinking
• Uno sfondo interpretativo della convivenza fra pensiero
paradigmatico e pensiero narrativo di Bruner può essere un digital
tale.
• Lo sviluppo del codice può rappresentare un esempio di pensiero
del primo tipo e lo sviluppo della storia un esempio del secondo.
• Nel codice possiamo rintracciare le caratteristiche del pensiero
paradigmatico quali l’astrazione, il formalismo per sviluppare
modelli;
• nello sviluppo della storia tutte le caratteristiche dell’altro: i
significati ricostruiti e trasmessi dall’autore; tutte le focalizzazioni su
particolari temi e aspetti, attraverso opportune scelte degli spazi e
dei tempi. I due approcci convivono nello stesso ambito e il primo
spiega il secondo in modo formale.
Narrazione e computational thinking
• In particolare un ulteriore riferimento teorico di
lettura può essere il richiamare due aspetti
individuabili in una storia (Kermode F., 1981): la
fabula e il sjuzet; la fabula è il senso della storia e
lo sviluppo generale, il sjuzet e la sua
realizzazione. Il sjuzet si interfaccia con il coding
che rappresenta la trama che permette lo
sviluppo della storia che vive in una fabula. La
fabula esprime il tema fondamentale e i valori
che vivono nella scansione del racconto che si
sviluppa poi lungo le tappe del sjuzet.
Narrazione e computational thinking
La progettazione complessiva si sviluppa nelle seguenti fasi:
• individuazione della fabula (ovvero il mondo dei valori nel
quale si sviluppa la storia);
• individuazione del sjuzet: le modalità di interazione degli
attori in relazione ai temi della storia, nelle varie scene;
• progettazione del programma che permette lo sviluppo della
storia:
– realizzazione delle scene;
– realizzazione degli script da associare agli attori della
storia;
– prove e correzioni.
Narrazione e computational thinking
Nello sviluppo del sjuzet è possibile aiutarsi con uno schema
attori-scene, che potrà poi essere utilizzato durante la
digitalizzazione della storia.
Narrazione e computational thinking
• Gli attori sono gli sprite; la numerazione delle scene indica
la loro sequenza nello sjuzet qualora siamo in un pattern
decentralizzato-deliberativo invece, nel pattern
decentralizzato-reattivo, sono nomi assegnati alle scene ma
non identificano una sequenzialità che, appunto, in questo
pattern non esiste. Le diverse scene vanno descritte
testualmente, specificando le rispettive sceneggiature,
descrivendo gli attori e le azioni che svilupperanno e cosa le
attiveranno. Dettagliare questa fase di analisi in questa
maniera facilità la realizzazione del programma relativo, in
quanto contiene in fieri tutto ciò che occorrerà per lo
sviluppo della storia; descrivendo le azioni dei vari attori si
indicano, implicitamente, i diversi script che dovranno
essere associati agli sprite.
approccio dichiarativo
dichiarativo, prolog
• Obiettivo di questa sezione è quello di introdurre la
programmazione logica nel percorso del PNSD. La differenza
sostanziale tra gli approcci precedenti (imperativi, ad oggetti, a
eventi, ..) e l’approccio dichiarativo (e quindi linguaggi logici e non
solo) è che nel primo caso il programma è caratterizzato da un
insieme di istruzioni che esprimono “come” ottenere un
determinato risultato; nel secondo caso il programma è
caratterizzato da un insieme di affermazioni che descrivono uno
specifico “stato del mondo” e di regole che permettono di
elaborare queste affermazioni per ottenere delle risposte a
domande poste. In definitiva si specifica che cosa occorre calcolare,
piuttosto che come.
• I linguaggi logico-dichiarativi, rispetto ai linguaggi procedurali, sono
molto simili al linguaggio naturale.
Da: Un software didattico per imparare la programmazione logica a scuola;Pierpaolo Di Bitonto, Teresa Roselli, Veronica Rossano, Dipartimento di Informatica – Università degli Studi di Bari
dichiarativo, prolog
• Un esempio di linguaggio dichiarativo logico è il
PROLOG (PROgramming LOGic) che è stato
progettato ed implementato a Marsiglia da
Colmerauer e Roussel nel 1972. In un programma
Prolog si descrive la conoscenza relativa al
problema, rappresentata da fatti e regole fra
questi, e poi sarà compito del sistema gestire lo
sviluppo risolutivo a fronte di interrogazioni. Il
PROLOG possiede un motore (Controllo), cioè un
meccanismo interno che gli permette di collegare
l'interrogazione con la conoscenza costituita per
costruire una risposta.
esempio 1 di pgm Prolog
• Abbiamo un elenco di persone
con numero telefonico e un
secondo elenco delle stesse
persone con il relativo indirizzo; si
vuole gestire questi due elenchi
per realizzare un elenco di
abbonati al telefono;
esempio 1
(elenco_tel.pl)
Il programma potrà essere strutturato nel seguente modo:
• tel(giorgio,223344).
• tel(maria,233445).
• tel(andrea,12234).
• tel(giorgio,283749).
• tel(giuseppe,223344).
• tel(anna,256781).
• tel(enrico,455466).
• tel(gianni,887799).
• indirizzo(giorgio,roma).
• indirizzo(maria,milano).
• indirizzo(andrea,torino).
• indirizzo(giuseppe,garibaldi).
• indirizzo(anna,tasso).
• indirizzo(enrico,marconi).
• indirizzo(gianni, garibaldi).
(Casadei G.A., Teolis A.G.B.)
ciascun “fatto” è formato da un
predicato (“tel”, “indirizzo”) e da
2 argomenti ; sono delle costanti
e vanno scritte in lettera
minuscola e anche il predicato;
I fatti possono avere 1, 2, 3, ….
più argomenti.
esempio 1
Diverse sono le domande che possiamo porre al programma
Prolog, ad esempio:
1. sapere se un utente con un numero telefonico esiste
nell’elenco;
2. sapere se un utente con una via esiste nell’elenco;
3. il numero telefonico di un utente conosciuto,
4. a chi corrisponde un determinato numero telefonico,
5. l’indirizzo di un determinato utente,
6. chi abita in un certo indirizzo,
7. il numero telefonico e l’indirizzo di un determinato utente,
8. l’utente ed il suo indirizzo, conoscendo il numero
telefonico.
esempio 1
esistono due modalità di interrogazione:
• di controllo: per verificare se un fatto è
compreso nella base di conoscenza;
• di ricerca: per ottenere delle informazioni
dalla base di conoscenza.
domande di controllo
• Se si domanda:
?- tel(andrea,12234).
Prolog risponde: “true”
• Se si domanda :
?- tel(andrea,45234).
Prolog risponde: “false”
domande di ricerca
• il numero telefonico di un utente conosciuto:
?-tel(anna, X).
Prolog risponde: X:256781 (Prolog ricerca nei fatti
un fatto che abbia come primo argomento “anna”
e assegna a X il valore del secondo argomento; X
è una variabile; la prima lettera di una variabile
deve essere in maiuscolo)
• a chi corrisponde un determinato numero
telefonico:
?-Tel(X, 233445).
Prolog risponde: X: Maria.
domande
Prendiamo in considerazione la domanda 7. Per conoscere il numero
telefonico e l’indirizzo di anna dobbiamo dapprima chiedere:
• ?-tel(anna, Numero_tel).
Prolog risponderà:
Numero_tel=256781,
• quindi dobbiamo chiedere:
?-indirizzo(anna, Via).
Prolog risponderà:
Via=tasso
Possiamo formulare una richiesta complessa formata dalle due domande:
?-tel(anna, Numero_tel),indirizzo(anna, Via).
Prolog cerca di soddisfare dapprima la prima domanda e poi la seconda,
solo se entrambe sono soddisfatte, viene presentato il risultato, nel nostro
caso:
Numero_tel = 256781,
Via = tasso
domande
Volendo conoscere l’elenco degli abbonati di via roma
con il relativo numero di telefono, possiamo formulare
al programma la seguente domanda:
?-tel(X,Num),indirizzo(X,roma).
Prolog restituirà:
X=Giorgio
Num=223344
X=Giorgio
Num= 283749.
Giorgio abita in via roma e ha due numeri telefonici.
istanziazione, unificazione
Prendiamo in considerazione la domanda 8. Per conoscere quale utente ha un
certo numero di telefono e dove abita, la domanda da formulare è la
seguente:
• tel(Persona, 455466), indirizzo(Persona, Via).
Prolog ricerca fra i fatti del predicato tel, quello che ha numero telefonico
455466 e quando lo incontra assegna il valore enrico alla variabile Persona
(istanziazione); quindi cerca di soddisfare la seconda domanda con un
fatto del predicato indirizzo che abbia come primo argomento l’attuale
valore di Persona, cioè enrico, quando lo trova assegna alla variabile Via il
valore tasso:
Persona = enrico
Via = marconi
In Prolog assegnare un valore ad una variabile si dice istanziare la variabile e
‘operazione di trovare un fatto uguale a un altro si chiama unificazione.
regole
Il Prolog non permette solamente di costruire programmi con una serie di fatti, ma
esiste la possibilità di ‘combinare’ fatti per formare regole.
Aggiungendo al programma la regola seguente:
abbonato(X, Num, Via):-indirizzo(X,Via),tel(X,Num).
esso diventa:
tel(giorgio,223344).
tel(maria,233445).
……………………………..
indirizzo(giorgio,roma).
indirizzo(maria,milano).
indirizzo(andrea,torino).
……………………………………..
abbonato(X, Num, Via):-indirizzo(X,Via),tel(X,Num).
Nella regola, ‘abbonato(X,Num,Via)’ rappresenta la testa e ‘indirizzo(X,Via),tel(X,Num)’,
il corpo. Quindi una regola è formata da un termine, chiamato testa della regola, dal
simbolo ‘:-‘ e da uno o più termini che costituiscono il corpo della regola.
Esempio 2
Stanze di un
appartamento
Esempio 2
(labirinto_0.pl)
Fatti:
porta(a,b).
porta(b,c).
porta(c,d).
porta(c,e).
porta(e,f).
Domande:
?-porta(a,b).
true
?porta(b,a).
false
Esempio 2
(labirinto_1.pl)
Si introducono due regole:
porta(a,b).
porta(b,c)
porta(c,d).
porta(c,e).
porta(e,f).
da(X,Y):-porta(X,Y).
da(X,Y):-porta(Y,X).
Domande:
da(b,a).
true
Esempio 2
• Stanze vicine: quando nel passaggio da una
all’altra si attraversa una sola stanza.
porta(a,b).
porta(b,c)
porta(c,d).
porta(c,e).
porta(e,f).
da(X,Y):-porta(X,Y).
da(X,Y):-porta(Y,X).
vicine(X,Y):-da(X,Z),da(Z,Y).
esempio 3
• Esempio: costruire una tabella di calciatori
delle squadre del campionato di serie A e
interrogare questa tabella. Lavorare a gruppi;
ciascun gruppo crea una tabella per una
squadra scelta.
M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
esempio 3
Inter, Marco Andreolli, Difensore
Inter, Cristian Ansaldi, Difensore
Inter, Danilo Ambrosio, Difensore
Inter, Joao Miranda de Souza Filho, Difensore
Inter, Jeison Murillo, Difensore
Inter, Yuto Nagatomo, Difensore
Inter, Trent Sainsbury, Difensore
Inter, Davide Santon, Difensore
Inter, Guy Yao, Difensore
Inter, Ever Banega, Centrocampista
Inter, Jonathan Biabiany, Centrocampista
Inter, Marcelo Brozovic, Centrocampista
Inter, Antonio Candreva, Centrocampista
Inter, Roberto Gagliardini, Centrocampista
Inter, Joao Mario, Centrocampista
Inter, Geoffrey Kondogbia, Centrocampista
Inter, Gary Medel, Centrocampista
Inter, Ivan Perisic, Centrocampista
Inter, Citadin Martins Éder, Attaccante
Inter, Gabriel Barbosa Almeida, Attaccante
Inter, Mauro Icardi, Attaccante
Inter, Rodrigo Sebastian Palacio, Attaccante
inter(andreolli, difensore)
inter (ansaldi, difensore)
inter (ambrosio, difensore)
inter (miranda, difensore)
inter(murillo, difensore)
inter(nagatomo, difensore)
inter(sainsbury, difensore )
inter (santon, difensore)
inter (yao, difensore)
inter(banega, centrocampista)
inter(biabiany, centrocampista)
inter(brozovic, centrocampista)
inter(candreva, centrocampista)
inter(gagliardini, centrocampista )
inter( joao_mario, centrocampista)
inter(kondogbia, centrocampista)
inter(medel, centrocampista)
inter(perisic, centrocampista)
inter(éder, attaccante)
inter(barbosa, attaccante)
inter(icardi, attaccante)
Inter(palacio, attaccante)
P
R
O
L
O
G
squadra, giocatore, ruolo
M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
esempio 3
Sono possibili richieste:
• inter(X, portiere) – risposta: handanovic (di ricerca)
• inter(eder, attaccante) - risposta: si (di controllo)
Con queste basi di conoscenza separate non è possibile
rispondere a domande tipo: “Quali sono tutti i portieri
del campionato di serie A?”. Ciascun gruppo vede la
propria squadra e non si ha una base di conoscenza
totale. Occorre costruire un nuovo modello che
raggruppi tutte le squadre e permetta di identificare
l’appartenenza dei giocatori alla propria squadra.
M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
esempio 3
inter(andreolli, difensore).
inter (ansaldi, difensore).
inter (ambrosio, difensore).
inter (miranda, difensore).
……………..
milan(lapadula, attaccante).
milan(donnarumma, portiere).
………..
torino(belotti, attaccante).
……………..
giocatore (inter, andreolli, difensore).
giocatore(inter, ansaldi, difensore).
giocatore(inter, ambrosio, difensore).
giocatore(inter, miranda, difensore).
……………..
giocatore(milan,lapadula, attaccante).
giocatore(milan,donnarumma, portiere).
……………………
giocatore(torino, belotti, attaccante).
……………..
Il nome della squadra da nome del predicato è divenuto argomento di un predicato più
generale.
M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
esempio 3
domanda: quali sono i portieri di serie A?
• ?-campionato(Squadra, Nome, portiere).
Risposta:
Squadra: inter
Nome: handanovic
Squadra: milan
Nome: donnarumma
Squadra: torino
Nome: hart
M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
un passo avanti
Analizzando meglio si nota che si possono individuare 3 insiemi (classi): giocatori,
squadre e ruoli; proviamo a scrivere la nostra conoscenza nel seguente modo:
giocatore(1,andreolli).
giocatore(2, ansaldi).
giocatore(3, ambrosio).
giocatore(4, miranda).
giocatore(5, lapadula).
giocatore(6, donnarumma).
giocatore(7, belotti).
squa(1,inter).
squa(2,milan).
squa(3,torino).
ruo(at, attaccante).
ruo(di, difensore).
ruo(ce, centrocampista).
ruo(po, portiere).
Ora però come si riesce a capire in quale squadra e con quale ruolo
gioca un calciatore?
un passo avanti
Possiamo creare un’altra serie di fatti che metta in relazione le tre classi
gio_squa_ruo(1, 1, di).
gio_squa_ruo(1, 2, di).
gio_squa_ruo(1, 3, di).
gio_squa_ruo(1, 4, di).
gio_squa_ruo(2, 5, at).
gio_squa_ruo(2, 6, po).
gio_squa_ruo(3, 7, at).
La prima riga indica:
squadra con codice 1 (inter),
giocatore con codice 1 (andreolli),
ruolo con codice di (difensore), in altri
termini: il difensore andreolli gioca
nell’inter
un passo avanti
(calcio_3.pl)
La regola:
• domanda(Squadra,Nome,Ruolo):-squa(X,Squadra),
giocatore(Y,Nome), ruo(Z,Ruolo), gio_squa_ruo(X,Y,Z).
• Permette di interrogare il pgm prolog per sapere:
– ruolo e squadra, dato il giocatore
– i giocatori con il rispettivo ruolo, data una squadra;
– i giocatori con la rispettiva squadra, dato un ruolo;
– l’elenco dei giocatori con squadra e ruolo
– …………………………….
un passo avanti
• Se si fa la seguente domanda:
?-domanda(Squadra, lapadula, Ruolo).
Prolog restituisce:
Squadra: milan
Ruolo: attaccante
Se si vuole sapere in quale squadra, e con quale ruolo, gioca miranda?
• Ulteriore materiale in http://www.didafor.com
Bibliografia
• Alessandri G., 2016, Didattica per il coding. Didattica, pensiero computazionale, corporeità, Aracne, Roma
• Alessandri G., 2014, Didattica e tecnologie: intersezioni. Complessità, coding, robotica educativa, Anicia,
Roma
• Alessandri G., 2013, Tecnologie autonome nella didattica. Verso la robotica educativa, Morlacchi, Perugia.
• Alessandri G., Paciaroni M., 2013, Appunti sull’uso ludico delle tecnologie, Morlacchi, Perugia.
• Alessandri G., 2008, Dal desktop a second life. Tecnologie nella didattica, Morlacchi, Perugia

More Related Content

What's hot

Tecnologie autonome nella didattica
Tecnologie autonome nella didatticaTecnologie autonome nella didattica
Tecnologie autonome nella didatticaAlessandri Giuseppe
 
Pensiero computazionale, cos'è e come formare gli studenti
Pensiero computazionale, cos'è e come formare gli studentiPensiero computazionale, cos'è e come formare gli studenti
Pensiero computazionale, cos'è e come formare gli studentiDomenico Barile
 
Didattica e tecnologie: intersezioni. Complessità, coding, robotica educativa
Didattica e tecnologie: intersezioni. Complessità, coding, robotica educativaDidattica e tecnologie: intersezioni. Complessità, coding, robotica educativa
Didattica e tecnologie: intersezioni. Complessità, coding, robotica educativaAlessandri Giuseppe
 
Code Week Come introdurre il pensiero computazionale nella didattica
Code Week Come introdurre il pensiero computazionale nella didatticaCode Week Come introdurre il pensiero computazionale nella didattica
Code Week Come introdurre il pensiero computazionale nella didatticaAntonella Carrozzini
 
Pensiero computazionale
Pensiero computazionalePensiero computazionale
Pensiero computazionaleMaria Cimino
 
Coding ... tra il reale e il virtuale
Coding ... tra il reale e il virtualeCoding ... tra il reale e il virtuale
Coding ... tra il reale e il virtualeMaria Messere
 
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2Michele Maffucci
 
Il pensiero Computazionale come risorsa trasversale
Il pensiero Computazionale come risorsa trasversaleIl pensiero Computazionale come risorsa trasversale
Il pensiero Computazionale come risorsa trasversaleLaura De Biaggi
 
Articolo di Sergio_Casiraghi e Stella_Emmanuele per BRICKS
Articolo di Sergio_Casiraghi e Stella_Emmanuele per BRICKSArticolo di Sergio_Casiraghi e Stella_Emmanuele per BRICKS
Articolo di Sergio_Casiraghi e Stella_Emmanuele per BRICKSChayn Italia
 
Competenze computazionali e robotiche
Competenze computazionali e roboticheCompetenze computazionali e robotiche
Competenze computazionali e roboticheLaura Antichi
 
Consegna 4 pensiero computazionale ad
Consegna 4   pensiero computazionale adConsegna 4   pensiero computazionale ad
Consegna 4 pensiero computazionale adGiulio Stringelli
 
Per una rifondazione (!?) delle tecnologie didattiche
Per una rifondazione (!?) delle tecnologie didattichePer una rifondazione (!?) delle tecnologie didattiche
Per una rifondazione (!?) delle tecnologie didatticheAlessandri Giuseppe
 

What's hot (20)

Tecnologie autonome nella didattica
Tecnologie autonome nella didatticaTecnologie autonome nella didattica
Tecnologie autonome nella didattica
 
Pensiero computazionale, cos'è e come formare gli studenti
Pensiero computazionale, cos'è e come formare gli studentiPensiero computazionale, cos'è e come formare gli studenti
Pensiero computazionale, cos'è e come formare gli studenti
 
Didattica e tecnologie: intersezioni. Complessità, coding, robotica educativa
Didattica e tecnologie: intersezioni. Complessità, coding, robotica educativaDidattica e tecnologie: intersezioni. Complessità, coding, robotica educativa
Didattica e tecnologie: intersezioni. Complessità, coding, robotica educativa
 
Code Week Come introdurre il pensiero computazionale nella didattica
Code Week Come introdurre il pensiero computazionale nella didatticaCode Week Come introdurre il pensiero computazionale nella didattica
Code Week Come introdurre il pensiero computazionale nella didattica
 
Didattica per coding capitolo 1
Didattica per coding capitolo 1Didattica per coding capitolo 1
Didattica per coding capitolo 1
 
Pensiero computazionale
Pensiero computazionalePensiero computazionale
Pensiero computazionale
 
I LIKE CODING ... AND YOU?
I LIKE CODING ... AND YOU?I LIKE CODING ... AND YOU?
I LIKE CODING ... AND YOU?
 
Coding ... tra il reale e il virtuale
Coding ... tra il reale e il virtualeCoding ... tra il reale e il virtuale
Coding ... tra il reale e il virtuale
 
Coding
CodingCoding
Coding
 
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
 
Campus La Camilla - Progetto Scratch
Campus La Camilla - Progetto Scratch Campus La Camilla - Progetto Scratch
Campus La Camilla - Progetto Scratch
 
Il pensiero Computazionale come risorsa trasversale
Il pensiero Computazionale come risorsa trasversaleIl pensiero Computazionale come risorsa trasversale
Il pensiero Computazionale come risorsa trasversale
 
Articolo di Sergio_Casiraghi e Stella_Emmanuele per BRICKS
Articolo di Sergio_Casiraghi e Stella_Emmanuele per BRICKSArticolo di Sergio_Casiraghi e Stella_Emmanuele per BRICKS
Articolo di Sergio_Casiraghi e Stella_Emmanuele per BRICKS
 
Pensiero computazionale
Pensiero computazionalePensiero computazionale
Pensiero computazionale
 
Competenze computazionali e robotiche
Competenze computazionali e roboticheCompetenze computazionali e robotiche
Competenze computazionali e robotiche
 
Introduzione al coding
Introduzione al coding Introduzione al coding
Introduzione al coding
 
Scratch 2.0 modulo didattico
Scratch 2.0   modulo didatticoScratch 2.0   modulo didattico
Scratch 2.0 modulo didattico
 
Consegna 4 pensiero computazionale ad
Consegna 4   pensiero computazionale adConsegna 4   pensiero computazionale ad
Consegna 4 pensiero computazionale ad
 
Scratch in classe
Scratch in classeScratch in classe
Scratch in classe
 
Per una rifondazione (!?) delle tecnologie didattiche
Per una rifondazione (!?) delle tecnologie didattichePer una rifondazione (!?) delle tecnologie didattiche
Per una rifondazione (!?) delle tecnologie didattiche
 

Similar to Coding, pattern e pensiero computazionale

Computational thinking - Il pensiero computazionale
Computational thinking - Il pensiero computazionaleComputational thinking - Il pensiero computazionale
Computational thinking - Il pensiero computazionaleRaffaele Micelotta
 
Presentazione della Codeweek
Presentazione della Codeweek Presentazione della Codeweek
Presentazione della Codeweek Piero Pavanini
 
Progettazione, complessità, tecnologie
Progettazione, complessità, tecnologieProgettazione, complessità, tecnologie
Progettazione, complessità, tecnologiePier Giuseppe
 
coding_competenze_computazionali.pdf
coding_competenze_computazionali.pdfcoding_competenze_computazionali.pdf
coding_competenze_computazionali.pdfLaura Antichi
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming LanguagePasquale Paola
 
Ambienti software per l'apprendimento in rete
Ambienti software per l'apprendimento in reteAmbienti software per l'apprendimento in rete
Ambienti software per l'apprendimento in reteCaterina Policaro
 
Introduzione al coding
Introduzione al codingIntroduzione al coding
Introduzione al codingPaolo Righetto
 
Progetto di Ergonomia Cognitiva: Decathlon +Plus
Progetto di Ergonomia Cognitiva: Decathlon +PlusProgetto di Ergonomia Cognitiva: Decathlon +Plus
Progetto di Ergonomia Cognitiva: Decathlon +PlusJessica Forlani
 
Laboratorio Web Journalism | 17 dicembre 2010
Laboratorio Web Journalism | 17 dicembre 2010Laboratorio Web Journalism | 17 dicembre 2010
Laboratorio Web Journalism | 17 dicembre 2010Macsis
 
Ldb staisinergico longo_patera_report
Ldb staisinergico longo_patera_reportLdb staisinergico longo_patera_report
Ldb staisinergico longo_patera_reportlaboratoridalbasso
 
Ldb staisinergico longo_patera_report
Ldb staisinergico longo_patera_reportLdb staisinergico longo_patera_report
Ldb staisinergico longo_patera_reportlaboratoridalbasso
 
Il pensiero computazionale
Il pensiero computazionaleIl pensiero computazionale
Il pensiero computazionaleLivio Lucia
 
E-learning per aziende e organizzazioni
E-learning per aziende e organizzazioniE-learning per aziende e organizzazioni
E-learning per aziende e organizzazioniWallaMe Ltd.
 

Similar to Coding, pattern e pensiero computazionale (20)

Computational thinking - Il pensiero computazionale
Computational thinking - Il pensiero computazionaleComputational thinking - Il pensiero computazionale
Computational thinking - Il pensiero computazionale
 
Presentazione della Codeweek
Presentazione della Codeweek Presentazione della Codeweek
Presentazione della Codeweek
 
Progettazione, complessità, tecnologie
Progettazione, complessità, tecnologieProgettazione, complessità, tecnologie
Progettazione, complessità, tecnologie
 
coding_competenze_computazionali.pdf
coding_competenze_computazionali.pdfcoding_competenze_computazionali.pdf
coding_competenze_computazionali.pdf
 
Tecnologie e didattica
Tecnologie e didatticaTecnologie e didattica
Tecnologie e didattica
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming Language
 
Ambienti software per l'apprendimento in rete
Ambienti software per l'apprendimento in reteAmbienti software per l'apprendimento in rete
Ambienti software per l'apprendimento in rete
 
Introduzione al coding
Introduzione al codingIntroduzione al coding
Introduzione al coding
 
Progetto di Ergonomia Cognitiva: Decathlon +Plus
Progetto di Ergonomia Cognitiva: Decathlon +PlusProgetto di Ergonomia Cognitiva: Decathlon +Plus
Progetto di Ergonomia Cognitiva: Decathlon +Plus
 
Laboratorio Web Journalism | 17 dicembre 2010
Laboratorio Web Journalism | 17 dicembre 2010Laboratorio Web Journalism | 17 dicembre 2010
Laboratorio Web Journalism | 17 dicembre 2010
 
Progetto Euridice
Progetto EuridiceProgetto Euridice
Progetto Euridice
 
Struttura del corso
Struttura del corsoStruttura del corso
Struttura del corso
 
Progetto e learnig
Progetto e learnigProgetto e learnig
Progetto e learnig
 
Modelli didattici 2
Modelli didattici 2Modelli didattici 2
Modelli didattici 2
 
Ldb staisinergico longo_patera_report
Ldb staisinergico longo_patera_reportLdb staisinergico longo_patera_report
Ldb staisinergico longo_patera_report
 
Ldb staisinergico longo_patera_report
Ldb staisinergico longo_patera_reportLdb staisinergico longo_patera_report
Ldb staisinergico longo_patera_report
 
Il pensiero computazionale
Il pensiero computazionaleIl pensiero computazionale
Il pensiero computazionale
 
E-learning per aziende e organizzazioni
E-learning per aziende e organizzazioniE-learning per aziende e organizzazioni
E-learning per aziende e organizzazioni
 
info-learn
info-learninfo-learn
info-learn
 
Lezione 09/2006
Lezione 09/2006Lezione 09/2006
Lezione 09/2006
 

More from Alessandri Giuseppe

Robotica educativa la robotica da strumento di fantasia a strumento per la fa...
Robotica educativa la robotica da strumento di fantasia a strumento per la fa...Robotica educativa la robotica da strumento di fantasia a strumento per la fa...
Robotica educativa la robotica da strumento di fantasia a strumento per la fa...Alessandri Giuseppe
 
Progettazione e intelligenza artificiale
Progettazione e intelligenza artificialeProgettazione e intelligenza artificiale
Progettazione e intelligenza artificialeAlessandri Giuseppe
 
Da un click esplorativo a un click riflessivo - verso uno slow learning
Da un click esplorativo a un click riflessivo - verso uno slow learningDa un click esplorativo a un click riflessivo - verso uno slow learning
Da un click esplorativo a un click riflessivo - verso uno slow learningAlessandri Giuseppe
 
Costruire applicazioni e formazione
Costruire applicazioni e formazioneCostruire applicazioni e formazione
Costruire applicazioni e formazioneAlessandri Giuseppe
 
Approccio lettore e autore alle tecnologie. Verso uno slow learning - l’esemp...
Approccio lettore e autore alle tecnologie. Verso uno slow learning - l’esemp...Approccio lettore e autore alle tecnologie. Verso uno slow learning - l’esemp...
Approccio lettore e autore alle tecnologie. Verso uno slow learning - l’esemp...Alessandri Giuseppe
 
Scuola digitale, nativi digitali, didattica digitale: esistono??
Scuola digitale, nativi digitali, didattica digitale: esistono?? Scuola digitale, nativi digitali, didattica digitale: esistono??
Scuola digitale, nativi digitali, didattica digitale: esistono?? Alessandri Giuseppe
 
Educational Robotics Between Narration and Simulation
Educational Robotics Between Narration and SimulationEducational Robotics Between Narration and Simulation
Educational Robotics Between Narration and SimulationAlessandri Giuseppe
 
Le nuove tecnologie sono nuove? MOOC e Illich
Le nuove tecnologie sono nuove? MOOC e IllichLe nuove tecnologie sono nuove? MOOC e Illich
Le nuove tecnologie sono nuove? MOOC e IllichAlessandri Giuseppe
 
Le nuove tecnologie sono nuove? Il caso della Realtà aumentata
Le nuove tecnologie sono nuove? Il caso della Realtà aumentataLe nuove tecnologie sono nuove? Il caso della Realtà aumentata
Le nuove tecnologie sono nuove? Il caso della Realtà aumentataAlessandri Giuseppe
 
Realtà virtuale, realtà aumentata
Realtà virtuale, realtà aumentataRealtà virtuale, realtà aumentata
Realtà virtuale, realtà aumentataAlessandri Giuseppe
 
Dal desktop a second life. Tecnologie nella didattica
Dal desktop a second life. Tecnologie nella didatticaDal desktop a second life. Tecnologie nella didattica
Dal desktop a second life. Tecnologie nella didatticaAlessandri Giuseppe
 

More from Alessandri Giuseppe (20)

Robotica educativa la robotica da strumento di fantasia a strumento per la fa...
Robotica educativa la robotica da strumento di fantasia a strumento per la fa...Robotica educativa la robotica da strumento di fantasia a strumento per la fa...
Robotica educativa la robotica da strumento di fantasia a strumento per la fa...
 
La cocolla - Macerata
La cocolla - MacerataLa cocolla - Macerata
La cocolla - Macerata
 
Progettazione e intelligenza artificiale
Progettazione e intelligenza artificialeProgettazione e intelligenza artificiale
Progettazione e intelligenza artificiale
 
Un nuovo digital_divide
Un nuovo digital_divideUn nuovo digital_divide
Un nuovo digital_divide
 
Didattica deliberativa reattiva
Didattica deliberativa reattivaDidattica deliberativa reattiva
Didattica deliberativa reattiva
 
Da un click esplorativo a un click riflessivo - verso uno slow learning
Da un click esplorativo a un click riflessivo - verso uno slow learningDa un click esplorativo a un click riflessivo - verso uno slow learning
Da un click esplorativo a un click riflessivo - verso uno slow learning
 
Costruire applicazioni e formazione
Costruire applicazioni e formazioneCostruire applicazioni e formazione
Costruire applicazioni e formazione
 
Approccio lettore e autore alle tecnologie. Verso uno slow learning - l’esemp...
Approccio lettore e autore alle tecnologie. Verso uno slow learning - l’esemp...Approccio lettore e autore alle tecnologie. Verso uno slow learning - l’esemp...
Approccio lettore e autore alle tecnologie. Verso uno slow learning - l’esemp...
 
Costruire curricolo
Costruire curricoloCostruire curricolo
Costruire curricolo
 
Competenze
CompetenzeCompetenze
Competenze
 
Introduzione curricolo
Introduzione curricoloIntroduzione curricolo
Introduzione curricolo
 
Scuola digitale, nativi digitali, didattica digitale: esistono??
Scuola digitale, nativi digitali, didattica digitale: esistono?? Scuola digitale, nativi digitali, didattica digitale: esistono??
Scuola digitale, nativi digitali, didattica digitale: esistono??
 
Didattiche e modelli
Didattiche e modelliDidattiche e modelli
Didattiche e modelli
 
Un nuovo digital divide
Un nuovo digital divideUn nuovo digital divide
Un nuovo digital divide
 
Progettazione
Progettazione Progettazione
Progettazione
 
Educational Robotics Between Narration and Simulation
Educational Robotics Between Narration and SimulationEducational Robotics Between Narration and Simulation
Educational Robotics Between Narration and Simulation
 
Le nuove tecnologie sono nuove? MOOC e Illich
Le nuove tecnologie sono nuove? MOOC e IllichLe nuove tecnologie sono nuove? MOOC e Illich
Le nuove tecnologie sono nuove? MOOC e Illich
 
Le nuove tecnologie sono nuove? Il caso della Realtà aumentata
Le nuove tecnologie sono nuove? Il caso della Realtà aumentataLe nuove tecnologie sono nuove? Il caso della Realtà aumentata
Le nuove tecnologie sono nuove? Il caso della Realtà aumentata
 
Realtà virtuale, realtà aumentata
Realtà virtuale, realtà aumentataRealtà virtuale, realtà aumentata
Realtà virtuale, realtà aumentata
 
Dal desktop a second life. Tecnologie nella didattica
Dal desktop a second life. Tecnologie nella didatticaDal desktop a second life. Tecnologie nella didattica
Dal desktop a second life. Tecnologie nella didattica
 

Recently uploaded

XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 

Recently uploaded (8)

XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 

Coding, pattern e pensiero computazionale

  • 1. coding, pattern e pensiero computazionale Giuseppe Alessandri PNSD – Tolentino 2017
  • 2. indice • Tecnologie • Tecnologie e didattica • Approcci imperativo e a eventi al coding e – pattern monoagente-deliberativo – pattern multiagente-deliberativo – pattern monoagente-reattivo – pattern multiagente-reattivo • Scratch junior • Pensiero computazionale e algoritmi • Narrazione e Pensiero computazionale • Approccio dichiarativo al coding: Prolog
  • 3. una definizione (B. Arthur) “La tecnologia è un mezzo per soddisfare uno scopo umano. […] In quanto ‘mezzo’, la tecnologia può essere un apparecchio fisico (un motore diesel, un frigorifero), un processo (un processo di filtrazione nell’ingegneria chimica o il processo risolutivo per una equazione di secondo grado, eventualmente codificato in algoritmo), un metodo (il metodo adottato per lo sviluppo di un algoritmo per il riconoscimento vocale, la modalità di progettazione didattica, ..). […]; può essere materiale […] oppure immateriale […]. Comunque è sempre un mezzo creato per soddisfare un fine umano”. Cos’è la tecnologia (Arthur) Alessandri G., Tecnologie autonome nella didattica, verso la robotica educativa, Morlacchi, Perugia, 2013
  • 4. Spesso le tre tipologie si integrano: • un processo sviluppato con un determinato metodo; • un processo che ha bisogno di un apparecchio per essere eseguito (un algoritmo); • un processo, sviluppato con un certo metodo, che si realizza con un determinato apparecchio (ancora il caso di un algoritmo). Cos’è la tecnologia (Arthur)
  • 5. Tecnologie e didattica • Il senso del loro utilizzo oscilla in un continuo che va da forme di sostegno alle varie discipline, facilitandone e migliorandone l’apprendimento, ad approcci che accentuano il carattere di autonomia delle stesse tecnologie
  • 6. Tecnologie e didattica Tecnologie di sostegno possono suddividersi in tecnologie per presentare e tecnologie per facilitare. • La caratteristica fondamentale delle prime è la presenza di un elemento essenziale quale il video, attraverso il quale l’utente riceve informazioni, ma può anche presentarne; un esempio è il web. • Nel web di oggi possiamo individuare i siti vetrina (è prevalente la presentazione) e siti officina (è prevalente la discussione, la collaborazione, la costruzione). Esempi dei primi sono i siti degli utenti e, fra questi, quelli di forte concentrazione informativa come i portali. Esempi del secondo caso sono i siti per le comunità (di aiuto, di discussone, di pratica, …), siti per la formazione, applicazioni del web 2.0.
  • 7. Tecnologie e didattica • Tecnologie per facilitare. Sono tecnologie che si pongono fra lo studente che apprende e l’oggetto di studio per facilitare il processo di apprendimento introducendo delle rappresentazioni che possano aiutare nella comprensione. Un esempio di tale tecnologia è la simulazione che può essere considerata una ricostruzione di qualche segmento della realtà rappresentandone un modello nella forma e una riproduzione delle funzionalità. Il tentativo è quello di far conoscere parti del mondo ricreandoli, in modo artificiale, e dando all’utilizzatore la possibilità di interagire con gli aspetti che sono riprodotti, e osservando le conseguenze delle azioni frutto delle decisioni prese. • Altri due esempi sono i DGS (Dynamic Geometry Software; es. Geogebra) e i CAS (Computer Algebra System); entrambi si riferiscono all’insegnamento della Matematica.
  • 8. Tecnologie e didattica • Tecnologie autonome. Sono quelle che permettono di sviluppare esperienze che altrimenti non sarebbe possibile svolgere. Il loro valore non sta nel presentare, nel miglior modo possibile, la fruizione di mondi fittizi che realizzino il reale attraverso il digitale, ma nel costruire questi mondi che possono essere realizzati attraverso propri linguaggi e regole di queste tecnologie. Esse disegnano percorsi di apprendimento consapevole nei domini che sono loro tipici e propongono metodologie di lavoro attive e autonome. • Le pratiche didattiche che si possono realizzare mediante tali tecnologie delineano: – approcci maggiormente orientati alla soluzione di problemi; – l’assimilazione di metodologie di lavoro in grado di migliorare la significatività del processo di apprendimento (attraverso la realizzazione di artefatti)
  • 9. Tecnologie e didattica I tratti fondamentali dell’autonomia sono rintracciabili: • in una maggiore sovranità rispetto alla lezione del docente; non sono, cioè, al servizio di un itinerario già tracciato; non sono pacchetti chiusi, o anche simulazioni già fatte, ma sono strumenti che gli studenti possono utilizzare per costruire conoscenze nei diversi settori disciplinari; essi sperimentano e scoprono e formalizzano leggi dai loro esperimenti; • in un metodo di lavoro che privilegia l’azione; • nella necessità di utilizzare un loro linguaggio.
  • 10. Le tecnologie autonome si sostanziano nel pensiero computazionale e nel coding Come visto nella mappa del pensiero computazionale, possiamo individuare diversi approcci nella programmazione; in questo contesto ci si riferisce a quello imperativo e a quello a eventi e, successivamente, a quello dichiarativo
  • 12. • In via prioritaria è bene conoscere il significato di modello e, in particolare, i formalismi più comuni per la sua rappresentazione (nel nostro caso i linguaggi grafici e i linguaggi di programmazione).
  • 13. Si possono individuare quattro modalità di costruzione dei programmi: monoagente, multiagente, deliberativa e reattiva: • modalità monoagente: si riferisce a realizzazioni che si sviluppano con una sola programmazione; l’applicazione risiede in un unico nodo elaborativo che vive in un solo agente; • modalità multiagente: le applicazioni risiedono su più nodi elaborativi (elaborazione distribuita) e vivono in più agenti; si hanno, cioè, diverse programmazioni che svolgono operazioni differenti nell’ambito di una macro–applicazione; • modalità deliberativa: indica la possibilità di sviluppare una applicazione attraverso una programmazione predeterminata, rispettata passo dopo passo, isolata rispetto all’ambiente circostante; • modalità reattiva: in una applicazione è possibile interagire con l’ambiente della stessa e con l’esterno; gli eventuali agenti possono interagire fra di loro. Il suo sviluppo non è rigidamente predeterminato, ma può tener conto delle interazioni che si sviluppano.
  • 14. • Sistemando le quattro modalità sui vertici di un diagramma si hanno quattro poli: deliberativo, reattivo, monoagente, multiagente; di conseguenza è possibile avere quattro combinazioni che rappresentano quattro pattern di riferimento per realizzare applicazioni: monoagente-deliberativo (imperativo) (a), multiagente-deliberativo (imperativo) (b), monoagente-reattivo (a eventi) (d), multiagente- reattivo (a eventi) (c) .
  • 15.
  • 16. • Nel quadrante a (pattern monoagente–deliberativo) si ha una unica programmazione che impone all’unico agente dei comportamenti prestabiliti e dettati dall’applicazione; questa non prevede interazione con l’ambiente e con l’esterno; • nel quadrante b (pattern multiagente–deliberativo) si individuano applicazioni con più agenti guidati da programmazioni che non permettono interazioni fra agenti, con l’ambiente e con il mondo esterno. • nel quadrante d (pattern monoagente–reattivo) le applicazioni sono costruite intorno a un unico agente che può interagire con l’ambiente e con il mondo esterno; • nel quadrante c (pattern decentralizzato–reattivo) si hanno più agenti; ciascuno, con la propria programmazione, può interagire con gli altri, con l’ambiente e con l’esterno.
  • 17. Molteplici sono gli ambienti per la composizione di programmi ed è possibile individuare una distinzione: • fra quelli che permettono la scrittura del codice in un ambiente testuale • e quelli che mettono a disposizione un ambiente dove inserire le istruzioni del linguaggio (in genere prelevabili da elenchi già predisposti) e vicino un ambiente grafico ove vivono gli agenti dell’applicazione. Oggi, generalmente, le applicazioni, sviluppate secondo i dettami di uno qualunque dei pattern presentati in precedenza, vivono in ambienti del secondo tipo. Nelle figure seguenti sono riportati quelli di Scratch e di Snap!
  • 19. Snap!
  • 20. Dall’analisi al programma Dall’analisi al programma: percorso che porta dalla individuazione e formulazione di un problema alla scrittura del programma relativo. • Definiamo come programma un insieme di istruzioni e dati, finalizzato a dei compiti ben precisi e delimitati. Il programma viene costruito dall’uomo e viene eseguito dal computer e, perciò, deve essere scritto utilizzando un linguaggio che l’elaboratore comprende. Per linguaggio di programmazione intendiamo un insieme di istruzioni e di regole che definiscono le modalità con le quali le stesse istruzioni ed i dati possono essere inseriti in un programma. • I passi fondamentale del percorso sono: a) analisi: -individuazione dei dati sui quali il programma deve “lavorare”; -individuazione del procedimento risolutivo, che generalmente prevede un frazionamento, per passi successivi, del programma in parti via via più semplici; b) costruzione del programma e relativa codifica utilizzando un linguaggio di programmazione; c) prove del programma, individuazione degli errori; d) feed back.
  • 21. Nel prosieguo vengono presentati i quattro pattern: monoagente-deliberativo, multiagente-deliberativo, monoagente- reattivo, multiagente-reattivo. Nell’insieme rappresentano un percorso che il docente potrebbe seguire nel proprio itinerario di alfabetizzazione sul pens. comp. e sul coding.
  • 22. • Non vuole essere un itinerario da proporre immediatamente in aula con gli studenti, in special modo per quelli della primaria ma, anche, della secondaria di primo grado. • Per costoro è meglio iniziare con un approccio più light che preveda direttamente un impatto con il linguaggio (preferibilmente Scratch) impostando semplici programmi e procedendo per prove ed errori.
  • 23. • Tuttavia il docente deve essere consapevole che il suo punto di arrivo dovrà essere l’aver “convinto” i propri studenti che occorra, dapprima, analizzare il problema, sviluppare un bozza di modello risolutivo (attraverso opportuni diagrammi, come si vedrà), individuare il pattern che pensa possa essere idoneo e quindi passare alla stesura del programma.
  • 24. pattern • pattern monoagente-deliberativo • pattern multiagente-deliberativo • pattern monoagente-reattivo • pattern multiagente-reattivo
  • 25. pattern monoagente–deliberativo • Il primo passo del percorso è rappresentato dall’analisi del problema che si sviluppa attraverso l’individuazione dei dati con i quali operare ed il relativo procedimento risolutivo. I dati possono essere iniziali, cioè conosciuti e consegnati in ingresso al programma, dati creati dal procedimento e dati in uscita. Il procedimento può consistere in una scomposizione del problema in parti secondo il metodo top down. Il problema viene suddiviso in sottoproblemi, i quali possono anch’essi essere frazionati ulteriormente in altri sottoproblemi;
  • 26. pattern monoagente–deliberativo • il procedimento avanza fino alla individuazione di parti non più scomponibili. Queste sono i nuclei essenziali dello sviluppo del programma; sono, in genere, chiamate procedure. Si passa, quindi, allo sviluppo delle stesse utilizzando opportuni formalismi, ad esempio pseudo– codifica o diagramma a blocchi; successivamente si assembla il tutto nel procedimento finale, lo si traduce nel codice del linguaggio utilizzato, lo si esegue all’elaboratore. Spesso si evita il passaggio della scrittura in pseudo–codifica (o diagramma a blocchi) e si scrivono le procedure direttamente nel linguaggio di programmazione scelto.
  • 27. • Quindi il procedimento si sviluppa, attraverso raffinamenti successivi, da una struttura generale del problema alla formulazione finale del programma che verrà fatto eseguire dall’elaboratore. La progettazione nasce da prime ipotesi risolutive e si sviluppa lungo successivi momenti nei quali si progettano nuovi itinerari. La progettazione termina alla fine della sua attuazione. • Il procedimento di analisi si articola attraverso le strutture di sequenza, confronto, ripetizione. • Esistono diversi strumenti per formalizzare il procedimento di analisi; presentiamo qui i diagrammi di Jackson.
  • 28. pattern monoagente–deliberativo sequenza Si legge “x è una sequenza di a, b, c”
  • 29. pattern monoagente–deliberativo confronto Si legge: “x è a se vale cond 1, x è c se vale cond 2”.
  • 30. pattern monoagente–deliberativo ripetizione Si legge “x è una ripetizione di b, per n volte”
  • 31. pattern monoagente–deliberativo • Attraverso corrette combinazioni di tali strutture è possibile sviluppare procedimenti risolutivi. x è una sequenza — di a, che è una sequenza di m e n, — di b, che è una ripetizione di z per 5 volte, — di c, che è w se vale c1, y se vale c2.
  • 32. pattern monoagente–deliberativo • Tale diagramma si legge dall’alto verso il basso e da sinistra verso destra; m, n, z, w, y rappresentano procedure. • Una volta giunti a questo livello di rappresentazione del problema, si sviluppano le varie procedure nella forma di una pseudo–codifica o di un diagramma a blocchi e, quindi, si codificano le istruzioni secondo il linguaggio scelto; si ‘passa’ poi il programma codificato all’elaboratore che provvederà a eseguirlo. • Realizziamo ora due applicazioni seguendo il procedimento sopra delineato: • a) costruire una casa senza finestre (Esempio 1). • b) costruire una casa con finestre (Esempio 2).
  • 33. pattern monoagente–deliberativo Esempio 1: costruire una casa senza finestre con il corpo di 100 punti di lato ed il tetto di 120 punti. Si disegni su carta il seguente schema: Analizzando si può vedere che per rappresentare una casa occorre costruire una facciata e un tetto; la facciata è un quadrato e il tetto un triangolo; quindi il problema è scomponibile in due procedure: facciata, tetto. Con i diagrammi di Jackson: A questo punto si realizzano le varie procedure scrivendo il relativo codice in pseudo– codifica e quindi in Snap!, Scratch.
  • 34. pattern monoagente–deliberativo Esempio 2: costruire una casa con finestre. Si disegni su carta il seguente schema: Analizzando si può vedere che per rappresentare una casa si possono utilizzare un quadrato ed un triangolo (che costituiscono, nell’insieme, la casa senza finestre), due quadrati per le finestre ed un rettangolo come porta di ingresso. Ma la casa senza finestre è stata già costruita e la relativa procedura è disponibile, quindi:
  • 35. pattern monoagente–deliberativo Possiamo scrivere una versione equivalente del diagramma precedente, costruendo una procedura finestre, che contiene, al suo interno, le due procedure finestra:
  • 36. pattern monoagente–deliberativo Come esempio di utilizzo di una pseudo–codifica e dei diagrammi a blocchi, sviluppiamo la procedura quadrato, che rappresenta il corpo della casa. inizio avanti 100 destra 90 avanti 100 destra 90 avanti 100 destra 90 avanti 100 destra 90 fine
  • 37. Ottimizzato inizio ripeti 4 volte avanti 100 destra 90 fine Fine (struttura di ripetizione) inizio ripeti 4 volte avanti 100 destra 90 fine
  • 38. Esempio di struttura di controllo; in base al valore di un numero si costruisce una casa con o senza finestre
  • 39. Esempio di struttura di ripetizione; si deve ripetere il procedimento precedente per dieci volte; per ogni ciclo, in base al valore di un numero, si costruisce una casa con o senza finestre ripeti # 10 volte acq. numero
  • 40. Area SPRITE STAGE Area SCRIPT Area ISTRUZIONI Snap! (Sito ufficiale di Snap) Snap! È la versione 4.0 di BYOD (Build Your Own Blocks).
  • 41. • Per fare la prima conoscenza di Snap! Si utilizza il programma per la realizzazione della casa senza finestre; dapprima senza procedure e poi con procedure. • Manuale Snap! • Negli esempi seguenti, per vedere il codice Snap! occorre un click sul simbolo in alto a destra
  • 44. pattern multiagente-deliberativo • Si parla di pattern multiagente quando le applicazioni risiedono su più nodi elaborativi (elaborazione distribuita). Le programmazioni possono esplicitarsi nelle azioni di agenti che agiscono in un apposito ambiente e hanno, teoricamente, la possibilità di interagire fra loro, con l’ambiente e con l’esterno; tuttavia in questo caso (pattern multiagente- deliberativo) tutto ciò è impedito in quanto sono deliberatamente guidati nella loro vita “di comunità”. Il deliberare i loro comportamenti significa che i loro movimenti, le loro azioni sono etero-dirette dall’utente attraverso le programmazioni che ha associato ad essi.
  • 46. pattern multiagente-deliberativo • Riprendendo l’esempio precedente (costruzione di una casa), possiamo implementare la costruzione del portone e demandarlo a un secondo sprite; è possibile ipotizzare una distribuzione dei compiti fra diversi agenti, invece nella situazione già analizzata esisteva un unico agente con un’unica programmazione. • Con una soluzione decentralizzata, è possibile impostare un procedimento che preveda un agente che costruisce la facciata ed il tetto della casa, un secondo che si interessa della costruzione del portone (e, volendo, un terzo che modella le finestre). È ovvio che si potrebbe operare in altri modi, impegnando un numero diverso di agenti e assegnando loro compiti diversi.
  • 47. Snap! 1° sprite disegna la facciata e il tetto 2° sprite disegna il portone multi_deliberativo_1
  • 48. pattern monoagente-reattivo • Il pattern monoagente-reattivo introduce al modo di costruire applicazioni di coding secondo una programmazione orientata agli eventi. Si ha un unico nodo elaborativo, tuttavia la programmazione si sviluppa in interazione con l’ambiente circostante (interno ed esterno). L’applicazione si esplicita nelle azioni di un agente che non vive in una bolla isolata, ma interagisce con l’ambiente interno ed esterno.
  • 50. pattern monoagente-reattivo • Un programma in Snap!, generalmente, si sviluppa attraverso la vita di diversi agenti chiamati sprite, a ciascuno dei quali è possibile associare più script (insieme di istruzioni dedicato a compiti specifici). Per simulare il pattern che stiamo analizzando, tuttavia, dobbiamo limitarci alla gestione di un solo sprite che interagisce con l’ambiente nel quale vive. Ciascuno script ha un hat block in testa che stabilisce quando deve essere eseguito. L’hat block dà l’avvio all’evento rappresentato dalla sequenza delle successive istruzioni (blocchi). Generalmente il nome di un hat block inizia con la parola “quando”. Nei precedenti esempi abbiamo sorvolato sull’uso dell’hat block per non introdurre elementi di “reattività” in contesti deliberativi; si ricordi, comunque, che tale blocco è indispensabile.
  • 51. pattern monoagente-reattivo • In genere uno script inizia con un blocco hat con la parola quando (when) e l’azione che lo avvia, a indicare quando deve andare in esecuzione. Fino ad ora abbiamo utilizzato l’hat block in questo caso quando si clicca sulla bandiera verde, in alto a destra nell’interfaccia di Snap! si avviano gli script che fanno iniziare ad agire gli sprite (nel caso multiagente, altrimenti un solo sprite).
  • 52. pattern monoagente-reattivo Nell’esempio seguente, abbiamo quattro script; quello con: • hat block “quando si clicca su bandiera verde”, permette l’avvio del programma e fa spostare lo sprite al punto di coordinate 0,0; • hat block “quando si preme il tasto spazio”, fa avanzare lo sprite di dieci passi (punti) sullo schermo (tenendo premuto la barra spazio, lo sprite si muove costantemente in avanti); • hat block “quando si preme il tasto freccia su” lo sprite ruota di 90 gradi verso sinistra; • hat block “quando si preme il tasto freccia giù”, lo sprite ruota di 90 gradi verso destra.
  • 54. pattern monoagente-reattivo • Ovviamente i singoli script possono avere una struttura più complessa; ad esempio nell’evento collegato alla pressione della barra spazio, nella figura seguente, si impone allo sprite di tornare indietro di dieci passi (punti) se si incontra il bordo della finestra dove si sviluppa il programma.
  • 56. pattern monoagente-reattivo Differenza fra pattern deliberativo e pattern reattivo nel caso di uno sprite che deve attraversare il seguente labirinto
  • 57. pattern monoagente-reattivo • Approccio deliberativo: l’applicazione non sviluppa alcuna interazione con l’ambiente, escludendo quella per l’avvio, e si sviluppa facendo procedere allo sprite un percorso predeterminato da rilevazioni di distanze, effettuate in fase di costruzione dello script, e riversate nelle istruzioni dello stesso.
  • 58. pattern monoagente-reattivo Approccio reattivo • L’applicazione (figura seguente), si sviluppa attraverso quattro script che gestiscono quattro eventi che permettono: • l’avvio con il posizionamento iniziale dello sprite; • la pressione sulle frecce, a destra e a sinistra, per far ruotare lo sprite, a destra o a sinistra, di cinque gradi (tenendo premuta la freccia a lungo si potrà far ruotare lo sprite dell’angolo che si vuole); • il movimento dello sprite lungo il percorso: quando lo sprite tocca il colore nero, torna indietro di 20 passi, quindi l’utente dovrà farlo ruotare in modo opportuno a destra o a sinistra; quando lo sprite incontra il bordo (a fine itinerario) viene ricollocato nella posizione iniziale.
  • 59. Approccio reattivo Snap!(mono_reattivo_3) l’essere reattivo dello sprite è evidenziato nei momenti di contatto con il bordo nero della pista e con il bordo dell’ambiente nel quale agisce e di risposta alle azioni dell’utente.
  • 61.
  • 62. pattern multiagente-reattivo • Diversamente dal precedente, il pattern decentralizzato-reattivo individua animazioni nelle quali possono vivere più sprite/agenti e permette interazioni fra loro e con gli ambienti esterno e interno. • Tutto ciò permette, indifferentemente, un agire autonomo e indipendente dall’azione degli altri sprite, oppure una collaborazione fra essi.
  • 63. Snap!(multi_reattivo_1) • Nella seguente applicazione (Figura 6.2) vivono due sprite, chiamati “sprite1” e “sprite2”, che non interagiscono fra loro, ma solo con l’ambiente interno (il bordo).
  • 64. Snap!(multi_reattivo_2) • È possibile farli interagire fra loro e con l’ambiente interno (il bordo).
  • 65. pattern multiagente-reattivo • Altresì, è possibile far cooperare i due sprite sulla scena del racconto di una storia, di un gioco, di una simulazione. Uno sprite potrebbe invitare un altro a eseguire delle azioni. In una storia potrebbero costruire un dialogo, alternandosi in modo sincronizzato. È possibile realizzare una sincronizzazione inserendo i messaggi di uno sprite in una sequenza temporale e quelli dell’altro in un’altra sequenza che non si sovrapponga alla prima e, nell’insieme, le due sequenze restituiscano un colloquio corretto fra i due protagonisti. Tuttavia esiste una diversa modalità che prevede che i due sprite si passino la parola (figura seguente)
  • 67. pattern multiagente-reattivo • L’esecuzione degli script avviene, secondo la numerazione visualizzata in figura 6.4, attraverso lo scambio dei seguenti “ciao”, “come”, “dove”. In particolare: • l’esecuzione si avvia con un click sulla bandiera verde che lancia lo script n.1 del primo sprite (sprite1), che – visualizza, sul video “Ciao, io sono Michele, tu chi sei?”, per 3 secondi; – quindi invia a tutti gli sprite il messaggio “ciao” tramite il blocco di broadcast “invia a tutti ciao e attendi”; • il messaggio viene ricevuto solo dal secondo sprite (sprite2) attraverso lo script n. 2, che – visualizza sul video “Ciao io sono Anna; come stai, che fai?” , per 3 secondi; – quindi invia a tutti il messaggio “come”; • il messaggio viene ricevuto dal primo sprite attraverso lo script n. 3, che – visualizzerà sul video “Io sto bene; sto andando a scuola, andiamo insieme?” , per 3 secondi; – quindi invia a tutti gli sprite il messaggio “dove”; • questo viene ricevuto dal secondo sprite attraverso lo script n. 4, che – visualizzerà “va bene, andiamo”, per 2 secondi. • Quindi l’esecuzione termina. • In questa applicazione solamente uno sprite alla volta, alternativamente, ha uno script da eseguire quando viene inviato un messaggio di broadcast. • Le parole “ciao”, “come”, “dove”, sono arbitrarie e sono scelte da colui che costruisce l’applicazione.
  • 68.
  • 69. anna sente messaggio “ciao” eseguire Invia messaggio: Ciao! io sono Anna, come stai, che fai? anna sente messaggio “andiamo” eseguire Invia messaggio: Va bene, andiamo
  • 70. Scratch Junior (https://www.scratchjr.org/index.html) • È un ambiente visuale ed è adatto per sviluppare esperienze di coding con bambini dai cinque ai sette anni. Ha una interfaccia semplificata rispetto alle versioni di Scratch e di Snap!. Gli sprite sono chiamati character. Mantiene la struttura di questi ambienti di livello superiore in merito alla creazione di sfondi e/o nuovi stage, alla modifica del character, alla registrazione di audio e, infine, al raggruppamento di comandi. • Inizialmente disponibile solo su iPAD, ora anche su sistemi Android.
  • 71.
  • 72. Un percorso Utilizzando Scratch Junior, un possibile itinerario può essere quello presentato in precedenza con opportune modifiche: • Nel pattern mono-deliberativo potranno essere trattati i seguenti argomenti: – familiarizzazione con l’ambiente di Scratch Jr; – uso dei comandi di movimento e di gestione del character ; – composizione di sequenze di azioni e concetti di istruzione e programma ; – azioni ripetitive . • In quello multi-deliberativo, verranno inseriti più character, tuttavia non interagenti fra loro e con l’ambiente per introdurre al significato di decentralizzazione. • Infine nei pattern mono-reattivo e multi-reattivo, si introduce il concetto di evento e si analizza come, attraverso questo, sia possibile gestire le interazioni di un character e di più character fra loro e con l’ambiente
  • 73. Una considerazione [1] • In linea generale, senza cioè puntare l’attenzione sulla costruzione di applicazioni, l’attrazione che i piccoli sentono verso i dispositivi mobili è dovuta alla possibilità di una interazione tattile sullo schermo. • Gli oggetti sono presi, spostati, eliminati e tutto avviene attraverso il tatto. Diversamente da altri dispositivi digitali, quelli mobili eliminano gli strumenti di input che permettono di trasformare le intenzioni degli utenti, impartite con opportune combinazioni di tasti o inclinazioni e orientamenti di un input dedicato, in possibili comandi da impartire. Si elimina questo passaggio intermedio e le azioni divengono immediate interazioni con ciò che avviene sullo schermo; l’azione è collocata sullo sviluppo della narrazione sul video.
  • 74. Una considerazione [2] • Se l’apprendimento è dettato dall’azione sugli oggetti, in questo caso ciò si realizza attraverso l’eliminazione di strumenti di intermediazione. • Gli ambienti visuali, nel caso di costruzioni attraverso il coding, riducendo al minimo la necessità di scrivere codice e dando la possibilità di agire per mezzo del tatto sugli oggetti astratti, possono facilitare la costruzione di applicazioni. • In questo caso possiamo “proprio parlare di costruzione”: i mattoni dell’artefatto programma sono spostati e portati agendo manualmente fra depositi e stage. • Le stesse istruzioni hanno, nella loro veste grafica, degli ancoraggi che permettono loro di collegarsi l’una con l’altra, quasi a materializzare il significato astratto di programma in una costruzione fisico-grafica reale.
  • 75. Pensiero computazionale e algoritmi • Un algoritmo è un insieme di istruzioni finalizzato alla soluzione di un compito. Si ricorre spesso all’esempio di una ricetta per chiarirne il significato. Può essere utile, in quanto identifica da un lato un processo e dall’altro una serie di valori che vengono utilizzati nel processo. L’esempio è riferito ad una ricetta per fare biscotti: • Tale esempio può far capire il significato di algoritmo come insieme di azioni finalizzato a un certo scopo. Chiarisce anche che un programma agisce su “qualcosa”, in questo caso gli ingredienti, senza i quali non è possibile fare la torta. Introduce anche al significato di azione che si ripete: l’istruzione 3 va ripetuta sei volte.
  • 76. Pensiero computazionale e algoritmi • Realizzare programmi senza costruire un computational thinking significa fare coding secondo un mechanic learning by doing piuttosto che secondo un learning by making. Chi costruisce programmi deve essere consapevole di concetti quali azioni ripetitive, condizionali, algoritmo, pattern, però deve essere in grado di agirli globalmente e non localmente. Spesso un learning by doing diviene un procedere per prove ed errori che interviene in punti precisi del programma tralasciando la logica globale.
  • 77. Pensiero computazionale e algoritmi • Occorre invece riuscire a generalizzare le proprie soluzioni, a concepire pattern e a essere consapevoli delle operazioni di astrazione che il costruire programmi comporta. In definitiva non si tratta di usare regole di coding ma si tratta di costruire esperienze significativa attraverso il coding. Costruire programmi deve significare sviluppare attività autentiche e non solamente imparare codice; significa usare le proprie capacità nell’articolare e arricchire le abilità logiche di pensiero possedute.
  • 78. Pensiero computazionale e algoritmi • Costruire programmi è una attività di pensiero che porta a riflettere sul proprio modo di pensare, di analizzare e risolvere problemi; non è quindi fine a se stessa e solamente orientata alle cosiddette “discipline scientifiche”, ma investe un livello che sta sopra i contenuti disciplinari, investe la capacità di ciascuno di astrarre, di generalizzare.
  • 79. Pensiero computazionale e algoritmi • Il docente dovrebbe invitare lo studente alla realizzazione di modelli di progettazione che possano essere riutilizzati, anche attraverso delle modifiche, in situazioni diverse. • Un patrimonio di pattern da riutilizzare permette a chi li costruisce di affinare le proprie capacità e a chi ne fruisce di implementare quelle di riconoscimento di similarità, quindi di generalizzazione. Significa vedere la propria soluzione non come fatto a se stante, ma come appartenente a una categoria che si riesce a cogliere nei suoi aspetti significativi. Significa saper condurre azioni, su un piano puramente cognitivo, di riconoscimento di modelli, di controllo e di modifica, se necessario, per un proficuo utilizzo nel contesto che si sta gestendo.
  • 80. Narrazione e computational thinking Bruner (1986) scrive che ci sono due tipi fondamentali di pensiero umano che sono in corrispondenza con due tipi di comunicazione: narrativo e paradigmatico. • La modalità narrativa è utilizzata comunemente per descrivere le situazioni di vita nella ricchezza del loro sviluppo in un contesto; esplicita un pensiero e lo narra, racconta di situazioni umane; • la modalità paradigmatica descrivere concetti e situazioni, cercando di astrarre dal contesto. Sono due modi di ordinare l’esperienza e di costruire la realtà; il primo è un racconto, il secondo è una descrizione ben costruita di un argomento. La verifica li differenzia: nel secondo attiene a «processi che permettono di stabilire una prova formale e empirica»; nel primo «si stabilisce la più vicina approssimazione alla verità. Gli argomenti devono convincere per la loro verità» (Balbi J., Cimbolli P., 2009, pag. 241).
  • 81. Narrazione e computational thinking • Il pensiero paradigmatico è tipico del ragionamento scientifico: il pensiero segue una logica formale, che procede per inferenze; è finalizzato alla categorizzazione ed opera per astrazione. • Quello narrativo viene impiegato prevalentemente nell'ambito di discorsi e ragionamenti quotidiani; è dentro ai contesti che forniscono categorie di senso e permettono di interpretare fatti. I suoi enunciati sono particolari, locali, dipendono dall’orizzonte interpretativo.
  • 82. Narrazione e computational thinking • Il mondo paradigmatico è popolato da tentativi di costruzione scientifica della realtà, da modelli che riescano a spiegare e a verificare la veridicità delle stesse spiegazioni. I suoi processi sono caratterizzati da passi logici dove vige categorizzazione e generalizzazione espressi da procedure formali. • Il mondo narrativo persegue una costruzione narrativa, appunto, della realtà; non esplicita bisogni di prove e dimostrazioni. I suoi processi sono caratterizzati da soggettività che si sviluppa in storie che si dilatano e si comprimono nello spazio e nel tempo, seguendo bisogni di focalizzazioni per esplicitare valori, emozioni, capaci di risuonare nelle coscienze (Scaratti G., Grazzani Gavazzi I., 1998, pp. 310, 311).
  • 83. Narrazione e computational thinking • Il mondo della scuola è un terreno fertile per il pensiero narrativo e spesso si sviluppano esperienze vissute su palcoscenici dove recitano gli studenti e che prevedono la realizzazione di un video per memoria storica, ma anche come forma elementare di drammatizzazione filmica. • Sarebbe possibile realizzare delle storie facendole vivere nel mondo digitale. Ambienti software opportuni permetterebbero di unire esperienze di narrazione con quelle di computational thinking. La narrazione con costruzione di una storia digitale (digital story telling) può essere un ideale terreno per esercitare il c.t.
  • 84. Narrazione e computational thinking • Uno sfondo interpretativo della convivenza fra pensiero paradigmatico e pensiero narrativo di Bruner può essere un digital tale. • Lo sviluppo del codice può rappresentare un esempio di pensiero del primo tipo e lo sviluppo della storia un esempio del secondo. • Nel codice possiamo rintracciare le caratteristiche del pensiero paradigmatico quali l’astrazione, il formalismo per sviluppare modelli; • nello sviluppo della storia tutte le caratteristiche dell’altro: i significati ricostruiti e trasmessi dall’autore; tutte le focalizzazioni su particolari temi e aspetti, attraverso opportune scelte degli spazi e dei tempi. I due approcci convivono nello stesso ambito e il primo spiega il secondo in modo formale.
  • 85. Narrazione e computational thinking • In particolare un ulteriore riferimento teorico di lettura può essere il richiamare due aspetti individuabili in una storia (Kermode F., 1981): la fabula e il sjuzet; la fabula è il senso della storia e lo sviluppo generale, il sjuzet e la sua realizzazione. Il sjuzet si interfaccia con il coding che rappresenta la trama che permette lo sviluppo della storia che vive in una fabula. La fabula esprime il tema fondamentale e i valori che vivono nella scansione del racconto che si sviluppa poi lungo le tappe del sjuzet.
  • 86. Narrazione e computational thinking La progettazione complessiva si sviluppa nelle seguenti fasi: • individuazione della fabula (ovvero il mondo dei valori nel quale si sviluppa la storia); • individuazione del sjuzet: le modalità di interazione degli attori in relazione ai temi della storia, nelle varie scene; • progettazione del programma che permette lo sviluppo della storia: – realizzazione delle scene; – realizzazione degli script da associare agli attori della storia; – prove e correzioni.
  • 87. Narrazione e computational thinking Nello sviluppo del sjuzet è possibile aiutarsi con uno schema attori-scene, che potrà poi essere utilizzato durante la digitalizzazione della storia.
  • 88. Narrazione e computational thinking • Gli attori sono gli sprite; la numerazione delle scene indica la loro sequenza nello sjuzet qualora siamo in un pattern decentralizzato-deliberativo invece, nel pattern decentralizzato-reattivo, sono nomi assegnati alle scene ma non identificano una sequenzialità che, appunto, in questo pattern non esiste. Le diverse scene vanno descritte testualmente, specificando le rispettive sceneggiature, descrivendo gli attori e le azioni che svilupperanno e cosa le attiveranno. Dettagliare questa fase di analisi in questa maniera facilità la realizzazione del programma relativo, in quanto contiene in fieri tutto ciò che occorrerà per lo sviluppo della storia; descrivendo le azioni dei vari attori si indicano, implicitamente, i diversi script che dovranno essere associati agli sprite.
  • 90. dichiarativo, prolog • Obiettivo di questa sezione è quello di introdurre la programmazione logica nel percorso del PNSD. La differenza sostanziale tra gli approcci precedenti (imperativi, ad oggetti, a eventi, ..) e l’approccio dichiarativo (e quindi linguaggi logici e non solo) è che nel primo caso il programma è caratterizzato da un insieme di istruzioni che esprimono “come” ottenere un determinato risultato; nel secondo caso il programma è caratterizzato da un insieme di affermazioni che descrivono uno specifico “stato del mondo” e di regole che permettono di elaborare queste affermazioni per ottenere delle risposte a domande poste. In definitiva si specifica che cosa occorre calcolare, piuttosto che come. • I linguaggi logico-dichiarativi, rispetto ai linguaggi procedurali, sono molto simili al linguaggio naturale. Da: Un software didattico per imparare la programmazione logica a scuola;Pierpaolo Di Bitonto, Teresa Roselli, Veronica Rossano, Dipartimento di Informatica – Università degli Studi di Bari
  • 91. dichiarativo, prolog • Un esempio di linguaggio dichiarativo logico è il PROLOG (PROgramming LOGic) che è stato progettato ed implementato a Marsiglia da Colmerauer e Roussel nel 1972. In un programma Prolog si descrive la conoscenza relativa al problema, rappresentata da fatti e regole fra questi, e poi sarà compito del sistema gestire lo sviluppo risolutivo a fronte di interrogazioni. Il PROLOG possiede un motore (Controllo), cioè un meccanismo interno che gli permette di collegare l'interrogazione con la conoscenza costituita per costruire una risposta.
  • 92. esempio 1 di pgm Prolog • Abbiamo un elenco di persone con numero telefonico e un secondo elenco delle stesse persone con il relativo indirizzo; si vuole gestire questi due elenchi per realizzare un elenco di abbonati al telefono;
  • 93. esempio 1 (elenco_tel.pl) Il programma potrà essere strutturato nel seguente modo: • tel(giorgio,223344). • tel(maria,233445). • tel(andrea,12234). • tel(giorgio,283749). • tel(giuseppe,223344). • tel(anna,256781). • tel(enrico,455466). • tel(gianni,887799). • indirizzo(giorgio,roma). • indirizzo(maria,milano). • indirizzo(andrea,torino). • indirizzo(giuseppe,garibaldi). • indirizzo(anna,tasso). • indirizzo(enrico,marconi). • indirizzo(gianni, garibaldi). (Casadei G.A., Teolis A.G.B.) ciascun “fatto” è formato da un predicato (“tel”, “indirizzo”) e da 2 argomenti ; sono delle costanti e vanno scritte in lettera minuscola e anche il predicato; I fatti possono avere 1, 2, 3, …. più argomenti.
  • 94. esempio 1 Diverse sono le domande che possiamo porre al programma Prolog, ad esempio: 1. sapere se un utente con un numero telefonico esiste nell’elenco; 2. sapere se un utente con una via esiste nell’elenco; 3. il numero telefonico di un utente conosciuto, 4. a chi corrisponde un determinato numero telefonico, 5. l’indirizzo di un determinato utente, 6. chi abita in un certo indirizzo, 7. il numero telefonico e l’indirizzo di un determinato utente, 8. l’utente ed il suo indirizzo, conoscendo il numero telefonico.
  • 95. esempio 1 esistono due modalità di interrogazione: • di controllo: per verificare se un fatto è compreso nella base di conoscenza; • di ricerca: per ottenere delle informazioni dalla base di conoscenza.
  • 96. domande di controllo • Se si domanda: ?- tel(andrea,12234). Prolog risponde: “true” • Se si domanda : ?- tel(andrea,45234). Prolog risponde: “false”
  • 97. domande di ricerca • il numero telefonico di un utente conosciuto: ?-tel(anna, X). Prolog risponde: X:256781 (Prolog ricerca nei fatti un fatto che abbia come primo argomento “anna” e assegna a X il valore del secondo argomento; X è una variabile; la prima lettera di una variabile deve essere in maiuscolo) • a chi corrisponde un determinato numero telefonico: ?-Tel(X, 233445). Prolog risponde: X: Maria.
  • 98. domande Prendiamo in considerazione la domanda 7. Per conoscere il numero telefonico e l’indirizzo di anna dobbiamo dapprima chiedere: • ?-tel(anna, Numero_tel). Prolog risponderà: Numero_tel=256781, • quindi dobbiamo chiedere: ?-indirizzo(anna, Via). Prolog risponderà: Via=tasso Possiamo formulare una richiesta complessa formata dalle due domande: ?-tel(anna, Numero_tel),indirizzo(anna, Via). Prolog cerca di soddisfare dapprima la prima domanda e poi la seconda, solo se entrambe sono soddisfatte, viene presentato il risultato, nel nostro caso: Numero_tel = 256781, Via = tasso
  • 99. domande Volendo conoscere l’elenco degli abbonati di via roma con il relativo numero di telefono, possiamo formulare al programma la seguente domanda: ?-tel(X,Num),indirizzo(X,roma). Prolog restituirà: X=Giorgio Num=223344 X=Giorgio Num= 283749. Giorgio abita in via roma e ha due numeri telefonici.
  • 100. istanziazione, unificazione Prendiamo in considerazione la domanda 8. Per conoscere quale utente ha un certo numero di telefono e dove abita, la domanda da formulare è la seguente: • tel(Persona, 455466), indirizzo(Persona, Via). Prolog ricerca fra i fatti del predicato tel, quello che ha numero telefonico 455466 e quando lo incontra assegna il valore enrico alla variabile Persona (istanziazione); quindi cerca di soddisfare la seconda domanda con un fatto del predicato indirizzo che abbia come primo argomento l’attuale valore di Persona, cioè enrico, quando lo trova assegna alla variabile Via il valore tasso: Persona = enrico Via = marconi In Prolog assegnare un valore ad una variabile si dice istanziare la variabile e ‘operazione di trovare un fatto uguale a un altro si chiama unificazione.
  • 101. regole Il Prolog non permette solamente di costruire programmi con una serie di fatti, ma esiste la possibilità di ‘combinare’ fatti per formare regole. Aggiungendo al programma la regola seguente: abbonato(X, Num, Via):-indirizzo(X,Via),tel(X,Num). esso diventa: tel(giorgio,223344). tel(maria,233445). …………………………….. indirizzo(giorgio,roma). indirizzo(maria,milano). indirizzo(andrea,torino). …………………………………….. abbonato(X, Num, Via):-indirizzo(X,Via),tel(X,Num). Nella regola, ‘abbonato(X,Num,Via)’ rappresenta la testa e ‘indirizzo(X,Via),tel(X,Num)’, il corpo. Quindi una regola è formata da un termine, chiamato testa della regola, dal simbolo ‘:-‘ e da uno o più termini che costituiscono il corpo della regola.
  • 102. Esempio 2 Stanze di un appartamento
  • 104. Esempio 2 (labirinto_1.pl) Si introducono due regole: porta(a,b). porta(b,c) porta(c,d). porta(c,e). porta(e,f). da(X,Y):-porta(X,Y). da(X,Y):-porta(Y,X). Domande: da(b,a). true
  • 105. Esempio 2 • Stanze vicine: quando nel passaggio da una all’altra si attraversa una sola stanza. porta(a,b). porta(b,c) porta(c,d). porta(c,e). porta(e,f). da(X,Y):-porta(X,Y). da(X,Y):-porta(Y,X). vicine(X,Y):-da(X,Z),da(Z,Y).
  • 106. esempio 3 • Esempio: costruire una tabella di calciatori delle squadre del campionato di serie A e interrogare questa tabella. Lavorare a gruppi; ciascun gruppo crea una tabella per una squadra scelta. M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
  • 107. esempio 3 Inter, Marco Andreolli, Difensore Inter, Cristian Ansaldi, Difensore Inter, Danilo Ambrosio, Difensore Inter, Joao Miranda de Souza Filho, Difensore Inter, Jeison Murillo, Difensore Inter, Yuto Nagatomo, Difensore Inter, Trent Sainsbury, Difensore Inter, Davide Santon, Difensore Inter, Guy Yao, Difensore Inter, Ever Banega, Centrocampista Inter, Jonathan Biabiany, Centrocampista Inter, Marcelo Brozovic, Centrocampista Inter, Antonio Candreva, Centrocampista Inter, Roberto Gagliardini, Centrocampista Inter, Joao Mario, Centrocampista Inter, Geoffrey Kondogbia, Centrocampista Inter, Gary Medel, Centrocampista Inter, Ivan Perisic, Centrocampista Inter, Citadin Martins Éder, Attaccante Inter, Gabriel Barbosa Almeida, Attaccante Inter, Mauro Icardi, Attaccante Inter, Rodrigo Sebastian Palacio, Attaccante inter(andreolli, difensore) inter (ansaldi, difensore) inter (ambrosio, difensore) inter (miranda, difensore) inter(murillo, difensore) inter(nagatomo, difensore) inter(sainsbury, difensore ) inter (santon, difensore) inter (yao, difensore) inter(banega, centrocampista) inter(biabiany, centrocampista) inter(brozovic, centrocampista) inter(candreva, centrocampista) inter(gagliardini, centrocampista ) inter( joao_mario, centrocampista) inter(kondogbia, centrocampista) inter(medel, centrocampista) inter(perisic, centrocampista) inter(éder, attaccante) inter(barbosa, attaccante) inter(icardi, attaccante) Inter(palacio, attaccante) P R O L O G squadra, giocatore, ruolo M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
  • 108. esempio 3 Sono possibili richieste: • inter(X, portiere) – risposta: handanovic (di ricerca) • inter(eder, attaccante) - risposta: si (di controllo) Con queste basi di conoscenza separate non è possibile rispondere a domande tipo: “Quali sono tutti i portieri del campionato di serie A?”. Ciascun gruppo vede la propria squadra e non si ha una base di conoscenza totale. Occorre costruire un nuovo modello che raggruppi tutte le squadre e permetta di identificare l’appartenenza dei giocatori alla propria squadra. M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
  • 109. esempio 3 inter(andreolli, difensore). inter (ansaldi, difensore). inter (ambrosio, difensore). inter (miranda, difensore). …………….. milan(lapadula, attaccante). milan(donnarumma, portiere). ……….. torino(belotti, attaccante). …………….. giocatore (inter, andreolli, difensore). giocatore(inter, ansaldi, difensore). giocatore(inter, ambrosio, difensore). giocatore(inter, miranda, difensore). …………….. giocatore(milan,lapadula, attaccante). giocatore(milan,donnarumma, portiere). …………………… giocatore(torino, belotti, attaccante). …………….. Il nome della squadra da nome del predicato è divenuto argomento di un predicato più generale. M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
  • 110. esempio 3 domanda: quali sono i portieri di serie A? • ?-campionato(Squadra, Nome, portiere). Risposta: Squadra: inter Nome: handanovic Squadra: milan Nome: donnarumma Squadra: torino Nome: hart M. Famiglietti, Tecnologia. Ricerca sul curricolo e innovazione didattica, Ufficio scolastico regionale dell’Emilia Romagna
  • 111. un passo avanti Analizzando meglio si nota che si possono individuare 3 insiemi (classi): giocatori, squadre e ruoli; proviamo a scrivere la nostra conoscenza nel seguente modo: giocatore(1,andreolli). giocatore(2, ansaldi). giocatore(3, ambrosio). giocatore(4, miranda). giocatore(5, lapadula). giocatore(6, donnarumma). giocatore(7, belotti). squa(1,inter). squa(2,milan). squa(3,torino). ruo(at, attaccante). ruo(di, difensore). ruo(ce, centrocampista). ruo(po, portiere). Ora però come si riesce a capire in quale squadra e con quale ruolo gioca un calciatore?
  • 112. un passo avanti Possiamo creare un’altra serie di fatti che metta in relazione le tre classi gio_squa_ruo(1, 1, di). gio_squa_ruo(1, 2, di). gio_squa_ruo(1, 3, di). gio_squa_ruo(1, 4, di). gio_squa_ruo(2, 5, at). gio_squa_ruo(2, 6, po). gio_squa_ruo(3, 7, at). La prima riga indica: squadra con codice 1 (inter), giocatore con codice 1 (andreolli), ruolo con codice di (difensore), in altri termini: il difensore andreolli gioca nell’inter
  • 113. un passo avanti (calcio_3.pl) La regola: • domanda(Squadra,Nome,Ruolo):-squa(X,Squadra), giocatore(Y,Nome), ruo(Z,Ruolo), gio_squa_ruo(X,Y,Z). • Permette di interrogare il pgm prolog per sapere: – ruolo e squadra, dato il giocatore – i giocatori con il rispettivo ruolo, data una squadra; – i giocatori con la rispettiva squadra, dato un ruolo; – l’elenco dei giocatori con squadra e ruolo – …………………………….
  • 114. un passo avanti • Se si fa la seguente domanda: ?-domanda(Squadra, lapadula, Ruolo). Prolog restituisce: Squadra: milan Ruolo: attaccante Se si vuole sapere in quale squadra, e con quale ruolo, gioca miranda?
  • 115. • Ulteriore materiale in http://www.didafor.com
  • 116. Bibliografia • Alessandri G., 2016, Didattica per il coding. Didattica, pensiero computazionale, corporeità, Aracne, Roma • Alessandri G., 2014, Didattica e tecnologie: intersezioni. Complessità, coding, robotica educativa, Anicia, Roma • Alessandri G., 2013, Tecnologie autonome nella didattica. Verso la robotica educativa, Morlacchi, Perugia. • Alessandri G., Paciaroni M., 2013, Appunti sull’uso ludico delle tecnologie, Morlacchi, Perugia. • Alessandri G., 2008, Dal desktop a second life. Tecnologie nella didattica, Morlacchi, Perugia