| Lavorare con un calcolatore non significa solo lavorare con uno 
strumento elettronico. Ogni volta che accendiamo un calcolatore agiscono due 
componenti fondamentali ed entrambe necessarie: hardware (HW): è la parte fisica 
del calcolatore e comprende i circuiti elettronici e tutti gli altri dispositivi 
fisici presenti nel calcolatore; software (SW): è la componente non fisica del 
calcolatore ed è costituita dai programmi memorizzati dentro il calcolatore; è 
il SW a rendere così flessibile il comportamento di questa macchina rendendola 
in grado di eseguire una varietà infinita di compiti. 
 Precursori del 
sofware sono stati gli algoritmi numerici introdotti fin dall'antichità per 
risolvere problemi matematici di vario genere: l'esecuzione delle istruzioni che 
componevano tali algoritmi era affidata alle facoltà "meccaniche" 
dell'intelletto umano.
 
 Nella scrittura del SW giocano un ruolo 
fondamentale i linguaggi di programmazione. La loro evoluzione ha caratterizzato 
fortemente i diversi settori della informatica condizionando talvolta la stessa 
progettazione dei calcolatori.
 
 A partire dagli anni '50 si è compreso 
che il SW permette di trasformare una "macchina primitiva" in una macchina più 
ricca di funzionalità o radicalmente diversa rispetto a quella fisica. Una 
siffatta macchina, ottenuta grazie ad un opportuno software, viene denominata 
"macchina virtuale".
 | 
| Fig. 150. Algoritmo di Euclide per il 
calcolo del massimo comun divisore. Alla base dello sviluppo di software (cioè, 
i programmi per il funzionamento del computer) c'è il concetto di algoritmo. 
Infatti, un algoritmo è un procedimento risolutivo costituito da un insieme 
finito di istruzioni che, eseguite in ordine e in modo preciso, permettono di 
determinare i risultati del problema a partire dalle informazioni a 
disposizione. Ogni istruzione deve essere sufficientemente elementare per poter 
essere eseguita 'meccanicamente' e senza ambiguità. La parola "algoritmo" 
proviene dal nome dello studioso persiano al-Khowarizmi, il cui testo di 
aritmetica (825 d.C. circa) conteneva numerosi procedimenti per risolvere 
problemi algebrici. L'algoritmo di Euclide rappresenta un esempio classico di 
algoritmo non banale e si trova descritto negli Elementi di Euclide (circa 350 
a.C.). Questo algoritmo permette di determinare il M.C.D. di due numeri naturali 
ed è molto più efficiente del metodo che richiede di elencare tutti i divisori 
dei due numeri considerati. Non sappiamo se esso sia stato effettivamente 
scoperto da Euclide, oppure fosse già noto.  | Algoritmo di Euclide Sia a > 0, b ³ 0 e a ³ b inizio mentre b ¹ 0 esegui le seguenti 
tre istruzioni 1. r ¬ a mod b 2. a ¬ b 3. b ¬ r scrivi "Il M.C.D. è ", valore di a
 fine | 
| Fig. 151. Alan M. Turing. Tra i 
pionieri che negli anni ’30 arrivarono a definire in modo rigoroso le proprietà 
degli algoritmi va sicuramente ricordato il grande matematico inglese Alan M. 
Turing. Egli introdusse un modello astratto di calcolatore universale e 
studiandone le caratteristiche derivò numerosi ed importanti risultati ponendo 
le basi teoriche dell'informatica. Successivamente negli anni della seconda 
guerra mondiale fu coinvolto nel progetto segreto per la realizzazione del 
Colossus. Contribuì poi direttamente alla progettazione dei primi calcolatori 
elettronici a valvole in Gran Bretagna.  |   | 
| Fig. 152. Pannello di programmazione 
con fili e spinotti impiegato nei sistemi meccanografici a schede perforate. 
Anche nei primi calcolatori (ad esempio, l'ENIAC) la programmazione della 
macchina era basata sulla riconfigurazione di un numero enorme di cavi ed 
interruttori. Tale metodo era molto scomodo e faticoso e dava origine facilmente 
ad errori. |   | 
| Fig. 153. Uno dei primi programmi 
scritto da Tom Kilburn nel 1948 per il calcolatore Manchester Mark I. La lingua 
che il computer è in grado di comprendere si chiama Linguaggio Macchina. In 
questo linguaggio sia i dati che le istruzioni sono rappresentate mediante 
stringhe di 0 e 1, come si nota nelle colonne di destra.  |   | 
| Fig. 154. Alcune istruzioni del 
microprocessore Motorola 6502, utilizzato all'inizio degli anni '80. La 
preparazione e l’introduzione nel calcolatore di programmi scritti nel 
linguaggio macchina caratterizzò la programmazione negli anni '40 e nei primi 
anni '50. Poiché la programmazione mediante questo tipo di linguaggio era 
particolarmente difficile, si cercarono ben presto delle strade per facilitare 
questo compito con l'introduzione dei linguaggi simbolici.  | 
| Istruzioni in linguaggio 
macchina | Significato |  
| 10100101 00000110 | Preleva dalla sesta posizione di memoria RAM il 
dato e trasportalo nel registro interno (ACCUMULATORE) dell'unità di 
elaborazione (CPU). |  
| 01100101 00000111 | Preleva il dato contenuto nella settima posizione 
di memoria RAM e sommalo al dato contenuto nel registro interno (ACCUMULATORE) 
della CPU. |  
| 10000101 00000100 | Trasferisci il risultato dall'ACCUMULATORE alla 
quarta locazione di memoria 
RAM. |  | 
| Fig. 155. Grace Hopper. Poiché il 
calcolatore è in grado di comprendere solo il linguaggio macchina, 
l'utilizzazione di linguaggi di programmazione simbolici pose il problema della 
traduzione: tutte le istruzioni di un programma, prima di essere eseguite, 
devono essere tradotte in linguaggio macchina. L'idea chiave fu quella di 
affidare questo compito al calcolatore stesso. L’idea arrivò attorno al 1950 e 
una delle prime persone a sperimentare un programma di traduzione (compilatore) 
fu Grace Hopper (1906-1992), la quale nel 1951 implementò il primo compilatore 
A-0.  |   | 
| Fig. 156. John Backus. Nel 1954, 
iniziò insieme ad alcuni collaboratori presso l'IBM a progettare il linguaggio 
di programmazione ad alto livello FORTRAN (FORmula TRANslator). L’introduzione 
di questo linguaggio rappresentò un passo molto importante poiché per la prima 
volta, diversamente dal linguaggio macchina e dall’assembler, permise di 
scrivere programmi in una forma vicina al modo con cui noi ragioniamo sui 
problemi matematici. Questo linguaggio si può considerare il progenitore di 
tutti i linguaggi di programmazione ad alto livello.  |   | 
| Fig. 157. a. b. Un elettrodomestico 
multifunzionale: macinacaffè e sbattiuova. Diversamente dai calcolatori, 
affinché l'elettrodomestico possa svolgere una diversa funzione, è necessario 
sostituire una componente fisica. Il calcolatore programmabile è come l’argilla: 
può essere modellato a piacere per ottenere una varietà infinita di macchine 
diverse. Poiché il SW può essere modificato con facilità, il vantaggio di questo 
sistema è che la stessa macchina può svolgere funzioni svariatissime.  |   a. macinacaffè   a. sbattiuova | 
| Fig. 158. Coprocessore matematico 
Intel 80387/DX-20. Nei primi personal computer le operazioni matematiche più 
complesse potevano essere svolte da un apposito circuito integrato, denominato 
coprocessore matematico, oppure mediante una serie di programmi ad hoc. In 
questo caso, la componente fisica può essere sostituita (virtualizzata) da un 
programma SW.  |   | 
| Fig. 159. Un manuale del sistema 
operativo DOS versione 1.10. L'utilizzo di un calcolatore non comporta 
semplicemente l'acquisto delle parti fisiche ma, indipendentemente 
dall'applicazione specifica che richiediamo alla macchina, include una serie di 
programmi essenziali per il funzionamento della macchina stessa: l'insieme di 
questi programmi va sotto il nome di sistema operativo (SO). I sistemi operativi 
conferiscono all'hardware dei computer la capacità di dialogare in modo 
amichevole con l'utente. In tal modo, l'utente dialoga con il computer come se 
avesse di fronte una "macchina virtuale" dotata di funzionalità molto più ricche 
di quelle offerte dalla macchina fisica (hardware).  |   | 
| Fig. 160. Simulatore di volo per 
personal computer. Analogamente a quanto visto per i sistemi operativi, un 
opportuno programma può trasformare un computer in una macchina virtuale 
dedicata ad un compito specifico. Il simulatore di volo costituisce un esempio 
emblematico di tale processo di virtualizzazione. Con sistemi più sofisticati 
del personal computer la vitualizzazione può essere spinta fino a comprendere le 
sensazioni fisiche del volo.  |   | 
| Copyright 1999-2001 Paolo Giangrandi - realizzazione web 
Tecnoteca s.r.l. |