Pagine

venerdì 28 settembre 2018

Coding o informatica: questo è il problema

di Enrico Nardelli

All'inizio di quest'anno la Commissione Europea ha lanciato un ambizioso piano d'azione per l'istruzione digitale. Partendo dalla giustissima premessa che “istruzione e formazione sono i migliori investimenti nel futuro dell'Europa” propone, per adeguare la formazione all'era digitale, di intervenire lungo tre linee di azione:
  1. migliorare l'utilizzo della tecnologia digitale per l'insegnamento e l'apprendimento;
  2. sviluppare le competenze e le capacità digitali pertinenti ai fini della trasformazione digitale;
  3. migliorare l'istruzione mediante un'analisi dei dati e una previsione migliori.

Nulla da dire sulla prima linea: è noto che un uso ben calibrato delle tecnologie digitali può migliorare sia l'insegnamento che l'apprendimento. Certo, le difficoltà sono tutte nella buona calibrazione, ma confido che la nuova direzione politica del MIUR e l'esperienza della nostra classe docente (tra le migliori al mondo) saranno in grado di indicare e trovare le giuste soluzioni.

Anche la terza è estremamente valida: viviamo nell'era dei dati, che raccogliamo a tutti i livelli. Se ben analizzati ci possono dire molto sulla situazione attuale, ad un livello di granularità mai raggiunto prima. Anche qui il diavolo è nelle minuzie realizzative: da un lato la garanzia di privacy verso le persone, dall'altro la consapevolezza che tra ciò che misuro e la realtà c'è una distanza che non va mai dimenticata. I generali che hanno confuso la mappa con il territorio non hanno mai brillato nelle campagne militari.

Vorrei spendere qualche parola sulla seconda linea, perché per la sua attuazione, oltre a misure di accompagnamento relative alla sensibilizzazione, comunicazione e riduzione del divario di genere (tutte importantissime!) l'azione concreta che viene proposta è quella di “introdurre classi di programmazione in tutte le scuole". Qui con “programmazione” si intende “programmazione informatica", ovvero ciò che gli inglesi chiamano coding, termine che ormai anche in Italia gode di una certa notorietà. Ho già scritto (qui e qui) sul perché non ritengo saggio usare il termine inglese, ma nel resto di quest'articolo lo userò per brevità espositiva.

La mia tesi di fondo è che questa impostazione della Commissione Europea, centrata sull'insegnamento del coding invece che sull'insegnamento dell'informatica è riduttiva. Confronto l'insegnamento del coding con quello dell'informatica perché insegnare il coding vuol dire, per fare un paragone con l'ingegneria, insegnare a costruire un ponte, mentre insegnare l'informatica vuol dire insegnare a progettare e costruire il ponte.

Progettare significa operare in uno spazio di necessità e di vincoli e “creare” la soluzione, inventare la sintesi tra esigenze contrastanti. Questo richiede un bagaglio di conoscenze che non possono essere quelle soltanto finalizzate a costruire. Essendo un ingegnere di formazione, so bene di cosa parlo. Due anni del mio percorso universitario li ho passati nello studio di matematica, fisica e chimica ed altre materie fondazionali, che non avevano nessuna diretta applicazione alla costruzione di un qualunque manufatto complesso. Un medico o un avvocato potranno sicuramente confermare che la differenza tra l'operatore ed il progettista è tutta nella larghezza e profondità della sua formazione di base.

Costruire significa seguire un piano più o meno definito che qualcun altro ha creato. Non è richiesto di sapere molto al di là di questo, perché ci pensa (o ci ha pensato o ci penserà) qualcun altro. Parlare solo di “insegnare il coding” è quindi un approccio riduttivo, perché ci si focalizza solo sulla parte finale ed operativa di tutto un processo progettuale molto più complesso. Significa addestrare una manovalanza tecnicamente sofisticata, ma che sarà comunque una classe operaia sottoposta alle direttive di chi decide cosa costruire, per chi farlo e quando.

Noto di passaggio (perché entreremmo in una sfera politica e sociale che va certamente considerata, ma non in questa sede) che la storia (ora più che mai magistra vitae) ha evidenziato come i livelli base della manovalanza sono i primi che vengono sostituiti dalle macchine. Se vogliamo quindi che i nostri giovani acquisiscano competenze utili per tutto l'arco della loro vita lavorativa, è bene formarli a competenze da progettisti e non solo da esecutori.

Non nego che la programmazione possa essere un’attività altamente creativa, ma se parliamo di istruzione di massa e se insegniamo solo a programmare, senza educare i ragazzi su tutti gli altri aspetti che rendono l’informatica quella disciplina articolata e profonda che è, allora rischiamo davvero di formare solo un esercito di operai, che sarà facilmente messo fuori gioco dall’avanzamento della tecnologia o di un “esercito industriale di riserva”.

Per far sì che ragazzi e ragazze abbiano possibilità di scegliere una strada per loro soddisfacente nella società digitale, in un contesto lavorativo in continua evoluzione, vanno loro esposte da subito le idee scientifiche alla base del digitale, in modo che ne capiscano la valenza complessiva.

Si potrà obiettare che vi sono molti esempi di start-up di successo nate da idee di ragazzini che certamente non avevano svolto regolari studi da informatici. Ma, se si guardano i numeri complessivi, questi sono soltanto le eccezioni che confermano la regola. Prima di tutto, se chi ha creato Facebook non era certamente laureato in informatica, Google è nato dalle idee di due dottorandi in informatica di Stanford (una delle cattedrali della ricerca informatica). Inoltre, per ogni start-up che ce la fa, ce ne sono almeno mille che vanno a spasso, e quindi a livello macro-economico, cioè per far crescere un Paese, puntare tutto sulle start-up non rappresenta una scelta sensata (anche questo è un discorso di politica dello sviluppo da affrontare).

Analogamente, si tende spesso a considerare come tipico ciò che invece è un’eccezione. Per la programmazione, si citano geni come Linus Torvalds (creatore di Linux) o Guido van Rossum (creatore di Python) che hanno realizzato da soli dei veri e propri capolavori. Prima di tutto la genialità è qualità estremamente rara e ciò che va bene per un genio non può essere usato come metodo didattico per l'istruzione di massa. Secondo, anche chi è geniale progetta: lo fa nella sua testa, e molto velocemente, mentre sviluppa, ma è una fase comunque presente. Terzo, è ovvio che ogni progetto, nel momento in cui viene espresso ha bisogno di un linguaggio per la sua espressione, che rappresenta la “codifica” del progetto. Ma questo non implica che il termine più appropriato per chi progetta sia “coder” o che nel termine “coding” rientri tutta l’area della progettazione e sviluppo del software.

Attenzione, l’inserimento della formazione informatica nella scuola è importante per la formazione di ogni cittadino, anche se deciderà di fare il medico o l’avvocato, il musicista o lo scrittore. La società digitale è qui: non insegnare nella scuola la scienza alla base dei suoi meccanismi sarebbe come insegnare che i bambini nascono sotto i cavoli, la peste è trasmessa dagli untori e le pietre si muovono per horror vacui.

Ciò che fa grande un Paese sul lungo periodo non sono le eccellenze, ma la qualità della formazione di massa. Lo sviluppo digitale dell'Europa richiede l'insegnamento dell'Informatica nella scuola, a partire dalla primaria. Questa è la strada che hanno iniziato a seguire nel Regno Unito, queste sono le tendenze in molti paesi avanzati, sia ad oriente che ad occidente, questo è quello che abbiamo proposto come associazioni europee di Informatici.

--
Versione originale pubblicata su "Il Fatto Quotidiano" il "17 settembre 2018".

7 commenti:

  1. Sono un insegnante di primaria . Concordo sull'articolo letto sul "Il fatto quotidiano" .
    Mi piacerebbe avere una bibliografia minima su come affrontare l'informatica nella fascia d'età7-11. Grazie

    RispondiElimina
    Risposte
    1. Grazie per l'interesse. Le suggerirei di partire dal materiale online del nostro progetto a queste due pagine:
      lezioni tecnologiche
      lezioni tradizionali

      Consulti anche i due ulteriori percorsi:
      Cittadinanza digitale consapevole
      Come funzionano i computer

      Infine una proposta curriculare completa per l'insegnamento dell'informatica nella scuola è disponibile a questa pagina:
      Gruppo di Lavoro "Informatica e Scuola" del CINI

      Elimina
  2. Nella pubblicazione originale è rimasto "appeso" questo commento, cui rispondo qui.

    =======

    alephx ↪ Enrico Nardelli

    Ho capito cosa rende così lontane le nostre visioni. E' proprio il concetto di "coding" che io e lei interpretiamo in modo diverso. Cito: "Computer programming is the process of designing and building an executable computer program for accomplishing a specific computing task. Programming involves tasks such as analysis, generating algorithms, profiling algorithms' accuracy and resource consumption, and the implementation of algorithms in a chosen programming language (commonly referred to as coding). The source code of a program is written in one or more programming languages. The purpose of programming is to find a sequence of instructions that will automate the performance of a task for solving a given problem. The process of programming thus often requires expertise in several different subjects, including knowledge of the application domain, specialized algorithms, and formal logic." Wikipedia (versione inglese)

    Lei scrive: "Analizzare un problema in termini computazionali [...] vuol dire aver prima di tutto capito qual è il modello di computazione soggiacente." Questa fase, nella mia modestissima visione, è già "coding", perché si tratta, appunto, di "codificare" un problema in termini computazionali, ovvero "tradurre" un problema in un linguaggio o meta-linguaggio che - finanche non istruisca direttamente il modello di computazione soggiacente - possa essere direttamente tradotto in un linguaggio che lo faccia.

    Nella mia "ingenuità" ho una visione un po' più alta del "coding" o "computer programming" che lei derubrica a bassa manovalanza sostenendo che sia equiparabile a compiti elementari. Talmente "elementari" che moltissimi ingegneri informatici italiani, purtroppo, si sono dimenticati di come si svolgono. O forse non ne sono mai stati capaci. All'estero questa disciplina è tenuta più in considerazione: https://cs.stanford.edu/academics/current-masters/choosing-specialization#theory
    https://cs.stanford.edu/academics/current-masters/choosing-specialization#tcs

    =======

    Ecco la mia replica

    =======

    Gentile Alephx

    sì abbiamo una diversa interpretazione di cosa sia il "coding". Mi permetto di osservare che la sua - che estende il "coding" a gran parte dell'informatica, è abbastanza personale e, temo, poco condivisa a livello sia scientifico che applicativo.

    A sostegno della sua visione del "coding" ha inserito un link a indirizzi di specializzazione del master di Stanford, che però è un master nell'area di "computer science" (cioè informatica) e nessuna delle 10 specializzazioni è sul "coding" in quanto tale.

    Insomma, mi pare di capire che per lei il "coding" è, se non tutta l'informatica, certamente tutta l'enorme area della progettazione del software ed include nel "coding" anche la parte dell'informatica teorica relativa ai modelli di computazione. Le suggerirei di non fidarsi molto di Wikipedia e di consultare un po' più approfonditamente i curricula dei corsi universitari di informatica ed ingegneria informatica.

    Se non si fida di me, che in fin dei conti solo un professore universitario di Informatica, già presidente dell'associazione italiana dei professori universitari di informatica e attuale presidente dell'associazione europea dei dipartimenti universitari di informatica, beh, almeno si fidi degli americani

    A questo link può scaricare l' "Overview Report" che le fornirà un panorama ben più completo di cosa sia l'informatica.

    RispondiElimina
    Risposte
    1. Se posso intervenire credo che entrambe le visioni siano corrette, ovviamente su due livelli di istruzioni differenti. Mi sembra logico che a livello universitario ci siano decine di corsi per affrontare le varie sfaccettature dell'ingegneria del software, mentre è altrettanto logico che a livello di un ragazzino delle elementari o delle media tutto questo possa collassare in una sola argomentazione.

      Personalmente per lavoro utilizzo il termine "coding" solo per la pura parte di scrittura, per la costruzione del ponte, secondo il suo analogismo.

      Parlando con mio figlio, invece, tutta la parte di idea, specifica e ragionamento diventano più difficili da estrapolare rispetto alla stesura vera e propria e quindi tendo a chiamare "coding" tutto l'insieme.

      Elimina
    2. Gentile Stefano664

      mi spiace che il suo commento sia rimasto nascosto nella coda per tutto questo tempo. Vorrei solo ribadire che ognuno è libero di usare le parole come si vuole, ma "ingegneria del software" è solo una parte dell'informatica e dello sviluppo dei sistemi informatici. Quindi sia usare questo termine per denotare tutta l'informatica è impreciso, sia usare "coding" per parlare di tutta l'area della progettazione e sviluppo del software è altrettanto impreciso.

      Il mio insistere, in modo un po' pedante (posso anche ammetterlo) sull'usare i termini in modo esatto deriva dal fatto che chi conosce le regole sa come e quando violarle. Ma su questi temi c'è molta confusione e scarsa conoscenza, per questo è importante insistere.

      Elimina
  3. Salve, premesso che sono un semplice genitore e nulla so di informatica a pelle dico che ben venga il coding ma se i nostri figli non sanno cosa fare davanti ad una tastiera a cosa serve programmare se prima non imparo a tenere in mano un mouse?

    RispondiElimina
  4. Ok programmare ma non insegnare cosa sia la tastiera mi sembra bruciare le tappe. Poveri figli

    RispondiElimina

Sono pubblicati solo i commenti che rispettano le norme di legge, le regole della buona educazione e sono attinenti agli argomenti trattati: siamo aperti alla discussione, non alla polemica.