Nel campo dell’informatica, alcuni articoli hanno avuto un impatto tale che hanno ridefinito non solo la disciplina, ma anche il modo in cui interagiamo con la tecnologia nel nostro quotidiano. In un viaggio lungo circa 100 anni, analizziamo gli studi che hanno plasmato lo sviluppo del software e della tecnologia, spiegando il ruolo fondamentale di ciascuno di essi. Non si tratta, ovviamente, di un elenco esaustivo: abbiamo evitato di citare moltissimi lavori altrettanto significativi.
L’elenco dei 12 articoli che più hanno influenzato il software e la tecnologia è solamente un punto di partenza per avviare una discussione. Tenendo presente che ciascuno degli argomenti proposti richiederebbe un attento approfondimento.
In un lungo viaggio che comincia dagli anni ’30 del novecento, fino ad arrivare ai giorni nostri, gli articolo sono ordinati cronologicamente. Anche a sottolineare l’evoluzione alla quale abbiamo assistito in un lasso di tempo davvero molto breve.
Ecco i 12 articoli che hanno guidato lo sviluppo del software e della tecnologia
1. Sui numeri computabili, con un’applicazione al “problema della decisione” (On Computable Numbers, with an Application to the Entscheidungsproblem, Alan Turing, 1936)
Nel lontano 1936, Alan Turing introduceva il concetto di macchina di Turing, un modello teorico che stabiliva i limiti di ciò che poteva essere calcolato. Turing dimostrò che qualsiasi cosa computabile poteva, in linea teorica, essere eseguita da una macchina, un principio che è alla base del computing moderno.
Il lavoro svolto da Turing ha gettato le basi per l’informatica, fornendo le regole fondamentali per il calcolo digitale.
Impatto: Le teorie di Turing continuano a influenzare ogni linguaggio di programmazione e struttura di calcolo, anche nel contesto dell’informatica quantistica. Ogni programma, anche quelli più moderni, è concepito secondo le linee guida definite in questo storico articolo.
2. Una teoria matematica della comunicazione (A Mathematical Theory of Communication, Claude Shannon, 1948)
Claude Shannon ha sviluppato la teoria dell’informazione, un campo che ha permesso di trattare in modo rigoroso concetti come il codice binario (bit), l’entropia e il rumore nelle comunicazioni. La sua teoria ha introdotto i concetti di compressione dei dati e correzione degli errori, fondamentali per la trasmissione delle informazioni, dall’invio di segnali nello spazio alla visione in streaming.
Impatto: Oggi, ogni forma di comunicazione digitale — che sia un SMS, una videochiamata o una trasmissione in streaming — si basa sulle scoperte di Shannon, che hanno permesso di ridurre l’interferenza e migliorare l’affidabilità delle comunicazioni.
3. Funzioni ricorsive delle espressioni simboliche e calcolo da parte della macchina (Recursive Functions of Symbolic Expressions and Their Computation by Machine, John McCarthy, 1960)
Correva il 1960 quando John McCarthy ha presentato al mondo Lisp, un linguaggio di programmazione che ha introdotto il paradigma della programmazione funzionale, influenzando molti linguaggi moderni.
Il documento partorito da McCarthy esplora le funzioni ricorsive e le espressioni simboliche, utilizzando un formalismo nella definizione delle funzioni in modo ricorsivo e nel descrivere come tali funzioni possano essere utilizzate per effettuare calcoli simbolici.
Impatto: Lisp e la programmazione funzionale sono ancora oggi alla base di numerosi linguaggi di programmazione, con applicazioni significative nell’intelligenza artificiale.
4. L’istruzione Go To è da considerare dannosa (Go To Statement Considered Harmful, Edsger Dijkstra, 1968)
Nella sua trattazione, Edsger Dijkstra critica l’uso eccessivo delle istruzioni GOTO nei linguaggi di programmazione, sostenendo che esse rendono il codice più difficile da comprendere e mantenere, contribuendo al fenomeno noto come “spaghetti code“. L’obiettivo di Dijkstra era dare impulso alla programmazione strutturata, focalizzandosi sull’importanza di scrivere codice chiaro e gestibile.
Impatto: La posizione di Dijkstra ha avuto un impatto significativo sullo sviluppo della programmazione strutturata, promuovendo l’adozione di pratiche di codifica più rigorose e comprensibili.
5. Un modello relazionale dei dati per grandi banche dati condivise (A Relational Model of Data for Large Shared Data Banks, Edgar F. Codd, 1970)
Edgar Codd ha introdotto il modello relazionale nella gestione dei dati, un approccio che consente di organizzare e manipolare i dati in tabelle. Si tratta di una soluzione che ha poi portato allo sviluppo di linguaggi come SQL e ha reso possibile la gestione efficiente di enormi quantità di dati.
Impatto: Anche nell’era dei database NoSQL, quindi non strutturati, i principi del modello relazionale — tabelle, schemi e consistenza — rimangono essenziali. Il modello relazionale è alla base di tutti i sistemi aziendali e delle piattaforme di e-commerce moderne.
6. La complessità delle procedure di dimostrazione dei teoremi (The Complexity of Theorem-Proving Procedures, Stephen A. Cook, 1971)
Nel suo lavoro, Cook introduce il concetto di NP-completezza, esplorando la difficoltà di risolvere determinati problemi di calcolo. La scoperta che alcuni problemi, come il problema di soddisfacibilità booleana (SAT), sono NP-completi ha aperto la strada a una comprensione più profonda della complessità computazionale.
Cook definisce la classe di problemi NP (Nondeterministic Polynomial), che include tutti quei problemi la cui soluzione può essere verificata in tempo polinomiale da una macchina di Turing.
Impatto: La teoria della NP-completezza ha influenzato profondamente la ricerca sugli algoritmi, la crittografia e le soluzioni approssimative ai problemi complessi, ed è centrale nella teoria della complessità computazionale moderna.
7. Un protocollo per l’intercomunicazione delle reti a pacchetto (A Protocol for Packet Network Intercommunication, Vinton G. Cerf e Robert E. Kahn, 1974)
Cerf e Kahn hanno sviluppato la suite di protocolli TCP/IP, che ha reso possibile l’interconnessione tra reti informatiche diverse. Lo schema proposto ha permesso di trasmettere dati sotto forma di pacchetti, con una soluzione diametralmente opposta rispetto alle tradizionali reti a commutazione di circuito, separando e riassemblando i dati per garantirne l’affidabilità durante la trasmissione.
Impatto: TCP/IP è la spina dorsale della rete Internet. Ogni volta che navighiamo online, inviamo una email o facciamo una videochiamata, TCP/IP è alla base della trasmissione dei dati tra dispositivi collegati in un qualunque punto della rete.
8. Tempo, orologi e ordinamento degli eventi in un sistema distribuito (Time, Clocks, and the Ordering of Events in a Distributed System, Leslie Lamport, 1978)
Un lavoro fondamentale è anche quello di Leslie Lamport, pubblicato nel 1978, che affronta le sfide legate alla sincronizzazione e all’ordinamento degli eventi all’interno di sistemi distribuiti. In un sistema distribuito, i processi sono separati fisicamente e comunicano attraverso messaggi; pertanto, determinare l’ordine in cui gli eventi si verificano diventa cruciale per la coerenza e la correttezza del sistema.
La proposta principale consiste nell’uso di orologi logici per mantenere l’ordine degli eventi. Gli orologi logici sono aggiornati solo attraverso messaggi interni al sistema, evitando l’uso di orologi fisici, che possono introdurre anomalie.
Impatto: Le soluzioni di Lamport sono risultate fondamentali per la progettazione di sistemi distribuiti moderni e la gestione della concorrenza in ambienti cloud.
9. Nessuna soluzione magica: difficoltà essenziali e accidentali nell’ingegneria del software (No Silver Bullet—Essence and Accident in Software Engineering, Fred Brooks, 1986)
In questo suo famoso articolo, Fred Brooks sottolinea che non esiste una soluzione magica (un “colpo d’argento”) che possa risolvere la complessità intrinseca dello sviluppo software. Brooks distingue tra le difficoltà “essenziali” — quelle legate alla natura stessa dei problemi da risolvere — e le difficoltà “accidentali”, che dipendono dagli strumenti, metodi e tecniche che utilizziamo per affrontare questi problemi.
Impatto: Il concetto che alcune sfide nello sviluppo software siano inevitabili, ha avuto un impatto profondo sulla gestione dei progetti software. Ha messo in guardia contro l’idea che l’adozione di nuovi strumenti o metodologie possa risolvere rapidamente i problemi più complessi e ha influenzato la visione della complessità come parte del processo di sviluppo software.
10. Gestione dell’informazione: una proposta (Information Management: A Proposal, Tim Berners-Lee, 1989)
Tim Berners-Lee ha proposto il World Wide Web, un sistema ipertestuale globale che ha reso accessibile la rete a tutti, nell’ormai lontano 1989. Con l’introduzione di concetti come URL, protocollo HTTP e link ipertestuali, Berners-Lee ha creato una struttura che ha trasformato Internet in uno spazio fruibile non solo dai ricercatori, ma da ogni utente.
Impatto: La proposta di Berners-Lee ha rivoluzionato il nostro modo di interagire con l’informazione. Oggi, ogni aspetto della nostra vita — social media, shopping online, ricerca di informazioni — è legato al Web, che ha sbloccato l’accesso istantaneo alla conoscenza globale. Buona parte dei servizi che utilizziamo poggiano proprio sul Web.
11. Anatomia di un motore di ricerca ipertestuale su larga scala (The Anatomy of a Large-Scale Hypertextual Web Search Engine, Sergey Brin e Larry Page, 1998)
Si deve a Larry Page e Sergey Brin lo sviluppo del PageRank, un algoritmo che analizza i link tra le pagine Web, trattandoli come “voti di fiducia”. Con un approccio che si presentava come eccezionalmente innovativo rispetto alle semplici directory (raccolte di link) che andavano in voga all’epoca, Google ha potuto offrire sin da subito risultati di ricerca pertinenti, rivoluzionando il modo in cui esploriamo il Web.
Impatto: Il motore di ricerca Google, inizialmente basato esclusivamente sul concetto di PageRank, ha cambiato radicalmente il modo con cui troviamo informazioni online, influenzando anche molteplici altri strumenti nati in tempi più recenti.
12. L’attenzione è tutto ciò che serve (Attention Is All You Need, Vaswani et al., (2017)
Elaborato da un gruppo di ingegneri Google, questo articolo ha introdotto l’architettura Transformer, che ha letteralmente rivoluzionato l’approccio all’elaborazione del linguaggio naturale e ha avuto un impatto enorme nel campo dell’intelligenza artificiale, in particolare sui modelli di linguaggio di grandi dimensioni (LLM).
L’utilizzo di un meccanismo di self-attention consente al modello di pesare l’importanza di diverse parti di una sequenza di input, permettendo così di elaborare frasi o testi interi in modo più efficiente rispetto ai modelli precedenti basati su reti neurali ricorrenti (RNN) come LSTM.
Impatto: Il lavoro sui Transformer ha dato vita a una nuova generazione di modelli di intelligenza artificiale che dominano il campo del linguaggio naturale, rendendo possibile lo sviluppo e l’utilizzo di applicazioni avanzate per la generazione di testo e l’analisi semantica. È alla base delle tecnologie AI che alimentano assistenti vocali, chatbot e altri sistemi evoluti.