Highlights
Ho fatto un colloquio di lavoro a ChatGPT
Ho fatto un colloquio di lavoro a ChatGPT
Assumerei ChatGPT come sviluppatore?
By Fabio Bucci, Chief Technology Officer @ GELLIFY
Ne stanno parlando tutti, non vi sfuggirà. Ma per coloro che si fossero distratti e non fossero stati già “inondati” di opinioni sull’impatto che l’intelligenza Artificiale – ed in particolare ChatGPT – avrà su chi lavora in ambito “sviluppo software”, queste brevi righe potranno essere di aiuto.
Ma prima...
Ottieni un'istantanea della situazione attuale: prendi parte alla rivoluzione dell'AI immergendoti nelle puntate di DigiTales - #GELLIFYUnfiltered. Ti spieghiamo in pochi minuti come questo strumento sta trasformando radicalmente tutti i settori!
"Se la Gen AI ci prova col manufacturing: il caso FPZ" - Recupera la live!
Special Guest: Andrea Lazari, Corporate Innovation Manager FPZ
"Sapete davvero per chi state realizzando il vostro prodotto software?" - Recupera la live!
Special Guest: Daniela Fronk, Senior UX/UI Designer GELLIFY
"Generative AI per la banca: da dove iniziare?" - Recupera la live!
Special Guest: Federico Aleotti, CEO & Founder BlackBytes
"Marketing con la GenAI: conversare col cliente evitando allucinazioni" - Recupera la live!
Special Guest: Paolo Massarani, Managing Director Athics
"Circuiti e persone: la GenAI per l'HR" - Recupera la live!
Special Guest: Francesca Bellati, Strategy & transformation Innovation Director GELLIFY
"La conoscenza in codice: la GenAI per il Knowledge Management" - Recupera la live!
"Come validare un’idea con la Generative AI" - Recupera la live!
Special Guest: Alberto Nasciuti, Chairman & CEO KPI6
Cos’è ChatGPT e come “impara”
ChatGPT è un chatbot basato su AI, lanciato da OpenAI nel novembre 2022. Si trattata un modello di AI per il linguaggio naturale (LLM, Large Language Model), che utilizza la tecnologia GPT-3 dell'azienda (Generative Pre-trained Transformer 3). Questa tecnologia di “deep learning” è progettata per produrre del testo simile a quello scritto dagli esseri umani. GPT-3 è addestrato utilizzando un metodo chiamato "generative pre-training", che gli consente di prevedere la prossima parola o frase per un determinato testo. Per generare un testo, il modello richiede quindi un input iniziale (che nel caso di ChatGPT è fornito dall’utente tramite la chat) e genera quindi del testo sulla base di quell'input.
Il modello è stato ottimizzato utilizzando una tecnica chiamata “Reinforcement Learning with Human Feedback” (RLHF) per migliorare la sua capacità di partecipare a un dialogo conversazionale.
La tecnica RHLF prevede quindi l’assistenza di “AI trainer” umani per la fase di addestramento e per la realizzazione del modello di “Reinforced Learning” che valuti i contenuti generati e massimizzi l’efficacia dei contenuti generati successivamente:
La strategia di training del modello GPT-3 (fonte: OpenAI)
ChatGPT è stato addestrato su un dataset di dati di miliardi di parole di testo estratte dal web, inclusi il testo di libri, articoli e siti web. I dati di training includono un'ampia varietà di contenuti, come articoli, voci di Wikipedia e forum online. L'obiettivo dell'utilizzo di un set di dati così ampio e diversificato è di garantire che il modello possa comprendere e rispondere a un'ampia gamma di argomenti e situazioni e che le risposte suonino naturali e simili a quelle umane. Ma questo è sufficiente per replicare l’adattabilità e la flessibilità del pensiero umano?
ChatGPT per lo sviluppo software
ChatGPT per le sue capacità di generare contenuti in maniera simile a quello che farebbe un essere umano, ha attirato sempre più l'attenzione della comunità tecnologica per le sue potenzialità nel supportare gli sviluppatori nello sviluppo del codice fornendo capacità di generazione, di comprensione e interpretazione del codice.
Questo strumento ha il potenziale per rivoluzionare il modo in cui sviluppiamo prodotti digitali e molti sviluppatori sono ansiosi di esplorarne le capacità, come dimostrato dall’incredibile successo del lancio che ha visto più di un milione di utenti connessi alla piattaforma dopo solo una settimana dal lancio.
La prima funzionalità chiave di per gli sviluppatori è la sua capacità di generare frammenti di codice. Fornendo un insieme di input di partenza, ChatGPT può generare codice funzionante, per praticamente tutti i linguaggi utilizzati ad oggi. Ciò può risparmiare agli sviluppatori una quantità significativa di tempo e sforzi, poiché non devono più scrivere manualmente codice per compiti semplici o ripetitivi.
Le estensioni di questa funzionalità sono molteplici, come la possibilità di tradurre snippet di codice da un linguaggio ad un altro, o di comprendere e spiegare del codice esistente.
ChatGPT può quindi generare della documentazione dettagliata per una determinata base di codice, inclusi commenti e spiegazioni del codice. Ciò può essere particolarmente utile per comprendere il funzionamento di codice “legacy” o non opportunamente documentato.
Un’altra funzionalità interessante di ChatGPT per gli sviluppatori è la sua capacità di generare automaticamente casi di test per una determinata base di codice (e generare ovviamente il relativo codice per automatizzarli), che possono essere utilizzati per verificare il codice per errori e altri problemi, oltre che aiutare a identificare potenziali errori di programmazione relativamente al codice fornito. Ciò può aiutare a garantire che il codice sia più robusto e affidabile e può risparmiare agli sviluppatori una quantità significativa di tempo e sforzi nel testare il loro codice.
Quindi ChatGPT può sostituire uno sviluppatore umano?
Credo che chiunque abbia utilizzato ChatGPT, sin dalle prime prove, sia rimasto impressionato dalle capacità del modello per la naturalezza e completezza delle risposte che il Bot riesce a dare su una grandissima varietà di tematiche, nasce quindi spontanea la domanda su fin dove possa spingersi questa tecnologia allo stato dell’arte attuale.
Alcuni dei limiti sono noti, e sottolineati dallo stesso Bot, se interrogato sulle sue potenzialità:
ad esempio il training del modello si è fermato nel 2021, quindi ChatGPT non conosce e non può utilizzare eventi o informazioni successivi a questo “cut off”.
Ho deciso però di provare rispondere a una domanda ben specifica: avremmo assunto ChatGPT come sviluppatore software?
Il colloquio tecnico allo sviluppatore ChatGPT: le challenge di coding
Per testare in profondità le potenzialità e i limiti per quello che riguarda il coding ho sottoposto a ChatGPT due challenge di coding che tipicamente sono usati come test durante le interviste di recruiting, chiedendo di scrivere il codice che risolve il problema (abbiamo scelto il linguaggio Java) e di migliorarlo iterativamente per raggiungere se possibile un obiettivo di “codice di buona qualità”, così come avremmo fatto per l’assunzione di un nuovo sviluppatore nel nostro team.
I test, con diversi livelli di difficoltà comprendevano una descrizione del problema da risolvere, una descrizione degli input attesi e una serie di esempi utilizzabile per validare la correttezza del codice scritto. La soluzione richiedeva di realizzare un singolo metodo (di poche righe di codice).
ChatGPT è stato in grado di risolvere il problema più semplice in pochi secondi, generando anche i casi di test per verificare il risultato. L’unico problema riscontrato è stato quando abbiamo chiesto di migliorare il codice rimuovendo del codice duplicato, richiesta a cui il Bot ha risposto proponendo esattamente lo stesso codice con l’aggiunta di un commento e spiegando come questa (non) operazione migliorasse di molto la leggibilità del codice.
Il secondo problema proposto al chatbot prevedeva una complessità leggermente superiore e la necessità di definire una strategia per trovare una soluzione ottima. ChatGTP, nonostante diversi tentativi non è stato in grado di trovare una soluzione che soddisfacesse i requisiti e desse risultati coerenti con gli esempi forniti. Solo quando, come avremmo fatto con un candidato in difficoltà, gli abbiamo suggerito la strategia corretta da implementare è riuscito finalmente a fornire il codice corretto.
Da questo semplice gioco di ruolo, è risultato evidente come ChatGPT spesso proponga soluzioni errate con estrema confidenza, cosa che può facilmente indurre in errore chi non sia esperto della tematica trattata o non verifichi accuratamente il risultato.
Chiaramente ChatGPT non è in grado di eseguire il codice o testarlo, ma è evidente che non sia in grado di comprendere completamente il contesto e desumere requisiti non espliciti o definire strategie di soluzioni, attività cruciale per sviluppare software complesso e di qualità.
Inoltre, il lavoro di sviluppo software non consiste esclusivamente nella scrittura di codice ma nella definizione di sistemi e architetture complesse oltre che alla definizione delle interazioni tra sistemi e con gli utenti, tematiche su cui gli strumenti di AI disponibili oggi non possono aiutare.
In breve, ChatGPT può essere uno strumento estremamente prezioso per assistere gli sviluppatori nel loro lavoro, aiutando a risolvere velocemente e automatizzando task specifici o ripetitivi ma non è in grado di sostituire la creatività, la capacità di problem solving e il processo decisionale umano che sono fondamentali per lo sviluppo di sistemi software complessi.
Quindi, ChatGPT rivoluzionerà lo sviluppo di prodotti digitali?
Oltre alle potenzialità già evidenziate per aumentare la produttività di chi si occupa di sviluppo software, crediamo che ChatGPT sia uno strumento formidabile per la generazione di contenuti.
I casi d’uso sono potenzialmente infiniti: la gestione automatica dei contenuti social e marketing, la categorizzazione automatica di testi e messaggi, la realizzazione di Chatbot sempre più interattivi e realistici, fino alla realizzazione di sistemi di knowledge management avanzati.
Queste possibilità, unita alla disponibilità di API1 per l’integrazione del modello GPT-3, consentono di integrare queste capacità direttamente nelle soluzioni e i prodotti digitali, aprendo nuovi scenari basati sul linguaggio naturale2 a costi estremamente contenuti.
Come GELLIFY stiamo già studiando con i nostri clienti come sfruttare al meglio queste nuove potenzialità nei loro prodotti digitali.
L’evoluzione del modello, inoltre, è ancora in pieno sviluppo e, nonostante l’“hype” sulla nuova versione del modello (GPT-4) sia stato ridotto dallo stesso CEO Sam Altman3 - che conferma che siamo ancora lontani dall’avere una AGI (Artificial General Intelligence, cioè una AI con le stesse potenzialità di un essere umano) - tutto fa presagire che questa sarà una delle tecnologie più interessanti dei prossimi anni.
Per il momento mi sento di poter rassicurare gli sviluppatori: non perderanno il lavoro a causa dell’AI. Ma alcuni potrebbero perderlo a causa di qualcuno che userà l’AI nelle proprie soluzioni meglio di loro.
“Any sufficiently advanced technology is indistinguishable from magic” (Arthur C. Clarke)
Fabio Bucci is a software engineering manager with more than 20 years of experience building complex software products and solutions, former CTO at i4C Analytics and Product Engineering Executive at Accenture. Currently he is CTO at GELLIFY, driving technology innovation and leading the “Digital Products” team, the provider of digital solutions for start-ups and corporate enterprises, focusing on innovation, user experience design, and agile development.
Note
1 - https://beta.openai.com/docs/introduction
2 - https://beta.openai.com/examples
3 - https://www.theverge.com/23560328/openai-gpt-4-rumor-release-date-sam-altman-interview