Ci avviamo verso il software 2.0, “potenziato” dall’AI e soprattutto dal deep learning. Il codice sarà più a prova di bug, perché – tra l’altro – l’analisi via AI servirà ridurre il tasso di errori e vulnerabilità sfruttabili dal cyber crime.
Ma così cambierà anche il ruolo dello sviluppatore, dato che l’AI si occuperà di compiti basilari nella programmazione.
La rivoluzione immaginata già qualche decennio fa entra in una fase ancora nuova e tutta da “scrivere” e che darà vita a un nuovo paradigma di creazione del software, trasformando il ruolo dello sviluppatore senza farlo scomparire.
Così il software si è “mangiato” i mercati tradizionali
La rivoluzione comincia da lontano: l’AI potrebbe essere il tassello definitivo verso un’ulteriore “softwarizzazione” di tutti i settori.
Nel 1999, Lawrence Lessig, giurista e avvocato statunitense, professore ad Harvard, scriveva nel suo libro “Code and Other Laws of Cyberspace”, che “il codice è legge” (code is law) dove, con codice, si riferisce alle righe di istruzioni che compongono un programma informatico, un software.
E, diversi anni dopo, nel 2011, di Marc Andreessen (famoso nell’universo IT per aver co-creato il browser Mosaic e per aver co-fondato Netscape, poi venduta ad AOL per una cifra pari a 4,2 miliardi di dollari) che scrisse un articolo molto interessante – e molto attuale – dal titolo “Why Software is eating the world” in cui, la sottolineatura fondamentale può essere riassunta da questo inciso: “Companies in every industry need to assume that a software revolution is coming“.
A dimostrazione di quanto espresso, può essere interessante notare come proprio nel 2011, quando scrisse l’articolo, nessuna delle società più grandi (come capitalizzazione di borsa) era una software company ma, piuttosto, un’azienda tradizionale (nelle prime posizioni c’erano: JPMorgan Chase, HSBC Holdings, General Electric, Exxon Mobil, Royal Dutch Shell. Compagnie petrolifere, istituti bancari, aziende manufatturiere, dunque).
Oggi, dopo qualche anno, possiamo guardare questa stessa classifica con i dati aggiornati al 30 settembre 2019 e trovare che le prime quattro posizioni sono occupate da aziende tecnologiche: Microsoft, Apple, Amazon, Alphabet, seguite da Berkshire Hathaway, un’azienda “tradizionale” (subito dopo, in sesta posizione, troviamo un’altra azienda tech: Facebook).
Nel giro di otto anni, insomma, il panorama è completamente cambiato.
Jeff Immelt, nell’ottobre del 2014, all’epoca Presidente & Amministratore Delegato di General Electric, dichiara pubblicamente durante la keynote di una conferenza: “If you went to bed last night as an industrial company, you’re going to wake up this morning as a software and analytics company“, sottolineando quello che potremmo definire il concetto di internet industriale: ovverosia la convergenza tra il sistema produttivo tradizionale e le tecnologie informatiche grazie a:
- potenza di elaborazione raggiunta dai calcolatori,
- quantità di dati disponibili,
- possibilità di sfruttare sensori (IoT) a basso costo
- nuovi livelli di connettività consentiti dalla rete.
Il software, in pochissimi anni, ha “mangiato” sia mercati tradizionali (librerie, pubblicità, distribuzione musica, recruiting, comunicazioni) sia singoli processi o porzioni di catene di valore (logistica e distribuzione, ottimizzazione dei prezzi, gestione immagini satellitari, intrattenimento nei trasporti).
Tutto quello che il software fa (già) meglio e prima di noi
Molti sistemi di analisi, reportistica e presentazione dei dati, da diverso tempo, sono già in grado di sfruttare meccanismi di Intelligenza Artificiale per scrivere riepiloghi e relazioni testuali semplicemente sfruttando i numeri e i grafici a disposizione, convertendo così i dati in narrazioni, sfruttando componenti di natural language generation (NLG).
Si potrebbe rimanere sorpresi nel sapere quanti media, tra cui The New York Times, Associated Press, Reuters, Washington Post e Yahoo! Sport (o anche altre tipologie di aziende come Commerzbank, Groupon, Forbes, USAA), utilizzano già l’IA per generare, in maniera automatica, alcuni dei loro contenuti sfruttando gli stessi meccanismi di NLG citati poco sopra.
Come avviene per altri utilizzi dell’IA, questa generazione di contenuti consente alle imprese di poter elaborare set di dati di grandi dimensioni in modo più efficiente di quanto possano fare le persone.
La rapidità con cui si ottiene questo risultato è di sicuro incredibilmente maggiore rispetto a quanto sarebbero in grado di fare gli umani.
Oggi, gli assistenti virtuali sono in grado di affiancarci e aiutarci nel fare diverse operazioni. Si pensi all’organizzazione di una riunione in un momento libero nelle agende di tutti i partecipanti, alla gestione della grafica delle presentazioni basandosi su quanto stiamo scrivendo permettendoci, così, di concentrarci più su quanto vogliamo dire, piuttosto che su come vogliamo costruirne l’impaginazione e il layout.
Scriviamo mail sui nostri telefonini che sono in grado sia di correggere i nostri errori ortografici, sia di suggerirci la successiva parola da scrivere.
L’IA sta permettendo a qualsiasi settore e industria di poter sfruttare le potenzialità che mette a disposizione.
Molte aziende stanno automatizzando processi aziendali (Business Process Automation, BPA) modificando la loro strategia operativa per risolvere punti deboli presenti in aree come il marketing, le vendite, il customer care o l’assunzione di personale; oppure stanno inserendo dei Robotic Process Automation (RPA) per eliminare la necessità, demandata a operai umani, di svolgere attività ripetitive.
Ironia della sorte, i vantaggi dell’IA vengono applicati anche a quei lavori che tipicamente vengono utilizzati proprio per la realizzazione dei sistemi automatizzati.
Il software 2.0: il ruolo dell’AI
Come ha avuto modo di dire più volte Andrej Karpathy, già ricercatore di OpenAI e oggi direttore dell’AI di Tesla, il cosiddetto “Software 2.0” utilizzerà l’automazione per sfruttare una sinergia tra gli sviluppatori e le macchine su cui lavorano: “Le reti neurali non sono solo un’altra modalità di classificare, rappresentano l’inizio di un cambiamento fondamentale nel modo in cui scriviamo il software. Parliamo di software 2.0”.
La scrittura e lo sviluppo del software è tipicamente un processo iterativo: un programmatore scrive alcune righe di codice, le verifica e quindi, basandosi sui risultati ottenuti, procede con le successive righe di codice.
Questo tipo di processo è esattamente ciò che i sistemi di intelligenza artificiale possono automatizzare, prendendo il posto occupato dalle fasi di iterazione degli sviluppatori permettendo, così, di liberare tempo affinché possa essere utilizzato per attività a più alto valore come concentrarsi su come realizzare soluzioni nuove e innovative.
Il tradizionale ciclo di vita di uno sviluppo software inizia, generalmente, con la definizione dei requisiti (una specifica tecnica), quindi passa alla progettazione e al suo sviluppo. Una volta costruito un prototipo, vengono utilizzati dei test per controllarne funzionamento e qualità. Infine, una volta superati tutti i precedenti passaggi, avviene prima il passaggio in produzione e, successivamente, viene iniziata la fase di (continua) manutenzione.
Le metodologie agili possono accelerare questi cicli, grazie alla scelta di set di funzionalità ridotte su cui concentrarsi, per sprint di 2-4 settimane anziché costruire per intero tutto il software in un unico progetto.
Questo processo, sia agile che non, è essenzialmente sempre lo stesso.
Tentando di semplificare, oggi vengono creano segmenti di codice e di istruzioni con una serie di regole: se accade X, allora Y, altrimenti Z.
Siamo noi a istruire la macchina, riga per riga mentre, grazie a tecnologie come il deep learning (tecniche di apprendimento automatico che, simulando il comportamento del nostro cervello, insegnano ai computer a svolgere un’attività naturale per l’uomo), ormai i computer vengono educati più che programmati.
AI, un nuovo paradigma di creazione del software
Il “software 2.0” potrà invece basarsi su una rete neurale in grado di apprendere quali istruzioni o quali regole sono necessarie per ottenere il risultato desiderato, sostituendo la necessità (per le persone) di “scrivere” istruzioni.
In questo scenario, alcune figure legate all’ingegneria del software potrebbero avvicinarsi a ruoli simili a quelli di “data enabler”, professionisti in grado di comprendere sia i dati necessari agli sviluppi che quelli che si attendono come risposta/soluzione per poterli farli gestire dagli algoritmi di IA.
Per anni abbiamo utilizzato sistemi di refactor automatici (tecniche applicate per migliorare alcune caratteristiche non funzionali del software come leggibilità, manutenibilità, riusabilità, estensibilità, …) per risparmiare tempo nella riscrittura di codice.
Domani, l‘automazione basata sull’intelligenza artificiale potrà essere utile agli sviluppatori di software, così come ha dimostrato nel tempo il “pair programming”, una tecnica di sviluppo software nella quale due programmatori lavorano insieme a un’unica postazione di lavoro, un processo di costante collaborazione con altri colleghi: una cooperazione che permette di fondere e condividere esperienze differenti con approcci differenti, con l’obiettivo di fare meglio quanto già viene fatto.
Mi piace immaginare un assistente in grado di determinare il tipo di funzione che sto scrivendo e, quindi, che possa essere in grado di suggerirmi, in maniera automatica, come completarla basandosi sul mio stile e utilizzando un’analisi predittiva di alto livello.
Mi piace pensare che sarò e saremo in grado di ridurre il tempo utilizzato per scrivere implementazioni, per poter aumentare quello dedicato alla comprensione e alla risoluzione dei problemi che devono essere corretti.
Mi immagino riunioni in cui viene discussa una necessità (“mi serve una videata dove poter far inserire i dati di…”) e una macchina che, comprendendo cosa si vuole ottenere, inizi a realizzare un prototipo e delle istruzioni da cui partire.
Definendo con pattern uno schema ricorrente o una struttura ripetitiva (in generale, indica la ripetizione di una determinata sequenza), il suo rilevamento automatico potrebbe essere reso automatico e approfondito così da identificare e classificare i tipi di errore (pattern detection: una sotto area dell’apprendimento automatico, consiste nell’analisi e identificazione di schemi al fine di identificarne la classificazione).
Algoritmi di deep learning potrebbero, in questo modo, contrassegnare errori noti e accelerare il processo di debug, l’attività che consiste nell’individuazione e nella correzione dei malfunzionamenti.
Oltre a suggerire il completamento del codice, una volta appresi i modelli necessari, un sistema di intelligenza artificiale potrebbe generare codice mettendo insieme alcuni moduli predefiniti, un po’ come costruire oggetti sempre diversi avendo a disposizione differenti mattoncini Lego.
Provando a ragionare su quali sono gli aspetti che potrebbero beneficiare da subito degli approcci di intelligenza artificiale, potremmo considerare:
- prototipazione rapida, per passare da requisiti a interfacce visuali
- assistenti intelligenti alla programmazione, per avere supporto / raccomandazioni / debug
- gestione degli errori, identificando errori comuni e gestendoli automaticamente nella fase di scrittura del codice
- refactoring automatico, gestendo pulizia del codice per migliorare leggibilità, collaborazione e manutenzione
- analisi e precisione delle stime, potendo prevedere tempi di sviluppo e budget necessari in maniera più precisa
- decisioni strategiche, suggerendo quali caratteristiche e funzionalità priorizzare nello sviluppo
Siamo certamente ancora agli inizi e ci vorranno anni prima che queste tecnologie possano essere utilizzate in maniera approfondita e su ampia scala.
Il punto vero è aver presente che il deep learning e l’intelligenza artificiale in genere, non è e non potrà essere la soluzione a tutti i problemi ma, certamente, può metterci nella condizione di avere ambienti più ricchi e con più competenze. E questo può solo essere un bene per tutti.