Lo sviluppo consiste nel creare ripetutamente qualcosa di nuovo e utile.
Quando sentiamo "sviluppo", spesso ci viene in mente lo sviluppo di nuovi prodotti. Questo differisce dalla produzione di singoli articoli; implica, per così dire, la creazione dei progetti o degli stampi del prodotto.
Pertanto, i progetti e gli stampi creati attraverso lo sviluppo di nuovi prodotti vengono ripetutamente utilizzati nelle fabbriche per la produzione in serie di prodotti identici.
Esistono anche altri usi del termine "sviluppo", come lo sviluppo delle capacità individuali o lo sviluppo di una società e di una nazione. Questi implicano non solo un aumento di ciò che si possiede, ma piuttosto la capacità di utilizzare e trarre beneficio ripetutamente dalle capacità sviluppate.
Sebbene il potere economico degli individui e delle società possa fluttuare con le condizioni economiche, le capacità sviluppate sono generalmente permanenti.
Anche se diminuiscono, ciò è considerato un declino, non una fluttuazione come la prosperità economica.
Inoltre, esiste lo sviluppo della tecnologia e della conoscenza. A differenza delle capacità degli individui o di specifiche società, queste hanno la caratteristica di essere facilmente condivisibili.
E tra i risultati di questi sviluppi – prodotti, capacità, conoscenze e tecnologie – alcuni possono essere utili per lo sviluppo successivo.
Sviluppando tali risultati utili, l'ambito dello sviluppo si espande e migliorano anche l'efficienza e la qualità.
Sviluppo Software Guidato dall'IA
Generalmente, lo sviluppo richiedeva tempo e sforzi considerevoli. Soprattutto man mano che la società progredisce e le varie cose diventano più sofisticate, creare nuove cose diventa sempre più difficile.
Tuttavia, con l'avvento dell'IA generativa, questa situazione sta cambiando. Attualmente, lo sviluppo software sta subendo una trasformazione drammatica, beneficiando delle elevate capacità di programmazione dell'IA generativa.
Una visione futura in cui agenti autonomi basati sull'IA generativa diventano centrali nello sviluppo software come ingegneri software sta già diventando realtà.
Siamo attualmente in un periodo di transizione. Sebbene non possiamo affidare completamente lo sviluppo all'IA generativa, utilizzare abilmente l'IA generativa può far progredire potentemente lo sviluppo software.
Questo viene definito Sviluppo Software Guidato dall'IA.
Sviluppo Guidato dallo Sviluppo
Quando l'IA generativa snellisce lo sviluppo software, può rendere più efficiente non solo lo sviluppo del software obiettivo finale, ma anche lo sviluppo del software che aiuta lo sviluppo stesso.
Come menzionato in precedenza, i risultati che supportano lo sviluppo ampliano l'ambito dello sviluppo e contribuiscono all'aumento dell'efficienza e della qualità. Inoltre, se creati efficacemente, possono essere riutilizzati in altri progetti di sviluppo.
Pertanto, sviluppando software utile durante il corso dello sviluppo software, l'efficienza complessiva può essere aumentata e questi asset possono essere sfruttati anche per sviluppi futuri.
Tradizionalmente, lo sviluppo di tale software di supporto allo sviluppo era una pratica comune nel settore, ma richiedeva tempo e sforzi di sviluppo propri, rendendo necessaria un'attenta valutazione e un'implementazione mirata.
Utilizzando l'IA generativa, è possibile creare rapidamente software semplice per automatizzare piccole attività improvvisate. Per attività con processi chiari, l'IA generativa può generare programmi accurati quasi senza errori.
Questo rende più facile che mai sviluppare software che supporta lo sviluppo durante lo sviluppo software.
E riflettendo più a fondo, emerge uno stile di sviluppo in cui strumenti utili vengono continuamente sviluppati durante il processo di sviluppo, trasformando così il metodo di sviluppo stesso.
Lo chiameremo Sviluppo Guidato dallo Sviluppo.
Per praticare lo Sviluppo Guidato dallo Sviluppo, è necessaria l'abitudine di osservare oggettivamente il proprio sviluppo software per considerare quali parti possono essere delegate al software e quali parti solo gli esseri umani possono fare, insieme all'abilità di sviluppare tale software di supporto allo sviluppo.
Inoltre, l'IA generativa può essere integrata in questi strumenti software. Incorporandola all'interno del software, a differenza di un agente IA generativo autonomo, l'ambito di elaborazione può essere ristretto e un percorso chiaro definito in una certa misura.
Mentre gli agenti IA possono ottenere risultati simili tramite il prompting, il software che integra l'IA generativa può aumentare più facilmente l'accuratezza combinando sia programmi che prompt.
Se lo Sviluppo Guidato dallo Sviluppo può essere praticato, il secondo progetto vedrà miglioramenti sia nella qualità che nei costi rispetto al primo. Inoltre, con ogni progetto successivo – il terzo, il quarto e così via – i miglioramenti continueranno ad accumularsi.
Questo è completamente diverso dal semplice sviluppo di software utilizzando l'IA generativa. Un divario significativo emergerà nel tempo tra i team che si limitano a padroneggiare gli strumenti di IA generativa e i team che praticano lo Sviluppo Guidato dallo Sviluppo.
Test Guidato dal Refactoring
Esiste un concetto chiamato Sviluppo Guidato dai Test (TDD), che prevede prima la progettazione dei test basati sulle specifiche e poi lo sviluppo del software per superare tali test.
Inizialmente, anch'io pensavo che, con l'IA generativa che facilita lo sviluppo di programmi di test per l'automazione, lo Sviluppo Guidato dai Test potesse essere praticabile.
Tuttavia, man mano che iniziavo a praticare lo Sviluppo Guidato dallo Sviluppo, ho iniziato a credere che l'approccio di progettare i test prima dell'implementazione non fosse sempre adatto.
Soprattutto per software come le applicazioni web, che coinvolgono aspetti soggettivi come l'usabilità e il design visivo che si possono sperimentare interagendovi, ho realizzato che l'effettiva esecuzione e interazione con il software ha la precedenza sui test dettagliati.
Questo perché se ci sono significative insoddisfazioni a livello di UI/UX dopo l'interazione, esiste la possibilità che parti fondamentali come il framework, l'architettura di base, il modello di dati o i casi d'uso possano dover essere modificati.
Nel mio attuale progetto di sviluppo software personale, ho anche riscontrato problemi di flessibilità funzionale e prestazioni, che mi hanno portato a sostituire due framework con altri diversi.
C'era anche una parte con scarsa efficienza nell'utilizzo della memoria, che ha richiesto una revisione completa del processo.
È in queste congiunture di refactoring che il testing diventa per la prima volta una considerazione consapevole.
Se questo avviene nelle prime fasi dello sviluppo, o se le funzionalità e le specifiche cambieranno comunque in modo significativo, i test potrebbero non essere necessari.
Tuttavia, se lo sviluppo è già ben avviato e ci sono molti elementi da controllare, i test saranno probabilmente necessari durante il refactoring per assicurarsi che non ci siano carenze o omissioni funzionali.
Pertanto, l'idea di creare programmi di test nel momento in cui lo sviluppo è progredito a un certo punto e il refactoring diventa necessario non è affatto cattiva.
A questo punto, la chiave non è creare test per tutto il codice, ma concentrare i test sulle parti mature che difficilmente cambieranno molto in futuro, lasciando le parti ancora fluide senza test automatizzati.
Questo può essere chiamato Test Guidato dal Refactoring.
Conclusione
L'IA generativa sta trasformando radicalmente lo sviluppo software.
In articoli precedenti, ho scritto dell'importanza di puntare a diventare un Ingegnere Omnidirezionale, in grado di andare oltre il tradizionale ruolo di ingegnere full-stack per sviluppare sistemi omnidirezionali che combinano vari domini, infrastrutture e ambienti di esecuzione.
Ho anche scritto un articolo suggerendo che stiamo entrando in un'era di Sviluppo Guidato da Esperienza e Comportamento, che si concentra sul miglioramento dell'esperienza utente attraverso il comportamento del software, piuttosto che sull'approccio tradizionale allo sviluppo software di allineare le specifiche con l'implementazione.
Lo Sviluppo Guidato dallo Sviluppo e il Test Guidato dal Refactoring sono proprio gli approcci che ci condurranno verso questi nuovi orizzonti nello sviluppo software.