Skip to content
← Wszystkie wpisy
6 min czytania Dawid Skłodowski

Narzędzia agentowego kodowania: przegląd po pierwszym roku

Rok temu AI w edytorze oznaczało głównie autouzupełnianie. Teraz mamy narzędzia, które edytują przez wiele plików, uruchamiają komendy i przepracowują zadanie, gdy patrzysz. Po roku używania ich w prawdziwej pracy oto uczciwy przegląd: w czym są naprawdę dobre, gdzie zawodzą i jak zmieniają zawód.

Rok temu AI w edytorze oznaczało głównie autouzupełnianie — Copilot sugerujący resztę linii albo funkcji, gdy pisałeś, którą akceptowałeś albo ignorowałeś. Użyteczne, ale ograniczone: to był szybszy sposób pisania kodu, który i tak miałeś napisać. Przez ostatni rok to zmieniło kształt całkowicie. Narzędzia teraz w codziennym użyciu są agentowe: opisujesz zadanie, a narzędzie edytuje przez wiele plików, uruchamia komendy, czyta wyjście i przepracowuje zmianę, gdy nadzorujesz — autouzupełnianie dorosło do czegoś, co robi wielokrokową pracę, nie tylko uzupełnia linię. Spędziłem rok, używając ich w prawdziwej pracy produkcyjnej, i to uczciwy przegląd po pierwszym roku: gdzie naprawdę błyszczą, gdzie zawodzą i — najważniej — jak zmieniają to, czym faktycznie jest zawód programowania.

Co się zmieniło: od autouzupełniania do agenta

Zmiana warta jest precyzyjnego nazwania, bo to różnica rodzaju, nie stopnia. Autouzupełnianie operowało na poziomie linii albo bloku: przewidywało, co miałeś napisać następnie, w pliku, w którym byłeś. Narzędzie agentowe operuje na poziomie zadania: „dodaj kolumnę i przeprowadź ją przez formularz i API”, „znajdź, dlaczego ten test jest niestabilny, i napraw go”, „zrefaktoryzuj tę klasę, by wyłuskać logikę płatności”. Samo czyta istotne pliki, robi skoordynowane edycje przez kilka z nich, uruchamia testy albo build, widzi wynik i iteruje. To pętla agenta, o której pisałem dla LLM ogólnie — model decyduje o akcji, obserwuje wynik, decyduje o następnej — zastosowana do twojego kodu z twoim edytorem i powłoką jako narzędziami. Ten sam wzorzec, wycelowany w programowanie.

Gdzie naprawdę błyszczą

Po roku siły są jasne i, w niektórych przypadkach, naprawdę imponujące. Narzędzia są najmocniejsze tam, gdzie praca jest dobrze-określona i bogata we wzorce:

  • Boilerplate i zmiany mechaniczne. Przeprowadzanie nowego pola przez model, migrację, formularz, kontroler i widok; dodawanie standardowego endpointu; generowanie testów podążających za istniejącym wzorcem. To praca żmudna, ale jednoznaczna, a narzędzia robią ją szybko i w większości poprawnie. Usunięcie mozolnej harówki jest realne.
  • Praca w nieznanym terytorium. Wskakując w język, framework albo bazę kodu, której nie znasz dobrze, zdolność narzędzia do czytania otaczającego kodu i produkowania czegoś idiomatycznego jest realnym akceleratorem. Kompresuje rozbieg „jak oni tu robią rzeczy?”.
  • Mechaniczne refaktory przez wiele plików. Przemianowanie koncepcji wszędzie, wyłuskanie metody, zastosowanie spójnej zmiany przez bazę kodu — rodzaj powtarzalnej, rozproszonej edycji podatnej na błędy ręcznie i dobrze pasującej do narzędzia, które może zrobić tę samą zmianę w dwudziestu miejscach spójnie.
  • Eksploracja i wyjaśnianie. „Jak ta część działa?” „Gdzie X jest obsługiwane?” Narzędzia są doskonałe w czytaniu bazy kodu i wyjaśnianiu jej, co jest naprawdę użyteczne do onboardingu i nawigacji niezależnie od pisania jakiegokolwiek kodu.

W tych obszarach zysk wydajności to nie szum — to realne, codzienne przyspieszenie znaczącego ułamka pracy, i to dlaczego te narzędzia się przyjęły.

Gdzie zawodzą

Równie jasne po roku są tryby awarii i są lustrzanym odbiciem sił. Narzędzia są najsłabsze tam, gdzie praca wymaga osądu, głębokiego kontekstu albo prawdziwej nowości:

  • Subtelne, ogólnosystemowe decyzje projektowe. Poproszone o dokonanie wyboru architektonicznego z kompromisami zależnymi od kontekstu, którego narzędzie nie może w pełni zobaczyć — charakterystyki wydajności, przyszłego kierunku, ograniczeń biznesowych — produkuje coś wiarygodnego, co może być subtelnie błędne w sposoby, które łapiesz tylko, jeśli znasz system. Nie ma osądu; ma pozór osądu, co jest niebezpieczniejsze.
  • Pewna siebie błędność. Pojedynczo najważniejsza rzecz do zinternalizowania: narzędzia są często pewnie błędne. Produkują kod, który wygląda poprawnie, działa, nawet przechodzi płytki test, ale jest niepoprawny w sposób wymagający prawdziwego zrozumienia, by go dostrzec. Płynność jest oddzielona od poprawności, dokładnie jak z każdym wyjściem LLM, o którym pisałem.
  • Cokolwiek naprawdę nowego. Tam, gdzie zadanie nie jest dopasowywalne do wzorców widzianych wcześniej — naprawdę nowy algorytm, nietypowe ograniczenie, sprytna optymalizacja — narzędzia się męczą, bo ich siłą jest rekombinowanie wzorców, nie wymyślanie ich.
  • Duże, mgliste zadania. Przekaż agentowi duży, niedookreślony cel, a ma tendencję błądzić, robić zamaszyste zmiany i produkować bałagan. Działają znacznie lepiej na ograniczonych, dobrze-określonych zadaniach — ta sama lekcja co agenci ogólnie.

Wspólną nicią jest to, że narzędzia są dopasowywaczami wzorców nadzwyczajnej płynności i zawodzą dokładnie tam, gdzie płynność nie wystarcza — gdzie potrzebujesz zrozumienia, osądu albo nowości.

Jak zmienia się zawód

Najistotniejszą rzeczą nie jest przyspieszenie; to jak przesuwa się rola. Używając tych narzędzi dobrze, spędzasz mniej czasu pisząc kod, a więcej określając, kierując i recenzując go. Model pisze; ty decydujesz, o co prosić, i analizujesz, co wraca. To ma realne konsekwencje:

  • Recenzja staje się rdzenną umiejętnością. Ponieważ narzędzia są pewnie błędne, dyscypliną, która ma największe znaczenie, jest krytyczne czytanie generowanego kodu — rozumienie go, nie tylko uruchamianie. Deweloper, który akceptuje generowany kod, którego nie rozumie, akumuluje bazę kodu, której nikt nie rozumie, co jest powolną katastrofą. Pas jest ten sam co dla każdego wyjścia LLM: nigdy nie ufaj mu, bo wygląda poprawnie; weryfikuj go, bo go rozumiesz.
  • Jasne określanie to dźwignia. Im jaśniejsza i bardziej ograniczona twoja prośba, tym lepszy wynik — co czyni zdolność dekomponowania zadania i precyzyjnego określania go cenniejszą umiejętnością niż kiedykolwiek. To prompt engineering zastosowany do własnej pracy.
  • Zrozumienia wciąż nie da się zlecić. Narzędzie może napisać kod, ale ty pozostajesz za niego odpowiedzialny. Nie możesz zrecenzować tego, czego nie rozumiesz, więc narzędzia nie usuwają potrzeby rozumienia systemu — jeśli już, podnoszą ją, bo jesteś teraz odpowiedzialny za kod, którego nie napisałeś linia po linii.

To nie historia „AI zastępuje programistów”, i po roku jestem pewny, że to nie to. To zmiana w tym, czym jest programowanie: mniej pisania, więcej kierowania i recenzowania; mniej czasu produkowania kodu, więcej czasu decydowania, jaki kod powinien istnieć, i weryfikowania, że to, co wyprodukowano, jest poprawne. Umiejętność przesuwa się ku osądowi, a osąd to dokładnie to, czego narzędzia nie mają.

Werdykt

Rok później narzędzia agentowego kodowania przeszły od autouzupełniania do czegoś naprawdę innego: narzędzi, które biorą zadanie, edytują przez pliki, uruchamiają komendy i iterują — pętla agenta LLM wycelowana w twoją bazę kodu. Przegląd po roku prawdziwego użycia to ani szum, ani odrzucenie. Naprawdę błyszczą na dobrze-określonej, bogatej we wzorce pracy — boilerplate, mechaniczne refaktory, nieznane terytorium, eksploracja — gdzie codzienne przyspieszenie jest realne i to dlaczego się przyjęły. Zawodzą dokładnie tam, gdzie płynność nie wystarcza: subtelny ogólnosystemowy projekt, prawdziwa nowość, duże mgliste zadania, a przede wszystkim pewna siebie błędność, produkując kod, który wygląda poprawnie, a nie jest. Najgłębszą zmianą nie jest szybkość; to że zawód przesuwa się od pisania ku kierowaniu i recenzowaniu — co czyni krytyczne czytanie generowanego kodu rdzenną umiejętnością, jasne określanie formą dźwigni, a rozumienie systemu czymś, czego wciąż nie da się zlecić, bo nie możesz zrecenzować tego, czego nie rozumiesz. Używane z tą dyscypliną — ograniczone zadania, krytyczna recenzja, własność wyniku — te narzędzia to realne i trwałe usprawnienie tego, jak praca jest wykonywana. Używane niedbale — akceptując pewny siebie kod, którego nie rozumiesz — to szybki sposób, by zbudować bazę kodu, której nikt nie może utrzymać. Narzędzia się zmieniły; odpowiedzialność nie.