Carlo Denza : 15 Novembre 2021 14:50
Autore: Carlo Denza
Data Pubblicazione: 15/11/2021
Questo articolo racconta la storia, i concetti, le idee, i metodi e i fondamentali dell’informatica. Non parla, per ora, di computer, né di programmazione, anche se è influenzato fortemente da entrambi.
Sei un Esperto di Formazione?
Entra anche tu nel Partner program!
Accedi alla sezione riservata ai Creator sulla nostra Academy e scopri i vantaggi riservati ai membri del Partner program.
Per ulteriori informazioni, scrivici ad [email protected] oppure su Whatsapp al 379 163 8765
Supporta RHC attraverso:
Al lettore, che ancora non l’abbia già fatto, ricordo e raccomando la lettura di due articoli precedentemente scritti e gentilmente ospitati su RHC.
Oggi ci addentreremo nella storia e conosceremo i personaggi che hanno contribuito alla creazione di uno tra gli strumenti più importanti dell’era dell’informatica, non credendo giusto che strumenti come questo che hanno contribuito alla creazione dell’informazione e della comunicazione, restino relegati solo nell’Olimpo degli “iniziati”.
Quindi nuovamente imbarchiamoci a bordo della Enterprise USS, lasciandoci trasportare, come passeggeri, in questa nuova esplorazione non più nelle profondità della galassia dei sistemi Unix ma per parafrasare una famosa canzone degli anni Ottanta, il nostro percorso ci guiderà tra libri di cibernetica e algoritmi di matematica.
Nella società dell’informazione in cui viviamo le principali attività che assumono valore economico, politico o culturale di rilievo lo fanno grazie al trattamento delle informazioni. La massiva diffusione delle informazioni è stata possibile grazie alle tecnologie e ai sistemi IT, che a partire dai primi anni Settanta si sono sempre più diffusi fino ad oggi, dove viviamo immersi e condizionati da “paesaggi” digitali.
Iniziamo ora con il ragionare su questa domanda: “Come si può risolvere un problema, ovvero, quando possiamo affermare che un problema è risolto?”. Vestiamo i panni di un matematico. Per un matematico e anche molto più intuitivamente, un problema è risolto quando esiste un metodo per risolverlo.
Questo ci porta a fare una prima considerazione: molto probabilmente nessuno (Scienziato o studioso che sia) impiegherà mai il proprio tempo a cercare una soluzione nuova per risolvere un problema scientifico per il quale esiste già una metodo per risolverlo. Magari potrà mettersi alla ricerca di un metodo alternativo o una soluzione personale, ma questo è un altro discorso.
Quindi, per farla breve, per il nostro bravo matematico: “Un problema si può considerare risolto quando esiste un “metodo” per risolverlo.” Ora, invece, vestiamo i panni di un informatico e poniamoci la stessa domanda: ”Come si può risolvere un problema?”.
Ecco, questo è un punto decisivo della computer science: un problema lo si considera risolto quando possediamo un metodo per risolverlo.
E dall’esecuzione di quel metodo otteniamo un risultato, cioè un numero, ad esempio “3,1415926535.” Il numero è solo un esempio. Quindi nella computer-science, oltre ad aver dovuto progettare un metodo per la risoluzione di un problema, bisogna che questo procedimento sia eseguito. Tale procedimento, eseguito su di uno strumento appropriato, nel nostro caso un computer, prende il nome di algoritmo.
La seguente figura potrà aiutarci a capire meglio
Pertanto possiamo iniziare a dare una prima definizione di algoritmo:
”Un algoritmo, altro non è che un procedimento, un processo o più semplicemente un insieme ordinato di step, di passi da fare, necessari alla risoluzione di una specifica richiesta.”
Questa non è certamente la definizione più rigorosa e completa che possiamo dare di algoritmo, ma per il momento ci basta questa per imbastire la nostra riflessione. Come vedremo più avanti, in informatica, “l’algoritmo” deve soddisfare determinati criteri per riuscire ad essere considerato una soluzione fattibile ad un problema.
Tra il 400 e il 300 a.c., il matematico greco Euclide inventò un algoritmo in grado di trovare il massimo comune divisore (M.C.D.) di due numeri interi positivi. Il M.C.D. di x e y è, come sappiamo, il più grande intero che divide in maniera esatta sia x che y. Ad esempio, il M.C.D. di 24 e 36 è 12.
I dettagli dell’algoritmo stesso non sono ora importanti, ma l’Algoritmo di Euclide, come viene chiamato, è considerato il primo algoritmo non-banale mai inventato. Per una migliore visione d’insieme, diamo anche un occhiata alla etimologia della parola stessa.
Secondo molti la parola algoritmo deriva dal nome -Al Khuwarizmi- matematico persiano che visse tra il 780 e l 850 d.c. circa. Sebbene non sappiamo molto della vita di al-Khwarizmi, uno dei pochi elementi certo nella ricostruzione della sua vita sta nel nome. Al-Khwarizmi, significa originario della Coresmia o Khwarezm, attiguo alla regione iraniana del Khorasan, località che fa parte dell’odierno Uzbekistan. Matematico-astronomo è considerato uno dei primi ad aver fatto riferimento al concetto di algoritmo nella sua opera, nella quale descrisse algoritmi, ovvero procedimenti per risolvere operazioni matematiche.
Nello specifico, gli si attribuiscono le regole passo-a-passo per l’addizione, la sottrazione, la moltiplicazione, e la divisione di due numeri ordinari decimali. Ma non solo, è anche ricordato per i suoi fondamentali contributi dati all’Algebra mediante il suo famosissimo trattato: “Al-jabr wa’l muqabalah” composto fra l’813 e l’833. Per i più curiosi, non a caso fu proprio da tale trattato che iniziò a circolare il nome “algebra”, diventato poi di uso comune in Occidente.
Per quanto riguarda l’hardware, una delle prime macchine con processo controllato si deve al francese Joseph Jacquard, il quale realizzò un telaio controllato da un “algoritmo” con l’ausilio di schede perforate.
Mentre una delle figure più importanti e singolare della storia dell’informatica fu Charles Babbage, matematico inglese, dopo avere parzialmente costruito una macchina, nel 1833, chiamata la “macchina differenziale”, per la valutazione di determinate formule matematiche, concepì e pianificò una macchina straordinaria che chiamò “macchina analitica”.
A differenza della macchina differenziale, progettata per eseguire compiti specifici, la macchina analitica doveva essere in grado di eseguire algoritmi o programmi codificati dall’utente usando anch’essa schede perforate. Una curiosità storica, Ada Byron, Contessa di Lovelace (figlia del più famoso George Gordon, sesto Barone Byron di Rochdale 1788-1824), fu la programmatrice di Babbage. Anche lei è una delle figure più interessanti della storia della computazione, ed è riconosciuta come la prima donna ad avere posato le fondamenta della programmazione, cento anni e più prima che diventasse disponibile il primo computer funzionante.
Un’altra idea molto interessante che trova corrispondenza nel concetto di algoritmo la troviamo nella seguente uguaglianza:
Sfatiamo fin da subito un falso mito: la tecnologia, non è solo legata all’hardware della macchina. Il quale hardware rappresenta la tecnologia intesa più in senso stretto. Lo studio e la progettazione di algoritmi(che è tecnologia intesa in senso un po’ più ampio) efficaci ed affidabili fanno registrare in genere un incremento prestazionale superiore a quello della tecnologia in senso stretto, cioè legato alla macchina.
Ad esempio si può progettare un algoritmo, il quale impiega meno tempo per risolvere un problema, rispetto ad un altro. Importante da sapere: quando si parla di tempo di algoritmi, ci si riferisce al numero di operazioni che esso può eseguire in un determinato tempo. Questo implica che: meno tempo equivale a dire meno operazioni. E questo migliora sicuramente le prestazioni, in questo senso un algoritmo può essere inteso come tecnologia.
Più intuitivamente, uno stesso problema risolto su un computer obsoleto ma con un algoritmo veloce ottiene più vantaggio rispetto a un algoritmo lento eseguito su di un computer veloce o di ultima generazione. Vediamola cosi:
“Algoritmo veloce su computer lento meglio di algoritmo lento su computer veloce.”
Un altro fattore importante che può accompagnarci nella comprensione degli algoritmi è quello di chiedersi quale fosse lo scopo per cui nacquero i calcolatori moderni.
Una risposta può essere la seguente: i calcolatori nascono perché si aveva la necessità di risolvere problemi che rappresentavano situazioni reali, cioè della scienza, della tecnica, della economia. Risolvere problemi del mondo reale avendo a disposizione sistemi di calcolo.
Termino questa articolo che voleva essere una introduzione al concetto di algoritmo, alle idee che si nascondono dietro ai veri e propri concetti matematici che ritroveremo quando, in un prossimo pezzo, analizzeremo più analiticamente la questione.