Automatyczne uzupełnianie kodu widział chyba każdy, kto miałokazję skorzystać z IDE takich jak VisualStudio czy Eclipse. Bayoupotrafi jednak znacznie więcej – podany mu szkielet programu wJavie przekształca w pełen działający kod, wykorzystujączasygnalizowane mu przez programistę nazwy metod i typy zmiennych.Wykorzystuje w tym celu sieć neuronową – i najwyraźniej potrafiznacznie więcej, niż zastąpienie kikutu kodu jednym poprawnymrozwiązaniem.
Jak wyjaśniają w artykule pt. *Neural Sketch Learning forConditional Program Generation *twórcyBayou, amerykańscy informatycy Vijayaraghavan Murali, Letao Qi,Swarat Chaudhuri i Chris Jermaine, wykorzystywana jest w tym celunowatorska sieć neuronowa, gaussowski koder-dekoder, działającymna zbiorze próbek kodu źródłowego, pobranych z GitHuba. Podczasszkolenia Bayou przekształca kod źródłowy w syntaktyczne,drzewiaste modele kodu, tzw. szkice, z których znikają wszystkieniskopoziomowe nazwy i operacje, zachowana zaś zostaje strukturakodu, kolejność wywoływania metod interfejsów oraz typyprzyjmowanych i zwracanych danych.
Następnie sieć neuronowawykorzystuje te dane do dopasowania wyuczonych modeli dowprowadzonego zapytania i zwraca najlepiej pasujące rezultaty. Pókico z pewnymi ograniczeniami – obsługuje tylko trzy API (java.lang, java.io i java.util), nie radzi sobie z dzikimi kartami wtypach generycznych, zwraca też tylko najbardziej typowerozwiązania, najczęściej spotykane wśród programistów.
import java.io.File; public class Test { void read(File file) { { /// call:readLine } } } Kod wpisany przez programistę...Dostępne jednak w sieciinteraktywne demo AskBayoupokazuje, że już dziś rozwiązanie to sporo potrafi. Po stworzeniuszkicu kodu zawierającego jedną „dziurę” – brakujący blokkodu, sieć neuronowa zamieni podane jej w specjalnej notacjizapytanie w prawdopodobnie najlepszy kod wybrany ze zbiórnajbardziej dostępnych rozwiązań zawierających wskazane metody itypy danych.
import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.FileNotFoundException; import java.io.FileReader; public class TestIO { void read(File file) { { FileReader fr1; BufferedReader br1; String s1; try { fr1 = new FileReader(file); br1 = new BufferedReader(fr1); s1 = br1.readLine(); } catch (FileNotFoundException _e) catch (IOException _e) return; } } } ...i jego uzupełnienie przez BayouW przyszłości Bayou przyniesiejeszcze więcej. Już niebawem ma zyskać interaktywność, wbudowanyw środowiska deweloperskie będzie sugerował całe fragmenty kodugdy programista pisze swój kod. Docelowo ma być w stanie generowaćcałe grupy metod czy klas. Doczeka się nawet obsługi językanaturalnego zamiast specjalnych notacji zapytań, tak aby uczynićprogramowanie dostępnym jeszcze większej liczbie ludzi.
No cóż, niewykluczone, że za10-15 lat zawód korporacyjnego programisty po prostu przestanieistnieć: wystarczą kompetentni analitycy, którzy sieciom neurowymbędą przedstawiali wystarczająco precyzyjne specyfikacje potrzebbiznesu. Kod aplikacji napisze się wówczas sam, i to bez tej całejmagii scrum masterów.