Il software è un'innovazione straordinaria che viene impiegata ogni volta che si utilizza un computer, uno smartphone, una console per videogiochi o molti altri dispositivi elettronici. Alcuni software sono piuttosto semplici e vengono programmati per svolgere solo alcune operazioni, altri software sono molto complessi e gestiscono quantità immense di dati.
Ma perché abbiamo bisogno del software in generale?
In due parole perché i computer non capiscono il linguaggio degli uomini. E i programmatori si prefiggono l'obiettivo di costruire computer che siano facili da utilizzare. Ma è evidente che gli umani ed i computer non parlano la stessa lingua. Ecco perché abbiamo il software, cioè l'interfaccia tra l'hardware e l'utente che ci aiuta a compiere delle operazioni per mezzo dei nostri computer. Approfondiamo un po' questo aspetto.
Quale linguaggio comprendono i computer?
I computer comprendono solo informazioni binarie, rappresentate fondamentalmente sotto forma di segnali elettrici che possono essere ON (alto voltaggio) o OFF (basso voltaggio). Inoltre i computer hanno bisogno di vedere tutto rappresentato come una sequenza di uno e di zeri (ON e OFF). In generale un livello logico “1” rappresenta un voltaggio alto, per esempio di 5 volt, il quale viene comunemente considerato un livello ALTO, mentre un livello logico “0” rappresenta un voltaggio basso, per esempio di 0 volt o massa, il quale viene comunemente considerato come un livello BASSO. La sequenza (serie) di 1 e di 0 è conosciuta come formato/codice binario.
Poiché i computer non comprendono il nostro linguaggio, le foto, i video, i testi, i programmi e la musica nel modo in cui lo facciamo noi, tutti i dati devono venir convertiti in codice binario affinché un computer li possa elaborare.
Nei moderni computer sono inclusi sistemi di codificazione che agiscono come livelli di traduzione per convertire il nostro input in codice macchina. Per fare un esempio molto semplice, quando si digita la lettera "A" sulla tastiera, essa viene convertita dal sistema di codifica caratteri UTF-8 nel codice macchina che ha il valore 01000001.
Si provi ad immaginare adesso quanti uno e quanti zero sono necessari per rappresentare un libro in codice binario. Si provi ad immaginare quanti uno e quanti zero sono necessari per rappresentare una foto o una canzone in codice binario. Chiaramente può essere piuttosto complesso e tedioso rappresentare ogni immagine, testo, programma o brano musicale in codice binario come una collezione di uno e di zero. I nostri moderni computer lo fanno automaticamente e si tratta di un processo invisibile per la maggior parte degli utenti.
Si provi ad immaginare come si svolgeva questo processo nel passato, quando i primi programmatori dovevano esprimere tutto in codice binario scritto a mano!
Qual è il ruolo dei programmatori nell'evoluzione del software?
Qualunque sia il linguaggio o il tipo di linguaggio impiegato per scrivere un programma, esso deve essere reso in codice macchina per poter venir eseguito dal computer.
Quando vennero creati i primi computer "moderni" ad alimentazione elettrica, i programmatori si accorsero che le limitate capacità di memoria e la limitata velocità di quei dispositivi ponevano un limite alla loro immaginazione e anche all'esperienza dell'utenze non esperto.
Ciò li ha spinti a programmare dei “traduttori” che facilitassero l'operazione di scrittura del codice macchina. Ci sono tre principali categorie di traduttori impiegati nei nostri computer: assembly, compilatori ed interpreti. Essi verranno affrontati nella prossima sezione.
Ciò che i programmatori usano per creare elementi software sono i linguaggi di programmazione; ce ne sono molti e si sono evoluti negli anni. La letteratura specialistica identifica cinque generazioni di linguaggi di programmazione.
I linguaggi di programmazione vengono suddivisi in due livelli, basso ed alto. Le prime due generazioni appartengono ai linguaggi a basso livello e le successive tre appartengono ai linguaggi ad alto livello.
Sign up to solve exercises
Adesso il terreno è pronto per la prossima sezione, in cui si tratterà di programmazione e di linguaggi moderni a basso livello e ad alto livello.