Se lavorate nella programmazione, sapete bene che scrivere codice può spesso essere un processo che richiede tempo ed è costellato di errori. Capire come far fare al vostro programma o alla vostra applicazione web quello che volete e poi spiegarlo ad altre persone, come il vostro team o i vostri azionisti, può essere tanto frustrante quanto soddisfacente.
È qui che entra in gioco lo pseudocodice.
Lo pseudocodice è un modo di rappresentare il codice utilizzando una combinazione di linguaggio semplice e naturale ed elementi del linguaggio di programmazione. Sia che siate agli inizi nel mondo della programmazione o che siate professionisti esperti, la comprensione dello pseudocodice è un trucco che vi fa risparmiare tempo e che potete integrare nel vostro processo in qualsiasi momento.
In questo articolo approfondiremo cos’è lo pseudocodice, come si usa e perché è uno strumento essenziale per chi sviluppa.
Approfondiamo subito.
Cos’è lo Pseudocodice?
Lo pseudocodice è un modo di rappresentare il codice, come algoritmi, funzioni e altri processi, utilizzando una combinazione di elementi del linguaggio naturale e del linguaggio di programmazione.
Si chiama “pseudocodice” perché non è effettivamente eseguibile. Si tratta invece di un modo per gli esseri umani di comprendere e pianificare la logica della codifica, ovvero di descrivere i passaggi di un programma in un modo facile da comprendere per gli esseri umani, pur essendo abbastanza dettagliato da poter essere convertito rapidamente in un linguaggio di programmazione specifico.
Ecco un semplice esempio di pseudocodice, in cui stiamo elaborando la logica di base per salutare una persona con il suo nome quando accede al nostro sito o alla nostra applicazione:
PROCESS GreetUser
INPUT userName
DISPLAY "Hello, " + userName + "!"
END
Come potete vedere, lo pseudocodice qui sopra non è scritto con la sintassi di un vero e proprio linguaggio o framework. Al contrario, usa elementi di linguaggio e di programmazione semplici e universalmente comprensibili, come PROCESS
, DISPLAY
e +
, per sostituirli alla sintassi e renderli facilmente comprensibili a chiunque.
Questo è uno dei vantaggi di scrivere pseudocodice: Se le intenzioni del codice sono espresse in una sintassi comune, potete saltare tutte le barriere linguistiche legate alla programmazione e alle competenze tecniche. Ne parleremo meglio nella prossima sezione.
Vantaggi della Scrittura di Pseudocodice
Uno dei principali vantaggi dello pseudocodice è che permette a chi sviluppa di abbozzare il codice senza impantanarsi nella sintassi e nella struttura di un linguaggio specifico. In questo modo è più facile individuare gli errori nella logica di un programma o di una funzione, senza dover scrivere o eseguire il debug del codice vero e proprio.
Inoltre, lo pseudocodice può essere facilmente adattato a diversi linguaggi di programmazione, il che lo rende uno strumento utile per coloro che hanno familiarità con più linguaggi e hanno bisogno di tradurre le loro idee tra di loro. Immaginate di poter spiegare il vostro script Node.js a uno sviluppatore Laravel! Questo può essere particolarmente utile per i team che lavorano insieme a un progetto, in quanto lo pseudocodice può essere utilizzato come linguaggio comune per comunicare idee e funzioni.
Ecco i principali vantaggi che lo pseudocodice può apportare a sviluppatrici e sviluppatori, sia principianti che con esperienza:
- Miglioramento dell’efficienza: Scrivendo le fasi di un processo in pseudocodice, potete risparmiare tempo pianificando il vostro codice prima di immergervi nei dettagli o nella sintassi di uno specifico linguaggio di programmazione. Questo può aiutarvi a evitare errori e a ridurre la necessità di debug.
- Più facile da leggere: Poiché lo pseudocodice è scritto in modo abbastanza semplice da essere compreso da chiunque, rende più facile la lettura e la comprensione del codice, soprattutto se lavorate in un team o se dovete rivedere un vecchio codice.
- Maggiore flessibilità: Poiché lo pseudocodice non è legato a un linguaggio di programmazione specifico, può essere facilmente adattato a diversi linguaggi. Questo lo rende uno strumento utile per chi conosce più linguaggi e ha bisogno di tradurre le loro idee dall’uno all’altro.
- Miglioramento della collaborazione: Lo pseudocodice può usare un linguaggio comune per un team di sviluppo che comunica e collabora a uno stesso progetto. Questo può essere particolarmente utile per i team che lavorano insieme a un progetto, in quanto lo pseudocodice permette di comunicare le idee in modo chiaro e conciso.
- Gestione locale: Poiché non è eseguibile, il vostro pseudocodice non dovrà essere ospitato online o collegato a script esterni come farebbe un’app a tutti gli effetti. Può essere creato e salvato in un file sul vostro computer locale, in un file Cloud o addirittura copiato in un’email.
Inoltre, scrivere pseudocodice è facile da implementare in qualsiasi fase del processo di sviluppo. Anche se non l’avete mai usato prima, potete iniziare subito – indipendentemente dal punto in cui vi trovate nel vostro percorso di codifica – e ottenere immediatamente i vantaggi descritti sopra.
Casi d’Uso Comuni dello Pseudocodice
Grazie alla flessibilità intrinseca dello pseudocodice, ci sono molti usi possibili, anche al di fuori della programmazione.
Ecco alcuni casi d’uso comuni utili a chi si occupa di sviluppo:
- Pianificazione e progettazione di processi: Lo pseudocodice può essere utilizzato per pianificare le fasi di un processo, di una funzione o di un algoritmo, consentendo a chi sviluppa di riflettere sulla logica e di assicurarsi che sia corretta prima di implementarla in un linguaggio di programmazione specifico.
- Comunicare idee agli stakeholder non tecnici: Lo pseudocodice può essere usato per spiegare chiaramente le fasi di un processo o di un algoritmo agli stakeholder non tecnici, come i project manager o i clienti, in modo che possano afferrare facilmente il concetto.
- Collaborazione con un team: Lo pseudocodice può essere utilizzato come linguaggio comune da un team di developer per comunicare e collaborare a un progetto, indipendentemente dalle loro competenze individuali di programmazione.
- Adattare il codice a diversi linguaggi di programmazione: Poiché lo pseudocodice non è legato a un particolare linguaggio di programmazione o di scripting, può essere adattato e tradotto in modo semplice e veloce in diversi linguaggi. Questo è particolarmente utile per chi lavora con più linguaggi.
- Insegnamento dei concetti di programmazione: Lo pseudocodice può essere uno strumento utile per insegnare i fondamenti della programmazione, in quanto permette agli studenti di concentrarsi sulla logica e sulla struttura di un programma senza impantanarsi nella sintassi.
Questi sono solo alcuni esempi ma ne esistono molti altri. Le possibilità di implementare lo pseudocodice a vostro vantaggio sono praticamente infinite.
Come Scrivere lo Pseudocodice
Non esiste un modo corretto di scrivere pseudocodice. La mancanza di una sintassi specifica, cosa che lo rende così flessibile, è proprio la stessa che gli impedisce di avere regole sintattiche particolari.
Sebbene alcuni linguaggi come il Pascal e il Basic offrano linee guida specifiche per la sintassi dello pseudocodice, in realtà potete scrivere pseudocodice utilizzando qualsiasi terminologia, a patto che i vostri termini siano di uso comune e che la logica sia comprensibile.
Detto questo, ci sono alcuni passaggi e linee guida di base per lo pseudocodice a cui la maggior parte degli sviluppatori si attiene. Le approfondiremo qui di seguito.
Passi per Scrivere Pseudocodice
Ecco alcuni passi generali che potete seguire per scrivere un buon pseudocodice:
- Aprite il vostro editor di testo: Il più delle volte lo pseudocodice viene scritto in un editor di testo o HTML, potete scegliere il vostro preferito e aprire un nuovo file.
- Definite il vostro obiettivo: Determinate lo scopo del vostro programma o della vostra funzione. Cosa volete che faccia?
- Separate il problema in parti: Suddividete il problema in parti più piccole e gestibili. Questo vi aiuterà a pensare al problema in modo più chiaro e renderà più facile organizzare i pezzi in modo che funzionino dove e quando devono.
- Organizzatelo in passaggi: Scrivete i passaggi del vostro programma in ordine logico. Usate un linguaggio naturale ed evitate di usare costrutti o metodi di programmazione specifici come le strutture di controllo o il type casting.
- Indentate le righe: Usate l’indentazione per mostrare la struttura del vostro programma. Per esempio, potete indentare le righe di codice che appartengono a un ciclo.
- Testatelo: Testate il vostro pseudocodice per assicurarvi che sia chiaro e logico. Potete farlo leggendolo a voce alta o chiedendo a qualcun altro di leggerlo e di dirvi cosa pensa debba fare lo pseudocodice.
Una volta scritto lo pseudocodice, dovrete tradurlo in uno script eseguibile. Potete esercitarvi al di fuori dei vostri progetti contribuendo ai repository Git open-source, accettando sfide di codice e ponendo/rispondendo a domande su StackOverflow o all’interno della vostra comunità di sviluppo.
Costrutti di Pseudocodice
Nonostante lo pseudocodice non abbia una sintassi definita, ci sono diversi costrutti di programmazione comuni che sviluppatrici e sviluppatori utilizzano spesso quando scrivono pseudocodice. Diamo un’occhiata a ciascuno di essi.
Sequenze
Una sequenza è un gruppo di istruzioni che vengono eseguite in un ordine specifico. Si usano per eseguire o ripetere una serie di azioni semplici. Alcuni comandi di sequenza comunemente utilizzati nello pseudocodice sono INPUT
, SET
, PRINT
, READ
, DISPLAY
, SHOW
e CALCULATE
.
Ecco un esempio di pseudocodice che utilizza alcuni di questi comandi:
PROCESS CalculateCost
INPUT price, quantity
SET cost = price * quantity
PRINT "The cost is: " + cost
END
Questo pseudocodice definisce un processo chiamato CalculateCost che riceve un prezzo e una quantità, li moltiplica per calcolare il costo e poi visualizza il risultato.
Condizioni
Gli enunciati condizionali permettono a un programma di prendere decisioni basate su determinate condizioni, quindi dirigono il programma a eseguire determinati enunciati se una condizione è soddisfatta (o non soddisfatta). Le istruzioni IF-ELSE
, IF-IF ELSE-ELSE
e CASE
si usano spesso nello pseudocodice.
Ecco un esempio che mostra uno script IF-ELSE
in pseudocodice:
IF user = returning
PRINT "Welcome back!"
ELSE
PRINT "Welcome!"
Nell’esempio precedente, stiamo descrivendo un processo che mostra un messaggio di “Bentornato!” agli utenti che hanno già visitato il sito, ma mostra solo “Benvenuto!” ai nuovi utenti.
Iterazioni
Le dichiarazioni di iterazione ripetono una serie di passi all’interno di una funzione o di un processo più ampio. Spesso vengono utilizzate per eseguire la stessa operazione su più elementi di un elenco o per ripetere un processo finché non vengono soddisfatte determinate condizioni.
Le iterazioni sono utili per ripetere una serie di passaggi più volte e possono essere implementate utilizzando vari tipi di loop, tra cui i loop FOR
, WHILE
e DO-WHILE
.
Vediamo uno pseudocodice che utilizza un ciclo FOR
per iterare un elenco di numeri:
PROCESS PrintWholeList
INPUT listOfNumbers
FOR each number in listOfNumbers
PRINT number
END FOR
END
Nello pseudocodice qui sopra, il nostro processo PrintWholeList riceve un elenco di numeri e poi itera l’elenco, visualizzando ogni numero sullo schermo. Il ciclo FOR
permette al processo di ripetere il comando PRINT
per ogni elemento dell’elenco.
In alternativa, possiamo usare il comune pseudocodice per ottenere lo stesso risultato del ciclo di cui sopra. Nello pseudocodice è più comune utilizzare le parole chiave REPEAT
e UNTIL
al posto di DO-WHILE:
PROCESS PrintWholeList
INPUT listOfNumbers
SET counter = 0
REPEAT
PRINT listOfNumbers[counter]
SET counter = counter + 1
UNTIL counter = length of listOfNumbers
END
Come mostrato qui, possiamo cambiare i nomi, le parole chiave e le parti della sintassi a nostro piacimento. Questa è solo una dimostrazione della flessibilità dello pseudocodice. Il segreto è assicurarsi che la logica sia stabile pur utilizzando nomi abbastanza comuni da poter essere letti da chiunque.
Potete vedere alcuni di questi costrutti utilizzati negli esempi di pseudocodice che vedremo più avanti.
Le Migliori Pratiche dello Pseudocodice
Come abbiamo detto in precedenza, non esiste una sintassi rigorosa per scrivere pseudocodice, poiché non si tratta di un vero e proprio linguaggio di programmazione.
Detto questo, ecco alcune linee guida generali che possono aiutarvi a scrivere ogni volta uno pseudocodice chiaro ed efficace:
- Usate un linguaggio naturale: Lo pseudocodice deve essere scritto in modo facile da capire per chiunque, utilizzando un linguaggio naturale piuttosto che un gergo tecnico.
- Mantenere la semplicità: Evitate di usare un linguaggio o una sintassi complessa e concentratevi sull’espressione dei passaggi dell’algoritmo o del processo in modo chiaro e conciso.
- Siate specifici: Siate il più specifici possibile quando scrivete lo pseudocodice, includendo informazioni come i nomi delle variabili e i valori specifici.
- Tralasciate i dettagli non necessari: Se vi preoccupate di quale convenzione di maiuscole e minuscole adottare o se usare il punto e virgola, state pensando troppo. Il vostro pseudocodice deve essere il più semplice e diretto possibile.
- Usate elementi simili a quelli della programmazione: Anche se lo pseudocodice non deve essere scritto in un linguaggio di programmazione specifico, può essere utile usare elementi come i loop, le dichiarazioni condizionali e le chiamate di funzione per rendere più facile a chi legge la comprensione dei passaggi del vostro programma.
- Usate l’indentazione per mostrare la gerarchia: L’indentazione può essere utilizzata per mostrare la gerarchia dei passaggi del vostro programma, rendendo più facile la comprensione della logica e della struttura.
Seguendo queste linee guida, potrete scrivere uno pseudocodice chiaro ed efficace che sia voi che e altre persone potranno usare come guida per implementare funzioni o algoritmi in uno specifico linguaggio di programmazione o di scripting.
Esempi di Pseudocodice e Traduzioni
Vediamo alcuni esempi di pseudocodice e le loro traduzioni in codice eseguibile in vari linguaggi e framework.
PHP
Per iniziare, scriviamo uno pseudocodice che vuole imitare la logica della somma di tutti i numeri di una determinata lista:
PROCESS FindTotal
INPUT listOfNumbers
SET sum = 0
FOR EACH number IN listOfNumbers
SET sum = sum + number
END FOR
PRINT sum
END
La logica del nostro pseudocodice segue questi passi:
- Dare un nome alla funzione.
- Ottenere l’elenco dei numeri dall’utente finale.
- Creare una variabile chiamata sum per ospitare il totale numerico calcolato.
- Iterare tutti i numeri dell’elenco uno per uno, aggiungendo ogni numero al totale della somma.
- Dopo che tutti i numeri sono stati aggiunti, terminare l’iterazione (ciclo).
- Visualizzare la somma finale ottenuta sommando tutti i numeri.
- Terminare la funzione.
Ora che conosciamo la logica della nostra funzione, possiamo tradurre questo pseudocodice in qualsiasi altro linguaggio o framework. Vediamo come potrebbe apparire tradotto in PHP:
function findTotal($listOfNumbers) {
$sum = 0;
foreach ($listOfNumbers as $number) {
$sum += $number;
}
echo $sum;
}
Node.js
Scriviamo poi uno pseudocodice che possiamo usare per verificare l’ora corrente del nostro visitatore e inviargli il saluto appropriato in base all’ora del giorno:
PROCESS TimedGreeting
GET userTime
IF userTime > 6:00 + < 12:00
PRINT "Good morning!"
ELSE IF userTime > 12:00 + < 18:00
PRINT "Good afternoon!"
ELSE
PRINT "Good evening!"
END
La logica del nostro pseudocodice segue questi passi:
- Dare un nome alla funzione.
- Trovare l’ora dell’utente.
- Se l’orario dell’utente è compreso tra le 6:00 AM e le 12:00 PM, mostrare il messaggio “Buongiorno!”
- Se l’orario dell’utente è compreso tra le 12:00 e le 18:00, mostrare il messaggio “Buon pomeriggio!”
- Per qualsiasi altro orario, mostrare il messaggio “Buonasera!”
- Terminare la funzione.
Tradotto in Node.js, potrebbe apparire come segue:
function timedGreeting() {
const userTime = new Date();
if (userTime.getHours() > 6 && userTime.getHours() < 12) {
console.log('Good morning!');
} else if (userTime.getHours() > 12 && userTime.getHours() < 18) {
console.log('Good afternoon!');
} else {
console.log('Good evening!');
}
}
Python
Per il prossimo esempio, scriviamo un po’ di pseudocodice per delineare la logica di inversione di una stringa (in questo caso, una frase) che ci viene fornita da un utente:
PROCESS ReverseString
INPUT string
SET reversed_string = reverse of string
PRINT "The reversed sentence is: ", reversed_string
END
La logica del nostro pseudocodice segue questi passi:
- Dare un nome alla funzione.
- Chiedere all’utente una stringa e accettare quella fornita.
- Memorizzare il valore della variabile stringa dell’utente.
- Tagliare il valore della stringa memorizzata per invertirlo e memorizzare il risultato in una nuova variabile.
- Visualizzare la stringa invertita sullo schermo.
- Terminare la funzione.
Tradotta in Python, potrebbe apparire come segue:
string = input("Enter a sentence: ")
reversed_string = string[::-1]
print("The reversed sentence is: ", reversed_string)
In alcuni casi, il codice effettivamente tradotto sarà più corto dello pseudocodice. Questo va bene. Finché la logica del vostro pseudocodice è solida e il codice tradotto funziona come dovrebbe, potete ignorare le discrepanze di lunghezza.
Processi per Descrivere Situazioni Reali
Grazie alla sua leggibilità e flessibilità, lo pseudocodice può essere utilizzato anche per definire processi che esulano dal mondo della codifica.
Supponiamo che vogliate definire i passaggi necessari per dipingere la vostra camera da letto. Lo pseudocodice per questo lavoro potrebbe essere simile a questo:
PROCESS PaintBedroom
INPUT color
PREPARE bedroom
REMOVE furniture from room
COVER floors with drop cloth
TAPE off trim
PAINT walls
SETUP ladder
LOAD paint roller with paint
ROLL paint onto walls
ALLOW paint to dry
FINISH
REMOVE tape and drop cloth
REPLACE furniture
DISPOSE of trash
END
Naturalmente, dato che dipingere una camera da letto è un’operazione fisica non correlata ai computer, non è necessario tradurla in un linguaggio di programmazione. Tuttavia, aderendo alle migliori pratiche e convenzioni dello pseudocodice, potete vedere quanto sia facile tracciare e comunicare anche i processi del mondo reale attraverso lo pseudocodice.
Riepilogo
Se lavorate come developer, sapete bene quanto il vostro tempo sia prezioso. Dovreste cercare di proteggerlo ogni volta che è possibile, implementando strategie che vi facciano risparmiare tempo, fatica e frustrazione.
La scrittura di pseudocodice è un’ottima misura per risparmiare tempo e fatica per chi sviluppa, a prescindere dai linguaggi usati e dal livello di competenza. Potete integrare lo pseudocodice nel vostro flusso di lavoro senza bisogno di strumenti aggiuntivi o di affrontare particolari spese. Pianificando in modo chiaro e conciso il vostro codice attraverso lo pseudocodice prima di immergervi nel vivo della scrittura e dei test, potete risparmiare tempo, evitare errori e collaborare più facilmente con i membri del vostro team.
Quali altri usi avete trovato per lo pseudocodice? Fatecelo sapere nella sezione commenti!