Sztuczna inteligencja już dziś pisze kod za programistę, czy jutro go zastąpi?
Komputerowe wspomaganie programowania to nic nowego. Współczesneśrodowiska deweloperskie prowadzą programistów praktycznie zarękę. Dodajmy do tego jeszcze serwis StackOverflow, zawierającywszystkie chyba możliwe rozwiązania wszystkich możliwychprogramistycznych problemów, a widać, że poprzeczka dlaprogramistów jest dziś zawieszona o wiele niżej, niż w czasachaktywności zawodowej ich ojców i dziadów. Czy można ją obniżyćjeszcze bardziej? Informatycy z Rice University w Teksasie uważająże tak. Przedstawili narzędzie o nazwie Bayou, które w dużymstopniu zastępuje programistę w pisaniu kodu w Javie.
27.04.2018 15:27
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.