Informatica

Individuare un preciso evento storico in cui sarebbe avvenuta la nascita dell’informatica sarebbe non solo difficile, ma con tutta probabilità neanche corretto. Infatti, anche in epoche antiche, come quella della cultura greco-ellenistica (si ricordi come essa abbia prodotto il primo calcolatore meccanico conosciuto, la cosiddetta “macchina di Anticitera”), quella dell’India dei primi secoli a.C. (alcune forme di computo possono ritrovarsi nei sūtra indiani, testi dal carattere prettamente filosofico-religioso), durante la dinastia Zhōu nel VI secolo a.C. in Cina (che ha dato vita ai primi abaci, utilizzati poi anche in Europa da greci e romani), e perfino nell’antichissima cultura babilonese in Mesopotamia (dove erano noti sistemi di automatizzazione dei calcoli aritmetici) erano stati definiti, sebbene in modo vago, lacunoso e affatto rigoroso, dei concetti e delle procedure del tutto fondamentali per la scienza informatica.

Contributi ancora più notevoli alla disciplina sono stati dati in epoca moderna da Wilhelm Schickard e Blaise Pascal, inventori delle prime due calcolatrici meccaniche capaci di addizionare e sottrarre fino a otto cifre tenendo anche conto del riporto, da Gottfried Leibniz, inventore del sistema binario e della prima calcolatrice capace di eseguire le quattro operazioni, e ancora maggiormente da Charles Babbage, che ha ideato e realizzato la “macchina differenziale”, un congegno automatico capace di tabulare funzioni polinomiali, e progettato la “macchina analitica”, un vero e proprio computer dalle funzioni elementari ma generali, per la quale Ada Lovelace avrebbe sviluppato un algoritmo generatore dei numeri di Bernoulli, ponendo in essere così la prima forma di programmazione informatica.

Come si evince infatti da questi riferimenti storici, la storia dell’informatica è da tenersi distinta dalla storia del computer, per la ragione fondamentale inerente al fatto che l’informatica come scienza del calcolo nel suo senso più generale, indipendente da qualsiasi macchina fisica mediante la quale il calcolo viene implementato, programmato e messo in atto.

Tuttavia, se dovessimo individuare un momento preciso nel quale le conoscenze in materia sono state per la prima volta organizzate e sistematizzate secondo alcuni principi generali espressi in forma rigorosa, cioè in cui è nata l’informatica come scienza, non possiamo avere dubbi: ciò è avvenuto durante lo sviluppo della teoria della calcolabilità effettiva, alla fine della cosiddetta “crisi” dei fondamenti della matematica ad inizio anni ’30 dello scorso secolo, periodo nel quale sono stati definiti compiutamente i limiti e le potenzialità di questa disciplina. In modo non del tutto ovvio, almeno per i meno esperti del settore, i fondamenti teorici dell’informatica vennero esplicitati e chiariti nel suddetto periodo culturalmente e scientificamente fecondissimo (basti pensare agli sviluppi che ebbero la matematica, con la già citata rivoluzione dei fondamenti, e la fisica, con l’avvento della meccanica quantistica, ma anche la filosofia, con la fondazione della corrente psicoanalitica e di quella fenomenologica) a prescindere dalla realizzazione, appena un decennio a seguire, del primo calcolatore elettronico.

Questo perché, come abbiamo già accennato, l’informatica non consiste in una tecnica di programmazione di particolari macchine, basate fondamentalmente sull’architettura di Von Neumann-Turing, dato che prescinde dalla modalità e dall’apparecchiatura contingente mediante la quale il calcolo viene effettuato, sia essa rappresentata dal moderno computer, da un insieme di molecole, come nel cosiddetto DNA-computing, che sia definito da un mero calcolo simbolico (come nel λ-calcolo di Alonzo Church), o da una disposizione di particelle (come nella computazione quantistica, di cui parleremo nell’articolo seguente), costituendosi come la scienza universale dell’informazione, ovvero di come l’informazione possa essere codificata, manipolata, valutata, analizzata e misurata.

Un programma durante la sua esecuzione. Esso potrebbe essere eseguito potenzialmente su qualsiasi macchina che sia in grado di computarlo, essendo la sua validità formale indipendente dalla costruzione dell'hardware fisico che ne permetta l'attuazione.

Un programma durante la sua esecuzione. Esso potrebbe essere eseguito potenzialmente su qualsiasi macchina che sia in grado di computarlo, essendo la sua validità formale indipendente dalla costruzione dell’hardware fisico che ne permetta l’attuazione.

Per fornire una visione concreta di quanto abbiamo detto finora, esponiamo alcuni dei concetti fondamentali stanti alla base dell’informatica come scienza, quindi relativi alla teoria della calcolabilità, prima di occuparci di come siano state realizzate macchine capaci di computare effettivamente ciò che i risultati matematici predicono in via ipotetico-deduttiva.

La prima definizione che ci spetta dare è quella relativa a che cosa sia concretamente la calcolabilità.

Essa è semplicemente lo studio inerente alla determinazione della possibilità di risoluzione di un problema mediante un calcolatore. Differentemente dalla complessità computazionale, che studia le condizioni per cui un dato problema sia risolvibile o meno avendo a disposizione una quantità limitata di risorse, siano esse il tempo o lo spazio di memoria (anche se gli strumenti utilizzati per studiare la calcolabilità sono per molti aspetti simili a quelli utilizzati per studiare la complessità dei problemi: ad esempio, il concetto di riduzione funzionale lo si ritrova nella definizione di completezza sia per classi di ricorsività sia per classi di complessità), la calcolabilità in quanto tale non pone restrizioni alle risorse disponibili, ma si occupa solamente di stabilire se, una volta implementato correttamente, un dato problema può essere risolto per via algoritmica o meno.

Qui entra in gioco una nozione essenziale per l’informatica: quella di algoritmo.
Intuitivamente, un algoritmo è un metodo sequenziale consistente in un numero finito di passi che porta alla realizzazione di un compito.

Con più precisione, si può affermare che un algoritmo è dotato delle seguenti proprietà:

  • Ha lunghezza finita;
  • Esiste un agente di calcolo che porta avanti il calcolo eseguendo le istruzioni dell’algoritmo;
  • L’agente di calcolo ha a disposizione una memoria dove vengono immagazzinati i risultati intermedi del calcolo;
  • Il calcolo avviene per passi discreti;
  • Il calcolo è deterministico (e non probabilistico), cioè ad ogni passo del calcolo, esiste uno e un solo passo successivo che ne soddisfi i requisiti;
  • Non deve esistere alcun limite finito alla lunghezza dei dati di ingresso;
  • Non deve esistere alcun limite alla quantità di memoria disponibile;
  • Deve esserci un limite finito alla complessità delle istruzioni eseguibili dal dispositivo;
  • Sono ammesse esecuzioni con un numero di passi finito ma illimitato.

Visualizzazione del risultato

Visualizzazione del risultato