Macchine e linguaggi
Uova e galline?
“Di cosa diamine vorrà parlarci costui questa volta?”, vi chiederete voi, cari lettori, leggendo il titolo di questo articolo. Presto detto.
Mi sono chiesto: sono nate prima le macchine di calcolo e poi sono arrivati i linguaggi di programmazione e i sistemi operativi che le fanno funzionare, o viceversa è nata prima l’idea di linguaggio computazionale e da lì si è sviluppata la tecnologia per utilizzare i linguaggi di calcolo e implementare gli algoritmi? Insomma: è nato prima l’uovo (il software) o la gallina (l’hardware)? La risposta banale è che l’uovo è la gallina e la gallina fa l’uovo.
La scatola nera e la sua luce
Quello che voglio dire è che ogni sistema computazionale è allo stesso tempo hardware e software. Certo, possiamo distinguere gli ambiti per motivi di chiarezza e schematizzazione, ma non possiamo intendere le cose a compartimenti stagni.
È vero, come abbiamo visto nell’articolo che celebrava il “compleanno” di Visicalc, a volte compaiono oggetti, come l’Altair 8800, che francamente servono a poco.
Però anche questa prima macchina di calcolo costruita attorno a un microprocessore rispondeva a un’idea, al sogno di alcuni hobbisti un po’ hacker e un po’ nerd di avere tra le mani una macchina alla quale far calcolare potenzialmente qualsiasi cosa. L’Altair 8800 era la gallina che corrispondeva all’uovo che avevano in testa migliaia di hobbisti: avere una macchina di calcolo da programmare.
Pochi anni dopo comparve la “gallina” Apple ][ + Visicalc, tramite la quale si sviluppò la rivoluzione della microinformatica e del personal computer. Tutto ciò a partire dall’uovo che aveva in mente Dan Bricklin, il progettista di Visicalc. Ma secoli prima ci furono menti luminose che avevano un uovo nella testa e produssero delle galline…
Ipazia e l’astrolabio
Della matematica e astronoma Ipazia, filosofa neoplatonica vissuta tra il IV e il V secolo d.C. ad Alessandria, in genere si ricorda la morte violenta. Probabilmente fu legata più a beghe politiche che non alla religione, ma tant’è: la povera ci andò di mezzo.
Tra i suoi estimatori ci furono parecchi saggi e filosofi cristiani, a cominciare dal suo discepolo Sinesio di Cirene, vescovo di Tolemaide. Proprio dagli scritti di Sinesio sappiamo che, tra le tante “uova” che Ipazia ebbe in testa, ce ne fu una che la portò a produrre una gallina di notevoli qualità.
Nel De dono astrolabii, Sinesio racconta che Ipazia gli passò le istruzioni per costruire un astrolabio di moderna concezione. Un astrolabio è un dispositivo di calcolo che permette di stabilire la posizione di stelle e pianeti. La versione proposta da Ipazia era più maneggevole rispetto a quello sferico: una sorta di astrolabio laptop.
Forse Ipazia non inventò l’astrolabio piano, ma lo scritto di Sinesio ce la presenta come una grande divulgatrice scientifica, capace di coniugare un pensiero teorico sopraffino con una sensibilità pratica di prima qualità. Insomma: uova e galline.
Muḥammad ibn Mūsā al-Khwārizmī aka Algoritmo
Qualche secolo dopo, nel IX secolo d.C., un’altra mente fervida si occupò di astrolabi. Lo scienziato persiano Muḥammad ibn Mūsā al-Khwārizmī fu matematico, astronomo e geografo; a lui dobbiamo l’introduzione dei numeri indo-arabi in occidente attraverso i traduttori latini delle sue opere.
Lo si ritiene il “padre dell’algebra”. L’uso stesso della parola fu introdotto in Europa dal titolo di un suo lavoro: Al-Kitāb al-mukhtaṣar fī ḥisāb al-jabr wa al-muqābala; algebra esprime la parola al-jabr.
Ed è proprio in onore del suo nome, al-Khwārizmī, latinizzato in Algoritmi, che chiamiamo così le sequenze di istruzioni che animano le nostre macchine computazionali.
Da buon hacker al-Khwārizmī non solo si avvalse degli astrolabi, ma ne migliorò le prestazioni inventando il cosiddetto quadrato delle ombre, che rendeva più preciso il calcolo della posizione degli astri.
La meravigliosa Ada
Passano i secoli e la tecnologia entra nella sua fase industriale. Al principio del XIX secolo il signor Jacquard presenta il prototipo della sua macchina per la tessitura, il “telaio Jacquard”.
Questa macchina è forse la prima macchina programmabile. Era dotata di qualcosa di simile a un lettore di schede perforate che permetteva di ottenere differenti disegni: un meccanismo di input che alimentava una macchina computazionale per ottenere un particolare output.
Qui entra in gioco la meravigliosa Ada Lovelace, la madre di tutti i programmator*. Ada fu essenzialmente una mente matematica, ma non si accontentò del lavoro teorico. Vide nei prodotti tecnologici della sua epoca la possibilità di dare un risvolto pratico ai metodi di calcolo.
Ada collaborò con Charles Babbage, che aveva ideato la macchina differenziale e soprattutto la macchina analitica, qualcosa che finalmente si avvicinava al modello di macchina di calcolo universale che sta alla base di ogni calcolatore attuale.
Ada fu “l’ingegnere software” che diede anima alle macchine di Babbage e pensò di dotare la macchina analitica di schede perforate. Implementò un algoritmo per il calcolo dei numeri di Bernoulli: per questo è ricordata come la prima programmatrice di computer. Ancora una volta tante uova nella testa e il desiderio di mettere le mani su una gallina che le potesse esprimere…
Turing e la sua macchina (che non c’è)
E se l’uovo che una mente brillante avesse in testa fosse proprio una gallina? Questo è il caso di Alan Turing e della macchina che da lui prende il nome. Anche di Turing ricordiamo purtroppo la morte violenta, causata dalla barbarie e dall’ottusità delle quali il genere umano è capace. Ma la sua vita fu luminosa quanto la sua mente.
Le macchine lo affascinavano tanto quanto la matematica teorica. Già da piccolo mostrò grande interesse per la macchina per scrivere di sua madre, riflettendo su come descriverne matematicamente le caratteristiche.
Turing si propose di descrivere matematicamente cosa sia una macchina meccanica per il calcolo, in modo da determinare cosa fosse calcolabile con strumenti meccanici e cosa no. Produsse quindi una gallina teorica, una macchina astratta che incise sulle macchine reali prodotte successivamente, sulla teoria della computazione e sugli algoritmi.
La macchina di Turing è fornita di un nastro di lunghezza infinita e manipola i dati contenuti secondo un insieme definito di regole. È un’astrazione, ma ne sono stati costruiti anche modelli reali, con nastri di lunghezza finita. Nella sua ineffabilità è il banco di prova di ogni algoritmo: una macchina tanto teorica da essere incredibilmente pratica.
Da qualche parte dovremo andare a sbattere…
Dove ci porta questa storia delle uova e delle galline? La distinzione tra macchine e logica di programmazione è puramente formale, serve per descrivere. Dietro a macchine e algoritmi ci sono esseri umani dotati di un ingegno più o meno eccezionale, ma certo con un’idea nella testa trasformata in un sistema hardware/software, in una realizzazione pratica.
Dietro alle macchine che usiamo e alle applicazioni con le quali interagiamo ci sono persone. Lavorare con un’applicazione davanti a un dispositivo è quasi paragonabile alla lettura di un libro: stiamo interagendo con degli autori, le persone che stanno dietro al racconto, alle applicazioni e alle macchine.
Ho lavorato parecchio con Photoshop in passato. Alla fine della giornata mi piaceva far scorrere la finestra di informazioni del programma: comparivano i nomi delle centinaia di persone che avevano contribuito allo sviluppo, persone mai conosciute che in qualche modo mi avevano tenuto compagnia durante il lavoro di fotoritocco.
Pensare a tutto l’umano che c’è dietro la tecnologia ci può aiutare a superare timori e paure, a nutrire un po’ più di fiducia in essa. E anche sapere che Algoritmo fu un matematico persiano del IX secolo un po’ ci rappacifica.
Proviamo a vivere la tecnologia senza troppi complottismi o retropensieri: certo, anche senza troppa ingenuità.
In fondo ci fidiamo del prossimo, però quando attraversiamo una strada è sempre opportuno guardare da una parte e dall’altra prima di farlo…