[{"data":1,"prerenderedAt":1711},["ShallowReactive",2],{"blog-\u002Fblog\u002Fmatematyka\u002Fjak-nauczyc-sie-matematyki":3,"blog-others-\u002Fblog\u002Fmatematyka\u002Fjak-nauczyc-sie-matematyki":193},{"id":4,"title":5,"body":6,"category":180,"cover":181,"date":182,"description":183,"extension":184,"meta":185,"navigation":186,"path":187,"readingTime":188,"seo":189,"sitemap":190,"stem":191,"__hash__":192},"blog\u002Fblog\u002Fmatematyka\u002Fjak-nauczyc-sie-matematyki.md","Jak nauczyć się matematyki: zrozumieć, nie wkuwać",{"type":7,"value":8,"toc":165},"minimark",[9,13,18,21,24,40,44,47,50,54,57,76,79,83,86,114,118,123,126,130,133,137,140,144,158],[10,11,12],"p",{},"„Nie mam umysłu ścisłego\". To zdanie słyszę zwykle tuż przed chwilą, w której okazuje się, że problemem nie był umysł, tylko jedna niezałatana dziura sprzed dwóch lat. Matematyka ma opinię przedmiotu, który się albo „czuje\", albo nie. A tymczasem to jeden z najbardziej przewidywalnych przedmiotów w szkole, pod warunkiem że uczy się jej tak, jak się buduje: od parteru w górę. Poniżej dwie metody nauki i powód, dla którego tylko jedna z nich działa.",[14,15,17],"h2",{"id":16},"dwie-metody-pamięć-kontra-rozumienie","Dwie metody: pamięć kontra rozumienie",[10,19,20],{},"Metodę pierwszą zna każdy: wkuć wzór, przećwiczyć dwa przykłady, modlić się, żeby na sprawdzianie było podobnie. Działa do pierwszego zadania, które wygląda inaczej niż te z podręcznika.",[10,22,23],{},"Metoda druga wygląda na wolniejszą: zrozumieć, skąd wzór się bierze, i przećwiczyć go na zadaniach od najprostszego w górę. Wolniejsza na starcie, ale odporna na zaskoczenia, bo zrozumiany wzór daje się odtworzyć nawet wtedy, gdy wyparował z pamięci.",[10,25,26,27,31,32,35,36,39],{},"Weź wzór skróconego mnożenia: ",[28,29,30],"code",{},"(a + b)² = a² + 2ab + b²",". Można go wykuć jak wierszyk. A można raz wymnożyć ",[28,33,34],{},"(a + b)(a + b)"," i zobaczyć, skąd bierze się to ",[28,37,38],{},"2ab",". Od tej chwili wzoru nie trzeba pamiętać, bo umie się go wyprowadzić. To ta sama szkoła myślenia, która stoi za programowaniem: rozbij problem na kroki i zrozum każdy, zamiast uczyć się gotowca.",[14,41,43],{"id":42},"matematyka-to-budynek-z-dziurawym-parterem","Matematyka to budynek z dziurawym parterem",[10,45,46],{},"Nie postawisz drugiego piętra na parterze z dziurami. Tematy w matematyce piętrzą się dokładnie tak samo: równania stoją na ułamkach, funkcje na równaniach, pochodne na funkcjach.",[10,48,49],{},"Dlatego „nie rozumiem funkcji\" prawie nigdy nie znaczy, że funkcje są za trudne. Znacznie częściej znaczy: dziura jest niżej, w przekształcaniu wyrażeń albo w ułamkach. Załatanie fundamentu sprawia, że „trudny\" temat nagle robi się zwykły. W tym tkwi sedno nauki matematyki: nie łatać objawów, tylko szukać dziury w fundamencie.",[14,51,53],{"id":52},"jak-uczyć-się-tematu-krok-po-kroku","Jak uczyć się tematu, krok po kroku",[10,55,56],{},"Każdy nowy temat rozkłada się na te same etapy:",[58,59,60,64,67,70,73],"ol",{},[61,62,63],"li",{},"ustalenie, na czym temat stoi,",[61,65,66],{},"załatanie braków, jeśli są,",[61,68,69],{},"prześledzenie, skąd bierze się wzór albo metoda,",[61,71,72],{},"kilka zadań od najprostszego do trudniejszego,",[61,74,75],{},"powrót po kilku dniach, żeby utrwalić.",[10,77,78],{},"Proste, ale wymaga cierpliwości na starcie. W zamian każdy kolejny temat wchodzi łatwiej, bo stoi na naprawionym fundamencie, a nie na pamięci krótkotrwałej.",[14,80,82],{"id":81},"gdzie-ta-nauka-się-psuje-okiem-nauczyciela","Gdzie ta nauka się psuje (okiem nauczyciela)",[10,84,85],{},"Cztery pomyłki wracają na korepetycjach jak bumerang:",[87,88,89,96,102,108],"ul",{},[61,90,91,95],{},[92,93,94],"strong",{},"Wzory na pamięć."," Pod presją egzaminu wykuć ulatuje. Zrozumiane daje się odtworzyć.",[61,97,98,101],{},[92,99,100],{},"Ignorowanie luk."," „Jakoś to przetrwam\" nie działa, bo brak wraca ze zdwojoną siłą przy trudniejszym temacie.",[61,103,104,107],{},[92,105,106],{},"Nauka przez czytanie."," Matematyki nie da się ogarnąć biernie. Bez zadań to oglądanie cudzych rozwiązań, nie trening.",[61,109,110,113],{},[92,111,112],{},"Zryw przed sprawdzianem."," Sześć godzin w noc przed testem przegrywa z dwudziestoma minutami dziennie przez tydzień.",[14,115,117],{"id":116},"najczęstsze-pytania","Najczęstsze pytania",[119,120,122],"h3",{"id":121},"czy-da-się-nadrobić-zaległości-z-matematyki","Czy da się nadrobić zaległości z matematyki?",[10,124,125],{},"Tak, i to niemal zawsze. Wystarczy cofnąć się do miejsca, w którym pojawiła się luka, i uzupełnić ją, zamiast walczyć z bieżącym, trudniejszym tematem. Uporządkowane fundamenty odblokowują resztę szybciej, niż się wydaje.",[119,127,129],{"id":128},"ile-czasu-zajmuje-nauka-matematyki-od-podstaw","Ile czasu zajmuje nauka matematyki od podstaw?",[10,131,132],{},"Zależy od skali luk i celu, ale pierwsze efekty przychodzą po kilku tygodniach regularnej pracy. Liczy się nie liczba godzin, tylko kierunek: od fundamentów w górę, nie chaotycznie.",[119,134,136],{"id":135},"od-czego-zacząć-naukę-matematyki","Od czego zacząć naukę matematyki?",[10,138,139],{},"Od uczciwej diagnozy: gdzie pojawiają się pierwsze potknięcia. Zwykle to ułamki i przekształcanie wyrażeń. Po uporządkowaniu tych dwóch tematów kolejne przestają być „za trudne\".",[14,141,143],{"id":142},"zrozumieć-nie-przetrwać","Zrozumieć, nie przetrwać",[10,145,146,147,152,153,157],{},"Na zajęciach pierwszy krok to znalezienie realnej luki, a potem odbudowa fundamentu tak, żeby kolejne tematy wchodziły same. Zobacz, jak wyglądają ",[148,149,151],"a",{"href":150},"\u002Fmatematyka","korepetycje z matematyki ze mną",", a przy celu egzaminacyjnym sprawdź, ",[148,154,156],{"href":155},"\u002Fblog\u002Fmatematyka\u002Fprzygotowanie-do-matury-z-matematyki","jak przygotować się do matury z matematyki",".",[10,159,160,164],{},[148,161,163],{"href":162},"\u002Fkontakt","Umów bezpłatną konsultację"," i zamień „nie rozumiem\" w „wiem, o co chodzi\".",{"title":166,"searchDepth":167,"depth":167,"links":168},"",3,[169,171,172,173,174,179],{"id":16,"depth":170,"text":17},2,{"id":42,"depth":170,"text":43},{"id":52,"depth":170,"text":53},{"id":81,"depth":170,"text":82},{"id":116,"depth":170,"text":117,"children":175},[176,177,178],{"id":121,"depth":167,"text":122},{"id":128,"depth":167,"text":129},{"id":135,"depth":167,"text":136},{"id":142,"depth":170,"text":143},"Matematyka",null,"2026-06-23","Jak nauczyć się matematyki, jeśli „nie masz umysłu ścisłego”? Dlaczego zrozumienie bije wkuwanie wzorów i jak nadrobić zaległości krok po kroku.","md",{},true,"\u002Fblog\u002Fmatematyka\u002Fjak-nauczyc-sie-matematyki","4 min",{"title":5,"description":183},{"loc":187},"blog\u002Fmatematyka\u002Fjak-nauczyc-sie-matematyki","P_yhCBPeI7ikWlxs5XsLbEU_PxbKk4Vi6tVucxFbITQ",[194,1113],{"id":195,"title":196,"body":197,"category":1103,"cover":181,"date":1104,"description":1105,"extension":184,"meta":1106,"navigation":186,"path":1107,"readingTime":1108,"seo":1109,"sitemap":1110,"stem":1111,"__hash__":1112},"blog\u002Fblog\u002Fprogramowanie\u002Fjak-zautomatyzowac-prace.md","Jak zautomatyzować pracę: 6 poziomów, od skryptu po AI",{"type":7,"value":198,"toc":1083},[199,202,206,209,229,232,236,239,242,256,259,263,266,286,289,293,296,566,569,580,583,588,599,604,620,623,627,630,638,645,649,660,664,675,678,682,685,688,694,701,704,708,719,723,734,737,741,744,747,753,756,762,765,769,780,784,795,798,802,805,811,814,820,823,827,838,842,858,861,865,868,920,923,927,938,942,953,956,960,963,983,986,990,993,1025,1027,1031,1034,1038,1041,1045,1048,1052,1055,1059,1071,1079],[10,200,201],{},"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,203,205],{"id":204},"krótka-odpowiedź","Krótka odpowiedź",[10,207,208],{},"Automatyzacja pracy ma sześć poziomów, od prostego skryptu po autonomiczny system:",[58,210,211,214,217,220,223,226],{},[61,212,213],{},"Skrypty i reguły: deterministyczna automatyzacja bez AI.",[61,215,216],{},"RPA: bot, który klika w interfejs jak człowiek.",[61,218,219],{},"Chat z AI: człowiek steruje, AI przyspiesza.",[61,221,222],{},"Automatyzacja workflow: n8n, Make, Zapier, z możliwością włożenia AI jako klocka.",[61,224,225],{},"Agent w IDE: AI sam planuje kroki, Ty zatwierdzasz je na bieżąco.",[61,227,228],{},"System agentowy: AI działa autonomicznie w tle, Ty zatwierdzasz gotowy wynik.",[10,230,231],{},"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,233,235],{"id":234},"dwa-światy-automatyzacji-przepis-i-kucharz","Dwa światy automatyzacji: przepis i kucharz",[10,237,238],{},"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,240,241],{},"Wszystkie narzędzia automatyzacji dzielą się na te dwa światy:",[87,243,244,250],{},[61,245,246,249],{},[92,247,248],{},"Przepis (bez AI):"," skrypty, RPA, n8n. Ty zapisujesz kroki, maszyna je powtarza. Raport wygląda za każdym razem identycznie.",[61,251,252,255],{},[92,253,254],{},"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,257,258],{},"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,260,262],{"id":261},"punkt-wyjścia-45-minut-ręcznej-roboty","Punkt wyjścia: 45 minut ręcznej roboty",[10,264,265],{},"Nasz proces w wersji ręcznej to sześć kroków:",[58,267,268,271,274,277,280,283],{},[61,269,270],{},"zaloguj się do panelu sklepu,",[61,272,273],{},"wyeksportuj zamówienia z ostatniego tygodnia do pliku,",[61,275,276],{},"wklej dane do arkusza,",[61,278,279],{},"policz sumę sprzedaży i liczbę zamówień,",[61,281,282],{},"dopisz dwa zdania podsumowania,",[61,284,285],{},"wyślij raport mailem do przełożonego.",[10,287,288],{},"Tych sześć kroków to poligon. Niżej widać, jak każdy poziom skraca tę listę i ile kosztuje to skrócenie.",[14,290,292],{"id":291},"poziom-1-skrypt-który-wysyła-raport-za-ciebie","Poziom 1: skrypt, który wysyła raport za Ciebie",[10,294,295],{},"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:",[297,298,302],"pre",{"className":299,"code":300,"language":301,"meta":166,"style":166},"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",[28,303,304,325,356,378,400,406,412,459,508,513,559],{"__ignoreMap":166},[305,306,309,313,317,321],"span",{"class":307,"line":308},"line",1,[305,310,312],{"class":311},"seHd6","const",[305,314,316],{"class":315},"sU0A5"," orders",[305,318,320],{"class":319},"sjrmR"," =",[305,322,324],{"class":323},"sn6KH"," [\n",[305,326,327,330,334,337,341,344,347,349,353],{"class":307,"line":170},[305,328,329],{"class":323},"  { ",[305,331,333],{"class":332},"sVyAn","status",[305,335,336],{"class":323},": ",[305,338,340],{"class":339},"subq3","'oplacone'",[305,342,343],{"class":323},", ",[305,345,346],{"class":332},"amount",[305,348,336],{"class":323},[305,350,352],{"class":351},"sVC51","120",[305,354,355],{"class":323}," },\n",[305,357,358,360,362,364,367,369,371,373,376],{"class":307,"line":167},[305,359,329],{"class":323},[305,361,333],{"class":332},[305,363,336],{"class":323},[305,365,366],{"class":339},"'anulowane'",[305,368,343],{"class":323},[305,370,346],{"class":332},[305,372,336],{"class":323},[305,374,375],{"class":351},"80",[305,377,355],{"class":323},[305,379,381,383,385,387,389,391,393,395,398],{"class":307,"line":380},4,[305,382,329],{"class":323},[305,384,333],{"class":332},[305,386,336],{"class":323},[305,388,340],{"class":339},[305,390,343],{"class":323},[305,392,346],{"class":332},[305,394,336],{"class":323},[305,396,397],{"class":351},"200",[305,399,355],{"class":323},[305,401,403],{"class":307,"line":402},5,[305,404,405],{"class":323},"];\n",[305,407,409],{"class":307,"line":408},6,[305,410,411],{"emptyLinePlaceholder":186},"\n",[305,413,415,417,420,422,424,426,430,433,437,440,443,446,448,450,453,456],{"class":307,"line":414},7,[305,416,312],{"class":311},[305,418,419],{"class":315}," paidOrders",[305,421,320],{"class":319},[305,423,316],{"class":315},[305,425,157],{"class":323},[305,427,429],{"class":428},"sVbv2","filter",[305,431,432],{"class":323},"((",[305,434,436],{"class":435},"s_ZVi","order",[305,438,439],{"class":323},") ",[305,441,442],{"class":311},"=>",[305,444,445],{"class":315}," order",[305,447,157],{"class":323},[305,449,333],{"class":332},[305,451,452],{"class":319}," ===",[305,454,455],{"class":339}," 'oplacone'",[305,457,458],{"class":323},");\n",[305,460,462,464,467,469,471,473,476,478,481,483,485,487,489,492,495,497,499,501,503,506],{"class":307,"line":461},8,[305,463,312],{"class":311},[305,465,466],{"class":315}," paidTotal",[305,468,320],{"class":319},[305,470,419],{"class":315},[305,472,157],{"class":323},[305,474,475],{"class":428},"reduce",[305,477,432],{"class":323},[305,479,480],{"class":435},"sum",[305,482,343],{"class":323},[305,484,436],{"class":435},[305,486,439],{"class":323},[305,488,442],{"class":311},[305,490,491],{"class":332}," sum",[305,493,494],{"class":319}," +",[305,496,445],{"class":315},[305,498,157],{"class":323},[305,500,346],{"class":332},[305,502,343],{"class":323},[305,504,505],{"class":351},"0",[305,507,458],{"class":323},[305,509,511],{"class":307,"line":510},9,[305,512,411],{"emptyLinePlaceholder":186},[305,514,516,519,521,524,527,530,533,536,539,542,544,547,549,552,554,557],{"class":307,"line":515},10,[305,517,518],{"class":315},"console",[305,520,157],{"class":323},[305,522,523],{"class":428},"log",[305,525,526],{"class":323},"(",[305,528,529],{"class":339},"`Sprzedaż: ",[305,531,532],{"class":311},"${",[305,534,535],{"class":332},"paidTotal",[305,537,538],{"class":311},"}",[305,540,541],{"class":339}," zł, zamówień: ",[305,543,532],{"class":311},[305,545,546],{"class":315},"paidOrders",[305,548,157],{"class":323},[305,550,551],{"class":332},"length",[305,553,538],{"class":311},[305,555,556],{"class":339},"`",[305,558,458],{"class":323},[305,560,562],{"class":307,"line":561},11,[305,563,565],{"class":564},"sV9Aq","\u002F\u002F Sprzedaż: 320 zł, zamówień: 2\n",[10,567,568],{},"Dołóż jedną linijkę w cron i raport wysyła się sam, w każdy poniedziałek o 8:00:",[297,570,574],{"className":571,"code":572,"language":573,"meta":166,"style":166},"language-cron shiki shiki-themes one-dark-pro","0 8 * * 1 node ~\u002Fraporty\u002Fraport.js\n","cron",[28,575,576],{"__ignoreMap":166},[305,577,578],{"class":307,"line":308},[305,579,572],{},[10,581,582],{},"Twoje 45 minut spada do zera.",[10,584,585],{},[92,586,587],{},"Zalety:",[87,589,590,593,596],{},[61,591,592],{},"stuprocentowa przewidywalność: te same dane dają ten sam wynik, zawsze,",[61,594,595],{},"praca bez nadzoru, w nocy i w weekendy, bez zmęczenia,",[61,597,598],{},"najniższy koszt utrzymania z całej drabiny.",[10,600,601],{},[92,602,603],{},"Wady:",[87,605,606,614,617],{},[61,607,608,609,613],{},"wymaga umiejętności zapisania kroków, czyli ",[148,610,612],{"href":611},"\u002Fblog\u002Fprogramowanie\u002Fjak-myslec-jak-programista","myślenia jak programista"," albo kogoś, kto to potrafi,",[61,615,616],{},"sztywność: robi dokładnie to, co zaplanowano, i nic ponad,",[61,618,619],{},"potrzebuje danych dostępnych jako plik albo API.",[10,621,622],{},"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,624,626],{"id":625},"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,628,629],{},"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:",[297,631,636],{"className":632,"code":634,"language":635,"meta":166},[633],"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",[28,637,634],{"__ignoreMap":166},[10,639,640,641,644],{},"Skrypt z poziomu 1 czyta potem ",[28,642,643],{},"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,646,647],{},[92,648,587],{},[87,650,651,654,657],{},[61,652,653],{},"działa z systemami bez API i bez eksportu, często to jedyna opcja,",[61,655,656],{},"nie ingeruje w stary system, bo klika z zewnątrz,",[61,658,659],{},"buduje się nagrywaniem, bez programowania.",[10,661,662],{},[92,663,603],{},[87,665,666,669,672],{},[61,667,668],{},"kruche: przesunięty przycisk albo zmieniona etykieta i automat wywraca się w poniedziałek rano,",[61,670,671],{},"działa w tempie człowieka, bo dosłownie klika,",[61,673,674],{},"trudne do testowania i wersjonowania.",[10,676,677],{},"Dlatego RPA traktuj jako ratunek, nie fundament: pomost do skryptu tam, gdzie nie ma API. Im mniej kliknięć w procesie, tym stabilniej.",[14,679,681],{"id":680},"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,683,684],{},"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,686,687],{},"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:",[297,689,692],{"className":690,"code":691,"language":635,"meta":166},[633],"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",[28,693,691],{"__ignoreMap":166},[10,695,696],{},[697,698],"img",{"alt":699,"src":700},"Chat AI podsumowujący tygodniowe dane sprzedażowe","\u002Fimg\u002Fblog\u002Fjak-zautomatyzowac-prace-chat.png",[10,702,703],{},"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,705,706],{},[92,707,587],{},[87,709,710,713,716],{},[61,711,712],{},"zero konfiguracji: działa od razu i na każdy temat,",[61,714,715],{},"radzi sobie z osądem i językiem, czyli tym, czego skrypt nie ogarnie,",[61,717,718],{},"świetny poligon: zanim zautomatyzujesz, sprawdzisz, jakie pytania ma stawiać automat.",[10,720,721],{},[92,722,603],{},[87,724,725,728,731],{},[61,726,727],{},"to nie automatyzacja, tylko pętla kopiuj-wklej-sprawdź,",[61,729,730],{},"wyniki bywają niespójne między uruchomieniami,",[61,732,733],{},"każdą odpowiedź trzeba zweryfikować, halucynacje nie znikają.",[10,735,736],{},"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,738,740],{"id":739},"poziom-4-n8n-czyli-przepis-który-zatrudnia-kucharza","Poziom 4: n8n, czyli przepis, który zatrudnia kucharza",[10,742,743],{},"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,745,746],{},"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:",[297,748,751],{"className":749,"code":750,"language":635,"meta":166},[633],"[Cron: pon. 8:00] → [Sklep: zamówienia z API] → [Google Sheets: dopisz wiersze]\n    → [AI: podsumowanie] → [Gmail: raport do szefa]\n",[28,752,750],{"__ignoreMap":166},[10,754,755],{},"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,757,758],{},[697,759],{"alt":760,"src":761},"Workflow cotygodniowego raportu sprzedaży w n8n","\u002Fimg\u002Fblog\u002Fjak-zautomatyzowac-prace-n8n.png",[10,763,764],{},"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,766,767],{},[92,768,587],{},[87,770,771,774,777],{},[61,772,773],{},"zero kodu i gotowe integracje z setkami aplikacji,",[61,775,776],{},"klocek AI w środku workflow: automatyczne wnioski bez ręcznego wklejania,",[61,778,779],{},"historia uruchomień i alerty o awariach są z pudełka.",[10,781,782],{},[92,783,603],{},[87,785,786,789,792],{},[61,787,788],{},"zawiła logika zamienia diagram w spaghetti i wtedy kod znów wygrywa,",[61,790,791],{},"uzależnienie od platformy: limity, cennik albo self-hosting do ogarnięcia (n8n),",[61,793,794],{},"testowanie i wersjonowanie ubogie w porównaniu z kodem.",[10,796,797],{},"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,799,801],{"id":800},"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,803,804],{},"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:",[297,806,809],{"className":807,"code":808,"language":635,"meta":166},[633],"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",[28,810,808],{"__ignoreMap":166},[10,812,813],{},"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,815,816],{},[697,817],{"alt":818,"src":819},"Agent w IDE proponujący zmiany w skrypcie raportu","\u002Fimg\u002Fblog\u002Fjak-zautomatyzowac-prace-agent-ide.png",[10,821,822],{},"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,824,825],{},[92,826,587],{},[87,828,829,832,835],{},[61,830,831],{},"każdy krok widać i można przerwać, nadzór na żywo,",[61,833,834],{},"budowa i utrzymanie automatów z poziomów 1-4 przyspiesza z godzin do minut,",[61,836,837],{},"przy okazji nauka przez patrzenie, jak agent pracuje.",[10,839,840],{},[92,841,603],{},[87,843,844,852,855],{},[61,845,846,847,851],{},"trzeba umieć ocenić to, co wyprodukował: wartość przenosi się z pisania kodu na jego czytanie (o czym pisałem w artykule o ",[148,848,850],{"href":849},"\u002Fblog\u002Fprogramowanie\u002Ffullstack-developer-w-dobie-ai","fullstacku w dobie AI","),",[61,853,854],{},"nie działa w tle: przyspiesza Twoją pracę, ale nie zastępuje zaplanowanego automatu,",[61,856,857],{},"bez jasnych granic potrafi przesadzić z zakresem zmian.",[10,859,860],{},"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,862,864],{"id":863},"poziom-6-system-agentowy-czyli-raport-który-sam-stawia-pytania","Poziom 6: system agentowy, czyli raport, który sam stawia pytania",[10,866,867],{},"Na szczycie drabiny nie dajesz już kroków, tylko cel, narzędzia i granice:",[297,869,873],{"className":870,"code":871,"language":872,"meta":166,"style":166},"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",[28,874,875,880,885,890,895,900,905,910,915],{"__ignoreMap":166},[305,876,877],{"class":307,"line":308},[305,878,879],{},"cel: co poniedziałek o 8:00 przygotuj raport sprzedaży z minionego tygodnia\n",[305,881,882],{"class":307,"line":170},[305,883,884],{},"narzędzia:\n",[305,886,887],{"class":307,"line":167},[305,888,889],{},"  - API sklepu (tylko odczyt zamówień)\n",[305,891,892],{"class":307,"line":380},[305,893,894],{},"  - folder raporty\u002F (odczyt eksportów z magazynu)\n",[305,896,897],{"class":307,"line":402},[305,898,899],{},"  - poczta: wyłącznie drafty, wysyłka po mojej akceptacji\n",[305,901,902],{"class":307,"line":408},[305,903,904],{},"granice:\n",[305,906,907],{"class":307,"line":414},[305,908,909],{},"  - nic nie wysyłaj bez akceptacji\n",[305,911,912],{"class":307,"line":461},[305,913,914],{},"  - gdy brakuje danych, przerwij i zgłoś problem\n",[305,916,917],{"class":307,"line":510},[305,918,919],{},"anomalie: odchylenie powyżej 20% od średniej z 4 ostatnich tygodni\n",[10,921,922],{},"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,924,925],{},[92,926,587],{},[87,928,929,932,935],{},[61,930,931],{},"osąd w każdej iteracji: zauważa to, o co nikt go nie pytał,",[61,933,934],{},"obsługuje zadania, których nie da się zapisać krokami,",[61,936,937],{},"cel zamiast instrukcji, najbliżej zatrudnienia pracownika.",[10,939,940],{},[92,941,603],{},[87,943,944,947,950],{},[61,945,946],{},"wynik niegwarantowany: potrzebuje nadzoru, limitów i ludzkiej akceptacji,",[61,948,949],{},"koszt błędu rośnie razem z uprawnieniami (poczta, płatności, dane klientów),",[61,951,952],{},"najtrudniejszy do przewidzenia: zmienne zachowanie i zmienne koszty.",[10,954,955],{},"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,957,959],{"id":958},"na-którym-poziomie-się-zatrzymać","Na którym poziomie się zatrzymać?",[10,961,962],{},"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:",[58,964,965,971,977],{},[61,966,967,970],{},[92,968,969],{},"Czy potrafię zapisać kroki dokładnie?"," Tak: poziomy 1, 2, 4. Nie: 3, 5, 6.",[61,972,973,976],{},[92,974,975],{},"Jaki jest koszt błędu?"," Wysoki (faktury, dane klientów, płatności): zostań przy przepisie albo dodaj ludzką akceptację przed wysyłką.",[61,978,979,982],{},[92,980,981],{},"Jak często to robię?"," Codziennie: automatyzuj. Raz na kwartał: czasem taniej zrobić ręcznie niż budować i utrzymywać automat.",[10,984,985],{},"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,987,989],{"id":988},"gdzie-automatyzacje-się-psują","Gdzie automatyzacje się psują",[10,991,992],{},"Automatyzacje psują się w przewidywalnych miejscach:",[87,994,995,1001,1007,1013,1019],{},[61,996,997,1000],{},[92,998,999],{},"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.",[61,1002,1003,1006],{},[92,1004,1005],{},"Automatyzowanie chaosu."," Zautomatyzowany zły proces to zły proces, który działa szybciej. Najpierw uprość, dopiero potem automatyzuj.",[61,1008,1009,1012],{},[92,1010,1011],{},"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.",[61,1014,1015,1018],{},[92,1016,1017],{},"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.",[61,1020,1021,1024],{},[92,1022,1023],{},"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,1026,117],{"id":116},[119,1028,1030],{"id":1029},"czy-trzeba-umieć-programować-żeby-automatyzować-pracę","Czy trzeba umieć programować, żeby automatyzować pracę?",[10,1032,1033],{},"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.",[119,1035,1037],{"id":1036},"czym-różni-się-rpa-od-agenta-ai","Czym różni się RPA od agenta AI?",[10,1039,1040],{},"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.",[119,1042,1044],{"id":1043},"czym-różni-się-agent-w-ide-od-systemu-agentowego","Czym różni się agent w IDE od systemu agentowego?",[10,1046,1047],{},"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.",[119,1049,1051],{"id":1050},"od-czego-zacząć-automatyzację-własnej-pracy","Od czego zacząć automatyzację własnej pracy?",[10,1053,1054],{},"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,1056,1058],{"id":1057},"zautomatyzuj-coś-w-ten-poniedziałek","Zautomatyzuj coś w ten poniedziałek",[10,1060,1061,1062,1066,1067,1070],{},"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 ",[148,1063,1065],{"href":1064},"\u002Fprogramowanie","nauka programowania ze mną",", albo ",[148,1068,1069],{"href":162},"umów bezpłatną konsultację"," i opowiedz, który proces chcesz zautomatyzować: wspólnie znajdziemy najprostszy sposób.",[10,1072,1073,1074,1078],{},"A jeśli chcesz zobaczyć automatyzację w praktyce, w ",[148,1075,1077],{"href":1076},"\u002Fkursy","kursie DevChallenge"," budujesz i wdrażasz własną aplikację z AI: od frontendu, przez backend i integracje, po publiczny deploy.",[1080,1081,1082],"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":166,"searchDepth":167,"depth":167,"links":1084},[1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1102],{"id":204,"depth":170,"text":205},{"id":234,"depth":170,"text":235},{"id":261,"depth":170,"text":262},{"id":291,"depth":170,"text":292},{"id":625,"depth":170,"text":626},{"id":680,"depth":170,"text":681},{"id":739,"depth":170,"text":740},{"id":800,"depth":170,"text":801},{"id":863,"depth":170,"text":864},{"id":958,"depth":170,"text":959},{"id":988,"depth":170,"text":989},{"id":116,"depth":170,"text":117,"children":1097},[1098,1099,1100,1101],{"id":1029,"depth":167,"text":1030},{"id":1036,"depth":167,"text":1037},{"id":1043,"depth":167,"text":1044},{"id":1050,"depth":167,"text":1051},{"id":1057,"depth":170,"text":1058},"AI & Programowanie","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ę.",{},"\u002Fblog\u002Fprogramowanie\u002Fjak-zautomatyzowac-prace","12 min",{"title":196,"description":1105},{"loc":1107},"blog\u002Fprogramowanie\u002Fjak-zautomatyzowac-prace","6qxUp5gnGNxaORxoRvBbpYhxhDkCt4vtD6UtAoWI2kY",{"id":1114,"title":1115,"body":1116,"category":1103,"cover":181,"date":1703,"description":1704,"extension":184,"meta":1705,"navigation":186,"path":849,"readingTime":1706,"seo":1707,"sitemap":1708,"stem":1709,"__hash__":1710},"blog\u002Fblog\u002Fprogramowanie\u002Ffullstack-developer-w-dobie-ai.md","Fullstack developer w erze AI: czego uczyć się po kolei",{"type":7,"value":1117,"toc":1690},[1118,1121,1125,1128,1131,1162,1166,1169,1172,1176,1179,1233,1240,1250,1253,1457,1470,1479,1483,1486,1558,1563,1566,1592,1595,1601,1604,1608,1611,1643,1645,1649,1652,1656,1663,1667,1670,1674,1681,1687],[10,1119,1120],{},"„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,1122,1124],{"id":1123},"co-ai-naprawdę-zmieniło","Co AI naprawdę zmieniło",[10,1126,1127],{},"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,1129,1130],{},"Konsekwencje są trzy i wszystkie konkretne:",[87,1132,1133,1150,1156],{},[61,1134,1135,1138,1139,1142,1143,1146,1147,1149],{},[92,1136,1137],{},"Składnia przestała być walutą."," Nie trzeba pamiętać dokładnej formy ",[28,1140,1141],{},"map()"," ani zapisu zapytania SQL. Trzeba wiedzieć, czym ",[28,1144,1145],{},"map"," różni się od ",[28,1148,429],{}," i kiedy które użyć.",[61,1151,1152,1155],{},[92,1153,1154],{},"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.",[61,1157,1158,1161],{},[92,1159,1160],{},"Debugowanie bije zapamiętywanie."," Błąd w wygenerowanym kodzie znajdziesz tylko wtedy, gdy rozumiesz, jak dane przepływają przez program.",[14,1163,1165],{"id":1164},"dlaczego-akurat-fullstack","Dlaczego akurat fullstack",[10,1167,1168],{},"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,1170,1171],{},"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,1173,1175],{"id":1174},"ścieżka-osiem-warstw-jeden-projekt","Ścieżka: osiem warstw, jeden projekt",[10,1177,1178],{},"Kolejność nie jest przypadkowa. Każdy etap stoi na poprzednim i kończy się małym projektem:",[58,1180,1181,1187,1197,1203,1209,1215,1221,1227],{},[61,1182,1183,1186],{},[92,1184,1185],{},"HTML + CSS."," Szkielet i wygląd strony: semantyczne tagi, formularze, flexbox i grid. Projekt: własna strona-wizytówka.",[61,1188,1189,1192,1193,1196],{},[92,1190,1191],{},"JavaScript."," Pierwszy prawdziwy język: zmienne, funkcje, metody tablic, asynchroniczność, pobieranie danych z API. Tu trenuje się też ",[148,1194,1195],{"href":611},"myślenie jak programista",". Projekt: lista zadań albo quiz w przeglądarce.",[61,1198,1199,1202],{},[92,1200,1201],{},"Git."," Z AI eksperymentuje się dużo, więc trzeba umieć wrócić do wersji, która działała.",[61,1204,1205,1208],{},[92,1206,1207],{},"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.",[61,1210,1211,1214],{},[92,1212,1213],{},"TypeScript."," Typy to dokumentacja czytelna i dla człowieka, i dla AI: wygenerowany kod z typami znacznie trudniej zepsuć bez wykrycia.",[61,1216,1217,1220],{},[92,1218,1219],{},"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.",[61,1222,1223,1226],{},[92,1224,1225],{},"Baza danych."," SQL, na przykład PostgreSQL, plus ORM łączący bazę z kodem: tabele, relacje, zapytania.",[61,1228,1229,1232],{},[92,1230,1231],{},"Deploy."," Vercel albo własny serwer, zmienne środowiskowe, domena. Aplikacja istnieje dopiero wtedy, gdy ktoś może z niej skorzystać.",[10,1234,1235,1236,1239],{},"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 ",[148,1237,1238],{"href":1076},"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,1241,1242,1246],{},[697,1243],{"alt":1244,"src":1245},"Kreator wyzwania w aplikacji z kursu DevChallenge - temat, poziom i typy pytań","\u002Fimg\u002Fcourse\u002Fcreator-poster.jpg",[1247,1248,1249],"em",{},"Kreator wyzwania: użytkownik wybiera temat, poziom i typy pytań, a resztę robi pipeline budowany warstwa po warstwie.",[10,1251,1252],{},"A serce backendu takiej aplikacji to w Nitrze kilkanaście linijek i jeden server route:",[297,1254,1258],{"className":1255,"code":1256,"language":1257,"meta":166,"style":166},"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",[28,1259,1260,1265,1294,1317,1321,1353,1385,1390,1394,1427,1431,1436,1451],{"__ignoreMap":166},[305,1261,1262],{"class":307,"line":308},[305,1263,1264],{"class":564},"\u002F\u002F server\u002Fapi\u002Fscore.post.ts\n",[305,1266,1267,1270,1273,1276,1278,1281,1284,1287,1289,1291],{"class":307,"line":170},[305,1268,1269],{"class":311},"export",[305,1271,1272],{"class":311}," default",[305,1274,1275],{"class":428}," defineEventHandler",[305,1277,526],{"class":323},[305,1279,1280],{"class":311},"async",[305,1282,1283],{"class":323}," (",[305,1285,1286],{"class":435},"event",[305,1288,439],{"class":323},[305,1290,442],{"class":311},[305,1292,1293],{"class":323}," {\n",[305,1295,1296,1299,1302,1304,1307,1310,1312,1314],{"class":307,"line":167},[305,1297,1298],{"class":311},"  const",[305,1300,1301],{"class":315}," body",[305,1303,320],{"class":319},[305,1305,1306],{"class":311}," await",[305,1308,1309],{"class":428}," readBody",[305,1311,526],{"class":323},[305,1313,1286],{"class":332},[305,1315,1316],{"class":323},")\n",[305,1318,1319],{"class":307,"line":380},[305,1320,411],{"emptyLinePlaceholder":186},[305,1322,1323,1326,1328,1331,1334,1336,1339,1341,1344,1347,1350],{"class":307,"line":402},[305,1324,1325],{"class":311},"  if",[305,1327,1283],{"class":323},[305,1329,1330],{"class":319},"!",[305,1332,1333],{"class":315},"Array",[305,1335,157],{"class":323},[305,1337,1338],{"class":428},"isArray",[305,1340,526],{"class":323},[305,1342,1343],{"class":315},"body",[305,1345,1346],{"class":323},"?.",[305,1348,1349],{"class":332},"answers",[305,1351,1352],{"class":323},")) {\n",[305,1354,1355,1358,1361,1364,1367,1369,1372,1374,1377,1379,1382],{"class":307,"line":408},[305,1356,1357],{"class":311},"    throw",[305,1359,1360],{"class":428}," createError",[305,1362,1363],{"class":323},"({ ",[305,1365,1366],{"class":332},"statusCode",[305,1368,336],{"class":323},[305,1370,1371],{"class":351},"400",[305,1373,343],{"class":323},[305,1375,1376],{"class":332},"statusMessage",[305,1378,336],{"class":323},[305,1380,1381],{"class":339},"'Brak odpowiedzi'",[305,1383,1384],{"class":323}," })\n",[305,1386,1387],{"class":307,"line":414},[305,1388,1389],{"class":323},"  }\n",[305,1391,1392],{"class":307,"line":461},[305,1393,411],{"emptyLinePlaceholder":186},[305,1395,1396,1398,1401,1403,1405,1408,1410,1412,1414,1417,1419,1421,1423,1425],{"class":307,"line":510},[305,1397,1298],{"class":311},[305,1399,1400],{"class":315}," score",[305,1402,320],{"class":319},[305,1404,1306],{"class":311},[305,1406,1407],{"class":428}," scoreAnswers",[305,1409,526],{"class":323},[305,1411,1343],{"class":315},[305,1413,157],{"class":323},[305,1415,1416],{"class":332},"gameId",[305,1418,343],{"class":323},[305,1420,1343],{"class":315},[305,1422,157],{"class":323},[305,1424,1349],{"class":332},[305,1426,1316],{"class":323},[305,1428,1429],{"class":307,"line":515},[305,1430,411],{"emptyLinePlaceholder":186},[305,1432,1433],{"class":307,"line":561},[305,1434,1435],{"class":564},"  \u002F\u002F do przeglądarki wraca tylko wynik - poprawne odpowiedzi zostają na serwerze\n",[305,1437,1439,1442,1445,1448],{"class":307,"line":1438},12,[305,1440,1441],{"class":311},"  return",[305,1443,1444],{"class":323}," { ",[305,1446,1447],{"class":332},"score",[305,1449,1450],{"class":323}," }\n",[305,1452,1454],{"class":307,"line":1453},13,[305,1455,1456],{"class":323},"})\n",[10,1458,1459,343,1462,1465,1466,1469],{},[28,1460,1461],{},"defineEventHandler",[28,1463,1464],{},"readBody"," i ",[28,1467,1468],{},"createError"," to API Nitra, które Nuxt importuje automatycznie. Cała reszta to zwykły JavaScript z warstwy drugiej: warunek, tablica, funkcja.",[10,1471,1472,1476],{},[697,1473],{"alt":1474,"src":1475},"Ekran wyniku w aplikacji DevChallenge - punktacja i poprawne odpowiedzi","\u002Fimg\u002Fcourse\u002Fresult-poster.jpg",[1247,1477,1478],{},"Wynik liczony po stronie serwera: przeglądarka dostaje punktację i podgląd odpowiedzi, ale nigdy klucz przed czasem.",[14,1480,1482],{"id":1481},"nauka-z-ai-nie-pomimo-ai","Nauka z AI, nie pomimo AI",[10,1484,1485],{},"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:",[297,1487,1489],{"className":299,"code":1488,"language":301,"meta":166,"style":166},"const activeEmails = users\n  .filter((user) => user.lastLoginDaysAgo \u003C= 30)\n  .map((user) => user.email);\n",[28,1490,1491,1503,1535],{"__ignoreMap":166},[305,1492,1493,1495,1498,1500],{"class":307,"line":308},[305,1494,312],{"class":311},[305,1496,1497],{"class":315}," activeEmails",[305,1499,320],{"class":319},[305,1501,1502],{"class":332}," users\n",[305,1504,1505,1508,1510,1512,1515,1517,1519,1522,1524,1527,1530,1533],{"class":307,"line":170},[305,1506,1507],{"class":323},"  .",[305,1509,429],{"class":428},[305,1511,432],{"class":323},[305,1513,1514],{"class":435},"user",[305,1516,439],{"class":323},[305,1518,442],{"class":311},[305,1520,1521],{"class":315}," user",[305,1523,157],{"class":323},[305,1525,1526],{"class":332},"lastLoginDaysAgo",[305,1528,1529],{"class":319}," \u003C=",[305,1531,1532],{"class":351}," 30",[305,1534,1316],{"class":323},[305,1536,1537,1539,1541,1543,1545,1547,1549,1551,1553,1556],{"class":307,"line":167},[305,1538,1507],{"class":323},[305,1540,1145],{"class":428},[305,1542,432],{"class":323},[305,1544,1514],{"class":435},[305,1546,439],{"class":323},[305,1548,442],{"class":311},[305,1550,1521],{"class":315},[305,1552,157],{"class":323},[305,1554,1555],{"class":332},"email",[305,1557,458],{"class":323},[10,1559,1560,1561,157],{},"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 ",[28,1562,1526],{},[10,1564,1565],{},"Wokół tego gestu buduje się cała reszta:",[87,1567,1568,1574,1580,1586],{},[61,1569,1570,1573],{},[92,1571,1572],{},"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.",[61,1575,1576,1579],{},[92,1577,1578],{},"„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.",[61,1581,1582,1585],{},[92,1583,1584],{},"Najpierw plan, potem prompt."," Problem rozbity po polsku przed promptem pozwala zweryfikować wynik wobec własnego planu, a nie brać, co popadnie.",[61,1587,1588,1591],{},[92,1589,1590],{},"Projekty, w których AI pisze 80%, a Ty rozumiesz 100%."," Proporcje kodu nie są problemem. Proporcje rozumienia są.",[10,1593,1594],{},"Różnicę widać na promptach. Słaby brzmi „napisz mi aplikację z quizem\". Dobry to plan przełożony na kontekst i wymagania:",[297,1596,1599],{"className":1597,"code":1598,"language":635,"meta":166},[633],"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",[28,1600,1598],{"__ignoreMap":166},[10,1602,1603],{},"Ten prompt zaczyna się od kontekstu, a kończy pytaniem „czego nie wiem\". To drugie zamienia automat w mentora.",[14,1605,1607],{"id":1606},"błędy-które-ai-tylko-podkręciło","Błędy, które AI tylko podkręciło",[10,1609,1610],{},"Pułapki w nauce są te same co zawsze, tylko w nowym opakowaniu:",[87,1612,1613,1619,1625,1631,1637],{},[61,1614,1615,1618],{},[92,1616,1617],{},"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.",[61,1620,1621,1624],{},[92,1622,1623],{},"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.",[61,1626,1627,1630],{},[92,1628,1629],{},"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.",[61,1632,1633,1636],{},[92,1634,1635],{},"Zbieranie technologii zamiast łączenia ich."," Osiem tutoriali z ośmiu technologii uczy mniej niż jedna aplikacja przechodząca przez wszystkie warstwy.",[61,1638,1639,1642],{},[92,1640,1641],{},"„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,1644,117],{"id":116},[119,1646,1648],{"id":1647},"czy-ai-nie-zastąpi-programistów","Czy AI nie zastąpi programistów?",[10,1650,1651],{},"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.",[119,1653,1655],{"id":1654},"od-której-technologii-zacząć","Od której technologii zacząć?",[10,1657,1658,1659,157],{},"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ł ",[148,1660,1662],{"href":1661},"\u002Fblog\u002Fprogramowanie\u002Fjak-zaczac-programowac-od-zera","jak zacząć programować od zera",[119,1664,1666],{"id":1665},"ile-trwa-droga-do-fullstacka","Ile trwa droga do fullstacka?",[10,1668,1669],{},"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,1671,1673],{"id":1672},"chcesz-przejść-tę-ścieżkę-z-planem","Chcesz przejść tę ścieżkę z planem?",[10,1675,1676,1677,1066,1679,157],{},"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 ",[148,1678,1065],{"href":1064},[148,1680,1069],{"href":162},[10,1682,1683,1684,157],{},"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 ",[148,1685,1686],{"href":1076},"kurs DevChallenge",[1080,1688,1689],{},"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":166,"searchDepth":167,"depth":167,"links":1691},[1692,1693,1694,1695,1696,1697,1702],{"id":1123,"depth":170,"text":1124},{"id":1164,"depth":170,"text":1165},{"id":1174,"depth":170,"text":1175},{"id":1481,"depth":170,"text":1482},{"id":1606,"depth":170,"text":1607},{"id":116,"depth":170,"text":117,"children":1698},[1699,1700,1701],{"id":1647,"depth":167,"text":1648},{"id":1654,"depth":167,"text":1655},{"id":1665,"depth":167,"text":1666},{"id":1672,"depth":170,"text":1673},"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":1115,"description":1704},{"loc":849},"blog\u002Fprogramowanie\u002Ffullstack-developer-w-dobie-ai","DT0lCAwR8AMwmo8SP-Ka-FfoW4sD8M2Dj4kGI1JZCng",1785459977629]