Seconda puntata del nostro viaggio
Fornire una definizione esatta di cos’è una disciplina scientifica è un compito non facile, anche perché gli stessi studiosi della materia – se interrogati – producono formulazioni diverse tra loro. Per l’informatica il compito è ancora più difficile, dal momento che tale termine, nel corso dei decenni, è venuto via via comprendendo al suo interno un enorme spettro di concetti, da quelli più tecnologici e operativi (p.es. la connessione a distanza tra due dispositivi digitali) a quelli più astratti e scientifici (p.es. la dimostrazione della risolubilità meccanica di un problema). Tale parola viene usata, per fare alcuni esempi, quando si parla sia del dispositivo tecnologico (come tablet o smartphone) su cui vengono eseguite le varie app (cioè i programmi informatici che usiamo per cercare informazioni o per giocare) sia del software di sistema che rende possibile il funzionamento di tale dispositivo che, ancora, delle formule e dei teoremi che dimostrano la correttezza del processo di calcolo.
In questa serie di post mi occupo dell’informatica come scienza e sappiamo che ogni scienza studia alcuni fenomeni specifici. Ad esempio, la matematica studia quantità, misure e le loro relazioni, la fisica la materia non vivente e il suo comportamento nello spazio e nel tempo, la biologia gli organismi viventi e le loro evoluzioni.
Cosa studia allora la scienza chiamata informatica? Per orientare comunque il lettore ecco la mia definizione: “l’informatica è la disciplina che studia l’elaborazione automatica di rappresentazioni”.
Analizziamo adesso più in dettaglio i termini della definizione, iniziando col discutere cosa si intende con l’aggettivo automatica. Conosciamo bene il concetto di automazione. A partire dalla Rivoluzione Industriale avviatasi nel Settecento è ben chiaro a tutti che automatizzare un processo produttivo vuol dir farlo fare alle macchine. Prodotti che un tempo venivano realizzati a mano, artigianalmente, vengono fabbricati da macchinari.
Come esempio pratico, pensate a un vestito di lana. Un tempo bisognava tosare le pecore, filare la lana, realizzare la tela, poi tagliarla e infine cucirla, e il tutto veniva realizzato da persone. Nel corso dei secoli tutti questi passi sono stati automatizzati e vengono ormai svolti dalle macchine. Ogni qualvolta parliamo di “macchina” intendiamo un dispositivo che si comporta in modo meccanico, vale a dire che messo nelle stesse condizioni di partenza esegue sempre invariabilmente le stesse operazioni, senza possedere alcuna coscienza di ciò che sta facendo, quindi senza conoscere il significato né di ciò che sta manipolando (o elaborando) né delle operazioni di manipolazione (o elaborazione) che sta compiendo.
L’aggettivo “automatica” nella definizione è essenziale per caratterizzare il fatto che l’informatica si occupa solo ed esclusivamente di quelle situazioni in cui l’elaborazione avviene in modo “meccanico”, cioè deterministico e non soggetto a quella coscienza e quel libero arbitrio che invece caratterizzano gli esseri umani. Il termine tecnico che si usa nell’informatica per indicare un dispositivo che realizza un’elaborazione automatica di rappresentazioni è “automa”, dalla parola greca autòmaton, che è la radice di “automazione” e “automatico”. Un PC o un tablet, uno smartphone o un smartwatch sono realizzazioni tecnologicamente sofisticate di automi molto complessi. Useremo anche termini più informali come “agente” o “esecutore”, riferendoci sempre a un automa.
Col termine elaborazione faccio appello al senso comune che fa riferimento a una manipolazione di qualcosa, a una trasformazione di qualcosa in qualche altra cosa.
Nell’esempio di automazione precedentemente descritto, la lana della pecora viene trasformata, cioè elaborata, attraverso una serie di diversi passaggi fino a ottenere un vestito. In un contesto più astratto, quello dei numeri, l’operazione di addizione (3+5) trasforma o elabora gli addendi 3 e 5 nella loro somma (8). Infatti, le elaborazioni dell’informatica vengono chiamate anche “computazioni”, dal momento che, in una progressione storica, i primi scenari di applicazione sono stati quelli relativi ai calcoli numerici.
Il sostantivo rappresentazioni può suscitare delle perplessità, dal momento che, in genere, quando si parla di informatica si usano parole come “dati” o “informazioni”. Rimandando a un successivo post un approfondimento del significato di questi termini e delle loro relazioni, per il momento chiarisco che indico con “rappresentazione” il modo – arbitrario ma condiviso all’interno di una qualche comunità di persone – con cui rendiamo concreto nel mondo fisico un dato, cioè un generico elemento presente alla nostra coscienza, indipendentemente dalla circostanza che si riferisca a fatti oggettivi o ad acquisizioni soggettive.
Ritornando all’esempio dei numeri, osserviamo che essi non hanno in sé realtà fisica. Il concetto di “cinque cose” può essere fisicamente rappresentato da un qualunque insieme di cinque oggetti, ma è in sé astratto. La rappresentazione che noi usiamo è “5”, ma per gli antichi romani era “V”. Altre popolazioni usano rappresentazioni ancora diverse. Impariamo nei primi anni di scuola, non senza una certa fatica, a capire il significato delle rappresentazioni dei numeri e a fare calcoli con essi. In questo caso facciamo anche noi, come esseri umani, un’elaborazione di rappresentazioni, ma non è del tutto automatica, perché siamo persone e non meccanismi.
Nei successivi post di questa serie, approfondiremo prima il concetto di rappresentazione, perché sono queste proprio queste rappresentazioni che vengono elaborate dall’esecutore. Successivamente, capiremo come può essere fatto questo agente (l’automa) e in che linguaggio (più precisamente, linguaggio di programmazione) dobbiamo fornirgli le istruzioni che riteniamo necessarie per condurre l’elaborazione. Proseguiremo poi con un ulteriore concetto fondamentale, relativo alla specifica di quale sia la procedura di elaborazione (tecnicamente, l’algoritmo) che vogliamo realizzare. In seguito considereremo il caso di elaborazioni realizzate non da un singolo esecutore ma da un loro insieme, scenario detto di computazione distribuita. Infine, discuteremo una fondamentale caratteristica dell’informatica, l’astrazione, che pur non essendo un aspetto esclusivo di questa disciplina, dal momento che ogni scienza costruisce i propri modelli dei fenomeni attraverso un processo di astrazione dai dettagli, permette di realizzare macchine in grado di simulare altre macchine (virtualizzazione). Come ultimo concetto affronteremo quello che, da un punto di vista culturale generale, è forse il lascito più importante dell’informatica, ovvero la dualità tra rappresentazioni e programmi.
La seconda parte della serie sarà dedicata ad affrontare alcune delle problematiche conseguenti alla sempre maggiore diffusione di sistemi e dispositivi basati sull’informatica.
Enrico Nardelli è Professore di Informatica all’Università di Roma “Tor Vergata”
( I post di questa serie sono basati sul libro dell’Autore La rivoluzione informatica: conoscenza, consapevolezza e potere nella società digitale, al quale si rimanda per approfondimenti. I lettori interessati al tema possono anche dialogare con l’Autore, su questo blog interdisciplinare.)