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