Menu

Spiegare il codice con l'IA: prompt riga per riga

Chiedi all'IA di spiegare il codice riga per riga, al tuo livello, con una tabella di come cambiano i valori durante l'esecuzione. Di' cosa sai già, così la spiegazione parte da dove sei tu.

Ogni prompt qui sotto è modificabile: cambialo, poi aprilo in ChatGPT, Claude o un'altra app di AI.

Per ottenere dall'IA una spiegazione utile di un codice, di' quanto sai già, chiedi la spiegazione riga per riga e chiedi una traccia: una tabella dei valori che ogni variabile assume mentre il codice gira. Un semplice "spiega questo codice" ottiene un riassunto scritto per un immaginario lettore medio, che per te di solito risulta troppo elementare o troppo veloce.

Riga per riga, con una traccia dei valori

Le due schede chiedono della stessa breve funzione. Confronta cosa ti permette di verificare ogni risposta.

Spiega questo codice: def running_max(nums): result = [] best = None for n in nums: if best is None or n > best: best = n result.append(best) return result print(running_max([3, 1, 4, 1, 5]))
Try it
Example replyReplies vary between models and runs.

Questa funzione calcola il massimo progressivo di una lista. Scorre i numeri, tiene in best il valore più grande visto finora e aggiunge quel valore a result a ogni passo. Il controllo best is None gestisce il primo elemento. La chiamata stampa [3, 3, 4, 4, 5].

La funzione gira in tempo O(n), perché visita ogni elemento una volta.

La prima risposta è corretta, e aiuta solo se sai già cos'è un massimo progressivo. Aggiunge anche una nota sulla complessità temporale che nessuno ha chiesto, il tipo di extra che ottieni quando il modello non sa chi sta leggendo. La seconda risposta lega ogni frase a una riga che puoi indicare, e la tabella rende concreto ciò che il riassunto dice solo di sfuggita: result.append(best) viene eseguito a ogni giro, compresi quelli in cui best non cambia. Ecco perché 3 compare due volte, e lo vedi nella riga 2 invece di dedurlo da "a ogni passo".

Una tabella di traccia serve anche a controllare la spiegazione stessa. Puoi verificare ogni riga eseguendo il codice con un print(n, best, result) dentro il ciclo. Se una riga non corrisponde all'output reale, la spiegazione è sbagliata da qualche parte, e ora sai dove.

Fattelo spiegare al tuo livello

La riga più utile in un prompt di spiegazione è quello che sai già. Dice al modello quali righe saltare e su quali rallentare. Anche una frase di ruolo può aiutare ("Sei un tutor per chi è al primo mese di programmazione"), ma funziona con lo stesso meccanismo: dice al modello chi è il lettore. Role prompting spiega cosa cambia un ruolo e cosa no.

Questo blocco è una versione riutilizzabile. Cambia il livello, la parte che ti confonde o il codice, e la spiegazione cambia con loro.

Spiegamelo al mio livello
Fill in
Parts
Spiegami il codice qui sotto.
Il mio livello: conosco cicli, liste e dizionari, ma non lambda né sorted con key. La parte che mi confonde: le ultime due righe.
text = "the cat and the hat" counts = {} for word in text.split(): counts[word] = counts.get(word, 0) + 1 top = sorted(counts.items(), key=lambda kv: kv[1], reverse=True)[:2] print(top)
Spiega le righe che capisco già in una sola frase in totale. Dedica il resto alla parte che mi confonde, un pezzo alla volta, mostrando il valore che ogni pezzo produce con questo input.
Sotto le 180 parole. Usa solo i concetti del mio livello, più quelli che stai spiegando.
Try it
Example replyReplies vary between models and runs.

Il ciclo conta ogni parola: alla fine counts vale {'the': 2, 'cat': 1, 'and': 1, 'hat': 1}.

Ora le ultime due righe, dall'interno verso l'esterno:

  • counts.items() dà le coppie ('the', 2), ('cat', 1), ('and', 1), ('hat', 1).
  • lambda kv: kv[1] è una minuscola funzione senza nome. Riceve una coppia e restituisce il suo secondo elemento, il conteggio. Per ('the', 2) restituisce 2.
  • sorted(..., key=...) ordina le coppie in base a ciò che restituisce quella funzione, quindi ordina per conteggio. reverse=True mette per primo il più grande. Le parole con lo stesso conteggio mantengono il loro ordine originale.
  • [:2] tiene le prime due coppie.

Quindi top vale [('the', 2), ('cat', 1)], ed è quello che viene stampato.

"Le parole con lo stesso conteggio mantengono il loro ordine originale" è il dettaglio che una spiegazione veloce tralascia, ed è il motivo per cui il secondo posto va a cat e non ad and o hat. Il sorted di Python è stabile, e reverse=True mantiene questa stabilità. Non ti verrebbe in mente di chiederlo, ed è stato il chiedere "il valore che ogni pezzo produce con questo input" a farlo emergere.

Chiedi di una parte, non dell'intero file

Incollare un file di 500 righe e chiedere "cosa fa questo?" ti dà un giro turistico della struttura del file. Quando sei bloccato su una funzione, incolla quella funzione e le righe che la chiamano, e chiedi direttamente di lei: "Perché questa funzione esce subito quando la lista è vuota?" oppure "Cosa fa yield alla riga 12, e cosa cambierebbe se fosse return?" Una domanda mirata ottiene una risposta sul tuo codice; una domanda ampia ottiene una risposta su codice simile al tuo.

Per un codebase grande e sconosciuto, ribalta l'approccio: chiedi prima una mappa ("elenca i moduli principali e di cosa si occupa ciascuno, una riga per modulo"), poi chiedi del modulo che ti serve. È una piccola catena di prompt, e ogni passaggio mantiene la risposta del modello abbastanza breve da poterla controllare.

Fattelo spiegare attraverso un linguaggio che conosci

Il codice in un linguaggio sconosciuto si legge meglio quando la spiegazione si appoggia a uno che conosci. Dillo nel prompt: "Conosco Python. Spiegami questa funzione Go e indica ogni punto in cui si comporta diversamente da come si aspetterebbe un programmatore Python." Le differenze sono dove vivono i malintesi: la divisione intera, i valori zero invece di None, uno slice che condivide la memoria con l'array da cui proviene. Una spiegazione semplice del codice Go descriverebbe correttamente quelle righe senza mai dirti che il tuo istinto su di esse è sbagliato.

Verifica di aver capito

Una spiegazione che leggi e che ti convince può comunque lasciarti incapace di scrivere quel codice da solo. Due prompt colmano questa distanza:

  • Prima prevedi. Prima di eseguire il codice o chiedere una spiegazione, scrivi cosa pensi che stampi. Poi chiedi al modello di spiegare solo le righe in cui la tua previsione era sbagliata.
  • Rispiegalo tu. Scrivi la tua spiegazione e chiedi al modello di indicare cosa è sbagliato o mancante, senza riscriverla.
Fammi un quiz su questo codice
Fill in
Ho appena letto una spiegazione di questo codice Python: def running_max(nums): result = [] best = None for n in nums: if best is None or n > best: best = n result.append(best) return result Fammi 3 domande che verifichino se lo capisco davvero, una alla volta. Includi una domanda in cui devo prevedere l'output per un nuovo input. Aspetta la mia risposta prima di fare la domanda successiva, e dimmi se la mia risposta è giusta e perché.
Try it
Example replyReplies vary between models and runs.

Domanda 1 di 3: cosa restituisce running_max([2, 7, 5, 9])? Ragionaci prima di eseguirlo.

Lo stesso approccio funziona quando un programma si comporta male, ma in quel caso vuoi la causa, non una lezione: vedi prompt per il debugging. Quando il codice che hai davanti l'ha scritto un'IA, una spiegazione riga per riga è un modo rapido per rivederlo prima di tenerlo; prompt per scrivere codice elenca gli altri controlli da fare.

Domande frequenti

Come chiedo a ChatGPT o Claude di spiegare un codice?

Incolla il codice e di' tre cose: cosa sai già, quale parte ti confonde e che forma vuoi dare alla spiegazione. "Spiega ogni riga in una frase, poi mostra una tabella con le variabili dopo ogni giro del ciclo" ottiene una risposta molto più utile di "spiega questo codice".

Cos'è una tabella di traccia?

Una tabella di traccia segue un programma mentre viene eseguito: una riga per passo (spesso un giro del ciclo), una colonna per variabile e il valore di ogni variabile in quel punto. Chiederla trasforma una descrizione astratta in valori concreti che puoi confrontare con il codice. È una registrazione scritta di quello che ti mostra un debugger mentre avanzi nel programma.

L'IA può spiegarmi codice in un linguaggio che non conosco?

Sì, ed è una delle cose più utili che puoi chiedere. Nomina un linguaggio che conosci e chiedi al modello di fare il confronto: "Conosco Python; spiegami questo codice Rust e indica dove si comporta diversamente da Python." Verifica le affermazioni sul comportamento del linguaggio eseguendo piccoli esempi, perché le spiegazioni possono sbagliare i dettagli con grande sicurezza.

Usare l'IA per farsi spiegare il codice fa male all'apprendimento?

Dipende da cosa fai dopo. Leggere una spiegazione e passare oltre insegna poco. Prevedere l'output prima di eseguire il codice, chiedere al modello di farti un quiz o rispiegare il codice con parole tue e chiedere cosa hai sbagliato ti costringono a ragionare, ed è lì che si impara.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA