Imparare a programmare da zero

programmer3-373x246

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.

The General Problem

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

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

Mentre un linguaggio di livello ancora più alto potrebbe fare direttamente

Capita la differenza?
L’astrazione si può identificare quindi con la “distanza” dalla macchina e la “vicinanza” all’uomo.

Python

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.

come si può vedere, se la (condizione) è vera fa “questo”, altrimenti fa “quell’altro”

esempio con la famosa torta:

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

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:

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:

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.

Wisdom of the Ancients

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!

37834819

(Fonte: qui, qui e qui)

  • Programmavo con il Commodore16.. Mi è tornata la voglia e seguirò i consigli nella tua carrellata. Grazie per la selezione.
    Un saluto.

  • un post essenziale e chiarissimo, complimenti :)

  • duccioarmenise

    Ottima introduzione all’argomento, come primo libro da cui iniziare vorrei segnalare Imparare a Programmare di Chris Pine, tradotto in italiano.
    E’ basato sul linguaggio Ruby che è molto simile a Python e, se ci si trova in difficoltà, si può contare sull’aiuto degli altri studenti nei commenti di ciascun capitolo.

  • Salvatore

    Ho cercato diversi articoli sul programmare da zero ma tutti spiegavano la programmazione con nozioni che si dovevano già sapere, il tuo post è chiaro e utilissimo, complimenti e grazie :)