Imparare a programmare
L’arte della programmazione informatica
L’insieme delle attività e delle tecniche utilizzate per creare una sequenza di istruzioni da far eseguire ad un computer, prende il nome di programmazione informatica. In altre parole con la programmazione è possibile “dire” al computer come fare qualcosa. Se il compito da far eseguire è complesso o di grandi dimensioni si suddivide in compiti più piccoli, e questi ultimi in compiti ancora più piccoli, proseguendo fino a qualcosa di molto semplice e basilare che il computer è in grado di eseguire. Cos’è dunque la programmazione informatica? Ma soprattutto, come imparare a programmare partendo da zero? Scopriamolo insieme.
Linguaggi di programmazione [indice]
Per dire al computer come fare qualcosa, è necessario utilizzare un linguaggio di programmazione. Simile a un linguaggio umano, è composto da elementi di base (nomi e verbi) e metodi per combinare insieme gli elementi, così da creare qualcosa di significativo (frasi, paragrafi e romanzi). In altre parole un linguaggio di programmazione permette di comunicare una sequenza di istruzioni al processore di un computer in modo che esso le esegua.
Una sequenza ordinata di comandi, istruzioni ed operazioni che, caricate nella memoria del computer sono successivamente eseguite dal processore, prende il nome di programma. Esistono tantissimi linguaggi di programmazione, ognuno con le proprie caratteristiche, i propri punti di forza e di debolezza: Assembly, Fortran, Basic, COBOL, Pascal, C, C++, LISP, Visual Basic, Javascript, Java, Ruby, Python, sono solo alcuni dei linguaggi che hanno fatto la storia della programmazione, ma la lista completa sarebbe lunghissima.
Linguaggi di alto livello e di basso livello [indice]
Un computer riesce a comprendere qualsiasi linguaggio? La risposta è no! Il processore di un computer ne comprende soltanto uno: il linguaggio macchina. Tale linguaggio è basato sul sistema numerico binario e quindi utilizza soltanto due simboli (0 e 1) che, combinati in lunghe sequenze, creano le istruzioni da far eseguire dal computer. Agli inizi dell’era informatica i primi computer erano programmati direttamente in linguaggio macchina. In seguito, per semplificare il lavoro dei programmatori e ridurre il numero di errori che scaturivano dalla programmazione in linguaggio macchina, furono sviluppati i cosiddetti linguaggi assemblativi o Assembly, basati su istruzioni un po’ più semplici da gestire.
Il passo successivo per semplificare ancora di più il lavoro dei programmatori fu la creazione di linguaggi simili ai linguaggi parlati e perciò più semplici e intuitivi da imparare e utilizzare. Questi linguaggi di programmazione più vicini ai linguaggi che gli esseri umani utilizzano fra loro per comunicare, e quindi molto diversi dal linguaggio macchina, sono detti linguaggi di alto livello: esempi di linguaggio di alto livello sono Python e Java. Al contrario il linguaggio Assembly è un esempio di linguaggio di basso livello, quindi molto più vicino al linguaggio macchina.
Linguaggi compilati e linguaggi interpretati [indice]
Come fa un computer a “capire” un programma scritto con uno qualsiasi dei tantissimi linguaggi di programmazione disponibili se è capace di comprendere soltanto il linguaggio macchina? Sia i programmi scritti in linguaggio di basso livello che quelli scritti con linguaggio di alto livello per poter essere elaborati dal processore del computer. richiedono una traduzione in linguaggio macchina.
Dunque, ricapitolando, il programmatore scrive le istruzioni del programma utilizzando un determinato linguaggio e rispettando le sue regole, tali istruzioni sono raccolte all’interno di uno o più file di tipo testuale, detti file sorgente. Il programmatore utilizza quindi un software detto compilatore a cui darà in input i file sorgente creati. Il compilatore, dopo aver verificato la correttezza del codice sorgente, traduce le istruzioni di tale codice in linguaggio macchina, creando i cosiddetti file binari, ovvero i i file eseguibili dal processore del computer. I linguaggi che utilizzano un supporto di compilazione, presente normalmente all’interno del loro ambiente di programmazione, sono detti linguaggi compilati.
Esiste una categoria di linguaggi di programmazione che, per tradurre il codice sorgente in linguaggio macchina, non usano un compilatore ma un software chiamato interprete e sono detti perciò linguaggi interpretati. A differenza di un compilatore, un interprete traduce al volo, una dopo l’altra, le istruzioni da passare al processore per essere elaborate al momento, in altre parole il codice sorgente è tradotto in linguaggio macchina nel momento stesso in cui è elaborato.
Il linguaggio Java è un caso particolare, poiché è una via di mezzo fra le due precedenti tipologie, questo linguaggio è sia compilato che interpretato, infatti in Java il codice sorgente viene prima compilato in un formato intermedio, detto bytecode, il quale, a sua volta, viene tradotto da un software interprete detto Java Virtual Machine (JVM), che trasforma “al volo” le istruzioni bytecode in istruzioni per il processore.
Utilizzare un linguaggio interpretato invece di un linguaggio compilato presenta dei lati positivi, ma anche negativi. L’utilizzo di un interprete, infatti, permettendo di eseguire il codice nel momento stesso in cui viene scritto senza doverlo prima compilare, rappresenta una soluzione più semplice, flessibile e veloce nella fase di sviluppo del programma, lo svantaggio evidente, viceversa, lo troviamo nella fase di esecuzione del programma che, essendo le istruzioni tradotte al momento, risulterà inevitabilmente più lenta rispetto all’esecuzione di un programma compilato.
Ogni linguaggio di programmazione necessita di un compilatore o di un interprete diverso, a seconda dell’hardware in cui il programma sarà eseguito. Questo può causare comportamenti diversi dei programmi eseguiti su computer diversi. Questo problema è stato risolto brillantemente dal linguaggio Java con l’utilizzo del bytecode visto in precedenza.
Regole base per una buona programmazione [indice]
Evitare la duplicazione del codice. Questa è probabilmente la regola d’oro per una buona programmazione. Nella progettazione del software un errore comune consiste nella creazione di sequenze di istruzioni simili o addirittura identiche in diverse parti del codice sorgente. Le ripetizioni di codice vanno evitate, non solo perché rendono il codice più lungo e complesso, ma anche perché aumentano considerevolmente la probabilità di errore. La duplicazione del codice si verifica soprattutto come risultato dell’eccessivo utilizzo delle funzioni copia e incolla . È un errore comune commesso soprattutto dai principianti ma talvolta interessa anche gli sviluppatori più esperti.
Un programma non è costruito, ma sviluppato. Il codice non viene creato e impacchettato in un flusso lineare e in un’unica sessione di lavoro, non si crea un programma di colpo. Nella progettazione di un software se ne discute, si crea una bozza o un prototipo, lo si testa e ottimizza, si cancella, si riscrive, si prova di nuovo, si aggiorna, si modificano alcuni blocchi e così via. In altre parole, un programma è in continua crescita, sviluppo e cambiamento.
Scrivere codice chiaro e comprensibile. Un programma sarà eseguito dalle macchine, ma sarà anche letto dalle persone (colleghi di lavoro ad esempio) e quindi non solo dovrebbe rispettare le regole grammaticali, ma dovrebbe anche essere scritto in maniera chiara e scorrevole. A tal fine si rendono necessarie alcune regole di forma e di stile:
- Indentazione: utilizzare i rientri delle righe di codice in modo da evidenziare i blocchi di istruzioni che compongono la struttura del codice. Una indentazione appropriata aiuta a cogliere la struttura di un programma a colpo d’occhio.
- Spaziatura: un programma scritto in maniera fitta e con caratteri ammassati appare confuso e difficile da leggere. Usare quindi gli spazi in modo appropriato favorisce la leggibilità del codice.
- Lunghezza delle righe di codice: è scomodo leggere righe di testo molto lunghe, non è un caso infatti che i libri siano solitamente più alti che larghi. È quindi preferibile mantenere la lunghezza delle righe di codice e di commento al di sotto di 80 o 90 caratteri.
- Identificatori: sono i nomi attribuiti alle entità del linguaggio di programmazione, ad esempio variabili, costanti, tipi di dato, funzioni e altro. Nella scelta di questi nomi, oltre a seguire le indicazioni specifiche richieste dal linguaggio utilizzato, è preferibile usare nomi abbastanza brevi e che suggeriscano il significato dell’oggetto a cui si riferisce.
- Commenti: tutti i linguaggi di programmazione consentono di inserire nei programmi dei commenti che vengono ignorati dal compilatore o dall’interprete e dunque non eseguiti. Aggiungere righe di commento al codice, senza ovviamente eccedere, rende più semplice e chiara la lettura del programma, anche per sé stessi in futuro.
Concetti base della programmazione [indice]
I linguaggi di programmazione si basano su concetti teorici comuni. Un primo passo per imparare a programmare potrebbe essere proprio lo studio di tali concetti di base: capire ad esempio che differenza c’è fra una variabile e una costante, a cosa serve un costrutto condizionale, cos’è una espressione logica e come si utilizzano gli operatori relazionali al suo interno, che differenza c’è fra input e output, cosa sono e in quale ambito si utilizzano metodi e funzioni, cosa si intende per controllo di flusso o per iterazione, quando si usano le matrici, e così via.
Un metodo semplice e divertente per iniziare a comprendere i concetti di base della programmazione potrebbe essere l’utilizzo di uno dei linguaggi adoperati in ambiente scolastico per l’attività del cosiddetto coding, ovvero il metodo didattico usato per sviluppare e potenziare la capacità degli studenti di affrontare e risolvere efficacemente un problema (pensiero computazionale). Un esempio di linguaggio di programmazione didattico di tipo visuale è Scratch, utilizzato nelle scuole di qualsiasi livello, a partire dalle primarie.
Quale linguaggio scegliere? [indice]
Esistono tanti linguaggi di programmazione, dicevamo, ognuno con le proprie caratteristiche, ognuno in grado di fare benissimo alcune cose e male altre. Come orientarsi dunque nella scelta del linguaggio perfetto per iniziare il viaggio nel mondo della programmazione? In realtà, il linguaggio perfetto non esiste, invece esiste quello più adatto alle proprie esigenze e all’ambito in cui si desidera operare.
Per scegliere il linguaggio “giusto” con cui iniziare, la vera domanda da porsi è la seguente: perché voglio imparare a programmare? Magari per trovare lavoro, o per riuscire a sviluppare una app innovativa o un videogioco di tendenza o forse per creare un sito web moderno e accattivante … il mondo della progettazione software è molto vasto, dunque prima di iniziare il viaggio è bene stabilire da subito l’area in cui si intende approdare, e soltanto dopo, individuare il linguaggio più adatto, magari prendendo in considerazione anche altri aspetti: difficoltà di apprendimento, richieste nel mercato del lavoro, disponibilità di materiale di studio etc.
Vediamo dunque quali sono le aree di sviluppo software più diffuse:
- Analisi dei dati e calcolo numerico: i linguaggi più adatti sono ad esempio R e MATLAB
- Sviluppare software per PC. Si utilizzano in genere linguaggi come Java, C++, C#, VB.NET
- Sviluppare App Mobile. per Android è consigliato lo studio di Kotlin e Java, mentre per iOS si suggerisce l’uso di Swift;
- Creazione siti Web: Sono scritti principalmente con HTML/CSS, PHP e Javascript, ma molto spesso, per velocizzare lo sviluppo, ci si affida a un framework software (architettura logica di supporto) tipo Angular, NodeJS o Laravel.
- Creazione di Giochi: Lo sviluppo di videogiochi avviene principalmente utilizzando C, C++, C#, ma anche Python e Java per giochi un po’ più semplici.
Guido Mondelli
Docente formatore informatico