Articolo di LUCA CERRI
(LUCA CERRI – Consulente, esperto di storia dell’informatica)

Il ritrovamento nel 1974 dell’ominide Lucy ha dimostrato che da oltre 3 milioni di anni la razza umana è dotata del pollice opponibile, cioè la capacità anatomica di piegare il pollice per toccare tutte le altre dita della mano. Questa caratteristica, quasi esclusivamente presente nella razza umana, è alla base della nostra capacità di manipolare e costruire oggetti. Combinata con le altre nostre facoltà mentali, creative ed espressive, ha dato origine a quella che definiamo tecnologia, termine che deriva dal greco antico, composto dalle parole “téchne”, che significa “arte”, “abilità” o “saper fare”, e “lógos”, che significa “discorso”, “studio” o “trattato”.
La tecnologia ha accompagnato e supportato il continuo evolvere della civiltà sin dalle sue origini, dalla costruzione di semplici utensili alla invenzione della ruota, della scrittura, della stampa, della macchina a vapore e altre macchine. Una innovazione tecnologica nata verso la metà dello scorso secolo, l’elettronica, si è affermata come strumento per trattare informazioni tramite la regolazione del movimento di elettroni. I suoi dispositivi, cioè l’hardware, nel corso degli anni sono stati progressivamente miniaturizzati di parecchi ordini di grandezza, con corrispondenti riduzioni di costi e aumento di prestazioni. Nessuna altra tecnologia sviluppata dall’uomo ha avuto uno sviluppo così impetuoso.
La tecnologia elettronica è anche alla base del moderno calcolatore. Ma questo, sin dalle origini, ha comportato l’esigenza di sviluppare una nuova disciplina che integrasse altre già note, come matematica, logica o filosofia, con un nuovo tipo di processo mentale che permette di risolvere problemi complessi in modo logico e strutturato, scomponendoli in passi più piccoli e gestibili. In altri termini, abbiamo imparato a pensare con il supporto della tecnologia, un approccio definito come pensiero computazionale.
Come la scrittura è nata per la necessità di documentare e diffondere il pensiero umano, così è nato il software per poter istruire la macchina secondo quanto definito dal pensiero computazionale dell’uomo.
Con l’aumento delle prestazioni della macchina è stato possibile sviluppare software più complesso, affidandogli un maggiore numero di compiti; questo ha richiesto la progettazione di macchine ancora più potenti: un processo ricorsivo apparentemente inarrestabile.
Dal calcolo si è passati al trattamento ed elaborazione di dati e simboli, in ogni forma.
La diminuzione dei costi dei dispositivi ne ha favorito la diffusione, dalle grandi aziende agli uffici, in ogni realtà lavorativa, agli utilizzi casalinghi, all’utilizzo individuale.
Dai dati forniti al software tramite caricamento di archivi, si è passati ai dati acquisiti dal software, tramite microfono, telecamera, sensori, tracciamento delle interazioni con l’utente.
In questa sede, per ragioni di spazio, verranno presentati solo alcuni dei più rilevanti primi passi di questa incredibile rivoluzione. L’auspicio è che da queste poche vicende si riesca a percepire come esse abbiano gettato le basi ed iniziato a costruire il nostro nuovo mondo digitale.
Macchina Analitica

Londra, 1822: la società inglese è in piena espansione; le varie attività commerciali, scientifiche e le esigenze della navigazione richiedono numerosi calcoli matematici. Questi vengono svolti tramite l’uso di tabelle dei logaritmi, funzioni trigonometriche ed altre. La compilazione manuale di queste tabelle è una attività impegnativa e soggetta ad errori. Il matematico e scienziato inglese Charles Babbage ha l’idea che sia possibile costruire una macchina che le calcoli e stampi automaticamente, riducendo costi ed errori; macchina che egli auspica possa essere azionata dal vapore.
Progetta quindi una prima Macchina Differenziale, ma la costruzione si rivela più complessa del previsto, ne verranno costruite solo alcune parti, anche perché nel frattempo progetta una seconda macchina, la Macchina Analitica, con la capacità di risolvere problemi di varia natura: introduce quindi i concetti di memoria e di programmazione, ottenibile tramite schede perforate. Neanche questa macchina verrà mai realizzata. Viene aiutato in questo progetto da Ada Lovelace, una giovane matematica con la quale instaura una stretta collaborazione. Nel 1940 Babbage viene invitato dal matematico e ingegnere Luigi Menabrea, futuro primo ministro, per partecipare ad una conferenza di matematici all’Accademia delle Scienze di Torino. Nell’occasione Babbage presenta il progetto della Macchina Analitica e Menabrea scriverà in francese una relazione sulla presentazione, poi pubblicata nel 1842 sulla rivista scientifica Bibliothèque Universelle de Genève.
Sarà proprio Ada Lovelace ad occuparsi della traduzione in inglese dell’articolo di Menabrea, aggiungendo numerose sue note esplicative e commenti, che ampliarono notevolmente l’articolo di Menabrea. Le sue annotazioni includevano anche un esempio di calcolo dei numeri di Bernoulli, considerato il primo programma destinato a essere eseguito da una macchina.
Ancora più importante, Ada Lovelace intuì che la Macchina Analitica non era destinata solo al calcolo numerico, ma avrebbe potuto manipolare qualsiasi tipo di informazione rappresentabile in forma simbolica — non solo numeri, ma anche parole, note musicali, logica, linguaggio. Per questa sua visione, Ada Lovelace viene simbolicamente considerata come la prima programmatrice della storia.
Le idee di Babbage e Lovelace, pur rilevanti dal punto di vista concettuale come prima ipotesi di computer programmabile, rimasero descrizioni teoriche poco conosciute, senza effetti concreti sugli sviluppi che solo dopo un secolo portarono alla realizzazione del computer moderno.
Nascita del software

Il primo computer elettronico moderno “a programma memorizzato” (cioè con dati e istruzioni immagazzinati nella stessa memoria che ha effettivamente eseguito un programma) fu il Manchester Small-Scale Experimental Machine (SSEM), noto anche come “Baby”, il 21 giugno 1948. Si trattava però di una piccola macchina, per dimostrare la validità del concetto. Le istruzioni dovevano essere immesse manualmente direttamente nella memoria elettronica tramite interruttori e pulsanti sul pannello di controllo. Si lavorava a livello di codice macchina puro, con numeri binari che rappresentavano le istruzioni e i dati.
Il 6 maggio 1949 entrò invece in funzione all’Università di Cambridge l’EDSAC, il primo vero computer moderno utilizzabile a scopi pratici. Infatti venne introdotto il concetto di linguaggio assembler, in grado di utilizzare simboli mnemonici (come A per Add, S per Substract, T per Transfer, H per Halt) e convertirli in codice macchina binario. Il processo comportava varie fasi: i programmi in codice simbolico venivano digitati su una telescrivente che perforava un nastro, poi caricato nella macchina tramite un lettore; EDSAC convertiva queste istruzioni simboliche in codice macchina con un rudimentale programma assemblatore.
L’uso della macchina e del linguaggio Assembler, considerato il primo sistema di programmazione completo della storia, venne descritto nel manuale “The Preparation of Programs for an Electronic Digital Computer”, pubblicato dai progettisti Maurice Wilkes, David Wheeler e Stanley Gill nel 1951.
Il manuale introdusse anche altri concetti fondamentali: la libreria di sottoprogrammi (un concetto pionieristico che anticipa le moderne funzioni e moduli), i metodi di organizzazione del codice e il debugging. Quest’ultimo aspetto si rivelerà, inaspettatamente, una attività molto impegnativa, che avrà impatti su tempi e relativi costi di sviluppo del software.
La pubblicazione di questo manuale, il primo libro sulla scrittura di programmi, ha di fatto avviato la diffusione delle nuove professionalità necessarie per istruire le costose grandi macchine che presto sarebbero state disponibili.
L’educazione del computer

È questo il titolo di un saggio presentato nel 1952 da Grace Hopper, prima programmatrice della società Univac, alla conferenza dell’ACM (Association for Computing Machinery). Si tratta di un testo pionieristico che anticipa molte delle idee fondamentali della programmazione moderna. L’educazione del computer implica la creazione di strumenti che lo rendano capace di eseguire compiti complessi, senza che il programmatore debba intervenire a basso livello, con conoscenze specifiche dell’hardware della macchina. Hopper introduce il sistema A-0 (un compilatore e anche una sorta di “linker” delle routine).
Sviluppa poi il successore B-0, o FLOW-MATIC, un compilatore che utilizzava parole in lingua inglese al posto dei simboli matematici.
Un tassello fondamentale nello sviluppo di linguaggi “di alto livello”, quindi più vicini al linguaggio umano e facili da utilizzare, è stato il FORTRAN, sviluppato da un team IBM diretto da John Backus, e rilasciato nel 1957. Adatto ad applicazioni scientifiche, ha avuto grande successo ed è ancora oggi utilizzato in particolari casi.
Hopper avrà anche un ruolo di leadership nella definizione del COBOL: linguaggio per applicazioni gestionali parzialmente derivato dal FLOW-MATIC e sviluppato da un consorzio di aziende nel 1961. Questo linguaggio è stato l’altro importante tassello che ha decretato il successo dei linguaggi di alto livello.
Un terzo linguaggio sviluppato nel periodo, anche se meno diffuso perché specialistico, è stato il LISP. Rilasciato nel 1958 veniva usato per le prime sperimentazioni di Intelligenza Artificiale, soprattutto grazie al famoso seminario tenuto a Dartmouth nel 1956, nel quale John McCarthy aveva coniato il termine stesso e radunato i principali ricercatori interessati allo stimolante argomento.
Un ulteriore rilevante contributo agli strumenti dedicati a semplificare l’uso dei computer è stato il linguaggio BASIC, sviluppato al Dartmouth College nel 1964 dai matematici John G. Kemeny e Thomas E. Kurtz. Il loro obiettivo era di rendere accessibile il “coding” (l’attività di scrittura delle istruzioni) agli studenti non scientifici, semplificando l’interazione con il computer: l’utilizzo infatti era interattivo tramite terminali collegati remotamente al computer centrale della scuola, una novità rispetto alla programmazione batch con schede perforate. Nei decenni successivi, con l’avvento dei Personal Computer, il BASIC diventerà il primo e più popolare linguaggio di programmazione per studenti, utenti occasionali e sperimentazioni su semplici programmi. Sarà anche il linguaggio con cui Bill Gates è entrato da protagonista sin dagli inizi nel mondo del software per PC fondando la Microsoft.
Nascita ed evoluzione del mercato del software

Nei primi anni dei mainframe, nome che indicava i grandi calcolatori dell’epoca, non esisteva un mercato del software. Le stesse aziende produttrici fornivano il sistema operativo, gli strumenti di sviluppo software e programmi vari di servizio; tutto senza costi aggiuntivi rispetto a quello dell’hardware. Non si parlava di licenze, anzi le stesse aziende favorivano il libero scambio di programmi fra gli utenti dei loro sistemi, anche tramite il supporto ai rispettivi gruppi di utenti.
IBM, incontrastata leader di mercato, fondò il primo e più diffuso di questi gruppi, lo SHARE.
Esistevano però alcune aziende che avevano intuito il potenziale commerciale del software. Fra queste quella che ebbe maggior successo è stata la ADR (Applied Data Research), fondata nel 1959, con il suo Autoflow, primo software commerciale per la produzione di diagrammi di flusso. All’epoca la rappresentazione grafica con simboli standardizzati del flusso logico delle istruzioni era lo strumento principale di progettazione del software. Fu proprio ADR ad avviare una causa contro IBM per la posizione monopolistica derivante dalla cessione gratuita del software. Anche l’azienda Informatics, fondata nei primi anni 60’, con il suo Mark IV, un programma di gestione file e generatore di rapporti, ebbe un buon successo commerciale.
Forse come conseguenza della causa con ADR, IBM nel giugno 1969 annunciò l’unbundling del software, che da allora divenne soggetto a licenza, onerosa. Questo aprì il mercato a numerose altre aziende indipendenti di software, o ISV (Independent Software Vendors). Oltre alle già citate ADR e Informatics, vanno ricordate la tedesca SAP fondata nel 1972, che in breve divenne leader nel campo dei gestionali integrati per grandi aziende (ERP), e la Computer Associates del 1976 con vari strumenti di gestione per Mainframe.
Con l’avvento di computer più piccoli e meno costosi, i minicomputer, il mercato del software si è diffuso come realtà industriale con migliaia di software-house e con offerte rivolte ad aziende di ogni dimensione.
UNIX

I primi rudimentali sistemi operativi per mainframe erano sviluppati dagli stessi produttori dell’hardware, in quanto dipendenti dall’hardware specifico. Il primo prodotto compatibile con diverse macchine, anche se dello stesso produttore, è stato OS/360, sviluppato da IBM nel 1965 per l’intera famiglia di sistemi /360. Viene ricordato come primo grande progetto di sviluppo software, rivelatosi molto più complesso da realizzare di quanto previsto.
Anche un successivo sviluppo nel 1965 da parte di un consorzio di aziende, il MULTICS, si rivelò troppo ambizioso e venne abbandonato. Furono proprio due sviluppatori dei Bell Labs che avevano partecipato al progetto MULTICS, Ken Thompson e Dennis Ritchie, che ne ripresero i principi innovativi e realizzarono un sistema più semplice, ma ottimizzato e funzionante: il sistema UNIX. Questo sistema, evoluto nel tempo, è una pietra miliare nel campo dei sistemi operativi: è stato il primo indipendente dall’hardware, quindi non legato all’offerta di singoli produttori e scalabile su macchine di potenza crescente. È il sistema da cui sono derivati Linux, Android, macOS e iOS di Apple, e molte varianti UNIX ancora oggi usate nei server di Internet.
Software per Personal Computer

Dopo alcuni anni di pionieristiche piccole macchine rudimentali, il lancio del PC IBM nel 1981, con componenti standard e sistema operativo DOS licenziato in modo non esclusivo da Microsoft, ha inaugurato l’era della “piattaforma standard”, aperta a vari produttori di hardware. Infatti la tipologia di licenza del DOS, poi Windows, abilmente adottata da Bill Gates obbligava i vari produttori a fornire le macchine con il sistema operativo di Microsoft. Questa piattaforma ha permesso il nascere del software pacchettizzato, che è diventato un prodotto di consumo.
Sono nati i “computer shop”, per la sola vendita dei PC e del loro software pacchettizzato, composto da dischetti, poi CD, e corposi manuali. Il software è diventato un prodotto di massa, ha raggiunto le librerie e la grande distribuzione. Anche le tipologie di prodotti offerti si sono adattate alla richiesta degli utenti finali: dagli strumenti di produttività quali gestione testi, fogli di calcolo, grafica, didattica; e naturalmente è esploso il mercato dei videogiochi, quest’ultimo anche su piattaforme hardware dedicate. La disponibilità di linguaggi ed ambienti di sviluppo relativamente semplici, come Visual Basic o Turbo Pascal, ha permesso anche a piccolissime startup di sviluppare una propria offerta. Una ampia disponibilità di riviste specializzate nel settore ha informato e alimentato la crescita esponenziale dell’offerta e delle conoscenze informatiche dell’utenza. Fra i nomi delle aziende dell’epoca, oltre alla Microsoft, vanno ricordate Micropro (WordStar), Visicorp (Visicalc), Wordperfect, Asthon-Tate (dBase), Aldus (Page Maker), Autocad, Adobe, Corel Draw, Borland. Activision, Broderbound, Sierra OnLine, Electronic Arts, Microprose.
Interfacce grafiche

Il pioniere dell’uso della grafica per l’interazione uomo-macchina è stato Ivan Sutherland, che nel 1963 per la sua tesi di dottorato sviluppò il programma Sketchpad ed il relativo dispositivo basato su una penna ottica per l’interazione con lo schermo. Questo programma, basato su innovativi concetti di programmazione orientata agli oggetti, gestiva finestre, oggetti manipolabili e vincoli geometrici.
Gli stessi concetti furono poi ripresi da Douglas Engelbart, che nel 1968 organizzò una celebre presentazione nella quale integrò l’uso di un suo nuovo dispositivo di interazione, il mouse, la gestione di finestre multiple, concetti di ipertesto e collaborazione remota. Fu la prima dimostrazione pratica di interazione uomo-macchina basata su metafore visive.
Solo nel 1973 la Xerox, al tempo azienda leader nel campo delle fotocopiatrici, sviluppò un primo prodotto sperimentale con schermo grafico, icone, finestre sovrapponibili e mouse. Non fu commercializzato su larga scala, ma influenzò profondamente l’evoluzione dell’interazione uomo-macchina (GUI). Concetti che verranno integrati, con piccole variazioni sul tema, su tutti i sistemi operativi, a partire dall’Apple Lisa nel 1983, poi MacIntosh, Microsoft Windows, Atari ST, Commodore Amiga, X Window System, GNOME e KDE per Unix e Linux.
Protocolli di rete

Dopo i primi anni nei quali l’utilizzo del calcolatore da remoto avveniva tramite terminali (prima solo telescriventi, poi video) si è iniziato a sviluppare il concetto di rete, intesa come collegamento fra computer. Questo ha richiesto la definizione di protocolli, l’insieme di regole che definiscono le modalità di scambio dei dati. Un importante innovazione nel settore è stata l’introduzione del concetto di rete a pacchetto, nella quale le informazioni sono suddivise e associate ad intestazioni che ne definiscono l’indirizzamento. La prima implementazione è stata ARPANET a partire dal 1969. Gradualmente questo approccio rimpiazzerà le reti proprietarie esistenti all’epoca, come la SNA di IBM, DECnet della Digital, XNS della Xerox. Dopo alcuni tentativi di definire un insieme di livelli standard (OSI) in cui suddividere i protocolli, il mercato si è consolidato su quello che si è affermato come standard di fatto, oggi conosciuto come TCP/IP. Questo standard ed altre regole stabilite a livello mondiale sulla gestione della rete, ad esempio la gestione dei nomi dei domini, hanno permesso l’adozione di Internet come rete planetaria.
Il futuro

Il software esiste solo dal 1949, ed ha creato una nuova scienza, l’informatica, nuove professioni, nuove economie, un nuovo mondo. Da pochi anni sta anche imparando a ragionare con i dati che gli abbiamo fornito, e questo ci sta portando verso una discontinuità nella evoluzione della razza umana, che sino ad oggi non ha avuto modo di confrontarsi con altre intelligenze, se non quelle delle specie animali, che consideriamo inferiori.
Queste evoluzioni del software di apprendimento automatico e in genere di quella che definiamo intelligenza artificiale sono i primi sintomi di un’epoca nella quale dovremo interagire sempre più frequentemente con una intelligenza che non potremo considerare inferiore.
Derivando dalle intelligenze combinate dell’intero genere umano, dovremo accettare di considerarla superiore?

