Digi Tales

Hello, world!

Giu
15

“Hello, world!” è uno dei luoghi comuni dell’universo della programmazione, nel senso di uno dei topic fondamentali, conosciuti magari solo superficialmente, ma su cui si ritorna in continuazione. Raccontare dell’origine di “Hello, world!”, e poi andare a cercarne le presenze nella cultura contemporanea, è un buon modo per fare un tuffo in questo mondo e rendersi conto di quanto sia ricco, complesso, e non così arido come immagina chi ne rimane fuori.

Banalmente, “Hello, world” (nel seguito: HW) è il nome convenzionale che si dà ad ogni programma che come unico risultato alla fine della sue esecuzione scrive sullo schermo la frase: “Hello, world!”.

E’ di solito il primo esempio che si fa per mostrare le caratteristiche di base di un linguaggio di programmazione all’interno di un manuale, un tutorial, un corso su quel linguaggio. Da un punto di vista puramente quantitativo permette di mostrare quanto codice deve essere scritto per ottenere un risultato in apparenza molto semplice. Perché a seconda del linguaggio scelto, questa quantità può essere molto diversa. D’altra parte anche per le lingue naturali è noto che ci sono lingue prolisse e lingue concise.
Ad esempio, in Pascal – che è un linguaggio didattico, inventato nel 1970 dall’austriaco Niklaus Wirth per insegnare la programmazione strutturata – occorre dichiarare un programma, con un nome, e al suo interno un blocco con un inizio e una fine:

program hello;  
uses crt;    
begin
  writeln('Hello, world');
  readln
end.

La stessa cosa succede in Java – uno dei linguaggi più usati al mondo, inventato dal canadese James Gosling nel 1994 – , dove ancora più informazioni sono necessarie per dichiarare l’usabilità del codice in contesti più grandi (public, static), o il riuso di librerie esistenti (System.out):

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world");
    }
}

Invece nei linguaggi interpretati, come in Perl – creato dallo statunitense Larry Wall nel 1987 con lo scopo di essere pratico, più che elegante – di solito non è necessaria tutta questa sovrastruttura, ma è sufficiente scrivere una sola istruzione, che in memoria dei tempi in cui terminali erano della stampanti si chiama “print”:

print "Hello, world\n"

Insomma: c’è più di un modo di fare la stessa cosa. Che è anche il motto del Perl: TIMTOWTDI (There Is More Than One Way To Do It). A dimostrazione che la programmazione non è un’attività ripetitiva, ma un’arte.

Questo “task” permette anche di far vedere come vengono trattate le sequenze di simboli, che è una parte fondamentale di tutti i linguaggi di programmazione, e come può essere gestito l’output verso lo schermo o verso altri dispositivi.

Per spiegare il versante più algoritmico dei linguaggi di solito si usano altri compiti, legati al mondo dei numeri, come quello di calcolare l’i-esimo numero di Fibonacci; oppure quello di scrivere tutto il testo della canzoncina da scout “99 bottles of beer“, tenendo conto delle varianti, con il minore numero di istruzioni.

Perché proprio “Hello, world!” e non “123 prova” o “tanto va la gatta al lardo”?

Non è affatto un testo casuale. C’è dietro una storia, che non è nota a tutti, anche tra i programmatori.

Nel 1972 Brian Kernighan, un fisico canadese che lavorava ai Laboratori Bell, si trovò a scrivere un tutorial sul linguaggio B, inventato proprio lì.

Nei primi capitoli del tutorial, dopo aver presentato gli operatori aritmetici, passa alla funzione “putchar” che scrive sul terminale l’argomento passato, in questo caso una costante:

main( ){
	auto a;
	a= ’hi!’;
	putchar(a);
	putchar(’*n’ );
}

Il valore della costante è in questo caso ‘hi!’, ciao.

Nell’ultima riga viene dimostrato come facilitare la formattazione usando dei codici particolari: ‘*n’ non sono due lettere da stampare, ma un codice unico che indica alla funzione putchar () che al termine deve aggiungere un ritorno a capo.

Poco più avanti, volendo mostrare come si creano e usano le variabili comuni, Kernighan ha bisogno di una frase più lunga, e abbastanza naturalmente da ‘hi!’ passa a ‘hello, world!’:

main( ) {
    extern a, b, c;
    putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';

Il motivo per cui ci sono tre variabili anziché una sola è che il massimo numero di caratteri che una costante nel linguaggio B può contenere era 4.

Ancora più avanti la frase “hello, world” viene riusata per introdurre le stringhe, che invece possono essere più lunghe di 4 caratteri.

Sei anni dopo, lo stesso Kernighan riusa esattamente la stessa frase quando si trova a scrivere il manuale del linguaggio C (che era un erede del B):

main( ) {
        printf("hello, world\n");
}

In questa versione scompare il punto esclamativo (probabilmente perché ha un significato preciso nel linguaggio: è un operatore unario, una negazione, e lo studente potrebbe esserne confuso).

Perché sceglie “hello, world”? Evidentemente questa frase faceva parte della cultura popolare statunitense, tanto che in un’intervista di quarant’anni dopo Kernighan sostiene di non ricordare esattamente perché l’ha scelta, ma di avere in mente un cartone animato con un pulcino che dice “Hello, world”. In ogni caso, questa frase era usata negli anni cinquanta da uno speaker radiofonico, William B. Williams, come suo saluto (un po’ come “Good morning, Vietnam!” o “Cari amici vicini e lontani”). Era quindi un saluto, un’espressione orale, colloquiale. Un buongiorno, la prima frase che si dice quando si incontrano delle persone.Siccome il manuale di Kernighan è stato tradotto in 20 lingue ed è considerato unanimemente “il” riferimento per il linguaggio C, la versione “hello, world” divenne quella più conosciuta da migliaia o milioni di studenti e apprendisti programmatori.

Talmente famosa da diventare un oggetto artistico: la versione scritta a mano del codice è stata battuta ad un’asta nel 2015 per 5.000 dollari.

Da quel momento, l’uso di HW come task per introdurre un linguaggio è diventato una specie di standard de facto, un omaggio al lavoro dello stesso Kerninghan, e implicitamente a quello di Dennis Ritchie (l’autore del linguaggio C) e di Ken Thomson (l’autore del linguaggio B).

L’omaggio non può che essere piuttosto rigido, nel senso che sarebbe considerato di pessimo gusto utilizzare come primo esempio nel manuale di un nuovo linguaggio un codice sorgente che stampi “Hey Jude”.

Talmente è diffusa questa tradizione che qualcuno ha pensato di raccogliere esempi di programmi HW scritti in centinaia di linguaggi di programmazione diversi, come ha fatto Wolfram Rösler a partire dal 1994:

http://helloworldcollection.de/

La prima versione dei codici si atteneva ad un singolo modello (“Hello World!”), in cui anche la parola World, essendo un sostantivo, viene scritta in maiuscolo come è corretto fare in lingua tedesca da Lutero in poi. Mano a mano che la raccolta è cresciuta – 603 linguaggi censiti oggi – i codici si sono allontanati dal testo originale. Per essere esatti, la tradizione consente queste sole varianti al testo originale:

– si usa la H maiuscola (corretta in Inglese ad inizio di frase)

– si può usare la w o la W (benché la maiuscola sia un errore in Inglese a meno che World non si intenda come nome proprio)

– si può omettere la virgola (che nell’originale serviva a mostrare l’uso dei segni di interpunzione all’interno delle costanti e fuori)

– si può omettere il punto esclamativo finale, in omaggio alla versione in C

– si può omettere l’acapo finale (\n)

Ma a dimostrare la posizione particolare di HW all’interno dell’universo culturale dei programmatori non ci sono solo le sillogi di codice.

Proprio pochi giorni fa, il maestro Nicola Campogrande per l’apertura di Codefest 2021, il festival del codice sorgente organizzato dall’Università di Torino e da Codexpo.org, ha composto e diretto quattro lieder sul testo HW, scegliendo quattro linguaggi tra quelli proposti in helloworld.de. E’ un caso lampante di uso del codice sorgente al di là della sua funzione primaria. D’altra parte, anche Franco Berardi (Bifo) nel 2001 aveva effettuato una performance singolare leggendo a voce alta il codice sorgente di un virus scritto per l’occasione dal collettivo [epidemiC]. In fondo, anche le partiture musicali e le ricette si possono leggere a voce alta e, perché no, cantare. D’altra parte, ci sono stati casi di poesie scritte in linguaggi di programmazione, da quelle in ALGOL a quelle in Perl.

Un altro omaggio dal mondo esterno è quello di Tomohiko Itō che nel 2019 ha diretto un anime dal titolo originale “Harō Wārudo” , che significa proprio quello che pensate. In questo mix di fantascienza e sentimenti, il mondo viene registrato in un supercomputer dal nome evocativo, Alltales.

Ma per tornare nel campo della molteplicità dei linguaggi di programmazione, che è facile definire come nuova Babele visto che ce ne sono 8000, ci sono artisti del codice che hanno dato vita a veri pezzi di bravura, come questo HW che può essere correttamente compilato/eseguito in 8 linguaggi diversi e produce lo stesso risultato:

https://ideology.com.au/polyglot/polyglot.txt

Per divertirsi un po’ – non solo se si è programmatori – si può andare a leggere questo testo riportato sul sito della Free Software Foundation, in cui vengono raccolte e presentate sedici maniere diverse di scrivere HW, organizzate in base all’età, alla competenza professionale e al ruolo dell’autore, utilizzando linguaggi diversi (BASIC, Pascal, Lisp, C, C++, Perl,…) e contemporaneamente prendendo in giro le caratteristiche di ogni figura: dal giovane programmatore che vuole impressionare il datore di lavoro all’hacker che ricompila un codice già scritto, al guru che usa meno caratteri possibili, al manager che scrive una mail per farsi fare il lavoro da un sottoposto fino al CE che non è in grado di fare nemmeno quello.

https://www.gnu.org/fun/jokes/helloworld.html

Un’altra magnifica prova di umorismo è quella di Benno Evers, un programmatore di Amburgo, che descrive dai diversi punti di vista di un novizio, un apprendista, un avvocato, un pedante, un idealista, un ideologo, un ingegnere, un fisico e un illuminato cosa succede quando viene eseguito una variante in C++ di HW:

#include <iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
}

https://gist.github.com/lava/f8732a6802988fe8d0a41bd7979a4d54

Il codice sorgente dovrebbe essere sempre leggibile, per permettere ad altri di imparare e correggere. Ma siccome i programmatori sono tendenzialmente dei nerd e tendono a sfidarsi sul terreno della bravura, a volte si divertono a scrivere codice illeggibile solo per il gusto di far vedere che sono capaci di farlo. Non tutti sanno che ogni anno, dal 1984, si tiene una gara di abilità tra programmatori C in cui vengono premiati i programmi meno leggibili: si tratta dell’International Obfuscated C Code Context. Uno dei codici vincitori della prima edizione era appunto un HW (che usa la versione originale del testo):

int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hello, wor\
ld!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}

Ma non è l’unico caso: ci sono state delle sfide aperte, come quella su codegolf.stackexchange.com che invitava a scrivere un HW senza usare nessuno dei caratteri seguenti:

h, l, w, d , e, o, r, 0, 1, 2 e 7

Per quanto possa sembrare strana, questa è una delle soluzioni (in Javascript) che fa anche un occhiolino all’ASCII Art:

https://codegolf.stackexchange.com/questions/307/obfuscated-hello-world

Infine, HW è entrato anche nel mondo dei linguaggi (non solo dei codici sorgenti) dal 2001, l’anno in cui Cliff Biffle ha inventato HQ9+.

Questo linguaggio nasce dalla constatazione che la maggior parte degli studenti di programmazione cercano degli esempi da cui imparare, e gli esempi sono appunto “hello, world”, la poesia “99 bottiglie di birra” e i programmi che stampano il proprio codice sorgente ( i cosiddetti “quine”, in omaggio a Willard Van Orman Quine, logico statunitense ).

HQ9+ risponde in maniera molto precisa a questa esigenza. Infatti ha solo quattro istruzioni:

  • H scrive “Hello, world”
  • Q scrive il sorgente del programma stesso
  • 9 scrive la poesia “99 bottiglie di birra”
  • + incrementa l’accumulatore

Con HQ+9 abbiamo terminato il nostro viaggio intorno ad “Hello, world”, e speriamo di aver contribuito a dare una visione un po’ più allegra e umanizzata dell’universo della programmazione.

Della solitudine e i suoi rimedi

Nov
22

Chi ha la fortuna di abitare in campagna, o in montagna, o al mare, o insomma ovunque meno che in città, vive in mezzo ad altre vite. Se si guarda intorno scopre cani e gatti, volpi e tassi, scoiattoli e topi; e poi passeri, corvi, merli, upupe. Per non parlare di mosche api e zanzare, farfalle ragni e scarafaggi, vermi e lumache. Ci sono alberi, cespugli, erbe, funghi, muffe e cose ancora più piccole di cui non sappiamo nemmeno il nome. Insomma avete capito.

Ognuno di questi esseri è un soggetto a tutti gli effetti, ha una vita propria che si intreccia con quella degli altri. Fa delle cose indipendentemente da noi, esiste indipendentemente da noi. Ognuno, se ci facciamo caso, ci sorprende. La sensazione generale è che se noi stiamo fermi, il resto del mondo invece si muove.

In un appartamento di città, invece… a parte qualche zanzara, qualche scarafaggio e qualche tarma (ospiti non graditi), qualche animale importato dall’esterno (Fido, Micio e Cocorito), il ficus Benjamin sofferente nell’angolo del soggiorno, la stella di Natale perenne e i gerani sul balcone… insomma, di esseri viventi in un appartamento di città se ne vedono pochini.

In questa scatola piena di oggetti se noi stiamo fermi, non succede niente. Il libro che abbiamo messo in quello scaffale continua a stare lì. Il maglione nello sportello in alto, sepolto sotto gli altri maglioni, non cambia di posto, di colore, di dimensione. Le cose di cui ci siamo circondati non sono soggetti, sono davvero solo oggetti.

E allora si capisce perché uno si circondi di macchine: orologi, lampadine, scaldabagni, radio, televisori, telefoni, computer, ognuno con il suo linguaggio visivo e sonoro, con le lucine colorate, i ronzii, crepitii.

Questi sì che sono soggetti: se carico un orologio, quello va avanti da solo. La radio parla e parla, il televisore mostra cose che io non conosco. Per non parlare di telefoni e computer che completano l’illusione che da qualche parte ci sia qualcun altro come noi, in un appartamento, circondato di macchine amichevoli e autonome. Per non parlare, ovviamente, dei vari Alexa e compagnia, con cui possiamo conversare anche quando l’ultimo degli amici è andato a dormire.

Certo non sono organismi del tutto indipendenti, sono solo giocattoli, nel senso che possiamo sempre spegnerli e riaccenderli a volontà, o almeno così ci sembra. Sono tutto sommato prevedibili, a grandi linee, e questo ce li rende ancora più cari e indispensabili.

Peraltro funzionano bene anche nell’altro senso, come parafulmini. Se dormo troppo, la colpa è della sveglia. Prendo chili nel posto sbagliato per colpa dell’e-reader. Strade violente: me la prendo con la TV. Se c’è una pandemia, la colpa è del PC. Non mi chiama nessuno? E’ colpa del telefonino, che anzi adesso me lo cambio e prendo quello che ha più cose e vedrai te.

Ma allora smettiamola di lamentarci della tecnologia fredda, distante, che ci rende tutti robot e ci fa perdere le capacità empatiche e ci addestra a tarpare la nostra emotività. E’ una storiella che non corrisponde più alla realtà e nemmeno alla nostra esperienza quotidiana.
Questa tecnologia è stata costruita apposta per non essere più fredda e distante: il suo chiacchiericcio continuo, come il borbottio dei robot di Star Wars, è la colonna sonora delle nostre vite. Altro che distante: è sempre più presente e si mette in mezzo proprio come un cucciolo che ci gioca tra i piedi, e che ogni tanto prendiamo a calci.

Questa tecnologia è la nostra coperta di Linus.
Ne parliamo male tutti i giorni, ma non potremmo mai rinunciarci.

Ah, io abito in campagna.

Piattaforme queste sconosciute

Ott
12

Tra le parole più consumate per il cattivo uso quella di cui parliamo oggi è piattaforma. Ne avevo parlato qualche tempo fa qui ma oggi vorrei approfondire perché sono scoraggiato da quanto leggo qua e là.

Platform 9 3/4
Immagine di Oleg Sklyanchuk , CC BY-NC 2.0

Due etti di storia della parola: derivata dal medio francese, in inglese è attestata a partire dal 1550 nel senso di “piano, disegno, progetto”; poi ha perso questo significato metaforico per orientarsi verso uno più letterale. A partire dal XIX secolo si usa in geografia, in tecnica ferroviaria e poi in politica. La piattaforma petrolifera è una cosa piatta, in mezzo al mare, sulla quale ci si sta a lavorare come se fosse un’isola, come se fosse terraferma. E infatti ci sono anche le piattaforme per i tuffi… divertitevi qui a trovare tutti gli usi censiti dal dizionario Treccani. Se cercate il significato di “piattaforma informatica” invece sarete delusi perché è definita piattaforma praticamente qualsiasi cosa, hardware o software, che ne permette altre. E infatti i software per la creazione e gestione di corsi online (che, tanto per ricordarlo ai distratti, NON significa a distanza) potrebbero essere chiamati “piattaforme”, invece che software e basta, quando si volesse sottolineare che non sono soluzioni autosufficienti, ma che sono dei piani dove si può sostare e fare cose come se si fosse a terra, cioè sono delle tecnologie abilitanti ad altro. Oppure per dire che le attività che si fanno lì dentro non sono cablate dentro al software, ma sono optional, moduli autonomi che si possono aggiungere e togliere a piacimento. Ora seguitemi mentre cerco di spiegare cosa possono essere questi moduli: contenuti, pezzi di software, altre applicazioni, e chissà che altro. In questo modo magari riusciamo anche a capire le differenze tra piattaforma, suite, groupware, cloud.

  1. Non tutti i software per l’apprendimento online sono letteralmente piattaforme. Alcuni sono perfettamente autonomi: anche se non è definito a priori ciò che contiene il singolo corso (i contenuti, la loro struttura, le modalità di comunicazione e collaborazione tra corsisti si possono decidere volta per volta), tutto quello che serve si fa lì dentro senza bisogno di aggiunte esterne. Sono ambienti di apprendimento, ma non piattaforme. Non è né un bene né un male in sé: sono il frutto di una scelta e seguono una filosofia precisa con vantaggi e svantaggi. Un paio di vantaggi come esempio: il monitoraggio e la valutazione sono molto semplici, perché tutto quello che corsisti e docenti fanno avviane lì dentro. Inoltre, è molto più facile garantire la privacy degli utenti, perché niente fugge verso altri lidi dove non si sa bene cosa capita ai dati personali. Ci sono ovviamente svantaggi: le attività possibili sono solo quelle previste da chi ha progettato il software; altre attività possono essere suggerite, segnalate, ma non integrate in maniera trasparente nel percorso di apprendimento.
  2. Un software per l’e-learning che sicuramente è una piattaforma è invece Moodle. Moodle è stato chiamato così (Modular Object-Oriented Dynamic Learning Environment) dall’inventore per far notare che è un software modulare, cioè che le attività didattiche non sono cablate all’interno una volta per tutte ma sono pezzetti di software che si possono a) aggiungere ad un corso b)aggiungere alla piattaforma e c) aggiungere al repository del codice sorgente di Moodle. La prima operazione spetta all’autore del corso (il docente) la seconda al sistemista che configura la piattaforma, la terza agli sviluppatori che seguono le linee guida e producono nuovi moduli che si possono agganciare alla piattaforma (b) e aggiungere al corso (a).
  3. Questo approccio si basa su due linee di pensiero collegate ma diverse. La prima è quella che pensa le attività come oggetti che si possono descrivere, circoscrivere, prendere da un deposito e riusare. Questa linea di pensiero è quella che è stata resa famosa (e anche presa in giro e vilipesa), con lo standard SCORM: Shareable Content Object Reference Model. Standard inventato dall’Advanced Distributed Learning, presso il Dipartimento della Difesa degli Stati Uniti. Standard che si è evoluto fino all’ultima versione del 2009, e poi è stato abbandonato dagli stessi promotori a vantaggio di un approccio diverso: “qualsiasi cosa può essere un’attività didattica, purché sia in grado di inviare dati sull’utilizzo da parte dello studente secondo un linguaggio standardizzato”. Inviare a chi? Ad una piattaforma (detta Learning Record Store) che non ha uno scopo preciso, ma si limita a ricevere e organizzare i dati in modo che possano essere interrogati dai software di e-learning. Un po’ più avanti, sempre su questa linea tecnico-didattica si colloca lo standard LTI proposto dal consorzio IMS. Qui si tratta, più modestamente, di un protocollo che permette ad una piattaforma di e-learning come Moodle di parlare con un sistema di videoconferenza come se fosse un oggetto SCORM , cioè di inviare i dati di accesso di un utente e ricevere i dati sul suo utilizzo.
  4. La seconda linea di pensiero è quella più strettamente informatica, quella dell’Open Source. Visto che il codice sorgente dei software open source è riusabile anche da altri, è possibile tecnicamente, ma anche legalmente, aggiungere librerie, moduli, oggetti realizzati da altri sviluppatori all’interno del proprio software. Naturalmente, perché non sia un furto, occorre assicurarsi che la licenza originale lo permetta e specificare l’autore iniziale. Prendere il codice altrui e ricopiarlo senza citare è poco diverso da un furto. Questa bella opportunità – che non è tipica delle piattaforme, ma di tutto il software opensource – però nasconde anche dei rischi: siccome è facile copiare e incollare, o includere, non è detto che chi include abbia il tempo di controllare linea per linea il codice sorgente incluso e verificarne la qualità. Potrebbe farlo, tecnicamente e legalmente, ma non è detto che lo faccia. Per questo esistono versioni di software open source (ad esempio, versioni di Moodle) che sono garantite da qualcuno che si è preso la briga di leggere tutto il codice sorgente, eliminare la robaccia e i pezzi sospetti e tenere solo i moduli robusti e sicuri. I software proprietari (non nel senso che sono di qualcuno, ma nel senso che il codice non è opensource) ovviamente non permettono questo tipo di controllo. Di qui l’obbligo previsto dal CAD per la pubblica amministrazione di effettuare sempre una valutazione comparativa che prenda in considerazione il software opensource.
  5. Un altro tipo di piattaforme, nel senso di software non mono-blocco ma modulare, sono le suite per ufficio. Quelle che tutti conoscono oggi sono Google Gsuite e Microsoft Office365, ma le suite per ufficio esistono dalla metà degli anni ’80. Sono collezioni di software indipendenti, online o offline, che dialogano tra loro. Nel caso di software installati sullo stesso computer, questo “dialogare” significa che condividono l’interfaccia e il linguaggio; che si possono copiare e incollare dei pezzi di documento dall’uno all’altro oppure convertire facilmente da un formato all’altro. Nel caso di applicazioni remote, a cui si accede tramite internet, il dialogo è anche a livello di accesso: quando un utente è registrato e fa il login nella piattaforma/suite non ha bisogno di essere registrato anche nei software satelliti ma può passare da uno all’altro senza apparente interruzione. Le applicazioni sono remote nel senso che stanno su computer accessibili solo via Internet, ma anche perché per ragioni di convenienza, cioè di flessibilità e di sfruttamento degli investimenti fatti, sono divise in pezzetti sparsi su più computer. In questo secondo caso si parla di cloud, per indicare appunto che l’utente non ha modo di sapere esattamente dove stanno le applicazioni che usa, i documenti che produce e in generale i propri dati. E’ una situazione di incertezza che è diventata problematica con l’applicazione del GDPR. Peraltro parliamo qui di suite “per la produttività”, non di software per l’apprendimento, anche se è molto percepibile il tentativo di far passare una cosa al posto di un’altra cambiando terminologia. Non è solo una questione di marketing, ma anche di modello sottostante: se la scuola è palestra di vita, niente di anormale che fin da piccoli occorra abituarsi ad usare un word processor, un foglio di calcolo, un database. Si può essere d’accordo o meno con questa impostazione, ma va tenuta ben presente.
  6. groupware sono ancora diversi: sono software per la collaborazione e il lavoro di gruppo online. L’esempio più noto oggi è Microsoft Teams, ma anche in questo caso i primi sistemi del genere datano da almeno i primi anni novanta, se non si vuole considerare NLS di Engelbart che era addirittura della fine degli anni ’60’. L’unità di significato minima qui è il gruppo di persone, non la persona, e quindi le funzionalità principali sono appunto quelle che consentono di comunicare tra i membri del gruppo (chat, bacheca condivisa, videoconferenza), di scambiarsi files, organizzati in cartelle fisse o personalizzabili, e organizzare il lavoro (agenda e rubrica, progetti e tracciamento delle attività). Per un fenomeno ben noto di marketing aggressivo e concorrenza spietata per cui ogni software vuole diventare piattaforma, e quindi sostituire tutti gli altri, ai groupware si possono aggiungere altri pezzetti di software, e quindi diventa difficile distinguerli dalle suite di cui sopra.
  7. Tra le funzionalità dei groupware quella che oggi è davvero irrinunciabile (ma c’era già in NLS…) è la videoconferenza; il che complica le cose, perché si tende a confondere un groupware che ha al suo interno la videoconferenza (come Teams) con un sistema di videoconferenza vero e proprio (come Zoom o Jitsi). Chiamare Zoom una piattaforma è chiaramente improprio, sia perché non è una base dove si aggiungono moduli, sia perché parlare guardandosi in faccia non è sufficiente per collaborare.
  8. Se è vero che collaborare è sicuramente una parte importante del processo di apprendimento di gruppo, e collaborare e comunicare online diventa fondamentale quando la collaborazione fisica e la comunicazione orale non-mediata è impossibile, va tenuto presente che una suite di produttività per ufficio o un software pensato per supportare un gruppo di lavoro non sono necessariamente ambienti ottimali per l’apprendimento. Di qui tante durezze, giri improbabili, gerarchie e controlli esagerati, funzioni inutili e altre inspiegabilmente mancanti.

Per chiudere, spero che la parola piattaforma ora sia più chiara per tutti e venga usata in maniera coerente (e questa sarebbe una magra soddisfazione), ma soprattutto che non ci si butti ad usare X solo perché qualcuno ha sentito dire da qualcun altro che “è una piattaforma per la didattica digitale”.

The body snatcher (carrozze, videoconferenze ed educazione)

Apr
07

Tempo fa, a proposito degli ipertesti, scrivevo che il digitale è un vampiro, che succhia la realtà. Avrei dovuto scrivere che è più simile agli ultracorpi del film omonimo del 1955 (che penso tutti conoscano, in una delle sue versioni). Il titolo originale del film era “The body snatchers”, i ladri di corpi.

Secondo Bolter e Grusin (che all’epoca non conoscevo), il digitale “remediates” l’analogico, secondo una dialettica propria del processo mediatico, di tutti i media: la fotografia rimedia la pittura, etc. Mescola insieme media diversi (hypermediacy) e così facendo tenta di diventare trasparente (immediacy) come medium.

A me sembra che il digitale faccia una cosa un po’ diversa e specifica. Imita e sostituisce. Copia con il preciso scopo di prendere il posto dell’originale, come gli ultracorpi appunto.

La maggior parte degli artefatti digitali nasce come imitazioni di artefatti analogici. A partire da immagini e suoni digitali, che sono campionamenti discreti e che vengono rimesse insieme con un software per dare l’illusione della realtà. Lo smartphone imita il telefono, non solo nel senso che ne assume tutte le funzioni, ma nel senso che digitalizza tutte le sue parti (la rubrica, la selezione, la codifica della voce, l’invio e la ricezione) e le trasforma in software e dati.

Una volta fatta questa operazione, l’intero oggetto telefono si può rappresentare dentro un altro sistema digitale, cioè un computer. Per esempio ci sono simulatori di videogiochi, ma anche simulatori dei computer con cui si giocava a quei videgiochi.

La pagina del quaderno e quella del libro, compreso l’inchiostro, e poi l’indice e la copertina, sono stati digitalizzati. A questo punto, l’hardware che li contiene e permette l’interazione da parte di organismi fisici come noi diventa quasi indifferente (immediacy). Di qui, tra l’altro, l’ambiguità e confusione tra ebook (contenuto), ebook reader (software) ed ebook reader (hardware contenente).

Va anche detto che di solito si pensa solo ai dati che vengono convertiti e si mette meno l’accento sul software, che invece è essenziale per imitare i comportamenti che ci sono consueti con quei dati. Se i dati possono essere semplicemente campionati e riprodotti, le funzioni invece vanno analizzate e ricreate (poggiare la punta della penna sul foglio, premere, trascinare, staccare; e poi cancellare, sottolineare, etc.).

Non affronto questo tema per denunciare i rischi della virtualizzazione e per decantare la bontà del buon vecchio oggetto fisico o della sua rappresentazione analogica. Voglio solo sottolineare il fatto che questa capacità di replicare completamente per sostituire è tipica del digitale ed è una rottura rispetto a tutta la storia dei media precedenti.

Qual è il vantaggio di questo processo? Sullo stesso hardware posso simulare infiniti oggetti diversi. Quindi mi costa di meno. Con lo stesso linguaggio di programmazione posso creare infinite simulazioni. Quindi ottimizzo le competenze. Lo stesso stile di interazione si può applicare a infiniti ambiti diversi. Quindi ne facilito l’uso.

Queste, in breve, le ragioni economiche e sociali che hanno spinto il digitale fino alla situazione di dominio che oggi gli riconosciamo. Ma più interessante è, a mio parere, quello che succede quando ci si allontana dall’imitazione e si provano a creare modi di interazione del tutto nuovi. Interessante soprattutto per i fini educativi.

___

L’automobile è stata concepita, e poi presentata e quindi venduta, come carrozza senza cavalli. Si è portata dietro questo schema antico, per evolversi e allontanarsene un po’ alla volta (ma ancora parliamo di potenza in termini di cavalli). Non può staccarsi troppo perché trova dei limiti: il guidatore e il passeggero devono essere seduti comodamente, protetti dalle intemperie, ma contemporaneamente devono poter vedere la strada, etc. Fa qualcosa di diverso del carro con i cavalli: corre molto di più, è più piccola, ha maggiore autonomia, può rimanere ferma per mesi e poi ripartire, se non è in funzione non gli si deve dare da mangiare. Ma in fondo niente di radicalmente diverso dal carro.

Un po’ come la videoconferenza usata per le lezioni a distanza. Oggi è usata come una cattedra molto, molto lontana. Ancora non riusciamo a immaginarne un uso in quanto tale, non come simulazione di qualche altra cosa.

Spostiamoci un attimo nel mondo del coding. Guardando agli ambienti di programmazione visuale (sì, parlo di Scratch; ma pure di Snap! e di tanti altri) viene inevitabilmente in mente il LEGO come metafora. Ora immaginiamo una simulazione digitale proprio del LEGO originale (esiste davvero, in una versione più semplice di come la descrivo nel seguito, http://ldd.lego.com/en-us/). I mattoncini sono parallelepipedi colorati su uno schermo. Si possono girare in tutte le direzioni, spostare, congiungere.

Quali sarebbero le differenze con il LEGO del mondo reale?

  1. il numero dei mattoncini è teoricamente infinito (non lo è in pratica perché la il software, e la macchina su cui gira, hanno dei limiti fisici)
  2. è facile assegnare ai mattoncini digitali altre proprietà o comportamenti. Potrebbero diventare trasparenti, crescere; ma anche suonare, muoversi da soli, staccarsi e attaccarsi dopo un certo tempo.
  3. sulla base di queste proprietà si possono immaginare regole, giochi, interazioni che con i mattoncini di plastica non sarebbero possibili.
  4. queste nuove regole e interazioni possono essere immaginati da chi ha progettato il software, ma anche da chi lo usa, ammesso che il software lo permetta

Insomma questa immaginaria versione digitale del LEGO potrebbe essere riprogrammata, anche dai bambini. Questa è una differenza importante. Non è solo questione di portabilità, leggerezza, facilità, ma di legge costitutiva, di regole che sono in mano all’utente e non solo al produttore.

Qui il digitale mostra la sua potenzialità.

Ecco, questa è la strada. Staccarsi dai limiti che erano appiccicati all’immagine precedente, il LEGO, la cattedra,la carrozza con i cavalli, e creare qualcosa di davvero nuovo.

Ambienti digitali per l’apprendimento

Mar
09

(Questo articolo ripropone con minime modifiche il Capitolo 1 del testo omonimo, scritto in collaborazione con Morena Terraschi e pubblicato da Anicia nel 2000. Sì. Avete letto bene.)

Ambienti digitali per l’apprendimento

Bisogna essere onesti: la formazione a distanza ancora non convince completamente. Al di là di chi è contrario per principio (gli umanisti che ne temono la freddezza, i luddisti che ci vedono un attacco alla categoria dei formatori), anche chi è stato entusiasta all’inizio comincia ad essere critico e a non vedere più solo gli aspetti positivi. Questo è senz’altro un bene, perché un atteggiamento acritico e un ottimismo generalizzato hanno permesso di catalogare sotto la voce “formazione a distanza” metodi, tecniche e ambienti molto diversi tra loro, qualche volta anche poco convincenti.

Ma al di là dei limiti della tecnologia, che sono sempre superabili (così almeno dicono i tecnologi…), la domanda di fondo resta questa: siamo sicuri che si possa davvero imparare qualcosa a casa propria, senza un libro e senza la presenza di un vero insegnante, ma soli davanti ad un computer?

È una domanda ingenua, se si vuole, ma non bisogna aver paura di porla. Se il vestito dell’imperatore è una truffa, o nel migliore dei casi un’illusione collettiva, meglio saperlo subito.

A chi sottoporre la questione? Alla pedagogia, naturalmente, anzi alle pedagogie.

I modelli pedagogici prevalenti in questi ultimi cinquanta anni (comportamentismo, cognitivismo, costruttivismo) hanno diversamente descritto il rapporto tra soggetto che apprende e ambiente di apprendimento. Ognuno di questi modelli ha informato di sé la maniera di utilizzare i computer in campo educativo. Anche oggi, ogni software didattico può essere rapportato all’uno o all’altro modello, anche a prescindere da quello che ne dicono gli autori

Facciamo un breve riassunto.

Per il comportamentismo, che negli anni ’50 in nome della scienza sperimentale tentava di espungere l’introspezione e tutta la psicologia che sapeva troppo di “metafisica ottocentesca” dalla teoria dell’apprendimento, il soggetto è una scatola nera di cui non si può sapere nulla. Non ha senso parlare di mutamenti interni del soggetto perché non abbiamo un mezzo per verificarne la presenza; quello che si può fare è modificare la maniera in cui il soggetto interagisce col mondo esterno. Gli effetti dell’apprendimento sono misurabili con test oggettivi, e questa è la sola cosa che interessa.

Il computer è usato dal comportamentista come macchina per somministrare informazioni e batterie di test.

Molti sistemi di FaD sono ancorati a questi solidi presupposti, a dispetto delle pretese di modernità accampate con l’uso di effetti speciali o di agenti software intelligenti. In questa visione, è sicuramente possibile apprendere qualcosa con un computer, anzi le garanzie di standardizzazione dell’informazione che l’informatica offre sono largamente sufficienti e insuperabili.

Per il cognitivismo, che ritiene eccessivamente modesta la proposta del comportamentismo, possiamo invece parlare di come, in seguito ad un apprendimento, sia venuta a modificarsi la rappresentazione interna nel soggetto. Apprendere significa arricchire il proprio patrimonio di conoscenze sia in termini di nuovi dati, sia – e soprattutto – in termini di ristrutturazione dei dati presenti attraverso la creazione di nuovi schemi che strutturano quei dati.

Il cognitivismo ha permesso di far partire molti progetti di ricerca sulla simulazione del ragionamento e dell’apprendimento all’interno di una macchina digitale. L’uso di mappe grafiche per la rappresentazione di ambiti concettuali complessi, mappe che non sono solo presentazioni per l’occhio umano ma anche grafi percorribili da un algoritmo, è un buon esempio – per quanto raro – di come una riformulazione adeguata di conoscenze sia a sua volta un atto che produce conoscenza.

Comportamentismo e cognitivismo, per quanto opposti fra loro, hanno però in comune una concezione statica dell’apprendimento, in cui se il soggetto cambia, lo fa soltanto all’interno dell’universo mentale, mentre l’ambiente in cui avviene l’apprendimento resta immutato. Sembra un’ovvietà, ma non lo è.

Come scrivevamo in un testo di qualche tempo fa:

“L’analisi tradizionale dell’educazione individua due elementi separati: l’io ed il mondo esterno. Questi elementi sono opposti, tanto sul piano morale che su quello conoscitivo. Dal punto di vista etico, si ha da una parte la soggettività irriducibile del bambino, sospinto dal principio di piacere, e dall’altra la società degli adulti, regolata dalla morale del dovere. Dal punto di vista conoscitivo, si ha una coscienza “tabula rasa” da un lato, e la totalità delle conoscenze che sono patrimonio della scienza dall’altro.

Per conciliare la differenza tra i due elementi si inserisce tra di essi la mediazione di un istituto educativo (la scuola), i cui costituenti (docente, libri, etc.) devono servire a portare il soggetto verso l’accettazione delle leggi morali e scientifiche del mondo esterno. La scuola è quindi, da un punto di vista teorico, un deus ex machina che permette di unificare due concetti pensati come opposti.” (Io bambino, tu computer, Anicia, 1993)

L’educazione sarebbe, da questo punto di vista, il tentativo di controllare dall’esterno l’apprendimento meglio di quanto possa accadere naturalmente, attraverso la creazione di ambienti artificiali (la scuola, la bottega) o di strumenti che accelerino il processo (il libro, i software didattici, i sistemi per la FaD).

Nel costruttivismo, il terzo grande filone della pedagogia moderna, non si può parlare di apprendimento a prescindere da tre elementi: il soggetto, il contesto e il tempo. C’è sempre un chi, un dove e un quando dell’apprendimento: l’apprendimento è sempre situato.

Ma soprattutto, il costruttivismo abbandona tutte le metafore di tipo “fotografico”: la conoscenza non viene acquisita, cioè ricopiata dentro la mente, ma elaborata dalla mente. E naturalmente ogni elaborazione è personale e originale.

C’è un Apprendimento con la A maiuscola, che è quello cui di solito si pensa, codificato in momenti specifici della vita e a volte in luoghi specifici (la scuola, la bottega).

E c’è poi un apprendimento con la a minuscola, che è quello che avviene tutti i giorni, e che coinvolge tutti, e che è semplicemente il processo con il quale un organismo acquisisce nuove informazioni, le fa proprie e le riusa per adattarsi meglio all’ambiente.

Tutti apprendiamo in continuazione, i bambini come gli adulti, a scuola come per strada. I bambini, certo, sono professionisti dell’apprendimento; si può anzi dire che apprendere è il loro modo naturale di porsi di fronte al mondo; ma questo non vuol dire che l’apprendimento sia un loro appannaggio esclusivo.

Forse si può dire che l’apprendimento non è nemmeno un comportamento così tipicamente umano come ci piacerebbe pensare. Non soltanto gli animali apprendono, ma anche le piante e i batteri, e insomma tutti gli esseri viventi in quanto modificano il loro comportamento costruendo schemi nuovi che funzionano meglio di quelli precedenti. Provate a immaginare…

Una festa. Dal buio e freddo esterno entri in un locale chiuso, ti togli il cappotto, e cominci a percepire colori, forme, suoni.

I suoni si precisano: lingua parlata (la tua?), voci che si precisano in parole, e che cominciano a costituirsi in frasi.

Anche le immagini si precisano: da semplici zone chiare e scure acquistano colori, si catalizzano in oggetti, o in corpi e volti di persone, e alcuni di questi in volti conosciuti di amici.

La situazione diventa sempre più strutturata: di là il buffet, qui il divano con un posto vuoto, in fondo la finestra resa famosa da Nanni Moretti in uno dei suoi primi film.

Contemporaneamente, l’ambiente si modifica. Individuata una sedia libera ti siedi, e quel posto vuoto non c’è più, il gruppo di persone che ti pareva più interessante cambia di composizione, cominci a parlare e l’argomento della conversazione cambia con il tuo intervento nel discorso.

Altre persone entrano nella stanza, e percepiscono l’ambiente diversamente, anche a causa del mutamento prodotto dalla tua azione.

Questa storia si può raccontare da molti punti di vista: quello della sociologia (le interazioni tra i gruppi di individui), quello della psicologia della percezione (l’organizzazione dei dati sensoriali), quello dell’antropologia (i ruoli assunti). La pedagogia ne sceglie uno specifico, che consiste in un’attenzione alla maniera in cui il soggetto acquisisce il controllo dell’ambiente.

L’apprendimento non è un fenomeno particolare, ma la descrizione di un processo da un punto di vista particolare. E la pedagogia, come scienza dell’apprendimento, racconta la maniera in cui il soggetto acquisisce il controllo dell’ambiente.

Man mano che il soggetto procede la sua esplorazione dell’ambiente acquista nuove capacità e potenzialità; dal canto suo l’ambiente stesso viene realmente a mutare nel corso del processo, assoggettato a nuove leggi introdotte dal soggetto. Avete letto bene: nell’apprendimento non si modifica solo il soggetto, ma anche l’ambiente.

L’umanità ha scoperto da tempo che utilizzare degli ambienti appositamente progettati per cedere il controllo ai soggetti è più efficace e più sicuro che lasciare i soggetti imparare da soli nel mondo “adulto”.
La bottega, la scuola, il libro sono esempi di questo tipo di ambienti “a orologeria”.

Allo stesso modo, un ambiente digitale per l’apprendimento è tale proprio perché consente, e anzi invita, lo studente a modificarlo per renderlo più controllabile. Un ambiente di apprendimento digitale è progettato per cedere il controllo in maniera progressiva, fino ad abdicare nei confronti del soggetto che apprende. Se resta sempre uguale, non è educativo – cioè non permette apprendimento.

Torniamo alla FaD.

Parlare di Formazione a Distanza sembra implicare due premesse:

  • che la FaD sia appunto un caso particolare di formazione;
  • che la caratteristica principale della FaD sia il suo svolgersi tra soggetti (docenti e studenti) che fisicamente non si trovano a condividere lo stesso spazio.

Questi due presupposti apparentemente innocenti sono in realtà pieni di implicazioni pesanti.

1. La FaD è un caso particolare di formazione?

“Formazione” è un termine dinamico che porta con se l’idea di un soggetto che non possiede la forma, ma che la riceve da qualcuno. Formare è d’altronde un verbo transitivo, e il formatore è colui che possiede la forma e che plasma – platonicamente – la materia cognitiva bruta del discente per precisarla e definirla. La FaD, secondo questa interpretazione, dovrebbe permettere ad un formatore di rendere oggettiva la forma che possiede e applicarla ripetutamente a soggetti diversi. Invece è chiaro che la FaD è portatrice delle istanze di personalizzazione dell’apprendimento, che è un processo guidato dallo studente più che dal docente (che infatti, più frequentemente, viene denominato tutor). Se c’è ancora chi interpreta la FaD come un artificio tecnico che permette di organizzare una serie di lezioni in videoconferenza, la quasi totalità dei sistemi FaD sono invece veri ambienti di gestione della conoscenza, dotati di funzioni di ricerca, indicizzazione, generazione di percorsi personalizzati, comunicazione.

2. La caratteristica principale della FaD è il suo svolgersi a distanza?

Questo implicherebbe che i benefici che è lecito attendersi sono solo di riduzione dell’attrito, per così dire, cioè di eliminazione di tutti gli ostacoli esterni (fatica, dispendio di tempo e risorse) che mettono in pericolo lo svolgersi tranquillo di un processo formativo tradizionale. Ma se è vero che un processo di FaD può svolgersi anche a distanza, questo non implica affatto che debba svolgersi solo a distanza. Se pensiamo a situazioni geografiche come quelle canadesi o finlandesi, dove clima e distanza rendono infinitamente più conveniente attivare corsi online anziché in presenza, questo significato si impone come l’unico possibile.

La FaD ha modi e caratteri suoi propri, che hanno senso indipendentemente dalla collocazione fisica degli attori.

Noi non pensiamo che questa collocazione della FaD come caso particolare – limitato dal suo svolgersi attraverso uno spazio significativamente esteso – della formazione tradizionale sia la maniera più corretta di pensarla. La FaD è un processo originale, per certi versi parallelo alla formazione, che richiede un ripensamento dei ruoli (studenti e docenti), delle strategie di insegnamento/apprendimento e di quelle di valutazione.

La caratteristica che ci sembra più propria dei processi di apprendimento digitale è il fatto che essi si basano su (e in parte costruiscono), un supporto condiviso, un piano del discorso comune dove tutte le interazioni si svolgono. Questo piano è, per la sua natura digitale, accessibile indipendentemente da tempo e spazio. E’ un piano dove i soggetti costruiscono insieme conoscenza, dove simulano la realtà attraverso dei modelli e verificano l’aderenza dei modelli alla realtà. Che si tratti di una realtà fisica o linguistica, non cambia poi molto.

Anche per sottolineare questa originalità della FaD noi preferiamo parlare di apprendimento digitale (che ci sembra la migliore traduzione italiana possibile di e-learning): non un apprendimento del digitale, ma un apprendimento che si svolge all’interno di un ambiente che è prima di tutto digitale, poi (forse) anche mediato dalle reti e dai protocolli delle telecomunicazioni.

Le implicazioni di questa caratterizzazione forte della FaD come apprendimento digitale sono fortissime per tutte le questioni relative alla valutazione: se tutto passa attraverso la piattaforma, e viene registrato, il docente ha a disposizione una quantità di dati enorme su cui applicare l’analisi valutativa. Non serve necessariamente interrompere il processo di apprendimento con dei test, ma si può valutare in maniera continua, in maniera realistica a partire dalle azioni degli studenti.

Ma più importanti ancora ci sembrano le conseguenze sul piano dell’apprendimento: la conoscenza presente in un corso non si esaurisce con quella prevista dal suo autore e codificata nelle unità del corso. Anche gli studenti e i tutor possono aggiungere (o modificare) le informazioni originali. Cosa che di solito avviene anche in un corso in presenza; solo che in quel caso di tutto questo lavoro ulteriore di costruzione non resta traccia, mentre in un corso online tutte le aggiunte sono conservate insieme all’originale.

Provate a pensare ad un corso come ad una pellicola in cui il fotogramma 1 contiene le informazioni fornite dall’autore, il fotogramma 2 contiene le modifiche e le aggiunte fatte dagli studenti il primo giorno, e così via per tutti i giorni in cui il corso è stato attivo. Il corso in senso proprio è costituito non dal primo fotogramma, e nemmeno dall’ultimo, ma dall’insieme di tutti i fotogrammi (il film). Un insieme che con strumenti adeguati potrebbe essere “proiettato” oppure semplicemente analizzato per estrarne ulteriori informazioni: lo stile cognitivo dei partecipanti, la maniera di affermarsi delle idee migliori, il processo evolutivo che rende certi concetti inadeguati e altri vincenti, e così via.

Probabilmente, in un futuro vicino il termine “formazione” tout court coinciderà con la FaD, e solo pochi potranno permettersi una vera formazione in presenza, che verrà vista come un caso particolare di FaD non digitale.

Poeti, navigatori, santi e cuochi: cosa insegna la linguistica computazionale al coding?

Gen
31

L’incontro tra informatica e letteratura avviene ufficialmente, almeno in Italia, quando nel 1949 Padre Busa SJ si dedica all’immane compito di compilare un Index Thomisticus, cioè un repertorio di tutti i termini utilizzati dall’Aquinate nelle sue opere. Per farlo, chiede il supporto dell’IBM (parlando con il suo fondatore, Watson) e inizia un lavoro di lemmatizzazione durato trent’anni. Dopo la versione cartacea (1980) e quella su cdrom (1989), nel 2005 nasce la versione web (http://www.corpusthomisticum.org/it/index.age).

La linguistica computazionale si presenta così con un aria seriosa, doppiamente sostenuta dall’oggetto (il testo classico) e lo strumento (il programma di lemmatizzazione e ricerca), per non parlare dello scopo scientifico.

Ma ci sono stati altri incontri meno nobili, come quello tra il libro cartaceo Cent Mille Miliards de Poèms di Raymond Queneau e il web. Per chi non avesse avuto la fortuna di sfogliare quel meraviglioso oggetto, si tratta di un libro pubblicato nel 1961 che raccoglie dieci sonetti di quattordici versi ognuno. La peculiarità che lo rende unico è la pagina è tagliata in orizzontale in modo da rendere ogni verso un oggetto autonomo; è possibile così leggere (e costruire con la mente) un sonetto costituito, poniamo, dal primo verso della prima pagina, il secondo dalla decima, il terzo dalla quinta, e così via. Le possibilità totali sono 1014, cioè appunto 100.000.000.000.000. Di questa macchina per generare sonetti ne esistono varie versioni consultabili su web, come per esempio questa: http://www.growndodo.com/wordplay/oulipo/10%5e14sonnets.html

Queneau realizza (cioè “dimostra la possibilità”) di qualcosa che nel cielo delle invenzioni letterarie era ben nota. A partire per lo meno dalla macchina creata dagli scienziati dell’Accademia di Laputa:

La superficie risultava di vari pezzetti di legno, grossi press’a poco come dadi, alcuni di maggiore dimensione degli altri. Erano tutti congiunti da esili fili di ferro. Incollata sopra le quattro facce dei pezzetti di legno era della carta, e su questa si trovavano scritte tutte le parole della loro lingua, coniugate nei diversi modi e tempi e declinate nei vari casi, ma senza ordine veruno. Il professore m’invitò a prestare attenzione, ché appunto s’accingeva a mettere in moto la macchina. Ciascun discepolo prese, al cenno del maestro, un manico di ferro (ce n’erano quaranta fissati intorno agli orli della macchina) e d’un tratto lo fece girare. Naturalmente la disposizione delle parole cambiò in tutto e per tutto. Il maestro ordinò allora a trentasei scolari di leggere pian pianino i vari righi così come apparivano sulla macchina; e quando quelli trovavano tre o quattro parole unite insieme che potevano far parte d’una sentenza, le dettavano ai quattro rimanenti discepoli che fungevano da scrivani (Jonathan Swift, I viaggi di Gulliver, Traduzione di Carlo Formichi, a cura di Masolino d’Amico, Mondadori, Milano, 1982, p. 393).

passando, naturalmente, per Borges, Levi, Landolfi e Dahl. Molti altri esempi sono citati in questa trascrizione di una bellissima conferenza del 2015 tenuta da Paolo Albani (a meno che non sia anche questo un testo generato automaticamente) che potete leggere qui: http://www.paoloalbani.it/Letteraturacombinatoria.pdf.

Cosa mostra davvero questo strano artefatto, nella versione cartacea come in quella digitale? Che la letteratura (e in particolare la poesia) non è tutta intuizione ed espressione libera. Che il gioco tra sistema e creatività, tra regola ed eccezione, non è proprio così chiuso come sembra. La poesia, in particolare, nasce proprio dal vincolo (tematico, formale), come orizzonte e come sfida. Non lo dico io, lo dice Calvino: la letteratura è

“un’ostinata serie di tentativi di far stare una parola dietro l’altra seguendo certe regole definite, o più spesso regole non definite né definibili ma estrapolabili da una serie di esempi o protocolli, o regole che ci siamo inventate per l’occasione cioè che abbiamo derivato da altre regole seguite da altri” (Cibernetica e fantasmi. Appunti sulla narrativa come processo combinatorio, in: Una pietra sopra. Discorsi di letteratura e società, Einaudi, Torino, 1980, pp. 164).

E cosa fa il poeta quando crea, se non andare a pescare nella sua memoria linguistica e scegliere combinazioni di parole, vincolate da regole precise (come il metro o la rima)? Certo, la scelta è anche governata dal significato – in maniera difficile da precisare. Il poeta parte con l’idea da esprimere e cerca le parole più adatte? Oppure si lascia guidare dalle parole stesse, sfruttando somiglianze fonetiche, rimandi per analogia o opposizioni? O ancora, più probabilmente, attua un misto delle due strategie? Insomma: come si scrive, praticamente, una poesia?

E di qui l’idea di proporre delle attività didattiche di coding intorno ai temi della forma e della variazione, delle categorie, dell’accettabilità. In un periodo in cui il machine learning sembra riproporre il vecchio mito dell’intelligenza artificiale, viene voglia di ragionare intorno ai processi creativi anche utilizzando paradossi, e di provare a costruire un automa in grado, se non di scrivere poesie originali (come questo: http://thinkzone.wlonk.com/PoemGen/PoemGen.htm, o quest’altro fatto addirittura in Scratch che lavora per sottrazione da una poesia di Walt Whitman: https://scratch.mit.edu/projects/12331423/) almeno di inventare ricette sempre nuove, che tutto sommato sono sempre forme di testo vincolate, come questa: http://www.lynxlab.com/staff/steve/public/ricette.

Per restare nel dominio letterario, due modesti esempi di macchine figlie di quella di Queneau (ma che pescano nel testo di due classici sempreverdi come l’Inferno di Dante Alighieri e l’Orlando Furioso di Ludovico Ariosto) li trovate qui http://www.lynxlab.com/staff/steve/public/inferno e qui http://www.lynxlab.com/staff/steve/public/orlando. Oltre a Queneau, questi due oggetti digitali si ispirano più precisamente a “Il centunesimo canto. Philologica dantesca“di Luca Chiti, che è un meraviglioso esempio di centone umoristico che “crea” un intero canto giustapponendo versi esistenti ma dandogli un senso completamente nuovo. Per realizzarli, ho dovuto affrontare problemi letterari, come la definizione di rima, di struttura metrica, di novità e ripetizione (oltre che qualche problema informatico, come il loop infinito o la conversione dei caratteri in UTF-8). Non ho seguito alla lettera le indicazioni di Nanni Balestrini, ma ci sono andato vicino. Ed ecco apparire terzine più o meno improbabili come la seguente:

Parlando cose che ‘l tacere è bello
rispuosemi: «non omo, omo già fui
venimmo al piè d’un nobile castello

o come questa:

Nel nome che sonò la voce sola
poscia vid’io mille visi cagnazzi
cosí vidi adunar la bella scola

Una valutazione estetica del risultato? Non è l’obiettivo, anche se può essere divertente provare e riprovare, fino a far emergere dei frammenti di senso che possono essere anche divertenti. Ma quelle che mi paiono importanti, come sempre, sono le domande che emergono ogni volta che si prova a realizzare un modello funzionante di una teoria: come si riconosce una rima? Come si produce una struttura metrica? Come si ottiene un testo casuale sempre diverso? Come si riconosce che il testo non è stato scritto da un poeta umano?

Mi sembrano tutte domande legittime da porsi in una classe che studia letteratura: portano con sé riflessioni e discussioni che integrano, anche se non sostituiscono, l’apprendimento di nomi di forme di testo come “trimetro scazonte” o “endecasillabo sciolto” o di opere particolari.

E ancora una volta mostrano come la costruzione reale di un programma possa essere un’attività didattica sensata al di là di ogni mitologia computazionale.

 

Oltre il giardino. Del codice.

Ott
29

Presidente: Lei è d’accordo con Ben? Pensa che possiamo stimolare la crescita con incentivi temporanei?
Chance: Fintanto che le radici non sono recise, va tutto bene, e andrà tutto bene, nel giardino.

Il surreale film del 1979 “Being there” (in Italiano “Oltre il giardino”) interpretato, come si dice, magistralmente da Peter Sellers è troppo noto per doverne fare un riassunto. Il film parla della volontà di trovare modelli a tutti i costi, del ruolo della televisione, del vuoto di valori e di altro.
Ma a me piace soprattutto la metafora del giardino. O meglio, quella che tutti – tranne Chance Gardiner – interpretano come una metafora dello Stato e della sua cura.

Qui da me tutti hanno un casa col giardino. Però il rapporto col giardino (e anzi con la natura in generale) è molto diversificato. Almeno tre categorie sono facilmente riconoscibili:
1. estetica: prato inglese, statue, alberi di rappresentanza (magnolia)
2. funzionale: orto + frutteto, niente verde inutile
3. negazionista: cemento e muri; poi eventualmente vasi
Solo che io non mi ritrovo in nessuna di queste categorie. E si vede dal fatto che tutti quelli che passano guardano, scuotono la testa e mi dicono gentilmente: “Ma ti serve aiuto per tagliare tutta questa boscaglia?” La boscaglia in questione sarebbe il mio giardino. Che è fatto di tante piante diverse, ognuna con una storia, una curiosità, un modo di crescere e di lottare con le altre, una personalità, uno stile. Ci sono tracce di piante precedenti, promesse di piante future. Alcune le ho portate io da lontano, altre me le hanno regalate, altre sono nate da sole. Piante che mi ricordano persone, luoghi, momenti.

Qualche tempo fa mi sono accorto che anche per il rapporto con il digitale valgono più o meno le stesse categorie di sopra: chi lo vede come un accessorio di moda, chi come un utile strumento, chi fa finta che non esista. Non c’è possibilità di dialogo tra queste visioni così diverse, e ognuno guarda il giardino dell’altro con disprezzo nemmeno troppo celato.
Poi c’è chi il giardino non lo vuole per niente, ma è felice di visitare quello degli altri. Più in generale, si potrebbe dire che ci sono i nomadi-cacciatori-raccoglitori, che navigano e prendono quello che gli serve, e gli stanziali-allevatori-coltivatori, che circoscrivono uno spazio e ne controllano lo sviluppo. I primi hanno uno sguardo, come dire?, grandangolare; i secondi montano un macro. Oppure: lo sguardo dei nomadi percepisce le differenze, quello dei coltivatori le crea (un po’ come lo sguardo di Ciclope, avete presente?).
All’interno di questa metafora, programmare è coltivare alberi digitali. I programmi, come gli alberi, sono organismi che se va tutto bene crescono, si sviluppano. Hanno una vita propria (ebbene si) e a volte non fanno quello che uno si immaginava che facessero. Restano piccoli, o esplodono all’improvviso; intrecciano le radici con altri alberi, sfruttano lo stesso terreno, si fanno ombra tra loro. Gli alberi, come i programmi, anche quando muoiono vengono riusati per fare altro, da noi o da altri organismi. Si riproducono con i semi, o, al limite, diventano humus per altri alberi.
Nella coltivazione dei programmi non si parte dal nulla: infatti gli alberi non si seminano, si piantano alberelli giovani (e si, c’è la questione dell’opensource…). O meglio, veramente qualcuno molto bravo e un po’ presuntuoso lo fa, ma è difficile e lungo scriversi tutto da zero; più facile utilizzare librerie, interpreti e compilatori.
I programmi si potano: si tolgono rami secchi, o si indirizza lo sviluppo in una certa direzione, per avere una certa forma finale o per avere un certo quantitativo di frutti. Si innestano con rami di altre specie perché la struttura deve essere robusta e resistente. Si curano le malattie, si eliminano i parassiti (i bug…).

Non è facile coltivare un albero. La difficoltà più grande non è la tecnica spicciola (tagliare, zappare intorno alle radici) ma la visione d’insieme. Per esempio io ho piantato un acero troppo vicino alla casa e troppo vicino ad un giovane castagno. Per i primi quattro cinque anni, l’acero è restato più o meno uguale. Poi improvvisamente ha cominciato a crescere. Il risultato è che il castagno, che è più lento, è cresciuto storto cercando sole e aria, e l’acero fa ombra ai pannelli solari sul tetto. Ma quando ho piantato il giovane acero era alto quaranta centimetri, me l’ero riportato da una passeggiata nello zaino. Ora sarà alto quindici metri e non accenna a fermarsi. Non ho saputo “vederlo” da grande, nel contesto dello sviluppo del resto del giardino. Gli esperti me l’avrebbero detto subito: non lì. Oppure dovevo tagliargli la cima dopo due-tre anni per farlo allargare più in basso.
La progettazione e lo sviluppo di un software ha le stesse difficoltà. Bisogna impostare la struttura in modo che sia solida e resistente, scegliendo il linguaggio o il framework adeguato, andando a vedere cosa hanno fatto gli altri nei loro giardini. Poi bisogna sapere vedere in avanti, immaginarlo crescere, decidere da che parte piegarlo, tagliare delle aree morte o che daranno fastidio ad altri software. E durante tutta la sua vita bisogna tenerlo pulito dai bug, controllare che non ci siano vermi che ne rodono il tronco, parassiti che inseriscono uova che esploderanno più avanti.

A che serve coltivare alberi? Beh, dipende. Alcuni sono belli, altri fanno ombra, altri portano frutti o legna.
A chi va insegnato a coltivare alberi? In linea di principio, a tutti; come tutti, secondo me, dovrebbero saper scrivere un racconto, disegnare o suonare uno strumento. Perché è fonte di un piacere immenso – quello di vedere un organismo crescere – e perché permette di condividerlo con gli altri.
Bisogna essere professionisti, avere un giardino perfetto? No, non tutti. Basta anche un limone sul terrazzino. Ma essere in grado di apprezzare un albero quando lo si vede, quello si; e non solo “uh quant’è bello”, ma saper vedere attraverso e indietro, cos’è, da dove viene, come è cresciuto, come crescerà.

E la programmazione? Anche quella va insegnata a tutti i bambini? Qui bisogna stare attenti a quello che si scrive, e siccome ne ho scritto pure troppo altrove, passo. Qui mi accontento della metafora, che è utile quando fa riflettere da un punto di vista nuovo e suggerisce idee.

Però anche in questo caso mi ritrovo (spesso) ad essere l’unico appassionato dalla boscaglia digitale e a partecipare amorevolmente a tutta la complessità dei suoi organismi, piantando qui, potando là, e poi godendomi il risultato. Non lo faccio (più) in maniera quotidiana, nel senso che intervengo solo marginalmente nelle scrittura di codice sorgente, che scrive chi è molto più bravo di me. Mi appunto ancora delle idee, o ripesco degli schemi di anni fa in attesa del momento in cui ci sarà tempo e risorse per applicarli. Vado in giro a curiosare per i vivai e riporto qualcosa a casa; oppure immagino giardini che poi altri dovranno coltivare.

Chi passa mi dice ancora: ma vuoi una mano per cancellare tutto questo pasticcio? Ma non era meglio fare il rivenditore di Moodle?

Curriculi digitali opensource

Ott
25

Il bando http://www.istruzione.it/scuola_digitale/curricoli_digitali.shtml per i curricoli digitali attualmente in corso (scade il 10 Novembre 2016) prevede 4,3 M€, riservati alle reti di scuole pubbliche e paritarie, destinati alla produzione di 25 curricoli digitali su 10 tematiche, divise in Fondamentali e Caratterizzanti, secondo il seguente schema:

Fondamentali:

  • diritti in internet
  • educazione ai media (e ai social)
  • educazione all’informazione

Caratterizzanti:

  • STEM (competenze digitali per robotica educativa, making e stampa 3D, internet delle cose)
  • big e open data
  • coding
  • arte e cultura digitale
  • educazione alla lettura e alla scrittura in ambienti digitali
  • economia digitale
  • imprenditorialità digitale

Dal mio punto di vista, non è troppo condivisibile questa biforcazione: da un lato le “educazioni a…”, dall’altro il coding, la robotica, i dati aperti. Così si introducono già nei temi e nei curricoli le separazioni che poi è difficile recuperare: tra riflessione teorica e attività tecnica, tra aspetti etici (diritti, doveri) e pratici, tra apprendimento cognitivo e affettività. Ma pazienza, in qualche modo si doveva distinguere.

Il dettaglio dei possibili contenuti dei curriculi è descritto nell’Allegato 2 (http://www.istruzione.it/scuola_digitale/allegati/2016/Allegato_2_Avviso_Curricoli_Digitali.pdf). A mio avviso, si tratta di testi non particolarmente omogenei, perché scritti da persone diverse, come si capisce dal linguaggio utilizzato e dalla formattazione libera. Si può supporre quindi che sia stato dato l’incarico di definire i contenuti a esperti di dominio che non si sono parlati tra loro. Noto che di opensource non si parla mai, e pazienza (ma anche no).

Non mi è chiarissimo il processo di valutazione delle proposte di curriculo. Da quanto ho capito io, ci saranno tre fasi: in una prima vengono richieste solo poche slide di presentazione e un formulario in cui vengano definite le scuole partecipanti, di cui almeno una deve avere esperienze dimostrabili nel settore (solo una?). In una seconda fase, viene stilata una graduatoria e vengono selezionate 125 proposte. Ai soggetti selezionati viene chiesto di inviare il progetto con un esempio, e solo 25 proposte vengono alle fine finanziate, con un massimo di 170.000 € per proposta. Ci sono poi altri 50.000 € per la migliore proposta di comunicazione del progetto (mi è sfuggito come si partecipa a questa speciale categoria).

La commissione di valutazione verrà scelta solo dopo la chiusura della prima fase. I dettagli delle altre due, come pure i processi di monitoraggio, verranno, si spera, chiariti in seguito. Potrebbe succedere, ad esempio, che i curricoli prodotti si sovrappongano oppure che lascino scoperte delle aree? Che seguano modelli completamente diversi? Che lo sviluppo non rispetti le premesse? Speriamo di no, speriamo che sia prevista anche una fase di aggiustamento in corsa.

Ma a prescindere da questi dettagli, ci sono molti aspetti che giudicherei positivi: la sottolineatura dell’importanza degli aspetti di cittadinanza digitale, la richiesta esplicita che i curricoli siano rilasciati come OER (peccato non si diano indicazioni di licenze specifiche: i contenuti prodotti si potranno usare gratis, ma si potranno anche modificare?), la citazione almeno della possibilità di analytics ovvero di raccolta dei dati di utilizzo.

Nel passato, il Ministero dell’Istruzione aveva scritto e pubblicato Programmi e Indicazioni per i vari ordini di scuola. Con la “scuola dell’autonomia”, con il passaggio dalla scuola dei programmi alla scuola dei curricoli, questo compito spetta alla scuola. Le indicazioni ministeriali però esistono ancora, e quattro anni fa per esempio sono state sottoposte ad un processo di verifica pubblica quelle per la scuola dell’infanzia e del primo ciclo, cioè fino alla scuola secondaria di primo grado inclusa. Per altro, nel documento finale (http://hubmiur.pubblica.istruzione.it/alfresco/d/d/workspace/SpacesStore/162992ea-6860-4ac3-a9c5-691625c00aaf/prot5559_12_all1_indicazioni_nazionali.pdf , mi spiace ma non c’era un link più corto) la parola digitale compare solo quattro volte: due nel conteste delle competenze chiave raccomandate dall’Europa, e due nell’area Tecnologia. Leggendo i risultati della consultazione, si capisce che secondo il 24% degli intervistati il digitale avrebbe dovuto essere più presente.

Comunque: in questo caso, forse per la prima volta, si chiede ai diretti interessati, cioè alle scuole – o meglio, a reti di scuole coadiuvate da esperti universitari o altri scelti dalle scuole stesse – di realizzare dei curricoli di livello nazionale, da condividere con le altre scuole.

E’ una buona maniera di affrontare la questione? Non lo so, ma non mi convince in generale la logica dei bandi, che permette di distribuire soldi alla Scuola – anzi, ad alcune scuole – che poi magari le usano come possono, sulla base della loro abilità a scrivere progetti. Bandi che si limitano a finanziare la creazione di un oggetto digitale (che so, un sito, una piattaforma di collaborazione o di e-learning), ma non il suo mantenimento e sviluppo futuro, col risultato che il suddetto sito muore dopo poco. Bandi che stimolano migliaia di proposte, ma ne finanziano solo una piccola percentuale, per cui il lavoro della maggioranza è sprecato. Bandi i cui risultati non sono soggetti a verifica se non contabile. Bandi in cui la coerenza dei prodotti viene cercata a posteriori, magari con un bando ulteriore.

E’ una maniera democratica? Non so nemmeno questo. Va avanti la scuola che ha al suo interno docenti capaci di progettare, nel senso specifico di “scrivere progetti finanziabili”. E si procede in maniera discontinua, per gettiti intermittenti. Per esempio, mi domando: ma una volta creati i curriculi, quali risorse verranno impiegate per aggiornarli? E chi lo farà? O si pensa che in campo come questo si possa creare IL curriculo definitivo?

Si poteva fare diversamente? Io penso di si. Faccio un piccolo esercizio di immaginazione.

1. Si poteva creare un piccolo gruppo di lavoro (di cui venissero pubblicati i nomi dei partecipanti) con almeno quattro compiti diversi:

  • raccogliere buone pratiche da paesi dove questi curricoli esistono e sono già stati sperimentati con successo
  • valutare i risultati dei Piani Ministeriali passati sul tema dell’IT, luci e ombre
  • esaminare le esperienze già realizzate nelle scuole o dalle associazioni
  • raccogliere idee tramite una ricerca non solo sul materiale cartaceo, ma anche su quello digitale, compresi i social network system.

Alla fine di questo lavoro preliminare, il gruppo di superesperti avrebbe potuto produrre un documento che indicasse obiettivi, limiti, metodi, errori da evitare, buone pratiche. Il documento avrebbe dovuto evidenziare, tra l’altro, gli incroci tra le aree tematiche. Non solo un elenco di argomenti, quindi.

2. Poi il MIUR avrebbe potuto convocare un piccolo numero di esperti, tre per ogni area tematica (per esempio uno di estrazione universitaria, un docente e un esperto di dominio), scelti mediante una procedura concorsuale pubblica, fornirgli il quadro generale e dargli modo di produrre una versione alfa del curriculo.

3. Le versioni alfa avrebbero potuto essere condivise preliminarmente tra tutti i gruppi, per verificarne la coerenza e l’omogeneità e la rispondenza al quadro generale.

4. La versione beta, risultante dal lavoro di omogeneizzazione, sarebbe potuta essere diffusa presso un numero più grande di docenti, dei quali si sarebbero raccolti i commenti. Si sarebbe potuta immaginare una piccola sperimentazione per tutti i curricoli, per permettere ulteriori aggiustamenti.

5. La versione RC (release candidate), risultato della sperimentazione, sarebbe stata pubblicata in una piattaforma aperta dove tutti gli utenti potessero suggerire miglioramenti. Non essendo necessaria una “versione finale” congelata, i curriculi avrebbero potuto essere aggiornati in maniera continua, o “forkati” come si fa nei repository di software opensource.

Costo totale: quasi sicuramente inferiore ai 4,3 milioni investiti nel bando. Immaginando trenta persone che lavorino per un anno a tempo pieno, fanno più o meno un milione di €, più il costo del gruppo iniziale dei superesperti (che voglio sperare non costerebbe altri tre milioni di €…). Con i soldi avanzati si regalava carta igienica a tutti…

Coinvolgimento degli utenti finali: sicuramente maggiore, direi. Nella modalità scelta dal MIUR, supponendo che ogni team di progetto sia composto da 20 tra docenti ed esperti, il numero totale delle persone coinvolte è di 500. Che è meno dei docenti intervistati per le Indicazioni del 2012.

Qualità dei prodotto finale: non so dirlo, ma il processo descritto sarebbe servito a controllarla a più riprese. E la prassi dell’opensource insegna che questo modo funziona abbastanza bene.

Dietro il coding

Set
25

copertina

In occasione dei due seminari in Piemonte (Ivrea e Torino), di cui qui trovate maggiori informazioni, ho preparato delle slide. Troppe slide. Alla fine mi hanno fatto notare che più che una presentazione stava diventando un libro.

 

 

E allora ho colto l’occasione, reimpaginato, aggiunto, corretto, e ho realizzato un piccolo ebook dal titolo “Dietro il Coding”. Non è una difesa del coding né una sua condanna. E’ semplicemente una raccolta di domande e di riflessioni che hanno lo scopo di stimolare quelle degli altri, soprattutto di quelli che intendono dedicare qualche ora al Coding con i propri ragazzi. Riflessioni che partono da lontano, da almeno venticinque anni fa, ma che ho cercato di aggiornare andando a caccia di opinioni, di proposte e di alternative. Una parte importante è dedicata al progetto “Programma il Futuro” e a Scratch, ma purtroppo solo poche righe al nuovo tema dei curricoli digitali, che andrà seguito con attenzione.

Questo è l’indice:

Come nasce questo testo
1. Che cos’è il Coding
2. Perché è così importante
3. Una valutazione storica
4. Come si parla del Coding?
Primo Intermezzo: che significa opensource?
5. A che serve il Coding?
6. Chi può insegnare il Coding?
Secondo Intermezzo: le differenze tra linguaggi
7. Che linguaggio?
8. Il modello didattico dietro Scratch
9. Come andrà praticato il Coding
10. Un po’ di storia…
11. E oggi?
12. Come potrebbe funzionare davvero
Suggerimenti di lettura

L’ebook è rilasciato con licenza CC BY/SA e lo potete scaricare da  qui.