Justin Gottschlich di Intel Labs guida un team di ricercatori di programmazione di macchine. Il loro obiettivo è automatizzare lo sviluppo del software per ridurre gli errori di codifica e affrontare la carenza di programmatori esperti formati. Credito:Walden Kirsch/Intel Corporation
Il nostro esperto:Justin Gottschlich guida il team di Machine Programming Research (MPR) nel Systems and Software Research Lab. Il nuovo gruppo di ricerca di Justin si concentra sulla promessa pionieristica della programmazione delle macchine, che è una fusione di machine learning, metodi formali, linguaggi di programmazione, compilatori e sistemi informatici.
La sua semplice spiegazione della programmazione delle macchine:MPR utilizza forme di apprendimento automatico e altri metodi automatici per creare software in grado di creare il proprio software. Si chiama programmazione della macchina e riguarda fondamentalmente l'automazione dello sviluppo e della manutenzione del software. Quando completamente realizzato, la programmazione della macchina consentirà a tutti di esprimere la propria creatività e sviluppare il proprio software senza scrivere una sola riga di codice.
La promessa della programmazione delle macchine:nel panorama tecnologico odierno, il software è integrato in quasi tutto ciò che facciamo. Controlla molti aspetti dei nostri dispositivi mobili:laptop, compresse, telefoni. Ci connette a Internet e guida i nostri feed sui social media. Virtualizza i nostri data center e rende le nostre case più intelligenti. Ma lo sviluppo e la manutenzione del software è un processo lungo e soggetto a errori, dice Giustino. "Credo che possiamo creare una società in cui tutti possono creare software, ma le macchine gestiranno la parte di "programmazione", ", dice. "Così, 'programmazione della macchina.'"
Una carenza di programmatori umani:un problema fondamentale per Intel e altre aziende tecnologiche leader, secondo Giustino, è che stanno esaurendo gli sviluppatori senior, una carenza che limita la quantità di programmazione in tutti i settori. Secondo code.org, ce ne sono 500, 000 posizioni di programmazione aperte disponibili solo negli Stati Uniti, rispetto a un raccolto annuale di 50, 000 laureati in informatica. Una carenza simile si riscontra in tutta l'Unione europea. Nel mercato del lavoro di programmazione, Giustino dice, nella migliore delle ipotesi solo il 10% delle persone che ricoprono quei posti di lavoro ha la formazione in informatica per diventare sviluppatori avanzati di alto livello. Con l'hardware eterogeneo di oggi:CPU, GPU, FPGA, ASIC, neuromorfo e, presto, chip quantistici:diventerà difficile, forse impossibile, per trovare sviluppatori che possono correttamente, efficiente, e programmare in modo sicuro su tutto l'hardware.
Ora è il momento:la programmazione delle macchine è una fusione di diversi campi. Utilizza la tecnica di programmazione automatica, da preciso (es. sintesi formale del programma) a probabilistico (ad es. metodi di programmazione differenziabile). Inoltre, utilizza e apprende da tutto ciò che abbiamo costruito in hardware e software fino ad oggi. I ricercatori si sono dilettati nella programmazione delle macchine sin dagli anni '50, dice Giustino. "Ma oggi è diverso. Siamo a un punto di svolta con i nuovi algoritmi di apprendimento automatico, hardware nuovo e migliorato, e dati di programmazione ricchi e densi. Questi sono i tre ingredienti essenziali che crediamo consentano la programmazione delle macchine." Un esempio è illustrato dalla recente ricerca sull'algoritmo genetico (GA) del team di Justin, che illustra come la funzione di fitness di un algoritmo genetico, una complicata euristica di machine learning sviluppata da programmatori esperti, possa essere automatizzata. Justin dice che questo lavoro probabilmente non sarebbe stato possibile solo pochi anni fa.
Rifiuto di accettare i bug:oggi quasi tutti i software su larga scala (ad es. sistemi operativi, browser, piattaforme di social media) include accuratezza, prestazioni o bug di sicurezza. "Il nostro ultimo documento NeurIPS '19 fornisce prove precoci che alcuni tipi di bug che storicamente sono sfuggiti anche al rilevamento di programmatori esperti possono essere rilevati automaticamente con la programmazione della macchina, non richiedono intervento umano, " dice Justin. "Il prossimo passo è risolverli automaticamente."
Da 500, 000 righe di codice su 500:Justin indica un noto esempio dei vantaggi della programmazione delle macchine. Google Traduttore, un servizio che traduce automaticamente tra le lingue, è stato costruito da ingegneri che hanno codificato a mano circa 500, 000 righe utilizzando tecniche di programmazione classiche. Con l'avvento della programmazione della macchina, Google ha riscritto il suo codice, parzialmente utilizzando la programmazione differenziabile (una piccola fetta della torta di programmazione complessiva della macchina). Quella riscrittura ha ridotto la base di codice da 500, 000 linee a 500 linee, un 1, Riduzione di 000 volte. "Non solo la dimensione del codice si è ridotta di 1, 000 volte, "Giustino dice, "l'accuratezza del sistema è effettivamente migliorata:è incredibile".
Più lavori di programmazione, non meno:la programmazione della macchina non eliminerà i lavori, Giustino sostiene, ma invece crearli, forse milioni di loro. Gli aspetti più umili della programmazione saranno automatizzati, lui dice, che è l'obiettivo. Con la programmazione della macchina, Aggiunge, "la nostra visione del cielo azzurro è lunga finché puoi esprimere le tue idee (come le chiamiamo - intenzione) in un modo che la macchina può riconoscere - che si tratti di linguaggio naturale, diagrammi visivi o gesti:la programmazione della macchina crea un percorso per creare il proprio software." Per iniziare a costruire questi sistemi avanzati di programmazione della macchina, Giustino dice, faremo affidamento su una comunità di programmatori e scienziati, coloro che possono lavorare su piattaforme diverse, apprendimento automatico e tecniche formali, hardware eterogeneo, e molti linguaggi di programmazione. Justin e il team delineano la loro visione futura della programmazione delle macchine in un documento pubblicato congiuntamente con i ricercatori del MIT, "I tre pilastri della programmazione delle macchine".