Context engineering

Immagine
  Negli ultimi mesi, chi lavora con i modelli linguistici ha iniziato a notare uno spostamento sottile ma significativo: il problema non è più cosa scrivere nel prompt , ma cosa mettere nel contesto . È la differenza tra dare un'istruzione ben formulata e costruire l'intero ambiente informativo in cui un modello deve operare — memoria, strumenti, cronologia, vincoli, stato del sistema. Si parla ormai apertamente di context engineering come disciplina distinta dal prompt engineering, e la distinzione non è solo terminologica. 🔹 1. Il prompt come istruzione, il contesto come ambiente Un prompt ben scritto ottimizza una singola interazione. Il contesto, invece, è tutto ciò che il modello "vede" prima di rispondere: documenti recuperati, risultati di strumenti, conversazioni pregresse, regole di sistema, persino la cronologia di errori già commessi in quella sessione. Con l'adozione crescente di agenti che lavorano su compiti lunghi — scrivere codice, orchestrare...

Corso Pensiero Computazionale e Coding per Tutti: 3 Il linguaggio binario e i sistemi di numerazione

3 Il linguaggio binario e i sistemi di numerazione

Introduzione: perché il binario?

Immagina un corridoio pieno di lampadine. Ogni lampadina può essere accesa (1) o spenta (0). Con una sola lampadina puoi indicare due stati: acceso/spento. Con due lampadine hai quattro combinazioni (00, 01, 10, 11). Questo è il cuore del linguaggio digitale: segnali ON/OFF, sì/no, 1/0. I computer parlano così perché i componenti elettronici — transistor, porte logiche — funzionano scegliendo tra due stati.

Concetti teorici essenziali

  • Bit = binary digit = 0 o 1.
  • Posizione in un numero binario corrisponde a una potenza di 2. Da destra a sinistra: 2⁰, 2¹, 2², 2³, …
  • Byte = 8 bit. Nibble = 4 bit. Parole (word) dipendono dall’architettura (16, 32, 64 bit).
  • Range valori: con n bit si rappresentano 0 … (2ⁿ − 1) per numeri senza segno.
  • Due-complemento = convenzione per rappresentare numeri negativi (vedremo come funziona).

Tabella rapida potenze di 2 (utile come "tassello" in classe)

  • 2⁰ = 1
  • 2¹ = 2
  • 2² = 4
  • 2³ = 8
  • 2⁴ = 16
  • 2⁵ = 32
  • 2⁶ = 64
  • 2⁷ = 128
  • 2⁸ = 256

Conversioni — esempi passo-passo (eseguiti digit-by-digit)

A) Da binario a decimale — Esempio: 1011

Leggiamo da sinistra (ma calcoliamo per posizione da destra a sinistra):

  • cifre (da sinistra a destra): 1 0 1 1
  • posizioni (da destra): 2³, 2², 2¹, 2⁰ = 8, 4, 2, 1
    Calcolo:
  • 1 × 2³ = 1 × 8 = 8
  • 0 × 2² = 0 × 4 = 0
  • 1 × 2¹ = 1 × 2 = 2
  • 1 × 2⁰ = 1 × 1 = 1
    Somma = 8 + 0 + 2 + 1 = 11 (decimale).

B) Da decimale a binario — Metodo divisione per 2 (resti)

Esempio: convertiamo 156 in binario (mostro ogni divisione: quoziente e resto).

  • 156 ÷ 2 = 78 resto 0
  • 78 ÷ 2 = 39 resto 0
  • 39 ÷ 2 = 19 resto 1
  • 19 ÷ 2 = 9 resto 1
  • 9 ÷ 2 = 4 resto 1
  • 4 ÷ 2 = 2 resto 0
  • 2 ÷ 2 = 1 resto 0
  • 1 ÷ 2 = 0 resto 1 (qui terminiamo)
    Ora leggiamo i resti dal basso verso l’alto: 1 0 0 1 1 1 0 010011100 (binario). Verifica: 128 + 0 + 0 + 16 + 8 + 4 + 0 + 0 = 156.

C) Da decimale a esadecimale (base 16) — esempio: 255

Divisione per 16:

  • 255 ÷ 16 = 15 resto 15 → 15 in esadecimale è F
  • 15 ÷ 16 = 0 resto 15F
    Quindi 255 decimale = FF (esadecimale).

Codifica di caratteri: ASCII (pratica)

I computer memorizzano lettere come numeri. ASCII standard associa ad esempio:

  • "A" → 65 → in binario 01000001 (8 bit).
    Esempio pratico: trasformiamo la parola Tom (passo-passo):
  • T = 84 → dividendo per 2 otteniamo binario: 01010100
  • o = 111 → binario: 01101111
  • m = 109 → binario: 01101101
    Nome in binario: 01010100 01101111 01101101.

(Se vuoi, puoi fornire la tabella ASCII da stampare; per la lezione basta mostrare qualche esempio e far convertire i padroni di casa.)

Operazioni binarie — esempi svolti

A) Addizione binaria — esempio: 1011 + 1101

Allineiamo a destra:

1011 (11 decimale)
+ 1101 (13 decimale)
------

Sommiamo colonna per colonna da destra:

  • colonna 0 (2⁰): 1 + 1 = 2 → scrivo 0, porto 1 (carry).
  • colonna 1 (2¹): 1 + 0 + carry1 = 2 → scrivo 0, porto 1.
  • colonna 2 (2²): 0 + 1 + carry1 = 2 → scrivo 0, porto 1.
  • colonna 3 (2³): 1 + 1 + carry1 = 3 → 3 in binario è 1 con carry 1 (perché 3 = 1 + 2). Scrivo 1, porto 1.
  • carry finale = 1 → lo scrivo a sinistra.

Risultato: 11000.

Verifica in decimale: 11 + 13 = 24 → 11000 in binario = 16 + 8 = 24. Perfetto.

B) Sottrazione con due-complemento — esempio: 13 − 5 (usando 8 bit)

Rappresentazioni (8 bit):

  • 13 = 00001101
  • 5 = 00000101
    Passi per ottenere −5 in due-complemento:
  1. inverti tutti i bit di 5: 11111010
  2. aggiungi 1: 11111010 + 1 = 11111011 (questo è il −5 in due-complemento)
    Ora addiziona 13 + (−5):
00001101
+ 11111011
= 00001000 (con carry che scarta)

Risultato 00001000 = 8. Corretto.

C) Esempio di overflow (8 bit): 130 + 140

  • 130 = 10000010
  • 140 = 10001100
    Addizione:
  • Somma aritmetica: 130 + 140 = 270
  • In 8 bit il massimo è 255 → abbiamo overflow. Se consideriamo solo gli 8 bit di basso peso otteniamo 00001110 = 14.
    Spiegazione: la somma genera un carry oltre l’ottavo bit, perso se si lavora su 8 bit senza segnalazione → valore risultante = 270 mod 256 = 14.

Esercizi svolti

Esercizio 1 — Converti 19 in binario (passi)

Divisioni:

  • 19 ÷ 2 = 9 r 1
  • 9 ÷ 2 = 4 r 1
  • 4 ÷ 2 = 2 r 0
  • 2 ÷ 2 = 1 r 0
  • 1 ÷ 2 = 0 r 1
    Rivolgi i resti: 10011. Verifica: 16 + 0 + 0 + 2 + 1 = 19.

Esercizio 2 — Usa ASCII: quale è il binario di "C"?

"C" = 67 decimale. Convertiamo:

  • 67 ÷ 2 = 33 r 1
  • 33 ÷ 2 = 16 r 1
  • 16 ÷ 2 = 8 r 0
  • 8 ÷ 2 = 4 r 0
  • 4 ÷ 2 = 2 r 0
  • 2 ÷ 2 = 1 r 0
  • 1 ÷ 2 = 0 r 1
    Resta: 1000011. Con 8 bit (prefisso aggiunto): 01000011.

Esercizio 3 — Addizione: 0110 + 0011

  • 0110 (6) + 0011 (3) = 1001 (9). Passaggi: colonna per colonna, portando eventuali carry (qui nessuno tranne al limite).

Test finale (autovalutazione)

1. Converti in binario:
a) 6 →
b) 13 →
c) 31 →

2. Qual è il valore decimale di 10110?
a) 22 b) 23 c) 21 d) 24

3. Qual è il codice ASCII della lettera C?
a) 65 b) 67 c) 66 d) 68

4. In esadecimale, qual è il simbolo per il valore decimale 15?
a) E b) D c) F d) G

5. Quale rappresentazione binaria è corretta per il numero 9?
a) 1001 b) 1011 c) 0110 d) 1111

10) Soluzioni del test — con spiegazioni passo-passo

1. Converti in binario
a) 6 → divisioni: 6 ÷ 2 = 3 r0; 3 ÷ 2 = 1 r1; 1 ÷ 2 = 0 r1 → leggendo i resti: 110.
b) 13 → 13 ÷ 2 = 6 r1; 6 ÷ 2 = 3 r0; 3 ÷ 2 = 1 r1; 1 ÷ 2 = 0 r1 → resti: 1101.
c) 31 → 31 ÷ 2 = 15 r1; 15 ÷ 2 = 7 r1; 7 ÷ 2 = 3 r1; 3 ÷ 2 = 1 r1; 1 ÷ 2 = 0 r1 → 11111.

2. 10110 → valore decimale
Calcolo posizioni: da destra 2⁰=1, 2¹=2, 2²=4, 2³=8, 2⁴=16
Cifre: 1·16 + 0·8 + 1·4 + 1·2 + 0·1 = 16 + 0 + 4 + 2 + 0 = 22 → risposta a).

3. ASCII di C
A è 65, B 66, C 67 → risposta b). (In binario C = 01000011.)

4. Valore decimale 15 in esadecimale
In esadecimale i simboli 10–15 corrispondono a A–F; quindi 15 → F → risposta c).

5. Rappresentazione binaria del 9
9 = 8 + 1 = 2³ + 2⁰ → cifre 1001 → risposta a).


L’Alfabeto della Luce:
Come i Computer Usano il Binario per Creare il Mondo Digitale

Immaginate un corridoio infinito pieno di interruttori. Ognuno di questi può essere solo in due stati: acceso o spento. Non esistono sfumature, non c’è una via di mezzo. Questo scenario, apparentemente semplice, è il motore segreto di ogni smartphone, computer o intelligenza artificiale sul pianeta. È il mondo del linguaggio binario.

1. Perché i computer sono così "testardi"?

Noi esseri umani usiamo il sistema decimale (basato su 10 cifre, probabilmente perché abbiamo dieci dita), ma per una macchina è molto più sicuro e veloce distinguere tra "c'è corrente" (1) e "non c'è corrente" (0). Questi singoli frammenti di informazione si chiamano Bit (Binary Digit).

Quando mettiamo insieme 8 di questi "interruttori", otteniamo un Byte. Se un bit è una lettera, un byte è una parola corta; mettendone insieme miliardi, otteniamo i video in alta definizione che guardiamo ogni giorno.

2. Il gioco delle potenze: come contare con 0 e 1

Nel nostro sistema decimale, la posizione di una cifra cambia il suo valore (pensa alla differenza tra 1, 10 e 100). Nel binario funziona allo stesso modo, ma ogni posizione vale il doppio di quella precedente:

  • La prima posizione a destra vale 1.

  • La seconda vale 2.

  • La terza vale 4, poi 8, 16, 32, e così via.

Quindi, se vediamo il numero binario 1011, stiamo leggendo un codice che dice: "Prendi un 8, zero 4, un 2 e un 1". Sommandoli (8+2+1), scopriamo che per il computer quel codice significa 11.

3. Dalle cifre alle lettere: il codice ASCII

Ma come fa un computer a scrivere "Ciao" se capisce solo i numeri? Esiste una sorta di "dizionario universale" chiamato ASCII. In questo sistema, ogni lettera corrisponde a un numero specifico.

Ad esempio, la lettera "A" maiuscola è il numero 65. Quando premiamo "A" sulla tastiera, il computer riceve istantaneamente una sequenza di otto interruttori (01000001) che interpreta come quella specifica lettera.

4. Matematica binaria: addizioni e "trabocchi"

Sommare in binario è sorprendentemente simile a come facevamo a scuola, ma con una regola bizzarra: 1 + 1 fa 0 con il riporto di 1. È come se il nostro contatore non avesse spazio per il "2" e dovesse passare subito alla colonna successiva.

A volte, però, i computer incontrano un limite fisico: l'Overflow. Immaginate un contachilometri di una vecchia auto che arriva a 999.999; al chilometro successivo, torna a 000.000 perché non ha più spazio per le cifre. Nei computer accade lo stesso: se il risultato di un calcolo è troppo grande per lo spazio di memoria assegnato (ad esempio 8 bit), i bit "in eccesso" vengono persi, e il risultato finale appare drasticamente più piccolo di quello reale.

5. Non solo 0 e 1: il misterioso Esadecimale

Per evitare di scrivere stringhe lunghissime di zeri e uni (che farebbero impazzire i programmatori), si usa spesso l'Esadecimale. È un sistema a 16 cifre che usa i numeri da 0 a 9 e poi le lettere da A a F per indicare i valori da 10 a 15. È un modo "compatto" per leggere il binario: ad esempio, il colore bianco puro in un sito web è scritto come FFFFFF, che per il computer è una lunghissima sfilza di "1" accesi.

6. Il modello RGB: I tre colori primari della luce

Ogni volta che inviate un emoji o guardate un film in streaming, state assistendo a una danza frenetica di miliardi di minuscoli interruttori che si accendono e si spengono. Il linguaggio binario è l'essenza della semplicità che genera una complessità infinita.

Per capire come un computer visualizza un tramonto infuocato o il verde di un prato partendo solo da zeri e uni, dobbiamo pensare allo schermo come a un immenso mosaico composto da milioni di tessere minuscole: i pixel.

Ecco il processo che trasforma i numeri in colori, passo dopo passo:

A differenza della pittura (dove i colori primari sono rosso, giallo e blu), i computer usano il sistema RGB (Red, Green, Blue). Ogni singolo pixel dello schermo è composto da tre piccolissime "lampadine" di questi colori.

Mescolando la luce di queste tre lampadine a diverse intensità, il nostro occhio percepisce tutti i colori possibili:

  • Rosso + Verde + Blu (al massimo) = Bianco

  • Rosso + Verde = Giallo

  • Tutte spente = Nero

  • Getty Images

7. La "Profondità di Colore": Quanti bit per ogni pixel?

Per decidere quanto deve essere luminosa ogni "lampadina" (R, G o B), il computer assegna loro dei numeri. Nella maggior parte dei sistemi moderni, si usano 8 bit per ogni colore.

Ricordate il sistema binario? Con 8 bit possiamo rappresentare numeri da 0 a 255.

  • 0: La lampadina è completamente spenta.

  • 255: La lampadina è alla sua massima luminosità.

Poiché abbiamo tre colori (R, G, B) e ognuno ha 8 bit, ogni pixel "pesa" 24 bit. Questo sistema permette di creare $256 \times 256 \times 256$ combinazioni, ovvero oltre 16 milioni di colori diversi: una varietà superiore a quella che l'occhio umano riesce a distinguere!

8. Dal Binario all'Esadecimale: Il linguaggio dei grafici

Quando i designer o i programmatori scelgono un colore per un sito web, non scrivono lunghe stringhe di 0 e 1, ma usano il sistema Esadecimale (base 16) che abbiamo visto prima.

Un codice colore esadecimale è composto da 6 caratteri (due per il Rosso, due per il Verde, due per il Blu). Ad esempio:

  • #FF0000: Rosso al massimo (FF), Verde a zero (00), Blu a zero (00). Risultato: Rosso puro.

  • #00FF00: Risultato: Verde puro.

  • #808080: Una via di mezzo per tutti e tre. Risultato: Grigio.

9. Come viene memorizzata una foto?

Una fotografia digitale non è altro che una lunghissima lista di numeri. Il file (che sia un JPEG o un PNG) dice al computer:

  1. "Il pixel nella posizione (0,0) deve avere Rosso=200, Verde=50, Blu=30".

  2. "Il pixel a fianco deve avere Rosso=201..."

  3. E così via per milioni di volte.

Quando apri l'immagine, la scheda video legge questi numeri e invia la giusta quantità di corrente elettrica alle minuscole lampadine LED del tuo schermo.

10 Curiosità: Perché alcune foto "pesano" più di altre?

Se ogni pixel occupa 24 bit e una foto ha 12 megapixel (12 milioni di pixel), il file dovrebbe essere enorme. Per questo esistono gli algoritmi di compressione come il JPEG, che "riassumono" i numeri: invece di scrivere il colore di ogni singolo pixel, dicono "in quest'area di 10 pixel sono tutti quasi blu, scriviamoli tutti uguali per risparmiare spazio".

Commenti

Post popolari in questo blog

Corso di Programmazione Strutturata e OOP: 3 Ereditarietà incapsulamento polimorfismo

Corso di CSS & Web Design: 3 – Box Model e spaziature

Corso di CSS & Web Design: 7 – Responsive Design