AI

Jak AI pomaga programiście w codziennych zadaniach

laptop na biurku

Jak AI pomaga programiście w jego pracy? Coraz częściej słyszymy stwierdzenie, że po poprzednim roku, okrzykniętym rokiem Metaverse, 2023 zyska miano roku AI. Trudno się z tym nie zgodzić, obserwując trendy, wyścig Google i Microsoftu we wdrażaniu AI do swoich produktów oraz ogólne zainteresowanie tematem w Internecie. Czy tego chcesz, czy nie, AI staje się wszechobecne i niedługo nie będzie można go zignorować w codziennej pracy.

Gdzie jesteśmy?

Pierwszym narzędziem opartym o sztuczną inteligencję, o którym stało się naprawdę głośno, był Github Copilot – asystent, którego głównym zadaniem jest wspieranie programisty w pisaniu kodu i przyspieszanie tego procesu.

Copilot został oddany w ręce programistów w 2021 roku i już wtedy informacja o nim odbiła się szerokim echem na różnych portalach branżowych i kanałach na YouTube.

Od tamtego czasu minął ponad rok, a ja przez ten okres spotkałem zaledwie kilku developerów, którzy wykorzystują to narzędzie w codziennej pracy. Również byłem sceptyczny temu rozwiązaniu i początkowo nie uwierzyłem, że może mi pomóc. Z Copilota zacząłem korzystać kilka miesięcy po zakończeniu medialnej wrzawy.

Przyszedł koniec roku 2022 i głośno zrobiło się o OpenAI i ich nowym produkcie, czyli ChatGPT. Okazało się, że bot bardzo dobrze radzi sobie z generowaniem kodu, reaguje na kontekst i możemy rozmawiać z nim w praktycznie w taki sam sposób, jak z człowiekiem. Co ciekawe, Github Copilot także bazuje na modelu stworzonym przez firmę OpenAI, jednak dopiero za sprawą ChatGPT, zrobiło się o niej naprawdę głośno.

Podobnie, jak w przypadku Copilota, wiele osób zachwyciło się rozwiązaniem i zaczęło generować teksty piosenek, czy żartów. Ci bardziej zainteresowani rozpoczęli eksperymenty związane z użyciem AI w codziennych zadaniach. To doprowadziło do fali postów w social mediach, straszących rychłym końcem wielu istniejących zawodów w tym także zawodu programisty.

Niestety, podobnie jak w przypadku Copilota, kurz prawdopodobnie opadnie i mam wrażenie, że nie nastąpi duża adopcja narzędzia do codzienności większej ilości programistów.

Dostępne narzędzia

Jak AI pomaga programiście w jego pracy? Github Copilot oraz ChatGPT to aktualnie dwa najbardziej popularne narzędzia AI wspierające pisanie kodu. Oprócz tego OpenAI daje nam również dostęp do innych modeli, które mogą wspierać programistę, czyli między innymi GPT-3 oraz Codex.

W dalszej części artykułu postaram się zaprezentować kilka przykładów, gdzie takie narzędzia sprawdzają się najlepiej w mojej pracy.

Github Copilot

Copilot to najprościej mówiąc asystent programowania. Myślę, że każdy programista zna ideę programowania w parach, gdzie jedna osoba pisze kod, a druga obserwuje i stara się podpowiadać, lub naprowadzać w przypadku problemów.

Github Copilot idzie o krok dalej. Narzędzie nie czeka, aż poprosisz o pomoc. Asystent stara się w czasie rzeczywistym analizować kontekst, Twój styl programowania i kod, do którego ma dostęp.

Dzięki temu Copilot jest w stanie wnioskować, co chcesz w danej chwili napisać. Takie podpowiedzi mogą zawierać dokończenie linijki, deklarację całej funkcji lub propozycję konkretnego unit testu. W większości przypadków otrzymujesz kilka propozycji rozwiązania problemu i to od Ciebie zależy, którą z nich zaakceptujesz.

Innym sposobem na użycie Copilota jest określenie potrzeb poprzez odpowiedni komentarz w kodzie. Bot na tej podstawie zwróci propozycję potencjalnych rozwiązań. Ten sposób jest bliższy pracy z ChatGPT, czy samymi modelami GPT-3 oraz Codex, dlatego w takim przypadku wolę się zwrócić bezpośrednio do nich.

Co ciekawe, zasada działania bota jest inna, niż wspomnianych produktów od OpenAI, jednak korzysta on z tego samego źródła, czyli modelu Codex, który został stworzony w OpenAI w celu transformacji ludzkiej mowy na kod.

Z mojego doświadczenia wynika, że przez pierwsze kilka dni, narzędzie jest irytujące i bardziej przeszkadza, niż pomaga. Później następuje etap, gdzie zaczynasz dostrzegać dziejącą się pod spodem magię, a po jakimś czasie już samoczynnie wciskasz tabulator, aby przesunąć się kilka linii do przodu z pisaniem kodu.

Copilot najlepiej sprawdza się podczas prostych czynności. Dla mnie jest to takie “autocompletion” na sterydach. Zdarzają się przypadki, że większość napisanego kodu w danym pliku powstaje poprzez konsekwentne wciskanie tabulatora. Są tacy, którzy twierdzą, że Copilot generuje 80% całego kodu, który chcą napisać i robi to z niemal 100% dokładnością. Być może są projekty, gdzie tak to działa. Niestety nie doświadczyłem jeszcze takiej skuteczności.

Inaczej rzecz ma się w zadaniach wymagających dużej kreatywności. Tam zysk jest mniejszy. Niemniej każdy programista musi napisać od czasu do czasu pętlę, funkcję transformującą dane, deklarację zmiennych lub unit testów. Przy takich zadaniach wkład Copilota jest znaczny, a Ty możesz skupić się na rozwiązywaniu prawdziwego problemu, zamiast analizowaniu składni języka i poprawianiu literówek, które wyszły z Twojej klawiatury.

Dzięki Copilotowi i temu, że tracisz mniej czasu na banalne czynności, masz więcej przestrzeni na rozwiązywanie istoty problemu a sam proces implementacji rozwiązania staje się szybszy.

GPT-3

GPT-3 to w bardzo dużym uproszczeniu model językowy przeznaczony do transformacji tekstu. Możesz mieć do niego bezpośredni dostęp poprzez API, co z punktu widzenia programisty jest sporą zaletą.

Praca z GPT-3 wygląda nieco inaczej niż w przypadku omawianego Github Copilota. Nie jest to współpraca na zasadzie programowania w parach, tylko bardziej zadawanie pytań doświadczonemu koledze z biurka obok.

Takie pytanie to prompt, czyli komenda tekstowa, w której naturalnym językiem określamy, co model może dla nas zrobić. A zrobić może sporo.

Poprzez połączenie z API możesz uzyskać dostęp do modelu z każdego miejsca na Twoim komputerze. Możesz wykorzystać plugin do Twojego ulubionego IDE, własny skrypt lub w przypadku MacOS, makro aplikacji Shortcuts.

Takie makro to mój ulubiony sposób na komunikację z API tego typu. Dzięki niemu mogę przesyłać skopiowany wcześniej do schowka kod lub tekst prosto do modelu, a następnie uzyskać odpowiedź bezpośrednio do edytora, w którym aktualnie jestem.

Działa to naprawdę świetnie i mam całkowitą kontrolę nad promptem i parametrami wysyłanymi do API.

Codex

Codex to bliski, ale bardziej wyspecjalizowany w tworzeniu kodu krewny wspomnianego GPT-3. To właśnie Codex pracuje pod spodem Github Copilota, więc możesz spodziewać się podobnych rezultatów.

Podobnie jak w przypadku GPT-3, do modelu możesz mieć dostęp poprzez API, dzięki czemu zdobędziesz większą kontrolę nad promptem i innymi parametrami przekazywanymi w zapytaniu.

ChatGPT

ChatGPT to najnowszy produkt OpenAI, który może zostać użyty w pracy programisty. ChatGPT działa na nowszym i bardziej zaawansowanym modelu GPT-3.5, do którego nie udostępniono jeszcze dostępu poprzez API.

Dzięki przyjaznemu interfejsowi graficznemu w postaci chatu, użycie ChatGPT jest bardzo wygodne w przypadku, gdy chcemy iterować nad rozwiązaniem problemu, lub potrzebujemy zrobić mały brainstorming.

Jak AI pomaga programiście w pracy?

Wszystkie omawiane narzędzia mogą być użyteczne w codziennych zadaniach programisty. Wybór zależy w głównej mierze od konkretnego zadania i preferencji użytkownika.

Pisanie testów

Moim ulubionym przykładem na wykorzystanie GPT-3 i Codexa w pracy jest pisanie testów. Tę czynność lubią tylko nieliczni, a zajmuje ona sporo czasu.

W rozmowie z modelami najważniejszy jest prompt, czyli instrukcja, jaką wydajemy narzędziu. Dobry prompt znacząco zwiększa szansę na otrzymanie dobrego wyniku.

Mój przykład ciągle ewoluuje, jednak na chwilę obecną zwykle korzystam z takiego kawałka tekstu.

Write unit tests for the TypeScript code using Jest. Use „it” instead of „test”. In tests, cover a variety of scenarios, including both expected and unexpected input. Use descriptive test names. For react components use „render” from „@testing-library/react” and for custom hooks use „renderHook” from @testing-library/react-hooks.

W przypadku testów prostych funkcjonalności nie korzystających z zewnętrznych importów model potrafi zamknąć temat w 5 sekund. Czasami nie są potrzebne żadne poprawki, w innym przypadkach trzeba poprawić jakiś mock lub stylistykę.

W najgorszym scenariuszu dostaniemy mało użyteczne testy, jednak wciąż dzięki modelom mamy zarysowany szkielet i stworzone większość przypadków testowych, które powinny zostać pokryte. Resztę musimy dopisać samemu, czyli dokładnie tak samo, jak byśmy to zrobili bez użycia AI z tą różnicą, że po drodze podpowiada nam Copilot.

Tłumaczenie błędów

Kolejny przykład to tłumaczenie błędów. Każdy, kto widział choć raz błędy, jakie produkuje TypeScript, wie, że analiza problemu potrafi zająć sporo czasu.

U mnie proces jest dużo szybszy. Przygotowałem makro shortcuts, które łączy się z GPT-3 i prosi o uproszczenie i wyjaśnienie naturalnym językiem uprzednio skopiowanego do schowka błędu. Nie jest to idealne rozwiązanie, w końcu GPT-3 nie zna całego systemu typów z projektu, ale śmiało mogę powiedzieć, że w co najmniej 50% przypadków, szybciej docieram do sedna problemu, analizując uproszczoną wiadomość błędu.

W ten sam sposób możesz naprawiać proste błędy składniowe i logiczne. AI jest w stanie przeanalizować dany kawałek kodu i zaproponować poprawki.

Transformacja danych

Pracując w większych projektach, zwykle, w którymś momencie zachodzi potrzeba transformacji danych, na wygodny do wyświetlenia format.

Tutaj także możesz wykorzystać makro, do którego podasz opis funkcji, a następnie otrzymasz gotową logikę transformującą dane. Interfejs webowy ChatGPT sprawdzi się lepiej, gdy musimy iterować nad problemem. Wtedy, możesz sugerować narzędziu poprawki do zwracanych wyników i wziąć kod w momencie, gdy będzie dla Ciebie wystarczająco dobry.

Wyjaśnianie problemów z kodem

Ta opcja najbardziej przyda się przy nauce nowej technologii lub na początku programistycznej kariery.

Dzięki ChatGPT możesz w prosty sposób dowiedzieć się, jakie jest zadanie danej funkcji lub kawałka kodu, który jest dla Ciebie nowy.

Pamiętaj tylko, że żadne narzędzie AI nie jest nieomylne i jeśli sam nie jesteś w stanie zweryfikować otrzymanego rozwiązania, to nie możesz mu zaufać na sto procent.

Przepisywanie kodu

Wszystkie narzędzia od OpenAI są świetne w przepisywaniu kodu z jednego języka programowania na drugi. Być może nie jest to bardzo częsty przypadek, ale widziałem artykuły opisujące przepisanie wszystkich testów E2E z jednego framework’a testowego na inny, bardziej nowoczesny. To już nie wydaje się taką abstrakcją.

Brainstorming lub żółta kaczuszka

Prawdopodobnie większość programistów spotkała się choć raz w życiu z efektem żółtej kaczuszki, czyli sytuacją gdy wpadamy na konkretne rozwiązanie w trakcie tłumaczenia problemu drugiej osobie, którą prosimy o pomoc.

W niektórych przypadkach podobną konwersację możesz przeprowadzić z ChatGPT. To narzędzie pozwoli Ci również przeprowadzić udaną sesję brainstormingową z samym sobą i nierzadko podsunie Ci kilka ciekawych pomysłów.

Takie przykłady można mnożyć jeszcze długo. Wszystko zależy w dużej mierze od zaawansowania danej osoby i technologii, w której pracuje. Mam nadzieję, że zachęciłem Cię do wypróbowania omówionych narzędzi. Z mojej perspektywy zalet jest mnóstwo, przy małej ilości wad.

Pamiętaj jedynie, że nie każda organizacja musi się zgodzić na używanie tego typu narzędzi, zwłaszcza że będzie ich coraz więcej i nie wszystkie będą mogły być potraktowane jako zaufane.

Jak AI pomaga programiście? Wady i ryzyka

Do tej pory głównie faworyzowałem narzędzia AI, bez uwzględniania ich wad. Wady oczywiście są tak jak wszędzie.

Pierwszym problemem, na jaki łatwo się złapać jest nadmierne zaufanie do tego typu narzędzi. Bardzo często coś wygląda na poprawne, ale liczą się drobne niuanse, które musimy wyłapać na własną rękę.

Jeśli chcesz korzystać z wymienionych narzędzi na poważnie, to musisz zakupić płatny plan. Na szczęście korzystanie z API nie jest kosztowne i jest naliczane według zużycia, ChatGPT ma darmową wersję, która da Ci ogląd na możliwości narzędzia, natomiast Github Copilot oferuje darmowy trial, który powinien wystarczyć do pierwszych testów.

Kolejna sprawa to kwestia kreatywności. Z jednej strony, przy pisaniu kodu możesz napotkać ten sam problem, co przy pisaniu tekstu, czyli syndrom pustej kartki. Tutaj AI pomoże wygenerować szkielet klasy, czy komponentu, dzięki czemu łatwiej będzie Ci ruszyć dalej. Z drugiej strony, takie podejście może zabijać kreatywność i narzucać nam konkretne ramy na rozwiązanie danego problemu.

AI to Twój pomocnik, a nie konkurencja

Nie tak dawno, świat obiegła informacja, że Open AI, trenuje swoje modele, aby w przyszłości mogły zastąpić programistów. Te i podobne informacje doprowadziły do ogólnego przejęcia i niepewności związanej z nauką programowania jako zawodu z perspektywami.

Według mnie to samonapędzająca się spirala strachu, potęgowana przez osoby, które nie wiedzą zbyt wiele o branży i codziennej pracy.

Praca programisty to nie tylko pisanie kodu, a samo pisanie kodu wymaga często tajemnej wiedzy domenowej, przekazywanej z programisty na programistę. Nie zapominajmy również o szeregu innych, bardziej miękkich umiejętności.

Podsumowując, nie znam przyszłości, ale na chwilę obecną szczerze wątpię, że zawód programisty zniknie. Na pewno będziemy świadkami, szybkiej ewolucji narzędzi wspomagających kodowanie, dzięki którym jeden programista, będzie w stanie wykonać pracę, do której wcześniej potrzeba było kilku osób.

Warto już teraz zainteresować się tematem i być o ten jeden krok z przodu, gdy praca z AI u boku stanie się codziennością.

Zdjęcie główne artykułu pochodzi z unsplash.com.

Programista i entuzjasta technologiczny w technologicznie-produktywni.pl

Programista z ponad 6-letnim doświadczeniem od początku związany z technologiami webowymi. Po godzinach eksploruje nowinki technologiczne i sposoby na optymalizację swojej pracy. Dzieli się swoimi odkryciami na blogu oraz w newsletterze.

Podobne artykuły

[wpdevart_facebook_comment curent_url="https://geek.justjoin.it/jak-ai-pomaga-programiscie/" order_type="social" width="100%" count_of_comments="8" ]