Contenuto principale
Programmazione
Corso: Programmazione > Unità 1
Lesson 17: Diventare un programmatore migliorePianificare un progetto di programmazione
Per diventare un programmatore non basta imparare la sintassi e i concetti di un linguaggio di programmazione: si tratta di capire come usare queste conoscenze per creare i programmi. Hai creato un bel po' di programmi in questo corso, nelle sfide e nei progetti, ma ora dovresti iniziare a usare le tue idee per i nuovi programmi - idee di cui tu stesso sei davvero entusiasta - e cercare di trasformarle in programmi veri.
Probabilmente non saprai tutto quello che ti serve per il tuo programma quando inizierai, e va benissimo così: sarai motivato a imparare cose nuove perché desideri rendere reale il tuo programma. I programmatori imparano continuamente cose nuove per i nuovi progetti, ed è anche per questo che amiamo così tanto quello che facciamo.
Diamo un'occhiata al procedimento di pianificazione di un progetto di programmazione:
1. Cosa vuoi fare?
Quando ho iniziato a programmare, pensavo costantemente a nuovi programmi da fare e li scrivevo in una lista. Ero dipendente dal potere della creazione e in testa avevo un sacco di idee da realizzare. Se sei così, allora probabilmente hai già un'idea di cosa vuoi fare e forse hai già una tua lista
Se non hai già un'idea, allora qui ci sono alcune domande per aiutarti nel brainstorming:
- Qual è il tuo gioco preferito? Un gioco arcade, un gioco da tavolo, un gioco di sport? Potresti crearne una versione digitale, magari semplificata? Potresti personalizzarlo un po', ad esempio cambiarne il tema o i personaggi principali?
- Quali sono le tue materie preferite? Se ami l'arte, che ne dici di un programma per disegnare? Se ami la storia, che ne pensi di una linea del tempo interattiva? Se ti piace la scienza, che ne dici di una simulazione scientifica?
- Qual è il tuo film o il tuo programma TV preferito? Potresti creare una versione digitale di una scena o di un personaggio, che ne pensi? O forse un gioco basato su di esso?
- Qual è il tuo gadget o portafortuna preferito? Che ne dici di ricrearlo al computer?
Una volta che avrai scelto un'idea, dovresti scrivere una descrizione di essa. Ad esempio, se ho deciso di fare un clone di "Breakout", perché questo è il mio gioco retro arcade preferito, potrei scrivere:
Breakout: un gioco in cui controlli una racchetta nella parte inferiore dello schermo, e la usi per colpire una balla e mandarla verso l'alto a diversi angoli per rompere dei mattoni. L'obiettivo è rompere tutti i mattoni, ed evitare che la palla tocchi terra troppe volte.
Sistemerai la descrizione più tardi, ma per ora è sufficiente a darti abbastanza idee per indirizzarti nel processo di pianificazione.
2. Quale tecnologia userai?
In questo passaggio devi pensare a quali tecnologie (linguaggi/librerie/ambienti) già conosci o puoi imparare facilmente, e quali tra tutte sono le più adatte al tuo scopo. Per molte persone, questa lista potrebbe avere un solo elemento, "1. JS+ProcessingJS", e questo rende facile la decisione.
Il nostro ambiente per JS+ProcessingJS funziona benissimo per creare animazioni, giochi, visualizzazioni e simulazioni. Controlla i programmi della community per vedere che tipo di programmi creano gli altri.
Il nostro ambiente non funziona per altre cose come giochi multi-player, mobile apps, applicazioni per l'elaborazione di dati. Se conosci altri linguaggi/ambienti (come JS+HTML, Python, SCRATCH, Swift, ecc) e stai pensando di creare qualcosa che non ha molto senso con ProcessingJS, allora rifletti su quale tecnologia sarebbe più adatta al tuo programma. Se vuoi costruire queste cose ma non conosci altre tecnologie, forse sarebbe meglio trovare una nuova idea per un programma. Ovviamente puoi imparare una nuova tecnologia per un nuovo progetto, ma, soprattutto se hai appena iniziato a programmare, sarebbe una buona idea diventare prima molto bravo nel tuo primo linguaggio di programmazione.
Se avessi deciso di creare un gioco come Breakout, sceglierei JS+ProcessingJS, dato che conosco già questa tecnologia e funziona molto bene per i giochi 2D di questo tipo.
3. Quali funzionalità includerà?
Ecco dove inizia la pianificazione vera e propria, e dove (almeno secondo me) inizia il divertimento. Il tuo obiettivo in questo passaggio è capire cosa stai facendo davvero: come apparirà, quali funzionalità includerà, quali funzionalità non includerà.
La prima cosa che puoi fare è creare un "mock-up" , cioè un bozzetto o uno schizzo che mostri il risultato di ciò che stai facendo, ma senza dettagli come colori o dimensioni esatte. Puoi creare il mock-up su un foglio di carta o con alcuni programmi online:
Per darti un'idea di come appaino i mock-up, qui sotto trovi i mock-up del mio clone di Breakout. Ho fatto uno schizzo per ciascuna scena separatamente e ho disegnato le frecce per mostrare i collegamenti una scena e un'altra. Queste frecce mi aiuteranno a capire quale logica mi serve nel mio programma per passare da uno stato all'altro.
Ora puoi usare questi mock-up per aiutarti a creare un elenco di funzionalità, per poter pensare a ciascuna funzionalità del tuo programma e scriverla ordinatamente in una lista.
Per il mio clone di Breakout, questa potrebbe essere la lista di funzionalità, divisa in base alle scene:
Scena di gioco
- Racchetta controllata dall'utente
- Molti mattoncini colorati
- Movimento ad angolo della palla
- Riconoscimento delle collisioni
- Mostrare la vita
- Mostrare il punteggio
- Effetti sonori
Scena principale
- Pulsante Play
- Pulsante Help
Scena Help
- Testo
- Pulsante Indietro
Scena di vittoria
- Titolo
- Animazione con fuochi d'artificio
Scena della sconfitta
- Testo
- Pulsante Restart
4. Ma quali funzionalità deve includere?
Se avessimo un tempo infinito per creare tutti i programmi nella nostra testa, allora includeremmo ogni caratteristica nella nostra lista. Ma non + così, perciò in questo passaggio dovrai decidere quali caratteristiche sono più importanti e quali caratteristiche aggiungerai solo se avrai tempo. Questo ti aiuterà anche a capire in quale ordine implementare le funzionalità, dalla più importante alla meno importante.
Per aiutarti a capire l'importanza di ogni caratteristica, fatti queste domande:
- Se lo condividessi con un amico, quali caratteristiche vorrei assicurarmi che funzionino?
- Quali caratteristiche mi entusiasma di più sviluppare?
- Quali caratteristiche nel mio programma sono le più particolari?
- Quali caratteristiche apprenderò maggiormente nella sua implementazione?
- Ci sono caratteristiche che sembrano richiedere un livello di abilità molto più alto rispetto al mio?
Poi torna al tuo elenco di funzionalità dell'ultimo passaggi e riordina la lista o aggiungi un punteggio di importanza a ciascuna funzionalità.
Per la lista di funzionalità del mio clone di Breakout, ho scritto "P1", "P2", e "P3" vicino alle funzionalità, per indicare priorità massima (P1), priorità intermedia (P2), priorità più bassa (P3). Ho deciso di dare più priorità alle meccaniche di gioco rispetto alle caratteristiche generali come le scene, perché trovo che questa sia la parte più entusiasmante del progetto:
(P1) Scena di gioco
- (P1) Racchetta controllata dall'utente
- (P1) Molti mattoncini colorati
- (P1) Movimento ad angolo della palla
- (P1) Riconoscimento delle collisioni
- (P2) Mostrare la vita
- (P2) Mostrare il punteggio
- (P3) Effetti sonori
(P2) Scena principale
- (P2) Pulsante Play
- (P3) Pulsante Help
(P3) Scena Help
- (P3) Testo
- (P3) Pulsante Indietro
(P2) Scena di vittoria
- (P2) Titolo
- (P3) Animazione con fuochi d'artificio
(P2) Scena della sconfitta
- (P2) Testo
- (P3) Pulsante Restart
Come suggerimento generale per quando crei giochi, ecco le caratteristiche che consiglio di lasciare per un secondo momento: menu, livelli multipli, grafica 3D. Concentrati su ciò che è unico e divertente del tuo gioco, e poi aggiungi gli extra.
Puoi anche trasformare la tua lista di priorità in versioni del progetto, in modo da poter vedere con facilità cosa hai bisogno di implementare in ogni versione, e potrai sempre fermarti dopo una particolare versione ed essere soddisfatto del risultato ottenuto.
Ecco come sarebbero le versioni per il mio clone di Breakout:
V1
- Racchetta controllata dall'utente
- Molti mattoncini colorati
- Movimento ad angolo della palla
- Riconoscimento delle collisioni
V2
- Mostrare la vita
- Mostrare il punteggio
- Scena di inizio con pulsante play
- Scena della vittoria con titolo
V3
- Effetti sonori
- Pulsante Help
- Fuochi d'artificio
- Scena della sconfitta con pulsante Restart
5. Come lo implementerai?
Ora hai un'idea di quali funzionalità costruirai per prime nel tuo programma, ma se inizi adesso ti troverai a fissare un programma completamente vuoto, senza codice scritto, e questo potrebbe metterti ansia. Quali variabili dovresti scrivere per prime? Quali funzioni?
Un modo per capirlo è pensare all'"architettura di alto livello" del tuo programma - suddividerlo in categorie come "oggetti", "logica", "interazioni con l'utente", "dati dell'utente" e "scene" - e infine riflettere su come implementarle, ad esempio come tipi di oggetto orientati agli oggetti, funzioni o variabili.
Ad esempio, ecco un'architettura per il mio clone di Breakout:
Oggetti
Brick
(.isHit()
)Paddle
(.move()
)Ball
(.move()
)
Scene
- Inizio
- Gioco
- Fine
Logica
- Collisione tra palla e mattoncino (
function
, use bounding box) - Angolo racchetta-palla (
function
, invert angle)
Interazione con l'utente
- Movimento della racchetta tramite tastiera (
keyPressed
) - Pulsanti per i cambi di scena (
mouseClicked
)
Dati dell'utente
- Morte della palla (
array)
- Palla a segno (
array
)
Una volta che avrai pensato all'architettura di alto livello, dovrebbe diventare più chiaro da cosa puoi iniziare a programmare.
Puoi decidere di scrivere il tuo intero programma prima in pseudo-codice, di cui parleremo più avanti in questo tutorial. Fondamentalmente significa scrivere l'intero programma come normale testo italiano o inglese all'interno di un commento e poi piano piano trasformarlo in vero codice.
6. Quale sarà la tua tabella di marcia?
Quanto tempo hai per creare questo programma? Quante settimane e quanto tempo ogni giorno? Quali funzionalità scriverai ciascuna settimana? Il tuo obiettivo in questo passaggio è mettere a punto una tabella di marcia per il tuo progetto, cosa particolarmente importante se hai una scadenza, ma utile anche per iniziare a capire quanto tempo impieghi per scrivere un programma.
Ecco la tabella di marcia per il mio clone di Breakout, ipotizzando 2-4 ore di lavoro a settimana:
- Settimana 1: Design e pseudo-codice
- Settimana 2: Grafica approssimative
- Settimana 3: Meccaniche per movimento e collisione della palla
- Settimana 4: Meccaniche per il punteggio
- Settimana 5: Scene (Inizio/Vittoria/Sconfitta)
- Settimana 6: Rifiniture, test manuale (QA), preparazione per la demo
Impostare le tabelle di marcia per i progetti di programmazione è difficile. Alcune cose che sembrano facili prenderanno molto più tempo del previsto (ad esempio, qualche strano bug che passerai ore a risolvere), alcune cose che sembrano difficili occuperanno meno tempo di quanto ci si aspetta. Come regola generale, supponi che ci vorrà più tempo di quanto pensi e aggiusta la tabella di marcia durante il percorso.
Sei pronto!?
Si spera che con questo tu abbia un'idea sul procedimento di pianificazione di un progetto di programmazione, e che ora ti senta ispirato ad iniziare un progetto. A seconda di quello che vuoi costruire, puoi anche decidere di seguire prima altri corsi, come JS Avanzato: Giochi e Grafica o JS Avanzato: Simulazioni Naturali, in modo da avere più idee per la creazione di giochi e simulazioni.
La cosa importante è assicurarsi di iniziare a creare i propri programmi a un certo punto, perché è così che imparerai davvero e che otterrai anche la maggior soddisfazione nel programmare, perché starai trasformando i tuoi sogni in realtà.
Vuoi unirti alla conversazione?
Ancora nessun post.