Lezione 18 di 35

Git 18

🔀 Git & GitHub · Modulo 3 · Lezione 18

Code Review 👀

Revisioni costruttive · Commenti inline · Suggerimenti di codice · Approvazione · La cultura del feedback

⏱️ Durata stimata: 60–75 min 📊 Livello: Intermedio (Modulo 3) 🔧 Strumenti: Browser (github.com) 📋 Prerequisiti: Lezione 17 (sai creare e fare merge di una PR)

👀 La code review è la competenza che separa chi scrive codice da chi scrive codice professionale. Non è “trovare errori” — è un processo collaborativo in cui impari dal codice degli altri, condividi conoscenza e migliori la qualità del progetto. In questa lezione impari sia a dare review utili sia a ricevere feedback con maturità. È una competenza che userai per tutta la carriera.

🎯 Obiettivi della lezione

  • Capire perché la code review è importante (non solo per trovare bug)
  • Saper dare una review costruttiva su una Pull Request
  • Usare commenti inline, suggerimenti di codice e thread di discussione
  • Conoscere i 3 tipi di review: Comment, Approve, Request changes
  • Saper ricevere feedback senza prenderla sul personale
  • Conoscere le best practice del feedback tra pari

📖 1. Teoria

1.1 — Perché fare code review

La code review non è un esame — è un processo di miglioramento reciproco. Anche il programmatore più esperto del mondo ha i propri punti ciechi: cose che non nota, abitudini non ottimali, casi limite che non considera. Un secondo paio di occhi cattura ciò che il primo non vede.

Trova bug prima che arrivino in produzione
Un errore logico, un caso non gestito, un off-by-one — il reviewer li nota perché legge il codice con occhi freschi, senza le assunzioni dell’autore.
Condivide conoscenza
Il reviewer impara come l’autore ha risolto il problema. L’autore impara approcci alternativi dal reviewer. Entrambi crescono.
Mantiene la coerenza
Lo stile del codice, le convenzioni di naming, la struttura — la review tiene tutto allineato in modo che il progetto sembri scritto da un’unica persona.
Crea responsabilità condivisa
Se il codice è stato revisionato, almeno due persone lo conoscono. Se l’autore si ammala, il reviewer può intervenire. Nessuno è un “single point of failure”.

1.2 — Come fare una review su GitHub

PASSO 1
Apri la PR e vai alla tab “Files changed”. Qui vedi il diff completo: righe verdi (aggiunte) e rosse (rimosse).
PASSO 2
Leggi il codice con attenzione. Per ogni punto che vuoi commentare, clicca il + accanto al numero di riga e scrivi il tuo commento.
PASSO 3
Clicca “Start a review” (non “Add single comment”) — questo raggruppa tutti i tuoi commenti in un’unica review.
PASSO 4
Quando hai finito, clicca “Review changes” (in alto a destra). Scrivi un commento generale e scegli il tipo di review.

📌 “Start a review” vs “Add single comment”: quando clicchi il + e scrivi un commento, hai due opzioni. “Add single comment” pubblica il commento immediatamente — l’autore riceve una notifica per ogni singolo commento. “Start a review” accumula i commenti e li pubblica tutti insieme alla fine — l’autore riceve un’unica notifica con tutti i feedback. La seconda opzione è molto più educata e professionale.

1.3 — I 3 tipi di review

✅
Approve
“Il codice va bene, puoi fare merge.” Usa quando non hai obiezioni significative.
💬
Comment
“Ho delle osservazioni ma non blocco il merge.” Per suggerimenti non critici, domande, osservazioni.
🔄
Request changes
“Servono modifiche prima del merge.” Usa quando ci sono problemi che devono essere corretti.

1.4 — Strumenti del reviewer su GitHub

Strumento Come si usa Quando
Commento su una riga Clicca il + accanto al numero di riga → scrivi il commento Per feedback su un punto specifico del codice
Commento su più righe Clicca il + e trascina per selezionare un range di righe Per commentare un blocco intero (funzione, blocco if, ecc.)
Suggerimento di codice ⭐ Nel commento, clicca l’icona ± o scrivi un blocco ```suggestion Quando vuoi proporre una modifica specifica — l’autore può applicarla con un click
“Viewed” checkbox Spunta “Viewed” accanto a ogni file nella tab Files changed Per tenere traccia di quali file hai già revisionato

Il suggerimento di codice: la funzione più potente

Quando vuoi proporre una modifica specifica, non scrivere “cambia la riga X in Y” — usa il blocco suggestion. L’autore può applicare la modifica con un click, senza tornare nel terminale.

Il reviewer scrive nel commento:
Meglio usare const invece di let
qui, perché il valore non viene
mai riassegnato:

“`suggestion
const total = price * quantity;
“`
L’autore vede su GitHub:
Meglio usare const invece di let qui, perché il valore non viene mai riassegnato:
let total = price * quantity;
const total = price * quantity;
Commit suggestion
← Un click e la modifica è applicata come commit!

1.5 — Come dare feedback costruttivo

Il modo in cui scrivi un commento è tanto importante quanto il contenuto. Un commento aggressivo o sprezzante demoralizza e crea conflitti. Un commento costruttivo insegna e motiva.

❌ Commento distruttivo ✅ Commento costruttivo
“Questo codice è orribile.” “Questa parte potrebbe essere semplificata — che ne dici di estrarre questa logica in una funzione?”
“Perché hai fatto così? Non ha senso.” “Sono curioso della scelta di usare un for qui — un forEach o un map sarebbe più leggibile?”
“Sbagliato.” “Attenzione: qui c’è un caso non gestito — se l’array è vuoto, la funzione restituisce undefined. Meglio aggiungere un check.”
“Dovresti saperlo.” “Un suggerimento: in JavaScript, === è preferibile a == perché confronta anche il tipo. Ecco un link che spiega la differenza: …”
(nessun commento positivo) “Mi piace come hai strutturato questa funzione — è molto leggibile!”
Le 5 regole del feedback costruttivo
1
Commenta il codice, non la persona. “Questa funzione è complessa” ≠ “Non sai programmare”. Separa il lavoro dalla persona.
2
Spiega il perché. Non dire solo “cambia X in Y” — spiega il motivo. “Usa const invece di let perché il valore non cambia mai — rende chiaro l’intento.”
3
Usa domande invece di imperativi. “Che ne dici di usare un map qui?” funziona meglio di “Usa un map qui”. La domanda invita al dialogo, l’imperativo impone.
4
Segnala anche le cose fatte bene. La review non è solo critica — quando vedi codice ben scritto, dillo. Un “Ottima gestione degli errori!” costa zero e motiva enormemente.
5
Distingui tra obbligatorio e suggerimento. Usa prefissi come [nit] per dettagli minori (“nit: spazio in più alla riga 15”) e [blocking] per problemi che impediscono il merge.

1.6 — I prefissi convenzionali per i commenti

Prefisso Significato Esempio
[blocking] Problema serio — va risolto prima del merge [blocking] Qui manca la gestione dell’errore. Se l’API non risponde, l’app crasha.
[suggestion] Suggerimento di miglioramento — non bloccante [suggestion] Potresti usare template literals invece della concatenazione.
[question] Domanda per capire la scelta — non una critica [question] Perché hai scelto setTimeout invece di setInterval qui?
[nit] Dettaglio cosmetico / minore — ignorabile [nit] Spazio in più alla riga 42.
[praise] Apprezzamento — qualcosa fatto bene [praise] Ottima idea separare la validazione in una funzione a parte!

1.7 — Cosa cercare durante una review

Un reviewer non deve leggere ogni riga alla ricerca della perfezione. Ecco una checklist pratica di cosa controllare, in ordine di priorità:

CRITICO
Bug e errori logici. Il codice fa quello che dovrebbe? C’è un caso limite non gestito? L’off-by-one? La divisione per zero? Il null check?
CRITICO
Sicurezza. Ci sono dati sensibili nel codice? Input non sanificato? Credenziali hardcoded?
IMPORTANTE
Leggibilità. Il codice è comprensibile? I nomi delle variabili sono chiari? Servono commenti?
IMPORTANTE
Architettura. La soluzione ha senso nel contesto del progetto? Ci sono duplicazioni? Funzioni troppo lunghe?
MINORE
Stile e convenzioni. Indentazione, naming, formattazione. Spesso automatizzabili con linter.
MINORE
Performance. Solo se rilevante — non ottimizzare prematuramente. Ma un loop su un milione di elementi va notato.

1.8 — Come ricevere una review

Ricevere feedback sul proprio codice può essere difficile — è naturale sentirsi sulla difensiva. Ma la review riguarda il codice, non te. Ecco come gestirla con maturità.

❌ Reazioni controproducenti
“Ma funziona, no? Che problema c’è?”
“Non ho tempo per queste modifiche.”
“Il mio codice va bene così.”
Ignorare i commenti e fare merge comunque.
✅ Reazioni mature
“Grazie per la segnalazione, correggo subito.”
“Buon punto — ho scelto così perché X, ma il tuo approccio è migliore.”
“Non conoscevo questa sintassi, grazie!”
Rispondere a ogni commento, anche solo con “Fatto!”
Le 4 regole per ricevere feedback
Non è personale
Il reviewer critica il codice, non te. Anche il miglior programmatore riceve richieste di modifica.
Rispondi a ogni commento
Anche con “Fatto!” o “Buona idea, grazie!”. Il reviewer ha investito tempo nel tuo codice — merita una risposta.
Se non sei d’accordo, spiega
Non ignorare il commento — spiega il tuo ragionamento. “Ho scelto X perché…” apre un dialogo costruttivo.
Ogni review ti fa crescere
Ogni commento è un’occasione per imparare qualcosa. I programmatori migliori sono quelli che ricevono più review, non quelli che ne ricevono meno.

💻 2. Esempi guidati

Esempio A — Una review completa su una PR scolastica

Scenario: Marco ha aperto una PR con la pagina contatti. Giulia revisiona.
Riga 5 di contatti.html — [blocking]
“Il campo email non ha l’attributo type="email" — senza, il browser non fa validazione nativa e su mobile non mostra la tastiera ottimizzata. Aggiungiamolo:”
<input name=”email”>
<input name=”email” type=”email” required>
Riga 12 di style.css — [suggestion]
“Qui usi un colore hex hardcoded — dato che abbiamo già variabili CSS nel progetto, che ne dici di usare var(--color-primary) per coerenza?”
Riga 8 di contatti.html — [praise]
“Mi piace molto come hai strutturato il form con fieldset e legend — rende il codice molto accessibile e semantico!”
Commento generale della review
“Buon lavoro Marco! La pagina è ben strutturata. Ho solo una modifica obbligatoria (il type=email) e un suggerimento sulle variabili CSS. Dopo la correzione, approvo.”
→ Tipo review: Request changes

Esempio B — L’autore risponde e corregge

Marco risponde al commento blocking
“Hai ragione, non ci avevo pensato! Ho aggiunto type=email e anche required. Corretto nel commit c3d4e5f.”
Marco risponde al suggerimento CSS
“Ottima idea! Ho applicato il tuo suggerimento con Commit suggestion. Non sapevo che avessimo già le variabili CSS — mi segno per le prossime volte.”
Giulia ri-revisiona
“Perfetto, tutto a posto. Approvo!”
→ Tipo review: Approve ✅

🏋️ 3. Esercizi

🟢 Esercizio 1 — Revisiona te stesso (Facile)

a) Apri una delle tue PR precedenti (o creane una nuova con qualche file).
b) Vai alla tab “Files changed”.
c) Lascia almeno 3 commenti inline sul tuo stesso codice: un [praise] su qualcosa che hai fatto bene, un [suggestion] per un miglioramento, e un [nit] per un dettaglio minore.
d) Usa “Start a review” per raggruppare i commenti. Scrivi un commento generale e seleziona “Comment”.
e) Come ti sembra il tuo codice dopo averlo riletto con occhi da reviewer?

🔵 Esercizio 2 — Suggerimento di codice (Medio)

a) Crea un branch con un file JavaScript che contiene almeno un var (da cambiare in const o let) e un’operazione che potrebbe essere semplificata.
b) Pusha e apri una PR.
c) Nella review, usa il blocco ```suggestion per proporre le modifiche. Crea almeno 2 suggerimenti di codice.
d) Cambia ruolo: come autore, clicca “Commit suggestion” su ciascun suggerimento.
e) Verifica che i commit siano apparsi nella PR. Fai merge.

🟠 Esercizio 3 — Review incrociata con un compagno (Medio)

Questo esercizio richiede un compagno di classe.

a) Ciascuno di voi crea un branch nel proprio repository con una piccola modifica (o file nuovo) e apre una PR.
b) Aggiungete l’altro come collaboratore del repository (Settings → Collaborators → Add people).
c) Ciascuno revisiona la PR dell’altro usando i prefissi [blocking], [suggestion], [nit], [praise].
d) Ciascuno risponde ai commenti ricevuti, corregge se necessario, e pusha.
e) Dopo la seconda review, approvate e fate merge. Discutete: cosa avete imparato dalla review dell’altro?

🟣 Esercizio 4 — Scrivi la guida di code review del tuo team (Difficile)

Crea un file REVIEW_GUIDELINES.md nel tuo repository con le regole di code review del tuo team. Deve includere:

a) Scopo della review: perché facciamo code review (2-3 frasi).
b) Checklist del reviewer: cosa controllare (con checkbox Markdown).
c) Prefissi dei commenti: tabella con [blocking], [suggestion], [nit], [praise].
d) Regole di comunicazione: come dare feedback costruttivo (almeno 3 punti).
e) Regole per l’autore: come ricevere e rispondere ai feedback (almeno 3 punti).
f) Tempi: entro quanto la review deve essere completata (es. “entro 24 ore dalla richiesta”).
g) Committa, pusha e condividi il link con il tuo team.

❓ 4. Quiz di verifica

1. Perché “Start a review” è meglio di “Add single comment”?

Mostra risposta

“Add single comment” pubblica ogni commento immediatamente — l’autore riceve una notifica per ciascuno, potenzialmente decine di email. “Start a review” raggruppa tutti i commenti e li pubblica insieme alla fine, quando clicchi “Submit review”. L’autore riceve un’unica notifica con tutti i feedback. Inoltre, solo con “Start a review” puoi scegliere il tipo di review (Approve, Comment, Request changes). È più professionale, meno invasivo e dà all’autore un quadro completo del feedback in una volta sola.


2. Qual è la differenza tra “Approve” e “Comment” come tipo di review?

Mostra risposta

“Approve” significa “il codice va bene, puoi fare merge” — è un via libera esplicito. “Comment” significa “ho delle osservazioni ma non esprimo un giudizio sul merge” — il commento non blocca né approva. “Request changes” è il terzo tipo: “servono modifiche prima del merge” — è un blocco esplicito. In pratica: usa “Approve” se sei soddisfatto, “Request changes” se ci sono problemi da correggere, e “Comment” per osservazioni generali senza prendere posizione.


3. Cosa significa il prefisso [nit] in un commento di review?

Mostra risposta

Viene da “nitpick” (cercare il pelo nell’uovo). Indica un dettaglio minore e cosmetico che non è bloccante — l’autore può correggere o ignorare. Esempi: uno spazio in più, una variabile che potrebbe avere un nome leggermente migliore, un commento mancante su una riga ovvia. I prefissi come [nit], [suggestion], [blocking] e [praise] aiutano l’autore a capire la gravità del commento senza doverla dedurre dal tono. Un commento con [nit] dice “è un dettaglio, non è obbligatorio correggerlo”.


4. Come funziona il blocco ```suggestion nei commenti di review?

Mostra risposta

Permette al reviewer di proporre una modifica specifica al codice direttamente nel commento. GitHub mostra la riga originale (barrata in rosso) e la versione proposta (in verde) con un pulsante “Commit suggestion”. L’autore può applicare la modifica con un singolo click — GitHub crea automaticamente un commit con quella modifica. È molto più efficiente che scrivere “cambia X in Y” e aspettare che l’autore lo faccia manualmente. Si possono anche raggruppare più suggerimenti in un singolo commit (“Batch suggestions”).


5. Un compagno ha commentato “Questo codice è orribile” sulla tua PR. Come reagisci?

Mostra risposta

Mantieni la calma e rispondi in modo professionale: “Puoi spiegarmi cosa miglioreresti? Sono aperto a suggerimenti specifici.” Il commento è distruttivo perché non offre nessun feedback utile — non dice cosa non va né come migliorare. Chiedendo dettagli specifici, trasformi una critica vuota in un’opportunità di dialogo costruttivo. Se il commento è ripetutamente aggressivo, puoi coinvolgere il prof o il team leader. La code review deve essere sempre rispettosa — un buon feedback critica il codice, non la persona.


6. Cosa dovresti controllare per prima cosa durante una code review?

Mostra risposta

Le cose critiche: bug e errori logici (il codice fa quello che dovrebbe?), problemi di sicurezza (dati sensibili esposti? input non sanificato?). Poi le cose importanti: leggibilità e architettura. Solo alla fine i dettagli minori come stile e formattazione. L’errore più comune è concentrarsi sui dettagli cosmetici (“spazio in più alla riga 42”) ignorando un bug logico. Un bravo reviewer ha una gerarchia: prima la correttezza, poi la leggibilità, infine lo stile.


📚 Riepilogo della lezione

Cosa hai imparato oggi:
  • La code review trova bug, condivide conoscenza, mantiene coerenza
  • Usa “Start a review” per raggruppare i commenti (non “Add single comment”)
  • 3 tipi: Approve (via libera) · Comment (osservazioni) · Request changes (blocco)
  • Il blocco ```suggestion propone modifiche applicabili con un click
  • Prefissi: [blocking] [suggestion] [question] [nit] [praise]
  • 5 regole feedback: codice non persona · spiega il perché · domande non imperativi · segnala il buono · distingui obbligatorio/opzionale
  • Ricevere review: non è personale · rispondi a tutto · spiega se non sei d’accordo · impara da ogni commento
  • Checklist review: bug e sicurezza → leggibilità e architettura → stile e dettagli

🎉 Congratulazioni! Hai completato il Modulo 3 — GitHub: le basi. Sai creare un account, autenticarti, fare push e pull, scrivere README professionali, gestire issue, aprire Pull Request e fare code review. Hai tutto ciò che serve per collaborare su GitHub. Dal prossimo modulo si sale di livello: fork, branch protection, GitHub Projects e molto altro.

Prossima lezione →

Lezione 19 — Fork e open source
Come contribuire ai progetti degli altri. Fork, branch, PR upstream.
Il workflow dell’open source contributor.

Corso Git & GitHub · Per studenti e insegnanti · Lezione 18 di 45