Ciao, e benvenuto nella prima puntata della sessantaquattresima stagione di questo podcast. Oggi apriamo una stagione che scende più in basso di tutte: fino al fondo, al piano terra su cui poggia ogni programma che sia mai stato scritto. Andiamo a vedere il linguaggio che il processore capisce davvero, quando ogni comodità sparisce e resta solo la macchina nuda. Oggi cominciamo a parlare di assembly.
Partiamo dalla magia, perché è quella in cui viviamo ogni giorno. Quando scrivi un programma, usi concetti comodi e umani: un ciclo che ripete qualcosa, una funzione con un nome che spiega cosa fa, una variabile chiamata come vuoi tu, magari un oggetto che rappresenta un cliente o una fattura. Tutto è pensato per la tua mente, per essere leggibile e sensato. È una magia meravigliosa, che ti permette di ragionare per idee, e non per dettagli. Ma il processore, il cuore fisico del computer, non capisce niente di tutto questo. Non sa cosa sia un ciclo, una funzione, un cliente. Quel linguaggio umano, prima di essere eseguito, viene tradotto in qualcosa di completamente diverso.
Ed è qui che entra l'assembly. L'assembly è la forma leggibile del linguaggio vero della macchina. È il gradino più basso a cui un essere umano può ancora scrivere e leggere qualcosa, un soffio sopra i puri numeri che il processore mastica. Ogni riga di assembly corrisponde quasi esattamente a una singola, minuscola operazione che il processore sa fare. È una corrispondenza quasi uno a uno: dove nei linguaggi comodi una sola riga può nascondere montagne di lavoro, qui una riga è un solo gesto, il più piccolo possibile. Non ci sono più cicli eleganti, né funzioni dal nome parlante: ci sono ordini elementari, spartani, dati uno alla volta a una macchina che li esegue alla lettera, senza capirli.
Voglio darti subito il primo pilastro, perché ribalta l'intuizione. Il primo pilastro è che il processore è incredibilmente stupido. Fa pochissime cose, e tutte banali: sposta un numero da un posto a un altro, somma due numeri, ne confronta due, salta a un altro punto delle istruzioni. Non c'è intelligenza, non c'è comprensione. Tutta la potenza sconfinata di un computer non nasce dalla furbizia di ogni singola operazione, che è quasi ridicola, ma dalla velocità con cui ne fa miliardi al secondo. È la ripetizione fulminea di gesti stupidi a creare la magia. Pensa a quanti sono: miliardi di piccoli passi ogni secondo, ognuno insignificante da solo, che insieme fanno girare un intero sistema, un videogioco, un sito che serve migliaia di persone.
Ecco il secondo pilastro, ed è altrettanto spiazzante. Il secondo pilastro è che, a questo livello, esistono solo numeri. Non ci sono variabili con un nome, non ci sono tipi di dato, non ci sono parole. Ci sono soltanto numeri, custoditi in due luoghi: pochissimi cassetti velocissimi dentro il processore, e un immenso magazzino, la memoria, dove ogni posto ha un suo indirizzo, che è anch'esso un numero. Perfino il programma stesso, le istruzioni da eseguire, è fatto di numeri. Capire l'assembly significa in fondo accettare questo: sotto ogni nome elegante che scrivi, ci sono solo numeri che si spostano.
Ti starai chiedendo perché mai, oggi, dovrebbe interessarti tutto questo. Quasi nessuno scrive più interi programmi in assembly, ed è giusto così. Ma conoscerlo cambia tutto il resto. Quando capisci cosa succede davvero quaggiù, smetti di vedere i linguaggi come scatole magiche e cominci a capire perché certe cose sono veloci e altre lente, perché un programma va in crisi, cosa significano davvero certi errori misteriosi. È la differenza tra guidare un'auto e sapere anche cosa c'è sotto il cofano. Non ti serve tutti i giorni, ma il giorno che serve, cambia tutto.
Colleghiamolo alla frase di sempre di questo podcast: capire la macchina sotto la magia. Be', in questa stagione la macchina non è più una metafora: è la macchina, letteralmente, nella sua forma più nuda e onesta. La magia è tutto ciò che scrivi con comodità, per idee. La macchina sotto è questa: pochi ordini banali, ripetuti a velocità inumana, che spostano numeri tra cassetti e magazzino. Non c'è niente di più sotto. Sotto l'assembly ci sono solo i numeri veri, e poi il silenzio dell'elettronica.
Per oggi ci fermiamo qui. Abbiamo aperto la stagione sull'assembly, il linguaggio della macchina nuda. La magia è il codice comodo e umano che scrivi, fatto di cicli, funzioni, nomi. Ma il processore non capisce nulla di tutto questo: quel codice viene tradotto in ordini elementari, e l'assembly è la loro forma leggibile. Due pilastri per la stagione. Primo: il processore è stupido, fa solo cose banali, ma miliardi di volte al secondo. Secondo: a questo livello esistono solo numeri, custoditi in pochi cassetti velocissimi e in un immenso magazzino. Conoscere tutto questo non serve ogni giorno, ma cambia il modo in cui vedi ogni programma. Nella prossima puntata: il processore è stupido, e perché questo è il suo segreto. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.