Tutti gli articoli

Come programmare con l'AI senza diventarne dipendenti

Ascolta l'articolo (sperimentale) · 07:53

00:00 / 07:53

Un flusso di blocchi di codice che converge verso un unico checkpoint luminoso; solo ciò che passa si fissa in una griglia pulita e conservata

È diventata in sordina una delle domande che uno sviluppatore si pone più spesso ad alta voce: come faccio a programmare senza diventare completamente dipendente dall'AI? Chi la pone è spesso l'ultima persona da cui te lo aspetteresti. Uno studente di informatica capace di superare gli esami di teoria, ma che ogni progetto vero l'ha costruito con un modello al fianco, e che ora non riesce a scrivere una funzione senza ricorrervi. Un ingegnere in attività che si accorge, un pomeriggio qualunque, di non digitare una riga senza aiuto da settimane. La risposta di sempre torna rapida e pressoché unanime, ed è giusta per esattamente un tipo di persona e sbagliata per quasi tutti quelli che la pongono.

La risposta è: togliere la stampella.

Disdici l'abbonamento. Disinstallalo. Programma offline, come se fosse il 2010. Le metafore arrivano puntuali, e alcune sono azzeccate. Le rotelle avvitate all'unica bicicletta che possiedi. Copiare a un esame. Una calcolatrice. La versione più tagliente: l'AI era una sedia a rotelle di cui non hai mai avuto bisogno, i tuoi muscoli da programmatore si sono atrofizzati, e l'unico modo per rinforzarli di nuovo è portare il peso da solo.

Se sei uno studente che sta imparando le basi, quel consiglio è corretto e non lo attenuerò. Non puoi costruire un modello mentale di un problema se ogni volta è una macchina a costruire la soluzione al posto tuo. La versione più attenta dell'avvertimento individua il vero pericolo con precisione: non è usare l'AI, è lasciare che l'AI salti la parte in cui il tuo cervello costruisce il modello del problema. Per quella persona, la stampella deve sparire, perché il senso dell'esercizio non è mai stato il programma funzionante. Erano i collegamenti mentali che sviluppi mentre lo produci.

Ma la maggior parte di chi pone questa domanda non diventerà una persona che non tocca mai l'AI. Diventeranno professionisti il cui lavoro consiste sempre di più nel dirigerla. E per loro, usa meno l'AI non è una risposta. È una tattica dilatoria che rimanda la vera domanda di un anno.

La vera causa

Ecco ciò che sfugge alle metafore della stampella.

La dipendenza non nasce dal fatto che l'AI scrive il tuo codice. Nasce dal fatto che l'AI scrive codice che tu non hai mai trasformato in comprensione.

Dovrei dire da che parte sto, perché non è quella dell'astinenza. Negli ultimi mesi ho costruito strumenti basati sull'AI: una pipeline che trasforma una frase in un piano e apre da sola le proprie pull request, un piano di controllo che governa flotte di agenti. Uso questi strumenti ogni giorno e non farò la predica a nessuno sulla purezza. Ma ognuno di essi poggia su una sola regola che non ha niente a che vedere con quanta AI usi: nessuno fa il merge di ciò che non sa spiegare.

Quella regola è tutta la differenza tra usare uno strumento e dipenderne. Sotto le metafore, continua a riaffiorare un punto più duro. Immagina lo sviluppatore che usa solo l'AI mandare codice generato in un vero sistema di produzione, guardarlo rompersi, e doversi mettere a sistemare codice che non ha mai capito. E il vanto tanto in voga secondo cui puoi far costruire all'AI l'intera app senza contribuire in niente si sgretola al primo contatto: stai comunque fornendo i vincoli e rivedendo il risultato, quindi stai contribuendo, e se davvero non lo stai rivedendo, sei tu a spedire in produzione i buchi di sicurezza. Il costo della dipendenza non è aver usato l'AI. È non riuscire a sistemare, alle due di notte, la cosa che porta il tuo nome sul commit.

Perché l'analogia con la calcolatrice non regge

Il paragone a cui tutti ricorrono è la calcolatrice. Le calcolatrici non hanno impedito a nessuno di imparare l'aritmetica, quindi perché l'AI dovrebbe impedire a qualcuno di imparare a programmare?

Perché una calcolatrice restituisce una risposta di cui ti puoi fidare. Sette per otto fa cinquantasei che tu lo capisca o no. Un LLM restituisce una risposta che devi verificare. È tutta qui la differenza, e va nella direzione opposta rispetto alla rassicurazione: significa che capire conta di più nell'era dell'AI, non di meno. La calcolatrice ti ha permesso di smettere di capire l'aritmetica perché non sbagliava mai. Il modello linguistico non può permetterti di smettere di capire il codice, perché sei tu il suo revisore, e un revisore che non capisce quello che legge non sta revisionando proprio nulla.

La disciplina che funziona davvero

Quindi l'obiettivo non è usare meno AI. È mantenere il possesso di ciò che la dipendenza ti porta via. In pratica si riduce a un elenco breve, e gran parte riecheggia i consigli migliori che chiunque darebbe.

Scrivi la prima versione a mano. Costruisci tu la versione brutta e lenta, poi lascia che l'AI la confronti, la critichi o la rifattorizzi. La fatica non è un attrito che ostacola l'apprendimento. È il luogo in cui prende forma il modello del problema.

Usala come il collega senior seduto accanto a te, non come le tue mani. Il modo più utile per dirlo è un mentore, non un programmatore stagista: metti in discussione quello che ti dà, pretendi i riferimenti, poi vai a leggerti la documentazione da solo. Nel momento in cui diventa le tue mani invece del tuo consulente, hai smesso di possedere la competenza e hai iniziato a noleggiare il risultato.

Non fare mai il merge di ciò che non sai spiegare. È tutta qui la regola, ed è applicabile. Se non riesci a spiegare a un collega, passo dopo passo, perché il codice generato funziona, non è ancora tuo. È una responsabilità che hai firmato.

Rendi la revisione reale. In un altro articolo ho scritto che dopo un numero sufficiente di approvazioni smetti di leggere, e una soglia che non attraversi leggendo non è una soglia. Lo stesso vale per una singola persona alla tastiera: il diff che accetti senza capirlo è esattamente il punto in cui inizia la dipendenza.

Il compromesso più lucido che io abbia sentito descrivere è un bilanciere: scrivere a mano e fare il debug di tutto, tranne quando c'è una scadenza o per script usa e getta, dove ricorri all'AI nella piena consapevolezza che così accumula debito tecnico e ti rende un po' più stupido. Questo atteggiamento mi piace più di qualsiasi purezza. L'obiettivo non è mai stato fingere che l'AI non esista. È sapere con precisione cosa hai barattato, ed essere in grado di ricomprartelo.

Cos'è davvero il muscolo

Chi ti dice di disdire l'abbonamento sta proteggendo qualcosa di reale: la forza che puoi costruire solo facendo tu la parte difficile. Hanno ragione quando dicono che la costruisci a mano, e ragione quando dicono che si atrofizza se è una macchina a portare il peso al posto tuo.

Ma il muscolo che impedisce a uno sviluppatore in attività di diventare dipendente non è la capacità di produrre codice senza aiuto. È il discernimento di capire quando l'aiuto è sbagliato. Quel discernimento te lo guadagni come ti guadagni qualsiasi altro: capendo quello che ha scritto la macchina, ogni singola volta, prima che diventi tuo.

Quindi usa tutta l'AI che vuoi. Solo, non spedire mai in produzione una riga che non avresti saputo intercettare.

Le domande a cui questo articolo risponde

  • Come faccio a programmare con l'AI senza diventarne dipendente?

    Non usandola di meno, ma mantenendo il possesso della comprensione: scrivi a mano la prima versione, quella brutta, perché è lì che prende forma il modello del problema, usala come il collega senior seduto accanto a te e non come le tue mani, e non fare mai il merge di ciò che non sai spiegare. La dipendenza inizia dal diff che accetti senza capirlo, non dal momento in cui apri la chat.

  • Come capisco se sono davvero dipendente dall'AI o la sto solo usando bene?

    La prova è se riusciresti a sistemarlo alle due di notte, quando si rompe la cosa che porta il tuo nome sul commit. Se non riesci a spiegare a un collega perché il codice generato funziona, non è ancora tuo, è una responsabilità che hai firmato. La misura non è produrre codice senza aiuto, è intercettarlo quando è sbagliato.

  • L'AI non è semplicemente la calcolatrice dei nostri tempi?

    No, e la differenza va nella direzione opposta rispetto a quella rassicurazione. Una calcolatrice restituisce una risposta di cui ti puoi fidare, perché sette per otto fa cinquantasei che tu lo capisca o no, mentre un modello linguistico restituisce una risposta che devi verificare. Questo fa di te il suo revisore, e un revisore che non capisce quello che legge non sta revisionando proprio nulla.

  • Posso lasciare che sia il modello a scrivere tutto e spedirlo così?

    Quando c'è una scadenza o per script usa e getta sì, in una postura da bilanciere: tutto il resto lo scrivi a mano e ne fai il debug, e ricorri allo strumento nella piena consapevolezza che accumula debito tecnico. Il vanto secondo cui l'AI costruisce l'intera app senza che tu contribuisca in niente si sgretola al primo contatto, perché stai comunque fornendo i vincoli e rivedendo il risultato, e se davvero non lo stai rivedendo, sei tu a spedire in produzione i buchi di sicurezza.