linguaggi di programmazione
Come avviene la comunicazione tra uomo e computer
Il computer è una macchina che esegue ordini; non prende iniziative. Per impartire ordini è tuttavia necessario comunicare; è cioè necessario che l’esecutore, il computer, ‘comprenda’ ciò che gli viene ordinato di fare. I linguaggi di programmazione sono ciò che permette tale comunicazione: hanno una forma comprensibile all’essere umano che programma, ma contemporaneamente sono facilmente traducibili dalla macchina stessa nel suo linguaggio interno, il linguaggio-macchina, che in realtà è soltanto una lunga sequenza di 0 e di 1
Quando si chiacchiera tra amici, si scrive un messaggio o si legge un libro, si utilizza il linguaggio appreso fin da piccoli. L’italiano, l’inglese e i tanti altri linguaggi parlati nel mondo si sono evoluti naturalmente nel corso della storia e sono pertanto detti linguaggi naturali. Sono linguaggi molto flessibili e potenti: con essi non solo si fanno affermazioni e si comunicano informazioni, ma si pongono domande, si esclama, si dichiarano intenzioni, si esprimono emozioni.
I linguaggi naturali hanno regole ortografiche e sintattiche, ma è possibile una grande varietà espressiva: spesso si può usare una parola al posto di un’altra (sinonimi) e anche cambiare l’ordine delle parole stesse. A volte il linguaggio naturale può essere ambiguo, soprattutto se in forma scritta, in quanto parlando è più facile eliminare le ambiguità attraverso l’intonazione e l’abbondanza dell’informazione.
A differenza dei linguaggi naturali i linguaggi formali sono costruiti artificialmente, hanno regole molto rigide e non possono dar luogo ad ambiguità. Per questo motivo sono utilizzati per comunicare istruzioni precise. Per esempio, un’espressione matematica quale (311)32 indica precisamente quale calcolo fare. È un modo sintetico per dire: «addiziona 3 a 1 e poi moltiplica il risultato per 2».
Anche per descrivere le mosse di una partita a scacchi si usa un linguaggio formale. Ogni casella è individuata da una lettera e da un numero, come nel gioco della battaglia navale. Per esempio, il re bianco, all’inizio del gioco, si trova nella casella e1.
Se il giocatore con i pezzi bianchi decide, come prima mossa, di far avanzare di due caselle il pedone bianco davanti al re, la mossa formalmente descritta con «e2-e4» indica che il pezzo collocato in e2 va spostato in e4.
I linguaggi di programmazione, nati nella metà del 20° secolo, quando furono costruiti i primi calcolatori elettronici, sono linguaggi formali.
Il computer è una macchina elettronica, un insieme complicato di circuiti elettrici che, come un interruttore, possono trovarsi soltanto in due stati: chiuso o aperto. Per indicare questi due stati si utilizzano i simboli 0 e 1. Perciò, ogni dato immesso in un computer è elaborato al suo interno attraverso questa forma: ogni istruzione eseguita è, all’interno della macchina, una lunga sequenza di 0 e 1. Il linguaggio con cui opera il computer, il linguaggio macchina, usa due soli simboli ed è pertanto anche detto binario.
Scrivere un programma in linguaggio macchina richiede tempo ed è facile commettere errori: una macchina non è in grado di capire se è stato scritto uno 0 al posto di un 1 per una svista del programmatore. Dalla metà del 20° secolo si cominciano così a costruire linguaggi intermedi, più facili da leggere e scrivere per l’operatore umano e che – attraverso un linguaggio interprete – sono automaticamente tradotti in linguaggio macchina.
Così il programmatore può scrivere una istruzione del tipo: «Fa’ l’operazione 312 e scrivi il risultato». Essa viene automaticamente tradotta in una sequenza di 0 e 1 che fa avviare il processo di calcolo da parte della macchina. Il linguaggio di programmazione è così il mezzo che permette di comunicare al computer i dati e la sequenza di istruzioni da eseguire per fare un calcolo, risolvere un problema, memorizzare e rappresentare una foto.
Come esistono numerosi linguaggi naturali, così esistono decine e decine di linguaggi di programmazione che rispondono a obiettivi diversi (di tipo commerciale o statistico, per i calcoli matematici, per operazioni logiche, perché più adatti alla grafica, o altro ancora).
Tutti i linguaggi di programmazione sono però tra loro equivalenti, nel senso che qualunque programma scritto in un linguaggio può essere in via di principio tradotto in un altro linguaggio. Tutti i linguaggi di programmazione devono permettere che il computer ‘legga’ i dati che si vogliono trattare (che possono essere numeri, testi, ma anche oggetti di altro tipo, purché traducibili in simboli) e contengono alcune istruzioni fondamentali, quali istruzioni:
di avvio e di fine lavoro (espresse in inglese, sono per esempio begin («inizia») ed end («finisci»);
di lettura da qualche dispositivo esterno (tastiera, mouse, scanner);
di scrittura su qualche dispositivo esterno (stampante, monitor);
di assegnazione di valore a una variabile (se si introduce un valore in un computer esso deve essere ‘depositato’ in qualche cella di memoria).
In ogni linguaggio un programma è una sequenza di istruzioni, simile – ma più rigido – a come è una ricetta in un libro di cucina. Ci sono poi due importanti strutture di controllo che permettono al computer di seguire l’una o l’altra di due strade possibili: la prima è la selezione, che si esprime con «se… allora …» (nei linguaggi di programmazione è in inglese: «if… then…»). Il computer esegue le istruzioni dopo la parola «allora» solo nel caso in cui la condizione che è scritta dopo la parola «se» è vera. La seconda struttura di controllo è il ciclo, che si esprime con «ripeti… finché…» (nei linguaggi di programmazione è in inglese: «repeat… until…»). Il computer esegue più volte le istruzioni dopo la parola «ripeti» fino a che diventa vera la condizione scritta dopo la parola «finché».
Il computer è una macchina ripetitiva, che supplisce con la velocità alle sue limitate abilità di calcolo. Di fatto, per eseguire la moltiplicazione di un numero positivo a per 3 egli lo deve addizionare a sé stesso 3 volte (a335 a1a1a).
Ciò si può realizzare con un programma, che avrebbe questa struttura:
inizia
leggi un numero da tastiera
assegnalo alla casella a
se a è maggiore di 0 allora
ripeti addiziona a al numero precedente
finché hai compiuto questa operazione 3 volte
scrivi sul monitor il numero contenuto in a
finisci
Leggiamo questo titolo comparso su un quotidiano: «Operaio accetta la moglie». Se il fatto descritto nell’articolo riguardasse l’accettazione della moglie da parte dell’operaio, probabilmente non sarebbe comparso sul giornale. In effetti, l’articolo chiariva l’ambiguo titolo: un operaio aveva ucciso la moglie a colpi di accétta. Anche la seguente frase è ambigua: «La madre addormentata la figlia esce». Ponendo le virgole in due modi diversi, essa assume significati opposti: «La madre addormentata, la figlia esce». «La madre, addormentata la figlia, esce».
FORTRAN (Formula translator): è uno dei primi linguaggi, utilizzato per calcoli matematici e scientifici.
COBOL (Common business oriented language): viene utilizzato soprattutto nelle amministrazioni delle aziende.
BASIC (Beginner's all purpose symbolic instruction code): è orientato a qualunque scopo, diffuso in diverse versioni (dialetti) e ancora oggi largamente usato per la sua relativa semplicità.
Pascal: è stato elaborato nel 1970 dall’ingegnere elettronico Niklaus Wirth con l’obiettivo di costruire un linguaggio che permetta di programmare in modo più logico.
C: risale agli anni Ottanta del 20° secolo, ed è molto usato ancora oggi, con varianti e modifiche, perché permette di operare in modo simile con oggetti di tipo diverso.
Java: è un linguaggio, derivato dal C, utilizzato per costruire siti web, e ha la caratteristica di essere indipendente dalla particolare macchina in cui viene usato.