pensiero computazionale e coding

Pensiero computazionale e coding (pag.1)
Pensiero computazionale e coding (pag.2)
Brano estratto e riadattato
Quattro domande...una sintesi
bibliografia e sitografia
Pensiero computazionale e coding (pag.1)

di Michael Lodi

Pensiero computazionale e coding sono argomenti “caldi” nelle indicazioni didattiche di oggi1. Si tratta solo di una moda, oppure l’introduzione di questi nuovi mondi del sapere è fondata su solide basi? L’introduzione, già a partire dalla scuola primaria, del pensiero computazionale come quarta abilità di base da insegnare (insieme a leggere, scrivere e far di conto) è ritenuta sempre più indispensabile. L’Italia non rappresenta un caso isolato: scelte analoghe sono state fatte (a volte alcuni anni prima rispetto al nostro paese) anche in molti altri paesi (Regno Unito, Stati Uniti, Australia, Nuova Zelanda, solo per citarne alcuni). 

Per prima cosa è bene soffermarsi sul significato di questi termini.

 Il pensiero computazionale può essere definitocome un “processo di formulazione di problemi e di soluzioni in una forma che sia eseguibile da un “agente che processa informazioni”. Si tratta di formalizzare un problema di modo che un qualche esecutore (la massaia che segue una ricetta, l’hobbista che monta il mobile prefabbricato, il computer che esegue le istruzioni scritte in un preciso linguaggio formale) possa trovare la soluzione al posto nostro. 

Non si tratta di “pensare come un computer”, frase che di per sè contiene una contraddizione, ma piuttosto di pensare come un Informatico per trovare strategie creative (tipiche di un pensiero umano) e innovative per la risoluzione di un problema, lasciando poi al computer il “noioso” compito di eseguire i passi che effettivamente porteranno alla soluzione desiderata. 

Lo strumento espressivo principale di un informatico è quello della programmazione (coding, in inglese). Tramite la traduzione degli algoritmi (le descrizioni dei passi necessari alla risoluzione di problemi, di cui abbiamo parlato poc'anzi) in un linguaggio di programmazione (cioè un linguaggio che, direttamente o indirettamente, è comprensibile ad un computer) l’informatico dà vita ad artefatti (virtuali) inediti che si occupano di realizzare un compito, risolvere un problema, fornire un servizio, ecc.

A questo punto è normale chiedersi se imparare questa abilità (pensiero computazionale) e queste conoscenze e competenze (coding) sia davvero necessario per il più vasto pubblico possibile, o se invece non debba rimanere appannaggio di alcuni tecnici specializzati. L’informatica è pervasivamente presente nel mondo di oggi, in ogni ambito della nostra vita. Si parla infatti di “ubiquitous computing”. Dunque, conoscerne i concetti basilari è imprescindibile per la formazione personale.

(continua a pag.2)

Pensiero computazionale e coding (pag.2)

 

Così come a scuola si studiano le lingue, la matematica, la fisica, le arti per capire il mondo che ci circonda (e non necessariamente per diventare esperti di questo o quel settore), così deve essere ora per l’informatica, che è una scienza autonoma e dunque (sempre più) degna di un posto tra le discipline scolastiche.Sebbene non deve essere il solo obbiettivo, è giusto dare uno sguardo alle professioni del futuro. I dati parlano chiaro, sempre più professioni (dei più disparati settori: scientifico, umanistico, ecc) richiedono una competenza informatica che va ben al di là del semplice “uso” della tecnologia e i trend preannunciano una carenza di lavoratori con le competenze necessarie, negli anni a venire. 

Normale, se la maggioranza dei ragazzi non ha avuto modo di entrare in contatto con tali aspetti del sapere e dunque, eventualmente, appassionarvisi. Ma c’è di più. Imparare a programmare, a “pensare come un informatico”, è un ottimo modo per acquisire competenze trasversali quali problem-solving, ragionamento analitico e sistematico, precisione e cura per la forma, gestione della complessità di un problema, collaborazione. Per la natura stessa dell’Informatica, programmare e risolvere problemi computazionalmente aiuta a non essere spaventati dagli errori (i “bug” di cui i programmatore sono sempre a caccia), ma anzi a procedere per prove ed errori. Il feedback inoltre è imparziale ma motivante: se il programma non funziona, mi rendo conto che c’è qualcosa da migliorare e sono spronato a farlo. 

Gli studenti

  1. imparano a scomporre un problema che sembra insormontabile in sottoproblemi più facilmente risolubili;
  2. imparano a lavorare con problemi reali e non necessariamente costruiti ad arte per avere un risultato “pulito”, per ottenere un apprendimento autentico e per mettere in gioco, stimolare e valutare le loro competenze;
  3. imparano  inoltre a collaborare e a riutilizzare il lavoro di altri (senza paura di copiare ma sapendo di dover rispettare il diritto d’autore) per realizzare i propri progetti. 

Come è evidente, si tratta di skill di vita, che vanno ben al di là dell’informatica: sono la base per continuare a crescere e ad imparare

Costruire i propri programmi (videogiochi, storie, animazioni, simulazioni…) permette inoltre un uso attivo della tecnologia (contrapposto all'uso passivo, di solito l’unico a cui sono esposti bambini e ragazzi oggi), come strumento per esprimere la propria creatività. Così come, dopo aver imparato a leggere, impariamo a scrivere, per poter esprimere i nostri pensieri e dare forma a opere nuove, così possiamo fare quando da semplici utilizzatori diventiamo capaci di creare usando la tecnologia e l’informatica.


1 La Buona Scuola, Piano Nazionale Scuola Digitale

2Per una rassegna sulle possibili definizioni del pensiero computazionale si veda il Cap.1 della tesi di Michael Lodi: http://amslaurea.unibo.it/6730/


 

Brano estratto e riadattato

 

 

Brano estratto e riadattato da
Rita Marchignoli, Michael Lodi. EAS e pensiero computazionale. La Scuola, 2016

 

La locuzione computational thinking (pensiero computazionale[1]) è stata utilizzata per la prima volta da Seymour Papert nel suo libro Mindstorms[2], e poi in un suo articolo sulla didattica della Matematica[3].

La locuzione pensiero computazionale è stata però portata alla ribalta da un breve ma seminale articolo[4] di Jeannette Wing[5], in cui il concetto è definito informalmente come un

“modo di pensare” volto a “risolvere problemi, progettare sistemi, comprendere il comportamento umano basandosi sui concetti fondamentali dell’informatica”.

In altre parole,

“pensare come un informatico per risolvere un problema”.

La scienziata si spinge a individuare il pensiero computazionale come “quarta abilità di base”, oltre a leggere, scrivere e far di conto[6], che dovrebbe essere insegnata a tutti, fin dalla scuola primaria.

La stessa Wing ha formalizzato la sua idea, definendo il pensiero computazionale come

un processo mentale di formulazione di problemi e delle loro soluzioni in una forma che sia effettivamente eseguibile da un agente che processa informazioni.

Tale definizione, estremamente generale, sottointende molti aspetti non ovvi del processo che un informatico mette in atto per risolvere un problema: organizzare logicamente e analizzare i dati; rappresentare i dati tramite astrazioni, modelli e simulazioni; identificare, analizzare, implementare e testare le possibili soluzioni con un’efficace ed efficiente combinazione di passi e risorse, avendo come obiettivo la ricerca della soluzione secondo tali criteri; generalizzare il processo di soluzione e trasferirlo ad altri problemi, eccetera.

Proviamo quindi a elencare le componenti principali che secondo la letteratura[7], e con integrazioni di chi scrive queste note, fanno parte del pensiero computazionale.

Partiamo dagli aspetti più pratici: realizzando i propri progetti di programmazione, i bambini devono utilizzare concetti che sono alla base della totalità dei linguaggi dell’informatica.

  • Sequenze: nella programmazione, l’ordine delle istruzioni è importante, e determina il risultato finale;
  • Condizionali: un programma deve prevedere i possibili casi che, durante la sua esecuzione, si possono presentare, e deve poter prendere decisioni in base al verificarsi o meno di tali condizioni;
  • Ripetizioni: un programma deve poter eseguire le stesse istruzioni un certo numero di volte (magari non conoscendo a priori questo numero), e il programmatore ha di solito strumenti linguistici per esprimere questa ripetizione senza bisogno di riscrivere (ammesso che sia possibile) più volte le istruzioni;
  • Eventi: è utile far sì che un programma esegua certe istruzioni (solo) nel momento in cui accade qualcosa;
  • Parallelismo: in un mondo in cui sempre più spesso i computer sono dotati di più processori, è necessario far sì che più istruzioni possano eseguite contemporaneamente, e saper gestire le complicazioni che questo genera;
  • Operatori: per automatizzare e generalizzare la soluzione di problemi, è necessario scrivere espressioni matematiche e logiche, lasciando che sia il computer a calcolarne il valore;
  • Dati (collezione, analisi, rappresentazione): per la natura stessa dell’informatica, una soluzione algoritmica a un problema richiede di raccogliere, memorizzare, analizzare e rappresentare informazioni.

Come già esplicitato, pensando e lavorando come un informatico, si sperimentano, sviluppano e affinano alcune pratiche, cioè nuovi modi di lavorare, pensare e approcciare i problemi.

  • Essere incrementali e iterativi: difficilmente si può realizzare un progetto perfetto al primo colpo, è molto più funzionale sviluppare un progetto per raffinamenti successivi, migliorandolo e aggiungendo funzionalità (proprio come accade per le app, che vengono continuamente aggiornate);
  • Testing e debugging: per alcuni limiti “intrinsechi” dell’informatica, è impossibile determinare in modo automatico se un programma sia corretto o no; è indispensabile allora provare (e far provare) il progetto (testandolo, appunto) alla ricerca di errori (i bug[8]), e poi cercare di risolverli;
  • Riuso e remixing: i programmi sono sempre più complessi, non sarebbe possibile né conveniente riscrivere tutto ogni volta, è molto più conveniente riutilizzare (legalmente) codice scritto da altri, come base per costruire qualcosa di nuovo;
  • Decomposizione: all’inizio un progetto di programmazione può sembrare inaffrontabile, ma ben presto si impara a scomporlo in parti più semplici e facilmente risolubili, per poi ricomporre in modo semplice le parti risolte e ottenere così una soluzione completa;
  • Astrazione: è impossibile modellare la realtà in modo perfettamente fedele, è allora necessario ridurre la complessità per far emergere l’essenziale, dimenticando i dettagli inutili e focalizzandosi sugli aspetti fondamentali per la soluzione;
  • Riconoscimento di pattern e generalizzazione: spesso una soluzione è utilizzabile per una classe di problemi, è allora necessario riconoscere gli aspetti comuni di tali problemi, per riutilizzare le strategie e applicarle in contesti simili;
  • Automazione: è possibile lasciare che sia il computer a svolgere compiti ripetitivi e noiosi, una volta che è stato istruito per farlo;
  • Simulazione: l’informatica permette di creare modelli e interi mondi virtuali, su cui/in cui poi effettuare esperimenti altrimenti impossibili;
  • Attenzione all’efficienza, calcolabilità e complessità: programmando si impara ad individuare una strategia di soluzione che porti a un risultato (come accennato esistono dei limiti: i calcolatori non possono risolvere tutti i problemi), sperabilmente il migliore e usando meno risorse possibili (come ad esempio il tempo, lo spazio di memoria o l’energia consumata).

Utilizzando il pensiero computazionale si sviluppano nuove prospettive, cioè nuovi modi di vedere il mondo e se stessi.

  • Esprimere se stessi: tramite la programmazione è possibile costruire qualcosa di unico e personale;
  • Connettersi: realizzando un progetto insieme ad altri, situazione molto comune tra i programmatori, si comprende il potere della collaborazione;
  • Farsi domande: per modellare la realtà, e “insegnare al computer” come risolvere un problema, è necessario farsi domande sul funzionamento del mondo che ci circonda, sulla mente umana e sulla risoluzione dei problemi;
  • Saper gestire la complessità e i problemi difficili: portare a termine un progetto di programmazione aiuta a non essere sopraffatti da un problema difficile e aperto, ma invece affrontarlo passo dopo passo;
  • Tolleranza per l’ambiguità e i problemi aperti: spesso un progetto o un problema informatico sono ambigui, e il primo passo è definirli (problem posing/setting), per poi rendersi conto che hanno molte soluzioni diverse, che richiedono ogni volta idee nuove, personali e creative.

Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 4.0 Internazionale.


[1] Per una rassegna sulle definizioni di Pensiero computazionale, con proposte per insegnarlo al meglio, rimando alla mia tesi di laurea: Lodi M. (2014), Imparare il pensiero computazionale, imparare a programmare, Tesi di Laurea Magistrale in Informatica, Università di Bologna. In Internet, URL: http://amslaurea.unibo.it/6730/ 

[2]  Papert S. (1980), Mindstorms: Children, Computers, and Powerful Ideas, Basic Books, New York.

[3]  Papert S. (1996). An exploration in the space of mathematics educations, in «International Journal of Computers for Mathematical Learning», vol. 1, issue 1, pp. 95-123.

[4]  Wing J. M. (2006), Computational thinking, in «Communications of the ACM», ACM New York, NY, USA, vol. 49, issue 3, pp. 33-35

[5] Professoressa di Informatica, all’epoca direttrice del dipartimento di Informatica della Carnagie Mellon University.

[6] Che nelle Indicazioni nazionali per il curricolo della scuola primaria (MIUR, 2012) vengono considerate “alfabetizzazione strumentale” di base, da unire a quella sociale e culturale, e ai linguaggi e saperi delle varie discipline.

[7] Principalmente da
    Brennan K. - Resnick, M. (2012). New frameworks for studying and assessing the development of computational thinking, in «Proceedings of the 2012 annual meeting of the American Educational Research Association», Vancouver, Canada, pp. 1-25

  e da
    International Society for Technology in Education (ISTE) e Computer Science Teachers Association (CSTA). In Internet, URL: 
https://c.ymcdn.com/sites/www.csteachers.org/resource/resmgr/CompThinkingFlyer.pdf 

[8] L’origine etimologica dell’uso del termine bug come sinonimo di errore in un programma è controversa. Una vicenda molto evocativa (e che può catturare l’attenzione dei bambini) è quella di una pioniera dell’Informatica, Grace Hopper, che un giorno trovò all’interno di uno dei primi computer (all’epoca grandi quanto intere stanze) un bacarozzo che interferiva con i componenti elettromeccanici, facendo così produrre risultati inattesi ad un programma ben scritto.
Al giorno d’oggi, però, la quasi totalità dei bug è dovuta al software mal scritto (e dunque al programmatore) piuttosto che a malfunzionamenti dell’hardware.

 

Quattro domande...una sintesi

.....in sintesi: una chiara spiegazione del nostro amico ed esperto Michael Lodi

 

Quattro domande sul pensiero Computazionale

“E’ il processo mentale che sta alla base della formulazione dei problemi e delle loro soluzioni così che le soluzioni siano rappresentate in una forma che può essere implementata in maniera efficace da un elaboratore di informazioni sia esso umano o artificiale” (Jeannette Wing, direttrice del Dipartimento di Informatica della Carnegie Mellon University). Ovvero è lo sforzo che un individuo deve mettere in atto per fornire a un altro individuo o macchina tutte le “istruzioni” necessarie affinché questi eseguendole sia in grado di portare a termine il compito dato.

Perché è importante il pensiero computazionale?

Nonostante il termine “computazionale” possa indurre a pensare che il pensiero computazionale sia un’abilità utile solo a chi ha fatto dell’informatica la propria professione, si tratta di una skill fondamentale che tutti dovrebbero possedere, in particolare quei giovani che desiderano non farsi sfuggire le opportunità che il futuro porrà loro davanti nei prossimi anni. È ormai universalmente riconosciuto che per riuscire bene nel proprio futuro professionale i giovani dovranno “imparare a imparare” e non limitarsi a fornire risposte preconfezionate: in questa direzione si muovono le raccomandazioni dell’Unione Europea in materia di istruzione che sono state recepite dal MIUR anche con l’introduzione della programmazione e della robotica educativa nelle scuole a partire dalla primaria. Perché così come leggere, scrivere e contare sono abilità che è importante imparare fin da bambini, anche il pensiero computazionale deve essere appreso ed esercitato fin dai primi anni di scuola.

Il pensiero computazionale secondo il framework sviluppato dal Lifelong Kindergarten del MIT MediaLab.

Concetti di pensiero computazionale:

  • Sequenza: un’attività può essere espressa attraverso una serie consecutiva di singoli step o istruzioni.
  •  Ciclo: è un meccanismo per eseguire più volte la medesima sequenza in maniera iterativa.
  • Evento: il verificarsi di un’azione causa lo scatenarsi di un’altra azione.
  • Parallelismo: significa eseguire sequenze di istruzioni inerenti allo stesso tempo.
  • Condizione: è la possibilità di prendere decisioni sulla base del verificarsi di determinate situazioni.
  • Operatore: fornisce supporto per la manipolazione di numeri e stringhe di caratteri.
  • Dati: sono valori che possono essere salvati, recuperati e modificati durante l’esecuzione di un programma.

Learning by doing

Per insegnare a “pensare come un informatico” è necessario  promuovere  uno  stile  esperienziale  (learning  by doing), non frontale ma laboratoriale, in cui gli studenti imparano facendo, si sentono responsabili del processo e, sostenuti dagli adulti, ne diventano consapevoli, si percepiscono come competenti, acquisendo così  fiducia nelle proprie risorse e aumentando la propria autostima.Si tratta di un approccio “learner centered”, centrato sul discente,  in  cui  l’insegnante  si  muoverà  a  proprio  agio, poiché questo approccio rappresenta l’orizzonte di riferimento della scuola italiana, coerentemente con le raccomandazioni dell’Unione Europea in materia di sviluppo delle competenze. Lavorare in team e aiutarsi reciprocamente rappresentano dei valori imprescindibili del progetto, poiché costituiscono skill che devono essere esercitate e sviluppate: l’apprendimento è più efficace e coinvolgente se frutto di un’ esperienza che si sviluppa in un ambiente caratterizzato da un clima collaborativo.

bibliografia e sitografia

Pensiero computazionale - ...le "nostre" prime fonti 

 

Pubblicazioni di Michael Lodi

Marchignoli,R.,Lodi,M. (2016).EAS e pensiero computazionale.La Scuola, Brescia,2016.Capitolo1,sezione3.1.

Papert ne ha parlato nel suo libro Mindstorms

Jeannette Wing nel suo articolo del 2006

 

Coding - Programmare, inventare giochi con il linguaggio visuale a blocchi....noi siamo partite da qui!

 

Imparare con SCRATCH
Non sapete come andare avanti con un progetto Scratch? Avete domande e dubbi? Allora potete chiedere aiuto accedendo a questa piattaforma....non esitate! Forum Italiano di Scratch
CODE.ORG: la prima piattaforma informatica nata negli Stati Uniti ed utilizzata da oltre venti milioni di ragazzi, che aggrega associazioni, università e imprese.
PROGRAMMA IL FUTURO: la piattaforma italiana del MIUR e CINI che ha l’obiettivo di fornire alle scuole una serie di strumenti semplici, divertenti e facilmente accessibili per formare gli studenti ai concetti di base dell'informatica.
CS-UNPLUGGED: imparare l’informatica senza alcun Computer.
Una collezione di attivit`a didattiche divertenti per gli
studenti delle scuole primarie.
CODERDOJO-ITALIA: per capire che cos'è e cosa si fa.
...quando ancora non erano stati scritti libri e guide su SCRATCH: GUIDA PER I DOCENTI e GUIDA PER GLI STUDENTI
Poi è arrivata questa fantastica guida scritta dalla nostra amica e collega Caterina Moscetti con prefazione di Michael Lodi: "CODING E PENSIERO COMPUTAZIONALE NELLA SCUOLA PRIMARIA"
BAMBINI CHE IMPARANO A PROGRAMMARE: blog tenuto sul tema dal maestro Alessandro Rabbone