# La programmazione (scuola media)

La programmazione è un'attività che unisce logica e matematica. La cosa bella è che è essenzialmente accessibile a tutti, con un po' di buona volontà.
Programmare è un importante esercizio di logica che può risultare utile nell'apprendere la matematica e nel mantenere elastica la mente.

## Lavoro e programmazione

Ormai la stragrande maggioranza dei lavori riguarda o adopera l'informatica, tuttavia solo alcuni sono legati alla programmazione.
Ovviamente l'esempio più celebre è il programmatore, ossia colui che per lavoro sviluppa software, con diversi gradi di esperienza: Esistono infatti i programmatori semplici e gli analisti, coloro che analizzano le specifiche richieste dai committenti per guidare i programmatori.
I sistemisti, invece, si occupano di gestire l'infrastruttura che fa girare i programmi, sia a livello di hardware (computer, server, tablet, rete) sia a livello software (sistemi operativi). I sistemisti conoscono la programmazione e ne fanno uso per automatizzare la propria attività: Se ad esempio bisogna configurare alla stessa maniera 500 computer è possibile creare uno script per rendere tale lavoro automatico o quasi.
A metà tra i due ci sono gli esperti di sicurezza informatica, che si occupano di analizzare i software e le infrastrutture per trovare possibili falle utilizzabili dagli attaccanti informatici.
Anche altre professioni possono fare tesoro della programmazione: Sono un esempio i ragionieri programmatori, che studiano sia come gestire la contabilità sia come migliorare il proprio lavoro con la programmazione.

## Linguaggi di programmazione
### Linguaggio macchina

Il computer ragiona con numeri binari: È il suo linguaggio, chiamato linguaggio macchina.
In teoria il programmatore umano può scrivere in linguaggio macchina puro, tuttavia è una cosa fatta molto raramente per via della difficoltà.
Nel linguaggio didattico LC-3, usato nei corsi avanzati di programmazione, un'istruzione di somma è scritta come:

### Assembly

Tutto ciò andava bene quando i computer nel mondo erano una decina e i programmatori un centinaio. Con gli anni e l'aumento delle capacità dei computer è divenuto necessario creare dei codici mnemonici per il programmatore: Nacque così l'assembly.
L'assembly rispetta la sintassi del linguaggio macchina ma usa delle parole semplici da ricordare per il programmatore, ad esempio l'istruzione scritta nel precedente paragrafo viene tradotta come:
Ovviamente è un sistema comunque complesso ma che permette un'elaborazione molto semplificata rispetto al puro linguaggio macchina. Inoltre semplifica alcune operazioni come il salto automatico tra parti diverse del programma.

### Linguaggi simbolici

Una piccola parentesi meritano i linguaggi simbolici, usati dai personal computer Olivetti prodotti tra il 1965 e il 1975. Questi computer erano ideati per somigliare nell'uso alle calcolatrici, pertanto il linguaggio, essenzialmente identico all'Assembly, era adattato ai simboli tradizionali delle calcolatrici.
In questi linguaggi l'operazione da svolgere sui registri, ossia le parti del computer dove sono salvati i dati da elaborare, è indicata da un simbolo e non da un'istruzione mnemonica. Ad esempio, nel linguaggio della Programma 101, l'operazione di somma viene indicata con "+".

### Linguaggi di medio livello

L'assembly, comunque, ha un problema enorme: è specifico per ogni computer. Ogni architettura ha il suo modo di scrivere il codice assembly, alle volte variabile anche tra processori del medesimo produttore. Ad esempio è impossibile scrivere un programma in Assembly LC-2 ed eseguirlo senza variazioni su un processore Intel, idem è impossibile scrivere un programma in Assembly ARM (processore usato sulla gran parte dei processori) e poi eseguirlo su LC-2.
Tutto ciò divenne particolarmente un problema durante lo sviluppo dei primi sistemi operativi: Per rendere possibile portarli su diverse architetture vennero sviluppati dei linguaggi di medio livello: Vicini alla generica struttura del calcolatore ma abbastanza lontani da poter essere interpretati su ogni computer in modo diverso.
Il linguaggio di medio livello più noto è il C. Un esempio di codice il C molto semplice, che interpreta quale tra due numeri è più grande, è:

### Linguaggi di alto livello

Il tempo però ha portato anche il C ad essere considerato un linguaggio difficile da usare, essendo molto stretto a livello grammaticale. Sono nati, col tempo, linguaggi come Python o Ruby, ancor più semplici da usare. Il programma sopra, ad esempio, in Python si rende come:
Mancano, ad esempio, l'inizializzazione delle variabili e la necessità di usare funzioni esterne per l'input e l'output: Il tutto viene dato a disposizione dal linguaggio.

### Linguaggi per il web

Con la nascita e la diffusione del web sorse anche la necessità di programmare su di esso: Il primo linguaggio elaborato a tal fine fu Java, imparentato con il C, capace di funzionare su molti dispositivi indifferentemente: Un programma in Java girava dunque su Linux, su Windows, su Mac e sui cellulari più avanzati. Oggi Java esiste ancora ed è usato più che per il Web, dove il suo uso è in declino, per la programmazione su Android.
Oggi un linguaggio molto usato per il web è PHP: Nato in principio per hobby è col tempo divenuto uno dei linguaggi più usati per sviluppare applicazioni web: Ha una sintassi simile al C.

### Linguaggi di scripting

I linguaggi di scripting sono linguaggi di programmazione speciali pensati per automatizzare operazioni sul sistema operativo, ad esempio sulla cancellazione, l'analisi o la modifica di file.
La potenza del linguaggio di scripting varia a seconda del sistema operativo e nella gran parte dei casi è possibile cambiare o estendere questo linguaggio.

## Scratch

Scratch è il linguaggio più usato per insegnare la logica dietro alla programmazione alle scuole elementari e medie. A differenza dei linguaggi classici che usano il testo Scratch usa dei blocchi grafici da comporre, come dei blocchi Lego, che portano alla logica del programma.