Concetti Chiave

  • Programmare significa scrivere una sequenza finita di istruzioni in un linguaggio di programmazione, che la CPU esegue senza dubbi.
  • Un algoritmo è una sequenza di istruzioni scritte in linguaggio naturale per risolvere un problema, mentre un programma è un algoritmo codificato in un linguaggio di programmazione.
  • I linguaggi di programmazione si suddividono in linguaggi ad alto livello, più accessibili all'utente, e linguaggi a basso livello, più vicini all'hardware.
  • Il compilatore traduce il codice dei linguaggi ad alto livello in linguaggio macchina, mentre l'assembler fa lo stesso per il linguaggio assembly.
  • Il linguaggio assembly è un linguaggio di basso livello, specifico per un'architettura, tradotto in linguaggio macchina e caricato in memoria per l'esecuzione.

Spesso sentiamo parlare di programmazione da parte di esperti informatici, ma che cosa significa realmente programmare, e quale è il lavoro che svolge un programmatore? Innanzitutto chiariamo che, quando in ambito informatico si parla di programmare, si sottintende programmare la CPU. La CPU non è infatti l'unico dispositivo che può essere programmato, poiché per esempio anche una periferica può essere programmata. Programmare significa "scrivere un programma", cioè una sequenza ordinata e finita di istruzioni, utilizzando un linguaggio di programmazione. Le istruzioni devono essere eseguite dalla CPU, che ha proprio il compito di essere una macchina che non si pone domande, non ha dubbi e fa quello che "le viene detto di fare". Un programma è proprio quello che viene detto di fare alla CPU. Come sappiamo l'hardware è costituito da tutte le componenti fisiche del sistema: CPU, memorie, periferiche, bus, cavi, componenti elettroniche. Il software è costituito dai programmi che fanno funzionare l'hardware. Inoltre, occorre distinguere il significato di programma da quello di algoritmo.

Differenza tra algoritmo e programma

Un algoritmo diciamo che è una sequenza finita di istruzioni volte a risolvere un problema e scritte in un linguaggio "naturale", e viene chiamato anche pseudocodice. Il programma invece è un algoritmo codificato utilizzando un determinato linguaggio di programmazione, cioè un linguaggio che può essere "compreso" e “decodificato” dalla CPU. Le istruzioni scritte in un linguaggio di programmazione vengono in gergo chiamate codice, proprio perché il linguaggio utilizzato è il codice, noto sia al programmatore sia alla CPU, con cui avviene la comunicazione tra il programmatore.

Classificazione dei linguaggi di programmazione

In base alle caratteristiche e al livello di astrazione con cui un linguaggio codifica le istruzioni, i linguaggi di programmazione si possono classificare in linguaggi ad alto livello (per esempio C, Pascal, Java, ...) e linguaggi a basso livello. I linguaggi ad alto livello sono più vicini all'utente (programmatore) e più lontani dall'architettura fisica dell'elaboratore: hanno un livello di astrazione maggiore.

I linguaggi a basso livello sono più lontani dall'utente, ma più vicini all'hardware e dipendenti da quest'ultimo. Il linguaggio di livello più basso è il linguaggio macchina, in cui ogni istruzione è codificata come sequenza di 0 e 1. Questo è comunque l'unico linguaggio che la CPU "comprende", cioè l'unico decodificabile dalla CPU. Infatti 0 e 1 sono codifiche che descrivono lo stato fisico di un segnale, che è direttamente legato all'hardware. Questo significa che un programma scritto in un qualsiasi linguaggio, per essere eseguito, deve essere tradotto in linguaggio macchina, e questo compito viene affidato dal compilatore (o all’interprete), per i linguaggi ad alto livello, e dal programma assemblatore (assembler), per l'assembly.

Linguaggi assembly e loro utilizzo

Poiché esistono molti linguaggi assembly, uno per ogni architettura, cominciamo partendo dal più generico assembly per capirne il funzionamento. L'assembly 8086, anche se si riferisce a una architettura ormai notevolmente evoluta, è alla base dell'assembly di tutta la famiglia x86, relativa ai microprocessori Intel, e il linguaggio ARM è attualmente molto diffuso soprattutto nei dispositivi mobili o in altri dispositivi come Raspberry. L’assembly è un linguaggio di basso livello, dipendente strettamente dall'architettura e, quindi, da come è fatto il sistema su cui deve essere eseguito. Viene tradotto in linguaggio macchina dall'assembler e caricato in memoria centrale per essere eseguito da un altro software di sistema, il loader. Un programma scritto in un linguaggio di programmazione si chiama sorgente; il codice sorgente viene assemblato al fine di produrre il codice oggetto. Il codice oggetto deve essere collegato ad altri eventuali moduli oggetto da un programma che li collega insieme: il linker.

Domande da interrogazione

  1. Che cosa significa realmente programmare in ambito informatico?
  2. Programmare significa "scrivere un programma", ovvero una sequenza ordinata e finita di istruzioni che devono essere eseguite dalla CPU, la quale non si pone domande e segue le istruzioni fornite (testo).

  3. Qual è la differenza tra algoritmo e programma?
  4. Un algoritmo è una sequenza finita di istruzioni scritte in un linguaggio "naturale" per risolvere un problema, mentre un programma è un algoritmo codificato in un linguaggio di programmazione comprensibile dalla CPU (testo).

  5. Come si classificano i linguaggi di programmazione?
  6. I linguaggi di programmazione si classificano in linguaggi ad alto livello, più vicini all'utente e con un alto livello di astrazione, e linguaggi a basso livello, più vicini all'hardware e dipendenti da esso (testo).

  7. Qual è il ruolo del compilatore e dell'assembler nella programmazione?
  8. Il compilatore traduce i programmi scritti in linguaggi ad alto livello in linguaggio macchina, mentre l'assembler traduce il linguaggio assembly in linguaggio macchina per l'esecuzione (testo).

  9. Che cos'è il codice sorgente e come si produce il codice oggetto?
  10. Il codice sorgente è un programma scritto in un linguaggio di programmazione, che viene assemblato per produrre il codice oggetto, il quale deve essere collegato ad altri moduli oggetto tramite un linker (testo).

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community