Sei sulla pagina 1di 37

PROGRAMMARE

IMPARA A SCRIVERE QUALSIASI TIPO DI SOFTWARE


SCRITTO DA
PAOLO ALIVERTI

• ANALIZZARE E RISOLVERE PROBLEMI


• CAPIRE IL METODO E GLI APPROCCI
• ESEMPI IN PYTHON E PROCESSING
• APPLICAZIONI WEB, DATABASE E APP www.zeppelinmaker.it
PROGRAMMAREIMPARA A SCRIVERE QUALSIASI TIPO DI SOFTWARE
SCRITTO DA

PAOLO ALIVERTI

Attribuzione - Condividi allo stesso modo - CC BY-SA


Puoi di modificare, ottimizzare ed utilizzare la mia opera come base, anche commercialmente, dandomi credito
per la creazione originale. Le tue creazioni adotteranno gli stessi termini della mia. Questa licenza è spesso
comparata con le licenze usate dai software opensource e gratuite "copyleft". Tutte le opere basate di questa
porteranno la stessa licenza, quindi tutte le derivate permetteranno anche un uso commerciale. Questa è la
licenza usata da Wikipedia, ed è consigliata per materiali che potrebbero beneficiare dell'incorporazione di
contenuti da progetti come Wikipedia e similari.
www.zeppelinmaker.it
Introduzione
Il software ci circonda. É un elemento sempre più conto. È chiaro che in queste situazioni, in cui non è Cercherò di insegnarti come utilizzare alcune di queste
presente negli oggetti che utilizziamo quotidianamente difficile incappare, serve un po' di esperienza e la tecniche e qualche strumento per riuscire sempre a
ed è una delle maggiori origini di inspiegabili conoscenza di qualche tecnica di base per la districarti tra le linee di codice che scrivi, siano poche o
malfunzionamenti. sopravvivenza. immumerevoli.
SCrivere software è qualcosa di simile a un arte. Richiede Per costruire una casa è necessaria una squadra di Nella seconda parte del libro illustrerò gli elementi
passione e cura dei dettagli. Nonostante per anni si sia lavoratori. É un lavoro che difficilmente può svolgere un fondamentali dei linguaggi di programmazione e ne
tentato di formalizzare il processo e i metodi di scrittura, i solo muratore. Lo stesso per il software. Per scrivere presenterò alcuni per iniziare a scrivere i tuoi primi
risultati sono abbastanza scarsi, perché scrivere un grandi programmi si usano dei team di persone che programmi. Imparerai a tradurre in linee di codice le
programma si avvicina a creare una sedia, un tavolo o un lavorano tutte allo stesso progetto analisi che hai scritto nella prima parte.
gioiello. Il programmatore svolge un lavoro artigianale, contemporameamente. Ogni persona ha diversi stili di Le sezioni finali presenteranno in modo introduttivo dei
nel termine nobile del termine. lavoro (che dovrebbero cercare di unifromare quando temi avanzati come creare siti web dinamici, applicazioni
lavorano in team seguendo delle linee guida). É chiaro che per smartphone e utilizzare database.
Spesso il software presenta dei problemi perché scrivere
in queste situazioni le cose sono ancora più difficili: “chi
un programma "completo" è una questione complessa e Buona lettura!
ha fatto questa modifica? Non funziona più il modulo che
articolata.
ho appena scritto!”. Per lavorare in questi ambiti si
Il software richiede una soluzione formale di aspetti della utilizzano strumenti e tecniche speciali epr semplificare e
vita “reale”. Una traduzione, una modellizzazione, non organizzare il lavoro.
sempre semplice. I programmatori hanno la spiacevole
abitudine di dire sempre che è tutto molto semplice. In
effetti non è proprio così. Il mondo è complesso, molto
complesso e anche l'operazione più semplice richiede
notevoli accorgimenti, comprende casi particolari e può
anche contemplare fallimenti prevedibili e non.
Un programma cerca di risolvere un problema seguendo
un processo logico che è stato definito dal
programmatore. Il compito del programmatore è quello
di comprendere il problema e di definire nel modo più
preciso e replicabile il processo necessario per risolverlo.
Spesso capita che il problema non sia ben compreso:
difficilmente sarà ben risolto. In questo libro cerco di
insegnarti a comprendere i problemi e a risolverli,
scrivendo un programma.
Le linee di codice crescono a dismisura. Un programma
"normale" contiene centiunaia di migliaioa di istruzioni. Si
fa presto a perdere l'orientamento in un tale oceano. Il
codice sorgente delle prime versioni di Word era formato
da circa 20 milioni linee di codice. Oggi se ne è perso il

i
Indice
1. Programmare 2. Linguaggi 3. Web e Database 4. Applicazioni
Come imparare a programmare Le parti di un linguaggio di Creare pagine web Wordpress
programmazione
Pagine dinamiche in php Applicazioni con Javascript
Utilizzo di alcuni linguaggi
I database Applicazioni mobile (phonegap, android,
python swift)
Pagine dinamiche con database
processing

ii
Programmare
I Greci dicevano di una persona incolta: "Non sa leggere né
nuotare"; oggi bisognerebbe aggiungere:
"né usare un elaboratore".
Primo Levi e Tullio Regge, Dialogo, 1984
Perchè questo libretto?
In questi anni ho scritto alcuni libri su Arduino, Usare Word bene, ma come una scimmietta tecnologica del peso di 30 chili fu acquistata da mio padre
l'elettronica e le stampanti 3D. Ho tenuto vari corsi su ammaestrata, è forse meno utile che comprendere i in occasione dei mondiali del 1982. Prima del '82 eravamo
come usare questi strumenti in cui il software è spesso meccanismi di quello che ci circonda. ancora in bianco e nero e senza telecomando. Neppure il
una parte importante. Nel mondo dei maker, spesso non Nordmende lo aveva e per cambiare canale ci si doveva
Molte persone in questi anni mi hanno fatto capire che il
è sufficiente scaricare un programma e usarlo. Spesso il alzare dal divano. Ricordare queste cose è incredibile
software è percepito come qualcosa di complicato da
software va scritto e molte persone si fermano qui. Se perché sembra di parlare di fatti del secolo scorso, eppure
lasciare agli smanettoni, ma non è così. Si può imparare a
stai leggendo questo libretto, probabilmente anche tu sei era così! Lo zapping si faceva in piedi di fianco al
programmare a ogni età e non è per nulla difficile. In
capitato in questa situazione. Scrivere del software non televisore, premendo i tasti dei dieci canali possibili, uno
queste pagine vorrei cercare di spiegarti qual'è
dovrebbe essere un'operazione quotidiana per una dopo l'altro.
l'approccio giusto da tenere per affrontare un problema e
persona che non si occupa di programmazione, tuttavia risolverlo con un programma. Il TV era incassato in un mobile che occupava tutta una
potrebbe capitare. parete del nostro salotto e collegare lo Spectrum era
Ho cercato di individuare le radici dei processi che
Purtroppo nelle scuole preferiscono insegnare la patente un'impresa abbastanza complicata. Avevamo anche un
seguono i programmatori spiegandoli in parole semplice e
europea per l'informatica alla programmazione, piccolo TV in bianco e nero che presto portai nella mia
con esempi. Ho scritto una sezione teorica dove illustro
credendo che sia più utile così. In effetti è utile saper questi principi e poi dei capitoli pratici applicati a python, camera e utilizzai per collegare lo Spectrum
usare word ed Excel, ma la programmazione da una quotidianamente. Dopo aver esplorato tutti i giochi
processing (java), allo sviluppo web e di App.
marcia in più. possibili mi accorsi che nella confezione erano inclusi due
Spero tanto che questo manualetto ti sia d'aiuto. libri: due manuali di programmazione. Il primo era un
Chi programma analizza i problemi e li
manuale classico abbastanza noioso, mentre il secondo
risolve. Il programmatore ha uno spirito Lo ZX Spectrum
era un piccolo libretto molto colorato e pieno di piccoli
critico e affronta i problemi con
Ho scritto i miei primi programmi per computer all'età di esempi. Lo provai subito, iniziando a ricopiare i listati e a
approccio positivo.
dieci anni con uno Spectrum 48k Plus. provarli. Imparai così a scrivere i primi programmi.
Lo Spectrum era proprio un bel computer: piccolo, nero e Spesso ero vittima della sindrome del cursore
con tutti quei tasti pieni di simboli strani. Lo desideravo lampeggiante: mi sedevo davanti al monitor con l'idea di
tanto perché lo aveva anche Moreno, il mio miglior amico. scrivere un grande programma in grado di rispondere alle
A dire il vero era di suo fratello maggiore, ma ce lo mie domande oppure un nuovo gioco, ma dopo poche
lasciava usare per giocare. Moreno aveva la versione con i righe mi perdevo. In quegli anni, in edicola uscivano
tasti in gomma, poco più grande di una calcolatrice parecchie riviste per i microcomputer, tra cui alcune
scientifica. contenenti solo listati (PaperSoft). Ogni tanto ne
Lo desideravo tanto, così che lo ricevetti come regalo di acquistavo una ma si imparava poco con queste riviste
promozione e compleanno nel lontano 1984. Lo perché non c'era mai una spiegazione del software.
Spectrum era diverso dai computer di oggi ma molto Ricopiavi e basta.
pratico: lo si collegava al TV di casa con il cavo Scrivere software non sembrava essere una cosa
dell'antenna. Le prime volte dovevi passare decine di semplice! Eppure non mi sono mai dato per vinto e da
minuti a cercare la sintonia, girando le rotelline della allora ho sempre cercato di capire cosa si celava dietro a
sintonia del televisore. quelle righe spesso incomprensibili. Questo manualetto è
Noi avevamo una TV a colori della Nordmende con quello che mi sarebbe piaciuto leggere nel 1983.
rifiniture in finto legno. Credo che quella meraviglia

3
Il software
Il software è presente non solo nei
computer, ma in un grandissimo
numero di oggetti di uso quotidiano.
Regola il loro comportamento e
definisce (spesso) le funzionalità più I primi programmi per calcolatore I programmi Desktop hanno dominato la Dall'inizio di questo secolo c'è stata
complesse. Per la sua complessità è servivano per eseguire rapidamente scena del software per parecchi anni e un'esplosione di siti internet e web app,
anche origine di malfunzionamenti. calcoli numerici complessi. Anche oggi i ancora oggi ne utilizziamo molti: software cioè siti utilizzabili come dei veri e prori
programmi eseguono elaborazioni per video scrittura, fogli di calcolo e programmi. Le tecnologie Web 2.0 hanno
Le origini del software sono più antiche di numeriche ma questa capacità passa quasi programmi per la grafica o l'elaborazione permesso di creare dei software potenti e
quello che potresti pensare. Già verso la in secondo piano! dei suoni. semplici da utilizzare come Gmail o
fine del 1600 Leibniz, matematico Facebook.
tedesco, ipotizzava la creazione di un
linguaggio comune per descrivere la
matematica e la logica. Negli anni seguenti
molti matematici affrontarono il problema
studiando i legami tra la logica e la
matematica. Nella metà del 1900 Turing e
Von Neumann misero le basi I database sono programmi specializzati Il firmware è un programma che "gira" su Molti programmi girano su dei server e
dell'architettura dei moderni calcolatori e nella memorizzazione di dati all'interno di piccoli chip (microcontrollori) contenuti forniscono servizi a siti internet o ad altri
definirono le prime modalità di tabelle. Per recuperare i dati si usa un all'interno di svariati oggetti. Questi software: espongono dei servizi web che
programmazione. linguaggio speciale chiamato SQL. software devono essere ottimizzati per ricevono e restituiscono dati utilizzabili da
usare pochissime risorse e funzionare in altri programmi.
condizioni spesso estreme.

Le aziende utilizzano software installati su La diffusione degli smartphone ha aperto I giochi costituiscono una parte
server permettendo a più persone di nuove possibilità per gli sviluppatori di importante del software sviluppato. Il
lavorare contemporaneamente. Questi software che ora possono sbizzarrirsi fatturato del settore ha infatti superato
programmi si occupano di gestire i nella produzione di App per le diverse quello del cinema!
processi aziendali (ERP), le relazioni con i piattaforme esistenti (Android, OSX,
clienti (CRM) o i dati e le informazioni Windows...).
(documentali e CMS).

4 Il calcolatore Universale - Martin Davis - Adelphi


Cos'è un programma?
Un programma è un insieme di Un Programma è una sequenza di operazioni
istruzioni che il computer eseguirà
una a una.

Se si vuole essere pignoli ci sono


distinzioni tra le parole software,
programma e applicazione. Agli occhi di
una persona poco esperta non ci sono
molte differenze e sembrano dei sinonimi.
Il software è qualcosa di più generale che
può essere eseguito su un computer,
mentre un programma è un insieme
specifico di operazioni per risolvere un
problema. Un'applicazione è un
programma dotato di una interfaccia
verso l'utente.
Un programma è la soluzione a un
problema, descritta con un algoritmo,
cioè un procedimento definito in modo
preciso e con un numero limitato di passi.
All'origine dell'informatica le macchine
calcolatrici potevano svolgere solo un
compito preciso come fare solo somme e
moltiplicazioni. Non esisteva il software
come lo intendiamo oggi e il rpogramma
era cablato nella costruzione della
macchina che riceveva dall'esterno solo i
dati. Alan Turing, a metà del secolo
scorso, descrisse il funzionamento di una
macchina universale, cioè di un sistema
di elaborazione in grado di ricevere
dall'esterno, tramite un nastro, sia i dati
che la descrizione del suo
comportamento, cioè il programma da
eseguire.
I computer di oggi funzionaneo
esattamente così!

5
Programmatori si nasce?
Qual'è il segreto per scrivere del
software?
Se hai organizzato un viaggio avrai dovuto
Saper risolvere un problema. affrontare una pianificazione prevedendo
varie alternative da valutare in loco a
Tutto qui, veramente. Credi che sia un po' seconda delle diverse condizioni: "Se
poco? Non ti sto prendendo in giro. quando sarò a Lisbona pioverà, cosa
Sostanzialmente un software svolge un visiterò?".
compito e quindi deve facilitare o
automatizzare delle operazioni che
altrimenti dovremmo svolgere a mano o
con strumenti che definiremmo
“antiquati”.
C'è quindi un problema che un
programma deve risolvere. Il
procedimento è definito da un algoritmo,
cioè la sequenza di operazioni da svolgere.
Programmare equivale quindi a risolvere
problemi, una cosa abbastanza naturale
per noi esseri umani!

Una ricetta è equivalente a un semplice


programma perché è una sequenza di
operazioni che il cuoco dovrà svolgere per
preparare una pietanza. É semplice perché
la sequenza è lineare e prevede solo una
serie di passi da svolgere uno dopo l'altro.

6
Problemi
È poco produttivo mettersi di fronte alla tastiera sperando che venga l'ispirazione per scrivere un buon programma. La cosa da fare è quelle di cercare,
prima di tutto, un problema da risolvere.

Se “da grande” vuoi diventare un Un problema semplice può essere quello I problemi più difficili da risolvere sono Purtoppo, a volte, alcuni di questi “lupi” si
programmatore “professionista”, i di scrivere una sequenza di controllo per quelli che non hanno soluzione: bella presentano vestiti da “pecorelle” e noi
“problemi” te li forniranno i clienti o il tuo una macchina del caffè automatica. Ecco scoperta! programmatori sprovveduti ci lanciamo a
capo (spesso non solo quelli di tipo una possibile soluzione per preparare un scrivere linee e linee di codice per cercare
In effetti esistono problemi “famosi”,
“software”). caffè: di trovare una soluzione che non potrà mai
notoriamente irrisolvibili per i quali non
vale la pena scervellarsi a meno di voler funzionare. Solitamente un “lupo” appare
Tanto per mettere le mani avanti: esistono
diversi tipi di problemi, tra cui alcuni 1 attendere la selezione puntare a un premio Nobel. L'istituto come una “pecorella” quando è descritto
male o in modo semplicistico o
irrisolvibili. In linea generale ci sono matematico Clay ha creato una lista di
approssimativo.
problemi che possono essere risolti in 2 contare le monete introdotte problemi irrisolti e per la soluzione di
modo semplice e logico, problemi che ognuno di questi offre un milione di Tempo fa mi hanno chiesto di realizzare un
possono avere più soluzioni e problemi dollari. semplice e-commerce: nulla di difficile. Il
che per quanto li giri, non c'è modo di 3 attivare il macina caffè
committente non aveva le idee molto
I problemi sono:
risolvere. chiare anche se ne era fermamente
4 riscaldare l'acqua • P contro NP, convinto, quindi ogni volta che gli
• Congettura di Hodge, sottoponevo il mio lavoro mi faceva fare
5 preparare il bicchiere
• Congettura di Poincaré (risolto),
correzioni e aggiustamenti, anche
innervosendosi. Per esempio non gli era
• Ipotesi di Riemann, chiaro come gestire le spedizioni e quindi
6 far cascare zucchero e paletta
da una prima semplice soluzione legata alla
• Teoria quantistica di Yang-Mills,
quantità ordinata si passo a sistemi
7 pompare l'acqua calda • Equazioni di Navier-Stokes, sempre più complicati in cui considerare
• Congettura di Birch e Swinnerton-Dyer. CAP, peso, numero di pezzi e altre
Sebbene molte cose possano andare numerose opzioni. I conti alla fine non
storte, il tutto è abbastanza prevedibile e tornavamo mai perché il sistema è evoluto
controllabile. La paletta potrebbe nel tempo senza un piano preciso.
incastrarsi, il caffè potrebbe finire, Viviamo in un mondo molto complesso e la
potrebbe mancare l'acqua, qualcuno ha nostra percezione della realtà tende a
inserito delle monete false ecc. ecc.. Per semplificare le cose. È importante capire
ognuno di questi casi è possibile prendere quanto le cose siano complesse e arrivare
delle contromisure. a definire il giusto grado di dettaglio.

7
Nulla è semplice!
Non esiste un problema semplice! Non è per scoraggiarti, ma il mondo è compelsso ed è necessario comprendere che anche il problema all'apparenza più
semplice nasconde delle complessità.

Anche la cosa all'apparenza più facile e Anni fa mi han chiesto di realizzare un CD Un fiocco di neve è piccolo e semplice... ma solo all'apparenza. Le sue forme nescondono
scontata richiede parecchio lavoro, multimediale per presentare dei geometrie frattali complesse e interessanti.
approfondimento, analisi. L'esecuzione ventilatori. Il CD doveva aprire un piccolo
deve sempre essere fatta con cura e programma con all'interno il catalogo dei
attenzione per i dettagli. ventilatori. Ogni ventilatore aveva una
foto, un grafico e una tabella con i dati. Una
Non lasciare nulla al caso e cerca di essere
cosa semplice: all'apparenza. I testi e le
perfetto quanto basta.
foto erano già disponibili e si trattava di
Anche un software, oggi, non può essere inserire tutto in un database per poi
qualcosa di isolato dal mondo. Se sviluppi visualizzare le informazioni. La parte più
per un'azienda ti chiederanno della complessa era un grafico dinamico ma mi
documentazione, dei manuali, dei report; assicurarono che c'erano le formule e la
se sviluppi per te stesso dovrai creare un cosa era semplice.
sito web a supporto del tuo prodotto,
I dati c'erano, ma su cataloghi cartacei.
pubblicare sui social network, creare del
Andavano ricopiati. Le foto dovevano
materiale grafico e pubblicitario.
essere scansionate dai cataloghi. Le
Valuta quando è il momento di fermarti. formule si rivelarono in realtà dei grafici
Spesso l'80% è sufficiente, soprattutto se perché non avevano idea in quella ditta
per raggiungere il 99% è necessario quali fossero le leggi per tracciare i grafici.
spendere tempo e risorse come se non ci I ventilatori si rivelarono qualche
fosse un domani. centinaio. A un certo punto saltarono fuori
Per capirlo, ogni tanto, solleva la testa dei cataloghi nuovi che si erano scordati di
dalla tastiera e pensa a quello che stai consegnare. I grafici dovevano modificarsi
facendo, cerca di vedere la foresta e non il se si modificavano dei parametri. La scala e
singolo albero per capire a che punto sei le unità di misura dovevano adattarsi. Poi
del lavoro, se è presentabile e cosa serve sono arrivate le modifiche perché il cliente
per poter scrivere la parola “fine”. non aveva le idee molto chiare. Un lavoro
da un mese si trasformò in un'odissea di
tre anni.
All'inizio sembrava un lavoretto facile. Aaron Burden (unsplash.com)

8
Analizzare problemi
Analizzare un problema non è una
cosa semplice, ma anche gli esperti
adottano delle tecniche per arrivare
sempre a delle soluzioni.

Per comprendere il fuzionamento di una


cosa o di un processo è necessario L'analisi top down scompone un problema L'approccio Bottom up parte dai dettagli Per capire l'essenza di un problema non ci
osservarlo con attenzione. A volte ci sono complesso in più sottoparti e ne riduce la per creare dei moduli che compongono la si deve fermare alle prime risposte, ma è
delle persone (gli esperti) che sono complessità. soluzione generale. I moduli si combinano necessario fare domande per arrivare alle
responsabili di alcune azioni da cui come i mattoncini Lego. sue origini, con il metodo dei 5 perché.
dipende lo svolgimento di un certo lavoro.
Per comprendere i meccanismi è utile
parlare con queste persone e magari con
l'esperto del processo.
Purtroppo quando si tocca il lavoro di una
persona spesso nascono timori e gelosie.
Capita di frequente di incappare in
situazioni difficili dove le persone non
sono invogliate a colalborare svelandovi i Nel software si presentano spesso delle Per trovare soluzioni nuove e alternative Alcuni esperti della risoluzione di problemi
“segreti” del loro lavoro. configurazioni tipiche adatte a risolvere un prova a cambiare la prospettiva. Stai inseriscono degli elementi casuali nella
certo tipo di problema. Un pattern è una guardando il dito o la Luna? ricerca della soluzione per sforzarsi di
Il lavoro dell'analista di problemi è simile soluzione collaudata da applicare in vedere le cose in modo differente e
al naturalista o all'investigatore: dotati di precise situazioni. considerare alternative.
lente e pazienza dovrai capire come
accadono le cose e perché.
Oltre agli aspetti diretti è sempre utile
considerare il contesto e l'ambiente in cui
ti trovi. Immagina di dover progettare
un'App per prenotare un taxi. Un conto è
immaginarsi il suo funzionamento seduti
in un ufficio sorseggiando un caffé, un
Raffina la tua soluzione. Dopo essere Le cose cambiano a seconda della Per ottenere una soluzione valida, sforzati
altro è dover trovare rapidamente un
giunto a una conclusione e aver trovato la situazione. Stai considerando tutte le di produrne più di una. Non è detto che la
passaggio mentre si è appena scesi
tua soluzione, ripercorrila e migliorala con variabili che influenzano il contesto? Se il prima idea sia la migliore. Produci soluzioni
dall'aereo, in ritardo, e ci si sta recando a
delle iterazioni. Se hai definito dei sistema che stai osservando è in uno stato alternative e cerca un confronto con un
un importante appuntamento.
processi, sicuramente si possono rivedere statico o di calma, cosa accade quando le collega, un amico o con il tuo stesso
e migliorare. cose si muovono? committente.
Strumenti per la creatività
Michael Michalko - Ed. Alessio Roberti

9
Top Down
La soluzione di un problema
complesso si può semplificare
Una sottoparte ha altri vantaggi: di un
grande problema è difficile prevedere i Voglio un Caffè
creando delle sottoparti con ambito tempi di risoluzione o la fatica necessaria, Applicazione di un approccio top down.
limitato e più gestibile. ma per una piccola parte tutto è più
semplice.
Un tempo lavoravo per una società di Un sotto problema è limitato e si può
Trenord e avevo spesso a che fare con il valutare la sua difficoltà e anche fare una prendi il caffè prepara la caffettiera accendi il fuoco e attendi bevi il caffè
responsabile IT del gruppo, l'ing. Nicoloso, previsione del tempo necessario per
un manager dalla storia affascinante e completarlo.
piena di aneddoti. Uno dei suoi motti
preferiti era “facciamo a fette l'elefante”. Quando si divide un problema in più parti apri la dispensa afferra il barattolo apri il barattolo versalo bevi
Quando si presentava un nuovo progetto è ovviamente possibile creare più livelli, in
o qualche problema tecnico, la prima cosa cui il dettaglio si intensifica man mano. Si
che consigliava di fare era di cercare di formerà una piramide alla cui cima ci sarà
“il problema” e nei livelli sottostanti tutti i svitala versa l'acqua metti il caffè chiudila
separare il “grande problema” in parti più
piccole. sottoproblemi, perché un sottoproblema
può a sua volta essere diviso.
Questo approccio si chiama top down e
I livelli di dettaglio possono essere apri il gas accendi la fiamma regola il fuoco
consiste appunto nel dividere un
problema complesso in sottoparti sempre ulteriormente specificati, fino a un livello
più dettagliate. Anche gli antichi romani paranoico e con un dettaglio infinito.
adottavano un approccio simile in Probabilmente non è necessario arrivare a
battaglia: divide et impera. Invece che descrivere i movimenti delle dita della
affrontare un'intera nazione, attaccavano mano!
piccole regioni e le conquistavano una a Prova a scomporre in passi più semplici i
una. processi per la soluzione di alcuni
Quando si deve risolvere un grande problemi:
problema, avere a che fare con delle parti • fare rifornimento di benzina;
più contenute e limitate garantisce la
• preparare una torta.
risolvibilità della cosa. Spesso di fronte a
un compito ci si sente atterriti: «È così
difficile che non ci riuscirò mai!», viene da
dire. Dividere il compito con razionalità lo
trasforma in qualcosa di ragionevole e
affrontabile.
Da soli non potremmo battere mai
l'elefante, ma se lo consideriamo un pezzo
per volta, allora la cosa è fattibile.

10
Bottom Up
La soluzione si può comporre
mettendo insiemi i pezzi, partendo
Immagina che ti chiedano di scrivere un
programma che legge dati da dei file e li Leggere e trasmettere dati
dai dettagli e componendoli come trasmette a un computer remoto. Se sei Applicazione di un approccio bottom up.
moduli in unità via via più grandi. esperto della materia ti troverai a tuo agio
iniziando la tua analisi definendo le
Un approccio alternativo per risolvere operazioni di dettaglio.
problemi parte dal basso, dai dettagli, per Potresti decidere di adottare apri il file leggi una riga collegati al pc remoto trasmetti la riga chiudi il file
poi mettere insieme i vari pezzi. Questo l'approccio bottom up anche se ci sono
metodo prende il nome di bottom up ed è dei punti poco chiari o su di cui hai dei
un po' come giocare con le costruzioni. dubbi. Prima di sbilanciarti, cercherai di
leggi i dati visualizza i dati
Se di un particolare problema puoi capire come risolvere i punti cruciali del
individuare subito le parti critiche, puoi problema. In seguito dovrai solo
iniziare a descriverle e analizzarle per poi combinare le parti che hai definito in
capire se sei in grado di smarcare le parti dettaglio. Programma per leggere e trasmettere dati
più critiche. I micro-passi possono essere raggruppati
Il vantaggio è che così si conoscono in in passi più estesi che generalizzano
dettaglio tutte le variabili che formano un un'operazione, per esempio: “leggere dati
sistema. Il rischio di questo approccio è di da un file”.
perdere di vista l'obiettivo generale e poi Con questo approccio vai a delineare
di avere difficoltà nel collegare le parti. subito le operazioni minute e a volte più
Il top down è molto più "pratico" del critiche. Individuare questo tipo di
bottom up perché porta a mettere subito situazioni di permette di poterle
le mani nel codice. Resisti alla tentazione! evidenziare subito e magari di fare dei test
per verificarne la fattibilià.
Spesso l'approccio bottom up si combina
con quello top down e i due si incontrano
“nel mezzo” fornendo una scomposizione
completa del problema.

11
5 Perché
Per approfondire la conoscenza di
un problema è necessario scendere
Con i 5 perché si cerca di andare all'orgine
si un problema per risolverlo meglio, senza La radice del problema
in profondità e capire da dove fermarsi semplicemente alla cura dei Applicazione del metodo dei 5 perché.
partono le sue radici. Chiedere più sintomi. Vediamo un esempio:
volte "perché" è un valido metodo di , «Perchè?».
approfondimento. «», «Perchè?».
«Il motore non ha potenza»
A volte quando una persona ti spiega «La batteria non si carica», «Perchè?».
qualcosa puoi avere difficoltà a capire «L'alternatore è rotto», «Perchè?».
cosa ti stia chiedendo, perché non
fornisce il contesto e dà alcune cose per «Il pezzo era difettato», «Perchè?». perché?
scontato. Questa persona è talmente «Il meccanico voleva risparmiare con un
immersa nel suo problema che da tempo «Si accende la spia di avaria della
pezzo usato.»
convive con esso e con le parole “chiave”. batteria»
Con questo sistema si arriva alle cause dei
Ne ha analizzato tutti gli aspetti e le problemi e ciò aiuta a comprenderli meglio perché?

??
implicazioni e quando te lo riporta e quindi a trovare soluzioni migliori. A
potrebbe darti un focus solo su una parte volte ci si può fermare anche a 3 o 4
«La batteria non si carica»
“chiave”, oppure proporti già un metodo di “perché”.
risoluzione. Il tecnico però sei tu e conosci
In modo simile puoi fare il classico “passo
meglio le soluzioni tecnologiche e i metodi
più adatti. Spesso il metodo proposto
indietro”, per cercare di comprendere il perché?
contesto in cui il problema nasce. Capire il
inizialmente non è quello ideale.
contesto aiuta a conoscere le cause e le «L'alternatore è rotto»
Per risolvere il problema nella sua dinamiche dell'ambiente che origina il
interezza serve fare un passo indietro e problema.
capire qual'è la sua origine.
Prova ad applicare il metodo dei 5 perché perché?
Un sistema molto utile è il metodo dei 5 a delle situazioni reali scrivendo le
perché, ideato molti anni fa dai manager domande e le risposte. Ricordati di non «Il pezzo era difettoso»
della Toyota con lo scopo di migliorare il oltrepassare i 5 passi.
loro processo produttivo.
Il metodo dei 5 perché è parte perché?
dell'approccio “lean” alla produzione, un
sistema rivoluzionario che garantisce un «Il meccanico voleva risparmiare con
miglioramento costante della qualità dei un pezzo usato»
prodotti. Le tecniche lean si possono
applicare anche al software!

12
Come si programma
Gli ingegneri cercano sempre di
standardizzare dei processi in modo da
poterli industralizzare, aumentando il loro
rendimento e ottenendo prodotti migliori.
Ci sono riusciti con quasi tutte le attività Waterfall
umane, ma la programmazione resta Una cosa alla volta!
ancora abbastanza problematica. Esiste
una branca dell'ingegneria chiamata
ATTENZIONE!
ingegneria del software che descrive vari
Il modello di sviluppo Waterfall è "datato" e non
approcci e procedimenti da seguire per andrebbe utilizzato. L'ho riportato qui solo per
illustrare le fasi "logiche" dello sviluppo di un software.
produrre software in modo industriale. Il Agli inizi, ingenuamente, si adottò questo sistema che
problema (e il bello) del software è che per notoriamente presenta limiti e difetti. Solo per
avertene parlato rischio di essere radiato come
essere sviluppato richiede una certa programmatore.
creatività e artigianalità che non si Analisi
trovano in altre applicazioni e che è Comprensione del
difficile standardizzare. Per questo ogni problema, e dei sui Progettazione
tanto sentirai parlare di "crisi del aspetti fondamentali.
software" e di nuovi approcci che Disegno della
dovrebbero risolvere tutti i mali della Definizione di un soluzione, dei processi
e delle interfacce per Sviluppo
programmazione. documento di
specifiche. risolvere il problema Scrittura del software
Un tempo si sviluppava con un approccio
molto razionale e logico chiamato Test
waterfall, perchè le varie fasi dello Verifica delle
sviluppo si seguono come tante cascate da funzionalità realizzate
cui l'acqua cade e non può risalire. Si inzia comparate con le
con l'analisi del problema, la stesura di un Consegna e
specifiche
documento descrittivo, la progettazione Manutenzione
del sistema, la realizzazione, quindi il test, Consegna del software
la consegna e l'immancabile fase di Uno dei grandi problemi del waterfall è il tempo, molto prodotto e apertura
bugfixing (correzione degli errori). Tutto lungo, che si deve aspettare prima di vedere un risultato. della fase di
Dopo mesi di lavoro il cliente lo vede e ti dice: "ma io non
logico e lineare! Se fosse possibile lo volevo così"! manutenzione.
svolgere ogni fase in modo perfetto e
senza difetti.
Questo approccio serve per farsi un'idea
di come funziona lo sviluppo di un
software, ma nella realtà le cose non
vanno mai così!
Tempo di consegna

13
Approcci modermi
Gli approcci agili prevedono una
suddivisione del lavoro in piccoli
lotti e interazioni rapide e frequenti
per ottenere subito dei feedback.
Agile Software
Suddividere il lavoro e ridurre i tempi di consegna.
L'approccio Waterflow è molto contestato
e si è dimostrato poco funzionante, perché
non rispecchia la realtà dei fatti. Il suo
maggiore difetto è il tempo che il cliente
deve attendere prima di vedere un
risultato (che al 99,9% dei casi non
corrisponde alla sua idea).
Progettazione
Gli sviluppatori hanno cercato approcci
innovativi per sviluppare il software in
modo migliore. Gli approcci Agili
prendono spunto dalle teorie di Lean
Management che cercano appunto di
ridurre i tempi di lavorazione, di Analisi
raccogliere feedback e di migliorare Sviluppo
costantemente la qualità della
produzione.
Il trucco consiste nel organizzare dei team
efficienti e comunicativi, nel dividere il
lavoro in piccoli batch (lotti) e nel
aumentare i feedback e le interazioni con
chi ha commissionato il software.
Test
Nel mondo agile esistono diverse
soluzioni e diverse tecniche che possono Il grafico è indicativo. Ogni
essere anche combinate o modificate approccio Lean utilizza una sua
secondo le proprie esigenze: XP, Scrum, particolare organizzazione dei
AUP, Lean Software Development. flussi di lavoro.

Consegna

Manifesto per lo Sviluppo Agile di Software


http://agilemanifesto.org/iso/it/manifesto.html

14
Le specifiche
Le specifiche di un software Cosa si scrive nelle specifiche? mettere in difficoltà i lettori. Il tuo
descrivono come il programma Funzioni e servizi documento deve essere compreso da chi
Esistono vari modelli di file di specifica, ma
dovrà funzionare e come dovrà In alcuni documenti si trovano anche delle legge. Come si fa? Il trucco è di usare frasi
non c'è una regola generale. L'importante è
essere realizzato. descrizioni dettagliate delle funzioni o dei brevi e parole semplici. Le persone comuni
scrivere un documento chiaro e
servizi da realizzare, con indicati i usano un vocabolario di 3000/4000
comprensibile. Ecco qui di seguito una
Le specifiche sono dei documenti che la parametri in ingresso e il risultato parole e spesso chi legge il tuo documento
descrizione delle sezioni che potresti
maggior parte dei programmatori detesta. prodotto. non è un tecnico (anche se ricopre la figura
includere in un tuo documento.
Sono dei documenti che descrivono che di manager).
Introduzione Interfacce
cosa farà il software e come andrà Le specifiche descrivono del software e
realizzato. Solitamente è un documento Fornisce una breve descrizione di quello Raramente si trova una descrizione delle quindi dovrai utilizzare dei termini
che viene fornito al programmatore che farà il software. Se il programma si interfacce utente, cioè delle schermate e specifici: quando li introduci la prima volta,
dall'analista, la persona specializzata inserisce in un sistema più complesso, si di come sono tra di loro connesse. spiegali. Fai lo stesso per sigle e
nell'analizzare e risolvere i problemi. usa dare la descrizione dello stato attuale Test e Collaudo abbreviazioni. Limita l'uso delle parole
A volte capita che sia lo stesso del sistema e come cambierà dopo aver inglesi, a meno che sia strettamente
Il documento può riportare anche un
programmatore a dover scrivere questi introdotto il nuovo elemento. Si possono necessario. "Mouse" è ormai entrato nel
elenco dettagliato delle prove che si
lunghi e noiosi documenti. Altre volte la anche elencare i sistemi a cui il nuovo vocabolario, ma "device" è sostituibile con
devono fare e del risultato previsto, al fine
persona che le ha scritte capisce poco di software si collegherà. "dispositivo". Anche "downlodare" non è
di attestarne il corretto funzionamento.
software e il suo documento è Funzionalità proprio un termine aggraziato e sarebbe
Una tale sezione è utile per la fase del
incomprensibile. Purtroppo, raramente si da evitare come la peste.
In questa sezione si indicano le collaudo.
trovano dei documenti di specifica ben
fatti. caratteristiche e le funzioni del software: UML
quello che il programma farà, le operazioni
Un programmatore non dovrebbe aver Il linguaggio di modellazione universale è
possibili e la descrizione dei processi di
paura di scriverne di suo pugno, anche uno strumento "tecnico" e formale per
funzionamento.
perché capita spesso di doverlo fare. descrivere il funzionamento di un
Architettura software. L'UML prevede vari
Le specifiche non sono un male: sono il scenari in cui descrivere i
piano di quello che dovrai realizzare e Come sarà realizzato il tutto? Che parti
saranno presenti e come dialogheranno? processi, le interazioni, i
tanto meglio sono fatte, meglio riuscirà il moduli e le procedure. L'UML
lavoro. Sono ben fatte quando sono scritte Che tecnologia utilizzerai per
programmare i vari moduli? è un linguaggio grafico non
in italiano semplice, corretto, sono proprio intuitivo e immediato.
complete e semplici. Grafici, figure e Dati
diagrammi aiutano molto a comprendere: Come si scrivono?
Una sezione potrebbe descrivere i tipi di
non bisogna avere paura a inserirle. Scrivi in italiano semplice e
dati presenti e come saranno utilizzati. Se
Le specifiche sono utili quando si deve far l'applicazione utilizza un database si usa corretto. Non usare termini
capire ad un cliente cosa realizzeremo. Il fornire una descrizione delle tabelle "da politico", parole
più delle volte non le leggerà, ma il fatto di presenti e del loro utilizzo. complesse, sigle e neologismi.
avre scritto quello che realizzerete vi Scrivere benenon significa
aiuterà nel caso di controversie. usare paroloni complicati per

15
Prototipi
Sviluppare software richiede tempo Prototipi su carta Software per presentazioni Interfaccia utente "nuda"
e un cliente prima di vedere un Usa carta, penne e matite colorate per I programmi come Powerpoint si prestano In alcuni casi è possibile creare delle vere e
risultato potrebbe dover aspettare disegnare le schermate dell'applicazione. bene per creare delle presentazioni proprie applicazioni "vuote", che
del tempo. Per ottenere subito un Sistema molto rapido ma preferibile per interattive che possono reagire al clic del contengono tutti i pulsanti e i menu ma che
primo feedback si possono costruire usi interni o personali mouse. Puoi quindi realizzare una non funzionano veramente. Il cliente potrà
dei prototipi (Mock Up). presentazione interattiva di quello che poi provare il softawre e quindi avere una
realizzerai. impressione molto realizstica. Il lavoro
I Mock Up servono per dare una prima fatto può essere poi riutilizzato per lo
idea di come sarà realizzato un software. sviluppo vero e proprio.
Esistono vari metodi per creare dei
prototipi alcuni semplici, altri più
complessi.
Un Mock Up può essere esattamente
identico al risultato finale, ma spesso
serve per capire se i flussi e le interazioni
progettati sono adatti, cioè se Prototipo grafico
l'applicazione sarà "comoda" e "pratica" da
Se te la cavi con un programma per il
utilizzare.
disegno (meglio se vettioriale come
Un prototipo di questo tipo si può definire InkScape) puoi disegnbare delle preview
funzionale ed è molto importante, se lo si delle schermate e arricchirle con dei
mostra al cliente, sottolineare che serve template che simulino l'aspettop del
solo per dimostrare la funzionalità del telefono o della finestra del browser. https://hd.unsplash.com/photo-1457433575995-8407028a9970

software. In ogni caso ti faranno notare


che vorrebbero i bottoni con i bordi più
arrotondati... garantito!

Software specializzati
Esistono degli applicativi specializzati per
creare dei mock up. Le schermate si
compongono trascinando i componeneti
sulle schermate e ovviamnete possono
essere interattivi.

16
Esempio di Mock Up Grafico

17
Lo sviluppo
La fase di realizzazione del software Gli altri personaggi Analista Sistemista
può coinvolgere numerosi attori, Quando il software da realizzare è molto È la persona che ha analizzato il problema Se il progetto prevede la realizzazione di
soprattutto se il progetto è complesso sarai circondato da molte altre e ha definito le specifiche. una infrastruttura hardware servono dei
copmplesso. figure. Nelle situazioni più complesse sono sistmisti che la realizzino. Il sistemista è
PM (Project Manager)
tutte presenti e ben distinte, spesso molte l'esperto dell'hardware e delle reti.
Quando è ben chiaro cosa si deve figure coincidono o sono coperte da una Il PM organizza e controlla la scrittura del Dovrebbe creare e configurare l'ambiente
realizzare, si può inizare a battere tasti sul sola persona o entità. software. Verifica che tutto si svolga in cui funzionerà il software. Solitamente
computer per scrivere il software. Se lo fai correttamente e nei tempi previsti e fa da nel mondo IT sono le persone
per hobby o in una piccola organizzazione Stake Holder punto di contatto tra gli sviluppatori e tutti (ingiustamente) più odiate, spesso
dovrai fare i conti solo con te stesso e non Questo termine indica in modo generico le gli altri attori. confinate nei seminterrati (vedi la serie TV
ci saranno persone a cui rendere conto del figure che sono interessate al progetto. "The IT Crowd").
Sviluppatore o programmatore
tuo lavoro o che collaboreranno con te. Se Possono essere quindi delle persone o dei
lavorerai come programmatore in una Il programmatore si occupa della scrittura Fornitori
ruoli direttamente connessi, oppure no.
struttura più organizzata dovrai del software. Solitamente è specializzato A volte nei grandi progetti è necessario
collaborare con altre persone. Manager in un particolare linguaggio o su dei temi delegare la realizzazione di alcune parti di
All'interno di un'azienda ci può essere un particolari. Ci sono programmatori un progetto ad aziende esterne. Sempre
Sicurezza e collaborazione manager che ha richiesto e commissionato specializzati sui database o anche solo su più spesso si tende ad affidare la
Se sviluppi da solo lo fai sul tuo computer, il progetto e che quindi è direttamente un particolare database. Altri lavorano realizzazione di un software interamente
lavorando in una cartella. Dopo poco interessato al progetto. Il manager si esclusivamente con un singolo linguaggio. ad aziende esterne. La gestione di queste
tempo sentirai la necessità di salvare preoccupa fondamentalmente che il Le possibilità sono numerose. Il situazioni presenta maggiori
periodicamente il tuo lavoro. Il metodo più progetto rispetti tempi e costi e potrebbe programmatore prende le specifiche e le problematiche per il PM che deve fare i
semplice è quello di comprimere tutta la anche seguire più lavori traduce in linee di codice conti con vincoli contrattuali e numerosi
cartella di lavoro e magari salvarla, per contemporaneamente. Tester altri problemi che possono riflettersi sulla
sicurezza, su un disco rimovibile. A volte Cliente qualità del software realizzato.
puoi creare una copia del file su cui stai È la persona specializzata nel verificare
lavorando: "Ne salvo una copia così che se É il soggetto che finanzia la realizzazione che il software funzioni come da
qualcosa va storto ho l'ultima versione del software. Bisogna fare molta specifiche e si comporti correttamente.
funzionante". attenzione a non confonderlo con l'utente, Esiste realmente solo in grandi
soprattutto nella progettazione delle organizzazioni e spesso è un ruolo svolto
Questo è l'approccio casalingo al interazioni con il software. dagli stessi programmatori o da qualche
versionamento del software. I persona del team. È fortemente
programmatori professionisti utilizzano Utente
sconsigliato che sia lo stesso
degli strumenti specifici che servono per L'utente è la persona che dovrà utilizzare il programmatore che ha scritto il software
mantenere la storia del loro lavoro e per sistema e non è per forza il cliente, cioè a fare i test, perché conosce troppo bene
poter "tornare indietro" se qualcosa va colui che paga per il sistema. Se il cliente è la sua "creatura" per metterla veramente
storto. una società di trasporti che ha bisogno di alla prova! Per svolgere i test si utilizzano
I sistemi di versionamento facilitano la un App per fornire gli orari delle corse, il procedure manuali oppure sistemi
collaborazione di più persone sullo stesso cliente saranno i passeggeri. automatizzati.
progetto. Ne parleremo più avanti.
18
Compilatori e Interpreti
Esistono principalmente due tipi di comporre le parti grafiche). L'IDE A volte un programma è formato da più Java, Python, Visual Basic e .NET, ma
linguaggi di programmazione, quelli dovrebbe invece fornire in un unico posto moduli software e da delle librerie. Tutti questi ultimi adottano un sistema
compilati e quelli interpretati. In tutti gli strumenti necessari alla questi elementi devono essere collegati leggermente differente e ottimizzato: il
entrambi i casi il sorgente deve programmazione. tra di loro per produrre il programma codice sorgente di questi linguaggi non è
finale. propriamente interpretato, ma è
essere convertito in codici La scrittura del codice è solo il primo
compilato in un codice intermedio "ibrido"
comprensibili alla macchina. passo. Per creare il software vero e Lo strumento che effettua il collegamento
che sarà interpretato al momento
proprio è necessario utilizzare altri dei vari elementi si chiama linker. Il linker
Ti sei mai chiesto he strumenti servano dell'esecuzione del programma. Sono una
strumenti che convertano le istruzioni che può incorporare nel programma finale
per scrivere un programma? via di mezzo!
abbiamo scritto in un programma tutti gli elementi di cui ha bisogno. Il
Una volta si usavano delle schede eseguibile. programma avrà dimensioni maggiori e I programmi scritti con questi linguaggi
perforate o si dovevano creare dei sarà autonomo. In questo caso il utilizzano una virtual machine cioè uno
Tipi di linguaggi "collegamento" è di tipo statico. Se si strato software che offre al programma un
collegamenti elettrici tra alcuni contatti.
Erano i tempi in cui i computer Esistono due tipi principali di linguaggi di desidera un programma più snello, i ambiente standard e comune,
occupavano delle stanze intere. programmazione: compilati e interpretati. moduli di libreria sono tenuti all'esterno indipendente dall'hardware su cui si trova.
del programma risultante e il linking è Un programma di questo tipo può essere
Per scrivere del software serve un Un linguaggio compilato utilizza un
definito dinamico. eseguito più o meno indifferentemente su
semplice editor di testi. compilatore che legge le istruzioni e le
diversi tipi di computer.
converte in un codice direttamente
All'interno di un semplice documento di interpretabile dalla CPU e quindi in bit (il
testo si scrivono tutte le istruzioni che linguaggio macchina). La compilazione
compongono il programma. A volte è trasforma il codice sorgente in codice
necessario usare più di un file. oggetto. Alcuni esempi di linguaggi
Le istruzioni che si nel scrivono compilati sono: Pascal, COBOL, C e C++
documento seguono le regole del che producono file eseguibili (.exe o .com
particolare linguaggio utilizzato. su Windows).
Oggi è quasi normale trovare un
ambiente di sviluppo associato a ogni
linguaggio di programmazione. L'ambiente
Le stampanti 3D utilizzano un'interprete
di sviluppo è un programma che contiene
che legge i comandi e li trasforma in
l'editor di testi e semplifica la scrittura del
spostamenti della macchina.
software. L'ambiente di svilupo è anche
chiamato RAD o IDE. Un programma scritto in un linguaggio
interpretato deve essere letto da un
RAD sta per Rapid Application
interprete che legge le istruzioni una alla
Development, mentre IDE per
volta e le esegue "al volo". Linguaggi che
Integraterd Application Development. Il
utilizzano un interprete sono per esempio:
primo solitamente facilita la scrittura di
BASIC, PHP, Perl, JavaScript, Python.
programmi complessi, anche con l'aiuto di Un compilatore è simile a un macinacaffè
strumenti visuali (per esempio per Potremmo includere nell'elenco anche
che polverizza i chicchi e li trasforma.
19
Test e debug
Per controllare che un software si Il metodo più primitivo per controllare comportamenti, lo stato di questa JUnit si accompagna con altre librerie che
comporti esattamente nel modo in quello che accade durante il potrebbe variare. possono creare degli ambienti simulati, dei
cui è stato progettato si devono funzionamento di un programma è quello mock-up. Con i mockup si può far credere
Per automatizzare i controlli esistono
svolgere dei test. Quando ci soo di stampare o scrivere da qualche parte i al codice da testare che esistano dati e
degli speciali software che possono
valori delle variabili che ci interessano. sistemi, anche se in realtà sono simulati!
degli errori si possono trovare eseguire delle batterie di test in pochi
utilizzando un debugger. Facendo così il codice risulta sporco e secondi. Definire dei test automatici è un Per usare JUnit o librerie simili il codice
rallentato e spesso per pigrizia ci si lavoro simile alla programmazione: si deve essere ben scritto, a moduli
Non sempre i programmi funzionano al dimentica di rimuovere queste istruzioni devono scrivere programmi ad-hoc che indipendenti, così che ogni elemento sia
primo colpo e anche se hai pianificato e di stampa. Il risultato è un software ricreino un ambiente simulato in cui far isolabile.
semplificato il tuo lavoro, incorrerai "rumoroso" e poco professionale. girare parti del codice da provare. Non
sempre in errori. sempre è una cosa semplice, ma il compito TDD
I programmatori "seri" utilizzano i
Ci sono errori che sono individuabili è facilitato se il codice è ben scritto e Il Test Drive Development o Sviluppo per
debugger, degli speciali programmi che
immediatamente, perché di tipo sintattico. organizzato in moduli indipendenti. Il Test, è un particolare approccio allo
permettono di eseguire il software un
Dipendono dal fatto che hai scritto il passo alla volta, di interromperlo dove si processo per la verifica del codice si sviluppo del software che parte dai test. Il
codice in modo non corretto. Se utilizzi un chiama Unit Testing. programmatore inizia creando dei test che
desidera, inserendo un breakpoint, e di
IDE o un editor intelligente, sarà lui stesso sbirciare nelle variabili per vedere Degli speciali programmi possono descrivono quello che dovrà fare il modulo
a indicarti i problemi, a volte anche esattamente cosa sta accadendo. verificare anche il funzionamento di software che vuole realizzare.
mentre stai ancora scrivendo. interfacce grafiche, simulando le azioni Inizialmente, quando non ha ancora scritto
Vedremo più avanti qualche caso pratico. nessuna riga di codice, ma solo test, questi
degli utenti mentre inseriscono dati,
falliranno tutti. Il programmatore dovrà
Test cliccano link o premono pulsanti.
Solitamente queste verifiche si fanno allora cercare di correggere tutti i test che
Per stabilire se un certo software funziona falliscono, ottenendo, alla fine, il codice
manualmente, ma se diventano numerose
è necessario svolgere delle prove. I Test completo e funzionante.
In questa figura si vede come XCode, l'IDE e ripetitive potrebbe valere la pena
possono essere descritti nelle specifiche e
per scrivere programmi per mac, segnali la introdurre un sistema automatico. L'IDE
possono essere più o meno formali. Una
presenza di un problema con delle piccole Visual Studio di Microsoft include una
sessione di test rigorosi permette di
icone rosse e una freccia nel punto funzione per la creazione di test di questo
verificare con precisione che certe
incriminato. tipo. Selenium è un tool che si può usare
funzioni siano state realizzate
Altri errori si manifestano solo durante la per testare le applicazioni web
correttamente.
compilazione, solitamente per la (http://www.seleniumhq.org).
Verificare un modulo o una funzione può
mancanza di librerie o riferimenti. Ci sono Una famosa libreria in grado di svolgere
essere abbastanza semplice perché
errori che insorgono solo durante test automatizzati per Java è JUnit, ora
solitamente è possibile fornire dei dati in
l'esecuzione del software, anche in questo disponibile anche per molti altri linguaggi.
ingresso e quindi osservare il risultato
caso per il verificarsi di situazioni critiche Curiosità
prodotto. Non sempre la faccenda è così
o non previste. In questi casi è necessario
immediata: non è altrettanto semplice Si parla di debug, cioè di rimozione di cimici o scarafaggi perché
analizzare i dati presenti nelle variabili e
dimostrare il funzionamento di quando i computer funzionavano a valvole capitava spesso che si
seguire il flusso.
un'interfaccia grafica dove a seguito rompessero a causa di qualche piccolo insetto che si intrufolava nei
dell'inserimento di alcuni dati o di alcuni delicati circuiti e provocava dei corto-circuiti.

20
Struttura di un programma
Un programma si può rappresentare Non ci sono molte possibilità per Blocco Iniziale Blocco Finale
con uno schema a blocchi che combinare i blocchi: le principali
evidenzia il flusso e il configurazioni possibili (o pattern) sono
comportamento. Il flusso di un tre: sequenze, test e cicli.
programma si può ridurre a pochi
semplici casi. Questo è il blocco di partenza da cui parte il Se l'esecuzione ha un termine si aggiunge
flusso di esecuzione questo blocco.
I programmi sono equiparati a ricette di
cucina, ma raramente si comportano come
tali. Una ricetta presuppone una semplice
sequenza di operazioni che solitamente si Blocco di Controllo Blocco Lettura/Scrittura
svolgono in ordine, una dopo l'altra. Se i
programmi fossero realmente così ci si
potrebbe fare ben poco. A renderli più
utili sono l'introduzione di ripetizioni e la
possibilità di fare delle scelte, cioè di
valutare delle condizioni e prendere
delle decisioni che ne modificano il flusso.
Questo significa che un programma avrà
una struttura complessa, con ramificazioni
e anelli. All'interno del blocco si scrive l'espressione Per essere precisi, i blocchi che scambiano
da verifiacre. Sulle frecce in uscita si può informazioni con l'esterno, richiedono dei
I blocchi che hai individuato con le indicare la relativa condizione. dati in ingresso o qualche tipo di interazione,
tecniche appena presentate possono dovrebbero avere la forma di un
essere disegnati utilizzando dei semplici parallelogramma.
rettangoli collegati tra loro da delle linee o
delle frecce. Esiste una formalità per
questo tipo di rappresentazioni che Blocco Azione
presenterò, anche se personalmente di
solito ne utilizzo una versione semplificata
e personale. Nelle mie analisi uso
esclusivamente blocchi rettangolari e i
rombi "condizionali".
Per comporre un diagramma di flusso
disegna un blocco per ogni attività e
all'interno del blocco aggiungi un titolo o Un generico blocco di elaborazione ha la forma rettangolare.
una breve descrizione del suo Al suo interno scrivi l'elaborazione che vi si svolgerà.
funzionamento.

21
Sequenze
L'organizzazione più semplice che Per preparare un caffè devi:
può avere un lavoro è quella di una • scegliere il caffè,
sequenza di operazioni da svolgere
• caricare la caffettiera,
una dopo l'altra.
• accendere il gas,
Dopo aver suddiviso le attività necessarie Un blocco, un'operazione.
• porre la caffettiera sul fornello,
a svolgere un compito o a risolvere un
problema in micro compiti (task) puoi • attendere l'uscita del caffè,
delimitarle in modo preciso e definire un • versare il caffè nelle tazze.
ordine di esecuzione. Il processo di
esecuzione di un lavoro, passo dopo Prova a descrivere altre semplici sequenze
passo, è definito flusso. di lavoro.

Il modo più naturale di rappresentare una


Scrivi in modo chiaro e
sequenza di operazioni è utilizzando dei
semplice l'operazione da
blocchi che si susseguono uno dopo
svolgere.
l'altro.
Durante la definizione della sequenza ti
concentrerai su un'operazione alla volta e
le cose risulteranno più semplici. Il flusso di esecuzione
All'interno di un blocco scrivi in modo passa da un blocco all'altro.
chiaro e semplice l'operazione da
svolgere.
Ricorda: una sola operazione per ogni
blocco.
Descrivi l'operazione in modo sintetico,
ma se ti serve maggiore spazio, crea un
blocco più grande!
Suddividere il lavoro in questo modo è
abbastanza naturale perché di solito
riusciamo a compiere «bene» una sola
attività per volta. Ti comporti così ogni
volta che cucini qualcosa seguendo una
ricetta passo per passo, eseguendo le
operazioni indicate nell'ordine in cui sono
presentate.

22
Test
Raramente un programma "minore" (<), anche combinati con il segno
interessante presenta delle di uguale: “se x è maggiore di 10 allora...”.
esecuzioni lineari. Per modificare il Se una condizione “semplice” non basta se
flusso al verificasi di certe ne possono combinare diverse: “se piove E
condizioni si utilizzano i blocchi di devo uscire, allora...”. Il flusso prenderà una delle
controllo. due strade di uscita.
Per combinare delle condizioni (il termine
corretto sarebbe “predicato”) si usano
In una sequenza di operazioni è
degli operatori logici. Un operatore serve
importante poter modificare il flusso di
per combinare il valore di alcune variabili e
esecuzione quando si verificano certe Nel rombo descrivi il test
restituire un risultato. Gli operatori logici
condizioni. Il flusso del programma si da effettuare.
più usati sono:
ramificherà e sarà possibile prendere
decisioni a seconda di quello che accade. • E – richiede che due condizioni siano
entrambi vere per restituire il valore
I test valutano sempre se una certa
“vero”.
“dichiarazione” è vera o falsa ed anche se
questo sembra cosa da poco, permette di • O – restituisce “vero” se almeno una
verificare qualsiasi condizione. delle due condizioni è vera.
I linguaggi di programmazione ti • NON – nega il valore di una condizione. SI
permettono di controllare se una variabile Nei tuoi diagrammi puoi disegnare un
è vera o falsa e quindi: blocco in cui scrivere il tipo di test da
• di attivare un'azione – “se x è vera, allora compiere. Il blocco sarà fornito di due o
fai questo”; più frecce di uscita, a seconda dei test che
eseguirà.
• di scegliere tra due alternative - “se x è
vera, allora fai questo, altrimenti fai Il flusso d'esecuzione uscirà da una sola
quello”; delle frecce.
• di scegliere tra numerose alternative. Sulle frecce in uscita puoi scrivere la NO
condizione che la attiva.
L'oggetto di un test può essere una
variabile (cioè il contenitore di un dato)
che contiene il valore vero o falso, oppure Indica sulle frecce di uscita
un'espressione da valutare che restituirà la condizione associata.
un valore vero o falso.
Puoi verificare se una certa variabile è
pari a un valore preciso: “se x vale 10
allora...”.
Si possono usare i simboli "maggiore" (>) e

23
Ripetizioni
L'utilità di un computer sta nel fatto lavora con un ciclo dove la prima
di poter ripetere delle operazioni istruzione “mette in pausa” l'esecuzione Il flusso ritorna all'inizio
senza stancarsi mai. Le operazioni fino a che non arriva la richiesta di un della sequenza.
ripetute formano un ciclo. È per nuovo visitatore.
questo che sono nati i computer! La condizione per interrompere il ciclo si
trova solitamente all'inizio o alla fine della
Questo pattern è formato da una sequenza ripetuta. A volte è possibile
composizione di più blocchi. La peculiarità anche trovare delle interruzioni poste
sta nel fatto che il flusso crea un anello. all'interno del ciclo. Di solito queste si
L'esecuzione a un certo punto salterà attivano al verificarsi di casi particolari.
"indietro" per ripetere alcuni blocchi.
Ci sono cicli che si ripetono all'infinito,
Per rappresentare un ciclo di operazioni altri che ciclano un numero predefinito di
puoi usare una freccia che parte volte ed altri ancora che "girano" fino
dall'ultimo blocco e punta al primo. all'occorrenza. Ogni linguaggio di
Raramente un ciclo si ripete all'infinito, programmazione adotta dei costrutti simili
per questo di solito si aggiunge un test per implementare queste situazioni.
che interrompe le ripetizioni dopo un
certo numero di iterazioni o al verificarsi
di una certa condizione.
La cassiera di un supermercato lavora
ciclicamente:
• attende un cliente,
• passa gli articoli sulla cassa,
• controlla il totale,
• prende i soldi e restituisce l'eventuale
resto,
• si rimette in attesa.
In questa sequenza, l'operazione al primo
passo mette in attesa la cassiera (e quindi
il suo ciclo di esecuzione) fino a che non si
verifica un evento particolare: l'arrivo di La condizione di "fine ciclo"
un cliente. può trovarsi all'inizio o alla
fine della sequenza.
Anche molti programmi fanno così. Un
server web che pubblica pagine web

24
Esempio: pari o dispari?
Come è possibile capire se un capire se un numero è pari o dispari.
numero è pari o dispari utilizzando Prima di tutto devi ricevere un numero. Lo
un semplice programma? puoi richiedere utilizzando il blocco a
Scopriamolo disegnando un primo forma di parallelepipedo viola.
diagramma a blocchi completo. La seconda operazione è quella di
calcolare il modulo 2 del numero ricevuto.
Individuare un numero pari è molto
Il risultato sarà 0 o 1.
semplice, tanto che lo si capisce al volo,
senza neppure pensarci. É sufficiente Con un blocco di test verifichi se il resto
controllare se finisce per 0, 2, 4, 6, 8. La vale 0 o 1 e quindi dirotti il flusso di
regola più corretta sarebbe quella di esecuzione da una parte o dall'altra.
verificare se è divisibile per 2. Se il resto calcolato vale 0 allora vai verso
Il modulo il blocco che stampa a video il messaggio
"pari".
Per noi è semplice effettuare questi
controlli, ma per una macchina? I Se il resto vale 1 allora vai verso il bloccho
computer dispongono di una speciale che stampa a video il messaggio "dispari".
operazione, chiamata modulo che Gli ultimi due blocchi di "stampa"
permette di verificare il resto della terminano la loro corsa nel blocco di fine
divisione per un certo numero. programma. Per comodità ne è stato
L'operatore modulo si indica a volte con il usato uno solo dove confluiscono tutti i
segno % oppure con mod. flussi "finali".

Ecco alcuni esempi:


10 % 2 = 0
7%2=1
Il primo significa: "se dividessi 10 per 2,
quale sarebbe il resto? 0". Analogamente
per il secondo, doive il resto però sarebbe
1.
Con il modulo è facile capire se un numero
è pari o dispari, basta verificare se il suo
resto vale 0 o 1 quando lo si divide per 2.
Lo schema a blocchi
Prova a immaginare la sequenza di
operazioni che dovresti compiere per
Esempio: ordinare dei numeri
In questo esercizio proviamo posto. Il nostro array iniziale: Ora abbiamo 15 e 20, ma 20 è maggiore di
insieme ad ordinare una serie di 15, quindi ci fermiamo e ricominciamo da
numeri e a disegnare il diagramma a capo. Questa volta faremo un giro a vuoto
blocchi del programma di perché 1 < 7 e quindi non faccio scambi, 7
< 15 e 15 < 20. La lista è ordinata.
ordinamento. diventerà così:
Per essere sicuri di averla ordinata, nel
Il problema: ordinare una lista di caso peggiore, con una lista di N elementi
numeri. sono necessari N-1 passaggi. Con la
nostra lista servono quindi 3 passaggi.
Prima di tutto: cosa si intende con "una Il 15 e il 20 si sono scambiati di posto e il Questo metodo di ordinamento si chiama
lista di numeri"? Una lista di numeri è un 20 sembra quindi "scorrere" verso destra. "Bubble Sort".
elenco ordinato di numeri. Nel linguaggio Ora consideriamo sempre il numero 20,
comune li rappresenteremmo come dei che ora è in seconda posizione e Lo schema a blocchi
numeri separati da virgola. Per esempio*: confrontiamolo con il numero alla sua Proviamo ora a tracciare lo schema a
destra: 1. Se 1 è minore di 20, li blocchi del programma necessario per
20,15,1,7
scambiamo di posto. l'ordinamento dei numeri. Dopo il blocco
In informatica una lista di questo tipo si
di partenza è necessario fornire una lista
definisce un array (ne parleremo più
di numeri. Per questo si usa il blocco di
avanti). Un array è una specie di
colore viola.
rastrelliera a cui può essere assegnato un
nome e dove ogni elemento ha il suo Ripetiamo il confronto un'ultima volta: Per scorrere la lista e ricordarci la
posto. Per riferirmi a un preciso elemento 20 > 7 e quindi li scambiamo ancora. Ora il posizione ci serve un "segnaposto" che
posso indicare la sua posizione all'interno numero 20 sarà finito in ultima posizione. chiamiamo "i" e a cui assegnamo il valore
dell'array. Se decidiamo di chiamare il iniziale "0".
nostro array semplicemente "lista", Quindi dobbiamo prendere la prima cifra
l'elemento al primo posto sarà quello alla della lista pos(i) e quella successiva
posizione "0". In informatica gli "indici" pos(i+1). Pos() è una notazione che ho
partono sempre da "0" e non da "1". Ora ricominceremo da capo. Il primo
numero è 15, che è maggiore di 1. inventato per dire "prendo il numero della
Quindi: Scambiamoli di posto e proseguiamo. lista alla posizione i". Quindi:
lista(0) conterrà 20, pos(i) > pos(i+1)
lista(1) conterrà 15... sostituendo a i il suo valore attuale:
Una volta capito cos'è una lista di numeri è Al passo successivo troviamo 15 e 7 e li pos(0) > pos(1)
necessario capire come ordinarli. Essitono scambiamo di posto. cioè:
varie possibilità. Potremmo per esempio
prendere il primo numero della lista e 20 > 15
confrontarlo con il successivo. Se il Dobbiamo quindi uscire dalla diramazione
successivo è minore, allora li scambiamo di "SI" del rombo.
(*) Se te li giochi al Lotto e vinci pretendo una percentuale per la soffiata che ti ho dato!
26
Nel caso la condizione del primo rombo Quasi in ordine
non sia verificata, si salta lo "scambio" e si
Abbiamo fatto un buon lavoro ma non ci
passa al blocco dell'incremento dell'indice.
siamo ancora. In questa ultima variante
che abbiamo creato non c'è modo di
terminare l'esecuzione del programma.
Per terminare il lavoro è necessario
Il blocco successivo ci ricorda di
inserire una condizione di termine che
incrementare il nostro indice che ora
spezzi l'ultimo ciclo che abbiamo
passerà da 0 a 1.
introdotto.
L'ultimo rombo verifica se siamo arrivati
Subito dopo aver incrementato il valore
alla fine della lista. Se non siamo in fondo,
dell'indice del ciclo aggiungiamo un rombo
si torna al "rombo del confronto".
di controllo e se il valore dell'indice è pari
Nel caso la condizione del primo rombo alla lunghezza della lista terminiamo il
non sia verificata, si salta lo "scambio" e si programma, altrimenti ripartiamo.
passa al blocco dell'incremento dell'indice.
Ora il programma sembra essere
completo. Trovi lo schema a blocchi nella
Aggiungere altre scansioni pagina successiva.
Fino ad ora abbiamo realizzato una sola La prova
passata. come fare per aggiungere una
Come si può provare se la soluzione
seconda scansione?
trovata funziona? Ti bastano un foglio di
Per tenere traccia delle scansioni serve un carta e una matita! Devi fingere di essere
secondo indice che chiameremo "ciclo". Va un computer ed eseguire tutti i passaggi
creato all'inizio della sequenza. annotando il valore gegli indici e lo sttao
Nel rombo che verifica se l'indice è della lista di numeri. Proviamo?
arrivato in fondo dobbiamo aggiungere il 1. START
ramo d'uscita "SI". Quando saremo arrivati
2. inserisci la lista 20,15,1,7
all'ultimo confronto passeremo al blocco
che si occuperà di aumentare il valore 3. ciclo = 0
dell'indice del ciclo per poi tornare 4. i = 0
all'inizio della sequenza di blocchi che si
occupa della "lavorazione" della sequenza 5. pos(i) > pos (i+1)?
di numeri. cioè:
pos(0) > pos (1)?
cioè:

27
20 > 15? SÌ, allora...
6. scambia di posto i numeri e la nuova
lista diventa:
15, 20, 1, 7
7. incrementa il valore di i:
i=1
8. siamo in fondo? NO, quindi vado a
confrontare la prossima coppia di numeri.
9. pos(1)> pos(2)? 20 > 1? SÌ
10. 15, 1, 20, 7
11. i = 2
12. la lista è finita? NO
13. 20 > 7? SI
14. 15, 1, 7, 20
15. i = 3
16. la lista è finita? SI
17. ora si deve incrementare ciclo:
ciclo = 1
18. ecc ecc...

28
Se la soluzione funziona è possibile trasformarla in un listato. L'operazione non è immediata e richiede qualche accorgimento e un po' di esperienza. Ci arriveremo presto. Nelle
figure riportate in questa pagina puoi vedere quale potrebbe essere l'aspetto del programma per l'ordinamento scritto in Python e cosa accade quando il programma viene
eseguito. Non preoccuparti se le cose ti sembrano oscure, presto tutto sarà chiaro.

29
Linguaggi
I limiti del mio linguaggio costituiscono i limiti
del mio mondo. Tutto ciò che io conosco è ciò
per cui ho delle parole.
Ludwig Wittgenstein
Parte3
Parte 4

Potrebbero piacerti anche