Introduzione all’informatica
Cosa è l’informatica
L’informatica è quella disciplina che si occupa della gestione dell’informazione tramite strumenti automatici. E’ quindi una scienza, che si occupa di studiare ed approfondire i concetti di informazione e computazione con forti connessioni con la matematica e la logica, ma anche una tecnologia, che si occupa della modellizzazione e della progettazione delle macchine che in modo automatico gestiscono e manipolano l’informazione, ovvero i computer.
Per capire il concetto di informazione partiamo da quello di dato: esso è una qualsiasi nozione, o conoscenza, che può essere memorizzata in forma digitale. Si parla di informazione quando uno o più dati sono legati tra loro da un significato. Ad esempio i caratteri “C”, “I”, “A”, “O” sono dati, ma insieme formano la parola “CIAO” che ha anche un significato.
Il computer è una macchina in grado di memorizzare dati, di elaborarli autonomamente ed eseguire delle procedure automatiche (note come programmi) per gestirli e memorizzarli, anche in modo interattivo.
Non bisogna fare però confusione con altri dispositivi automatici. Anche una lavatrice è un dispositivo automatico, anzi quelle più moderne sono in grado di analizzare il contenuto del cestello ed eseguire il programma di lavaggio migliore. Ciò che le differenzia però da un computer è che i programmi della lavatrice sono predefiniti dal costruttore e non possono essere modificati una volta venduta.
Un computer invece mette a disposizione un insieme di istruzioni che possono essere utilizzate per creare programmi in grado di elaborare dati, ed una memoria per contenerli. Il calcolatore quindi non è una macchina specifica preprogrammata per uno o più scopi, ma è una macchina automatica generica in grado di essere programmata per eseguire un insieme illimitato di programmi con relativi dati. Un computer ha quindi sia un hardware, che è la sua parte fisica, sia un software, costituita dai programmi e dai dati che elabora.
Dalle macchine calcolatrici all’intelligenza artificiale
Un interesse per macchine in grado di svolgere calcoli in modo automatico comincia nel 600 con le prime macchine in grado di eseguire addizioni (come la Pascalina, di Blaise Pascal, nel 1600) o la macchina differenziale di Charles Babbage (prima metà dell”800), che inventò una macchina meccanica in grado di svolgere calcoli sui polinomi. Fondamentale fu il contributo di Ada Lovelace (che collaborò con Babbage) che fu la prima a proporre l’idea di una macchina programmabile proprio come la intendiamo oggi, e scrisse il primo vero programma, facendo di lei la prima programmatrice della storia, un secolo prima che venisse inventato il computer.
Per vedere realizzato un vero computer si dovrà aspettare il XX secolo, prima di tutto grazie al genio di Alan Turing, che riuscì a dimostrare ed anzi a progettare (nel 1936) una macchina calcolatrice dotata di un insieme di istruzioni e una memoria che sarebbe stata in grado di essere programmabile per svolgere qualsiasi tipologia di calcolo (avendo a disposizione risorse adeguate). La “macchina di Turing” è il modello teorico del computer ed il fondamento di qualsiasi computer esistente oggi.
Non esisteva ancora però una tecnologia in grado di applicare la teoria di Turing: la sua idea venne poi messa in pratica per primo da John Von Neumann, che inventò la prima vera e propria macchina programmabile della storia, l’EDVAC (nel 1947) tramite una architettura detta appunto “macchina di Von Neumann”, che è ad oggi l’architettura di riferimento del computer.
Nei primi anni di esistenza il computer era uno strumento costosissimo, con macchine che occupavano intere stanze. Era utilizzabile solo da tecnici specializzati (in camice bianco) perché non esisteva una vera interfaccia utente e veniva programmato tramite schede perforate: veniva utilizzato quindi principalmente per scopi militari, finanziari e amministrativi da organizzazioni come governi, amministrazioni e grandi banche. Solo negli anni 60, lo sviluppo dell’elettronica e dei circuiti integrati conduce a nuove generazioni di computer, che cominciano ad essere utilizzabili anche dall’industria, mentre vengono inventati i primi linguaggi di programmazione (Ada) e i sistemi operativi, in grado di semplificare la vita dei progettisti.
Il boom dell’informatica nasce però negli anni 70: grazie alla nuova invenzione, il microprocessore (il primo fu l’Intel 4004), il computer diventa usabile anche dalle aziende normali e cominciano ad essere sviluppati computer sempre più piccoli, mentre nel frattempo viene sviluppata la rete ARPANet (rete informatica militare e accademica che poi negli anni 80 verrà rinominata in “Internet”). Grazie a queste innovazioni e l’aumento delle possibilità dell’informatica si sviluppano metodologie nuove di programmazione e progettazione, e viene inventata l'”ingegneria del software”.
L’evoluzione esplosiva di nuovi computer sempre più piccoli e potenti (nota come “legge di Moore”) all’inizio degli anni ’80 rendono l’informatica per la prima volta un fenomeno di massa, che raggiunge tutti, col personal computer. Negli anni ’90 viene creato il web e Internet (e le interfacce grafiche, il multimedia, e i computer come li conosciamo oggi). Dopo il 2000, con l’avvento (iPhone 2008) degli smartphone l’informatica diventa mobile, con un micro computer che miliardi di persone portano in tasca e con cui rimangono sempre connessi.
Ai giorni nostri l’ultima innovazione è “l’intelligenza artificiale”, un insieme di applicazioni software in grado, grazie all’enorme potenza di calcolo e di memorizzazione dei computer moderni, di condurre conversazioni in linguaggio naturale, riconoscere oggetti da immagini e video, e generare contenuti artificiali.
Quel che possiamo dire è che l’informatica richiede una forte competenza sulla tecnologia del computer, ed ancora di più del fatto che la tecnologia avanza e ciò che si conosce oggi fra 10 anni sarà in parte già obsoleto, costringendo l’informatico a stare sempre “al passo”.
Come funziona un computer
I computer anche se diversi tra loro condividono un’unica architettura comune, detta “macchina di Von Neumann“, il cui schema di funzionamento è il seguente.

Le idee alla base di questa macchina sono:
– un processore (CPU): esso esegue una sequenza di istruzioni (appartenenti ad un insieme predefinito di istruzioni possibile) caricate in memoria dal programmatore, che elaborano dei dati, anch’essi caricati in memoria.
– la memoria del computer è unica e contiene quindi sia il programma (con le istruzioni da eseguire) che i dati che esso utilizza: essa viene controllata dalla CPU, che carica sia istruzioni che dati, li elabora secondo le istruzioni ricevute, e li salva nella memoria. La memoria nei computer moderni corrisponde alla RAM, ma in ogni caso la RAM è una specifica implementazione della memoria.
– l’I/O (Input/Output) consente l’accesso con l’esterno: è un componente che ha una memoria interna che memorizza i dati ricevuti dall’esterno e quelli da inviare e quindi comunica con le periferiche (tastiere, mouse, monitor, memorie di massa, rete, ecc.).
– ogni componente comunica con gli altri mediante bus, linee dati dedicate.
Questo modello è stato esteso e reso col tempo più complesso, ma la sua architettura di base ancora oggi è questa.
Come funziona la CPU?
La sua attività è scandita da un clock, un componente che emette un segnale temporizzato che determina il ciclo di esecuzione di una istruzione (oggi nell’ordine di Ghz, ovvero miliardi di segnali al secondo). Questo ciclo è diviso in 3 macro fasi:
- fetch: viene caricato il codice dell’istruzione dalla memoria
- decode: il codice viene decodificato in una istruzione
- exec: l’istruzione viene eseguita.
Il ciclo ricomincia con l’istruzione successiva. La CPU ha una piccola memoria di lavoro, ovvero delle celle, dette registri, che memorizzano i valori tra istruzioni successive. Le istruzioni hanno tutte pari tempo di esecuzione, cioè un ciclo di clock, e devono essere molto semplici.
Ad esempio per eseguire una semplice somma di due numeri occorrono 4 istruzioni:
- Caricare il primo valore in un primo registro
- Caricare il secondo valore in un secondo registro
- Eseguire la somma e salvare il valore in un terzo registro
- Salvare il dato in memoria
Le istruzioni del processore sono memorizzate in codice (da cui la decodifica) detto “linguaggio macchina” che viene rappresentato in maniera leggibile in istruzioni dette “Assembly”. La semplicità di queste istruzioni le rende estremamente veloci ma significa anche che scrivere un programa complesso implica dove scrivere miliardi di istruzioni, cosa impossibile per un essere umano. Per risolvere questo problema nei computer vengono utilizzati dei linguaggi di programmazione detti “ad alto livello”, che permettono di eseguire istruzioni più articolate e quindi agevolare la vita del programmatore. Esistono poi dei programmi speciali (detti compilatori o interpreti) che traducono le istruzioni “ad alto livello” in istruzioni “a basso livello” (cioè nel linguaggio macchina).
Come funziona la memoria?
Prima di tutto esistono due tipi di memoria:
- la memoria centrale del computer, descritta dalla macchina di Von Neumann. Questa memoria nei computer moderni corrisponde alla RAM, ed è una memoria molto veloce (nell’ordine dei Mhz, quindi comunque molto più lenta della CPU). Come noto, se spegnamo il computer, la memoria viene inizializzata perdendo tutti i dati è quindi temporanea.
- la memoria di massa, che è una periferica, anche se fisicamente interna nei moderni computer e cellulari. E’ una memoria che memorizza i dati in modo permanente, mediante una struttura ad archivio che prevede cartelle e documenti. Nei computer moderni corrisponde agli SSD, gli HD, le memorie USB e le schede SD.
In memoria i dati sono memorizzati sotto forma di numeri, e tramite un sistema di numerazione binario tramite unità di memoria dette bit, che possono assumere solo il valore di 0 oppure 1. Questo è stato fatto perché è infinitamente più semplice memorizzare tramite due stati possibili, in un sistema basato su elettricità con due diverse tensioni elettriche. Quindi per rappresentare il valore 2 abbiamo bisogno di 2 bit, con valore “10”, mentre 3 sarà “11”. Per memorizzare il valore 4 usiamo tre bit: “100” e così via come in questa tabella:
Decimale | Binario |
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
… |
Come si può vedere ogni volta che aggiungiamo un bit raddoppiamo i valori memorizzabili: con 1 bit sono 2, con 2 bit sono 4, con 3 bit 8, con 4 sono 16 e così via. La regola è che con N bit si possono memorizzare 2^N valori. Le unità di misura più importanti della memoria sono:
byte | 8 bit -> 256 valori memorizzabili. | unità di misura fondamentale della memoria. |
KiloByte (KB) | 1024 byte (2^10 byte) | documenti e testi |
MegaByte (MB) | 1024 KB (2^20 byte) | immagini |
GigaByte (GB) | 1024 MB (2^30 byte) | video |
TeraByte (TB) | 1024 GB (2^40 byte) | memorie RAM e SSD |
Petabyte (PB) | 1024 TB (2^50 byte) | grandi archivi dati su Internet |
Questi dati possono rappresentare informazioni come testi, immagini, video in quanto ne sono la rappresentazione tramite codici numerici (ad esempio la lettera “a” è codificata col valore 97, tramite il noto codice ASCII, mentre una immagine è codificata tramite i suoi pixel con la codifica RGB, ecc.).
Come funzionano le periferiche e le connessioni dati?
Le periferiche sono connesse al computer mediante un componente di I/O, che viene usato come una specie di memoria “temporanea” dove memorizzare i dati che transitano da e verso le periferiche. Le periferiche più note sono tastiera, mouse e monitor in un PC, oppure lo schermo touch in uno smartphone/tablet, ognuno di questi dispositivi trasforma una azione meccanica (es. pressione del tasto) in un segnale elettrico e quindi in un segnale digitale che viene trasmesso all’I/O, e poi utilizzato dalla CPU per gestire l’input. Allo stesso modo la CPU memorizza nell’I/O le informazioni che devono essere inviate alla periferica, e queste le trasforma in segnale elettrico e ad esempio nei monitor in segnale visivo per l’utente.
Altrettanto importante è la rete, che consiste in una tecnologia informatica dove i computer si trasmettono dati digitali in unità dette pacchetti (un dato complesso viene diviso in pacchetti) e dove ogni computer su Internet ha un indirizzo specifico. La trasmissione fisica può avvenire tramite cavo o per onde radio Wifi, satellitari o tramite la rete dati cellulare (4G/5G). Esistono minicomputer che gestiscono il traffico di pacchetti, detti router. Altri tipi di connessione dati, che non usano Internet, sono le connessioni Bluteooth, che trasmettono dati a cuffie, mouse, tastiere e hanno una distanza di pochi metri.
Importante è la misura della velocità della trasmissione, dove in questo caso l’unità di misura fondamentale è il bit.
bit | 0 o 1 | unità di misura fondamentale della misura della velocità di trasmissione |
KiloBit (Kb)/s | 1024 bit (2^10 bit) | modem (es. 56Kb) |
MegaBit (Mb)/s | 1024 Kb (2^20 bit) | Bluetooth (fino a 100Mb) e Wifi (fino a 500Mb) |
GigaBit (Gb)/s | 1024 Mb (2^30 bit) | Fibra ottica |
TeraBit (Tb)/s | 1024 Gb (2^40 bit) | Cavi oceanici sottomarini |
Petabit (Pb)/s | 1024 Tb (2^50 bit) | velocità di trasmissione del bus dati del computer. |
Le istruzioni del programma
La CPU esegue come detto sopra un insieme di istruzioni che svolgono operazioni di tipo aritmetico (somme, sottrazioni, ecc.) e logico (confronti) e possono leggere e modificare dati che sono memorizzati in memoria e poi trasmessi/salvati verso le memorie esterne o la rete. Più specificatamente le istruzioni sono di questi tipi:
- di caricamento/memorizzazione (che caricano o salvano in memoria i dati)
- di calcolo aritmetico/logico (che eseguono il calcolo)
- condizionali
- di salto
Le istruzioni condizionali sono utilizzate per verificare una condizione logica, ovvero una condizione che può essere vera o falsa, e quindi eseguire una sequenza di istruzioni oppure un’altra. Con le istruzioni condizionali possiamo quindi programmare il computer a compiere scelte in base ai dati che ha volta per volta. Le istruzioni di salto invece ci permettono di eseguire lo stesso gruppo di istruzioni più volte. Questo significa che per svolgere operazioni ripetitive (ad esempio sommare i numeri da 1 a 100) dobbiamo riscrivere 100 volte le stesse istruzioni.
Combinando opportunamente queste tipologie di istruzioni è possibile realizzare qualsiasi sequenza in grado di svolgere qualsiasi tipo di procedura, avendo tempo e memoria a sufficienza.
Gli algoritmi
Per capire come si programma un computer ci viene in aiuto il concetto di algoritmo. Questo consiste in una procedura che contiene una sequenza di istruzioni finita, che manipola dei dati ricevuti in input e produce, dopo una elaborazione, un output. Esso deve rispettare sei caratteristiche fondamentali:
- deve essere finito (deve cioè terminare)
- deve essere non ambiguo (non deve avere istruzioni che si interpretano in modo differente);
- deve essere generale (deve applicarsi a tutti i casi possibili)
- deve essere completo (deve prevedere tutte le condizioni possibili)
- deve essere corretto
- deve essere efficiente (non ci devono essere istruzioni inutili)
C’è una settima proprietà, ovvero che un algoritmo è deterministico, ovvero a parità di dati ingresso deve produrre lo stesso output, ma questa è una conseguenza delle altre sei nel momento in cui un algoritmo usa la pura logica.
Un algoritmo manipola dei dati e questi possono appartenere a 3 categorie:
- dati di input, inseriti o dall’utente o caricati dalla memoria o ricevuti dall’esterno;
- dati di output, emessi dall’elaborazione, o salvati, o inviati all’esterno;
- dati di lavoro, usati per svolgere l’elaborazione
Essi possono coincidere in tutto o parzialmente, a seconda dell’algoritmo.
Gli algoritmi sono un concetto generale presente in molte discipline, come la logica/matematica, e possono essere utilizzati per descrivere molte procedure umane (si pensi alle ricette di cucina). In informatica però gli algoritmi sono associati ad un esecutore automatico, il computer, che per sua natura esegue delle istruzioni che sono:
- parte di un insieme predeterminato (come abbiamo visto sono di memorizzazione, calcolo, condizione e salto);
- sono istruzioni formali, ovvero, le istruzioni date al computer non possono essere ambigue o interpretabili in qualche modo;
- in generale lo spazio di memoria usabile è limitato ed esistono delle regole per la memorizzazione dei dati
Cosa significa essere un informatico
Realizzare programmi per computer è la principale attività che svolgono gli informatici. Questa è una attività che può diventare molto complessa se le attività richieste ed i problemi che deve risolvere sono tanti e difficili. Per questa ragione si divide normalmente questa attività in queste cinque fasi:
- Analisi del problema: in questa fase si analizza la richiesta, si analizzano tutti i casi possibili e le tipologie di dati che dovranno essere utilizzati.
- Definizione dell’algoritmo: si progetta un algoritmo (o anche più di uno) che risolve il problema in modo soddisfacente.
- Codifica: si trasforma l’algoritmo in un programma in un linguaggio di programmazione.
- Test: si verifica il programma utilizzando un insieme di dati di test il cui risultato è conosciuto.
- Rilascio: si distribuisce il programma rilasciandolo al committente.
Per realizzare programmi quindi un informatico deve avere competenze in tutte e tre le aree dell’informatica:
- comprendere come organizzare i dati e le informazioni, come manipolarli con gli algoritmi, ed imparare a crearne di propri (la scienza dell’informatica);
- conoscere le caratteristiche della programmazione e delle tecnologie correlate in modo da tradurre gli algoritmi in programmi che sfruttino le caratteristiche del computer e dell’informatica (la tecnologia della programmazione);
- padroneggiare il linguaggio anzi i linguaggi di programmazione, le tecniche di sviluppo, test e rilascio del software (la tecnica dello sviluppo).
Queste capacità si acquisiscono sia studiando la “teoria” (della scienza, della tecnologia e della tecnica) sia mettendola in “pratica” per consolidare le lezioni apprese con un riscontro effettivo. L’informatica non prevede quindi un apprendimento esclusivamente teorico: diventa pura erudizione senza riscontro in una effettiva applicazione, una attività puramente accademica senza riscontri nel mondo reale. Allo stesso tempo l’informatica non può essere considerata nemmeno esclusivamente pratica: un programmatore senza una capacità di comprensione anche della teoria resta un dilettante, in grado di risolvere solo specifici problemi, senza capacità di evolversi, perché non ha gli strumenti per farlo.
L’obiettivo è quindi procedere, in tutte le aree, con un apprendimento sia teorico che pratico per ottenere un apprendimento duraturo, significativo ed efficace.