Home » AGH 2022/23 » Automatyczne generowanie kodu w pracy webmastera. Czy sztuczna inteligencja będzie nam pisać strony internetowe?

Tagi

Wyróżnione posty

Zobacz też

Statystyki

  • 116
  • 642
  • 25 020
  • 7 313
  • 23

Automatyczne generowanie kodu w pracy webmastera. Czy sztuczna inteligencja będzie nam pisać strony internetowe?

Spread the love

Automatyczne generowanie kodu w ostatnich latach stało się wizją dość nieodległej przyszłości. Na ile jest to jednak realna groźba automatyzacji i utraty miejsc pracy przez programistów, a na ile nieuzasadniony strach przed nieznanym w dobie szybkich zmian? Ten artykuł ma za cel przybliżyć ten temat, skupiając się jednak przede wszystkim na pracy webmasterów. Przeanalizujemy przedstawiony problem, przybliżając dwa jego oblicza oraz ich wpływ na branżę – podejście oparte o ręczne składanie gotowych elementów w uproszczony półautomatyczny sposób, a także w pełni automatyczne generowanie kodu poprzez duże modele językowe pokroju ChatGPT.

 

Wprowadzenie

Dotychczas zawody wymagające kreatywności były uważane za raczej niezagrożone automatyzacją. Okazuje się jednak, iż nic bardziej mylnego, a sztuczna inteligencja stanowi poważnego konkurenta nawet dla artystów. Podobny scenariusz zaczyna się jawić na horyzoncie również dla wielu programistów. O ile można by przypuszczać (w ogólności zresztą bardzo słusznie), że praca tego typu również wymaga kreatywnego podejścia do rozwiązywania przeróżnych problemów, tak jednakowoż wiele w zasadzie zależy od celu i charakteru pracy oraz preferowanego stosu technologicznego – inaczej wygląda przecież pisanie skryptów analitycznych i kodu dla potrzeb uczenia maszynowego, inaczej tworzenie szeroko rozumianego oprogramowania codziennego użytku (na przykład strony internetowe, aplikacje desktopowe i mobilne, czy też gry komputerowe), a jeszcze inaczej oprogramowania specjalistycznego (na przykład sterowniki maszyn). Istnieją przypadki, w których trzeba koniecznie wymyślić sprytny algorytm lub zastosować skomplikowane optymalizacje, natomiast w innych wystarczy zorganizować prosty powtarzalny kod według zadanego schematu.

Wszędzie tam, gdzie jakaś czynność staje się przewidywalna i powtarzalna, wizja automatyzacji szybko staje się niemal nieunikniona. W przypadku tworzenia stron internetowych jest to akurat szczególnie celne spostrzeżenie. Wiele aspektów tworzenia stron internetowych jest wyznaczanych przez utarte schematy oraz wzorce projektowe. Dotyczy to zarówno frontendu, jak i backendu. To z kolei sprawia, że kwestią czasu była, jest lub będzie automatyzacja (w zależności od tego, gdzie stawiamy sobie granicę tego co uważamy za wystarczający stopień automatycznej generacji kodu).

 

Tradycyjne podejścia do generowania witryn internetowych

W przypadku stron internetowych nie jest to być może taka przewidywalność, jaką można by szczególnie łatwo ująć w postaci ogólnego zbioru reguł lub jakiegokolwiek modelu generatywnego. W związku z tym przez dłuższy czas najpopularniejszą opcją było po prostu wykorzystywanie szablonów. Jest to dosyć proste rozwiązanie, które nie pozwala co prawda na szczególnie dużą dowolność, ale jest za to wygodne – nie potrzeba zaawansowanych umiejętności programistycznych, a mamy gotowe do wykorzystania niemal wszystkie standardowe funkcjonalności strony internetowej, na których może nam zależeć. Dzięki szerokiemu wyborowi szablonów i możliwościom dostosowania różnych aspektów wyglądu (takich jak chociażby kolorystyka, tła czy czcionki) szybko stał to się bardzo popularny wybór na przykład dla osób piszących własne blogi internetowe z wykorzystaniem takowych narzędzi, często ze zintegrowanym hostingiem, jak na przykład niezwykle popularny WordPress.

Szablony zyskały również spore uznanie w tworzeniu niegdyś niezwykle popularnych internetowych forów dyskusyjnych (obecnie wypartych przez grupy i kanały w mediach społecznościowych). W ten sposób raczej skomplikowany zbiór funkcjonalności stał się dostępny od ręki dzięki obecności szeroko rozpowszechnionych szablonów, które dzięki licznym skórkom i pluginom mogły być dość mocno personalizowane.

Obecnie poniekąd sporą funkcjonalnością cieszą się także rozwiązania umożliwiające tworzenie witryn internetowych w jeszcze bardziej przyjazny dla użytkownika sposób, a przy tym pozwalający na niemal nieograniczoną inwencję twórczą, wykorzystując w tym celu intuicyjne narzędzia edycyjne typu “drag & drop” (przeciągnij i upuść), budując stronę od zera lub wychodząc od jakiegoś konkretnego szablonu. Użytkownicy mogą także łatwo wplatać elementy zaawansowanej logiki stron internetowych i kontaktu z backendem, które typowo są najbardziej problematyczne i pracochłonne – są to funkcjonalności takie jak handel elektroniczny, marketing online, formularze kontaktowe czy też fora społecznościowe. Przykładem firmy świadczącej takie usługi jest chociażby “Wix.com”, będący obecnie głównym graczem na tym rynku. Przeciwnicy takich rozwiązań argumentują jednak, iż tworzone w ten sposób witryny bardzo mocno tracą na wydajności oraz są narażone na nieoczekiwane zachowania na różnych nieprzewidzianych pierwotnie platformach, co może się przekładać na kiepskie doświadczenia użytkowników.

Pomimo popularności każdego z wymienionych rozwiązań, żadne z nich nie okazało się w praktyce realnym zagrożeniem dla miejsc pracy programistów stron internetowych. Jakie są zatem szanse, że takim zagrożenie przyjdzie ze strony rozwiązań bazujących na sztucznej inteligencji?

 

Zanim ChatGPT, Inne podejścia do generowania kodu

Strony do generowania witryn, czy też już sławny ChatGPT, czy inne modele sztucznej iteligencji to już wysokopoziomowa abstrakcja do generowania witryn sieciowych czy też aplikacji, jednak może poświęćmy chwile na narzędzia, z którymi już wcześniej mieliśmy do czynienia, a także służą do generowania kodu – może tylko nieco w uproszczonej wersji. Istnieje wiele takich narzędzi do generowania kodu, począwszy od generatorów kodu, a kończąc na edytorach kodu z wbudowanymi funkcjami generowania kodu. Oto kilka przykładów:

  • Generatory kodu: Są to narzędzia automatycznie generujące kod na podstawie określonego wejścia, takiego jak modele danych lub szablony. Przykłady generatorów kodu to Yeoman, Swagger Codegen i JHipster.
  • Środowiska programistyczne (IDE): IDE to aplikacje, które zapewniają kompleksowe udogodnienia dla tworzenia oprogramowania, w tym edycję kodu, debugowanie i generowanie kodu. Niektóre popularne IDE z wbudowanymi funkcjami generowania kodu to IntelliJ IDEA, Visual Studio i Eclipse.
  • Platformy low-code: To platformy do tworzenia oprogramowania, które umożliwiają użytkownikom tworzenie aplikacji bez lub z minimalnym kodowaniem. Zwykle zapewniają interfejsy wizualne i narzędzia typu przeciągnij i upuść, umożliwiające szybkie tworzenie aplikacji. Przykłady platform low-code to Mendix, OutSystems i Appian.
  • Edytory tekstowe z fragmentami kodu: Niektóre edytory tekstu posiadają wbudowane fragmenty kodu lub szablony, które umożliwiają użytkownikom szybkie wstawianie bloków kodu do swoich projektów. Przykłady edytorów tekstu z fragmentami kodu to Atom, Sublime Text i Visual Studio Code.
  • Interfejsy programowania aplikacji (API): API to zestawy instrukcji programowania i standardów, które umożliwiają aplikacjom komunikowanie się ze sobą. Niektóre API mogą być wykorzystywane do generowania kodu na podstawie określonego wejścia, takie jak wspomniany powyżej Swagger Codegen.

 

Czym są generatory tekstu oparte o sztuczną inteligencję?

Generowanie kodu oparte na uczeniu maszynowym to rozwijająca się dziedzina, która ma na celu automatyzację procesu pisania kodu za pomocą algorytmów uczenia maszynowego. Celem jest wygenerowanie kodu, który jest zarówno efektywny, jak i dokładny, jednocześnie minimalizując potrzebę interwencji człowieka.

W tej metodzie modele uczenia maszynowego są szkolone na dużych zestawach przykładów kodu, aby nauczyć się wzorców i struktur w składni i semantyce kodu. Modele te mogą następnie być wykorzystywane do generowania nowych fragmentów kodu lub nawet całych programów na podstawie określonego wejścia lub wymagania.

Istnieje kilka korzyści z korzystania z generowania kodu opartego na uczeniu maszynowym, w tym:

  • Zwiększona efektywność: Generowanie kodu oparte na uczeniu maszynowym może pomóc przyspieszyć proces rozwoju, automatyzując powtarzalne zadania i generując kod szybciej.
  • Poprawiona dokładność: Modele uczenia maszynowego mogą być szkolone na dużych zestawach przykładów kodu, aby poprawić dokładność w generowaniu kodu, który jest poprawny i efektywny.
  • Redukcja błędów ludzkich: Automatyzując proces generowania kodu, metody oparte na uczeniu maszynowym mogą zmniejszyć ryzyko błędów ludzkich i poprawić jakość kodu.

Przykładami narzędzi generujących kod oparte na uczeniu maszynowym są DeepCode, Kite i Codota. Narzędzia te wykorzystują algorytmy uczenia maszynowego do analizowania istniejącego kodu i sugerowania ulepszeń, generowania fragmentów kodu na podstawie wejścia w naturalnym języku oraz nawet uzupełniania całych bloków kodu.

Warto jednak zauważyć, że generowanie kodu oparte na uczeniu maszynowym to nadal rozwijająca się dziedzina i ma pewne ograniczenia. Na przykład wygenerowany kod może nie zawsze być czytelny dla człowieka lub łatwy w utrzymaniu, a istnieje ryzyko, że nie będzie odpowiadał specyficznym wymaganiom danego projektu. Dlatego ważne jest ostrożne korzystanie z narzędzi generowania kodu opartego na uczeniu maszynowym i dokładne weryfikowanie wygenerowanego kodu.

 

Jakie mamy narzędzia generujące kod oparte o uczenie maszynowe?

  • GPT-3: Jest to model przetwarzania języka naturalnego (NLP) opracowany przez OpenAI, który może być wykorzystywany do generowania kodu. Wykorzystywany jest do generowania kodu Python, JavaScript, HTML i CSS.
  • DeepCoder: Jest to system uczenia maszynowego, który może automatycznie generować fragmenty kodu do rozwiązywania problemów programistycznych. Wykorzystuje technikę syntezowania programów do generowania kodu z podanego przykładu wejściowo-wyjściowego.
  • CodeGAN: Jest to sieć generatywno-adwersaryjna (GAN), która może być wykorzystana do generowania kodu. Jest szkolona na zbiorze danych fragmentów kodu i może generować nowy kod, który jest podobny do danych szkoleniowych.
  • Rozumienie kodu przy użyciu sieci neuronowych: Jest to technika uczenia maszynowego, która może być wykorzystana do automatycznego generowania komentarzy dla kodu. Wykorzystuje sieć neuronową do analizy kodu i generowania komentarzy opisujących, co kod robi.
  • Synteza programów z wykorzystaniem przykładów: Jest to technika, która wykorzystuje uczenie maszynowe do automatycznego generowania kodu z zestawu przykładów wejściowo-wyjściowych. Może być wykorzystywana do generowania kodu w różnych językach programowania, w tym w Pythonie i Javie.
  • Tłumaczenie maszynowe: Jest to technika wykorzystująca uczenie maszynowe do tłumaczenia kodu z jednego języka programowania na inny. Może być wykorzystana do konwersji kodu napisanego w jednym języku na kod w innym języku, co ułatwia programistom pracę z różnymi językami programowania.

 

Github Copilot

GitHub Copilot to narzędzie do automatycznego uzupełniania kodu zasilane sztuczną inteligencją, opracowane przez firmę GitHub we współpracy z OpenAI. Wykorzystuje ono model językowy GPT (Generative Pre-trained Transformer) od OpenAI, który na podstawie kontekstu i już napisanego kodu sugeruje fragmenty kodu. Działa ono bezpośrednio w edytorze kodu programisty i może być zintegrowane z popularnymi IDE, takimi jak Visual Studio Code, Atom czy JetBrains.

Celem GitHub Copilot jest zwiększenie efektywności i oszczędność czasu programistów poprzez redukcję potrzeby ręcznego wyszukiwania i pisania kodu. Narzędzie to uczy się z kodu projektu i na tej podstawie oferuje kontekstowe sugestie, które pomagają programiście szybciej i z mniejszą liczbą błędów pisać kod.

Aby skorzystać z GitHub Copilot, programiści muszą mieć dostęp do rozszerzenia GitHub Copilot dla swojego preferowanego edytora kodu i zalogować się na swoje konto GitHub. Podczas pisania kodu GitHub Copilot sugeruje fragmenty kodu, które programista może zaakceptować, zmodyfikować lub odrzucić. GitHub Copilot nie ma na celu zastąpienia ludzkich programistów, ale raczej pomóc im w efektywniejszym pisaniu kodu.

 

ChatGPT

Jedną z głównych zalet Chat GPT jest to, że może zaoszczędzić programistom znaczną ilość czasu. Zamiast pisać kod od podstaw, programiści mogą użyć Chat GPT, aby szybko generować funkcjonalne fragmenty kodu, które mogą być wykorzystane w ich projektach. Ponadto, Chat GPT może pomóc programistom w generowaniu fragmentów kodu w sposób bardziej efektywny, konsekwentny i wolny od błędów.
Innym korzyścią wynikającą z korzystania z Chat GPT do generowania fragmentów kodu jest to, że może pomóc programistom w uczeniu się nowych języków programowania lub technologii. Poprzez podanie podpowiedzi w określonym języku lub technologii, programiści mogą uczyć się, jak pisać kod w tym języku lub technologii, studiując generowane fragmenty kodu.

Chat GPT jest użytecznym narzędziem dla programistów, które może zaoszczędzić czas, poprawić jakość kodu i pomóc w nauce nowych technologii. Korzystając z API udostępnionego przez OpenAI, programiści mogą generować funkcjonalne fragmenty kodu, które mogą być wykorzystane w ich projektach, pomagając w usprawnieniu procesu rozwoju i poprawie ogólnej jakości kodu.

ChatGPT nie został specjalnie zaprojektowany do generowania kodu. Chociaż jest w stanie generować tekst z naturalnego języka na podstawie podpowiedzi, nie posiada specyficznych zdolności programistycznych ani zdolności do generowania całych programów.

 

Podsumowanie

Choć generatory kodu oparte na uczeniu maszynowym mają potencjał do automatyzacji pewnych aspektów rozwoju oprogramowania, jest mało prawdopodobne, że w niedalekiej przyszłości całkowicie zastąpią inżynierów oprogramowania.

Generatory kodu oparte na uczeniu maszynowym zostały zaprojektowane do automatyzacji rutynowych zadań programistycznych, takich jak generowanie szablonowego kodu lub wypełnianie powtarzalnych funkcji. Jednakże, inżynieria oprogramowania wymaga wykonywania wielu innych ważnych zadań, takich jak rozwiązywanie problemów, projektowanie architektury oprogramowania czy debugowanie. Te zadania wymagają ludzkiej kreatywności, myślenia analitycznego i umiejętności rozwiązywania problemów, których maszyny nie są w stanie obecnie naśladować.

Ponadto, generatory kodu oparte na uczeniu maszynowym wymagają starannego szkolenia i walidacji, aby zapewnić, że wygenerowany kod jest poprawny i efektywny. Wymaga to specjalistycznej wiedzy i ekspertyzy w danej dziedzinie, które posiadają tylko ludzie.

Dlatego bardziej prawdopodobne jest, że generatory kodu oparte na uczeniu maszynowym będą pomagać inżynierom oprogramowania w ich pracy, pozwalając im skupić się na zadaniach o wyższym poziomie, wymagających kreatywności i umiejętności rozwiązywania problemów, zamiast całkowicie ich zastępować.

Warto zauważyć, że chociaż modele te mogą być przydatne w automatyzacji pewnych zadań programistycznych, nie są one zastępstwem dla ludzkich programistów. Do projektowania i budowania złożonych systemów oprogramowania wciąż wymagana jest ludzka kreatywność, myślenie analityczne i umiejętności rozwiązywania problemów. Modele AI mogą pomóc programistom w ich pracy, ale nie mogą ich całkowicie zastąpić.

Pytanie do ChatuGTP


Leave a comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Najnowsze komentarze

  1. Ciekawe jest porównanie tradycyjnej terapii z nowymi rozwiązaniami opartymi na modelach językowych. Warto zauważyć, że mimo obiecujących wyników, istnieją ważne…