All’inizio degli anni Cinquanta, programmare un calcolo scientifico significava spesso tradurre ogni formula in una lunga sequenza di istruzioni specifiche di un computer. John Backus voleva eliminare questo lavoro meccanico. Il gruppo che guidò in IBM creò FORTRAN, un linguaggio che permetteva di scrivere formule in una forma riconoscibile e di farle tradurre automaticamente.
La sfida non consisteva soltanto nel progettare una notazione più leggibile. Gli scienziati sapevano ottimizzare direttamente l’assembler e diffidavano di un programma che producesse codice al loro posto. Per essere adottato, il compilatore FORTRAN doveva generare programmi quasi veloci quanto quelli scritti dagli esperti.
Backus avrebbe poi dedicato la propria carriera ad altre due domande: come descrivere rigorosamente la sintassi di un linguaggio e come superare un modello di programmazione basato sulla modifica successiva della memoria.
Perché la programmazione scientifica restava costosa
John Warner Backus nacque nel 1924 a Filadelfia. Dopo un percorso scolastico irregolare e il servizio militare, si orientò verso la matematica e conseguì nel 1950 un master alla Columbia University.
Nello stesso anno visitò IBM e vide il Selective Sequence Electronic Calculator. Una conversazione improvvisata portò alla sua assunzione. Lavorò presto su programmi matematici e su Speedcoding, che semplificava alcuni calcoli sull’IBM 701.
Speedcoding aumentava la produttività, ma l’interpretazione rallentava l’esecuzione. I programmatori continuavano quindi a usare codice macchina o assembler, pagando settimane di lavoro e numerosi errori.
Nel 1953 Backus propose a IBM un sistema più ambizioso: gli utenti avrebbero scritto formule vicine alla notazione matematica e un compilatore avrebbe prodotto un programma efficiente per il futuro IBM 704.
FORTRAN è tanto un compilatore quanto un linguaggio
Backus riunì un gruppo con competenze in matematica, programmazione e architettura dei calcolatori. Ne facevano parte Harlan Herrick, Irving Ziller, Peter Sheridan, Roy Nutt, Robert Nelson e Lois Haibt. Nessuna singola persona avrebbe potuto progettare il linguaggio, ottimizzare il compilatore e collaudare ogni forma di calcolo.
Il nome FORTRAN deriva da Formula Translation. Il linguaggio consentiva espressioni aritmetiche, cicli e salti senza manipolare direttamente i codici dell’IBM 704. Il programmatore descriveva il calcolo; il compilatore sceglieva le istruzioni macchina.
La traduzione doveva preservare le prestazioni. Il gruppo sviluppò tecniche di analisi e ottimizzazione per organizzare i calcoli e l’uso dei registri. Il primo compilatore richiese anni di lavoro ed era un programma enorme per l’epoca.
Quando FORTRAN fu distribuito nel 1957, la sua efficienza indebolì l’argomento principale a favore dell’assembler. Gli scienziati potevano dedicare più tempo al modello matematico e meno alla meccanica del processore. Il tempo di sviluppo diminuì e il linguaggio poté essere adattato progressivamente ad altre macchine.
Un successo collettivo che cambia l’economia del software
Presentare Backus come unico creatore di FORTRAN sarebbe fuorviante. Propose il progetto, guidò il gruppo e contribuì alla progettazione, ma linguaggio e compilatore furono un’opera collettiva.
Il suo ruolo fu decisivo perché mantenne insieme due obiettivi difficili: avvicinare il codice alla matematica senza rinunciare alla velocità. Il successo dimostrò che un linguaggio di alto livello poteva servire per calcoli reali.
FORTRAN si diffuse nei laboratori, nell’industria e nelle università. Il codice scientifico poteva ormai sopravvivere al computer per cui era stato scritto. Le versioni successive migliorarono portabilità e struttura conservando un vasto patrimonio numerico.
La storia di FORTRAN segue questa evoluzione. La biografia di Backus chiarisce il problema iniziale: rendere credibile la traduzione automatica a programmatori convinti che solo il codice manuale potesse essere efficiente.
Descrivere la grammatica di un linguaggio
Dopo FORTRAN, Backus partecipò alle discussioni internazionali su ALGOL 58 e ALGOL 60. Occorreva descrivere senza ambiguità quali sequenze di simboli costituissero programmi validi.
Backus propose una notazione formale in cui ogni categoria sintattica era definita da regole di sostituzione. Peter Naur adattò il metodo per il rapporto ALGOL 60. Nacque così la forma Backus-Naur, o BNF.
La BNF separa la sintassi dall’implementazione: la prima stabilisce la forma ammessa, la seconda decide come analizzarla ed eseguirla. Le sue varianti sono ancora usate per documentare linguaggi, formati e protocolli.
Mettere in discussione il modello che aveva contribuito a diffondere
FORTRAN migliorò radicalmente la programmazione imperativa, ma Backus finì per considerarla troppo legata alla struttura dei computer a programma memorizzato.
Nella conferenza del premio Turing del 1977, Can Programming Be Liberated from the von Neumann Style?, criticò il collo di bottiglia di von Neumann: i programmi spostano continuamente valori tra processore e memoria e il ragionamento dipende da una successione di cambiamenti di stato.
Backus presentò FP, un sistema basato sulla composizione di funzioni. Invece di dettagliare ogni aggiornamento, il programma combina trasformazioni. L’obiettivo era rendere le proprietà del calcolo più facili da comprendere matematicamente.
FP non sostituì i linguaggi imperativi, ma mostrò che l’uomo che aveva guidato uno dei loro primi grandi successi era anche capace di metterne in discussione i limiti.
Comporre programmi invece di gestire ogni stato
In FP le funzioni vengono combinate mediante forme funzionali: composizione, costruzione di coppie, applicazione di un’operazione a tutti gli elementi o riduzione di una sequenza a un valore.
Per calcolare la somma dei quadrati di una lista, un approccio imperativo crea un totale e lo aggiorna durante il percorso. Un approccio composizionale descrive invece le trasformazioni: elevare ogni numero al quadrato e poi sommare i risultati. Il calcolo è espresso attraverso relazioni anziché una sequenza dettagliata di assegnazioni.
Backus sperava così di poter ragionare sui programmi con regole algebriche. L’idea anticipa tecniche moderne di ottimizzazione, flussi di dati e parallelizzazione, anche se FP rimase poco diffuso.
Un’eredità che supera FORTRAN
Backus ricevette il premio Turing nel 1977 per i contributi ai linguaggi di alto livello, ai sistemi di compilazione e alla loro specificazione. Rimase IBM Fellow fino al pensionamento nel 1991 e morì nel 2007.
La sua eredità unisce tre livelli. FORTRAN dimostra che un linguaggio più astratto può produrre codice efficiente. La BNF permette di definirne precisamente la forma. FP chiede infine se il modo dominante di scrivere programmi sia davvero il migliore.
I compilatori moderni proseguono il primo problema, le grammatiche formali il secondo e la programmazione funzionale il terzo.
Cronologia
- 1924: nascita di John Warner Backus a Filadelfia.
- 1950: master in matematica alla Columbia e ingresso in IBM.
- Primi anni 1950: sviluppo di Speedcoding per l’IBM 701.
- 1953: proposta del sistema di traduzione di formule per l’IBM 704.
- 1954: formazione del gruppo FORTRAN.
- 1957: distribuzione del primo compilatore FORTRAN.
- 1958–1960: contributi ad ALGOL e alla notazione che diventerà BNF.
- 1963: nomina a IBM Fellow.
- 1977: premio Turing e conferenza sui limiti dello stile von Neumann.
- 1991: pensionamento da IBM.
- 2007: morte ad Ashland, Oregon.
Domande frequenti
John Backus ha creato FORTRAN da solo?
No. Propose il progetto e guidò il gruppo IBM, ma linguaggio e compilatore furono un’opera collettiva.
Perché il primo compilatore FORTRAN fu così importante?
Un linguaggio più leggibile non sarebbe stato adottato se i suoi programmi fossero stati molto più lenti dell’assembler. Le ottimizzazioni dimostrarono che traduzione automatica, produttività e prestazioni potevano convivere.
Backus inventò la BNF da solo?
Propose la notazione iniziale per ALGOL; Peter Naur la adattò per il rapporto ALGOL 60. Il nome Backus-Naur riconosce entrambi i contributi.
FORTRAN è ancora usato?
Sì. Le versioni moderne restano importanti nel calcolo scientifico e nei sistemi che dipendono da grandi librerie numeriche consolidate.
Perché Backus criticò la programmazione imperativa?
Riteneva i programmi centrati sulla modifica della memoria difficili da comporre e analizzare. FP esplorava un approccio basato sulla composizione di funzioni.
Qual è il legame tra Backus e Grace Hopper?
Entrambi cercarono di allontanare i programmatori dal codice macchina: FORTRAN per il calcolo scientifico, FLOW-MATIC e COBOL soprattutto per l’elaborazione dei dati aziendali.