Idea inteligentnego robota, który wspomaga kodera w codziennej pracy była jeszcze chwilę temu marzeniem futurystów i zagadnieniem rozważanym jako science-fiction. Dziś można powiedzieć, że jest to – nagle i niespodziewanie – rzeczywistość, i to taka, która rewolucjonizuje całą branżę, domaga się adaptacji, nieodwracalnie i bezpowrotnie zmienia sposób, w jaki pracujemy.
Programiści mają dziś dostęp do zaawansowanych narzędzi AI, które potrafią nie tylko generować kod, ale także go analizować, optymalizować, testować i zapewniać bezpieczeństwo projektów, a to wszystko przy bardzo dużej wydajności i za niewielką cenę.
W artykule tym przyjrzymy się nowemu typowi narzędzi dla koderów i programistów, jakim są asystenci AI, czyli wirtualni pomocnicy, którzy całościowo wspomagają codzienną pracę przy pisaniu kodu.
Co oferuje i do czego może się przydać asystent AI
Asystenci AI to zaawansowane narzędzia, które korzystają z modeli językowych i algorytmów uczenia maszynowego w celu znaczącego usprawnienia i przyspieszenia procesu tworzenia oprogramowania. Najbardziej popularne z nich, takie jak GitHub Copilot czy Tabnine, są trenowane na bardzo dużych bazach kodu, dzięki czemu potrafią rozpoznawać i sugerować rozwiązania dla praktycznie dowolnego zakresu problemów programistycznych. Działają one na zasadzie “pair programming”, gdzie AI pełni rolę wirtualnego partnera, wspomagając kodera w czasie rzeczywistym.
Można powiedzieć, że powstaje aktualnie “standard” dla tego typu narzędzi i są one już w pełni dojrzałe: większość z nich oferuje w zasadzie podobne funkcjonalności, a wybór konkretnego rozwiązania jest kwestią indywidualnych preferencji, być może wymagań projektu, w mniejszym stopniu ceny. Narzędzia te mogą integrować się bezpośrednio z edytorami kodu (IDE) takimi jak np. Visual Studio Code, oferując programistom niespotykane dotąd, intuicyjne środowisko pracy.
Poniżej przedstawiamy szczegółowy przegląd najważniejszych możliwości, które te narzędzia dostarczają, wraz z krótkimi przykładami ich zastosowania.
Wsparcie dla wielu języków programowania
Asystenci AI potrafią integrować się do pracy z dowolnym używanym językiem programowania, ale jakość odpowiedzi może zależeć od bazy kodu, na której trenowany był model. Na przykład narzędzie Copilot będzie potencjalnie najlepiej współpracować z językami JavaScript i Python, ponieważ to one są najpopularniejsze w repozytoriach GitHub, na których trenowany był model.
Generowanie fragmentu kodu na podstawie opisu tekstowego
Asystenci AI, tacy jak GitHub Copilot, mogą generować fragmenty kodu na podstawie naturalnego języka. Programista może napisać komentarz lub prompt w oknie czasy z opisem jakiego rodzaju rozwiązania potrzebuje, a narzędzie wygeneruje odpowiedni kod. Przykład: Po wpisaniu komentarza “funkcja, która sortuje tablicę liczb rosnąco”, narzędzie wygeneruje odpowiedni kod w wybranym języku programowania.
Autouzupełnianie kodu podczas pisania
Narzędzie analizuje kontekst i podpowiada kolejne wiersze lub całe fragmenty kodu, co znacząco przyspiesza proces pisania prostych fragmentów kodu. Przykład: Pisząc document.querySelector(‘, narzędzie może automatycznie podpowiedzieć zakończenie selektora oraz następne kroki w manipulacji DOM.
Analiza fragmentów kodu z możliwością refaktoryzacji
Asystenci AI mogą analizować istniejący kod i sugerować refaktoryzację, co pomaga uzyskać bardziej czytelny i efektywny kod. Przykład: Narzędzie może zaproponować przekształcenie długiej funkcji na kilka mniejszych, bardziej modularnych funkcji.
Analiza kodu pod kątem błędów, wydajności i bezpieczeństwa
Asystenci AI mogą automatycznie wykrywać i naprawiać potencjalne błędy, problemy z wydajnością oraz luki bezpieczeństwa w kodzie. Przykład: narzędzie może zidentyfikować podatność na atak SQL Injection i zaproponować odpowiednie poprawki.
Automatyczne pisanie testów do wskazanych fragmentów kodu
Narzędzia te mogą generować np. testy jednostkowe na podstawie istniejącego kodu, co ułatwia proces testowania i zapewnia wyższą jakość oprogramowania. Przykład: Po wskazaniu funkcji, AI może wygenerować zestaw testów jednostkowych pokrywających różne scenariusze użycia tej funkcji.
Możliwość generowania dokumentacji dla wskazanego fragmentu kodu
Asystenci AI mogą automatycznie tworzyć dokumentację funkcji, metod, klas, co ułatwia zrozumienie kodu przez innych programistów. Przykład: Narzędzie generuje szczegółowy opis funkcji, jej parametrów oraz zwracanych wartości, na podstawie samej definicji funkcji.
Możliwość analizowania całego projektu i udzielania odpowiedzi kontekstowych
Narzędzia mogą analizować cały projekt, wskazywać powiązane miejsca w kodzie oraz odpowiadać na pytania związane z bazą kodu. Przykład: na podstawie promptu tekstowego AI może znaleźć miejsce w kodzie gdzie zaimplementowana jest jakaś funkcjonalność, wyjaśnić lub rozbudować konfigurację projektu itp.
Generowanie tekstowych objaśnień wskazanego fragmentu kodu
Asystenci AI mogą generować objaśnienia dla wybranego fragmentu kodu, co może być przydatne przy wdrażaniu się do nowego projektu, lub dla początkujących programistów. Przykład: Narzędzie może wyjaśnić wiersz po wierszu co robi zaznaczony blok kodu.
Generowanie poleceń dla terminala na podstawie promptów tekstowych
AI może tłumaczyć polecenia w naturalnym języku na odpowiednie polecenia terminala, co ułatwia pracę z wierszem poleceń. Przykład: Wpisanie w oknie czatu promptu zatrzymaj wszystkie kontenery docker spowoduje wygenerowanie polecenia docker stop $(docker ps -aq) z możliwością wklejenia go bezpośrednio w okno otwartej konsoli.
Okno czatu z możliwością zadania dowolnego pytania
W zasadzie wszystkie tego typu narzędzia oferują interaktywne okno czatu, gdzie programiści mogą zadawać pytania dotyczące kodu lub technologii, a AI odpowiada w czasie rzeczywistym. Pytania nie muszą być stricte związane z kodem, dostaniemy także odpowiedzi z teorii, dokumentacji itp. W dużym stopniu może to usunąć konieczność przeszukiwania sieci w odpowiedzi na te pytania – dostajemy je od razu w edytorze kodu.
Wsparcie dla zarządzania zależnościami i konfiguracjami projektu
Asystenci AI mogą pomagać w zarządzaniu zależnościami projektu, automatycznie generować pliki konfiguracyjne i zarządzając pakietami. Przykład: Narzędzie może automatycznie wygenerować plik package.json dla projektu Node.js, zawierający wszystkie podane i wymagane zależności.
Integracja z systemami kontroli wersji
Asystenci AI mogą współpracować z systemami kontroli wersji, pomagając w pisaniu komunikatów z commitów oraz w automatycznym tworzeniu pull requestów. Przykład: Po zakończeniu pracy nad funkcjonalnością, narzędzie może wygenerować sugestie do komunikatu z commitem oraz automatycznie stworzyć pull request z opisem zmian.
Korzyści i zagrożenia płynące z wykorzystania w codziennej pracy narzędzi AI
Wykorzystanie narzędzi typu asystent AI przynosi wiele korzyści dla programistów, znacząco poprawiając różne aspekty procesu tworzenia oprogramowania. Jednak, jak każde narzędzie, mogą one mieć pewne niekorzystne aspekty. Poniżej przedstawiamy najważniejsze zalety i potencjalne negatywne cechy, które warto rozważyć wdrażając do swojej codziennej pracy nowe narzędzie.
Zalety i korzyści
Przyspieszenie pracy.
Asystenci AI znacząco przyspieszają proces pisania kodu dzięki funkcjom takim jak autouzupełnianie, generowanie kodu na podstawie opisów tekstowych oraz automatyczne pisanie testów. Programiści mogą skupić się na bardziej kreatywnych i złożonych zadaniach, oszczędzając czas na rutynowych czynnościach. Przykład: Generowanie funkcji sortującej w JavaScript na podstawie krótkiego opisu pozwala zaoszczędzić czas potrzebny na pisanie i testowanie kodu od podstaw.
Potencjalne zwiększenie jakości kodu
Asystenci AI pomagają w identyfikowaniu błędów, sugerują poprawki i optymalizacje oraz automatycznie generują testy jednostkowe, co prowadzi do wyższej jakości kodu. Przykład: Narzędzie może zidentyfikować potencjalne luki bezpieczeństwa w kodzie JavaScript, takie jak podatność na ataki XSS, i zaproponować odpowiednie poprawki.
Wsparcie przy wdrożeniu do nowego projektu
Asystenci AI mogą generować dokumentację, objaśniać działanie fragmentów kodu i odpowiadać na pytania w czasie rzeczywistym, co jest szczególnie wartościowe np. przy wdrażaniu się do nowego projektu, code review lub dla osób uczących się programowania.
Ułatwienie zarządzania projektami
AI może pomóc w zarządzaniu zależnościami i konfiguracjami projektu, automatycznie generując pliki konfiguracyjne lub fragmenty konfiguracji i zarządzając pakietami. Asystenci AI mogą współpracować z systemami kontroli wersji, pomagając w pisaniu komunikatów z commitów oraz w automatycznym tworzeniu pull requestów.
Wady i zagrożenia
Potencjalne błędy w generowanym kodzie
Większość dyskutowanych narzędzi to modele trenowane na konkretnej bazie kodu, ale mimo zaawansowanej technologii wygenerowany kod może zawierać błędy lub nie być optymalny. Programiści powinni zawsze weryfikować i testować generowany / podpowiadany kod – narzędzia te są pomocą, ale nie są w stanie (jeszcze przez chwilę) podjąć odpowiednio wszystkich decyzji i zastąpić człowieka. Przykład: Wygenerowana funkcja może działać poprawnie w większości przypadków, ale nie obsługiwać wszystkich skrajnych przypadków, co może prowadzić do błędów w aplikacji.
Uzależnienie od narzędzi
Poleganie na asystentach AI może prowadzić do uzależnienia od tych narzędzi, co może negatywnie wpłynąć na umiejętności programistyczne, zwłaszcza wśród początkujących programistów. Przykład: Młody programista może polegać na narzędziu do tego stopnia, że zaniedba naukę podstawowych konceptów programowania, takich jak ręczne pisanie testów jednostkowych.
Koszty korzystania z narzędzi
Aktualnie wszystkie zaawansowane narzędzia AI są płatne – z jednej strony są to stosunkowo niewielkie ceny, z drugiej to jednak kolejnym koszt, który dochodzi na stałe i musi być uwzględniony.
Zagadnienia związane z prywatnością i bezpieczeństwem
Korzystanie z narzędzi AI, które analizują kod, może wiązać się z obawami dotyczącymi prywatności i bezpieczeństwa danych, zwłaszcza w przypadku projektów zawierających wrażliwe informacje. Przykład: Firmy mogą obawiać się, że kod analizowany przez narzędzie AI może być w jakiś sposób wykorzystywany lub udostępniany bez ich zgody. Większość narzędzi oferuje w tym zakresie wbudowane zapewnienia o prywatności lub dodatkowe możliwości do wyboru.
Przegląd wybranych asystentów AI dla koderów
GitHub Copilot
https://github.com/features/copilot
GitHub Copilot to zaawansowany asystent kodowania, opracowany przez GitHub we współpracy z OpenAI. Wykorzystuje model językowy GPT-4, jest trenowany na ogromnej bazie kodu z publicznych repozytoriów GitHub, a także innych zasobów. Jest to narzędzie zaprojektowane, aby działać jako wirtualny “pair programmer”, który współpracuje z programistą w czasie rzeczywistym.
Copilot integruje się z popularnymi edytorami kodu, w szczególności z Visual Studio Code. Moduł czatu oferuje kilka szczegółowych kontekstów, m.in. “workspace” umożliwiający zadawanie pytań odnoszących się do całej bazy kodu, lub “terminal” generujący polecenia do wklejenia w konsoli.
Koszt narzędzia: aktualnie oferowane są 3 różne plany z rozliczeniem miesięcznym – indywidualny za 10$, dla firm za 19$ oraz enterpise z rozbudowanym zestawem możliwości za 39$.
Cursor
Cursor to samodzielne IDE, budowane na bazie Visual Studio Code przez firmę Anysphere. Edytor, poza wszystkimi funkcjonalnościami VSCode, oferuje wbudowanego, zintegrowanego asystenta AI, który przedstawia się jako Copilot++, czyli z założenia jest konkurencyjną i ulepszoną wersją Copilot od GitHub. Jednak oba (a właściwie wszystkie) wymienione narzędzia rozwijają się dynamicznie i w aktualnym dla czytelnika punkcie czasowym jeden niekoniecznie musi być “lepszy” od drugiego.
Cursor oferuje możliwość użycia własnego modelu o nazwie “cursor-small”, który opisany jest jako “mniej zaawansowany niż GPT-4, ale wystarczający do prostych zadań edycyjnych”.
Cursor przedstawia się jako narzędzie umożliwiające kontekstową pracę na całej bazie kodu, jednak od jakiegoś czasu również narzędzie GitHuba (i większość innych) oferuje taką możliwość.
W momencie pisania tego tekstu edytor Cursor oferuje faktycznie kilka widocznych usprawnień w porównaniu do Copilot, m.in.:
- generowane sugestie zmian w kodzie pokazywane są w widoku diff;
- edytor potrafi generować podpowiedzi w wielu wierszach kodu na raz, lub generować je krokowo w kolejnych częściach kodu (nawigacja tab);
- czat obsługuje możliwość przeszukiwania sieci lub dołączenia do kontekstu dokumentacji api / biblioteki z podanego adresu url w sieci;
- możliwość dołączenia grafiki jako kontekstu wizualnego do zapytań.
Koszt: edytor oferowany jest aktualnie w trzech planach, które różnią się głównie ilością możliwych do wykonania zapytań danego typu do danego modelu: Hobby (darmowy), Pro (20$/miesiąc), Business (40$/miesiąc).
Tabnine
Tabnine jest asystentem AI integrującym się z wybranym edytorem kodu (podobnie jak Copilot) i oferuje zasadniczo zbliżony zestaw rozwiązań UI i funkcjonalności jak inne tego typu narzędzia: autouzupełnianie kodu w edytorze oraz okno czatu do interakcji z kodem i zadawania pytań.
W chwili pisania tego tekstu Tabnine oferuje jednak pewne możliwości wyróżniające go na tle wymienionych wcześniej narzędzi. Są to m.in.:
- możliwość wyboru modelu używanego do pracy z szerokiej listy; lista oferuje poza modelami GPT także Codestral, Mistral, Claude Sonnet oraz zalecany model Tabnine Protected; przy każdym modelu mamy krótki opis oraz informacje na temat prywatności, zabezpieczeń i wydajności modelu;
- zapewnienie o zwiększonej prywatności przy używaniu modeli Tabnine: nasz kod nie jest przechowywany ani udostępniany bez zgody, modele nie są trenowane na naszym kodzie;
- zapewnienie, że narzędzie uczy się naszego stylu oraz wzorców i dopasowuje do tego generowane propozycje kodu;
- kontekst “onboarding” w oknie czatu, który generuje wprowadzenie do zawartości aktualnego workspace: opis, listę najważniejszych plików z krótkim opisem, wskazania na temat używanych narzędzi;
- w planie Enterprise możliwość zintegrowania z całą bazą kody firmy (np. przez konto github, gitlab) i dopasowanie odpowiedzi do uzyskanej stamtąd wiedzy.
- możliwość lokalnej instalacji narzędzia w całkowicie prywatnym środowisku
Koszt: narzędzie jest oferowane w trzech wersjach: darmowej (bardzo ograniczonej), Pro za 15$ miesięcznie (90-dniowy okres za darmo) oraz Enterprise za 39$.
Amazon Q Developer
https://aws.amazon.com/q/developer
Dawniej Amazon Whisperer, to narzędzie zintegrowane jako część ekosystemu AWS, co ułatwia programistom tworzenie aplikacji w chmurze. Narzędzie zbudowane jest na platformie Amazon Bedrock, czyli usłudze w ramach AWS, która zapewnia dostęp do zaawansowanych modeli językowych i generatywnych modeli AI (np. Amazon Titan do generowania obrazów) od różnych dostawców.
Asystent integruje się z IDE, ale jest też dostępny np. w konsolach AWS i oferuje podobne funkcjonalności jak wymienione wcześniej narzędzia: autouzupełnianie kodu, czat, praca kontekstowa z kodem. W szczególności narzędzie może automatycznie sugerować kod, który wykorzystuje różne usługi AWS, takie jak S3 czy Lambda.
Na uwagę zasługuje kontekst “dev”, który pozwala wykonać np. nową funkcjonalność w projekcie: dla danego promptu z opisem narzędzie tworzy plan, który po zaakceptowaniu zmieniany jest na kod oraz dzielony na pliki. Asystent potrafi też w tym kontekście np. automatycznie migrować kod na nowszą wersję języka (aktualne dostępne dla języka Java).
Koszt: aktualnie narzędzie oferowane jest w wersji Free (limity ilościowe i funkcjonalne) oraz w wersji Pro za 19$ miesięcznie.
Podsumowanie
Widzimy aktualnie proces tworzenia się standardu nowego typu narzędzi AI dla koderów i programistów. Większość z wirtualnych asystentów oferuje zbliżoną bazę funkcjonalności, czyli czat, sugestie kodu generowane na bieżąco w edytorze oraz konteksty do pracy z kodem: refactoring, testy, wyjaśnianie i dokumentowanie kodu, przeszukiwanie bazy kodu pod kątem problemu postawionego przez prompt.
Narzędzia te rozwijają się bardzo szybko, uzupełniają i wymieniają funkcjonalnościami w ramach konkurencji na rynku. Trudno powiedzieć które z nich jest “najlepsze” – wyboru pod tym kątem każdy powinien dokonać sam biorąc pod uwagę preferowany interfejs, być może jakieś szczegółowe funkcjonalności, które w danym momencie wyróżniają narzędzie korzystnie pod kątem naszej codziennej pracy. Koszty dostępu również są zbliżone i oscylują między 10 a 20 dolarów miesięcznie.
Dyskutując całkowicie nowy typ narzędzi dla koderów warto na koniec zwrócić uwagę, że ich pojawienie się na rynku to rodzaj rewolucji, która fundamentalnie przedefiniuje i przekształci całą branżę, a w zasadzie już to się dzieje. Narzędzia AI już dziś potrafią wyraźnie przyspieszyć, usprawnić i uprzyjemnić nam pracę, zwłaszcza w prostszych projektach sieciowych, typu np. strony internetowe budowane na WordPress.