Negli anni ‘80 e ‘90, molti ragazzi come me si avvicinavano al mondo dell’informatica grazie al mitico Commodore 64, ai primi personal computer assemblati e ai rudimentali sistemi operativi come DOS e Windows 3.11. Ricordo ancora con emozione il mio primo Commodore 64, regalatomi dai miei genitori nel 1989. Avevo appena sette anni, frequentavo la seconda elementare del mio piccolo paese, e la meraviglia provata nell’accendere quel computer, con la sua inconfondibile schermata blu e celeste, era impagabile. Quel piccolo dispositivo apriva davanti a me un intero universo fatto di sfide, studio, impegno e gratificazione.
All’epoca, imparare a usare un computer significava leggere manuali, decifrare istruzioni in linguaggio BASIC e spesso sbattere la testa contro problemi che oggi sembrerebbero assurdi. Con i primi personal computer e il sistema operativo DOS, spesso era necessario utilizzare l’editor Edit per modificare i file di configurazione autoexec.bat e config.sys, anche solo per riuscire ad avviare un gioco. Scoprii anche che, all’interno dell’ambiente QBasic del MS-DOS, erano presenti due giochi: Nibbles e Gorillas, i cui sorgenti erano interamente scritti in BASIC e liberamente consultabili. Proprio questo sforzo rendeva ogni risultato, persino l’avvio di un gioco da cassetta o da floppy disk, una conquista gratificante.
I film di quel periodo celebravano l’informatica: basti ricordare titoli come “War Games”, “Tron” e il mitico “Tagliaerbe”. L’informatico era una figura affascinante e avventurosa, un hacker capace di dominare le tecnologie più avanzate. Questa bellissima emozione l’ho riprovata anni dopo, quando, durante la scrittura della tesina per l’esame di maturità, ho scoperto Debian GNU/Linux. In quel periodo, ancora non c’era l’ADSL e tutto si faceva tramite un vecchio modem analogico a 56k. Ricordo di aver ordinato i CD di Debian Potato da un Linux User Group italiano. Un’esperienza entusiasmante che ha segnato profondamente la mia crescita informatica.
Oggi, però, qualcosa sembra essersi perso per strada. Il termine “coding” negli Stati Uniti identifica chiaramente la “programmazione vera e propria”. Le scuole americane insegnano linguaggi di programmazione come Python o JavaScript già in giovane età, preparando concretamente gli studenti a una carriera STEM. Proprio grazie a questa mentalità, negli Stati Uniti sono nate le aziende tech più importanti del mondo, sono sorti movimenti rivoluzionari come quello open source e oggi gli USA sono pionieri nell’utilizzo dell’intelligenza artificiale.
In Italia, invece, il concetto di coding è spesso ridotto a semplice strumento didattico per insegnare il “pensiero computazionale” attraverso software grafici come Scratch. Questi strumenti, a mio avviso, non semplificano affatto i concetti fondamentali della programmazione, anzi, li complicano, aggiungendo un livello di astrazione visiva che può confondere ulteriormente gli studenti.
Permettetemi una battuta: in Italia ancora ci scandalizziamo se le persone sbagliano un congiuntivo, ma sembra normale e quasi un vanto dire: “Ah beh, io di informatica o di matematica non ci capisco nulla”, come se fosse assolutamente normale – e addirittura meritorio – non interessarsi o non comprendere i concetti basilari delle materie scientifiche.
Il coding all’italiana nasce anche con un intento nobile: insegnare il pensiero computazionale. Tuttavia, viene spesso trattato come qualcosa di astratto e scollegato dalla vera programmazione, quasi una pratica filosofica.
Lo studio della programmazione con linguaggi reali come Python e C, invece, rende il processo di scomposizione dei problemi complessi in sotto-problemi più semplici del tutto naturale. Studiare questi linguaggi significa applicare concretamente questa metodologia.
Io forse sono stato fortunato: già dalle scuole medie avevo un docente di matematica appassionato di informatica, con cui parlavo spesso di computer e programmazione in BASIC sia per il Commodore 64 sia per PC. Alle scuole superiori, avevo una bravissima professoressa di matematica che ci faceva applicare quanto studiato in classe direttamente in laboratorio, utilizzando Turbo Pascal come linguaggio didattico. Oggi, lo stesso ruolo potrebbe essere ricoperto da Python. E non posso non ricordare il mio professore di informatica, che ci fece studiare il C e, alla prima lezione, ormai per me indimenticabile, ci spiegò il concetto di algoritmo con esempi come la preparazione del caffè o la risoluzione della Torre di Hanoi, dicendoci: “Se una cosa sapete risolverla con carta e penna, allora sapete anche programmarla”. Ma era proprio quando iniziavamo a scrivere codice che emergevano le tecniche, si affinava il metodo e si scopriva come i linguaggi di programmazione permettessero naturalmente di abituare la mente al ragionamento che oggi chiamiamo computazionale.
Ovviamente, nessuno di noi sapeva che stava imparando il cosiddetto “pensiero computazionale”: stavamo semplicemente scrivendo codice, realizzando piccoli videogiochi e programmi didattici, divertendoci. Tornavamo a casa e continuavamo a programmare, a creare giochi, esercizi e applicazioni, anche perché il nostro professore aveva aspettative molto alte. Certamente, non a tutti piaceva la materia, nonostante avessimo scelto l’indirizzo informatico, ma credo che ciò sia del tutto naturale.
È fondamentale, per chi ama l’informatica e desidera diventare un programmatore, studiare il linguaggio C: rappresenta una vera e propria palestra mentale, capace di formare lo spirito logico dell’informatico e di metterlo di fronte a sfide che coinvolgono sia l’hardware che l’ingegneria del software.
In un mondo tecnologico in continua e rapida evoluzione, specialmente con l’avvento dell’intelligenza artificiale, conoscere almeno i fondamenti della programmazione attraverso un linguaggio autentico come Python dovrebbe essere considerato essenziale sin dalla più tenera età, esattamente come lo studio della grammatica o delle tabelline. Introdurre complicazioni aggiuntive tramite blocchi visivi, come quelli di Scratch, risulta spesso inutile e può ostacolare, anziché facilitare, l’apprendimento.
Un esempio concreto rende bene l’idea: un ciclo “for” o un costrutto “if” è molto più semplice da scrivere direttamente in Python, piuttosto che costruire lo stesso ciclo con blocchi grafici.
Scratch:
- Trascinare un blocco “ripeti”
- Selezionare il numero di volte
- Inserire altri blocchi all’interno per l’azione da ripetere, ad esempio: dire “Ciao!”
Python:
for i in range(10):
print("Ciao!")
È evidente quanto sia più immediato, leggibile e gratificante usare Python. Non solo: Python è largamente usato nel mondo reale della programmazione ed è uno dei linguaggi principali nello sviluppo dell’intelligenza artificiale. Inoltre, per l’uso didattico, offre una vastissima gamma di librerie: per l’analisi dei dati, per la manipolazione del testo, per la musica, librerie matematiche e, non da ultima, PyGame per lo sviluppo di videogiochi. Questo permette agli studenti di divertirsi scrivendo codice, creando giochi e applicazioni. In alternativa, si potrebbero introdurre Game Engine come Godot (il più adatto all’uso didattico e professionale), Unity o Unreal Engine. Sono certo che con strumenti di questo tipo si riuscirebbe a ottenere il massimo coinvolgimento da parte degli studenti. Naturalmente, tutto ciò richiede anche da parte dei docenti una preparazione diversa e più tecnica, ma il risultato educativo e motivazionale ripagherebbe ampiamente lo sforzo.
In conclusione, il “coding all’italiana” basato su Scratch rischia di allontanare gli studenti dal vero mondo della programmazione. È necessario abituare gli studenti alla complessità, farli confrontare con problemi difficili, stimolarli a impegnarsi e a sforzarsi per risolverli. La programmazione, infatti, è paragonabile allo studio di uno strumento musicale come la chitarra o il pianoforte, allo studio della danza e alla pratica di uno sport. Non esistono scorciatoie, ma è necessario affrontare studio e sacrificio. Così come per imparare a suonare la chitarra è fondamentale studiare la teoria e suonare fino a formarsi i calli alle dita, anche nel coding e nello sviluppo software è indispensabile programmare attivamente per imparare a risolvere problemi e scomporre grandi sfide in problemi più piccoli e gestibili. Si dovrebbe quindi tornare a insegnare informatica vera, utilizzando linguaggi reali, concreti e potenti come Python e il C, in grado di offrire agli studenti risultati tangibili e gratificanti, proprio come accadeva negli anni ‘80 e ‘90.
Credo che l’uso del coding unplugged sia un valido strumento della didattica, utile per abituare al pensiero computazionale anche attraverso attività interdisciplinari applicabili sia alle materie STEM che a quelle umanistiche. Il coding si può applicare allo studio della musica, colorando le note e i tasti degli strumenti in modo differente per aiutare lo studente a prendere familiarità con lo strumento; nella danza, per memorizzare sequenze di passi e posizioni; nello sport, nella matematica e persino nello studio delle lingue e delle scienze umane.
Tuttavia, il coding, e in particolare il coding unplugged, resta uno strumento efficace solo durante la tenera età, cioè l’infanzia e i primi anni della scuola primaria, quando lo studente non ha ancora acquisito le capacità minime di lettura e scrittura. Da quel momento in poi, così come accade per l’apprendimento di uno strumento musicale o della danza, inizia il tempo del sacrificio: bisogna abbandonare strumenti inutilmente artefatti, sporcarsi le mani e cominciare a scrivere codice vero. Farlo gradualmente, comprendendo i costrutti informatici, smontandoli, esaminandoli e scrivendo codice. Solo così, ne sono certo, si otterranno risultati straordinari, sia in termini di apprendimento che di soddisfazione personale. E così potremo formare una nuova generazione di persone che non saranno semplicemente utenti della tecnologia, ma la domineranno.