Retrospective: Un mese di Vibe Coding estremo con Claude per il Local Storage nel gioco

0

Visite Totali
12 aprile 2026
Daniel LuIngegnere Full-Stack | Creatore di Contenuti

Una chiacchierata onesta sulla mia esperienza di "vibe coding" a ritmi folli con Claude Opus 4.6 nell'ultimo mese. Analizzo la fase di luna di miele e il ritorno alla realtà durante lo sviluppo di un sistema di reference counting per una cache Texture2D, e spiego perché l'intuito architettonico umano è l'unica cosa che ti salva dallo spaghetti code.

CategorieAISviluppo di Giochi

Nell'ultimo mese a lavoro mi sono buttato a capofitto nel "vibe coding" con Claude (di solito uso Gemini per i fatti miei). L'azienda ci ha concesso una quota API assurda per questo mese, e mi hanno piazzato a sviluppare una feature di local storage per la galleria fotografica del nostro gioco. Così, ho ribaltato il mio solito workflow: io avrei fatto l'architetto occupandomi della visione d'insieme, lasciando a Claude Opus 4.6 il ruolo del code monkey (quello che scrive il codice e basta).

Dopo un mese intero così, vi dico come stanno le cose: quando sai esattamente cosa vuoi, l'IA è un mostro. Ma nel momento esatto in cui inizi a modificare i requisiti o a fixare bug, l'esperienza umana è ancora al 100% insostituibile.

Quando sai cosa vuoi, spacca di brutto

Durante la fase di setup iniziale, finché gli davo paletti super rigidi, Claude sputava fuori esattamente quello di cui avevo bisogno.

Per esempio, per evitare la corruzione dei file della galleria, ho chiesto un sistema di sicurezza per i dati. Claude ha colto al volo e ha tirato fuori un pattern WAL (Write-Ahead Logging) perfetto, preso pari pari dal manuale di SQLite. Ha azzeccato in pieno la logica per i file temporanei, gli swap atomici e il crash recovery. A questo punto, se le tue specifiche sono chiare, l'IA fa il lavoro sporco alla perfezione e ti risparmia ore a scrivere boilerplate.

Ritorno alla realtà: la visione a tunnel dell'IA sui bugfix

Ma la luna di miele è finita appena abbiamo iniziato a ritoccare le feature e a risolvere i bug. È lì che i limiti di Claude escono tutti fuori.

Il punto debole più grande dell'IA è che ha zero visione globale. Quando c'è un conflitto di logica, la sua prima reazione è metterci una pezza (band-aid). Gli esalta buttare dentro flag booleani a caso o aprire nuovi rami di if-else invece di fare un passo indietro e integrare il fix in tutto il sistema in modo pulito. Se ascolti ciecamente l'IA in questa fase, il tuo codice diventerà un incubo da mantenere a tempo di record.

Una cappellata da manuale: Reference Counting della cache Texture2D

Ho sbattuto la testa contro un esempio da manuale mentre costruivo un sistema di reference counting per la cache Texture2D in C#.

L'obiettivo era gestire la memoria delle pagine dell'album. Ho diviso la cache in due zone: attiva e inattiva. Se una texture ha dei reference, resta attiva; se arrivano a zero, finisce nel pool inattivo, pronta per essere cestinata.

Tutto è andato in vacca quando ho mischiato i callback asincroni con i reference della cache. Claude ha scritto una logica di timing completamente sballata: buttava la pagina nel pool inattivo prima di marcare il reference. Questo ha generato una race condition letale. Se la cache era già piena, buttare la pagina nell'inattivo faceva scattare la pulizia all'istante, tritandola prima che il callback asincrono avesse la minima chance di marcare il reference.

L'idea geniale di Claude per fixare il bug? Aggiungere un flag zozzo chiamato is_early_marked alla struttura dati per raggirare del tutto il problema del ciclo di vita.

L'ho fermato subito. Conoscendo come funziona realmente il ciclo di vita del componente, gli ho dato una regola ferrea: ritarda tutta la pulizia della pagina inattiva fino a dopo che l'operazione asincrona ha marcato il reference. Aggiustando il timing a livello di architettura, il bug è stato disintegrato — senza bisogno di flag schifosi.

Tirando le somme

Tutta questa storia dimostra che l'IA ti fa scrivere codice a una velocità folle, ma nasconde con altrettanta facilità il debito tecnico.

Se un dev junior si fosse trovato davanti quel bug asincrono, probabilmente avrebbe solo mergiato il fix posticcio di Claude. Avanti veloce di qualche settimana, e ti ritrovi con una decina di flag e branch inutili, e un modulo completamente irrecuperabile. Con il vibe coding non devi scriverti ogni singola riga di codice, ma tenere d'occhio la visione d'insieme ed evitare che tutto diventi spaghetti code è un lavoro che solo gli esseri umani possono fare.