7 tecniche di codifica con AI che in silenzio ti trasformano in un esperto: il framework per mantenere i progetti IA pronti alla produzione
Innovazione
Siderale
Fin dal tempo delle schede perforate, mi sono identificato come programmatore e scienziato dell’informatica. Il lato di programmazione è la parte pratica della mia identità di ingegnere, quello che plasmava il codice riga per riga. Lo scienziato dell’informatica è invece il teorico, lo stratega e il pianificatore.
Mentre amo la teoria e la scienza dei computer, ho sempre apprezzato l’immediatezza del tocco delle dita sulle tastiere nel codificare. Probabilmente è simile a come alcuni artigiani preferiscono gli attrezzi manuali rispetto ai motorizzati per la sensazione più diretta di lavorare con il legno.
Peccato che non abbia mai avuto molto tempo da dedicare al codice. Il mio lavoro quotidiano si svolge come amministratore di una società, fondatore, educatore e scrittore. Sì, amo creare prodotti software, ma non sono riuscito a terminarne che uno piccolo all’anno usando i brevi spazi liberi della sera o del weekend.
Tutto ciò è cambiato nell’estate scorso. Ecco quando ho cominciato ad utilizzare strumenti di codifica agente come il Codex e Claude Code dell’OpenAI.
Da settembre, ho costruito e lanciato quattro prodotti principali (aggiunte all’estensione WordPress per la sicurezza), sviluppato un’app funzionante per iPhone che gestisce i filamenti delle stampanti 3D, e sto per arrivare alla versione beta di un’app richiesta dalla mia moglie per gestire le forme da cucire. Le ultime due stanno venendo sviluppate simultaneamente per iPhone, iPad, orologio Apple e Mac.
Come singolo programmatore, l’IA è stata una forza moltiplicatrice quasi impressionante.
In questo articolo andrò a descrivere sette pratiche ottimali che utilizzo. Queste pratiche mi aiutano a lavorare con l’intelligenza artificiale come partner e generano prodotti di qualità adeguata per il loro uso in produzione. Alla fine, condividerò anche una pratica bonus che si rivela utile più spesso del previsto.
Questo è il codice guidato dall’IA. Ma è un codice guidato con disciplina ingegneristica e una struttura sottostante progettata per robustezza e qualità dei prodotti. Se volete usare l’intelligenza artificiale per costruire le vostre applicazioni, seguite queste pratiche.
Gli elementi elencati di seguito sono specifiche e deliberatamente introdotte nelle mie procedure lavorative.
La maniera in cui le rendo durevoli è aggiungendole ai file “ini” per l’IA, ai CLAUDE.MD e AGENTS.MD. Ho anche aggiunto altri documenti utilizzati per registrare il progetto stesso. Descriverò questi ultimi con più dettaglio mentre procedete a leggere questo articolo.
Iniziamo con la mia prima pratica ottimale, codificata quando ho scoperto che il comportamento dell’agente in Xcode era poco affidabile per più processi paralleli.
Proseguite fino alla fine perché l’indispensabile pratica bonus può essere davvero un cambiamento di gioco.
Le aziende di intelligenza artificiale vantano la nuova capacità di eseguire agenti multipli in parallelo. Tuttavia, gestire più agenti in parallelo è molto difficile, specialmente quando non si vede cosa stanno facendo tutti insieme.
Peggio ancora, ho scoperto che questa approccio causa crash e blocchi, lasciando i progetti in limbo. Finché questo non diventa una tecnica gestibile e visibile, voglio eseguire un solo agente alla volta.
La gestibilità deve prevalere sulla velocità, specialmente quando gli agenti nascondono molto più di quel che si vedrebbe riga per riga se uno codificasse tutto da sé.
Regola: “Non utilizzare agenti in background o attività in background. Non suddividere in più agenti. Processare i file UNO A VOLTA, sequenzialmente. Aggiornare regolarmente l’utente su ogni passaggio.” In questa regola, “l’utente” è me, dato che riguarda le istruzioni date all’intelligenza artificiale sul proprio utilizzo.
Perché è ottimale: Ho imparato la dura via. Claude sembrava apprezzare l’avvio di agenti paralleli in Xcode. Ma dopo qualche volta in cui uno o più agenti paralleli si sono bloccati, sono diventati non rispostivi e hanno dovuto essere uccisi, lasciando i cambiamenti del codicebase a metà e nello stato incerto, ho perso la pazienza.
Il principio: Ho scelto la lentezza ma visibile sulla velocità opaca. Sì, ammetto che aspettare l’intelligenza artificiale può diventare noioso. Ma preferisco la prevedibilità e ripristinabilità rispetto alla rapidità precipitosa ogni volta.
I miei due progetti Apple stanno per essere sviluppati su quattro piattaforme ciascuno: Mac, iPhone, Watch e iPad. Le capacità ed i pannelli di interfaccia di questi dispositivi sono molto diversi, specialmente per le mie applicazioni che dipendono dalla NFC (disponibile solo sull’iPhone) e altre funzioni più adatte a diverse piattaforme.
Ad esempio, nell’applicazione pattern di cucitura, c’è un componente d’intelligenza artificiale molto potente per la scansione e la categorizzazione dei PDF importati dal file system Mac, che rappresenta una workflow meno probabile da utilizzare sull’Iphone.
Il problema qui è che quando lavoro su una piattaforma, non voglio perdere traccia delle modifiche per gli altri. Quindi ho dettagli sul come migrare i cambiamenti di ambito ampio. Questi dettagli sono specificamente codificati come un artefatto osservabile, tracciato e riferibile.
Regola: “Ogni volta che fai una modifica ad un’applicazione che dovrebbe essere applicata anche a iOS, iPad, Mac o Watch applicazioni, registra in Docs/IOS_CHANGES_FOR_MIGRATION.md. Includere: data, file cambiati, quali piattaforme si applicano, cosa specificamente ha cambiato (valori vecchi ai nuovi se utili, snippet di codice se utile), eventuali note sulle adattazioni piattaforma-specifiche completate e/o necessarie.”
Perché è ottimale: Non mi fido me stesso (o dell’intelligenza artificiale) a ricordare modifiche attraverso sessioni. All’interno dell’IA, ho costruito un registro di cambiamenti strutturato che funge da checklist di migrazione per portare altre piattaforme al parità.
Lo uso come uno strumento operativo per prevenire la deriva tra le diverse piattaforme.
Il principio: Ogni modifica genera una richiesta di debito tecnico per ogni piattaforma a cui non è ancora arrivata.
Entrambi l’IA e io apprendiamo molto quando costruiamo queste applicazioni. Alcune tecniche che proviamo falliscono, altre diventano migliori pratiche.
Come parte del processo, faccio sì che l’intelligenza artificiale costruisca una base di conoscenza colma da questi apprendimenti. Per una migliore classificazione e accesso più facile, faccio in modo che l’IA organizzi la base di conoscenza per argomenti piuttosto che note aggiunte alla fine di un log.
Regola: Faccio sì che l’intelligenza artificiale mantenga una MEMORY.md che persiste attraverso le conversazioni, organizzata per argomenti (non cronologicamente), con file separati per note dettagliate. Ho dato all’IA questa istruzione: “Aggiorna o rimuovi memorie risultanti errate o obsolette. Non scrivere duplicati.”
Perché è ottimale: Le sessioni dell’intelligenza artificiale sono a stato di default, ma volevo conservare informazioni sullo stato.
Gettare tutto in un file registro avrebbe creato disordine e sarebbe inefficiente. Invece ho fatto costruire e mantenere una base di conoscenza curata dall’IA che l’intelligenza artificiale legge alla riavvio. La base di conoscenza ha firme API, algoritmi di classificazione, misurazioni layout, ed insegnamenti arduamente conquistati (esempi tangibili dove ci è preso tempo per capire come fare una cosa).
Il principio: Questi insegnamenti e apprendimenti possono essere applicati più avanti lungo la strada della sviluppo, o a progetti gemelli che utilizzano lo stesso struttura fondamentale. Non reinventare la ruota.
Confrontato ad questo, anche voglio che l’intelligenza artificiale registri cronologicamente ogni istruzione che le do.
Questa è una grande maniera per fare riferimento a ciò che era stato lavorato prima, specialmente quando non ritorno al progetto per giorni o addirittorio settimane.
Inoltre questa approccio permette di tornare indietro e vedere se il mio invito era insufficiente o fuorviante, oppure se qualche altro fattore legato all’invito avesse causato un fallimento o fosse risultato un successo forte.
[object Object]
