Introduzione – Cos’è un programma?
Direi che questa potrebbe essere non “una”, ma “la” domanda che si deve porre chi vuole capire cosa vuol dire “programmare”.
Allora smarchiamocela subito con una definizione da scolpire nella pietra:
Un programma è un insieme finito di istruzioni.
come ad esempio una ricetta per fare una torta.
Il programma, come la ricetta, prevede una serie di operazioni da svolgere in un determinato ordine per arrivare ad ottenere il risultato voluto.
Supponiamo, utilizzando come esempio una tipica situazione domestica, di voler insegnare a un robot a fare le torte.
Perchè? Perchè si.
Il robot non pensa, non sa niente, non ha una coscienza.
L’unica cosa che sa fare è eseguire degli ordini, quindi, per spegargli come fare la nostra torta dobbiamo cercare di semplificare al massimo le operazioni, “smontando” il problema del fare una torta in più parti.
Ad esempio:
– Prendere gli ingredienti
– Preparare l’impasto
– Infornare l tutto
Una volta che abbiamo progettato bene il nostro programma-torta, dobbiamo trovare il modo per parlare con il robot per fornirgli l’elenco delle istruzioni che prevede il nostro algoritmo, in modo che lui, azione dopo azione, riesca a preparare la nostra torta.
Come fare?
Per riuscire a dialogare con il nostro robot abbiamo bisogno di un interprete, che trasformi il nostro linguaggio in un idioma comprensibile al robot, il cosiddetto linguaggio macchina, che non è altro che un insieme di 0 e di 1.
(Si, come nei film)
L’interprete (o gli interpreti) che ci verrà in soccorso sarà un linguaggio di programmazione.
Linguaggi di programmazione – Cosa sono?
Lo scopo dei linguaggi di programmazione è di interpretare il linguaggio umano e “tradurlo” in linguaggio macchina.
Si suddividono in due grandi categorie: quelli di alto livello e quelli di basso livello.
La distinzione è dovuta al livello di astrazione, ossia alla “distanza” dal linguaggio macchina.
Spiegandolo con l’esempio della torta, supponiamo di voler prendere 200g di farina da un sacchetto utilizzando un cucchiaio.
Un linguaggio di basso livello potrebbe essere
1 2 3 4 5 6 7 8 9 |
- distendi le dita della mano - chiudile sul pomello del cassetto delle posate - tendi il muscolo del braccio per aprire il cassetto - rilascia il muscolo del braccio - distendi le dita della mano - tendi i muscoli del braccio per portare la mano sopra i cucchiai - chiudi le dita della mano sopra un cucchiaio - tendi i muscoli del braccio per estrarre il cucchiaio dal cassetto [...] |
e così via.
E già abbiamo dato per scontato un sacco di cose, come ad esempio il fatto di avere un braccio, di poterlo muovere, di averci attaccata una mano, di avere un cassetto delle posate, di sapere cos’è un cucchiaio ecc.
Un linguaggio un po’ più astratto potrebbe essere
1 2 3 4 5 6 |
- prendi un cucchiaio - prendi il sacchetto della farina - prendi la bilancia - prendi un contenitore - posa il contenitore sulla bilancia - versa tanta farina nel contenitore finchè non raggiungi i 200g |
Mentre un linguaggio di livello ancora più alto potrebbe fare direttamente
1 |
- prendi 200g di farina |
Capita la differenza?
L’astrazione si può identificare quindi con la “distanza” dalla macchina e la “vicinanza” all’uomo.
La domanda che ora sorgerà spontanea è: ma quindi che mi frega dei linguaggi di basso livello se con quelli di alto livello posso dare per scontate un sacco di cose?
Linguaggi di programmazione – Quale scegliere?
Una delle domande più frequenti di chi inizia a programmare è: qual è il miglior linguaggio di programmazione?
E la risposta più corretta è a sua volta un’altra domanda: per fare cosa?
Il fatto è che esistono centinaia, forse migliaia di linguaggi diversi, ma ciascuno di essi è stato studiato e pensato appositamente per uno scopo ben preciso (o perlomeno, alle sue origini).
Quindi difficilmente si troveranno siti web fatti con Assembly, PLC programmati in PHP o applicazioni desktop per Mac o Linux scritte in Asp.Net
Con il passare del tempo, diversi linguaggi sono stati sviluppati ed estesi ad “aree di competenza” per i quali non erano stati creati, ma chiaramente è come usare un Bulldozer in una gara di formula 1 o montare una benna su una Lamborghini Aventador per usarla come spazzaneve…
Quindi informatevi di volta in volta sui linguaggi disponibili a seconda della strada che volete intraprendere.
Note:
– Mettete in conto il fatto di dover/poter utilizzare più di un linguaggio contemporaneamente
– Date un’occhiata a dove si può spingere il delirio e leggetevi la pagina di wikipedia sui linguaggi di programmazione esoterici
Primi passi – Strutture comuni
Come le diverse lingue dei diversi paesi, i linguaggi di programmazione hanno regole e sintassi diverse, ma sono tutte accomunate dallo stesso scopo: comunicare con una macchina.
E tutti contengono delle strutture “base” comuni che vengono utilizzate poi come mattoncini lego per creare algoritmi complessi.
Vediamo quali sono:
if – else
La struttra if-else direi che è la più comune in assoluto.
Si può ricondurre facilmente a “SE – ALTRIMENTI” e serve a verificare una condizione.
1 2 3 4 |
if (condizione) fai questo else fai quest'altro |
come si può vedere, se la (condizione) è vera fa “questo”, altrimenti fa “quell’altro”
esempio con la famosa torta:
1 2 3 4 |
SE (la torta è cotta) tirala fuori dal forno ALTRIMENTI girala dalla parte meno cotta |
Cicli
I cicli sono l’altra struttura comune a tutti i linguaggi, servono ad eseguire ripetutamente un gruppo di istruzioni finchè non si verifica una certa condizione.
Possono essere di due tipi, i cicli “for” e i cicli “while”.
I cicli for partono dal presupposto che all’inizio dell’esecuzione si sappia già quante saranno le ripetizioni e si possono interpretare come un “Per n volte fai questo”.
Esempio: è il mio compleanno e sulla torta ci sono 24 candeline.
Il ciclo for allora potrebbe essere
1 2 |
for 24 volte spegni una candelina |
I cicli while invece basano il loro numero di esecuzioni sul verificarsi o meno di una condizione e sono riconducibili a un “Finchè”
Il ciclo while della torta sarebbe:
1 2 |
while ci sono ancora candeline accese spegni una candelina |
La differenza dal ciclo for si ha perchè io eseguo l’azione di spegnere una candelina tante volte finchè non ce ne sono più accese, a prescindere dal numero.
Il ciclo while presenta anche una variante “do-while” che invece verifica la condizione DOPO aver effettuato l’azione, del tipo:
1 2 |
spegni una candelina fallo ancora finchè ci sono ancora candeline accese |
In questo modo l’azione viene eseguita SEMPRE almeno una volta.
Questa situazione ad esempio produrrebbe un errore nel caso che all’inizio del ciclo do-while non ci siano candeline accese.
Una persona reale semplicemente non soffierebbe, ma i computer sono macchine e non pensano e sicuramente alzerebbero tutto lo zucchero a velo con una bella soffiata PRIMA di vedere se c’erano candeline accese da spegnere.
La domanda che qui sorge spontanea quindi è: perchè usare i cicli do-while che possono generare errori?
Giusto, ma ci sono situazioni in cui tornano utili.
Sporcarsi le mani
Bene, arrivati fin qui magari vi è venuta voglia di provare da soli, eh?
Quello che posso consigliare è aspettare ancora un attimo a buttarsi su un linguaggio in particolare e soffermarsi ancora un momento sulle basi logiche utilizzando il portale http://code.org/learn.
Code.org è un progetto molto interessante portato avanti con il contributo dei “big” dell’informatica attuale con lo scopo di diffondere una conoscenza che diventerà preziosissima nell’immediato futuro.
I tutorial sono guidati, suddivisi per argomento e ordinati per difficoltà crescente e, anche se a prima vista possono apparire un po’ infantili forniscono basi importantissime (e sono anche divertenti da fare).
Una volta conclusi quelli, potete cimentarvi con un linguaggio “vero”, e quello che consiglierei è partire con uno di alto livello, tipo Python, nel quale ritroverete facilmente tutti i “comportamenti” che avete osservato nei tutorial di Code.org.
Come link stavolta consiglio http://learnpythonthehardway.org/ o http://www.codecademy.com/tracks/python.
Il metodo di studio proposto da quei siti funziona benone :)
Se durante l’approfondimento del mondo della programmazione voleste mettere alla prova le conoscenze che avete acquisito, potete cimentarvi nelle sfide di Project Euler o CodeAbbey.
Buon divertimento!