Narzędzia CoPilot używam (na chwilę pisania tego wpisu) już ponad pół roku i można śmiało powiedzieć, że pierwsza fascynacja już przeszła. Od razu powiem też, że wciąż uważam, że jest to bardzo dobre narzędzie warte swojej ceny. Mam już jednak kilka „ale”.
Generowanie testów jednostkowych
Nie powiem, że było to dla mnie COŚ. Tyle boilerplate kodu z głowy, koniec myślenia o warunkach granicznych, sam je znajdzie. Jest jeden problem dość bolesny, o którym już miałem okazję się przekonać raz czy dwa, zanim nie zacząłem ponownie pisać testów manualnie. CoPilot tworzy testy dla kodu, który napiszesz. W dodatku wiele testów to będzie kod typu copy-paste z podmienionymi stringami czy datami. W dodatku nie w mądry sposób, by przeszły zahaczyć o warunki graniczne. Zrobi je tak, żeby wszystkie przeszły. Nie tworzy ich pod wymagania biznesowe, czyli dla tego jak _powinien_ twój kod działać. Nie jest również w stanie pracować w trybie TDD bez narzutu pracy ze strony developera. Kończymy więc z napisanym ficzerem, z zielonymi testami jednostkowymi i radośnie pchamy funkcjonalność dalej w procesie. Który jednak nie działa do końca tak jak biznes by chciał. Pół biedy jak mamy dział QA, który sprawdza wszystko, co napisaliśmy z tym co jest w wymaganiach biznesowych. Gorzej jeśli sprawdzają po łebkach a testy automatyczne do regresji w dużej mierze generują CoPilotem…
Bezpieczny kod
CoPilot jest uczony na publicznych, otwartych repozytoriach. Sprawdza co prawda pewne podstawowe warunki żeby sprawdzić, czy kod jest „dobry” natomiast jak myślisz ile z tych publicznych repozytoriów stawia sobie na pierwszym miejscu kwestie bezpieczeństwa? Nawet takie podstawowe jak walidacja przychodzących inputów. Procentowo bardzo niewiele. Mamy więc CoPilota radośnie kopiującego, nawet biznesowo ok kod, ale narażony na atak. Co powoduje, że jest go więcej w publicznych repozytoriach, więc jest częściej kopiowany. I nie ma co ukrywać, że developerzy również o takich względach nie myślą gdy trzeba skończyć kolejnego feature do końca sprintu.
Halucynacje AI
Używasz komentarzy albo chata, żeby wygenerować jakąś metodę, z tych rozmiarowo na kilkanaście linijek. Wygląda ok. Problem w tym, że nie jest. Gdzieś jakiś if nie do końca wygląda tak, jak powinien, ale tego się nie wychwyciło (no bo mam programować, a nie robić code review). Potem robimy testy jednostkowe i wracamy do pierwszego punktu. I tak oto błędy w biznesowym działaniu programu dostały się na produkcję.
Regres programistyczny
Do tego punktu nie mam jeszcze przykładów z życia, natomiast jest to moje podparte doświadczeniem przypuszczenie: Juniorzy robią proste rzeczy. Z prostymi rzeczami od strony technicznej CoPilot sobie radzi. Młodzi programiście nie popełniają „głupich” więc błędów przy rozwiązywaniu podstawowych problemów przez co nie uczą się (programowaniu to na błędach najwięcej się uczy). Podobnie już na studiach jestem w sobie wyobrazić, że zrzuciłbym sie z kolegami na tego CoPilota, żeby rozwiązał za mnie implementacje algorytmu albo jakieś mozolne zadanie ze strukturami danych. Niczego bym się sam nie nauczył. CoPilot nie zrobi z juniora mida, nie tylko przez sam fakt korzystania z niego i jego pomocy. Obawiam się, że wręcz może zaszkodzić.
„GitHub Pause” powiem szczerze, że sam na to nie wpadłem, nie zwróciłem na to uwagi póki któryś ze streamerów o tym nie powiedział. O co chodzi? Piszesz kod, piszesz.. dochodzisz do jakiegoś prostego ifa i zamiast zacząć pisać warunek w ifie, na przykład czy istnieje plik na dysku, to zatrzymujesz się, czekasz, aż copilot przemieli Twój kod i zaproponuje Ci rozwiązanie. W praktyce przerywasz swój „flow” robiąc sobie przerwę na automat. I tak naprawdę jest. Mind-blowed.
[ Java po kawałku – cykl na YouTube ]
Ale wciąż przy nim zostaję
Takie są moje problemy z CoPilotem, o których trzeba wiedzieć. Spowodowały one, że na przykład testów automatem już nie piszę, raczej nie ufam CoPilotowi w tworzeniu czegokolwiek na więcej niż kilka linijek. Być może wyłącze „podpowiadaczke” w kodzie i wróce do IntelliJowej, by aktywnie walczyć z „GitHub Pause” i będe odpytywał CoPilota poprzez chat, gdy faktycznie będę potrzebował jego wsparcia.
Natomiast wciąż z niego korzystam, bo to wciąż bardzo pożyteczne narzędzie do włączenia w codzienną pracę, wciąż warte tych 100 złotych miesięcznie. To ile zespół „dowozi” od momentu dostania CoPilota nie zmieniło sie zupełnie, wszelkie zyski i straty z jego powodu są niezauważalne przy dwutygodniowych sprintach. Jest to po prostu kolejne narzędzie ułatwiające pewne aspekty pracy programisty.
P.S. Jeśli chcesz nauczyć się conieco o CoPilocie i jak z nim pracować to zapraszam do dołączenia [GitHub CoPilot]