🤖 Vibe Coding con Delphi: Quando l'Intelligenza Artificiale Diventa il Tuo Pair Programmer
⚡ Una Rivoluzione Silenziosa nello Sviluppo Software
C'è un nuovo modo di sviluppare software che sta cambiando radicalmente le regole del gioco. Si chiama Vibe Coding e, dopo averlo sperimentato personalmente con Delphi, posso affermare senza esitazione: non tornerò più indietro.
Ma attenzione: non sto parlando di un giocattolo per principianti o di un assistente che completa qualche riga di codice. Sto parlando di un sistema che, sotto la guida di uno sviluppatore esperto, è in grado di estendere librerie complesse, implementare nuovi componenti seguendo pattern esistenti, e — questa è stata la vera sorpresa — modificare direttamente i form VCL e FMX, manipolando quei file .dfm e .fmx che da sempre consideriamo territorio esclusivo dell'IDE di Delphi.
🎯 Cos'è il Vibe Coding?
Il termine "Vibe Coding" descrive un approccio allo sviluppo in cui lo sviluppatore guida un agente AI attraverso istruzioni di alto livello, delegando l'implementazione dei dettagli. Non si tratta di abdicare al proprio ruolo: al contrario, richiede una comprensione profonda dell'architettura, dei pattern e degli obiettivi del progetto.
L'AI diventa un estensione delle tue capacità, un collaboratore instancabile che:
- Analizza codebase esistenti per comprenderne struttura e convenzioni
- Propone implementazioni coerenti con lo stile del progetto
- Esegue refactoring su larga scala mantenendo la consistenza
- Scrive codice Pascal idiomatico e ben strutturato
Ma la vera magia accade quando c'è uno sviluppatore senior al timone, capace di:
- Definire obiettivi chiari e specifici
- Verificare la qualità del codice prodotto
- Correggere la rotta quando necessario
- Integrare le modifiche nel contesto più ampio del progetto
🛠️ Lo Strumento: Claude Code
Per questa sperimentazione ho utilizzato Claude Code, lo strumento a riga di comando di Anthropic che permette di interagire con Claude direttamente dal terminale, con accesso completo al filesystem del progetto, anche in più sessioni parallele.
▶️ Iniziare un Nuovo Progetto: Il Comando /init
Ogni sessione di lavoro con Claude Code inizia con un passo fondamentale: la creazione del file CLAUDE.md. Questo documento diventa la "memoria" del progetto, contenendo:
- Descrizione del progetto e dei suoi obiettivi
- Struttura delle directory e convenzioni di naming
- Pattern architetturali utilizzati
- Dipendenze e requisiti
- Note specifiche per lo sviluppo
claude
> /init
Il comando /init analizza il progetto e genera automaticamente un file CLAUDE.md che cattura il contesto. Questo file può (e deve) essere arricchito manualmente con informazioni che solo lo sviluppatore conosce.
Esempio di file CLAUDE.md di progetto
🖼️ Caso 1: Estensione di SVGIconImageList con un Nuovo Engine di Rendering
🎯 La Sfida
SVGIconImageList è una libreria che permette di utilizzare icone SVG come ImageList in applicazioni Delphi. Supporta diversi engine di rendering (Image32, Skia4Delphi, TSVG, ecc.), ciascuno implementato attraverso un'interfaccia comune ISVG.
L'obiettivo era ambizioso: aggiungere il supporto per SVGMagic, un engine che personalmente non conoscevo affatto. Volevo vedere se Claude Code potesse non solo implementare il codice, ma anche insegnarmi qualcosa di nuovo su una libreria a me sconosciuta.
🔄 Il Processo: Un Dialogo Iterativo
Per capire come Claude Code analizza e comprende un progetto, potete consultare il file CLAUDE.md di SVGIconImageList: noterete come cattura l'architettura degli engine, le convenzioni di naming e la struttura delle directory.
Ho chiesto a Claude di sviluppare la unit che implementa l'interfaccia ISVG per SVGMagic, seguendo la struttura delle altre factory già presenti nel progetto.
Prima iterazione: errori di compilazione
La prima versione conteneva alcuni errori di compilazione. Niente di grave: glieli ho sottoposti e li ha corretti immediatamente. Questo è un pattern ricorrente nel Vibe Coding: l'AI è veloce ma a volte un po' sbadata. Il processo di scrittura è diverso dal processo di analisi e correzione, e spesso servono due passaggi distinti. Al secondo tentativo avevo già una unit compilabile.
😲 La sorpresa: "Vuoi che modifichi anche il DFM?"
Per testare il nuovo engine serviva estendere la demo SVG, che mostrava tre engine affiancati in altrettanti frame. Ed è qui che è arrivata la prima grande sorpresa.
Claude ha analizzato la struttura della MainForm e ha riconosciuto autonomamente il pattern: tre frame, uno per ciascun engine esistente. Senza che glielo chiedessi, mi ha proposto di aggiungere un quarto frame per SVGMagic e — rullo di tamburi — mi ha chiesto: "Vuoi che modifichi anche il file DFM?"
Confesso di essere rimasto a bocca aperta. I file DFM sono sempre stati territorio esclusivo dell'IDE di Delphi. L'idea che un'AI potesse manipolarli con cognizione di causa sembrava fantascienza. Gli ho descritto dove posizionare il nuovo frame e... ha fatto il lavoro al primo colpo.
🐛 Debug collaborativo: il canvas che non si puliva
Alla prima compilazione della demo, l'engine funzionava: il file SVG veniva renderizzato correttamente. Ma c'era un problema: cambiando file, il nuovo disegno si sovrapponeva al precedente.
Gli ho descritto esattamente cosa accadeva nella demo. Claude ha immediatamente capito il problema: il canvas non veniva pulito prima di essere riutilizzato. Ha riscritto il codice per gestire correttamente la pulizia del canvas, ottimizzando anche le performance. Problema risolto.
⚙️ Implementazione progressiva delle feature
Con la base funzionante, abbiamo proceduto a implementare le altre funzionalità richieste dall'interfaccia ISVG:
- Scala di grigi: Claude ha valutato se SVGMagic avesse supporto nativo (non c'era) e ha scritto codice di manipolazione della bitmap
- Opacità: stessa analisi, implementazione custom sulla bitmap generata
- FixedColor: applicazione di un colore fisso all'intera icona
Per ogni feature, il processo era lo stesso: Claude analizzava le API di SVGMagic, verificava la presenza di supporto nativo, e quando mancava implementava la logica di post-processing sulla bitmap. Codice tutt'altro che banale, scritto correttamente.
💡 L'ottimizzazione finale: quando lo sviluppatore fa la differenza
L'ultima richiesta era applicare il FixedColor solo all'elemento root dell'SVG. Claude ha scritto una soluzione funzionante basata su parsing e manipolazione del file SVG tramite RegEx. Il codice era lungo e complesso.
A quel punto sono intervenuto io: "In SVGMagic è disponibile una piccola libreria per la manipolazione XML chiamata Xml.VerySimple.pas. Puoi usare quella?"
Claude ha completamente riscritto la funzione usando la libreria XML, producendo codice più pulito, più robusto e più performante. Questo è il cuore del Vibe Coding: l'AI ha le capacità tecniche, ma lo sviluppatore esperto conosce il contesto e può indirizzare verso soluzioni migliori.
Nell'immagine, la versione di SVGViewer con il quarto frame aggiuntivo che utilizza il nuovo engine SVGMagic.
✅ Il Risultato
Il codice prodotto da Claude è oggi parte integrante del progetto SVGIconImageList. Potete trovarlo su GitHub nel file Source/SVGMagicFactory.pas.
Mi è sembrato giusto citare Claude nei contributor del progetto. A ben guardare, tutto quel codice è "suo" — ma senza la guida di uno sviluppatore che conosceva l'architettura del progetto, le convenzioni da rispettare, e le librerie disponibili, quel codice non sarebbe mai nato.
🎨 Caso 2: Creazione di TStyledPanel per StyledComponents
🎯 La Sfida
StyledComponents è una libreria che fornisce componenti VCL stilizzati con un sistema flessibile di theming. L'obiettivo era creare un nuovo componente TStyledPanel, mantenendo piena coerenza con l'architettura esistente.
🧭 Il Processo: Guida Esperta dall'Inizio
Anche per questo progetto potete consultare il file CLAUDE.md di StyledComponents: vedrete come Claude Code ha mappato l'architettura dei componenti stilizzati, il sistema di theming e le convenzioni della libreria.
A differenza del primo caso, dove ho lasciato più libertà esplorativa a Claude, qui ho deciso di guidarlo fin da subito in modo molto preciso. L'esperienza con SVGIconImageList mi aveva insegnato che più contesto fornisci, migliori sono i risultati.
📐 Istruzioni architetturali precise
Ho spiegato a Claude la logica fondamentale di tutti gli StyledComponents, basata su tre parametri chiave:
- StyleFamily: la famiglia di stili (Classic, Bootstrap, Angular, ecc.)
- StyleClass: la classe specifica all'interno della famiglia
- StyleAppearance: l'aspetto visivo (Normal, Outline, ecc.)
Ho poi specificato una differenza cruciale: mentre gli StyledButton gestiscono 5 stati (Normal, Pressed, Selected, Hot, Disabled), per gli StyledPanel ne servivano solo 2 (Normal e Disabled). Questo tipo di indicazione architetturale è fondamentale: l'AI non può indovinare le scelte di design, deve essere guidata.
🏗️ Indicazioni precise sulla classe base
Ho istruito Claude su quale unit della libreria prendere come riferimento per il rendering, specificando che il componente doveva derivare da TCustomPanel — esattamente come altri componenti della libreria derivano dalle rispettive classi base di Delphi, intervenendo solo sul meccanismo di rendering personalizzato.
🔁 Il pattern consolidato: doppio passaggio
Anche qui si è confermato il pattern del primo caso: prima stesura con alcuni errori di compilazione, correzione immediata dopo averglieli segnalati, e stesura finale funzionante. Ormai sapevo cosa aspettarmi: l'AI è velocissima ma va verificata.
😲 La Sorpresa (bis): Integrazione completa della Demo
Forte dell'ottima esperienza con SVGIconImageList, ho alzato l'asticella. La libreria StyledComponents include una demo generale che mostra tutti i componenti attraverso form specifiche, navigabili tramite un Menu nella MainForm.
Ho chiesto a Claude di:
- Creare una nuova form demo per TStyledPanel
- Ispirarsi a una form esistente che gli ho indicato
- Utilizzare un PageControl per mostrare il pannello con tutte e 5 le StyleFamily disponibili
- Integrare la nuova form nella demo principale
Claude ha fatto tutto da solo.
Ha analizzato la struttura della demo esistente e ha scoperto autonomamente come le form vengono mostrate "embedded" nella MainForm, come il CategoryButton gestisce la navigazione, come aggiornare il menu per includere la nuova voce, e le convenzioni di naming dei file e delle form.
Ha creato la form da zero, completa di DFM, con il PageControl configurato correttamente per le 5 Family. Ha modificato la MainForm per aggiungere la voce nel CategoryButton. Ha aggiornato il progetto. Tutto al primo colpo.
✅ Il Risultato: Quasi Mille Righe di Codice
Il componente TStyledPanel è oggi parte integrante della libreria StyledComponents. Potete trovare il codice su GitHub nel file Source/Vcl.StyledPanel.pas: quasi mille righe di codice scritte interamente da Claude Code.
E mentre Claude scriveva, debuggava, creava form e aggiornava demo... io mi gustavo l'ennesima vittoria di Sinner in TV. 🎾
Questo è il Vibe Coding nella sua essenza: tu guidi, l'AI esegue, e ti resta tempo per fare altro.... Non significa essere pigri — significa essere efficienti. Le istruzioni architetturali che ho fornito richiedevano competenza ed esperienza. Ma una volta definita la direzione, perché dovrei scrivere mille righe di codice a mano quando posso delegarle?
🔄 Caso 3: Refactoring di un Progetto MVC Cross-Platform
🎯 La Sfida: VCL e FMX Insieme
Il progetto Delphi_MVC è un esempio didattico che ho presentato al DelphiDay di Piacenza (Giugno 2025), nel quale mostravo come sviluppare una calcolatrice "standard" attraverso il pattern Model-View-Controller, condividendo Model e Controller tra due progetti separati: uno VCL e uno FMX.
Con questo terzo esperimento volevo misurare le competenze di Claude Code su due fronti:
- Design pattern classici: quanto bene comprende l'architettura MVC?
- Cross-platform VCL/FMX: riesce a distinguere le due librerie grafiche?
Il secondo punto era cruciale. In passato avevo notato che spesso le AI fanno confusione tra VCL e FMX: hanno nomi di componenti comuni (es. TButton, TLabel, TPanel) ma logiche di funzionamento, proprietà e gerarchie completamente diverse. Un errore tipico è applicare proprietà VCL a componenti FMX o viceversa.
🖥️ Fase 1: Refactoring della Versione VCL
Il file CLAUDE.md del progetto Delphi_MVC mostra come Claude Code ha compreso la struttura MVC, la separazione tra le versioni VCL e FMX, e le convenzioni del progetto didattico.
Ho chiesto a Claude di ristrutturare la parte visuale del progetto VCL:
- Creare una MainForm che fungesse da contenitore di Frame
- Implementare un menu a scomparsa (SplitView + CategoryButton)
- Permettere la scelta tra calcolatrice standard e scientifica
Il primo passo richiedeva di "spostare" tutta la parte visuale dalla MainForm esistente verso un Frame dedicato che diventasse la View per il Model della calcolatrice standard. Un lavoro di refactoring non banale, che toccava la separazione delle responsabilità, la gestione degli eventi, il collegamento tra View, Model e Controller, e la modifica coordinata di file .pas e .dfm.
Claude ha eseguito tutto senza problemi, dimostrando una comprensione solida del pattern MVC e della struttura dei progetti Delphi.
Il file Calculator.CalculatorFrame.pas su GitHub.
📈 Alzare l'asticella: la calcolatrice scientifica
Visto il successo, ho chiesto di implementare anche una calcolatrice scientifica con funzioni aggiuntive (trigonometriche, logaritmiche, ecc.). Gli ho descritto dove volevo i nuovi pulsanti nel layout.
Claude ha creato un nuovo Frame per la calcolatrice scientifica, aggiornato il Model con le nuove operazioni, esteso il Controller per gestire i nuovi comandi, e modificato la MainForm per navigare tra i due frame. Tutto in autonomia, mantenendo la coerenza architetturale del pattern MVC.
📱 Fase 2: La Sfida FMX — "Non Sono Esperto, Pensaci Tu"
Qui ho voluto testare i limiti. Ho detto a Claude:
"Devi fare la stessa cosa per la versione FMX: uso di Frame, menu a scomparsa. Ma non sono esperto di FMX e non so quali siano i componenti adatti. Trova tu la soluzione migliore."
Era una richiesta volutamente vaga. In VCL avevo specificato SplitView e CategoryButton. Per FMX lasciavo carta bianca.
Claude ha scelto i componenti giusti.
Per il menu a scomparsa ha utilizzato TMultiView con TListBox — esattamente la combinazione idiomatica per FMX. Ha implementato correttamente i Frame per entrambe le calcolatrici, gestendo le differenze tra VCL e FMX: proprietà diverse per il posizionamento, sistema di ancoraggio differente, gestione degli stili FMX, eventi con signature diverse.
Non ha fatto confusione tra le due librerie. Non ha applicato proprietà VCL a componenti FMX. Ha prodotto codice idiomatico per ciascuna piattaforma.
📝 Fase 3: Documentazione e Git
Come tocco finale, ho chiesto a Claude di descrivere il lavoro svolto per la commit su GitHub e scrivere la documentazione direttamente nel codice.
Claude ha prodotto commenti esplicativi per classi e metodi, documentazione del codice Pascal, un messaggio di commit dettagliato e professionale, e l'aggiornamento del README del progetto.
In un progetto didattico, la documentazione è fondamentale. E con l'AI che la scrive per te, non ci sono più scuse per consegnare codice non documentato.
✅ Il Risultato
Il progetto Delphi_MVC su GitHub ora include:
- Versione VCL con MainForm, Frame, menu a scomparsa, due calcolatrici
- Versione FMX equivalente con componenti idiomatici
- Codice completamente documentato
- Architettura MVC pulita e didatticamente chiara
Claude ha dimostrato di comprendere i design pattern classici, distinguere correttamente VCL e FMX, scegliere componenti appropriati anche senza indicazioni specifiche, e produrre documentazione di qualità.
📚 Bonus: Documentazione Tecnica con VitePress
✍️ Quando l'AI Scrive Anche i Manuali
I tre casi d'uso descritti finora riguardavano lo sviluppo di codice. Ma c'è un altro aspetto dello sviluppo software che spesso viene trascurato (o rimandato all'infinito): la documentazione.
Sia SVGIconImageList che StyledComponents hanno siti di documentazione realizzati con VitePress, il generatore di siti statici basato su Vue.js, perfetto per documentazione tecnica.
Ho chiesto a Claude Code di aggiornare la documentazione esistente per riflettere le nuove funzionalità e creare una sezione "Reference" completa con la descrizione di tutte le classi, proprietà, metodi e eventi.
🔍 Il Processo
Claude ha analizzato la struttura VitePress dei progetti, comprendendo l'organizzazione delle directory e dei file markdown, la configurazione della sidebar e della navigazione, le convenzioni stilistiche già in uso, e il codice sorgente Delphi da cui estrarre le informazioni per la Reference.
Ha poi generato pagine markdown complete, con descrizioni accurate di ogni componente, tabelle di proprietà con tipi e valori di default, documentazione dei metodi con parametri e valori di ritorno, esempi di codice contestuali, e link interni tra le varie sezioni.
✅ Il Risultato
Entrambi i siti di documentazione ora includono sezioni Reference complete e professionali:
Pagine che avrebbero richiesto giorni di lavoro noioso — leggere il codice, estrarre le informazioni, formattarle in markdown, verificare la consistenza — sono state generate in pochi minuti.
E la qualità? Eccellente. Claude non si limita a copiare i commenti dal codice: produce descrizioni leggibili, contestualizza le informazioni, e mantiene uno stile coerente in tutta la documentazione.
Con l'AI, la scusa "non ho tempo per la documentazione" non regge più. ⏰
💭 Riflessioni: L'AI come Amplificatore delle Competenze
Dopo queste esperienze, ho maturato alcune convinzioni:
👨💻 L'Esperto Rimane Indispensabile
L'AI non sostituisce lo sviluppatore: lo amplifica. Senza la capacità di definire obiettivi chiari e architetturalmente sensati, valutare la qualità del codice prodotto, integrare le modifiche nel contesto più ampio del progetto, correggere errori e indirizzare verso soluzioni migliori... l'AI produrrebbe codice mediocre o inadatto. La differenza la fa la guida umana.
In tutti e tre i casi, le mie indicazioni architetturali sono state decisive: dai 2 stati vs 5 stati degli StyledPanel, alla scelta di Xml.VerySimple.pas per SVGMagic, fino alla richiesta esplicita di usare Frame e menu a scomparsa per il progetto MVC.
🏆 Delphi è un Cittadino di Prima Classe
Claude dimostra una conoscenza sorprendentemente profonda di Object Pascal e dell'ecosistema Delphi:
- Sintassi corretta e idiomatica
- Comprensione di VCL e FMX senza fare confusione
- Gestione di componenti, proprietà, eventi
- Manipolazione di file DFM/FMX
- Conoscenza dei design pattern applicati a Delphi
Questo sfata il mito che gli strumenti AI siano utili solo per linguaggi mainstream come Python o JavaScript.
📈 La Produttività Esplode
Operazioni che avrebbero richiesto ore o giorni vengono completate in minuti. Non perché l'AI sia più veloce a digitare, ma perché non si stanca mai, può analizzare grandi codebase istantaneamente, applica modifiche consistenti su molti file, non dimentica convenzioni o pattern, e scrive documentazione senza lamentarsi.
🚀 Conclusione: Questo è Solo l'Inizio
Quello che ho descritto in questo articolo rappresenta un utilizzo base di Claude Code. Non abbiamo nemmeno sfiorato le funzionalità più avanzate che la versione 2 mette a disposizione:
- ⚡ Esecuzione parallela degli strumenti: Claude può lanciare più operazioni contemporaneamente, accelerando ulteriormente il flusso di lavoro
- 🧠 Gestione contestuale avanzata: memoria persistente tra sessioni, comprensione più profonda del progetto nel tempo
- 🔀 Integrazione nativa con Git: commit, branch, merge gestiti direttamente dall'AI con messaggi significativi
- 📦 Package managers e build systems: interazione diretta con i sistemi di build del progetto
- 🔌 MCP (Model Context Protocol): un protocollo aperto per connettere Claude a qualsiasi fonte di dati o strumento esterno
Ci sarà tempo per esplorare tutto questo. Per ora, il messaggio che voglio lasciare è un altro.
📢 Agli Sviluppatori Delphi: Non Aspettate l'Integrazione nell'IDE
So cosa state pensando: "Bello, ma quando arriverà un plugin per RAD Studio?"
La mia risposta è: non aspettate.
La mancanza di un'integrazione diretta nell'IDE di Delphi non è un ostacolo. Claude Code funziona da terminale, accede al filesystem, legge e scrive qualsiasi file — inclusi i .pas, i .dfm, i .fmx, i .dproj. Non ha bisogno di un plugin per essere produttivo.
Anzi, in un certo senso la modalità terminale è più potente: hai il controllo completo, vedi esattamente cosa sta facendo, puoi interrompere e correggere in qualsiasi momento. È pair programming puro, senza intermediari.
💰 I Soldi Sono Ben Spesi
Claude Code richiede un abbonamento. È un investimento. Ma dopo aver visto scrivere quasi mille righe di codice per TStyledPanel mentre guardavo una partita di tennis, dopo aver aggiunto un engine di rendering a una libreria che non conoscevo, dopo aver refactorizzato un progetto cross-platform con documentazione inclusa... posso dirvi con certezza: i soldi sono ottimamente spesi.
Il ROI si misura in ore risparmiate, in codice di qualità prodotto, in progetti che avanzano invece di stagnare. E soprattutto, in quel senso di meraviglia quando vedi l'AI proporre di modificare un file DFM e lo fa correttamente al primo colpo.
✨ Il Futuro è Già Qui
Il Vibe Coding non è fantascienza: è uno strumento disponibile oggi, che funziona oggi, con Delphi.
Se sei uno sviluppatore Delphi che vuole moltiplicare la propria produttività senza sacrificare la qualità, ti invito a provare questo approccio. Non per sostituire le tue competenze, ma per amplificarle in modi che fino a ieri sembravano impossibili.
La sorpresa più grande? Vedere l'AI modificare un file .dfm con la stessa naturalezza con cui scrive codice Pascal. Quel momento in cui realizzi che il confine tra "ciò che può fare solo l'IDE" e "ciò che può fare l'AI" si è spostato drammaticamente.
Benvenuti nel futuro dello sviluppo Delphi. 🚀