Jak zmienia się rola programisty w epoce AI
Od rzemieślnika kodu do projektanta rozwiązań
Jeszcze kilka lat temu zawód programisty kojarzył się głównie z ręcznym pisaniem kodu: edytor, dokumentacja, wyszukiwarka, Stack Overflow i długie godziny żmudnego klepania funkcji. Dziś w tym samym edytorze pojawia się „duchowy junior” – asystent AI, który podpowiada fragmenty kodu, pisze testy i tłumaczy, co robi tajemnicza funkcja, którą ktoś stworzył dawno temu. Zmienia się więc nie tylko narzędzie, ale przede wszystkim oczekiwania wobec programisty.
Coraz mniejszą wartością jest samo pisanie kodu linijka po linijce, a coraz większą – umiejętność zrozumienia problemu biznesowego, zaprojektowania sensownej architektury i dobrania odpowiednich technologii. AI przyspiesza implementację, ale nie zastąpi decyzji, czy dany moduł w ogóle ma sens, jak ma się komunikować z resztą systemu i jak będą wyglądać granice odpowiedzialności.
Dobrym obrazem tej zmiany jest przejście od roli „rzemieślnika kodu” do roli „projektanta rozwiązań”. Rzemieślnik skupia się na poprawnej składni i implementacji, projektant – na całości: od wymagań użytkowników, przez architekturę, aż po bezpieczeństwo, wydajność i utrzymanie. AI jest wtedy czymś w rodzaju zaawansowanego narzędzia: pomaga wykonać konkretny etap pracy, ale nie decyduje, jaki most zbudujesz i gdzie go postawisz.
W praktyce oznacza to, że programista pracujący z AI musi być mocniejszy w analizie, komunikacji z biznesem i projektowaniu. Paradoksalnie – im lepsze narzędzia do generowania kodu, tym bardziej liczy się umiejętność myślenia o systemie, a nie tylko o pojedynczych plikach.
Co naprawdę automatyzują dzisiejsze narzędzia AI
Dużo marketingu wokół AI sugeruje „automatyczne programowanie”, ale to spore uproszczenie. Obecne narzędzia najlepiej radzą sobie z:
- uzupełnianiem rutynowych fragmentów kodu (pętle, mapowania, boilerplate),
- generowaniem prostych funkcji na podstawie opisu w komentarzu,
- tworzeniem szkieletów testów jednostkowych i integracyjnych,
- refaktoryzacją oczywistych miejsc (ekstrakcja metod, uproszczenie warunków),
- tłumaczeniem istniejącego kodu na język zrozumiały dla człowieka.
Automatyzacja dotyka więc głównie wzorców, które często się powtarzają. Tam, gdzie tworzysz coś nietypowego, silnie związanego z domeną biznesową, AI raczej Cię wesprze, niż wyręczy. Generator świetnie poradzi sobie z CRUD-em do prostego modelu, ale nie zaprojektuje sensownego silnika reguł dla specyficznej logiki finansowej czy medycznej.
Ważne jest też rozróżnienie między „sensownym kodem” a „dobrym rozwiązaniem”. Model językowy potrafi wygenerować kod, który działa w prostych scenariuszach, ale:
- ignoruje złożone przypadki brzegowe,
- nie uwzględnia wydajności przy większej skali,
- nie bierze pod uwagę ograniczeń prawnych czy bezpieczeństwa.
Automatyzacja więc dotyczy głównie pisania, a nie projektowania. Im bardziej programista skupia się na pracy koncepcyjnej, tym mniej „zagrożony” jest prostą zastępowalnością przez AI.
AI jako „młodszy programista na stażu”
Najpraktyczniejsza metafora to traktowanie AI jak „młodszego programisty na stażu”. Taki junior jest zwykle:
- szybki w pisaniu kodu,
- pomocny przy żmudnych zadaniach,
- pełen energii, ale bez doświadczenia,
- potrzebuje dokładnych wymagań i solidnego code review.
Dokładnie tak samo zachowuje się większość narzędzi AI. Jeśli dasz im precyzyjne zadanie – „napisz funkcję, która przyjmuje X i zwraca Y, uwzględniając takie a takie przypadki brzegowe” – otrzymasz wstępnie sensowny kod. Jeśli jednak powiesz „zrób backend sklepu internetowego”, wynik będzie ogólny, pełen luk i sprzeczności.
Kluczowe jest przejście w głowie z trybu „AI pisze za mnie” do „AI pisze dla mnie, a ja oceniam i poprawiam”. Programista pozostaje tym, kto:
- stawia zadania,
- kontroluje jakość,
- zapewnia zgodność z architekturą, standardami i bezpieczeństwem,
- bierze odpowiedzialność za efekt końcowy.
Tak jak nie wysyłasz juniora na kluczowe spotkanie z klientem bez przygotowania, tak nie wrzucasz wygenerowanego kodu na produkcję bez zrozumienia, co faktycznie robi i gdzie mogą być słabe punkty.
Nowa definicja „produktywnego” programisty
Przez lata produktywność często mierzono bardzo powierzchownie: liczba ticketów, PR-ów, czas realizacji zadań. W erze AI te miary są jeszcze bardziej złudne. Skoro generator może w kilka sekund naprodukować setki linii, sama liczba kodu przestaje cokolwiek znaczyć.
Coraz ważniejsze stają się kompetencje takie jak:
- umiejętność zarządzania kontekstem – co jest ważne, co można zignorować, jaki fragment kodu pokazać AI, a czego nie ujawniać,
- pisanie zwięzłych, ale precyzyjnych opisów problemu (prompty),
- krytyczne czytanie wygenerowanego kodu pod kątem jakości, bezpieczeństwa i utrzymania,
- umiejętność łączenia wielu narzędzi i źródeł wiedzy w spójny proces pracy.
Produktywny programista w epoce AI to ten, który szybciej dochodzi do dobrego rozwiązania, a nie ten, który najwięcej napisze ręcznie. Dobrze skonstruowany prompt, szybkie zrozumienie odpowiedzi i umiejętne jej dopasowanie do projektu stają się pełnoprawną częścią warsztatu developerskiego.
Obszary, których AI na razie nie ogarnia dobrze
Choć marketing lubi hasła o „sztucznej inteligencji przewyższającej człowieka”, w praktyce są całe obszary, gdzie obecne modele wypadają słabo:
- Rozmowa z biznesem i użytkownikami – interpretowanie niejasnych wymagań, mediacja między działami, rozpoznawanie niewypowiedzianych oczekiwań.
- Priorytetyzacja prac – podejmowanie decyzji, co zbudować teraz, co zostawić na później, jak balansować między „quick win” a długofalową strategią.
- Odpowiedzialność za całość systemu – myślenie o konsekwencjach: wydajnościowych, bezpieczeństwa, licencyjnych, organizacyjnych.
- Głębokie rozumienie domeny – zawiłe dziedziny (prawo, medycyna, finanse) wymagają nie tylko znajomości faktów, ale też doświadczenia i intuicji.
To właśnie w tych obszarach rola programisty rośnie. AI może podsunąć przykładowy kod, ale nie oceni, czy dane podejście jest zgodne z regulacjami branżowymi, kulturą organizacji czy długofalową wizją produktu. Dlatego im mocniej rozwija się AI, tym bardziej opłaca się budować kompetencje, które trudno zautomatyzować – „techniczno-ludzkie” mosty między kodem a rzeczywistością.
Przegląd narzędzi AI, które realnie pomagają przy kodzie
Asystenci w IDE: podpowiedzi w czasie pisania
Asystenci w IDE to dziś chyba najbardziej namacalne zastosowanie AI w pracy programisty. Narzędzia takie jak Copilot, CodeWhisperer, Codeium i kilka innych działają w tle podczas pisania kodu i podpowiadają kolejne linie, bloki funkcji albo całe testy.
Ich główne możliwości to:
- uzupełnianie kodu na podstawie kontekstu pliku i projektu,
- generowanie funkcji na podstawie komentarza w stylu „// validate email and normalize”,
- propozycje testów jednostkowych do świeżo napisanej funkcji,
- podpowiedzi refaktoryzacji – np. wydzielenie powtarzającego się fragmentu.
Największa zaleta asystentów w IDE to płynność pracy. Nie trzeba przełączać się na przeglądarkę, kopiować kodu i wracać – model widzi kontekst i reaguje na bieżąco. Dla wielu osób to przypomina pracę w duecie z kolegą, który siedzi obok i podpowiada: „tu możesz użyć takiego wzorca”, „to da się skrócić”.
Jednocześnie trzeba pamiętać, że asystent bazuje głównie na statystyce. Jeśli Twój projekt ma bardzo nietypowe konwencje, specyficzną architekturę czy nieformalne zasady, model będzie je łamał, dopóki nie nauczysz go ich konsekwentnie w promptach i feedbacku.
Chatboty techniczne: rozmowa zamiast ślepego kopiuj-wklej
Chatboty techniczne, takie jak ChatGPT czy Claude, różnią się od asystentów w IDE jednym kluczowym elementem: umożliwiają rozmowę. Możesz krok po kroku wyjaśniać problem, dopytywać, prosić o inne podejście, testy, przykłady, a nawet o analogie czy wizualne porównania.
W wielu sytuacjach chatbot będzie lepszy niż „podpowiadacz kodu” w edytorze, szczególnie gdy:
- ucisz się nowego frameworka i potrzebujesz wyjaśnień na poziomie koncepcji, a nie gotowego kodu,
- chcesz zrozumieć, dlaczego coś działa w ten sposób, a nie tylko „jak to napisać”,
- pracujesz nad algorytmem lub strukturą danych i zależy Ci na analizie złożoności,
- musisz połączyć kilka technologii naraz i potrzebujesz szerszego obrazu.
Dobrym nawykiem jest używanie asystenta w IDE do mikro-zadań (konkretne fragmenty kodu), a chatbota – do większego kontekstu, wyjaśnień i projektowania rozwiązania. Takie rozdzielenie ról znacząco podnosi jakość odpowiedzi i zmniejsza frustrację.
Wyspecjalizowane narzędzia: testy, dokumentacja, refaktoryzacja
Oprócz „ogólnych” modeli pojawiają się wyspecjalizowane narzędzia, które skupiają się na jednym obszarze pracy programisty. Są to m.in.:
- generatory testów jednostkowych i integracyjnych pod konkretny język i framework,
- narzędzia do automatycznego tworzenia i uaktualniania dokumentacji API,
- asystenci refaktoryzacji, którzy analizują projekt i sugerują zmiany strukturalne,
- systemy integrujące AI z pipeline’ami CI/CD (np. automatyczne uwagi w PR-ach).
Dobrym przykładem jest narzędzie, które podczas code review automatycznie komentuje linie naruszające konwencję, wskazuje potencjalne problemy z bezpieczeństwem lub sugeruje uproszczenia. Człowiek-recenzent może wtedy skupić się na poziomie architektury, zgodności ze specyfikacją, a nie na wytykaniu każdego brakującego null-checka.
Przykład refaktoryzacji klasy z pomocą AI
Najprościej zobaczyć wartość AI na konkretnym, małym przykładzie. Wyobraź sobie, że masz klasę w JavaScript/TypeScript, która:
- ma kilkaset linii,
- łącze w sobie logikę walidacji, odpytywanie API i formatowanie odpowiedzi,
- jest trudna w testowaniu.
Praktyczny workflow z AI może wyglądać tak:
- Opisujesz kontekst: język, framework, czym klasa się zajmuje, jakie są główne problemy (np. brak testów, zbyt duża odpowiedzialność).
- Prosisz o analizę: „Wskaż główne powody, dla których ta klasa jest trudna w utrzymaniu i przetestowaniu”.
- Dopytujesz o propozycję podziału: „Zaproponuj, na jakie mniejsze klasy/moduły można to rozbić, zachowując obecną funkcjonalność”.
- Prosisz o konkretną refaktoryzację fragmentu: np. wyciągnięcie walidacji do osobnego modułu z interfejsem.
- Na koniec – testy: „Na podstawie nowej struktury zaproponuj zestaw testów jednostkowych, uwzględniając przypadki brzegowe”.
W ten sposób używasz AI nie tylko jako generatora kodu, ale jako drugiej głowy do myślenia o strukturze i jakości. Ostateczne decyzje nadal należą do Ciebie, ale proces przebiega szybciej i często z większą liczą rozważonych wariantów.
Im węższy problem, tym lepsza pomoc
Jedna z najważniejszych zasad korzystania z AI w programowaniu: im mniejszy, konkretniejszy problem, tym większa szansa na dobrą odpowiedź. Modele świetnie radzą sobie z zadaniami typu:
- „Napisz funkcję, która parsuje taki format daty i zwraca obiekt z polami X, Y, Z”.
Jak ustawiać granice problemu dla AI
Skuteczne korzystanie z AI przy kodzie zaczyna się od dobrze dobranego „kadru”. Tak jak fotograf nie próbuje zmieścić całej panoramy w jednym, przypadkowym ujęciu, tak programista nie powinien wrzucać do modelu wszystkiego, licząc na cudowną odpowiedź.
Przydaje się prosty schemat:
W organizacjach, które budują świadomą strategię wokół AI, pojawia się też trend tworzenia wewnętrznych „asystentów projektowych” – modeli wytrenowanych na kodzie i dokumentacji danej firmy. Do takich inicjatyw dobrze pasują tematy związane z bezpieczeństwem, otwartym oprogramowaniem i etyką technologii, które podejmuje chociażby Fundacja-Aktywni.pl, pokazując szerszy kontekst nowych narzędzi w IT.
- Wejście – co wchodzi do funkcji/klasy, skąd się bierze, w jakim formacie.
- Wyjście – co dokładnie ma wyjść i jak to zostanie użyte dalej.
- Ograniczenia – wydajność, bezpieczeństwo, zależności, kompatybilność wstecz.
- Kontekst minimalny – tylko te fragmenty kodu, które są potrzebne, żeby zrozumieć zadanie.
Jeśli poprosisz: „Popraw ten kod, bo jest brzydki”, model będzie strzelał na oślep. Zamiast tego opisz konkretnie: „Ta funkcja przetwarza do 100 tys. rekordów na żądanie, musi działać poniżej 200 ms, a teraz widzę bottleneck w tym miejscu – co można tu usprawnić?”. Nagle rozmowa robi się sensowna, a odpowiedzi – znacznie bardziej trafione.

Jak sensownie używać AI przy pisaniu nowego kodu
Projektowanie rozwiązania, zanim powstanie pierwsza linijka
AI najlepiej sprawdza się wtedy, gdy zapraszasz je do rozmowy zanim wpiszesz pierwszą linijkę kodu. To trochę jak szybka burza mózgów z doświadczonym kolegą z zespołu: rzucasz pomysł, dostajesz kilka wariantów, wybierasz to, co pasuje do twoich realiów.
Przydatny może być taki schemat rozmowy:
- Opisujesz problem biznesowy lub techniczny własnymi słowami.
- Dodajesz kontekst: stos technologiczny, ograniczenia, istniejące elementy systemu.
- Prosisz o 2–3 możliwe podejścia architektoniczne z krótkimi plusami i minusami.
- Dopytujesz o potencjalne ryzyka: skalowanie, bezpieczeństwo, migracje danych.
- Na koniec wybierasz kierunek i prosisz o szkic struktury modułów, klas lub komponentów.
Taka sekwencja pomaga uniknąć pokusy: „wygeneruj mi wszystko naraz”. Zamiast jednego, ogromnego zrzutu kodu dostajesz mapę drogową, którą możesz spokojnie przełożyć na zadania w backlogu – i dopiero wtedy używać AI do konkretnych fragmentów.
Od szkicu do kodu produkcyjnego
Nowy moduł rzadko od razu ląduje w masterze. Najpierw powstaje szkic – wersja „do wyrzucenia”, która pomaga oswoić się z problemem. AI świetnie nadaje się właśnie do takiego prototypowania.
Możesz poprosić o:
- zarys interfejsu publicznego (metody, argumenty, typy zwrotne),
- przykładową implementację pod podstawowe przypadki,
- pseudo‑kod algorytmu z komentarzami zamiast docelowych zależności.
Następnie przeglądasz wynik jak kod juniora: co jest sensowne, co trzeba wyciąć, gdzie brakuje logowania, obsługi błędów czy integracji z resztą systemu. Z czasem taki rytm „AI szkicuje – ty korygujesz” wchodzi w krew i przyspiesza start każdego nowego feature’a.
Ustalanie stylu i konwencji z pomocą AI
Jeśli tworzysz nowy projekt albo porządkujesz stary, AI może pomóc wypracować spójne wzorce. Zamiast przepisywać standardy Pythona, Javy czy Reacta z dokumentacji, pokazujesz fragment kodu, który uważasz za „wzorcowy” i prosisz model:
- „Wyciągnij z tego pliku nieformalne zasady nazewnictwa i struktury kodu”.
- „Na podstawie tych przykładów generuj kolejne moduły, trzymając się tych samych konwencji”.
Otrzymujesz coś w rodzaju żywego style guide’u, który możesz później włączyć do dokumentacji lub reguł lintera. Dobrze działa to zwłaszcza w młodych zespołach, gdzie standardy dopiero się kształtują.
Łączenie AI z istniejącym kodem i bibliotekami
Nowy kod rzadko powstaje w próżni. Częściej dokładamy kolejne klocki do istniejącej wieży. AI, aby pomogło w takim scenariuszu, musi „zobaczyć” reprezentatywne fragmenty projektu:
- typowy kontroler lub endpoint,
- model danych lub encję,
- jeden, dobrze napisany serwis biznesowy.
Pokazując te elementy, możesz poprosić model: „Napisz nowy moduł X, który zachowuje się jak Y, ale obsługuje typ danych Z”. Zamiast surowego, książkowego przykładu dla danego frameworka otrzymasz kod bardziej przypominający styl Twojego repozytorium.
AI jako partner w debugowaniu i diagnozowaniu problemów
Konstruowanie „historii błędu” dla modelu
Debugowanie z AI to nie jest wrzucenie stack trace’a i liczenie na magiczną odpowiedź. Dużo skuteczniejsze jest zbudowanie krótkiej „historii”: co robiłeś, co się wydarzyło, jakie były oczekiwania, co już sprawdziłeś.
Taka historia może wyglądać tak:
Próbuję dodać obsługę płatności X w serwisie Y (Node + NestJS).
Scenariusz: użytkownik po checkoutcie jest przekierowywany do bramki.
Oczekiwane: po sukcesie płatności zapis transakcji i zmiana statusu zamówienia.
Rzeczywisty efekt: status zamówienia się nie zmienia, choć bramka zwraca 200.
Poniżej:
1) logi z serwera z jednego requestu,
2) fragment kontrolera,
3) handler webhooka od płatności.Po takim wstępie możesz zadać jedno, bardzo konkretne pytanie: „W którym miejscu ten przepływ może się urywać? Podpowiedz hipotezy i wskaż, jakie logi dodać, żeby je potwierdzić lub wykluczyć”. AI nie musi zgadnąć „magicznej przyczyny”. Wystarczy, że pomoże ci zawęzić poszukiwania.
Analiza logów i stack trace’ów
Logi z produkcji potrafią zalać człowieka ścianą tekstu. Modele językowe radzą sobie z takim materiałem zaskakująco dobrze, o ile dostaną wyraźne zadanie. Zamiast pytania „Co tu jest nie tak?”, spróbuj:
- „W tych logach znajdź powtarzające się błędy w ciągu ostatnich 10 minut i pogrupuj je według endpointów”.
- „Z tego stack trace’a wyciągnij najprawdopodobniejszą przyczynę i zaproponuj sposób odtworzenia błędu lokalnie”.
W praktyce wygląda to tak, że AI robi za pierwszą warstwę wsparcia: porządkuje dane, wyciąga wzorce, zaznacza nieoczywiste miejsca. Ty przeglądasz wynik, wybierasz najbardziej sensowne tropy i dopiero wtedy odpalasz debugger.
Symulowanie „kaczego debugowania”
Stare, dobre „rubber duck debugging” polega na tłumaczeniu kaczuszce z biurka, co robi twój kod i gdzie się wywala. Sama czynność tłumaczenia porządkuje myśli. AI może pełnić podobną funkcję, ale z dodatkową korzyścią: zadaje zwrotne pytania.
Możesz na przykład napisać:
Wyjaśnię Ci krok po kroku, co robi ten fragment kodu, a Twoim zadaniem jest:
- wychwytywać niespójności w moim opisie,
- zadawać pytania, gdy coś jest niejasne,
- proponować miejsca, gdzie warto dodać logi lub asercje.
[tu wklejasz kod]Po kilku iteracjach często okazuje się, że sam widzisz błąd, bo musiałeś wypowiedzieć na głos założenia, które wcześniej siedziały tylko w głowie. Model pomaga ci je „wypłaszczyć” i skonfrontować z rzeczywistością.
Rekonstrukcja brakującego kontekstu
W legacy projektach dużym problemem jest brak kontekstu: ludzie się zmienili, dokumentacja nie istnieje, a logika biznesowa siedzi w magicznych ifach. AI nie zastąpi autora kodu sprzed pięciu lat, ale może pomóc zrekonstruować sens działania modułu.
W praktyce da się to zrobić tak:
- Wklejasz istotne fragmenty kodu (np. kilka powiązanych klas lub serwisów).
- Prosisz o opis działania w języku nietechnicznym: „Jaką historię biznesową opowiada ten kod?”.
- Dopytujesz o potencjalne założenia: „Jakie niejawne reguły biznesowe kryją się w tych warunkach?”.
- Na końcu prosisz o propozycję pytań do PO/analityka, które uzupełnią luki w rozumieniu domeny.
Takie „odczytywanie intencji” nie da stuprocentowej pewności, ale pozwala znacznie szybciej wejść w obcy moduł i bezpieczniej go modyfikować.
Generowanie testów, dokumentacji i powtarzalnych fragmentów
Testy jednostkowe: od generatorków do świadomego pokrycia
Automatyczne generowanie testów bywa kuszące: jedno kliknięcie i już masz kilkanaście metod testowych. Problem w tym, że wiele z nich sprawdza rzeczy oczywiste, pomijając prawdziwe „miny”. Kluczem jest więc nie tyle pełne zrzucenie odpowiedzialności na AI, ile mądre podzielenie się pracą.
Dobry schemat wygląda tak:
- Prosisz model o listę przypadków brzegowych dla danej funkcji lub metody.
- Wspólnie z AI klasyfikujesz je na: krytyczne, ważne, „nice to have”.
- Generujesz szkielety testów tylko dla krytycznych i ważnych scenariuszy.
- Ręcznie dopisujesz asercje tam, gdzie logika biznesowa jest delikatna lub zawiła.
Efekt? Zamiast stosu bezwartościowych testów, które jedynie powielają implementację, otrzymujesz zestaw świadomie dobranych sprawdzeń, przy których AI odrobiło żmudną część roboty.
Testy integracyjne i kontraktowe
Większość generatorów koncentruje się na unitach, ale modele językowe mogą też pomóc przy testach integracyjnych: scenariuszach end‑to‑end lub kontraktach między serwisami.
Na przykład:
- Opisujesz przepływ „od wejścia requestu do zapisu w bazie”.
- Dodajesz przykładowe payloady i odpowiedzi.
- Prosisz o szkic testu e2e w konkretnym narzędziu (np. Cypress, Playwright, Jest + Supertest).
Co ważne, możesz też zlecić modelowi przejrzenie istniejących testów i odpowiedź na pytanie: „Jakie ważne scenariusze nie są tu pokryte?”. To trochę jak dodatkowa para oczu podczas przeglądu jakości testów.
Automatyczna dokumentacja, która ma sens dla ludzi
Generowanie dokumentacji z komentarzy bywa suche i mało przyjazne użytkownikom. Z AI da się podejść do tematu inaczej: zaczynasz od kodu, ale celem jest tekst, który da się zrozumieć bez wgryzania się w implementację.
Przykładowy workflow:
- Podajesz fragment kodu (np. moduł API) z krótkim opisem systemu.
- Prosisz o wygenerowanie dokumentacji w dwóch warstwach:
- opis wysokopoziomowy dla nietechnicznych (co to robi i po co),
- szczegółową referencję endpointów/argumentów/typów.
- Korygujesz nazewnictwo zgodnie z językiem domeny w Twojej organizacji.
- W kolejnym kroku prosisz o wygenerowanie changelogu na podstawie diffu między dwiema wersjami pliku.
W ten sposób dokumentacja przestaje być jednorazowym wysiłkiem. Przy każdej większej zmianie możesz poprosić AI o aktualizację sekcji opisujących nowe zachowanie, zamiast ręcznie przepisywać całe rozdziały.
Do kompletu polecam jeszcze: Open source w biznesie: jak korzystać legalnie i bezpiecznie z darmowego software — znajdziesz tam dodatkowe wskazówki.
Szablony pull requestów, commitów i komentarzy
Powtarzalne elementy komunikacji też nadają się do automatyzacji. Chodzi przede wszystkim o:
- opisy PR‑ów,
- wiadomości z deploymentów,
- szablony commitów lub notatek do zadań.
Możesz wziąć kilka „wzorowych” opisów PR z repozytorium i poprosić model: „Na podstawie tych przykładów wygeneruj szablon opisu PR i reguły, jak go wypełniać”. Później przy kolejnych zmianach wystarczy krótkie polecenie: „Streszcz ten diff jako opis PR w naszym standardzie”. Z czasem zespół mniej czasu traci na formę, a bardziej koncentruje się na treści i sensownym review.
Generowanie powtarzalnego kodu: tak, ale z głową
CRUD‑y, mapery DTO, konfiguracje, wiring zależności – to wszystko świetni kandydaci do generacji. Zamiast przepisywać w kółko ten sam schemat, możesz opisać wzorzec raz i poprosić model o kolejne warianty.
Praktyczny przykład:
- Pokazujesz dobrze napisaną parę: encja + DTO + mapper + endpoint.
- Prosisz: „Na podstawie tego wzorca wygeneruj analogiczny zestaw dla encji X o polach A, B, C…”.
- Sprawdzasz, czy zachowane są:
- konwencje nazewnicze,
- obsługa błędów,
- reguły walidacji i autoryzacji.
Refaktoryzacja testów z pomocą AI
Po kilku latach projektowania testów dochodzi się zwykle do tego samego punktu: scenariusze się duplikują, nazwy przestają coś znaczyć, a setup rozłazi się po helperach. AI może tu robić za „sprzątacza”, który pomaga ogarnąć bałagan, a ty decydujesz, czego dotknąć, a czego lepiej nie ruszać.
Przydatny schemat wygląda tak:
- Wklejasz reprezentatywny wycinek testów (np. kilka plików z jednej domeny).
- Prosisz o:
- wykrycie powtarzających się setupów i propozycję ich ekstrakcji,
- ujednolicenie nazewnictwa testów zgodnie z preferowanym stylem (np.
should_…, Given/When/Then), - wskazanie testów, które nie mają jasnej asercji biznesowej (sprawdzają detale implementacji).
Na tej podstawie możesz kazać modelowi wygenerować nowy, uproszczony wariant jednego pliku testowego: z lepszym setupem, mniejszą liczbą duplikatów i czytelniejszymi nazwami. Jeśli efekt jest sensowny, przenosisz podejście na kolejne pliki.
Ciekawy trik: poproś model o krótką „notatkę dla przyszłego programisty” przy trudnym teście. Jedno‑dwa zdania kontekstu biznesowego sprawiają, że test przestaje być tylko zbiorem assertEquals, a staje się dokumentacją zachowania systemu.
Tworzenie danych testowych i seedów
Ręczne wymyślanie danych testowych bywa równie męczące jak samo pisanie testów. Tutaj AI może pomóc na dwa sposoby: zaproponować zestaw przypadków i od razu wygenerować dla nich dane w konkretnym formacie.
Przykładowe podejście:
- Opisujesz model danych (np. użytkownik, zamówienie, produkt) oraz kluczowe reguły biznesowe.
- Prosisz o listę typowych oraz „podejrzanych” kombinacji pól (np. brak adresu, nietypowa strefa czasowa, skrajne wartości liczby produktów).
- Dla wybranych kombinacji prosisz o wygenerowanie:
- JSON‑ów do testów API,
- skryptów seedujących bazę,
- fikstur do konkretnego frameworka testowego.
Model jest dobry w wymyślaniu „dziwnych” przypadków, na które normalnie zabrakłoby cierpliwości. Ty filtrujesz sensowne pomysły, odrzucasz nierealne scenariusze i w efekcie dostajesz seedy, które faktycznie łapią błędy, a nie tylko „udają ruch produkcyjny”.

Bezpieczeństwo, poufność i ograniczenia AI w pracy programisty
Wrażliwe dane i kod: gdzie postawić granicę
Najwygodniej byłoby wkleić cały plik z kluczami, konfiguracją i logami z produkcji, ale to prosta droga do kłopotów. Zanim model cokolwiek wygeneruje, trzeba mieć swój własny „mentalny firewall”.
Praktyczna zasada: wszystko, czego nie wysłałbyś w mailu do zewnętrznej firmy bez NDA, nie powinno lądować w publicznym modelu. Dotyczy to:
- danych osobowych,
- tajemnic handlowych (algorytmy wyceny, scoringi, logika fraudowa),
- szczegółów infrastruktury (adresy wewnętrznych serwerów, topologia sieci),
- kluczy API, tokenów, haseł (nawet „do testów”).
Zamiast wklejać surowe dane, możesz je zanonimizować lub uprościć. Czasem wystarczy zastąpić wartości identyfikatorami typu <PESEL>, <EMAIL_TESTOWY>, <TOKEN>. Zachowujesz strukturę i charakter problemu, a nie ujawniasz konkretów.
W środowiskach, gdzie bezpieczeństwo jest krytyczne (banki, medycyna, sektor publiczny), coraz częściej stosuje się lokalne lub „prywatne” wdrożenia modeli, działające w obrębie infrastruktury firmy. Taki model można już karmić pełnym logiem czy fragmentami wrażliwego kodu, ale wtedy odpowiedzialność za bezpieczeństwo przechodzi na wewnętrzny zespół.
Złudzenie nieomylności i „halucynacje”
Modele językowe są świetne w generowaniu odpowiedzi, które brzmią bardzo pewnie. To nie oznacza, że mają rację. Zdarza się, że model „wymyśla” metody, klasy czy konfiguracje, które w twojej bibliotece po prostu nie istnieją.
Jak sobie z tym radzić w praktyce?
- Zawsze proś o odwołanie do oficjalnej dokumentacji: link, numer wersji, nazwę pakietu.
- Gdy model proponuje fragment API, którego nie kojarzysz – sprawdź go w IDE lub w dokumentacji, zanim cokolwiek wdrożysz.
- Jeśli coś wygląda podejrzanie prosto przy skomplikowanym problemie – dopytaj: „Jakie są ograniczenia tego podejścia?” albo „W jakich sytuacjach ten kod może zawieść?”.
Dobrą praktyką jest traktowanie AI jak młodszego kolegi po bootcampie: ma dużo energii, przegląda szybko dokumentację, czasem trafi w dziesiątkę, ale potrzebuje seniora, który sprawdzi, czy nie popłynął z fantazją.
Ryzyko przenoszenia błędnych wzorców
Model jest trenowany na kodzie z internetu. W tym kodzie są i perełki, i śmieci. Jeśli ślepo kopiujesz wygenerowane rozwiązania, łatwo przenieść do projektu przestarzałe biblioteki, niebezpieczne konstrukcje czy antywzorce projektowe.
Żeby się przed tym bronić, możesz w promptach z góry ustalać standardy:
- „Używaj tylko bibliotek z tej listy: …”.
- „Zakładamy architekturę hexagonalną, nie proponuj DAO ani serwisów statycznych”.
- „Kod ma być zgodny z OWASP Top 10 i unikać przechowywania haseł w postaci jawnej”.
Można też poprosić model o rewizję wygenerowanego wcześniej kodu w innym trybie: „Zignoruj poprzednią odpowiedź, potraktuj ten kod jak legacy i wypisz, co byś w nim poprawił, zakładając nowoczesne praktyki bezpieczeństwa i wydajności”. Taki „drugi przebieg” często wyłapuje słabości, których model nie zauważył w pierwszym podejściu.
Licencje i własność intelektualna
Kolejny nieoczywisty temat to licencje. Jeśli model wygeneruje kod bardzo podobny do fragmentu z popularnej biblioteki open source, pojawia się pytanie: co z licencją tamtego projektu? Sytuacja prawna jest tu nadal w ruchu, ale jako programista możesz zminimalizować ryzyko.
Kilka zdroworozsądkowych zasad:
- Przy większych blokach kodu poproś model: „Sprawdź, czy ten kod nie przypomina 1:1 fragmentów popularnych repozytoriów OSS. Jeśli tak – wskaż potencjalne źródło i licencję”.
- Nie traktuj AI jako generatora całych bibliotek czy frameworków, które potem chcesz komercyjnie licencjonować jako zamknięte rozwiązanie.
- Jeżeli w firmie macie politykę dot. OSS, skonsultuj z prawnikiem lub działem compliance użycie modeli w krytycznych fragmentach produktu.
Przy zwykłym „klejeniu” boilerplate’u problem jest raczej teoretyczny, ale przy większych, zaawansowanych modułach – lepiej go mieć z tyłu głowy.
Budowanie własnego „stacku AI” w zespole
Standardy korzystania z AI w projekcie
Tak jak w projekcie ustala się konwencje commitów, styl kodu czy proces review, tak samo opłaca się dogadać, jak zespół używa AI. Dzięki temu unikacie sytuacji, w której jedna osoba wkleja do chmury logi z produkcji, a inna ma zakaz używania jakichkolwiek narzędzi chmurowych.
Taki „lightowy regulamin” może obejmować:
- rodzaje danych, których nie wolno wysyłać do zewnętrznych modeli,
- zalecane narzędzia (np. konkretne wtyczki do IDE, firmowy chatbot z prywatnym modelem),
- minimalny poziom weryfikacji wygenerowanego kodu (np. obowiązkowy review człowieka, testy automatyczne),
- zasady oznaczania w PR, że część kodu powstała przy istotnym udziale AI (żeby recenzent wiedział, na co zwrócić większą uwagę).
W praktyce dobrze sprawdza się też osobny kanał na komunikatorze, gdzie zespół dzieli się promptami, trikami i ostrzeżeniami typu: „Ten plugin generuje ok, ale ma zły domyślny sposób obsługi błędów”. Tak rośnie wasz wspólny know‑how, a nie tylko pojedyncze „sztuczki” w głowach poszczególnych osób.
Integracja AI z narzędziami developerskimi
Korzystanie z AI przez przeglądarkę to dobry start, ale prawdziwy zysk przychodzi wtedy, gdy model jest bliżej twojego codziennego workflow: w edytorze, w pipeline’ach CI, w narzędziach do code review.
Kilka praktycznych kierunków integracji:
- Wtyczki do IDE – podpowiadanie kodu, generacja testów, refaktoryzacja fragmentów bez wychodzenia z edytora.
- Boty do code review – automatyczne komentarze do PR z sugestiami uproszczeń, wyłapywanie duplikatów, analiza złożoności funkcji.
- Asystenci w CI/CD – podsumowanie wyników testów, propozycje etykiet do ticketów na podstawie logów z builda, generowanie changelogów.
Nie trzeba wdrażać wszystkiego naraz. Wiele zespołów zaczyna od prostego bota do streszczania PR‑ów lub generowania opisów release’ów i dopiero po oswojeniu z narzędziem przechodzi do „głębszej” integracji z kodem.
Repozytorium promptów i dobrych praktyk
Prompt to też artefakt projektowy. Jeśli ktoś w zespole opracuje naprawdę skuteczne polecenie do generowania testów kontraktowych czy dokumentacji API, szkoda byłoby, żeby zostało tylko w jego prywatnych notatkach.
Dobrze działa małe repozytorium (nawet zwykły markdown w repo), w którym trzymacie:
- sprawdzone prompty dla typowych zadań (testy, dokumentacja, migracje, refaktoryzacja),
- przykłady wejść i wyjść (żeby nowa osoba widziała, czego się spodziewać),
- ostrzeżenia typu: „przy tym promptcie AI ma tendencję do X, zwróć uwagę na Y”.
Po kilku miesiącach takie repo robi się czymś w rodzaju „książki kucharskiej” zespołu: przyspiesza wdrożenie nowych osób i wyrównuje poziom korzyści z AI. Zamiast każdemu z osobna uczyć się, jak zapytać model o diagram architektury, korzystacie z jednego, dopracowanego przepisu.
Rozwój umiejętności programisty w świecie AI
Jakie kompetencje zyskują na znaczeniu
Skoro część pracy „ręcznej” można oddać modelom, naturalne pytanie brzmi: co staje się najcenniejsze po stronie człowieka? Coraz bardziej liczą się umiejętności, których AI nie zastąpi jednym promptem.
Przede wszystkim:
W tym miejscu przyda się jeszcze jeden praktyczny punkt odniesienia: Czy open source jest naprawdę za darmo? Ukryte koszty, o których rzadko się mówi.
- rozumienie domeny biznesowej – umiejętność przełożenia potrzeb firmy na architekturę i modele danych,
- projektowanie systemów – podejmowanie decyzji o podziale na moduły, granicach kontekstów, przepływach danych,
- krytyczne myślenie – ocena, czy wygenerowane rozwiązanie jest adekwatne do realnych ograniczeń,
- komunikacja – rozmowa z ludźmi i… z modelami, czyli zadawanie właściwych pytań i porządkowanie wymagań.
Umiejętność „klepania kodu” w oderwaniu od kontekstu traci na wartości. Znaczenie zyskuje rola inżyniera, który łączy elementy: rozumie potrzeby, dobiera narzędzia, umie zakwestionować własne założenia. AI jest w tym układzie mocnym mnożnikiem produktywności, ale kierunek nadal wyznacza człowiek.
Nauka nowych technologii z użyciem AI
Wejście w nowe środowisko – czy to framework frontendowy, czy narzędzie do strumieniowania danych – można potraktować inaczej niż kiedyś. Zamiast czytać dokumentację od deski do deski, możesz wykorzystać model jako „przewodnika po mapie”.
Dobrze działa taki cykl:
- Prosisz o „minimalny zestaw pojęć”, które musisz opanować, żeby sensownie zacząć (np. dla Kafki: topic, partition, consumer group itd.).
- Dla każdego pojęcia prosisz o:
- krótki opis,
- mały, działający przykład kodu,
- porównanie do czegoś, co już znasz (np. „to bardziej jak kolejka, czy jak webhook?”).
- Na końcu prosisz o kilka zadań praktycznych rosnących trudnością – coś w rodzaju mini‑ścieżki learningowej dopasowanej do twojego projektu.
Model staje się wtedy prywatnym mentorem do nowej technologii. Nadal trzeba kod napisać samodzielnie, zderzyć się z błędami i przeklikać debugger, ale sam start jest szybszy i mniej frustrujący.
Eksperymentowanie i prototypowanie
AI świetnie nadaje się do szybkiego budowania „makiet” technicznych. Zamiast planować tygodniami, możesz w jeden dzień postawić kilka prototypów i zobaczyć, który kierunek rokowałby najlepiej.
Najczęściej zadawane pytania (FAQ)
Czy sztuczna inteligencja zabierze pracę programistom?
AI mocno zmienia zakres zadań programistów, ale zamiast „zabierać pracę”, przesuwa akcenty. Mniej liczy się samo klepanie kodu linijka po linijce, a bardziej rozumienie problemu biznesowego, projektowanie architektury i podejmowanie decyzji, jak system ma działać całościowo. Generator kodu nie zdecyduje, co w ogóle warto zbudować, jak to utrzymać i jak pogodzić to z bezpieczeństwem czy regulacjami.
Najprościej myśleć o tym tak: AI automatyzuje część „rzemiosła”, więc rośnie znaczenie roli „projektanta rozwiązań”. Osoba, która potrafi rozmawiać z biznesem, priorytetyzować funkcje, dbać o jakość i bezpieczeństwo, nadal jest nie do zastąpienia – AI jest tu raczej mocnym narzędziem niż konkurencją.
Jakie zadania programistów AI automatyzuje najlepiej?
Obecne narzędzia AI świetnie radzą sobie z powtarzalnymi i przewidywalnymi wzorcami. Chodzi przede wszystkim o:
- uzupełnianie rutynowych fragmentów kodu (pętle, mapowania, boilerplate),
- generowanie prostych funkcji na podstawie komentarza,
- tworzenie szkieletów testów jednostkowych i integracyjnych,
- podpowiadanie prostych refaktoryzacji i tłumaczenie starego kodu na „ludzki” język.
Jeśli rozwiązujesz typowy problem, np. prosty CRUD czy walidację formularza, AI często wygeneruje sensowny punkt startowy. Kiedy jednak wchodzisz w głęboką logikę domenową (np. skomplikowane reguły finansowe), narzędzie zaczyna być bardziej pomocnikiem niż autorem rozwiązania. Działa trochę jak szybki, ale niedoświadczony junior – kod napisze, ale potrzebuje Twojej głowy do oceny, czy to w ogóle dobry kierunek.
Jak skutecznie korzystać z AI przy programowaniu, żeby naprawdę przyspieszyć pracę?
Klucz tkwi w tym, jak „stawiasz zadania” AI. Im bardziej precyzyjny opis problemu (wejścia, wyjścia, przypadki brzegowe, ograniczenia), tym lepszy wynik. Zamiast pisać: „napisz backend sklepu internetowego”, lepiej sformułować kilka konkretnych próśb, np. „przygotuj endpoint do składania zamówienia z obsługą koszyka i walidacją stanów magazynowych”.
Drugi element to krytyczne czytanie odpowiedzi. Traktuj wygenerowany kod jak szkic: sprawdź bezpieczeństwo, przypadki brzegowe, wydajność, zgodność z architekturą projektu. Do tego dochodzi umiejętność zarządzania kontekstem – pokazywanie narzędziu tylko tych fragmentów kodu i dokumentacji, które są konieczne, oraz łączenie kilku narzędzi (IDE z asystentem, wyszukiwarka, dokumentacja) w spójny warsztat.
Czego AI w pracy programisty na razie nie zastąpi?
Dzisiejsze modele mają duży problem z tym, co wymaga doświadczenia, kontekstu organizacji i „miękkiej” pracy z ludźmi. Chodzi przede wszystkim o:
- rozmowę z biznesem i użytkownikami, wyciąganie z nich prawdziwych potrzeb,
- ustalanie priorytetów, czyli co robimy teraz, co odkładamy i dlaczego,
- myślenie o całym systemie: wydajność, bezpieczeństwo, licencje, utrzymanie,
- głębokie zrozumienie konkretnej domeny, np. prawa, medycyny czy finansów.
AI może pomóc napisać moduł, ale nie oceni, czy dane podejście jest zgodne z regulacjami, kulturą firmy czy długoterminową wizją produktu. Tu nadal potrzebny jest człowiek, który potrafi łączyć kod z rzeczywistością biznesową.
Jak zmienia się definicja „dobrego” i „produktywnego” programisty w erze AI?
Liczba linii kodu czy zamkniętych ticketów coraz mniej mówi o produktywności. Skoro AI może w kilka sekund wygenerować setki linijek, istotne staje się coś innego: jak szybko potrafisz dojść do dobrego, bezpiecznego rozwiązania i jak mało długu technicznego przy tym tworzysz.
Na znaczeniu zyskują więc umiejętności takie jak: pisanie precyzyjnych promptów, selekcja informacji (co jest ważne, co można pominąć), krytyczne ocenianie wygenerowanego kodu i integrowanie podpowiedzi AI z istniejącą architekturą. „Dobry” programista to coraz częściej ten, kto umie mądrze korzystać z narzędzi, a nie ten, kto wszystko pisze od zera z pamięci.
Czy warto uczyć się programowania, skoro AI potrafi generować kod?
Paradoksalnie – teraz tym bardziej. AI przyspiesza etap pisania, ale ktoś nadal musi wiedzieć, co kazać jej zrobić, jak ocenić jakość kodu i jak wkomponować go w cały system. Bez zrozumienia podstaw (struktur danych, wzorców projektowych, architektury, bezpieczeństwa) łatwo stać się operatorem kopiuj–wklej, który nie wie, dlaczego coś działa albo czemu nagle przestaje.
Pełną wartość z AI wyciąga osoba, która zna fundamenty programowania i potrafi myśleć systemowo. Wtedy narzędzie staje się turbo-dopalaczem, a nie kulą u nogi. To trochę jak z kalkulatorem: liczyć w głowie nadal trzeba umieć, ale dzięki kalkulatorowi można rozwiązywać znacznie trudniejsze zadania.
Jaką rolę odgrywają asystenci AI w IDE (np. Copilot) w codziennej pracy?
Asystenci w IDE działają jak bardzo szybki kolega siedzący obok przy klawiaturze. Podpowiadają kolejne linie kodu, całe funkcje, a nawet testy, bazując na tym, co właśnie piszesz i co widzą w projekcie. Dzięki temu wiele żmudnych, powtarzalnych fragmentów powstaje „przy okazji”, bez przełączania się między edytorem a przeglądarką.
Trzeba jednak pamiętać, że to narzędzia statystyczne: proponują to, co „najbardziej pasuje” do wzorców, które znały podczas uczenia. Jeśli masz niestandardową architekturę, specyficzny styl czy wewnętrzne konwencje, asystent będzie je łamał, dopóki konsekwentnie nie będziesz go korygować i doprecyzowywać poleceń. Rolą programisty pozostaje więc pilnowanie jakości i spójności – AI jest wsparciem, nie autonomicznym autorem kodu.
Bibliografia
- The Future of Coding in a Data-Driven World. McKinsey & Company (2023) – Wpływ AI na zawód programisty, automatyzację i zapotrzebowanie na kompetencje
- Generative AI and the Future of Work in America. McKinsey Global Institute (2023) – Analiza zadań możliwych do automatyzacji przez generatywną AI
- The 2023 State of AI in Software Development. GitHub (2023) – Raport o użyciu GitHub Copilot, produktywności i zmianie roli developera
- Copilot Research: Quantifying the Productivity Impact of AI-Assisted Programming. Microsoft Research (2022) – Eksperymenty z AI asystentem w IDE i wpływ na czas realizacji zadań
- The Impact of AI on Developer Productivity: Evidence from the Field. Stanford University (2023) – Badanie empiryczne o tym, jak narzędzia AI zmieniają pracę programistów
- The State of Developer Ecosystem. JetBrains (2023) – Raport o narzędziach, praktykach i adopcji AI wśród programistów






