[{"data":1,"prerenderedAt":1862},["ShallowReactive",2],{"blog-\u002Fblog\u002Fprogramowanie\u002Fjak-zautomatyzowac-prace":3,"blog-others-\u002Fblog\u002Fprogramowanie\u002Fjak-zautomatyzowac-prace":942},{"id":4,"title":5,"body":6,"category":930,"cover":931,"date":932,"description":933,"extension":934,"meta":935,"navigation":231,"path":936,"readingTime":937,"seo":938,"sitemap":939,"stem":940,"__hash__":941},"blog\u002Fblog\u002Fprogramowanie\u002Fjak-zautomatyzowac-prace.md","Jak zautomatyzować pracę: 6 poziomów, od skryptu po AI",{"type":7,"value":8,"toc":910},"minimark",[9,13,18,21,43,46,50,53,56,72,75,79,82,102,105,109,112,388,391,402,405,410,421,426,443,446,450,453,461,468,472,483,487,498,501,505,508,511,517,524,527,531,542,546,557,560,564,567,570,576,579,585,588,592,603,607,618,621,625,628,634,637,643,646,650,661,665,681,684,688,691,743,746,750,761,765,776,779,783,786,806,809,813,816,848,852,857,860,864,867,871,874,878,881,885,898,906],[10,11,12],"p",{},"Poniedziałek, 8:00. Logujesz się do panelu sklepu, eksportujesz zamówienia, wklejasz liczby do arkusza, liczysz sumy, dopisujesz dwa zdania podsumowania i wysyłasz raport do szefa. Czterdzieści pięć minut, co tydzień, rok w rok. Każdy, kto pracuje przy komputerze, ma swoją wersję tego procesu i zwykle próbuje go zautomatyzować od złej strony: sięga po najgłośniejsze narzędzie (dziś: agenta AI), zamiast po najprostsze, które załatwi sprawę. Poniżej biorę ten jeden proces i prowadzę go przez sześć poziomów automatyzacji. Na każdym zobaczysz, co znika z Twojej listy kroków, ile czasu zostaje i gdzie warto się zatrzymać.",[14,15,17],"h2",{"id":16},"krótka-odpowiedź","Krótka odpowiedź",[10,19,20],{},"Automatyzacja pracy ma sześć poziomów, od prostego skryptu po autonomiczny system:",[22,23,24,28,31,34,37,40],"ol",{},[25,26,27],"li",{},"Skrypty i reguły: deterministyczna automatyzacja bez AI.",[25,29,30],{},"RPA: bot, który klika w interfejs jak człowiek.",[25,32,33],{},"Chat z AI: człowiek steruje, AI przyspiesza.",[25,35,36],{},"Automatyzacja workflow: n8n, Make, Zapier, z możliwością włożenia AI jako klocka.",[25,38,39],{},"Agent w IDE: AI sam planuje kroki, Ty zatwierdzasz je na bieżąco.",[25,41,42],{},"System agentowy: AI działa autonomicznie w tle, Ty zatwierdzasz gotowy wynik.",[10,44,45],{},"Zasada wyboru brzmi: zacznij od najniższego poziomu, który załatwi sprawę. Im wyżej, tym więcej pracy oddajesz maszynie i tym więcej kontroli musisz w zamian zbudować.",[14,47,49],{"id":48},"dwa-światy-automatyzacji-przepis-i-kucharz","Dwa światy automatyzacji: przepis i kucharz",[10,51,52],{},"Pomyśl o kuchni. Możesz gotować z przepisu: odmierzone składniki, dokładne kroki i za każdym razem wychodzi to samo danie. A możesz zatrudnić kucharza: mówisz „zrób coś dobrego na obiad\", a on sam decyduje, co kupi i jak przyprawi. Efekt bywa lepszy niż z przepisu, a bywa zaskoczeniem.",[10,54,55],{},"Wszystkie narzędzia automatyzacji dzielą się na te dwa światy:",[57,58,59,66],"ul",{},[25,60,61,65],{},[62,63,64],"strong",{},"Przepis (bez AI):"," skrypty, RPA, n8n. Ty zapisujesz kroki, maszyna je powtarza. Raport wygląda za każdym razem identycznie.",[25,67,68,71],{},[62,69,70],{},"Kucharz (z AI):"," chat i agenci. Ty dajesz pytanie albo cel, AI decyduje o krokach. Raport bywa sprytniejszy, ale nigdy nie masz gwarancji, co w nim znajdziesz.",[10,73,74],{},"Zanim wybierzesz narzędzie, odpowiedz sobie na jedno pytanie: czy potrafię zapisać to zadanie jako dokładne kroki? Jeśli tak, zostań w świecie przepisu. AI potrzebujesz dopiero wtedy, gdy kroki nie istnieją, bo każde uruchomienie wygląda inaczej. A na poziomie 4 zobaczysz, jak oba światy potrafią współpracować.",[14,76,78],{"id":77},"punkt-wyjścia-45-minut-ręcznej-roboty","Punkt wyjścia: 45 minut ręcznej roboty",[10,80,81],{},"Nasz proces w wersji ręcznej to sześć kroków:",[22,83,84,87,90,93,96,99],{},[25,85,86],{},"zaloguj się do panelu sklepu,",[25,88,89],{},"wyeksportuj zamówienia z ostatniego tygodnia do pliku,",[25,91,92],{},"wklej dane do arkusza,",[25,94,95],{},"policz sumę sprzedaży i liczbę zamówień,",[25,97,98],{},"dopisz dwa zdania podsumowania,",[25,100,101],{},"wyślij raport mailem do przełożonego.",[10,103,104],{},"Tych sześć kroków to poligon. Niżej widać, jak każdy poziom skraca tę listę i ile kosztuje to skrócenie.",[14,106,108],{"id":107},"poziom-1-skrypt-który-wysyła-raport-za-ciebie","Poziom 1: skrypt, który wysyła raport za Ciebie",[10,110,111],{},"Pierwszy krok na drabinie to deterministyczna automatyzacja bez AI: kroki zapisuje się raz, a wykonuje je maszyna. Kroki 2-4 i 6 bierze na siebie prosty skrypt:",[113,114,119],"pre",{"className":115,"code":116,"language":117,"meta":118,"style":118},"language-js shiki shiki-themes one-dark-pro","const orders = [\n  { status: 'oplacone', amount: 120 },\n  { status: 'anulowane', amount: 80 },\n  { status: 'oplacone', amount: 200 },\n];\n\nconst paidOrders = orders.filter((order) => order.status === 'oplacone');\nconst paidTotal = paidOrders.reduce((sum, order) => sum + order.amount, 0);\n\nconsole.log(`Sprzedaż: ${paidTotal} zł, zamówień: ${paidOrders.length}`);\n\u002F\u002F Sprzedaż: 320 zł, zamówień: 2\n","js","",[120,121,122,143,175,198,220,226,233,281,330,335,381],"code",{"__ignoreMap":118},[123,124,127,131,135,139],"span",{"class":125,"line":126},"line",1,[123,128,130],{"class":129},"seHd6","const",[123,132,134],{"class":133},"sU0A5"," orders",[123,136,138],{"class":137},"sjrmR"," =",[123,140,142],{"class":141},"sn6KH"," [\n",[123,144,146,149,153,156,160,163,166,168,172],{"class":125,"line":145},2,[123,147,148],{"class":141},"  { ",[123,150,152],{"class":151},"sVyAn","status",[123,154,155],{"class":141},": ",[123,157,159],{"class":158},"subq3","'oplacone'",[123,161,162],{"class":141},", ",[123,164,165],{"class":151},"amount",[123,167,155],{"class":141},[123,169,171],{"class":170},"sVC51","120",[123,173,174],{"class":141}," },\n",[123,176,178,180,182,184,187,189,191,193,196],{"class":125,"line":177},3,[123,179,148],{"class":141},[123,181,152],{"class":151},[123,183,155],{"class":141},[123,185,186],{"class":158},"'anulowane'",[123,188,162],{"class":141},[123,190,165],{"class":151},[123,192,155],{"class":141},[123,194,195],{"class":170},"80",[123,197,174],{"class":141},[123,199,201,203,205,207,209,211,213,215,218],{"class":125,"line":200},4,[123,202,148],{"class":141},[123,204,152],{"class":151},[123,206,155],{"class":141},[123,208,159],{"class":158},[123,210,162],{"class":141},[123,212,165],{"class":151},[123,214,155],{"class":141},[123,216,217],{"class":170},"200",[123,219,174],{"class":141},[123,221,223],{"class":125,"line":222},5,[123,224,225],{"class":141},"];\n",[123,227,229],{"class":125,"line":228},6,[123,230,232],{"emptyLinePlaceholder":231},true,"\n",[123,234,236,238,241,243,245,248,252,255,259,262,265,268,270,272,275,278],{"class":125,"line":235},7,[123,237,130],{"class":129},[123,239,240],{"class":133}," paidOrders",[123,242,138],{"class":137},[123,244,134],{"class":133},[123,246,247],{"class":141},".",[123,249,251],{"class":250},"sVbv2","filter",[123,253,254],{"class":141},"((",[123,256,258],{"class":257},"s_ZVi","order",[123,260,261],{"class":141},") ",[123,263,264],{"class":129},"=>",[123,266,267],{"class":133}," order",[123,269,247],{"class":141},[123,271,152],{"class":151},[123,273,274],{"class":137}," ===",[123,276,277],{"class":158}," 'oplacone'",[123,279,280],{"class":141},");\n",[123,282,284,286,289,291,293,295,298,300,303,305,307,309,311,314,317,319,321,323,325,328],{"class":125,"line":283},8,[123,285,130],{"class":129},[123,287,288],{"class":133}," paidTotal",[123,290,138],{"class":137},[123,292,240],{"class":133},[123,294,247],{"class":141},[123,296,297],{"class":250},"reduce",[123,299,254],{"class":141},[123,301,302],{"class":257},"sum",[123,304,162],{"class":141},[123,306,258],{"class":257},[123,308,261],{"class":141},[123,310,264],{"class":129},[123,312,313],{"class":151}," sum",[123,315,316],{"class":137}," +",[123,318,267],{"class":133},[123,320,247],{"class":141},[123,322,165],{"class":151},[123,324,162],{"class":141},[123,326,327],{"class":170},"0",[123,329,280],{"class":141},[123,331,333],{"class":125,"line":332},9,[123,334,232],{"emptyLinePlaceholder":231},[123,336,338,341,343,346,349,352,355,358,361,364,366,369,371,374,376,379],{"class":125,"line":337},10,[123,339,340],{"class":133},"console",[123,342,247],{"class":141},[123,344,345],{"class":250},"log",[123,347,348],{"class":141},"(",[123,350,351],{"class":158},"`Sprzedaż: ",[123,353,354],{"class":129},"${",[123,356,357],{"class":151},"paidTotal",[123,359,360],{"class":129},"}",[123,362,363],{"class":158}," zł, zamówień: ",[123,365,354],{"class":129},[123,367,368],{"class":133},"paidOrders",[123,370,247],{"class":141},[123,372,373],{"class":151},"length",[123,375,360],{"class":129},[123,377,378],{"class":158},"`",[123,380,280],{"class":141},[123,382,384],{"class":125,"line":383},11,[123,385,387],{"class":386},"sV9Aq","\u002F\u002F Sprzedaż: 320 zł, zamówień: 2\n",[10,389,390],{},"Dołóż jedną linijkę w cron i raport wysyła się sam, w każdy poniedziałek o 8:00:",[113,392,396],{"className":393,"code":394,"language":395,"meta":118,"style":118},"language-cron shiki shiki-themes one-dark-pro","0 8 * * 1 node ~\u002Fraporty\u002Fraport.js\n","cron",[120,397,398],{"__ignoreMap":118},[123,399,400],{"class":125,"line":126},[123,401,394],{},[10,403,404],{},"Twoje 45 minut spada do zera.",[10,406,407],{},[62,408,409],{},"Zalety:",[57,411,412,415,418],{},[25,413,414],{},"stuprocentowa przewidywalność: te same dane dają ten sam wynik, zawsze,",[25,416,417],{},"praca bez nadzoru, w nocy i w weekendy, bez zmęczenia,",[25,419,420],{},"najniższy koszt utrzymania z całej drabiny.",[10,422,423],{},[62,424,425],{},"Wady:",[57,427,428,437,440],{},[25,429,430,431,436],{},"wymaga umiejętności zapisania kroków, czyli ",[432,433,435],"a",{"href":434},"\u002Fblog\u002Fprogramowanie\u002Fjak-myslec-jak-programista","myślenia jak programista"," albo kogoś, kto to potrafi,",[25,438,439],{},"sztywność: robi dokładnie to, co zaplanowano, i nic ponad,",[25,441,442],{},"potrzebuje danych dostępnych jako plik albo API.",[10,444,445],{},"Nasz raport ma kroki znane, a dane mają API, więc poziom 1 załatwia sprawę w całości. Wspinaczka wyżej ma sens tylko w dwóch przypadkach: gdy część danych siedzi w systemie bez eksportu (poziom 2) albo gdy raport ma zawierać wnioski, a nie tylko liczby (poziom 3 i dalej).",[14,447,449],{"id":448},"poziom-2-rpa-czyli-bot-który-klika-tam-gdzie-skrypt-nie-sięga","Poziom 2: RPA, czyli bot, który klika tam, gdzie skrypt nie sięga",[10,451,452],{},"Załóżmy, że część danych siedzi w starym systemie magazynowym: bez API, bez eksportu do pliku, tylko ekran i przyciski. Skrypt się tam nie dostanie. Wchodzi RPA (Robotic Process Automation): bot, który powtarza nagrane kliknięcia jak człowiek. Nagrany scenariusz to dosłownie lista kroków:",[113,454,459],{"className":455,"code":457,"language":458,"meta":118},[456],"language-text","1. Otwórz https:\u002F\u002Fmagazyn.firma.local i zaloguj\n2. Kliknij „Raporty\" → „Eksport tygodniowy\"\n3. Zapisz plik jako raporty\u002Fmagazyn.csv\n4. Zamknij system\n","text",[120,460,457],{"__ignoreMap":118},[10,462,463,464,467],{},"Skrypt z poziomu 1 czyta potem ",[120,465,466],{},"magazyn.csv"," jak każdy inny plik. RPA to nie konkurent skryptu, tylko jego pomost: dokleja kliknięcia, których kod nie dosięgnie, a reszta procesu zostaje deterministyczna.",[10,469,470],{},[62,471,409],{},[57,473,474,477,480],{},[25,475,476],{},"działa z systemami bez API i bez eksportu, często to jedyna opcja,",[25,478,479],{},"nie ingeruje w stary system, bo klika z zewnątrz,",[25,481,482],{},"buduje się nagrywaniem, bez programowania.",[10,484,485],{},[62,486,425],{},[57,488,489,492,495],{},[25,490,491],{},"kruche: przesunięty przycisk albo zmieniona etykieta i automat wywraca się w poniedziałek rano,",[25,493,494],{},"działa w tempie człowieka, bo dosłownie klika,",[25,496,497],{},"trudne do testowania i wersjonowania.",[10,499,500],{},"Dlatego RPA traktuj jako ratunek, nie fundament: pomost do skryptu tam, gdzie nie ma API. Im mniej kliknięć w procesie, tym stabilniej.",[14,502,504],{"id":503},"poziom-3-chat-z-ai-czyli-lepsze-wnioski-i-powrót-do-ręcznej-roboty","Poziom 3: chat z AI, czyli lepsze wnioski i powrót do ręcznej roboty",[10,506,507],{},"Poziomy 1-2 wyzerowały kroki mechaniczne, ale został krok 5: podsumowanie. Szef oczekuje nie tylko liczb, ale wniosków: co poszło nie tak, co rośnie, na co zwrócić uwagę. Sztywnego szablonu tu nie napiszesz, bo każde podsumowanie jest inne. Przekraczamy granicę do świata kucharza.",[10,509,510],{},"W praktyce większość ludzi robi to dziś tak: wkleja liczby do chata (ChatGPT, Claude, Gemini), czyta wynik, poprawia i wysyła. Konkretny prompt to cała „konfiguracja\" tego poziomu:",[113,512,515],{"className":513,"code":514,"language":458,"meta":118},[456],"Podsumuj załączone dane sprzedażowe w trzech punktach:\n1. Co sprzedawało się najlepiej?\n2. Co odbiega od normy z ostatnich tygodni?\n3. Na co zwrócić uwagę w przyszłym tygodniu?\n\nTon: rzeczowy, dla zarządu, maksymalnie 150 słów.\n",[120,516,514],{"__ignoreMap":118},[10,518,519],{},[520,521],"img",{"alt":522,"src":523},"Chat AI podsumowujący tygodniowe dane sprzedażowe","\u002Fimg\u002Fblog\u002Fjak-zautomatyzowac-prace-chat.png",[10,525,526],{},"Wnioski są lepsze niż dwa zdania ze skryptu, ale zauważ, co się stało: wróciło 15 minut Twojej pracy. Chatowanie nie jest automatyzacją, bo nic nie dzieje się samo. Ty sterujesz każdym krokiem, AI tylko przyspiesza.",[10,528,529],{},[62,530,409],{},[57,532,533,536,539],{},[25,534,535],{},"zero konfiguracji: działa od razu i na każdy temat,",[25,537,538],{},"radzi sobie z osądem i językiem, czyli tym, czego skrypt nie ogarnie,",[25,540,541],{},"świetny poligon: zanim zautomatyzujesz, sprawdzisz, jakie pytania ma stawiać automat.",[10,543,544],{},[62,545,425],{},[57,547,548,551,554],{},[25,549,550],{},"to nie automatyzacja, tylko pętla kopiuj-wklej-sprawdź,",[25,552,553],{},"wyniki bywają niespójne między uruchomieniami,",[25,555,556],{},"każdą odpowiedź trzeba zweryfikować, halucynacje nie znikają.",[10,558,559],{},"Jeśli co poniedziałek wklejasz te same dane pod ten sam prompt, to nie masz automatyzacji, tylko ręczną robotę z chatbotem. Na szczęście ten sam prompt da się włożyć do automatu. O tym poziom 4.",[14,561,563],{"id":562},"poziom-4-n8n-czyli-przepis-który-zatrudnia-kucharza","Poziom 4: n8n, czyli przepis, który zatrudnia kucharza",[10,565,566],{},"Gdy dane żyją w chmurze (sklep, arkusze, poczta), kleju między nimi nie musisz kodować. Narzędzia workflow takie jak n8n, Make czy Zapier buduje się z klocków: „gdy wydarzy się X w aplikacji A, zrób Y w aplikacji B\".",[10,568,569],{},"Nasz raport w n8n to początkowo cztery klocki: trigger czasowy (poniedziałek, 8:00) → pobranie zamówień z API sklepu → wiersz w arkuszu Google → mail przez Gmaila. A potem dokładamy piąty: klocek AI z promptem z poziomu 3:",[113,571,574],{"className":572,"code":573,"language":458,"meta":118},[456],"[Cron: pon. 8:00] → [Sklep: zamówienia z API] → [Google Sheets: dopisz wiersze]\n    → [AI: podsumowanie] → [Gmail: raport do szefa]\n",[120,575,573],{"__ignoreMap":118},[10,577,578],{},"Liczby z API lecą do modelu, model pisze podsumowanie, a całość ląduje w mailu. Efekt? Raport ma i liczby, i wnioski, a Twoje 45 minut dalej wynosi zero.",[10,580,581],{},[520,582],{"alt":583,"src":584},"Workflow cotygodniowego raportu sprzedaży w n8n","\u002Fimg\u002Fblog\u002Fjak-zautomatyzowac-prace-n8n.png",[10,586,587],{},"To ważny moment na drabinie: poziom 4 łączy oba światy. Workflow to przepis, a klocek AI to kucharz zatrudniony na jednej stacji. Steru nadal pilnujesz Ty, bo reguły ustawiłeś Ty, a AI odpowiada tylko za fragment wymagający języka i osądu.",[10,589,590],{},[62,591,409],{},[57,593,594,597,600],{},[25,595,596],{},"zero kodu i gotowe integracje z setkami aplikacji,",[25,598,599],{},"klocek AI w środku workflow: automatyczne wnioski bez ręcznego wklejania,",[25,601,602],{},"historia uruchomień i alerty o awariach są z pudełka.",[10,604,605],{},[62,606,425],{},[57,608,609,612,615],{},[25,610,611],{},"zawiła logika zamienia diagram w spaghetti i wtedy kod znów wygrywa,",[25,613,614],{},"uzależnienie od platformy: limity, cennik albo self-hosting do ogarnięcia (n8n),",[25,616,617],{},"testowanie i wersjonowanie ubogie w porównaniu z kodem.",[10,619,620],{},"To poziom, na którym kończy się większość firmowych automatyzacji, i słusznie. Wyżej wchodzi się tam, gdzie reguły przestają wystarczać, bo nawet pytania zmieniają się co tydzień.",[14,622,624],{"id":623},"poziom-5-agent-w-ide-czyli-ai-planuje-kroki-na-twoich-oczach","Poziom 5: agent w IDE, czyli AI planuje kroki na Twoich oczach",[10,626,627],{},"Do tej pory automatyzowaliśmy wykonanie raportu. A co z budową i zmianami samego automatu? Tu wchodzi agent w IDE: Cursor, Claude Code, Copilot. Zamiast kodować, piszesz polecenie:",[113,629,632],{"className":630,"code":631,"language":458,"meta":118},[456],"Rozbuduj raport.js:\n- dodaj liczenie zwrotów (status \"zwrocone\") jako osobną pozycję,\n- gdy brakuje pliku z danymi, wypisz czytelny komunikat i zakończ,\n- format istniejącego podsumowania zostaw bez zmian.\n",[120,633,631],{"__ignoreMap":118},[10,635,636],{},"Agent sam planuje kroki: edytuje pliki, uruchamia kod, poprawia błędy. Ale robi to na Twoich oczach, każdą zmianę widzisz na żywo i możesz ją odrzucić.",[10,638,639],{},[520,640],{"alt":641,"src":642},"Agent w IDE proponujący zmiany w skrypcie raportu","\u002Fimg\u002Fblog\u002Fjak-zautomatyzowac-prace-agent-ide.png",[10,644,645],{},"To pierwszy poziom, na którym AI układa plan za Ciebie. Różnica wobec poziomu 3: niczego nie kopiujesz ręcznie, agent działa bezpośrednio w Twoich plikach. Różnica wobec poziomu 6: nadzór masz natychmiastowy, bo siedzicie przy tym samym ekranie.",[10,647,648],{},[62,649,409],{},[57,651,652,655,658],{},[25,653,654],{},"każdy krok widać i można przerwać, nadzór na żywo,",[25,656,657],{},"budowa i utrzymanie automatów z poziomów 1-4 przyspiesza z godzin do minut,",[25,659,660],{},"przy okazji nauka przez patrzenie, jak agent pracuje.",[10,662,663],{},[62,664,425],{},[57,666,667,675,678],{},[25,668,669,670,674],{},"trzeba umieć ocenić to, co wyprodukował: wartość przenosi się z pisania kodu na jego czytanie (o czym pisałem w artykule o ",[432,671,673],{"href":672},"\u002Fblog\u002Fprogramowanie\u002Ffullstack-developer-w-dobie-ai","fullstacku w dobie AI","),",[25,676,677],{},"nie działa w tle: przyspiesza Twoją pracę, ale nie zastępuje zaplanowanego automatu,",[25,679,680],{},"bez jasnych granic potrafi przesadzić z zakresem zmian.",[10,682,683],{},"Agent w IDE to współpracownik siedzący przy Twoim biurku, a nie pracownik wysyłany z zadaniem. Do zadań, które mają działać bez Ciebie, potrzebny jest poziom 6.",[14,685,687],{"id":686},"poziom-6-system-agentowy-czyli-raport-który-sam-stawia-pytania","Poziom 6: system agentowy, czyli raport, który sam stawia pytania",[10,689,690],{},"Na szczycie drabiny nie dajesz już kroków, tylko cel, narzędzia i granice:",[113,692,696],{"className":693,"code":694,"language":695,"meta":118,"style":118},"language-yaml shiki shiki-themes one-dark-pro","cel: co poniedziałek o 8:00 przygotuj raport sprzedaży z minionego tygodnia\nnarzędzia:\n  - API sklepu (tylko odczyt zamówień)\n  - folder raporty\u002F (odczyt eksportów z magazynu)\n  - poczta: wyłącznie drafty, wysyłka po mojej akceptacji\ngranice:\n  - nic nie wysyłaj bez akceptacji\n  - gdy brakuje danych, przerwij i zgłoś problem\nanomalie: odchylenie powyżej 20% od średniej z 4 ostatnich tygodni\n","yaml",[120,697,698,703,708,713,718,723,728,733,738],{"__ignoreMap":118},[123,699,700],{"class":125,"line":126},[123,701,702],{},"cel: co poniedziałek o 8:00 przygotuj raport sprzedaży z minionego tygodnia\n",[123,704,705],{"class":125,"line":145},[123,706,707],{},"narzędzia:\n",[123,709,710],{"class":125,"line":177},[123,711,712],{},"  - API sklepu (tylko odczyt zamówień)\n",[123,714,715],{"class":125,"line":200},[123,716,717],{},"  - folder raporty\u002F (odczyt eksportów z magazynu)\n",[123,719,720],{"class":125,"line":222},[123,721,722],{},"  - poczta: wyłącznie drafty, wysyłka po mojej akceptacji\n",[123,724,725],{"class":125,"line":228},[123,726,727],{},"granice:\n",[123,729,730],{"class":125,"line":235},[123,731,732],{},"  - nic nie wysyłaj bez akceptacji\n",[123,734,735],{"class":125,"line":283},[123,736,737],{},"  - gdy brakuje danych, przerwij i zgłoś problem\n",[123,739,740],{"class":125,"line":332},[123,741,742],{},"anomalie: odchylenie powyżej 20% od średniej z 4 ostatnich tygodni\n",[10,744,745],{},"Agent działa w tle, bez Ciebie: sam pobiera dane, sam liczy, sam decyduje, co sprawdzić. I któregoś tygodnia zauważa, że zwroty rosną trzeci tydzień z rzędu, choć nikt go o to nie pytał. Przygotowuje draft maila, Ty czytasz i zatwierdzasz. Zostaje Ci 5 minut zamiast 45.",[10,747,748],{},[62,749,409],{},[57,751,752,755,758],{},[25,753,754],{},"osąd w każdej iteracji: zauważa to, o co nikt go nie pytał,",[25,756,757],{},"obsługuje zadania, których nie da się zapisać krokami,",[25,759,760],{},"cel zamiast instrukcji, najbliżej zatrudnienia pracownika.",[10,762,763],{},[62,764,425],{},[57,766,767,770,773],{},[25,768,769],{},"wynik niegwarantowany: potrzebuje nadzoru, limitów i ludzkiej akceptacji,",[25,771,772],{},"koszt błędu rośnie razem z uprawnieniami (poczta, płatności, dane klientów),",[25,774,775],{},"najtrudniejszy do przewidzenia: zmienne zachowanie i zmienne koszty.",[10,777,778],{},"Traktuj system agentowy jak szybkiego, pomysłowego pracownika: nie wysłałbyś mu jednak faktur do klientów bez przeglądu. Im większa autonomia, tym ważniejsza staje się kontrola.",[14,780,782],{"id":781},"na-którym-poziomie-się-zatrzymać","Na którym poziomie się zatrzymać?",[10,784,785],{},"Zauważ, jak zmieniała się Twoja rola w naszym raporcie: 45 minut ręcznie, zero na poziomach 1-2, 15 minut z chatem, zero razem z wnioskami na poziomie 4, w końcu 5 minut akceptacji z systemem agentowym. (Poziom 5 celowo nie wchodzi do tego rachunku, bo agent w IDE przyspiesza budowę automatów, nie ich wykonanie.) Mniej roboty to nie zawsze lepszy wybór: wraz z autonomią rośnie wymagane zaufanie i kontrola. Trzy pytania pomogą wybrać właściwy poziom:",[22,787,788,794,800],{},[25,789,790,793],{},[62,791,792],{},"Czy potrafię zapisać kroki dokładnie?"," Tak: poziomy 1, 2, 4. Nie: 3, 5, 6.",[25,795,796,799],{},[62,797,798],{},"Jaki jest koszt błędu?"," Wysoki (faktury, dane klientów, płatności): zostań przy przepisie albo dodaj ludzką akceptację przed wysyłką.",[25,801,802,805],{},[62,803,804],{},"Jak często to robię?"," Codziennie: automatyzuj. Raz na kwartał: czasem taniej zrobić ręcznie niż budować i utrzymywać automat.",[10,807,808],{},"Nasz raport sprzedaży? W większości firm kończy się na poziomie 1 albo 4: kroki są znane, dane mają API, a klocek AI załatwia wnioski. System agentowy z poziomu 6 ma sens dopiero wtedy, gdy „raport\" za każdym razem stawia inne pytania i jego wartość leży właśnie w osądzie, nie w liczbach.",[14,810,812],{"id":811},"gdzie-automatyzacje-się-psują","Gdzie automatyzacje się psują",[10,814,815],{},"Automatyzacje psują się w przewidywalnych miejscach:",[57,817,818,824,830,836,842],{},[25,819,820,823],{},[62,821,822],{},"Start od agenta, gdy wystarczy skrypt."," Hype ciągnie na szczyt drabiny, a większość biurowej automatyzacji to poziomy 1-4. Agent do zadania regułowego to jak kucharz wynajęty do zagotowania wody.",[25,825,826,829],{},[62,827,828],{},"Automatyzowanie chaosu."," Zautomatyzowany zły proces to zły proces, który działa szybciej. Najpierw uprość, dopiero potem automatyzuj.",[25,831,832,835],{},[62,833,834],{},"Wiara, że automat jest wieczny."," Każda automatyzacja łamie się, gdy świat się zmieni: nowe API, nowy interfejs, nowy format pliku. Ktoś musi być jej właścicielem.",[25,837,838,841],{},[62,839,840],{},"Brak kontroli tam, gdzie błąd boli."," Im bardziej autonomiczne narzędzie, tym droższy błąd. Agent z nieograniczonym dostępem do poczty klientów to proszenie się o kłopoty.",[25,843,844,847],{},[62,845,846],{},"Chat z AI udający system."," Powtarzalny poniedziałkowy prompt z tymi samymi danymi to nie automatyzacja, tylko ręczna robota w przebraniu. Włóż ten prompt jako klocek do workflow z poziomu 4.",[14,849,851],{"id":850},"najczęstsze-pytania","Najczęstsze pytania",[853,854,856],"h3",{"id":855},"czy-trzeba-umieć-programować-żeby-automatyzować-pracę","Czy trzeba umieć programować, żeby automatyzować pracę?",[10,858,859],{},"Nie zawsze. n8n, Make czy RPA działają bez kodu, a formuły w arkuszu to już pełnoprawna automatyzacja. Fundament jest jednak wspólny dla wszystkich poziomów: rozbicie procesu na dokładne kroki. Bez tego żaden klocek ani agent nie pomoże.",[853,861,863],{"id":862},"czym-różni-się-rpa-od-agenta-ai","Czym różni się RPA od agenta AI?",[10,865,866],{},"RPA sztywno powtarza nagrane kliknięcia: zero osądu, łamie się przy zmianie interfejsu. Agent sam decyduje o krokach, żeby osiągnąć cel, więc jest elastyczny, ale mniej przewidywalny. Jedno to nagranie, drugie to improwizacja.",[853,868,870],{"id":869},"czym-różni-się-agent-w-ide-od-systemu-agentowego","Czym różni się agent w IDE od systemu agentowego?",[10,872,873],{},"Agent w IDE pracuje razem z człowiekiem, na jego oczach: każdą zmianę widać w trakcie i można ją odrzucić. System agentowy działa w tle, a efekt końcowy trafia do akceptacji po fakcie. Pierwszy to współpracownik przy biurku, drugi to pracownik, któremu zleca się zadanie. Nadzór na żywo kontra akceptacja gotowego wyniku.",[853,875,877],{"id":876},"od-czego-zacząć-automatyzację-własnej-pracy","Od czego zacząć automatyzację własnej pracy?",[10,879,880],{},"Od tygodnia spisywania powtarzalnych zadań. Potem wybór zadania najczęstszego i najbardziej „regułowego\" i start od najniższego poziomu drabiny, który je załatwi. Zaskoczenie: najczęściej koniec na formule w arkuszu albo kilkunastu linijkach skryptu.",[14,882,884],{"id":883},"zautomatyzuj-coś-w-ten-poniedziałek","Zautomatyzuj coś w ten poniedziałek",[10,886,887,888,892,893,897],{},"Narzędzia będą się zmieniać co roku, ale fundament zostaje ten sam: rozbicie procesu na kroki, zanim wybierzesz technologię. To umiejętność, którą trenuję z uczniami od pierwszych zajęć, na realnych zadaniach i z AI używanym z głową. Zobacz, jak wygląda ",[432,889,891],{"href":890},"\u002Fprogramowanie","nauka programowania ze mną",", albo ",[432,894,896],{"href":895},"\u002Fkontakt","umów bezpłatną konsultację"," i opowiedz, który proces chcesz zautomatyzować: wspólnie znajdziemy najprostszy sposób.",[10,899,900,901,905],{},"A jeśli chcesz zobaczyć automatyzację w praktyce, w ",[432,902,904],{"href":903},"\u002Fkursy","kursie DevChallenge"," budujesz i wdrażasz własną aplikację z AI: od frontendu, przez backend i integracje, po publiczny deploy.",[907,908,909],"style",{},"html pre.shiki code .seHd6, html code.shiki .seHd6{--shiki-default:#C678DD}html pre.shiki code .sU0A5, html code.shiki .sU0A5{--shiki-default:#E5C07B}html pre.shiki code .sjrmR, html code.shiki .sjrmR{--shiki-default:#56B6C2}html pre.shiki code .sn6KH, html code.shiki .sn6KH{--shiki-default:#ABB2BF}html pre.shiki code .sVyAn, html code.shiki .sVyAn{--shiki-default:#E06C75}html pre.shiki code .subq3, html code.shiki .subq3{--shiki-default:#98C379}html pre.shiki code .sVC51, html code.shiki .sVC51{--shiki-default:#D19A66}html pre.shiki code .sVbv2, html code.shiki .sVbv2{--shiki-default:#61AFEF}html pre.shiki code .s_ZVi, html code.shiki .s_ZVi{--shiki-default:#E06C75;--shiki-default-font-style:italic}html pre.shiki code .sV9Aq, html code.shiki .sV9Aq{--shiki-default:#7F848E;--shiki-default-font-style:italic}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":118,"searchDepth":177,"depth":177,"links":911},[912,913,914,915,916,917,918,919,920,921,922,923,929],{"id":16,"depth":145,"text":17},{"id":48,"depth":145,"text":49},{"id":77,"depth":145,"text":78},{"id":107,"depth":145,"text":108},{"id":448,"depth":145,"text":449},{"id":503,"depth":145,"text":504},{"id":562,"depth":145,"text":563},{"id":623,"depth":145,"text":624},{"id":686,"depth":145,"text":687},{"id":781,"depth":145,"text":782},{"id":811,"depth":145,"text":812},{"id":850,"depth":145,"text":851,"children":924},[925,926,927,928],{"id":855,"depth":177,"text":856},{"id":862,"depth":177,"text":863},{"id":869,"depth":177,"text":870},{"id":876,"depth":177,"text":877},{"id":883,"depth":145,"text":884},"AI & Programowanie",null,"2026-07-24","Jak zautomatyzować pracę? 6 poziomów: skrypty, RPA, chat z AI, n8n, agent w IDE i system agentowy - jeden proces od ręcznej roboty po autonomię.","md",{},"\u002Fblog\u002Fprogramowanie\u002Fjak-zautomatyzowac-prace","12 min",{"title":5,"description":933},{"loc":936},"blog\u002Fprogramowanie\u002Fjak-zautomatyzowac-prace","6qxUp5gnGNxaORxoRvBbpYhxhDkCt4vtD6UtAoWI2kY",[943,1541],{"id":944,"title":945,"body":946,"category":930,"cover":931,"date":1533,"description":1534,"extension":934,"meta":1535,"navigation":231,"path":672,"readingTime":1536,"seo":1537,"sitemap":1538,"stem":1539,"__hash__":1540},"blog\u002Fblog\u002Fprogramowanie\u002Ffullstack-developer-w-dobie-ai.md","Fullstack developer w erze AI: czego uczyć się po kolei",{"type":7,"value":947,"toc":1520},[948,951,955,958,961,992,996,999,1002,1006,1009,1063,1070,1080,1083,1287,1300,1309,1313,1316,1388,1393,1396,1422,1425,1431,1434,1438,1441,1473,1475,1479,1482,1486,1493,1497,1500,1504,1511,1517],[10,949,950],{},"„Skoro AI pisze kod, to po co się tego uczyć?\". To pytanie słyszę od uczniów coraz częściej i rozumiem, skąd się bierze: AI naprawdę pisze kod, często szybciej niż człowiek. Wniosek „nie ma więc sensu się uczyć\" jest jednak fałszywy. Wartość programisty nie zniknęła, tylko przeniosła się z pisania kodu na jego rozumienie, łączenie i ocenianie. Najlepiej w tej roli odnajduje się fullstack developer, czyli osoba rozumiejąca cały system, od przeglądarki po bazę danych. Poniżej konkretna ścieżka technologii i proces nauki, w którym analiza kodu liczy się bardziej niż wkuwanie składni.",[14,952,954],{"id":953},"co-ai-naprawdę-zmieniło","Co AI naprawdę zmieniło",[10,956,957],{},"Jeszcze kilka lat temu programista przypominał tłumacza, który musi znać słownictwo na pamięć: bez opanowanej składni nie powstaje ani linia. Dziś AI zna „słownictwo\" lepiej niż ktokolwiek z nas, więc rola przesunęła się z tłumacza na redaktora. Dostajesz wygenerowany tekst, a Twoją robotą jest ocenić, czy ma sens, czy pasuje do całości i co poprawić.",[10,959,960],{},"Konsekwencje są trzy i wszystkie konkretne:",[57,962,963,980,986],{},[25,964,965,968,969,972,973,976,977,979],{},[62,966,967],{},"Składnia przestała być walutą."," Nie trzeba pamiętać dokładnej formy ",[120,970,971],{},"map()"," ani zapisu zapytania SQL. Trzeba wiedzieć, czym ",[120,974,975],{},"map"," różni się od ",[120,978,251],{}," i kiedy które użyć.",[25,981,982,985],{},[62,983,984],{},"Czytanie kodu to umiejętność numer jeden."," Większość dnia to nie pisanie, tylko czytanie tego, co wygenerowało AI, i sprawdzanie, czy robi to, co powinno.",[25,987,988,991],{},[62,989,990],{},"Debugowanie bije zapamiętywanie."," Błąd w wygenerowanym kodzie znajdziesz tylko wtedy, gdy rozumiesz, jak dane przepływają przez program.",[14,993,995],{"id":994},"dlaczego-akurat-fullstack","Dlaczego akurat fullstack",[10,997,998],{},"Paradoks brzmi tak: im lepiej AI generuje kawałki, tym droższy jest człowiek widzący całość. Pojedynczy komponent albo funkcja? Zrobi świetnie. Ale aplikacja to nie suma komponentów, tylko decyzje: jak dane płyną od formularza przez API do bazy i z powrotem, gdzie je walidować, co się dzieje, gdy coś padnie o trzeciej w nocy.",[10,1000,1001],{},"Fullstack developer z AI w ręku robi dziś to, co niedawno wymagało małego zespołu. Pod jednym warunkiem: każdą warstwę rozumie na tyle, żeby zweryfikować to, co AI wyprodukowało. Ścieżka niżej buduje dokładnie to rozumienie.",[14,1003,1005],{"id":1004},"ścieżka-osiem-warstw-jeden-projekt","Ścieżka: osiem warstw, jeden projekt",[10,1007,1008],{},"Kolejność nie jest przypadkowa. Każdy etap stoi na poprzednim i kończy się małym projektem:",[22,1010,1011,1017,1027,1033,1039,1045,1051,1057],{},[25,1012,1013,1016],{},[62,1014,1015],{},"HTML + CSS."," Szkielet i wygląd strony: semantyczne tagi, formularze, flexbox i grid. Projekt: własna strona-wizytówka.",[25,1018,1019,1022,1023,1026],{},[62,1020,1021],{},"JavaScript."," Pierwszy prawdziwy język: zmienne, funkcje, metody tablic, asynchroniczność, pobieranie danych z API. Tu trenuje się też ",[432,1024,1025],{"href":434},"myślenie jak programista",". Projekt: lista zadań albo quiz w przeglądarce.",[25,1028,1029,1032],{},[62,1030,1031],{},"Git."," Z AI eksperymentuje się dużo, więc trzeba umieć wrócić do wersji, która działała.",[25,1034,1035,1038],{},[62,1036,1037],{},"React + Next.js."," Komponenty, stan, routing, renderowanie po stronie serwera. Równorzędna alternatywa to Vue z Nuxtem: jeden ekosystem, wybrany i trzymany. Projekt: aplikacja z kilkoma podstronami, zasilana z zewnętrznego API.",[25,1040,1041,1044],{},[62,1042,1043],{},"TypeScript."," Typy to dokumentacja czytelna i dla człowieka, i dla AI: wygenerowany kod z typami znacznie trudniej zepsuć bez wykrycia.",[25,1046,1047,1050],{},[62,1048,1049],{},"Backend na Node.js."," Własne API: endpointy, walidacja danych, uwierzytelnianie. Samodzielny serwer albo server routes wbudowane we framework, tak działa na przykład Nitro, silnik serwerowy Nuxta. Projekt: backend, z którego korzysta frontend z punktu 4.",[25,1052,1053,1056],{},[62,1054,1055],{},"Baza danych."," SQL, na przykład PostgreSQL, plus ORM łączący bazę z kodem: tabele, relacje, zapytania.",[25,1058,1059,1062],{},[62,1060,1061],{},"Deploy."," Vercel albo własny serwer, zmienne środowiskowe, domena. Aplikacja istnieje dopiero wtedy, gdy ktoś może z niej skorzystać.",[10,1064,1065,1066,1069],{},"To nie lista „technologii do zebrania\", tylko warstwy jednego systemu, i dlatego najlepiej uczyć się ich na jednym rosnącym projekcie, nie na ośmiu osobnych tutorialach. Tak jest zbudowana aplikacja z mojego ",[432,1067,1068],{"href":903},"kursu DevChallenge",": AI generuje pytania do wyzwań, frontend pokazuje je graczowi, backend na Nitrze liczy wynik, a rezultaty trafiają do bazy i na publiczny leaderboard. Każda warstwa ze ścieżki, spięta w jeden produkt.",[10,1071,1072,1076],{},[520,1073],{"alt":1074,"src":1075},"Kreator wyzwania w aplikacji z kursu DevChallenge - temat, poziom i typy pytań","\u002Fimg\u002Fcourse\u002Fcreator-poster.jpg",[1077,1078,1079],"em",{},"Kreator wyzwania: użytkownik wybiera temat, poziom i typy pytań, a resztę robi pipeline budowany warstwa po warstwie.",[10,1081,1082],{},"A serce backendu takiej aplikacji to w Nitrze kilkanaście linijek i jeden server route:",[113,1084,1088],{"className":1085,"code":1086,"language":1087,"meta":118,"style":118},"language-ts shiki shiki-themes one-dark-pro","\u002F\u002F server\u002Fapi\u002Fscore.post.ts\nexport default defineEventHandler(async (event) => {\n  const body = await readBody(event)\n\n  if (!Array.isArray(body?.answers)) {\n    throw createError({ statusCode: 400, statusMessage: 'Brak odpowiedzi' })\n  }\n\n  const score = await scoreAnswers(body.gameId, body.answers)\n\n  \u002F\u002F do przeglądarki wraca tylko wynik - poprawne odpowiedzi zostają na serwerze\n  return { score }\n})\n","ts",[120,1089,1090,1095,1124,1147,1151,1183,1215,1220,1224,1257,1261,1266,1281],{"__ignoreMap":118},[123,1091,1092],{"class":125,"line":126},[123,1093,1094],{"class":386},"\u002F\u002F server\u002Fapi\u002Fscore.post.ts\n",[123,1096,1097,1100,1103,1106,1108,1111,1114,1117,1119,1121],{"class":125,"line":145},[123,1098,1099],{"class":129},"export",[123,1101,1102],{"class":129}," default",[123,1104,1105],{"class":250}," defineEventHandler",[123,1107,348],{"class":141},[123,1109,1110],{"class":129},"async",[123,1112,1113],{"class":141}," (",[123,1115,1116],{"class":257},"event",[123,1118,261],{"class":141},[123,1120,264],{"class":129},[123,1122,1123],{"class":141}," {\n",[123,1125,1126,1129,1132,1134,1137,1140,1142,1144],{"class":125,"line":177},[123,1127,1128],{"class":129},"  const",[123,1130,1131],{"class":133}," body",[123,1133,138],{"class":137},[123,1135,1136],{"class":129}," await",[123,1138,1139],{"class":250}," readBody",[123,1141,348],{"class":141},[123,1143,1116],{"class":151},[123,1145,1146],{"class":141},")\n",[123,1148,1149],{"class":125,"line":200},[123,1150,232],{"emptyLinePlaceholder":231},[123,1152,1153,1156,1158,1161,1164,1166,1169,1171,1174,1177,1180],{"class":125,"line":222},[123,1154,1155],{"class":129},"  if",[123,1157,1113],{"class":141},[123,1159,1160],{"class":137},"!",[123,1162,1163],{"class":133},"Array",[123,1165,247],{"class":141},[123,1167,1168],{"class":250},"isArray",[123,1170,348],{"class":141},[123,1172,1173],{"class":133},"body",[123,1175,1176],{"class":141},"?.",[123,1178,1179],{"class":151},"answers",[123,1181,1182],{"class":141},")) {\n",[123,1184,1185,1188,1191,1194,1197,1199,1202,1204,1207,1209,1212],{"class":125,"line":228},[123,1186,1187],{"class":129},"    throw",[123,1189,1190],{"class":250}," createError",[123,1192,1193],{"class":141},"({ ",[123,1195,1196],{"class":151},"statusCode",[123,1198,155],{"class":141},[123,1200,1201],{"class":170},"400",[123,1203,162],{"class":141},[123,1205,1206],{"class":151},"statusMessage",[123,1208,155],{"class":141},[123,1210,1211],{"class":158},"'Brak odpowiedzi'",[123,1213,1214],{"class":141}," })\n",[123,1216,1217],{"class":125,"line":235},[123,1218,1219],{"class":141},"  }\n",[123,1221,1222],{"class":125,"line":283},[123,1223,232],{"emptyLinePlaceholder":231},[123,1225,1226,1228,1231,1233,1235,1238,1240,1242,1244,1247,1249,1251,1253,1255],{"class":125,"line":332},[123,1227,1128],{"class":129},[123,1229,1230],{"class":133}," score",[123,1232,138],{"class":137},[123,1234,1136],{"class":129},[123,1236,1237],{"class":250}," scoreAnswers",[123,1239,348],{"class":141},[123,1241,1173],{"class":133},[123,1243,247],{"class":141},[123,1245,1246],{"class":151},"gameId",[123,1248,162],{"class":141},[123,1250,1173],{"class":133},[123,1252,247],{"class":141},[123,1254,1179],{"class":151},[123,1256,1146],{"class":141},[123,1258,1259],{"class":125,"line":337},[123,1260,232],{"emptyLinePlaceholder":231},[123,1262,1263],{"class":125,"line":383},[123,1264,1265],{"class":386},"  \u002F\u002F do przeglądarki wraca tylko wynik - poprawne odpowiedzi zostają na serwerze\n",[123,1267,1269,1272,1275,1278],{"class":125,"line":1268},12,[123,1270,1271],{"class":129},"  return",[123,1273,1274],{"class":141}," { ",[123,1276,1277],{"class":151},"score",[123,1279,1280],{"class":141}," }\n",[123,1282,1284],{"class":125,"line":1283},13,[123,1285,1286],{"class":141},"})\n",[10,1288,1289,162,1292,1295,1296,1299],{},[120,1290,1291],{},"defineEventHandler",[120,1293,1294],{},"readBody"," i ",[120,1297,1298],{},"createError"," to API Nitra, które Nuxt importuje automatycznie. Cała reszta to zwykły JavaScript z warstwy drugiej: warunek, tablica, funkcja.",[10,1301,1302,1306],{},[520,1303],{"alt":1304,"src":1305},"Ekran wyniku w aplikacji DevChallenge - punktacja i poprawne odpowiedzi","\u002Fimg\u002Fcourse\u002Fresult-poster.jpg",[1077,1307,1308],{},"Wynik liczony po stronie serwera: przeglądarka dostaje punktację i podgląd odpowiedzi, ale nigdy klucz przed czasem.",[14,1310,1312],{"id":1311},"nauka-z-ai-nie-pomimo-ai","Nauka z AI, nie pomimo AI",[10,1314,1315],{},"Wkuwanie miało sens, gdy wąskim gardłem było pisanie. Dziś wąskim gardłem jest rozumienie, więc wygrywa analiza. AI wygenerowało taki fragment:",[113,1317,1319],{"className":115,"code":1318,"language":117,"meta":118,"style":118},"const activeEmails = users\n  .filter((user) => user.lastLoginDaysAgo \u003C= 30)\n  .map((user) => user.email);\n",[120,1320,1321,1333,1365],{"__ignoreMap":118},[123,1322,1323,1325,1328,1330],{"class":125,"line":126},[123,1324,130],{"class":129},[123,1326,1327],{"class":133}," activeEmails",[123,1329,138],{"class":137},[123,1331,1332],{"class":151}," users\n",[123,1334,1335,1338,1340,1342,1345,1347,1349,1352,1354,1357,1360,1363],{"class":125,"line":145},[123,1336,1337],{"class":141},"  .",[123,1339,251],{"class":250},[123,1341,254],{"class":141},[123,1343,1344],{"class":257},"user",[123,1346,261],{"class":141},[123,1348,264],{"class":129},[123,1350,1351],{"class":133}," user",[123,1353,247],{"class":141},[123,1355,1356],{"class":151},"lastLoginDaysAgo",[123,1358,1359],{"class":137}," \u003C=",[123,1361,1362],{"class":170}," 30",[123,1364,1146],{"class":141},[123,1366,1367,1369,1371,1373,1375,1377,1379,1381,1383,1386],{"class":125,"line":177},[123,1368,1337],{"class":141},[123,1370,975],{"class":250},[123,1372,254],{"class":141},[123,1374,1344],{"class":257},[123,1376,261],{"class":141},[123,1378,264],{"class":129},[123,1380,1351],{"class":133},[123,1382,247],{"class":141},[123,1384,1385],{"class":151},"email",[123,1387,280],{"class":141},[10,1389,1390,1391,247],{},"Nie wklejaj go od razu. Powiedz na głos, co robi: bierze użytkowników, zostawia zalogowanych w ostatnich trzydziestu dniach i wyciąga ich adresy. Brzmi banalnie, a wyłapuje większość problemów z kodem od AI. Na przykład taki: w Twoich danych nie ma w ogóle pola ",[120,1392,1356],{},[10,1394,1395],{},"Wokół tego gestu buduje się cała reszta:",[57,1397,1398,1404,1410,1416],{},[25,1399,1400,1403],{},[62,1401,1402],{},"Analiza każdego wygenerowanego fragmentu."," Kod, którego nie da się opisać własnymi słowami, nie jest jeszcze zrozumiany, więc nie nadaje się do wklejenia.",[25,1405,1406,1409],{},[62,1407,1408],{},"„Dlaczego\", nie samo „jak\"."," AI to cierpliwy mentor: poproś o wyjaśnienie decyzji, o alternatywy, o review własnego kodu. Z gotowej odpowiedzi bez „dlaczego\" zostaje zero.",[25,1411,1412,1415],{},[62,1413,1414],{},"Najpierw plan, potem prompt."," Problem rozbity po polsku przed promptem pozwala zweryfikować wynik wobec własnego planu, a nie brać, co popadnie.",[25,1417,1418,1421],{},[62,1419,1420],{},"Projekty, w których AI pisze 80%, a Ty rozumiesz 100%."," Proporcje kodu nie są problemem. Proporcje rozumienia są.",[10,1423,1424],{},"Różnicę widać na promptach. Słaby brzmi „napisz mi aplikację z quizem\". Dobry to plan przełożony na kontekst i wymagania:",[113,1426,1429],{"className":1427,"code":1428,"language":458,"meta":118},[456],"Jestem na etapie backendu aplikacji z wyzwaniami (Nuxt, server routes na Nitrze).\nNapisz server route POST \u002Fapi\u002Fscore, który:\n1. przyjmuje id gry i odpowiedzi gracza,\n2. pobiera poprawne odpowiedzi z bazy - nigdy nie wysyła ich do klienta,\n3. zwraca wyłącznie wynik.\nZanim napiszesz kod, wypunktuj przypadki brzegowe, które powinienem obsłużyć.\n",[120,1430,1428],{"__ignoreMap":118},[10,1432,1433],{},"Ten prompt zaczyna się od kontekstu, a kończy pytaniem „czego nie wiem\". To drugie zamienia automat w mentora.",[14,1435,1437],{"id":1436},"błędy-które-ai-tylko-podkręciło","Błędy, które AI tylko podkręciło",[10,1439,1440],{},"Pułapki w nauce są te same co zawsze, tylko w nowym opakowaniu:",[57,1442,1443,1449,1455,1461,1467],{},[25,1444,1445,1448],{},[62,1446,1447],{},"Kopiuj-wklej bez czytania."," Kod z AI działa, dopóki się nie zepsuje. A psuje się przy pierwszej zmianie wymagań i wtedy zostajesz sam z kodem, którego nie rozumiesz.",[25,1450,1451,1454],{},[62,1452,1453],{},"Skok prosto do frameworków."," React bez solidnego JavaScriptu to domek na piasku. AI to maskuje, bo „działa\", aż do pierwszego nietypowego błędu.",[25,1456,1457,1460],{},[62,1458,1459],{},"Wkuwanie składni jak na sprawdzian."," Składnia żyje w dokumentacji i w AI. W głowie trzymaj koncepcje: przepływ danych, cykl życia komponentu, relacje w bazie.",[25,1462,1463,1466],{},[62,1464,1465],{},"Zbieranie technologii zamiast łączenia ich."," Osiem tutoriali z ośmiu technologii uczy mniej niż jedna aplikacja przechodząca przez wszystkie warstwy.",[25,1468,1469,1472],{},[62,1470,1471],{},"„AI i tak zastąpi początkujących\"."," Zastępuje tych, którzy tylko przepisują. Nagradza tych, którzy rozumieją, a rozumienie bierze się z praktyki, której nie da się pominąć.",[14,1474,851],{"id":850},[853,1476,1478],{"id":1477},"czy-ai-nie-zastąpi-programistów","Czy AI nie zastąpi programistów?",[10,1480,1481],{},"Zastępuje fragmenty pracy, nie całość. Znika programista-przepisacz, rośnie znaczenie tego, który rozumie system i czyta cudzy kod. Im więcej kodu generują modele, tym więcej ludzi potrzeba do jego oceny i utrzymania.",[853,1483,1485],{"id":1484},"od-której-technologii-zacząć","Od której technologii zacząć?",[10,1487,1488,1489,247],{},"Od HTML, CSS i JavaScriptu, dokładnie w tej kolejności. To baza, na której stoi cały web; bez niej każda kolejna technologia będzie magią. Szczegółowy plan startu opisuje artykuł ",[432,1490,1492],{"href":1491},"\u002Fblog\u002Fprogramowanie\u002Fjak-zaczac-programowac-od-zera","jak zacząć programować od zera",[853,1494,1496],{"id":1495},"ile-trwa-droga-do-fullstacka","Ile trwa droga do fullstacka?",[10,1498,1499],{},"Przy regularnej, projektowej nauce pierwsza kompletna aplikacja powstaje po kilku miesiącach, a poziom pierwszej pracy to zwykle rok do półtora. AI skraca pisanie kodu, nie skraca budowania rozumienia. I dobrze, bo to ono jest dziś najbardziej opłacalne.",[14,1501,1503],{"id":1502},"chcesz-przejść-tę-ścieżkę-z-planem","Chcesz przejść tę ścieżkę z planem?",[10,1505,1506,1507,892,1509,247],{},"Najwięcej czasu zabiera nie nauka, tylko zgadywanie kolejności i szukanie materiałów. Na zajęciach układamy ścieżkę pod cel i od początku pracujemy na kodzie, który analizujemy i rozumiemy, z AI używanym z głową. Zobacz, jak wygląda ",[432,1508,891],{"href":890},[432,1510,896],{"href":895},[10,1512,1513,1514,247],{},"A jeśli podstawy są już na miejscu i chcesz zbudować opisaną wyżej aplikację od zera, krok po kroku i z publicznym deployem, zobacz ",[432,1515,1516],{"href":903},"kurs DevChallenge",[907,1518,1519],{},"html pre.shiki code .sV9Aq, html code.shiki .sV9Aq{--shiki-default:#7F848E;--shiki-default-font-style:italic}html pre.shiki code .seHd6, html code.shiki .seHd6{--shiki-default:#C678DD}html pre.shiki code .sVbv2, html code.shiki .sVbv2{--shiki-default:#61AFEF}html pre.shiki code .sn6KH, html code.shiki .sn6KH{--shiki-default:#ABB2BF}html pre.shiki code .s_ZVi, html code.shiki .s_ZVi{--shiki-default:#E06C75;--shiki-default-font-style:italic}html pre.shiki code .sU0A5, html code.shiki .sU0A5{--shiki-default:#E5C07B}html pre.shiki code .sjrmR, html code.shiki .sjrmR{--shiki-default:#56B6C2}html pre.shiki code .sVyAn, html code.shiki .sVyAn{--shiki-default:#E06C75}html pre.shiki code .sVC51, html code.shiki .sVC51{--shiki-default:#D19A66}html pre.shiki code .subq3, html code.shiki .subq3{--shiki-default:#98C379}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":118,"searchDepth":177,"depth":177,"links":1521},[1522,1523,1524,1525,1526,1527,1532],{"id":953,"depth":145,"text":954},{"id":994,"depth":145,"text":995},{"id":1004,"depth":145,"text":1005},{"id":1311,"depth":145,"text":1312},{"id":1436,"depth":145,"text":1437},{"id":850,"depth":145,"text":851,"children":1528},[1529,1530,1531],{"id":1477,"depth":177,"text":1478},{"id":1484,"depth":177,"text":1485},{"id":1495,"depth":177,"text":1496},{"id":1502,"depth":145,"text":1503},"2026-07-17","Jak zostać fullstack developerem w dobie AI? Ścieżka od HTML po deploy i nauka, w której analiza kodu bije wkuwanie składni.",{},"8 min",{"title":945,"description":1534},{"loc":672},"blog\u002Fprogramowanie\u002Ffullstack-developer-w-dobie-ai","DT0lCAwR8AMwmo8SP-Ka-FfoW4sD8M2Dj4kGI1JZCng",{"id":1542,"title":1543,"body":1544,"category":930,"cover":931,"date":1854,"description":1855,"extension":934,"meta":1856,"navigation":231,"path":434,"readingTime":1857,"seo":1858,"sitemap":1859,"stem":1860,"__hash__":1861},"blog\u002Fblog\u002Fprogramowanie\u002Fjak-myslec-jak-programista.md","Jak myśleć jak programista przed napisaniem kodu",{"type":7,"value":1545,"toc":1842},[1546,1549,1553,1556,1559,1563,1566,1583,1586,1590,1593,1760,1763,1767,1770,1796,1798,1802,1805,1809,1812,1816,1821,1825,1833,1839],[10,1547,1548],{},"Znasz już pętle, zmienne i funkcje. Otwierasz zadanie, patrzysz w pusty edytor i nic. Składnia jest, pomysłu nie ma. To nie brak talentu, tylko brak umiejętności, o której kursy mówią rzadko: myślenia jak programista. Da się ją wyćwiczyć, a trening zaczyna się przed napisaniem pierwszej linijki, nie po niej.",[14,1550,1552],{"id":1551},"zły-nawyk-numer-jeden-kodowanie-od-razu","Zły nawyk numer jeden: kodowanie od razu",[10,1554,1555],{},"Błędne podejście wygląda zawsze podobnie: przeczytaj zadanie i zacznij pisać, licząc, że rozwiązanie wyklaruje się w trakcie. Przy zadaniach szkolnych to przechodzi i właśnie dlatego tyle osób w ten nawyk wierzy. Przy pierwszym poważniejszym problemie kod rośnie we wszystkie strony i po godzinie nie wiadomo, co jest częścią rozwiązania, a co przypadkowym eksperymentem.",[10,1557,1558],{},"Komputer jest bowiem skrajnie dosłowny. Nie domyśli się, nie przeczyta intencji, nie pominie kroku, który „przecież jest oczywisty\". Tłumacząc komuś drogę do kuchni, też nie powiesz po prostu „zrób herbatę\", tylko: zagotuj wodę, włóż torebkę do kubka, zalej, poczekaj, wyjmij. Każdy krok prosty i jednoznaczny. Praca programisty polega więc mniej na pisaniu, a bardziej na myśleniu tak precyzyjnym, że kod staje się formalnością. Zobacz to na przykładzie.",[14,1560,1562],{"id":1561},"najpierw-po-polsku-dopiero-potem-w-kodzie","Najpierw po polsku, dopiero potem w kodzie",[10,1564,1565],{},"Zadanie brzmi: znajdź najwyższą ocenę na liście. Zanim powstaje choćby linijka kodu, rozwiązanie rozpisuje się po ludzku:",[22,1567,1568,1571,1574,1577,1580],{},[25,1569,1570],{},"przejrzenie ocen po kolei,",[25,1572,1573],{},"zapamiętanie „najlepszej jak dotąd\",",[25,1575,1576],{},"przy każdej kolejnej sprawdzenie, czy bije zapamiętaną,",[25,1578,1579],{},"jeśli tak, podmiana zapamiętanej,",[25,1581,1582],{},"na końcu zapamiętana wartość to odpowiedź.",[10,1584,1585],{},"Taki plan to pseudokod, czyli język, który rozumie człowiek, a nie komputer. Składni jeszcze nie ma, a problem jest właściwie rozwiązany. Została tylko translacja.",[14,1587,1589],{"id":1588},"translacja-czyli-najmniej-trudna-część","Translacja, czyli najmniej trudna część",[10,1591,1592],{},"Krok po kroku plan zamienia się w kod niemal jeden do jednego:",[113,1594,1596],{"className":115,"code":1595,"language":117,"meta":118,"style":118},"const grades = [3, 5, 2, 4, 5, 1];\n\nlet best = grades[0];           \u002F\u002F najlepsza jak dotąd\n\nfor (const grade of grades) {   \u002F\u002F przejrzyj wszystkie po kolei\n  if (grade > best) {           \u002F\u002F czy bije zapamiętaną?\n    best = grade;               \u002F\u002F jeśli tak, podmień\n  }\n}\n\nconsole.log(best); \u002F\u002F 5\n",[120,1597,1598,1639,1643,1666,1670,1693,1713,1728,1732,1737,1741],{"__ignoreMap":118},[123,1599,1600,1602,1605,1607,1610,1613,1615,1618,1620,1623,1625,1628,1630,1632,1634,1637],{"class":125,"line":126},[123,1601,130],{"class":129},[123,1603,1604],{"class":133}," grades",[123,1606,138],{"class":137},[123,1608,1609],{"class":141}," [",[123,1611,1612],{"class":170},"3",[123,1614,162],{"class":141},[123,1616,1617],{"class":170},"5",[123,1619,162],{"class":141},[123,1621,1622],{"class":170},"2",[123,1624,162],{"class":141},[123,1626,1627],{"class":170},"4",[123,1629,162],{"class":141},[123,1631,1617],{"class":170},[123,1633,162],{"class":141},[123,1635,1636],{"class":170},"1",[123,1638,225],{"class":141},[123,1640,1641],{"class":125,"line":145},[123,1642,232],{"emptyLinePlaceholder":231},[123,1644,1645,1648,1651,1653,1655,1658,1660,1663],{"class":125,"line":177},[123,1646,1647],{"class":129},"let",[123,1649,1650],{"class":151}," best",[123,1652,138],{"class":137},[123,1654,1604],{"class":151},[123,1656,1657],{"class":141},"[",[123,1659,327],{"class":170},[123,1661,1662],{"class":141},"];           ",[123,1664,1665],{"class":386},"\u002F\u002F najlepsza jak dotąd\n",[123,1667,1668],{"class":125,"line":200},[123,1669,232],{"emptyLinePlaceholder":231},[123,1671,1672,1675,1677,1679,1682,1685,1687,1690],{"class":125,"line":222},[123,1673,1674],{"class":129},"for",[123,1676,1113],{"class":141},[123,1678,130],{"class":129},[123,1680,1681],{"class":133}," grade",[123,1683,1684],{"class":129}," of",[123,1686,1604],{"class":151},[123,1688,1689],{"class":141},") {   ",[123,1691,1692],{"class":386},"\u002F\u002F przejrzyj wszystkie po kolei\n",[123,1694,1695,1697,1699,1702,1705,1707,1710],{"class":125,"line":228},[123,1696,1155],{"class":129},[123,1698,1113],{"class":141},[123,1700,1701],{"class":151},"grade",[123,1703,1704],{"class":137}," >",[123,1706,1650],{"class":151},[123,1708,1709],{"class":141},") {           ",[123,1711,1712],{"class":386},"\u002F\u002F czy bije zapamiętaną?\n",[123,1714,1715,1718,1720,1722,1725],{"class":125,"line":235},[123,1716,1717],{"class":151},"    best",[123,1719,138],{"class":137},[123,1721,1681],{"class":151},[123,1723,1724],{"class":141},";               ",[123,1726,1727],{"class":386},"\u002F\u002F jeśli tak, podmień\n",[123,1729,1730],{"class":125,"line":283},[123,1731,1219],{"class":141},[123,1733,1734],{"class":125,"line":332},[123,1735,1736],{"class":141},"}\n",[123,1738,1739],{"class":125,"line":337},[123,1740,232],{"emptyLinePlaceholder":231},[123,1742,1743,1745,1747,1749,1751,1754,1757],{"class":125,"line":383},[123,1744,340],{"class":133},[123,1746,247],{"class":141},[123,1748,345],{"class":250},[123,1750,348],{"class":141},[123,1752,1753],{"class":151},"best",[123,1755,1756],{"class":141},"); ",[123,1758,1759],{"class":386},"\u002F\u002F 5\n",[10,1761,1762],{},"Każdy komentarz to jeden punkt z listy wyżej. Trudne było myślenie, nie pisanie, i dlatego te same kroki zapisze się prawie tak samo w Pythonie czy w Javie: język schodzi na drugi plan, gdy kroki są gotowe.",[14,1764,1766],{"id":1765},"jak-to-trenować-i-co-psuje-trening","Jak to trenować i co psuje trening",[10,1768,1769],{},"Sam trening jest prosty: przed każdym zadaniem rozpisz rozwiązanie po polsku, zanim otworzysz edytor. Na początku kosztuje to pięć minut dłużej, po kilku tygodniach zaczyna działać samo. Po drodze czają się cztery pułapki:",[57,1771,1772,1778,1784,1790],{},[25,1773,1774,1777],{},[62,1775,1776],{},"Kod przed zrozumieniem."," Rozwiązanie, którego nie da się opisać po polsku, nie zamieni się w działający kod. Najpierw plan, potem składnia.",[25,1779,1780,1783],{},[62,1781,1782],{},"Wszystko naraz."," Mózg nie trzyma całego programu w głowie. Małe kroki, testowane po kawałku.",[25,1785,1786,1789],{},[62,1787,1788],{},"Panika na widok błędu."," Komunikat błędu to wskazówka, nie kara. Spokojne czytanie błędów to osobna umiejętność i trenuje się ją jak każdą inną.",[25,1791,1792,1795],{},[62,1793,1794],{},"Kopiuj-wklej bez „dlaczego\"."," Kod z internetu albo od AI potrafi zadziałać. Ale przy pierwszej zmianie zostaje człowiek sam z fragmentem, którego nie rozumie. Działający kod bez zrozumienia to pożyczka oddawana z odsetkami.",[14,1797,851],{"id":850},[853,1799,1801],{"id":1800},"czy-trzeba-dobrze-znać-matematykę-żeby-programować","Czy trzeba dobrze znać matematykę, żeby programować?",[10,1803,1804],{},"Nie. W większości programowania wystarcza logiczne myślenie i cierpliwość. Zaawansowana matematyka przydaje się w konkretnych dziedzinach, jak grafika czy AI, ale start jej nie wymaga. Wspólna jest metoda: rozbijanie problemu na kroki.",[853,1806,1808],{"id":1807},"ile-trwa-wyrobienie-tego-nawyku","Ile trwa wyrobienie tego nawyku?",[10,1810,1811],{},"Pierwsza różnica widać po kilku tygodniach regularnego rozwiązywania małych zadań. Z czasem rozbijanie problemu staje się odruchem, jak przy jeździe na rowerze: na początku sztywno i wolno, potem bez zastanawiania.",[853,1813,1815],{"id":1814},"od-czego-zacząć-trening","Od czego zacząć trening?",[10,1817,1818,1819,247],{},"Od jednego gestu: przed napisaniem kodu rozpisanie rozwiązania po polsku, choćby w trzech punktach. Ten nawyk robi więcej niż dziesięć poradników o składni. Szerszy plan na pierwsze tygodnie opisuje artykuł ",[432,1820,1492],{"href":1491},[14,1822,1824],{"id":1823},"trenuj-to-na-realnych-problemach","Trenuj to na realnych problemach",[10,1826,1827,1828,892,1830,1832],{},"Na zajęciach nie zaczynamy od wkuwania składni, tylko od rozbijania problemów: najpierw po polsku, potem w kodzie, na projektach i z AI używanym z głową. Zobacz, jak wygląda ",[432,1829,891],{"href":890},[432,1831,896],{"href":895}," i zacznij od dobrego fundamentu.",[10,1834,1835,1836,1838],{},"A gdy podstawy siedzą już mocno, to myślenie ćwiczy się najlepiej na prawdziwym produkcie: w ",[432,1837,904],{"href":903}," cała aplikacja z AI rozbija się na kroki, od frontendu po publiczny deploy.",[907,1840,1841],{},"html pre.shiki code .seHd6, html code.shiki .seHd6{--shiki-default:#C678DD}html pre.shiki code .sU0A5, html code.shiki .sU0A5{--shiki-default:#E5C07B}html pre.shiki code .sjrmR, html code.shiki .sjrmR{--shiki-default:#56B6C2}html pre.shiki code .sn6KH, html code.shiki .sn6KH{--shiki-default:#ABB2BF}html pre.shiki code .sVC51, html code.shiki .sVC51{--shiki-default:#D19A66}html pre.shiki code .sVyAn, html code.shiki .sVyAn{--shiki-default:#E06C75}html pre.shiki code .sV9Aq, html code.shiki .sV9Aq{--shiki-default:#7F848E;--shiki-default-font-style:italic}html pre.shiki code .sVbv2, html code.shiki .sVbv2{--shiki-default:#61AFEF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":118,"searchDepth":177,"depth":177,"links":1843},[1844,1845,1846,1847,1848,1853],{"id":1551,"depth":145,"text":1552},{"id":1561,"depth":145,"text":1562},{"id":1588,"depth":145,"text":1589},{"id":1765,"depth":145,"text":1766},{"id":850,"depth":145,"text":851,"children":1849},[1850,1851,1852],{"id":1800,"depth":177,"text":1801},{"id":1807,"depth":177,"text":1808},{"id":1814,"depth":177,"text":1815},{"id":1823,"depth":145,"text":1824},"2026-07-10","Jak myśleć jak programista? Rozbijanie problemu na kroki, pseudokod i nawyki, dzięki którym kod staje się formalnością. Praktyczny przewodnik.",{},"4 min",{"title":1543,"description":1855},{"loc":434},"blog\u002Fprogramowanie\u002Fjak-myslec-jak-programista","h2QvXvDBSwN7iLAWWaCpG2wyg0JmAUonlVSNMnI59Ec",1785459976730]