Cosa vuol dire programmare?

Contenuto del capitolo
Un'introduzione alla terminologia dei computer e un po' di storia; un breve sguardo alla struttura di un programma per computer.

Torniamo alle origini

La programmazione è l'arte di far fare ad un computer quello che noi vogliamo.

Al livello più elementare consiste nell'impartire al computer una successione di comandi per ottenere un risultato voluto. Nel mondo Microsoft gli utilizzatori di MS-DOS potevano creare file di testo contenenti liste di comandi detti file BAT. Questi eseguivano semplicemente la sequenza dei comandi come una "infornata" [Traduzione letterale del termine inglese "batch", N.d.t], da cui il nome BAT. In Windows i file BAT sono ancora disponibili, ma usati raramente.

Ad esempio supponiamo che dobbiate scrivere un documento (come questo corso) suddiviso in molti file separati. Il vostro programma di scrittura può produrre copie di backup di ciascun file ogni volta che salvate una nuova versione. Al termine della giornata potreste desiderare di salvare la versione corrente del documento (tutti i file nella versione più recente) in una directory (o cartella) di backup ed infine, per fare pulizia, cancellare tutte le copie di backup per preparare il lavoro del giorno successivo. Un semplice file BAT per eseguire questo compito potrebbe essere:

COPY *.HTM BACKUP
DEL *.BAK

Se il file fosse chiamato SALVA.BAT alla fine di ogni giornata basterebbe scrivere SALVA al prompt del DOS ed i files verrebero salvati e le copie di recupero cancellate. Questo è un programma.

Nota: Gli utilizzatori di Linux o di altri sistemi operativi hanno versioni diverse di questi file chiamati script di shell. Gli script di shell di Unix sono assai più potenti dei file BAT di DOS e supportano gran parte delle tecniche di programmazione che vedremo in questo corso.

"Repetita iuvant"

Non lasciatevi intimidire da quanto detto fin qui. Un programma per computer è semplicemente un insieme di istruzioni che indicano al computer come eseguire un particolare compito. È un po' come una ricetta: un insieme di istruzioni per indicare ad un cuoco come preparare un particolare piatto. Descrive gli ingredienti (i dati) e la sequenza di passi (il processo) necessari a convertire gli ingredienti in un dolce, o quel che è. I programmi sono concettualmente assai simili.

Un po' di storia

Allo stesso modo in cui usate una lingua per parlare ad un amico, dovete usare una lingua per "parlare" ad un computer. La sola lingua che un computer comprende è chiamata codice binario e ce ne sono molti dialetti diversi. È per questo motivo che quel bel programma scritto per iMac non funziona sul vostro PC e viceversa. Il codice binario sfortunatamente è assai difficile da leggere e da scrivere per gli esseri umani, quindi è necessario usare un linguaggio intermedio che viene poi tradotto in binario. Succede come quando di assiste ad un colloquio fra Clinton ed Eltsin ad un summit internazionale: Clinton parla, quindi l'interprete ripete ciò che ha detto in Russo. Eltsin risponde e l'interprete di nuovo ripete la frase, questa volta in Inglese.

Sorprendentemente il programma che traduce questo linguaggio intermedio in binario si chiama anch'esso interprete. Nello stesso modo in cui di solito è necessario avere un interprete diverso per tradurre dall'Inglese al Russo e dall'Arabo al Russo, cosí occorre un interprete diverso per tradurre il Python in binario ed il BASIC in binario.

I primi programmatori dovevano realmente scrivere in codice binario, operazione che viene chiamata programmazione in linguaggio macchina ed è incredibilmente difficoltosa. Il passo successivo fu creare un traduttore che convertiva semplicemente parole inglesi equivalenti ai codici binari in binario, in modo che invece di dover ricordare che il codice 001273 05 04 significava somma 5 a 4 i programmatori potevano scrivere ADD 5 4 ("add" in Inglese è il verbo sommare, N.d.t.). Questo semplicissimo miglioramento rese la vita assai più semplice e questi sistemi di codici furono i primi veri linguaggi di programmazione, e ce ne era uno per ogni tipo di computer. Essi erano conosciuti con il nome di linguaggi assembler e la programmazione in assembler viene ancora oggi usata per alcuni scopi speciali.

Anche questo livello era assai primitivo ed ancora si basava sullo specificare che cosa il computer dovesse fare al livello hardware: spostare byte da una locazione di memoria all'altra, sommare un byte ad un altro, ecc. Le operazioni rimanevano ancora molto complesse ed era necessario un gran lavoro di programmazione per ottenere anche semplici risultati.

Con il tempo gli esperti di informatica svilupparono linguaggi per computer di livello più alto per rendere più semplice il lavoro. Questo accadeva anche perché allo stesso tempo gli utilizzatori scoprivano compiti più complessi da affidare al computer! Questa competizione fra gli esperti di informatica e gli utilizzatori è, ancora in corso e continuano a nascere nuovi linguaggi di programmazione. Questo rende la programmazione più interessante ma rende anche importante che come programmatori voi comprendiate sia i concetti della programmazione che i modi per tradurli in pratica con un particolare linguaggio.

Adesso vedremo alcuni di questi concetti, ma ci torneremo sopra anche via via che proseguiremo in questo corso introduttivo.

Le caratteristiche comuni di tutti i programmi

Molto tempo fa un ricercatore di nome Edsgar Dijkstra propose un concetto detto programmazione strutturata, secondo il quale tutti i programmi contengono quattro possibili strutture diverse:

Oltre a queste strutture i programmi richiedono anche alcuni altri elementi per poter fare qualcosa di utile:

Una volta compresi questi concetti e come un particolare linguaggio di programmazione li implementa sarete in grado di scrivere un programma in quel linguaggio.

Un po' di terminologia

Come abbiamo già detto la programmazione è l'arte di far fare ad un computer quello che noi vogliamo, ma che cos'è un programma?

In realtà ci sono due distinti concetti di programma. Il primo è quello percepito dall'utilizzatore: un file eseguibile che viene installato e può essere lanciato più volte per eseguire un compito. Ad esempio gli utilizzatori possono lanciare un programma di videoscrittura. L'altro modo di concepire un programma è dal punto di vista del programmatore, cioè il file di testo contenente le istruzioni per il computer, scritte in qualche linguaggio di programmazione, che può essere tradotto in un file eseguibile. Quindi quando usate il termine "programma" cercate sempre di aver chiaro a quale dei due concetti vi riferite.

Essenzialmente un programmatore scrive un programma in un linguaggio di alto livello che viene tradotto in una sequenza di byte che il computer comprende. In gergo tecnico il programmatore genera codice sorgente e l'interprete genera codice oggetto. Talvolta il codice oggetto assume altri nomi: P-code (questo termine normalmente non si traduce, o si usa il termine "codice precompilato", N.d.t.), codice binario, o codice macchina.

Anche l'interprete ha due nomi, interprete oppure compilatore. Questi termini si riferiscono in realtà a modi diversi di generare il codice oggetto a partire dal codice sorgente. In particolare il compilatore genera codice che è in grado di essere eseguito in quanto tale (in altri termini genera un file eseguibile) mentre l'interprete deve essere esso stesso attivo per eseguire il suo programma. La differenza fra i due si sta però confondendo, in quanto alcuni compilatori richiedono che sia presente un interprete per fare un passo di traduzione finale ed alcuni interpreti semplicemente compilano il codice sorgente in codice oggetto temporaneo e quindi lo eseguono.

Dal nostro punto di vista questo non fa alcuna differenza, noi scriviamo il codice sorgente ed utilizziamo uno strumento per consentire al computer di leggerlo ed eseguirlo.

La struttura di un programma

L'esatta struttura di un programma dipende dal linguaggio di programmazione e dall'ambiente in cui viene eseguito. Ci sono però alcuni elementi generali:

La maggior parte dei programmi sono basati su una delle due seguenti strutture:

Programmi "Batch"

Vengono lanciati tipicamente da una riga di comando (o automaticamente da un programma di utilità per attività programmate) e seguono di solito uno schema del tipo:

Programmi determinati da eventi

Molti programmi con interfaccia grafica (un sistema di controllo, ad esempio quello del forno a microonde o della macchina fotografica, ecc.) sono guidati da eventi. Ovvero il sistema operativo invia eventi al programma e questo risponde agli eventi via via che questi giungono. Gli eventi possono includere azioni fatte dell'utilizzatore, come "cliccare" sul mouse o premere un pulsante, oppure azioni attivate dallo stesso sistema operativo, come aggiornare il temporizzatore interno o ridisegnare lo schermo.

I programmi guidati da eventi si presentano generalmente come segue:

Promemoria
  • I programmi controllano il computer
  • I linguaggi di programmazione ci consentono di "parlare" al computer ad un livello più vicino al modo di ragionare degli esseri umani che non a quello dei computer.
  • i Programmi operano sui dati
  • I programmi sono di tipo Batch o guidati da eventi

Precedente  Successivo  Indice


Se avete domande o suggerimenti relativi a questa pagina mandate un e-mail all'autore: alan.gauld@yahoo.co.uk o al traduttore italiano: lfini@arcetri.astro.it