cat grace-hopper-compilatore.md

N°029Nascita dell'astrazionePseudocodice

ADD; SUB; PRINT

Grace Hopper, il primo compilatore e la fine del binario

Nel 1952 Grace Hopper realizzò l'A-0, considerato il primo compilatore: un programma che traduceva una notazione comprensibile all'uomo in codice eseguibile dalla macchina. Questo pezzo racconta il momento in cui smettemmo di parlare la lingua dei computer e li costringemmo a imparare un po' della nostra.

Anno
1952
Era
1950-1959
Linguaggio
Pseudocodice
Reperto
1 traduttore

Parlare la lingua della macchina

Ai primordi dell'informatica, programmare era un atto di traduzione faticoso e disumano. Il computer capiva soltanto la sua lingua nativa: il codice macchina, sequenze di numeri puri, spesso in forma binaria, ciascuno dei quali corrispondeva a un'operazione elementare o a un indirizzo di memoria. Per dire alla macchina di sommare due numeri, bisognava conoscere il codice numerico esatto dell'istruzione di somma e gli indirizzi precisi dove i numeri erano conservati. Programmare significava pensare come pensa una macchina, scendere al suo livello, abbandonando ogni traccia del linguaggio umano.

Era un lavoro lento, tedioso e tremendamente soggetto a errori. Un solo numero sbagliato in una lunga sequenza e tutto crollava, senza alcun aiuto per capire dove. I programmatori tenevano tabelle e manuali per tradurre a mano ciò che volevano fare in quei codici numerici. La distanza tra l'idea — somma questi due valori — e la sua espressione per la macchina era enorme, e quella distanza la doveva colmare l'essere umano, ogni volta, a fatica.

In questo mondo lavorava Grace Hopper, una matematica entrata nella Marina degli Stati Uniti durante la guerra e diventata una delle prime persone a programmare i grandi calcolatori, figura che questo archivio ha già incontrato per l'aneddoto della falena e per il suo ruolo in COBOL. Hopper era convinta che ci dovesse essere un modo migliore, più umano, di dare istruzioni a una macchina.

E se traducesse la macchina?

L'intuizione di Hopper fu tanto semplice da enunciare quanto rivoluzionaria nelle conseguenze: se tradurre dal linguaggio umano al codice macchina è un lavoro meccanico, ripetitivo e basato su regole, perché non farlo fare alla macchina stessa? Perché un essere umano dovrebbe sprecare il suo tempo a convertire a mano somme e sottrazioni in numeri, quando il computer, che è bravissimo nei compiti ripetitivi, potrebbe tradurseli da solo?

Da questa idea nacque, nel 1952, l'A-0, considerato il primo compilatore della storia. Un compilatore è esattamente questo: un programma che prende istruzioni scritte in una notazione più vicina all'uomo e le traduce automaticamente nel codice macchina che il processore sa eseguire. Con l'A-0, il programmatore poteva esprimersi a un livello più alto, usando riferimenti simbolici invece di indirizzi numerici nudi, e lasciare alla macchina il compito ingrato della traduzione finale.

C'è un dettaglio umano che rende la storia più significativa: all'inizio l'idea fu accolta con scetticismo, persino con incredulità. Hopper ha raccontato che molti non credevano che un computer potesse scrivere i propri programmi, che potesse fare qualcosa che non fosse pura aritmetica. L'idea che una macchina potesse manipolare simboli e linguaggio, non solo numeri, sembrava quasi una pretesa eccessiva. Hopper dovette lottare per far accettare ciò che oggi è la base assoluta di ogni sviluppo software.

La torre delle astrazioni

Il compilatore di Hopper aprì la strada a un'idea che è forse la più importante di tutta l'informatica: l'astrazione a livelli. Una volta accettato che la macchina può tradurre da un linguaggio più alto a uno più basso, nulla impedisce di costruire livelli su livelli. Si può creare un linguaggio comprensibile all'uomo, e un compilatore che lo traduce; poi un linguaggio ancora più alto e potente, tradotto a sua volta in quello sottostante; e così via, in una torre di traduzioni successive.

È esattamente ciò che è accaduto, ed è il motivo per cui oggi possiamo programmare scrivendo qualcosa che assomiglia all'inglese o alla matematica, senza sapere quasi nulla di come funzioni il processore sotto. Quando scriviamo un programma in un linguaggio moderno, una catena di traduttori — compilatori, interpreti — lo converte, livello dopo livello, fino ad arrivare ai numeri puri che la macchina esegue. Ogni livello nasconde la complessità di quello sottostante, permettendoci di concentrarci sulle idee invece che sui dettagli della macchina.

Senza questa idea, l'informatica come la conosciamo sarebbe impensabile. Nessuno potrebbe costruire un'applicazione complessa scrivendo numeri binari a mano. La possibilità stessa di avere milioni di programmatori, e non poche centinaia di specialisti capaci di pensare in codice macchina, nasce dalla decisione di lasciare che siano le macchine a tradurre per noi. Hopper non scrisse solo un programma: aprì la porta a un modo di pensare che ha reso il software accessibile.

Perché custodirlo

Il primo compilatore merita una teca perché segna il momento in cui il rapporto di potere tra uomo e macchina cominciò a invertirsi. Prima, era l'uomo a doversi piegare alla lingua della macchina, a pensare in numeri. Dopo Hopper, fu la macchina a iniziare a fare il lavoro di venirci incontro, traducendo dal nostro linguaggio al suo. È l'inizio di una lunga storia in cui i computer sono diventati progressivamente più facili da usare, fino agli strumenti di oggi che capiscono persino il linguaggio naturale.

C'è una lezione preziosa nella resistenza che Hopper dovette superare. Le dissero che era impossibile, che una macchina non poteva fare quel salto. Lei lo fece comunque, e aveva ragione. È un promemoria sul fatto che i limiti che diamo per assoluti sono spesso solo limiti della nostra immaginazione, e che le idee più trasformative all'inizio sembrano quasi sempre assurde a chi le ascolta per la prima volta.

Custodire `ADD; SUB; PRINT` significa onorare l'origine dell'astrazione, il concetto senza il quale niente di ciò che facciamo programmando sarebbe possibile. Ogni linguaggio di programmazione che esiste, dai più antichi ai più moderni, è figlio dell'intuizione che una macchina possa tradurre il pensiero umano in azione. Grace Hopper non ci ha solo dato uno strumento: ci ha dato il permesso di smettere di pensare come macchine e di tornare a pensare come persone.

Punti chiave

  • Agli inizi si programmava in codice macchina: numeri puri, costringendo l'uomo a pensare come la macchina.
  • Nel 1952 Grace Hopper realizzò l'A-0, considerato il primo compilatore: traduceva notazione umana in codice eseguibile.
  • La sua intuizione: se la traduzione è un compito meccanico e ripetitivo, può farla la macchina stessa.
  • All'inizio l'idea fu accolta con scetticismo: molti non credevano che un computer potesse scrivere i propri programmi.
  • I compilatori aprirono la strada all'astrazione a livelli, fondamento di ogni linguaggio di programmazione moderno.
  • È il momento in cui le macchine iniziarono a venirci incontro, invece di costringerci a parlare la loro lingua.

Fonti