È risaputo che l'IA generativa può produrre immagini fotorealistiche, illustrazioni e dipinti semplicemente fornendo istruzioni.
Nel frattempo, nel mondo degli affari, l'attenzione si sta concentrando sulla capacità dell'IA generativa di produrre programmi.
L'IA conversazionale è basata su grandi modelli linguistici, una tecnologia fondamentale, ed eccelle nel conversare in varie lingue e nel tradurre tra di esse.
Anche i linguaggi di programmazione, usati per creare programmi, sono un tipo di linguaggio. I programmatori umani, in un certo senso, traducono i requisiti software ricevuti verbalmente in linguaggi di programmazione.
È per questo che l'IA generativa conversazionale, che utilizza grandi modelli linguistici, è anche molto abile nella programmazione.
Inoltre, la programmazione è un compito intellettuale in cui la correttezza dei risultati può spesso essere verificata automaticamente e immediatamente. Questo perché un programma creato può essere eseguito e controllato automaticamente per vedere se produce l'output desiderato.
Infatti, quando i programmatori umani creano un programma, spesso creano contemporaneamente programmi di test per verificare i risultati, sviluppando il programma principale mentre controllano che funzioni come previsto.
Anche l'IA generativa può procedere con la programmazione mentre esegue test nello stesso modo. Se un umano fornisce istruzioni precise, è possibile per l'IA iterare e completare automaticamente il programma finché non supera tutti i test.
Naturalmente, a causa delle limitazioni delle capacità di programmazione dell'IA generativa e dell'ambiguità delle istruzioni umane, ci sono molti casi in cui i test non possono essere superati anche dopo numerose iterazioni. Inoltre, test inadeguati o errati spesso portano a bug o problemi nel programma completato.
Tuttavia, man mano che le capacità dell'IA generativa migliorano e gli ingegneri umani affinano i loro metodi di istruzione, insieme a meccanismi per migliorare le conoscenze di programmazione dell'IA generativa tramite ricerche su internet, la portata per la generazione automatica di programmi appropriati si sta espandendo di giorno in giorno.
Inoltre, con l'attenzione del mondo degli affari, le aziende leader impegnate nella ricerca e sviluppo dell'IA generativa stanno anche investendo pesantemente nel miglioramento delle capacità di programmazione dell'IA generativa.
In questa situazione, si prevede un'accelerazione dell'espansione della portata e del volume dei compiti di programmazione automatizzata che possono essere affidati all'IA generativa.
Ci sono molti casi di individui che non avevano mai sviluppato programmi prima d'ora, che hanno configurato un ambiente di sviluppo di base utilizzando informazioni da internet, per poi affidarsi all'IA generativa per la programmazione, completando progetti insieme come una squadra di due.
Come programmatore, anch'io uso l'IA generativa per programmare. Una volta che ci ho preso la mano, posso completare software senza modificare affatto il programma, semplicemente copiando e incollando il codice nei file secondo le istruzioni dell'IA generativa.
Certo, ci sono molte occasioni in cui mi blocco. Ciò è dovuto principalmente a piccole differenze tra le impostazioni del mio computer o degli strumenti di sviluppo e le configurazioni comuni, oppure perché i componenti software gratuiti sono più recenti rispetto a quelli su cui l'IA generativa è stata addestrata, creando un divario di conoscenza, o perché le mie richieste sono leggermente insolite.
In assenza di tali discrepanze minori o circostanze speciali, e quando viene istruita a creare funzioni software molto comuni, nella maggior parte delle situazioni vengono generati programmi appropriati.
Verso l'Era Liquidware
Come sviluppatore di software, posso rilasciare il software che creo, e quel software, rilasciato da noi ingegneri, viene poi utilizzato da diversi utenti.
Il futuro in cui lo sviluppo di software potrà essere realizzato da chiunque con l'IA generativa è un'estensione della discussione fin qui affrontata.
Tuttavia, questo non è solo un cambiamento dal lato dello sviluppo software; cambiamenti significativi stanno arrivando anche dal lato dell'utente.
Il compito di istruire verbalmente l'IA generativa per aggiungere o modificare automaticamente funzioni nel software può essere eseguito non solo durante la fase di sviluppo prima del rilascio del software, ma anche durante il suo utilizzo. Inoltre, può essere svolto dall'utente stesso del software.
Gli sviluppatori di software possono definire l'ambito di ciò che può e non può essere modificato, quindi rilasciare il software con funzionalità di personalizzazione basate sull'IA generativa.
Ciò consentirebbe agli utenti di chiedere all'IA generativa di modificare piccole scomodità o preferenze di design dello schermo all'interno del software.
Inoltre, gli utenti potrebbero aggiungere funzionalità utili trovate in altre applicazioni, combinare più operazioni in un singolo clic, o visualizzare le schermate più frequentemente consultate tutte su un unico display.
Per gli sviluppatori di software, abilitare tale personalizzazione da parte dell'utente offre vantaggi significativi: elimina lo sforzo di implementare richieste di funzionalità da soli, e può aumentare la popolarità del software evitando recensioni negative e insoddisfazione riguardo all'usabilità.
Quando gli utenti possono cambiare liberamente schermate e funzioni in questo modo, il concetto si discosta significativamente da ciò che tradizionalmente chiamiamo "software".
Sarebbe più appropriato chiamarlo "Liquidware", implicando qualcosa di ancora più fluido e adattabile del software (che è già più flessibile dell'hardware), e qualcosa che si adatta perfettamente all'utente.
Le funzioni erano una volta realizzate unicamente dall'hardware. Poi, è emerso il software intercambiabile, che ha permesso di realizzare le funzioni attraverso una combinazione di hardware e software.
Da lì, possiamo immaginare l'emergere del Liquidware, intendendo parti che possono essere modificate dall'IA generativa. Di conseguenza, le funzioni saranno realizzate da hardware + software (fornito dagli sviluppatori) + Liquidware (modifiche dell'utente).
In questa era Liquidware, le idee degli utenti per le modifiche esploderanno.
Un'idea di modifica rivoluzionaria, inventata da un utente, potrebbe diventare un argomento di tendenza sui social media, portando altri a imitare e modificare varie applicazioni Liquidware.
Inoltre, è probabile che emerga Liquidware in grado di gestire diverse applicazioni software in modo integrato. Ciò significa che gli utenti potrebbero visualizzare i feed di più piattaforme di social media diverse in un'unica app, o i risultati di ricerca potrebbero integrare i risultati di numerose piattaforme.
In questo modo, in un mondo in cui il Liquidware è diffuso, vari dispositivi, inclusi PC e smartphone, forniranno funzioni che si adattano perfettamente alla vita e alle attività di ciascuno di noi.
Un Fenomeno Attuale
Per gli ingegneri del software come me, è fondamentale capire che il Liquidware non è un concetto futuristico o qualcosa che avverrà tra diversi anni.
Questo perché anche un Liquidware molto semplice è già realizzabile.
Per esempio, supponiamo che io sia un ingegnere che sviluppa un'applicazione web per il sito di e-commerce della mia azienda.
Una tale app web avrebbe database, sistemi di gestione delle vendite e sistemi di spedizione dei prodotti su server gestiti internamente o tramite un servizio cloud. Quando un utente effettua un acquisto, questi sistemi si collegano per gestire la riscossione dei pagamenti e la spedizione dei prodotti.
I sistemi e i database aziendali fondamentali come questi non possono essere modificati arbitrariamente.
Tuttavia, il design della schermata web di un sito di e-commerce rivolto all'utente può essere modificato per adattarsi ai singoli utenti senza causare problemi significativi. Certo, se le modifiche di un utente influenzassero le schermate di altri utenti, sarebbe un problema, ma le personalizzazioni specifiche per il singolo utente vanno bene.
Ad esempio, sono concepibili varie modifiche: ingrandire il testo, cambiare lo sfondo in un tono scuro, riposizionare i pulsanti usati frequentemente per un'operazione più facile con la mano sinistra, ordinare gli articoli per prezzo in una schermata di elenco, o visualizzare i dettagli di due prodotti affiancati.
Tecnicamente, queste modifiche possono essere realizzate alterando i file di configurazione e i programmi come HTML, CSS e JavaScript che visualizzano la schermata nel browser.
Dal punto di vista della sicurezza, questi file originariamente vengono eseguiti nel browser web. Pertanto, le parti che possono essere modificate da un ingegnere esperto di app web gestiscono solo funzioni e dati che sono sicuri da modificare.
Quindi, lato server dell'app web di e-commerce, si può creare un meccanismo per archiviare questi file separatamente per ogni utente loggato, aggiungere una schermata per conversare con una chat AI, e poi modificare i file HTML, CSS e JavaScript dell'utente sul server in base alle sue richieste.
Se questo testo, insieme alle informazioni di configurazione e al codice sorgente dell'app web di e-commerce esistente, fosse presentato a un'IA generativa, probabilmente fornirebbe i passaggi e i programmi necessari per aggiungere tale funzionalità.
In questo modo, il Liquidware è già un argomento attuale; non sarebbe sorprendente se fosse un fenomeno in corso proprio ora.
Ingegneri Omnidirezionali
Anche con l'espansione della portata della programmazione automatica guidata dall'IA e l'avvento dell'era Liquidware, lo sviluppo di software non può ancora essere svolto esclusivamente dall'IA generativa.
Tuttavia, è certo che l'enfasi sulla programmazione nello sviluppo software diminuirà significativamente.
Inoltre, per sviluppare software senza intoppi, è necessaria una vasta gamma di conoscenze e competenze ingegneristiche, che si estendono dalla programmazione generale all'infrastruttura cloud, alle reti, alla sicurezza, alle piattaforme, ai framework di sviluppo e ai database, coprendo l'intero stack di sistema affinché l'intero sistema funzioni.
Il personale con tali conoscenze e competenze è chiamato ingegnere full-stack.
Tradizionalmente, alcuni ingegneri full-stack si occupavano della progettazione complessiva, mentre i restanti ingegneri si specializzavano nella programmazione, o si concentravano su aree specifiche non legate alla programmazione all'interno dello stack di sistema, dividendo così i ruoli.
Tuttavia, man mano che l'IA generativa si assume l'aspetto della programmazione, i costi di sviluppo del software saranno significativamente ridotti, portando alla pianificazione di vari nuovi progetti di sviluppo software.
Di conseguenza, in ogni progetto di sviluppo, gli ingegneri che sanno semplicemente scrivere programmi saranno in gran parte superflui; invece, sarà richiesta una grande quantità di ingegneri full-stack.
Inoltre, in questo scenario, la semplice conoscenza e le competenze full-stack saranno insufficienti. Questo perché i tipi di software richiesti in vari progetti di sviluppo si diversificheranno, il che significa che lo sviluppo non sarà sempre richiesto utilizzando lo stesso stack di sistema. Inoltre, le richieste di sistemi complessi che richiedono più stack di sistema aumenteranno indubbiamente.
Ad esempio, lo stack di sistema per un'applicazione web differisce da quello per i sistemi aziendali o core. Pertanto, a un ingegnere di applicazioni web full-stack non può essere affidato un progetto di sviluppo di un sistema core.
Allo stesso modo, le applicazioni web, le app per smartphone e le applicazioni per PC hanno ciascuna stack di sistema diversi. Nel mondo del software embedded, come l'IoT, lo stack di sistema varierà completamente per ogni dispositivo embedded.
Tuttavia, man mano che l'enfasi sulla programmazione diminuisce e i costi complessivi di sviluppo del software si riducono, lo sviluppo di sistemi complessi che combinano software con questi stack di sistema differenti è probabile che aumenti.
Sebbene tale sviluppo richiederà l'assemblaggio di più ingegneri full-stack distinti, gli ingegneri in grado di supervisionare l'intero sistema e gestire la progettazione di base ricopriranno un ruolo cruciale.
Ciò significa che ci sarà una domanda di ingegneri con conoscenze e competenze omnidirezionali su numerosi stack di sistema, che trascendono i confini dei singoli stack di sistema.
Tali ingegneri saranno probabilmente chiamati ingegneri omnidirezionali.
E proprio come la domanda di ingegneri che sanno solo programmare diminuirà a causa dell'IA generativa, arriverà un'epoca in cui anche la domanda di ingegneri full-stack confinati a un singolo stack di sistema diminuirà.
Se desideri rimanere attivo come ingegnere IT in quell'epoca, devi iniziare immediatamente il percorso per diventare un ingegnere omnidirezionale.
Il Ruolo degli Ingegneri Omnidirezionali
I linguaggi di programmazione, le piattaforme e i framework che verranno sviluppati sono diversi.
Tuttavia, un ingegnere omnidirezionale non ha bisogno di padroneggiarli tutti, perché può anche ricevere assistenza dall'IA generativa.
Se lo lasci all'IA generativa, anche linguaggi di programmazione, piattaforme o framework che non hai mai usato prima possono essere generati semplicemente fornendo istruzioni verbali.
Naturalmente, c'è il rischio di introdurre bug o vulnerabilità di sicurezza, o di accumulare debito tecnico che potrebbe rendere difficili le modifiche future.
Per identificare e mitigare questi rischi, è necessaria la conoscenza del linguaggio o della libreria specifica. Tuttavia, questa conoscenza può essere ottenuta anche dall'IA generativa. Un ingegnere omnidirezionale deve solo essere in grado di costruire solidamente procedure e meccanismi per rilevare e prevenire questi problemi, o per gestirli dopo il loro verificarsi.
Queste procedure e meccanismi non cambiano drasticamente con stack di sistema diversi. Se le procedure e i meccanismi per prevenire bug e vulnerabilità di sicurezza e per garantire la futura estensibilità sono formalizzati, il resto può essere lasciato all'IA generativa o agli ingegneri specializzati in quelle aree specifiche.
Gli ingegneri omnidirezionali non hanno bisogno di possedere conoscenze dettagliate o esperienza a lungo termine con ogni singolo stack di sistema.
Uno dei ruoli principali di un ingegnere omnidirezionale è progettare come le funzioni sono distribuite e come interagiscono più sistemi software complessi, operando in collaborazione su diversi stack di sistema.
Inoltre, considerare come sviluppare e gestire l'intero software è anche un ruolo cruciale per un ingegnere omnidirezionale.
Software Omnidirezionale
Consideriamo per quale tipo di sviluppo software è necessario un ingegnere omnidirezionale.
In precedenza, ho fornito l'esempio dello sviluppo di un'applicazione web per l'e-commerce.
Sotto la direzione di un dirigente incaricato dalla direzione di rinnovare questa app web di e-commerce, il team di pianificazione potrebbe avanzare i seguenti requisiti:
Integrazione della Piattaforma della Comunità Utenti: Questo significa fornire una piattaforma non solo per un'app o un sito e-commerce dedicato, ma dove gli utenti possano interagire sui prodotti stessi e su come utilizzarli. L'obiettivo è la fidelizzazione degli utenti, l'effetto passaparola, l'arricchimento dei contenuti tramite i contributi degli utenti e l'integrazione del feedback (sia positivo che negativo) nello sviluppo del prodotto, nella pianificazione di nuovi prodotti e nel marketing.
Compatibilità Omni-dispositivo: Ciò rende la comunità utenti e le informazioni sui prodotti accessibili da vari dispositivi, inclusi non solo le app web, ma anche le app per smartphone, gli assistenti vocali, i dispositivi indossabili e gli elettrodomestici intelligenti.
Compatibilità Omni-piattaforma: Ciò include non solo la piattaforma della comunità utenti dell'azienda, ma anche, ad esempio, inserzioni di prodotti e condivisione di recensioni su siti di e-commerce completi, integrazione con i social media e collegamento funzionale e informativo con vari strumenti di IA.
Aggiornamento del sistema aziendale: Pur collegandosi temporaneamente con i sistemi di gestione delle vendite e di consegna prodotti esistenti, questo comporta anche il rinnovamento di tali sistemi. Dopo il rinnovo, il piano include l'aggregazione dei dati di vendita in tempo reale e la previsione della domanda, e l'integrazione con i sistemi di gestione dell'inventario. Inoltre, il collegamento con i sistemi di inventario distribuiti a livello regionale forniti dalle aziende di consegna e con i servizi di consegna lato corriere sarà introdotto gradualmente, richiedendo che il sistema informativo adatti progressivamente le sue integrazioni di conseguenza.
Compatibilità Liquidware: Tutte le interfacce utente saranno, ovviamente, compatibili con Liquidware. Inoltre, anche le interfacce utente interne per lo sviluppo e la pianificazione dei prodotti (come l'aggregazione di informazioni e il feedback), i reparti operativi del sistema e i report per la direzione saranno tutti convertiti in Liquidware.
Se venisse presentato un piano di sviluppo per un software così complesso, un team di sviluppo software tradizionale probabilmente non lo accetterebbe immediatamente. In alternativa, attraverso discussioni sulle specifiche di sistema, dimostrerebbero logicamente la necessità di costi e tempi di sviluppo enormi, spingendo per tagli significativi alle specifiche.
Tuttavia, cosa succederebbe se l'IA generativa potesse automatizzare la maggior parte della programmazione, e più della metà degli stack di sistema proposti fosse già stata sperimentata da qualcuno del team? E se il team avesse una comprovata esperienza nel lancio di nuovi stack di sistema, piattaforme e framework da zero con l'assistenza dell'IA generativa? E se tu, come ingegnere omnidirezionale, avessi già iniziato questo percorso e intendessi continuarci?
Da quella prospettiva, dovrebbe apparire un progetto molto attraente. Potresti lavorare con un team di pianificazione che propone ambiziosi progetti dalla direzione, e un team di sviluppo con il potenziale di trasformarsi in un team di sviluppo software omnidirezionale.
C'è anche la rassicurazione dei sistemi esistenti. È anche un progetto che può essere fatto crescere in modo incrementale attraverso un processo di sviluppo agile, iniziando con funzionalità a rapido successo e alto impatto e raccogliendo feedback dagli utenti precoci.
Considerando tutto ciò, lo sviluppo di questo software omnidirezionale dovrebbe apparire un progetto molto attraente.
Conclusione
Con la programmazione automatica guidata dall'IA generativa, il Liquidware e lo sviluppo di software omnidirezionale stanno già diventando realtà attuali.
In questo contesto, gli ingegneri IT devono sempre più andare oltre il full-stack e puntare a diventare ingegneri omnidirezionali.
Oltre a ciò, il loro campo d'azione si espanderà ulteriormente, andando oltre il regno dei sistemi IT per includere l'ingegneria aziendale omnidirezionale – l'ingegneria delle attività organizzative stesse, connettendo clienti, dipendenti interni e IA – e l'ingegneria della comunità omnidirezionale.
E ancora più in là, prevedo l'emergere di un campo chiamato ingegneria sociale omnidirezionale, finalizzato al miglioramento completo della società.