I calcolatori

I calcolatori sono usati quotidianamente in ogni tipo di attività umana.

La progettazione e la costruzione di calcolatori sono cominciate nel secondo dopoguerra, e lo sviluppo è stato rapidissimo (per qualche nozione di storia si veda il Capitolo 1 del libro di testo).

Nei calcolatori si distinguono due componenti: hardware (la parte fisica, elettronica/meccanica, tangibile) e  software (la parte logica, i programmi che permettono di usarlo).

I calcolatori possono eseguire con grande velocità una quantità enorme di operazioni elementari. I programmi descrivono come combinare queste operazioni.

Semplificando, la programmazione è l'attività di scrivere programmi. 

Usare un calcolatore non significa "programmare" [per guidare una macchina non è necessario essere meccanici...]

La programmazione è solo una parte (importante!) dell'informatica.




Architettura di un computer

Rappresentazione schematica dell'hardware di un computer




Il software

  • Un programma è una serie di istruzioni che il computer può eseguire in sequenza
  • Il software è l'insieme dei programmi e dei dati disponibili su di un calcolatore
  • Un calcolatore può eseguire direttamente (sull'hardware) solo i programmi che sono scritti in linguaggio macchina
  • In un calcolatore si distinguono vari ``strati'' di software. Per semplicità ne consideriamo due:
    • Il sistema operativo (come Linux, Windows, Mac Os, ...)
    • Le applicazioni (come editori di testo, sistemi di gestione di basi di dati, giochi,...)



La programmazione

La programmazione è l'attività di sviluppare programmi per un calcolatore. Lo scopo della scrittura di un programma è la risoluzione di un problema. Per risolvere un problema, bisogna:
  • Formulare il problema (specifica dei requisiti) in modo più o meno formale
  • Capire il problema e scomporlo in parti gestibili (analisi del problema)
  • Progettare una soluzione (algoritmo)
  • Implementare la soluzione (scrittura del codice)
  • Sottoporre la soluzione a test e correggere eventuali errori (verifica del programma, testing e debugging)
  • Tenere sempre aggiornato il programma (manutenzione)
Di tutte queste fasi vedremo nel corso principalmente quella di implementazione dell'algoritmo, e marginalmente quelle precedenti.



Gli algoritmi

Un algoritmo per la risoluzione di un problema è una sequenza di passi 
  • discreti
  • di lunghezza finita
  • deterministici (dopo ogni passo si sa precisamente qual è il prossimo)
  • ripetibili
che producono la soluzione del problema.

Esempio di algoritmi:

  • procedimenti per calcolare il risultato di espressioni aritmetiche (operazioni elementari come addizione, sottrazione,...; o più complesse come radice quadrata,...) o algebriche (prodotti di polinomi, ...)
Non sono algoritmi...
  • le ricette di cucina



I linguaggi di programmazione

Per scrivere il programma che realizza un algoritmo, il programmatore deve usare un linguaggio di programmazione. Questo definisce un insieme di parole e di simboli e un insieme di regole per combinarli. 
Se il programma rispetta queste regole, può essere tradotto (compilato) in linguaggio macchina, e quindi eseguito sul calcolatore.

A differenza dei linguaggi naturali, le regole dei linguaggi di programmazione (che sono linguaggi formali) sono molto rigide, per garantire l'assenza di ambiguità e la rapidità della compilazione.

Ci sono centinaia di linguaggi di programmazione, divisi in varie categorie:
 
Linguaggi 
ad alto livello
Linguaggi 
assembler
Linguaggi 
macchina

 




Edit / compile / execute

I programmi scritti in un linguaggio ad alto livello non possono essere eseguiti direttamente dal calcolatore. 
In molti casi il codice sorgente (il programma) viene tradotto in linguggio macchina (codice oggetto) da un altro programma, il compilatore.

Quindi l'attività di programmazione fa uso di tool (applicazioni) quali un text editor per la scrittura di programmi, e un compilatore.