informatica
La scienza del calcolo automatico
L'informatica è la disciplina che studia sistemi per elaborare automaticamente le informazioni. Sistemi quindi che, a partire da una serie di regole predefinite e di dati che vengono immessi in entrata, siano in grado di arrivare attraverso vari passi al risultato desiderato. L'informatica è legata strettamente alla costruzione dei computer, ma di per sé è soprattutto parente della logica. Il suo compito è infatti quello di tradurre un qualunque problema, anche il più complesso, in una serie di calcoli elementari connessi tra loro
Ogni volta che usiamo un programma di scrittura sul nostro computer, o giochiamo a un videogioco che riproduce fedelmente lo svolgimento di una partita di calcio, dobbiamo pensare che tutte le azioni che si svolgono sullo schermo, la grafica colorata ed elaborata che si ha davanti, le mille diverse scelte che si possono compiere sono il risultato di sequenze di acceso o spento (vale a dire passaggio o non passaggio di corrente) nei circuiti integrati contenuti nel computer: milioni di operazioni su sequenze di 0 e 1 (codice binario). A questo punto possiamo renderci conto della potenza dell'informatica, la disciplina che studia il modo di trattare l'informazione in modo automatico, ossia affidandola a un sistema in cui l'essere umano non entra nelle diverse fasi intermedie.
Oggi con il termine informatica si intende, per estensione, tutto il settore industriale che ha a che fare con i computer, i loro accessori e i relativi software. Ma in realtà l'informatica è prima di tutto una branca della matematica e della logica, quella che studia come si possono trasformare procedure complesse in una serie di calcoli elementari, tali da poter essere eseguiti da un sistema automatico, che si tratti di un telaio meccanico o di un computer.
Un computer è in realtà una macchina molto stupida. Non può prendere vere e proprie decisioni e non è in grado di utilizzare dati ambigui, che richiedano di essere interpretati, come invece facciamo noi quando ragioniamo. Di conseguenza, per funzionare ha bisogno di avere regole precise da seguire, suddivise in passi estremamente semplici che prevedano tutte le situazioni di fronte a cui si può trovare.
Questi insiemi di regole sono gli algoritmi. Un algoritmo può essere definito formalmente come una sequenza ordinata e finita di istruzioni che, dato uno o una serie di elementi in input, produce una serie di risultati in output. La caratteristica fondamentale di un algoritmo è che non deve essere ambiguo e deve essere esaustivo, ossia deve prevedere tutte le possibili condizioni di fronte alle quali potrà trovarsi il computer.
Le istruzioni di cui si compone un algoritmo sono azioni da compiere su valori numerici, che possono essere costanti ‒ valori che restano sempre uguali nelle diverse esecuzioni dell'algoritmo ‒ o variabili ‒ contenitori di valori che variano a ogni esecuzione dell'algoritmo.
Un algoritmo deve essere composto da un numero finito di istruzioni, che devono essere eseguite un numero finito di volte. Inoltre, un algoritmo non deve avere ambiguità: in altre parole, deve dare gli stessi risultati indipendentemente da chi lo esegue e da quando lo esegue.
Un semplicissimo esempio di algoritmo è la formula matematica per calcolare l'area di un rettangolo, che si può esprimere così:
Ricevi BASE
Ricevi ALTEZZA
Assegna ad AREA valore BASE×ALTEZZA
Scrivi AREA
Questo è ovviamente un esempio estremamente semplice, ma ogni problema affrontato dai computer deve essere ridotto a una serie di calcoli elementari di questo tipo. Il principale lavoro di un programmatore informatico è proprio quello di analizzare nei minimi dettagli i compiti che il programma dovrà svolgere ‒ dalla scrittura di un documento fino alla rappresentazione di un filmato ‒ e scrivere algoritmi in grado di risolverli.
Esistono molti tipi di algoritmi a disposizione dei programmatori: gli algoritmi di ordinamento, gli algoritmi di ricerca, gli algoritmi ricorsivi, detti anche routine.
Un particolare tipo di algoritmi, oggi diventati molto importanti, sono quelli di compressione dei dati, che servono a esprimere la stessa informazione con un numero minore di bit, in modo che sia più facile immagazzinarla o trasmetterla a distanza su un canale fisico. Mp3, JPEG, MPEG, ZIP sono tutti particolari algoritmi di compressione, che a partire da una informazione 'completa' e molto pesante determinano a quali bit si può rinunciare senza compromettere la comprensibilità dell'informazione.
Una volta trasformato un problema in una serie di algoritmi, il compito dell'informatico non è certo finito, perché occorre tradurre quegli algoritmi in una forma che possa essere compresa dai circuiti logici di un calcolatore. Si utilizzano per questo i linguaggi di programmazione.
L'informatica moderna si basa sul codice binario, ossia un sistema di numerazione in cui, anziché dieci cifre come nella numerazione di origine araba che utilizziamo quotidianamente, si utilizzano solo due cifre, lo zero e l'uno. La logica del sistema binario è la stessa che guida quella decimale, solo che cambia la base di riferimento. A differenza della numerazione decimale, questo codice può essere adattato al funzionamento dei circuiti elettrici, che hanno solo due stati possibili: lo zero corrisponde all'interruzione del passaggio di corrente, l'uno al suo passaggio. La CPU (Central processing unit), il 'cuore' del computer, riceve continuamente istruzioni scritte in questo modo. In base a esse, prende dei valori da determinate locazioni di memoria, esegue delle operazioni su di essi e trasferisce i nuovi valori. La sequenza di 1 e 0 che questo tipo di operazioni comunica alla CPU si chiama linguaggio macchina. Ma scrivere i programmi in questo modo è molto difficile (anche se all'inizio della storia dell'informatica era proprio ciò che dovevano fare i programmatori): è una procedura lunghissima e in cui è molto facile commettere errori.
Per semplificare le cose rispetto al linguaggio macchina è stato creato il linguaggio assembly, che traduce una serie di istruzioni alfanumeriche in linguaggio macchina. Anziché scrivere una sequenza di 1 e 0, il programmatore può così scrivere istruzioni espresse attraverso lettere dell'alfabeto, che specificano per esempio che la CPU deve "aggiungere al registro A di memoria il valore contenuto nella locazione 100".
Tuttavia, questo linguaggio è ancora molto macchinoso da usare, perché esprime le operazioni di base che compie il processore.
Per semplificare ulteriormente le procedure, sono stati sviluppati ancora altri linguaggi, detti di alto livello, che consentono al programmatore di lavorare sulle vere e proprie operazioni logiche come "calcola base per altezza" e che impongono poi a un altro programma, detto compilatore, il 'duro' lavoro di tradurle in istruzioni per il processore.
Uno dei primi importanti linguaggi ad alto livello è stato il FORTRAN (sigla di formula translator "traduttore di formule"), creato nel 1957 dallo statunitense John Backus. Questo programma traduce formule matematiche in algoritmi computazionali. Pensato principalmente per il calcolo numerico, è stato utilizzato per scrivere soprattutto software scientifico, e ne esistono diverse varianti per le diverse applicazioni del calcolo (tra cui simulazione di fluidi, interazioni fra particelle, previsioni meteorologiche).
Dal FORTRAN, nel 1964 è derivato il BASIC (sigla di Beginner's all purpose symbolic instruction code "codice di istruzioni simboliche a uso generale per principianti"). Il BASIC nacque dall'idea di creare un linguaggio molto semplice da imparare e facile da trasportare su computer di diversa concezione. È proprio utilizzando una variante del BASIC che Bill Gates realizzò il sistema operativo MS-DOS per i primi personal computer. Negli anni dei primi microcomputer, tra cui il famoso Commodore® 64, il linguaggio BASIC era fornito in dotazione sia per la programmazione sia come sistema operativo a riga di comando. In seguito il BASIC ha subito notevoli evoluzioni e cambiamenti fino a essere ampiamente utilizzato anche dai programmatori professionisti, in particolare nella versione Visual Basic.
Un altro linguaggio che ha fatto la storia dell'informatica è il Pascal, scritto nel 1970 da Niklaus Wirth: realizzato a scopo didattico, fu il primo linguaggio strutturato, in cui cioè le istruzioni vengono espresse con strutture verbali della lingua inglese. Con i primi mini e microcomputer arrivarono i cosiddetti linguaggi a oggetti, in cui il programmatore definisce delle unità logiche autonome, appunto gli 'oggetti', che si comportano sempre allo stesso modo indipendentemente dalle variabili che vi vengono immesse. Il primo, nel 1983, fu Smalltalk, da cui derivarono l'Eiffel e soprattutto il C++, oggi il più utilizzato linguaggio di programmazione. L'ultimo importante linguaggio di programmazione è stato Java, nato nel 1995.
I linguaggi di programmazione sono utilizzati per scrivere varie tipologie di programmi. Tra i più usati vi sono quelli di videoscrittura, o word processor, che trasformano il computer in una macchina da scrivere estremamente potente e flessibile; i fogli di calcolo, o spreadsheet, che consentono di eseguire complesse operazioni matematiche su un insieme di dati e sono utilizzati soprattutto per le analisi amministrative e finanziarie (permettono tra l'altro di produrre automaticamente rappresentazioni grafiche dei dati); i programmi che gestiscono data base, i quali permettono di immagazzinare grandi quantità di dati in un archivio strutturato, per esempio per raccogliere documenti amministrativi o per gestire una biblioteca.
Altri software, quelli di produzione multimediale, consentono di digitalizzare e modificare fotografie, disegnare, montare filmati o registrare musica. Esiste poi un'enorme quantità di software realizzati per usi molto specifici, dalla progettazione architettonica alle diagnosi mediche.
Quello dell'informatica è diventato uno dei più importanti settori dell'economia. Per buona parte del 20° secolo, tuttavia, si è trattato di un settore relativamente ristretto, in cui la clientela era costituita solo da grandi aziende o dalle agenzie governative (in particolare gli eserciti) e in cui il mercato era dominato da poche potenti società, come la IBM, che producevano tanto i computer quanto i programmi destinati a farli funzionare.
A partire dalla fine degli anni Settanta il mercato informatico si è però completamente trasformato. Prima di tutto, la produzione di hardware e quella di software si sono separate: chi fabbrica i computer non è più, salvo rare eccezioni, chi produce i programmi destinati a farli funzionare. A produrre hardware sono rimaste grandi case come Hewlett Packard e Apple, mentre il mercato del software è dominato da società per lo più nate su scala molto piccola, magari con sede nel garage di qualche programmatore, e diventate nel corso degli anni dei veri e propri colossi. Microsoft prima di tutto, ma anche Adobe e Macromedia.
In più, lo stesso mercato dell'hardware si è a sua volta frazionato in molti settori. Ci sono produttori di microprocessori, di periferiche come stampanti e scanner, di schede per l'elaborazione video, dei suoni e così via. Oggi è possibile richiedere a un negoziante di assemblare un computer in base alle proprie esigenze scegliendo le sue diverse parti una per una e acquistandole da diversi produttori.
Nel corso degli anni Novanta, grazie anche alla crescita di Internet e delle possibilità di commercio e scambio di informazioni attraverso i collegamenti telematici, l'enorme importanza acquisita dal mercato del software e di tutti quei beni 'immateriali' legati proprio all'informatica ha portato a coniare il termine di new economy ("nuova economia") per indicare quella basata sui beni e servizi informatici, in contrapposizione alla 'vecchia economia' basata soprattutto sulla produzione industriale.
Il mercato del software è diventato un luogo di battaglia politica, che vede contrapposti coloro che ritengono il software un prodotto industriale come tutti gli altri ‒ e perciò da proteggere con brevetti e copyright ‒ e quelli che lo considerano una forma di espressione che dovrebbe essere messa gratuitamente a disposizione di tutti.
Bisogna ricordare infatti che la moderna informatica si è sviluppata a partire dal lavoro di un ristretto gruppo di programmatori abituati a scambiarsi liberamente il risultato del proprio lavoro, una vera e propria comunità, caratterizzata per lo più da idee politiche libertarie, i cui membri erano impegnati più a misurarsi l'uno con l'altro che a ottenere un beneficio economico dal loro lavoro. Di questa comunità, attiva nei grandi centri di ricerca statunitensi come il MIT (Massachusetts institute of technology) negli anni Settanta, facevano parte alcune persone che hanno fatto la storia dell'informatica.
In seguito, con la diffusione di massa dei personal computer, il software è diventato una risorsa economica importante che una parte della comunità dei programmatori ha voluto sfruttare, mentre altri sono rimasti legati agli ideali che li animavano all'inizio, e continuano a considerare l'informatica un'attività collettiva, che non deve essere soggetta a limitazioni create dai diritti di proprietà individuale. Si tratta dei cosiddetti hackers (dal verbo inglese to hack che significa più o meno "infastidire, scocciare"). In questo ambito è nato anche il movimento open source ("sorgente aperta"). Mentre la maggior parte dei programmi oggi in vendita sono coperti da copyright e il loro codice sorgente ‒ cioè la programmazione che sta dietro a quanto l'utente vede sullo schermo ‒ è segreto, nel caso dei programmi open source, come il sistema operativo Linux, il codice sorgente viene messo a disposizione insieme al programma, che è praticamente gratuito, e ogni programmatore è libero di fare aggiunte e modifiche mettendole, se vuole, a disposizione della comunità degli utilizzatori.
Alcuni dei temi fondamentali della storia dell'informatica (come il ruolo chiave delle applicazioni militari e il conflitto tra governi e comunità degli hackers) sono stati rappresentati in modo molto efficace da un film del 1983, Wargames - Giochi di guerra, del regista statunitense John Badham. Nel film, un giovane hacker riesce, utilizzando il suo computer e una normale linea telefonica, a inserirsi nell'avanzatissimo sistema informatico del Dipartimento della Difesa statunitense, causando per errore l'avvio della procedura di lancio dei missili contro l'Unione Sovietica. Per fortuna sarà lo stesso computer a 'comprendere', con un procedimento simile a quelli dell'intelligenza artificiale, che non esiste possibilità di vincere una guerra nucleare.