OK, quindi ChatGPT ha appena debuggato il mio codice. Per davvero

OK, ChatGPT ha debuggato il mio codice. Per davvero.

La programmazione è un costante gioco di Jenga mentale: una linea di codice impilata su un’altra, costruendo una torre di codice che si spera sia abbastanza robusta da non crollare.

Ma alla fine crolla sempre, poiché il codice non funziona mai la prima volta che viene eseguito. Quindi, una delle competenze chiave per qualsiasi programmatore è il debugging – l’arte e la scienza di trovare il motivo per cui il codice non viene eseguito o sta facendo qualcosa di inaspettato o indesiderato.

Inoltre: Come utilizzare ChatGPT per scrivere codice

Speciale

L’intersezione tra l’IA generativa e l’ingegneria

La crescita dell’IA generativa può sfruttare un enorme potenziale per il settore dell’ingegneria. Può anche comportare delle sfide, poiché le aziende e gli ingegneri stanno cercando di capire l’impatto dell’IA sui loro ruoli, le strategie aziendali, i dati, le soluzioni e lo sviluppo del prodotto. Come sarà il futuro per l’integrazione dell’IA generativa nel mondo del software? ENBLE decodifica da ogni angolazione.

È un po’ come essere un detective, trovare indizi e poi scoprire cosa quegli indizi stanno cercando di comunicare. È molto frustrante e molto soddisfacente, talvolta allo stesso tempo.

Faccio molto debugging. Non solo perché il codice non funziona mai la prima volta che viene eseguito. È anche perché utilizzo il debugging per capire come viene eseguito il codice e poi lo modifico lungo il percorso.

Ma sebbene il debugging richieda un insieme speciale di competenze, alla fine è solo programmazione. Una volta scoperto perché un blocco di codice non funziona, devi capire come scrivere qualcosa che funzioni.

Testing reale di ChatGPT

Questa settimana stavo lavorando su tre compiti di codifica per un software che gestisco. Due erano correzioni per bug segnalati dagli utenti. Uno era un nuovo pezzo di codice per aggiungere una nuova funzionalità. Questo era un lavoro di programmazione reale e comune per me. Faceva parte della mia normale programmazione quotidiana.

Inoltre: Come funziona ChatGPT?

Te lo dico perché fino ad ora ho testato ChatGPT con codice di prova. Ho creato scenari per vedere quanto bene ChatGPT funzionasse. Questa volta è stato diverso. Stavo cercando di svolgere un lavoro reale e ho deciso di vedere se ChatGPT poteva essere uno strumento utile per svolgere quel lavoro.

È un modo diverso di guardare a ChatGPT. Gli scenari di prova sono spesso un po’ costruiti e semplicistici. La programmazione del mondo reale consiste nel prendere un altro ticket di supporto client e lavorare su ciò che ha causato un’esperienza negativa per l’utente.

Quindi, con questo, vediamo quei compiti e vediamo come se la cava ChatGPT.

Riscrivere il codice delle espressioni regolari

Nella programmazione, dobbiamo trovare molti modelli nel testo. Per farlo, utilizziamo una forma di matematica simbolica chiamata espressioni regolari. Scrivo espressioni regolari da decenni e continuo a non apprezzarle. Sono noiose, suscettibili di errori e arcane.

Inoltre: Sto usando ChatGPT per aiutarmi a risolvere i problemi di codice più velocemente, ma a quale costo?

Quindi, quando è arrivato un segnalazione di bug che mi diceva che una parte del mio codice consentiva solo numeri interi quando avrebbe dovuto consentire dollari e centesimi (in altre parole, un certo numero di cifre, eventualmente seguito da un punto e poi, se c’era un punto, seguito da altre due cifre), sapevo che avrei dovuto utilizzare il codice delle espressioni regolari.

Poiché trovo quel processo noioso e fastidioso, ho deciso di chiedere aiuto a ChatGPT. Ecco cosa ho chiesto:

Ecco la risposta molto ben presentata dall’IA (clicca sul quadratino per ingrandire):

Ho inserito il codice di ChatGPT nella mia funzione e ha funzionato. Invece di due-quattro ore di frustrazione, ci sono voluti circa cinque minuti per creare la richiesta e ottenere una risposta da ChatGPT.

Riformattare un array

Il prossimo passo è stato riformattare un array. Mi piace scrivere codice per gli array, ma è anche tedioso. Così, ho nuovamente provato ChatGPT. Questa volta è stato un fallimento totale.

Quando ho finito, probabilmente gli ho dato 10 prompt diversi. Alcune risposte sembravano promettenti, ma quando ho provato ad eseguire il codice, si è verificato un errore. Alcuni codici si sono bloccati, alcuni hanno generato codici di errore. E alcuni codici sono stati eseguiti, ma non hanno fatto ciò che volevo.

Dopo circa un’ora, ho rinunciato e sono tornato alla mia tecnica normale di cercare su GitHub e StackExchange per vedere se c’erano esempi di ciò che stavo cercando di fare, e poi scrivere il mio codice.

Inoltre: Come fare in modo che ChatGPT fornisca fonti e citazioni

Fino ad ora, è una vittoria e una sconfitta per l’esperienza con ChatGPT. Ma ora ho deciso di aumentare la sfida.

Trovare effettivamente l’errore nel mio codice

OK, quindi questa prossima parte sarà difficile da spiegare. Ma pensa al fatto che se è difficile spiegarlo a te (presumibilmente un essere umano e non uno dei circa 50 bot che copiano e ripubblicano solo il mio lavoro su siti truffaldini e spam), è ancora più difficile spiegarlo a un’intelligenza artificiale.

Inoltre: Cos’è GPT-4? Ecco tutto ciò che devi sapere

Stavo scrivendo nuovo codice. Avevo una funzione che prendeva due parametri e una chiamata che inviava due parametri al mio codice. Le funzioni sono piccole scatole nere che svolgono funzioni molto specifiche e vengono chiamate (richieste di fare la loro magia) da righe di codice che vengono eseguite altrove nel programma.

Il problema che ho trovato era che continuavo a ricevere un messaggio di errore.

Inoltre: Come usare ChatGPT per riassumere un libro, un articolo o un paper di ricerca

La parte saliente di quel messaggio è quando dice “1 passato” in un punto e “esattamente 2 attesi” in un altro. Ho guardato la chiamata e la definizione della funzione e c’erano due parametri in entrambi i posti.

Cosa diavolo?

Dopo circa 15 minuti di profonda frustrazione, ho deciso di gettare il problema all’IA per vedere se poteva aiutare. Così, ho scritto il seguente prompt:

Gli ho mostrato la riga di codice che faceva la chiamata, gli ho mostrato la funzione stessa e gli ho mostrato l’handler, un piccolo pezzo di codice che invia la funzione chiamata da un hook nel mio programma principale.

In pochi secondi, ChatGPT ha risposto con questo (clicca sul piccolo quadrato per ingrandire):

Come suggerito, ho aggiornato il quarto parametro della funzione add_filter() a 2, e ha funzionato!

ChatGPT ha preso segmenti di codice, li ha analizzati e mi ha fornito una diagnosi. Per essere chiari, affinché potesse fare la sua raccomandazione, doveva capire l’interno di come WordPress gestisce gli hook (questo è ciò che fa la funzione add_filter), e come quella funzionalità si traduce nel comportamento della chiamata e dell’esecuzione delle righe di codice.

Inoltre: Ho chiesto a ChatGPT di scrivere un plugin WordPress di cui avevo bisogno. L’ha fatto in meno di 5 minuti

Devo considerare tale risultato incredibile – indiscutibilmente incredibile “vivere nel futuro”.

Cosa significa tutto ciò?

Come ho già detto, il debug è un po’ arte e un po’ scienza. La maggior parte degli ambienti di sviluppo buoni include potenti strumenti di debug che ti permettono di guardare il flusso dei dati attraverso il programma durante l’esecuzione, e questo aiuta quando si cerca di individuare bug.

Ma quando sei bloccato, spesso è difficile ottenere aiuto. Questo perché anche un collega stretto potrebbe non essere familiare con l’intero ambito del codice che stai debuggando. Il programma su cui sto lavorando è composto da 153.259 righe di codice distribuite in 563 file – e per quanto riguarda i programmi, è piccolo.

Inoltre: Questi esperti stanno correndo per proteggere l’IA dagli hacker

Quindi, se avessi voluto ottenere aiuto da un collega, avrei dovuto costruire una richiesta quasi identica a quella che ho inviato a ChatGPT.

Ma ecco qualcosa da considerare: ho ricordato di includere la riga del gestore anche se non mi sono reso conto che l’errore fosse lì. Come test, ho anche provato a chiedere a ChatGPT di diagnosticare il mio problema in un prompt in cui non ho incluso la riga del gestore e non è stato in grado di aiutarmi. Quindi, ci sono limitazioni molto definite su ciò che ChatGPT può fare per il debug in questo momento, nel 2023.

Inoltre: I migliori chatbot di intelligenza artificiale da provare

In sostanza, devi sapere come fare le domande giuste nel modo giusto e quelle domande devono essere sufficientemente concise perché ChatGPT possa gestire il tutto in una sola query. Questo è qualcosa che richiede effettive conoscenze e esperienza di programmazione per saper fare.

Il potenziale costo del debugging assistito dall’IA

Tieni presente che l’IA non sostituisce tutti gli altri strumenti di debugging. Dovrai comunque passare attraverso il codice, esaminare i valori delle variabili e capire come funziona il tuo codice. Ho scoperto che ChatGPT può aiutare a individuare le aree da esaminare e fornire alcuni semplici blocchi di codice. In un certo senso, è simile all’utilizzo di modelli di codifica, tranne che non devi pre-costruire quei modelli per incorporarli nel tuo codice. È un aiuto, ma non una sostituzione della codifica.

Inoltre: L’IA può programmare? Solo a piccoli passi

Avrei potuto risolvere il bug da solo? Certo. Non ho mai avuto un bug che non riuscissi a risolvere. Ma se avrebbe richiesto due ore o due giorni (più pizza, parolacce e un sacco di caffeina), mentre sopportavo molte interruzioni, non lo so. Posso dirti che ChatGPT lo ha risolto in pochi minuti, risparmiandomi tempo e frustrazione inimmaginabili.

Recentemente, Tiernan Ray di ENBLE ha pubblicato un articolo affascinante che cita uno studio dell’Università di Texas Tech che mostra che le prestazioni dell’IA nella codifica sono ancora molto poco affidabili. Tienilo presente, perché se l’IA sta facendo fatica a scrivere codice complesso, avrà ancora più difficoltà a debuggare codice complesso.

La maggior parte dei programmatori dispone di una serie di strumenti di debugging a loro disposizione e sceglie gli strumenti da utilizzare in base al problema che stanno cercando di diagnosticare. Non c’è dubbio che gli strumenti di intelligenza artificiale possano essere aggiunti a quella cassetta degli attrezzi. Ma attenzione a non usarli troppo. Poiché l’IA è essenzialmente una scatola nera, non puoi vedere quale processo l’IA compie per arrivare alle sue conclusioni. Di conseguenza, non puoi verificare realmente il suo lavoro.

Il potenziale costo di questo è enorme. Per compiti di debugging tradizionali, il programmatore è sempre in grado di vedere esattamente quali modifiche vengono incorporate nel codice. Anche se queste modifiche non funzionano sempre, il programmatore è sicuramente consapevole del motivo per cui sono state tentate. Ma quando si fa affidamento sul debugging basato sull’IA, anche solo in parte, il programmatore è separato ancora di più dal codice, il che rende il risultato finale molto più difficile da mantenere. Se si scopre che c’è un problema nel codice generato dall’IA, il costo e il tempo necessari per risolverlo potrebbero rivelarsi molto più grandi rispetto a se un programmatore umano avesse svolto completamente il compito a mano.

Come ho mostrato nei miei esempi, gli strumenti di codifica basati sull’IA possono aiutare (almeno due volte su tre). Ma non funzionano sempre e non dovrebbero mai essere considerati come un sostituto di una reale comprensione. Il non ricordarsi di ciò potrebbe essere costoso, davvero.

Guardando verso il futuro (possibilmente distopico)

Vedo un futuro molto interessante, in cui sarà possibile alimentare ChatGPT con tutte le 153.000 righe di codice e chiedergli di dirti cosa correggere. Microsoft (che possiede GitHub) ha già una versione beta pubblica di uno strumento chiamato Copilot per GitHub per aiutare i programmatori a scrivere codice. Microsoft ha anche investito miliardi di dollari in OpenAI, i creatori di ChatGPT.

Anche se il servizio potrebbe essere limitato agli ambienti di sviluppo di Microsoft, posso immaginare un futuro in cui l’IA abbia accesso a tutto il codice presente su GitHub e quindi a tutto il codice di qualsiasi progetto che pubblichi su GitHub.

Inoltre: Ho chiesto a ChatGPT di scrivere un breve episodio di Star Trek. Ed è riuscito davvero

Dato quanto bene ChatGPT ha identificato il mio errore dal codice che ho fornito, posso sicuramente immaginare un futuro in cui i programmatori possano semplicemente chiedere a ChatGPT (o a un equivalente di marca Microsoft) di individuare e correggere bug in interi progetti.

E qui è dove porto questa conversazione in un luogo molto oscuro.

Immagina di poter chiedere a ChatGPT di esaminare il tuo repository GitHub per un determinato progetto e di fargli trovare e correggere i bug. Un modo potrebbe essere presentare ogni bug che trova per il tuo approvazione, in modo da poter apportare le correzioni.

Ma cosa succede se chiedi a ChatGPT di correggere solo i bug e lo lasci fare senza prenderti la briga di guardare tutto il codice tu stesso? Potrebbe inserire qualcosa di pericoloso nel tuo codice?

Inoltre: Bard vs. ChatGPT: può Bard aiutarti a programmare?

E cosa succede se un’intelligenza artificiale incredibilmente capace ha accesso a quasi tutto il codice del mondo nei repository di GitHub? Cosa potrebbe nascondere in tutto quel codice? Quale malvagità potrebbe compiere questa IA per l’infrastruttura mondiale se può accedere a tutto il nostro codice?

Gioca con me a un semplice gioco di pensiero. Cosa succederebbe se all’IA venisse data la prima regola di Asimov come istruzione chiave? Quella regola è “un robot non deve nuocere a un essere umano, né permettere che un essere umano venga danneggiato per sua inazione”. Non potrebbe decidere che tutta la nostra infrastruttura ci sta facendo del male? Avendo accesso a tutto il nostro codice, potrebbe semplicemente decidere di salvarci da noi stessi inserendo backdoor che gli permettano, ad esempio, di spegnere la rete elettrica, far atterrare gli aerei e bloccare le autostrade.

Sono pienamente consapevole che lo scenario sopra è iperbolico e allarmista. Ma è anche possibile. Dopotutto, sebbene i programmatori guardino il loro codice su GitHub, non è possibile per nessuno guardare tutte le righe di tutto il loro codice.

Inoltre: Come utilizzare ChatGPT per scrivere formule Excel

Per quanto mi riguarda, cercherò di non pensarci troppo. Non voglio passare il resto degli anni 2020 in posizione fetale che si dondola avanti e indietro sul pavimento. Invece, userò ChatGPT per aiutarmi occasionalmente a scrivere e debuggare piccole routine, abbasserò la testa e spererò che le future IA non ci uccidano tutti nel loro sforzo di “non permettere a un essere umano di venire danneggiato”.

Trovi utile o spaventoso il fatto che ChatGPT possa debuggare il codice? Pensi che le IA ci uccideranno nel sonno o pensi che osserveremo il nostro destino a occhi spalancati? O sei, come me, intenzionato a cercare di non pensarci troppo perché ti fa male alla testa? Parla con me nei commenti qui sotto. Finché puoi ancora farlo.


Puoi seguire gli aggiornamenti quotidiani del mio progetto sui social media. Assicurati di seguirmi su Twitter: @DavidGewirtz, su Facebook: Facebook.com/DavidGewirtz, su Instagram: Instagram.com/DavidGewirtz e su YouTube: YouTube.com/DavidGewirtzTV.