Un computer è una macchina costituita da un insieme di componenti
elettroniche: è facile immaginare quindi, come tutto il funzionamento della
macchina dipenda da un flusso continuo di segnali elettrici, sincronizzati da un
clock, che codificano, in notazione binaria, le informazioni immagazzinate ed
elaborate all'interno della macchina stessa.
Per quanto possa essere complessa e sofisticata l'architettura di un
elaboratore elettronico, questo potrebbe sembrare non molto dissimile da un
qualsiasi altro elettrodomestico presente nella nostra casa. Tuttavia esiste una
differenza sostanziale tra un computer ed una lavatrice: per quanto moderna e
dotata di sofisticati meccanismi elettronici, una lavatrice potrà sempre e solo
lavare dei panni, mentre il computer può essere istruito per svolgere
compiti anche molto differenti tra di loro.
Come si istruisce un computer? Mediante un programma, ossia tramite
una sequenza ben definita di istruzioni che la macchina è in grado di tradurre
in funzioni elementari facilmente eseguibili. Schematicamente possiamo dire che
le caratteristiche principali di un calcolatore sono:
- velocità: è rapidissimo nell'eseguire i compiti che gli vengono
assegnati;
- precisione: è estremamente preciso nell'eseguire calcoli matematici
e logici;
- affidabilità: svolge con rigore e puntualità i compiti assegnati
dall'utente;
- duttilità: è in grado (se programmato correttamente) di svolgere
lavori assai diversi.
Come rovescio della medaglia di queste caratteristiche ``positive'', possiamo
individuare alcune caratteristiche ``negative'' di cui è bene tenere conto:
- è privo di ``buon senso'' e di intuizione;
- è incapace di verificare se c'è corrispondenza tra quanto sta facendo e
gli obbiettivi del programmatore.
Riassumendo, possiamo dire che il calcolatore è un esecutore di ordini
impartiti dall'utente-programmatore, assai preciso ed efficiente, ma un po'
stupido, si limita cioè ad eseguire ciò che gli viene chiesto, a prescindere
dalla correttezza di quanto gli viene ordinato di compiere ai fini della
soluzione del problema (in un certo senso si può dire che è un po' cieco).
Per capire meglio quanto è stato detto vediamo un esempio elementare di
programma per un calcolatore elettronico. Supponiamo che il problema da
risolvere sia quello di effettuare la media aritmetica tra 5 numeri forniti
dall'utente. Il calcolatore deve leggere in input i cinque numeri, sommarli,
memorizzando la somma da qualche parte nella sua memoria ed infine dividere per
cinque la somma totale e stampare il risultato. Una codifica di questo
algoritmo risolutore potrebbe essere la seguente:
- assegna ad n il valore 0
- assegna ad s il valore 0
- leggi un numero in input ed assegnalo ad a
- incrementa di 1 il valore di n
- somma a ed s ed assegna il risultato
ad s
- se n è minore di 5 vai al passo 3
altrimenti prosegui
- dividi s per 5 ed assegna il risultato ad
m
- visualizza il valore di m.
- fermati
Eseguendo in sequenza le istruzioni del programma (che sono evidentemente
molto elementari), il calcolatore è in grado di risolvere il problema che noi ci
eravamo posti. Naturalmente l'algoritmo è espresso in lingua italiana: per
essere capito dal computer sarebbe stato necessario tradurlo in linguaggio
macchina (un linguaggio assai ostico ed innaturale, basato essenzialmente
sulla codifica binaria su cui il computer è in grado di operare). Il linguaggio
macchina ed il nostro linguaggio naturale sono estremamente distanti fra di
loro: quest'ultimo pieno di ambigue sfumature, estremamente coinciso e criptico
il primo; per raggiungere un buon compromesso tra le due parti che si devono
comprendere (noi e la macchina) sono stati progettati numerosi linguaggi di
programmazione ad alto livello, ovvero un insieme di parole chiave e di
regole sintattiche, non troppo distanti dal nostro linguaggio naturale, ma
facilmente traducibili (in modo automatico, mediante un programma chiamato
compilatore) in istruzioni di linguaggio macchina.
Ogni programma per un calcolatore elettronico, utilizza la logica ed i
concetti espressi (in estrema sintesi) nei paragrafi precedenti. È bene saperlo,
anche se magari non ci si troverà mai a dover scrivere un programma, perché
questo può aiutarci a capire che quasi sempre, quando il calcolatore non esegue
ciò che noi vorremmo, a meno di guasti hardware non è lui che sbaglia, ma siamo
noi ad aver fornito delle istruzioni incomplete o fuorvianti che non lo portano
a raggiungere la soluzione cercata.