Coloro che in Italia a partire dalla metà degli anni 80 incrociarono come studenti i primi timidi esperimenti scolastici di introduzione dell’informatica conservano un ricordo: quello dell’apprendimento del linguaggio di programmazione Pascal. In genere si tratta di un ricordo vivido.
L’apprendimento del linguaggio Pascal: un ricordo non sempre piacevole
Il problema è che, purtroppo, il più delle volte non è un bel ricordo. Perché non lo è? Che cosa non funzionò? Cercare una risposta significa, ci pare, portare un piccolo contributo al problema più generale della presenza dell’informatica nella scuola e ipotizzare qualche possibile strada futura, tanto più urgente quanto più le circostanze culturali e il panorama tecnologico paiono mutare rapidamente.
Anzitutto cerchiamo di capire perché in quegli anni sembrava assolutamente ovvio che qualsiasi studio scolastico dell’informatica coincidesse con l’apprendimento di un linguaggio di programmazione. Qui la risposta è facile: il tipico computer dell’epoca, una volta acceso, mostrava uno schermo nero in attesa di ricevere comandi scritti sulla tastiera. A questo punto le possibilità erano due: o si scriveva un programma (e il tipico computer personale metteva a disposizione un interprete BASIC: pochi sanno che il primo IBM/PC, capostipite di un’impressionante dinastia a cui devono qualcosa quasi tutti i computer personali esistenti, aveva nella sua prima incarnazione un interprete BASIC che fungeva pure da rudimentale sistema operativo e permetteva di registrare i programmi nientepopodimeno che su un’audiocassetta!); oppure si attivava un programma scritto da qualcun altro (per esempio un programma di scrittura, o di calcolo, o un database: la classica triade dei programmi di produttività negli anni 80). Studiare informatica che cosa poteva significare? Imparare ad usare i programmi di produttività certo no: ne esistevano innumerevoli diversi, in rapidissima evoluzione, e comunque non così complessi da richiedere e motivare uno studio specifico. Per esclusione, rimaneva una sola possibilità: studiare l’informatica significava imparare a programmare.
Perché il Pascal dominava nelle scuole
Ma perché a scuola dominava lo studio del Pascal? Qui la risposta è un po’ più complessa, e se fosse elaborata nei suoi dettagli occuperebbe molto spazio. Contentiamoci di dire questo: il Pascal costituisce il maggiore successo in una categoria particolare di linguaggi di programmazione, concepiti propriamente per finalità didattiche. Autore ne fu un prolifico informatico svizzero, Niklaus Wirth, che dedicò molte parte delle sue forze alla progettazione di linguaggi siffatti: il Pascal fu il primo, ma ad esso ne seguirono altri due, in diverse incarnazioni: prima Modula-2, poi Oberon. Dopo una lunga e informaticamente feconda vita, Niklaus Wirth è venuto a mancare, ahimè nel quasi generale oblio, il 1º gennaio del 2024.
Un oblio ingiusto, certamente: nei suoi anni d’oro la diffusione e influenza del Pascal è stata enorme (anche grazie al brillante compilatore TurboPascal della Borland, che permise che il linguaggio fosse usato, più o meno piratescamente, da innumerevoli schiere di appassionati). Ma vedendo la storia quest’oblio è comprensibile: esso è legato al definitivo tramonto dell’idea di «linguaggio di programmazione a scopo didattico». Il fatto è che il concetto stesso ha qualcosa di tautologico.
L’espressione «linguaggio di programmazione» si usa in genere per indicare un sistema di notazione più facile da comprendere e scrivere (per esempio più vicino alle convenzioni della scrittura matematica che alla struttura fisica della macchina): una notazione che poi un programma apposito (interprete o compilatore) traduce nel «linguaggio macchina», cioè il codice direttamente eseguibile dal computer. I linguaggi di programmazione nascono quindi esattamente con lo scopo di essere più facili da imparare. Un «linguaggio di programmazione per scopo didattico» è quindi qualcosa come un «cibo fatto per essere mangiato».
Il tramonto dei linguaggi di programmazione a scopo didattico
Ciò che va compreso è quindi al contrario perché questa idea oggettivamente un po’ bizzarra ebbe per parecchi anni tanto successo. Un primo motivo credo che sia buono: siffatti linguaggi, pensati com’erano partendo da zero e senza la preoccupazione dell’efficienza e della velocità, permettevano di incorporare in maniera più chiara e più pura le migliori idee su come dovesse essere concepito e scritto un buon programma. Un esempio evidente: Edsger Dijkstra nel suo celebre articolo Go To Statement Considered Harmful aveva dimostrato come l’uso del comando goto rendesse impossibile controllare la correttezza di un programma; ma il Pascal fu il linguaggio che rese popolare questa idea, fornendo in maniera semplice i comandi alternativi e rendendo intenzionalmente macchinoso l’uso del vecchio e deprecato goto. Invogliare a prendere buone abitudini è ottima pedagogia!
Un altro motivo è invece discutibile: si tratta dell’idea che lo strumento didattico migliore sia quello che fa commettere meno errori. Questo effetto si ottiene semplificando, regolarizzando e riducendo il più possibile le regole di scrittura (la sintassi) e anche le operazioni possibili (la semantica).
Ma in questo modo il risultato è sì qualcosa facile da imparare, ma probabilmente qualcosa che non insegna molto, e comunque non necessariamente qualcosa che è facile da usare. Le critiche originariamente formulate al Pascal ne riconoscevano la chiarezza e regolarità, ma contemporaneamente notavano quanto ne fosse limitata la capacità espressiva: appena si voleva programmare qualcosa di più complesso e interessante, ci si trovava impantanati in limiti che perfino un rudimentale dialetto del BASIC superava con facilità. Era sì molto più difficile commettere errori: ma anche perché si era dissuasi dal far cose complesse. La situazione mutò nelle versioni successive, ma quando lo spirito originario venne sempre più abbandonato e il Pascal divenne un linguaggio più o meno come gli altri (per esempio nella variante Delphi, usata spesso anche per complessi programmi commerciali).
L’informatica senza programmazione: un’idea diffusa ma errata
Questa ricerca zelante della facilità di apprendimento condizionò gli usi scolastici? A sfogliare le pubblicazioni didattiche dell’epoca, la risposta pare purtroppo positiva: l’impressione è in effetti quella di una grande noia. Poche idee sono più disastrose nell’istruzione del ritenere che le cose facili attraggano più di quelle difficili! Il più delle volte la programmazione è introdotta come un’appendice alla matematica e alla fisica, e ciò a prima vista pare sensato: in fondo, i calcolatori sono nati per calcolare, e la scrittura matematica, con le sue rigide regole, è ciò che si avvicina di più alla sintassi di un linguaggio di programmazione (fino anzi a potersi con essa identificare: vedi il caso del linguaggio APL, nato come puro simbolismo matematico!). Ma non si fatica ad immaginare la delusione di molti studenti dell’epoca quando la meraviglia della nascente informatica personale veniva distillata in un programmino che inseriti i tre coefficienti calcolava le due soluzioni di un’equazione di secondo grado. Che cosa si poteva dedurre se non che la programmazione «faceva» più o meno le stesse cose della matematica, solo in maniera più macchinosa? L’idea che l’informatica serve a molto più che a far calcoli, anzi pure l’idea che programmare significa individuare creativamente un algoritmo, pare quasi assente. Gli Elementi di Euclide, con il celebre algoritmo ivi descritto del massimo comun divisore, insegnavano da questo punto di vista di più!
Il caso del Pascal è stato certamente il più importante tra i linguaggi di programmazione pensati per l’istruzione, ma non l’unico. Sarebbe molto interessante scriverne una storia completa, che includerebbe anche capitoli oggi dimenticati. Certamente coloro che sono curiosi di storia dell’informatica (pochi, purtroppo) conoscono il Logo, il geniale linguaggio connesso agli esperimenti pedagogici pioneristici di Seymour Papert; tutti conoscono il BASIC, che ebbe una genesi ibrida come linguaggio facile da imparare e anche da usare; credo invece che pochissimi conoscano (almeno qui in Italia) Elan, l’inconfondibile linguaggio di programmazione dominante per diversi anni nelle scuole dell’Europa del Nord; ancor meno conoscono Blue, l’ambiente di programmazione che brevemente tentò di basare l’insegnamento su un’idea rigorosa e coerente di programmazione «ad oggetti» (nessun «programma», solo «classi»!). Ancora altri nomi potrebbero essere aggiunti, tutti interessanti, ma accomunati da una sorte simile: l’estinzione. La somiglianza del triste fato induce a cercare un motivo comune, che vada oltre i peculiari problemi di questo o quell’esperimento.
Si può nutrire un sospetto: ha senso imparare a programmare con un linguaggio che fuori delle istituzioni educative nessuno usa? Il problema ovviamente diventa più grave man mano che programmare significa inserirsi in un contesto più ampio, per esempio usare librerie preesistenti: strumenti per il cui sviluppo serve un grande dispendio di forze, che nessuno è disposto ad impegnare per la dubbia e discutibile finalità di facilitare appena l’apprendimento. Il linguaggio a scopo educativo diventa così poco più di un giocattolo in confronto agli strumenti «veri», come uno stridulo flauto di plastica in confronto ad uno strumento musicale vero – senza neppure però l’incentivo economico, perché la maggior parte dei linguaggi di programmazione «veri» non costano nulla per il portafoglio.
La mia impressione è però che il giustificato abbandono dei linguaggi di programmazione pensati per finalità didattiche abbia contribuito ad un effetto collaterale assai negativo: l’idea ampiamente diffusa secondo cui si possa insegnare e conoscere l’informatica prescindendo dalla programmazione. Quante volte (in contesti non specialistici, ci auguriamo!) si sentono lodare i computer attuali perché, diversamente da quelli rudimentali dei decenni passati, «non hanno bisogno di essere programmati»? Affermazione tanto intelligente quanto quella che osservasse che oggi, con la gran quantità di libri disponibili, per fortuna non è più necessario imparare a scrivere.
La funzione formativa dello studio della programmazione
Con tutte le critiche che si possono fare alla specie di cui il Pascal fu il più celebre esemplare, un’idea di fondo era invece assolutamente giusta: il computer come macchina universale, da Turing in poi, è proprio caratterizzato dalla possibilità di diventare una qualsiasi altra macchina grazie alla programmazione. L’informatica, come scienza sviluppatasi anche grazie allo stimolo di macchine in grado di eseguire programmi, ha una sua parte essenziale in questa conoscenza. Che poi oggi la collocazione sociale dell’informatica e delle sue applicazioni incoraggi anche un altro ordine di riflessioni è vero. Ma nessuno mi convincerà mai che l’«educazione digitale» renda obsoleta (puta caso) la comprensione di che cosa sia una procedura ricorsiva. Pensare ciò è una deplorevole confusione di piani.
Credo quindi che il capitolo della funzione formativa dello studio della programmazione possa e debba oggi essere ripreso.
Cinque motivi per cui lo studio della programmazione è significativo
In che modo? A prima vista, vedo almeno cinque caratteristiche che rendono questo studio particolarmente significativo.
- Nella programmazione è in gioco un sapere che diventa immediatamente un fare: non è un ottimo luogo per mettere nel cassetto discussioni un po’ tediose sulla differenza tra conoscenza e competenza e costatare quanto creare qualcosa di funzionante possa essere incoraggiante o addirittura entusiasmante?
- La programmazione è uno studio in cui la «correzione» proviene spesso dalla cosa stessa: un programma sbagliato semplicemente non funziona (nella pedagogia montessoriana si parlerebbe di «autocorrezione»): ma questa è una carta straordinaria in un’epoca in cui si cerca sempre più un carattere attivo dell’apprendimento.
- La programmazione spinge a mettere in esercizio attitudini di analisi di problemi che sono teoricamente trasferibili in innumerevoli campi dell’esperienza umana (è quell’aspetto, se interpreto bene, che spesso viene chiamato «pensiero computazionale»).
- In quarto luogo, la programmazione è un campo in cui come in pochi altri esistono innumerevoli soluzioni diverse per lo stesso problema: un intero corso di informatica potrebbe essere per esempio costruito solo percorrendo i differenti algoritmi per l’ordinamento; ma questo significa anche connettere fin dall’inizio il rigore con l’invito alla creatività!
- Nella programmazione è in questione un fare che si presta benissimo alla collaborazione, e dunque si connette allo sviluppo di capacità di relazioni personali e alla formulazione di progetti comuni.
Insomma: ci sono tutte le premesse affinché lo studio della programmazione, per la soddisfazione postuma di Niklaus Wirth, rimanga almeno come un bel ricordo.