Klika tygodni temu, kolega podesłał anegdotę o tym jak pewien strategiczny klient software house, zorganizował kilkunastogodzinne spotkanie z wszystkim programistami. Oczywiście, okazało się, że wydarzenie nie miało miejsca, a tekst był dziełem ChatGPT. Było dużo śmiechu i kilka prób zainspirowania tego AI do stworzenia nowych historii. Wtedy jeszcze nie wiedziałem, że ten temat zajdzie tak daleko…
A czy to umie programować?
Pisanie zabawnych opowiadań i artykułów sztucznej inteligencji nie sprawia większych problemów. Zdania złożone są poprawnie, a wszystko napisane ładną polszczyzną. Tak, rozmawiam z AI w języku polskim. Z ciekawości chciałem zobaczyć, jak poradzi sobie z czymś innym, na przykład z programowaniem?
Zacząłem od czegoś prostego. Stworzenia w JavaScriptcie funkcji, która doda do siebie dwie liczby. AI bez zająknięcia zaczęła pisać funkcję, o którą poprosiłem i napisała ją poprawnie. Hmm… No dobrze. Może to było za proste? Dlatego wyznaczyłem trochę bardziej złożone zadanie: napisanie endpointu /sum w nodejs. AI równie szybko co przy pierwszym poleceniu, zaczęła pisać rozwiązanie – było ono poprawne. W tym momencie pozwoliłem sobie na małą złośliwość. Kazałem dopisać do tego testy jednostkowe. No cóż… dostałem to, o co prosiłem, czyli testy jednostkowe…
Zamyśliłem się. Po chwili zadumy przyszła mi do głowy taka myśl: JavaScript (dalej JS) jest popularnym językiem programowania i nakarmienie AI rozwiązaniami z JS nie jest chyba większym wyzwaniem. Ale czy poradzi sobie z:
- napisaniem koszyka w React? napisała;
- napisaniem endpointu w Scali z wykorzystaniem biblioteki ZIO? napisała;
- napisaniem polecenia stworzenia tabeli SQL? napisała;
- napisaniem widgetów do chatu w Flutterze? napisała i to z podziałem na rozmówców;
- napisaniem e-maila w HTML-u wraz z osadzonymi stylami? nie uzyskałem rozwiązania, którego oczekiwałem, lecz koledze udało się otrzymać pożądany wynik. Być może niedostatecznie dobrze zarysowałem problem. Uznam więc, że napisała.
Musiałem przyznać, że AI umie programować, a przynajmniej dobrze udaje, że to robi. W tym miejscu, muszę jeszcze zaznaczyć, że sztuczna inteligencja całkiem dobrze odczytuje intencje autora. Wywarło to na mnie chyba największe wrażenie. W konsekwencji, zacząłem się zastanawiać: czy mogę już teraz używać tego AI w codziennej pracy?
Programowanie z wykorzystaniem AI
Zacząłem od czegoś prostego i szybkiego do zrealizowania. Wykorzystałem narzędzie udostępnione przez autorów OpenAI. Jako że AI nie jest świadome jak wygląda projekt, traktowałem to miejsce jako mądry generator kodu do dostosowania w tworzonym przeze mnie projekcie.
W ten sposób stworzyłem prosty formularz do zgłaszania błędów w aplikacji. Wrzuciłem go do projektu, dostosowałem kilka linijek kodu (np. dodałem lokalizację) i gotowe. Kolejnego dnia kod stworzony przez AI przeszedł code review i trafił na produkcję.
Taką metodą: wygeneruj, skopiuj, dostosuj zrobiłem jeszcze jedno czy dwa zadania i już chciałem mieć to bardziej zintegrowane z IDE.
GitHub Copilot
Po krótkich poszukiwaniach, znalazłem informację, że GitHub Copilot korzysta z OpenAI Codex. Kilka kliknięć później, miałem już zainstalowany plugin w swoim IDE i cieszyłem się, że jest uzbrojone w AI. Nadszedł więc czas na kolejne zadanie…
Moim pomysłem, było stworzenie prostej klasy, która zapamiętywałaby dane wraz z datą ich wygaśnięcia. Ot taki prosty cache. Zabrałem się za robotę. Stworzyłem nową klasę, o jakże wysublimowanej nazwie Cache. AI poprzez IDE, od razu zaczęła podpowiadać, co może znajdować się w takiej klasie. Na początku robiła to może trochę nieśmiało, proponując pojedyncze zmienne czy metody. Lecz gdy złapała wiatr w żagle, a raczej zrozumiała trochę szerszy kontekst, zaczęła proponować całe rozwiązania wybranych zagadnień. Co ciekawe, proponowała również nazwy metod i właściwości wraz z opisami. Mówi się, że jedną z dwóch najtrudniejszych rzeczy w informatyce, jest nazywanie rzeczy w kodzie (klas, metod, funkcji itp..). Czy AI może stać się remedium tego problemu?
Miałem wrażenie, że to nie ja tworzę kod, a jedynie zaczynam kierować wytwarzaniem kodu przez AI. Dawałem sztucznej inteligencji jakiś zarys pracy do wykonania. Czasem była to nazwa klasy, czasami sam opis klasy w komentarzu. Od czasu do czasu wprowadzałem korekty w tym, co chciało zrobić AI. Zdarzało się też, że sztuczna inteligencja nie umiała zaproponować niczego sensownego lub trochę się zapętlała proponując cały czas to samo.
W końcu klasa Cache, została napisana – chyba zaoszczędziłem dzięki temu dobrych kilkadziesiąt minut. Wypadałoby jeszcze dopisać do utworzonego rozwiązania, testy jednostkowe. Jak zapewne się domyślasz i w tym przypadku chciałem wykorzystać AI. Zakładałem, że tutaj sztuczna inteligencja będzie miała pewne problemy. Ale ku mojemu zdziwieniu, jakoś się połapała, że teraz proszę ją o napisanie testów. Pierwsze testy jakie proponowała były dość proste, ale poprawne i prawdopodobnie sam bym takie napisał. Niestety, w pewnym momencie AI znowu się zaczęła się powtarzać. Pomimo tego, że już raz zaakceptowałem daną propozycję i znalazła się ona w niezmienionej formie w kodzie. Musiałem przejąć stery i dopisać kilka brakujących testów. Ogólnie i tak byłem zadowolony bo znowu zyskałem na czasie. Dodatkowo nie byłem bardziej zmęczony przez to, że musiałem analizować przedstawione mi przez AI propozycje. Było to dla mnie lżejsze zadanie niż wykonywanie inspekcji czyjegoś kodu. Podejrzewam, że to dlatego, że cały czas znałem kontekst wprowadzanych zmian.
Wnioski po tygodniu pracy
Ewolucja czy rewolucja
Na początku uważałem, że świat programistów stoi u progu jakiejś rewolucji. Rewolucja przemysłowa w IT? To zrodziło w mojej głowie dużo pytań bez odpowiedzi. Miałem mgliste wyobrażenie jak być może będzie wyglądała najbliższa przyszłość. Od lat mówi się, że AI zastąpi programistów – czy to właśnie zaczyna się dziać? Nie wygląda to optymistycznie. Na szczęście wraz z dłuższym obcowaniem z AI, moje nastawienie zmieniło się na bardziej pozytywne. Na chwilę pisania tego tekstu uważam, że nastąpi pewna ewolucja w informatyce. Chcąc lepiej zrozumieć, co właśnie się dzieje zrobiłem krok do tyłu. Z tej perspektywy lepiej mogłem zobaczyć jak nasze środowisko programistyczne zmieniało się wraz z czasem. Ja zaczynałem programowanie od notatnika w windowsie, choć i ten papierowy nie był mi wtedy obcy. Następnie pojawiały się IDE, które podpowiadały semantykę kodu. Teraz stworzono narzędzie, które może podpowiadać rozwiązania. Dlatego uważam, że mamy do czynienia bardziej z ewolucją, niż rewolucją. Notatnik papierowy nie ewoluował bo dalej w nim często bazgrzę 🙂
Zagrożenia
Dominik, z którym współpracuję zauważył, że sztuczna inteligencja może spowodować zmniejszenie zapotrzebowanie na stażystów i juniorów w firmach technologicznych. Z tym stwierdzeniem się zgadzam. AI nie marudzi, jest zawsze dostępne, prawdopodobnie jest tańsze i też dostarczy prosty kod jak osoba, która dopiero stawia pierwsze kroki w programowaniu. To może spowodować, że doświadczenie związane z daną technologią czy branżą, będzie jeszcze ważniejsze niż obecnie. Co gorsza, możliwość zdobywania doświadczenia przez “świeżaków”, będzie mocno utrudniona, co w konsekwencji podniesie próg wejścia do świata programowania komercyjnego.
Pewnego zagrożenia dopatruję się również w sztucznej inteligencji, która będzie pracować dla dużych korporacji. Może powstać duże rozwarstwienie pomiędzy dużymi molochami, które mają środki na rozwijanie AI, a firmami których nie będzie stać na korzystanie z tak zaawansowanych technologii. Kiedyś usłyszałem, że Amazon wprowadza małe zmiany w UI/UX w swoim sklepie tylko na 30 min. Uwzględniając liczbę użytkowników, którzy są w danej chwili w ich wirtualnym sklepie, jest to dla nich wystarczający czas, aby zebrać potrzebne dane do analizy. Co może się stać, jeśli to AI będzie dokonywało szybkiej analizy zebranych danych, a następnie wprowadzało takie micro zmiany i sprawdzało rezultaty? Wydaje mi się, że szybkość dostosowania się do potrzeb klientów, będzie nieporównywalnie szybsza, gdy będzie do tego wykorzystywane AI. A to z kolei powinno przełożyć się na przewagę nad konkurencją.
Korzyści
Wykorzystywałem AI do tworzenia prostych widgetów, które nie wymagały bardzo złożonej logiki. A jeśli jednak miałem potrzebę stworzenia czegoś bardziej zaawansowanego, to rozbijałem duży problem na mniejsze Co jest zresztą zgodne z powszechnie panującą praktyką i zasadami programowania (np. SOLID). To przyspieszyło proces dojścia do najlepszego rozwiązania, a tym samym szybciej widziałem efekty swojej(?) pracy. To była mała nagroda, przyjemność, która powodowała mały zastrzyk dopaminy. A więc, czy sztuczna inteligencja może uzależnić? 🙂
Przy pisaniu klas, AI, starała się dotrzymać mi kroku i na podstawie samej nazwy, proponowała ciało całej klasy. Nie zawsze było to, to co chciałem stworzyć, ale był to pewny bodziec z zewnątrz, który zmuszał mnie do myślenia. Był to taki mały umysłowy szturchaniec, który wytrącał mnie z umysłowych torów, po których jechałem. Zdarzyło się, że propozycję od AI uznałem za ciekawszą niż to co sam chciałem napisać.
Podsumowanie
Gdy korzystałem ze wsparcia AI, udawało mi się zaoszczędzić do godziny czasu pracy. A jeśli były to zadania związane z tworzeniem czegoś nowego, to nawet w porywach do dwóch godzin.
Jeśli przyjmiemy, że skupienie jest zasobem, z którego korzystamy, to tutaj jest chyba największa oszczędność. Moje skupienie było bardziej zużywane na zrozumienie i rozwiązanie problemów, niż na przelewania rozwiązania na kod.
Uważam, że warto spróbować wdrożyć AI do swojej codziennej pracy i sprawdzić, czy wynikną z tego korzyści.