<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archiwa JavaScript | To co najważniejsze</title>
	<atom:link href="https://www.danuta-cybulska.com/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.danuta-cybulska.com/tag/javascript/</link>
	<description>Blog o wszystkim tym co jest dla mnie najważniejsze w życiu.</description>
	<lastBuildDate>Fri, 23 Oct 2026 09:00:35 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.danuta-cybulska.com/wp-content/uploads/2025/06/3-150x150.png</url>
	<title>Archiwa JavaScript | To co najważniejsze</title>
	<link>https://www.danuta-cybulska.com/tag/javascript/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Learning Log #8: Asynchroniczność w JavaScript &#8211; promises i async/await</title>
		<link>https://www.danuta-cybulska.com/asynchronicznosc-javascript-promises-async-await-learning-log-8/</link>
					<comments>https://www.danuta-cybulska.com/asynchronicznosc-javascript-promises-async-await-learning-log-8/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Wed, 14 Oct 2026 16:00:00 +0000</pubDate>
				<category><![CDATA[LearningLog]]></category>
		<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[async await]]></category>
		<category><![CDATA[asynchroniczność]]></category>
		<category><![CDATA[callbacks]]></category>
		<category><![CDATA[event loop]]></category>
		<category><![CDATA[fetch API]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[learning log]]></category>
		<category><![CDATA[nauka JavaScript]]></category>
		<category><![CDATA[obietnice JavaScript]]></category>
		<category><![CDATA[piekło wywołań zwrotnych]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[promises]]></category>
		<guid isPermaLink="false">https://www.danuta-cybulska.com/?p=6030</guid>

					<description><![CDATA[<p>Środa, 21:50. Ten sam fragment kodu wyświetla się na ekranie już trzeci wieczór z rzędu. Konsola pokazuje undefined tam, gdzie powinny być dane. Zamykam laptopa, otwieram notatnik, zaczynam rysować diagram strzałkami &#8211; próbuję zrozumieć, w jakiej kolejności właściwie wykonuje się mój kod. Asynchroniczność w JavaScript to temat, o którym każdy, kogo pytałam, mówił to samo:...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/asynchronicznosc-javascript-promises-async-await-learning-log-8/">Learning Log #8: Asynchroniczność w JavaScript &#8211; promises i async/await</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Środa, 21:50. Ten sam fragment kodu wyświetla się na ekranie już trzeci wieczór z rzędu. Konsola pokazuje <code>undefined</code> tam, gdzie powinny być dane. Zamykam laptopa, otwieram notatnik, zaczynam rysować diagram strzałkami &#8211; próbuję zrozumieć, <strong>w jakiej kolejności właściwie wykonuje się mój kod</strong>.</p>



<p class="wp-block-paragraph"><strong>Asynchroniczność w JavaScript</strong> to temat, o którym każdy, kogo pytałam, mówił to samo: &#8222;To jest ten moment, kiedy JavaScript przestaje mieć sens, a potem nagle zaczyna mieć sens zupełnie inny niż myślałaś.&#8221;</p>



<p class="wp-block-paragraph">Mieli rację w obu częściach tego zdania.</p>



<p class="wp-block-paragraph">Po tygodniach walki z tym tematem &#8211; dosłownie tygodniach, nie dniach, jak przy poprzednich Learning Logach &#8211; w końcu czuję, że rozumiem <strong>obietnice (promises) i składnię async/await</strong> na tyle, żeby napisać o tym w sposób, który mógłby zaoszczędzić komuś innemu część tej frustracji.</p>



<p class="wp-block-paragraph">Dziś w <strong>Learning Log #8</strong> pokażę Wam, dlaczego kod w JavaScript nie zawsze wykonuje się w kolejności, w jakiej go piszemy, jak wyglądała ewolucja rozwiązywania tego problemu (od wywołań zwrotnych, przez obietnice, po async/await), i jakie konkretne błędy sprawiły, że ten temat kosztował mnie więcej godzin niż cała reszta JavaScriptu razem wzięta.</p>



<h3 class="wp-block-heading" style="font-size:22px">Dlaczego ten temat jest tak trudny &#8211; problem u podstaw</h3>



<h4 class="wp-block-heading" style="font-size:20px">Założenie, które trzeba porzucić</h4>



<p class="wp-block-paragraph">Ucząc się Javy, a potem podstaw JavaScriptu, przyzwyczaiłam się do jednej fundamentalnej zasady: <strong>kod wykonuje się linijka po linijce, od góry do dołu, w kolejności, w jakiej go napisałam.</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>console.log('Pierwsze');
console.log('Drugie');
console.log('Trzecie');
</code></pre>



<p class="wp-block-paragraph">Wynik jest oczywisty: &#8222;Pierwsze&#8221;, potem &#8222;Drugie&#8221;, potem &#8222;Trzecie&#8221;. Zawsze w tej kolejności.</p>



<p class="wp-block-paragraph"><strong>Problem zaczyna się, kiedy JavaScript musi na coś poczekać</strong> &#8211; na odpowiedź z serwera, na wczytanie pliku, na upłynięcie określonego czasu. I tu okazuje się, że JavaScript <strong>nie czeka grzecznie w miejscu</strong>, tylko leci dalej do kolejnej linijki kodu, zanim operacja oczekująca się zakończy.</p>



<p class="wp-block-paragraph"><strong>Prosty przykład, który pokazuje ten problem:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>console.log('Pierwsze');

setTimeout(function() {
    console.log('Drugie (opóźnione)');
}, 2000);

console.log('Trzecie');
</code></pre>



<p class="wp-block-paragraph"><strong>Intuicyjne oczekiwanie:</strong> Pierwsze, Drugie (po 2 sekundach), Trzecie</p>



<p class="wp-block-paragraph"><strong>Rzeczywisty wynik:</strong> Pierwsze, Trzecie, Drugie (po 2 sekundach)</p>



<p class="wp-block-paragraph"><strong>WTF moment #1, ten fundamentalny:</strong> &#8222;Dlaczego 'Trzecie&#8217; pojawia się PRZED 'Drugie&#8217;, skoro w kodzie jest napisane po nim?!&#8221;</p>



<h4 class="wp-block-heading" style="font-size:20px">Dlaczego JavaScript działa w ten sposób</h4>



<p class="wp-block-paragraph">JavaScript jest <strong>jednowątkowy</strong> (single-threaded) &#8211; w danym momencie może robić tylko jedną rzecz. Gdyby przy każdym oczekiwaniu (na serwer, na timer, na dowolną operację trwającą jakiś czas) zatrzymywał się i czekał bezczynnie, cała strona internetowa by &#8222;zamarzała&#8221; &#8211; nie dałoby się kliknąć przycisku, przewinąć strony, nic.</p>



<p class="wp-block-paragraph"><strong>Rozwiązaniem jest model asynchroniczny</strong> &#8211; JavaScript &#8222;odkłada na bok&#8221; operacje, które wymagają czekania, kontynuuje wykonywanie reszty kodu, a kiedy odłożona operacja się zakończy, wraca do niej i wykonuje jej dalszą część.</p>



<p class="wp-block-paragraph"><strong>Analogia, która w końcu do mnie dotarła:</strong></p>



<p class="wp-block-paragraph">Wyobraź sobie, że gotujesz obiad. Wkładasz ziemniaki do gotowania (to potrwa 20 minut). Nie stoisz bezczynnie przy garnku przez 20 minut &#8211; zajmujesz się w tym czasie krojeniem warzyw, przygotowaniem mięsa. Kiedy timer przypomni, że ziemniaki są gotowe, wracasz do nich.</p>



<p class="wp-block-paragraph"><strong>JavaScript robi dokładnie to samo z kodem</strong> &#8211; &#8222;wkłada ziemniaki do gotowania&#8221; (operację asynchroniczną), leci dalej do następnych linijek, a kiedy operacja się zakończy, wraca i wykonuje to, co miało się stać po jej zakończeniu.</p>



<h3 class="wp-block-heading" style="font-size:22px">Wywołania zwrotne (callbacks) &#8211; pierwsze rozwiązanie problemu</h3>



<h4 class="wp-block-heading" style="font-size:20px">Jak to działało, zanim poznałam coś lepszego</h4>



<p class="wp-block-paragraph">Zanim poznałam obietnice (promise), JavaScript rozwiązywał asynchroniczność za pomocą <strong>funkcji zwrotnych (callback functions)</strong> &#8211; funkcji przekazywanych jako argument, która wykonuje się dopiero po zakończeniu operacji asynchronicznej.</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>function pobierzDaneUzytkownika(id, funkcjaZwrotna) {
    setTimeout(function() {
        const uzytkownik = { id: id, imie: 'Anna' };
        funkcjaZwrotna(uzytkownik);
    }, 1000);
}

pobierzDaneUzytkownika(1, function(uzytkownik) {
    console.log('Otrzymano użytkownika:', uzytkownik);
});
</code></pre>



<p class="wp-block-paragraph"><strong>To rozwiązywało podstawowy problem</strong> &#8211; kod wewnątrz funkcji zwrotnej wykonuje się dopiero, kiedy dane faktycznie są gotowe, nie wcześniej.</p>



<h4 class="wp-block-heading" style="font-size:20px">Problem, który pojawiał się przy złożonych operacjach &#8211; &#8222;piekło wywołań zwrotnych&#8221;</h4>



<p class="wp-block-paragraph">Kiedy trzeba było wykonać kilka operacji asynchronicznych jedna po drugiej (na przykład: pobierz użytkownika, potem na podstawie jego ID pobierz jego zamówienia, potem na podstawie zamówień pobierz szczegóły produktów), kod zaczynał wyglądać tak:</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>pobierzUzytkownika(1, function(uzytkownik) {
    pobierzZamowienia(uzytkownik.id, function(zamowienia) {
        pobierzSzczegolyProduktu(zamowienia&#91;0].produktId, function(produkt) {
            pobierzOpinieOProdukcie(produkt.id, function(opinie) {
                console.log('Wreszcie mam wszystkie dane:', opinie);
// im głębiej, tym trudniej czytać
            });
        });
    });
});
</code></pre>



<p class="wp-block-paragraph"><strong>To zjawisko ma nawet swoją nazwę &#8211; &#8222;callback hell&#8221; (piekło wywołań zwrotnych)</strong>, ze względu na charakterystyczny kształt kodu przypominający schody prowadzące coraz głębiej w prawo.</p>



<p class="wp-block-paragraph"><strong>WTF moment #2:</strong> &#8222;Jak ktokolwiek czyta i debuguje kod, który wygląda jak trójkąt?!&#8221;</p>



<p class="wp-block-paragraph">Zrozumienie tego problemu było dla mnie kluczowe, żeby docenić, <strong>dlaczego</strong> wprowadzono obietnice &#8211; to nie była zmiana &#8222;dla mody&#8221;, tylko realna odpowiedź na realny problem czytelności i zarządzania kodem.</p>



<h3 class="wp-block-heading" style="font-size:22px">Obietnice (Promises) &#8211; eleganckie rozwiązanie</h3>



<h4 class="wp-block-heading" style="font-size:20px">Czym jest obietnica</h4>



<p class="wp-block-paragraph" style="padding-top:var(--wp--preset--spacing--30)"><strong>Obietnica (Promise)</strong> to obiekt reprezentujący ostateczny wynik operacji asynchronicznej &#8211; może zostać <strong>spełniona</strong> (fulfilled, operacja się powiodła) albo <strong>odrzucona</strong> (rejected, operacja się nie powiodła).</p>



<p class="wp-block-paragraph"><strong>Analogia, która pomogła mi to zrozumieć:</strong></p>



<p class="wp-block-paragraph">Obietnica to jak numerek w McDonald&#8217;s. Zamawiasz jedzenie (rozpoczynasz operację asynchroniczną), dostajesz numerek (obietnicę) &#8211; jeszcze nie masz jedzenia, ale masz <strong>coś</strong>, co reprezentuje przyszłe jedzenie. Kiedy jedzenie jest gotowe (obietnica spełniona), możesz je odebrać. Jeśli restauracja ma problem i nie może zrealizować zamówienia (obietnica odrzucona), dostajesz inną informację.</p>



<h4 class="wp-block-heading" style="font-size:20px">Podstawowa składnia</h4>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>function pobierzDaneUzytkownika(id) {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            if (id &gt; 0) {
                resolve({ id: id, imie: 'Anna' });
            } else {
                reject('Nieprawidłowe ID użytkownika');
            }
        }, 1000);
    });
}

pobierzDaneUzytkownika(1)
    .then(function(uzytkownik) {
        console.log('Sukces:', uzytkownik);
    })
    .catch(function(blad) {
        console.log('Błąd:', blad);
    });
</code></pre>



<p class="wp-block-paragraph"><strong>Kluczowe elementy:</strong></p>



<ul class="wp-block-list">
<li><code>resolve()</code> &#8211; wywoływane, kiedy operacja się powiodła</li>



<li><code>reject()</code> &#8211; wywoływane, kiedy operacja się nie powiodła</li>



<li><code>.then()</code> &#8211; kod wykonujący się po pomyślnym zakończeniu</li>



<li><code>.catch()</code> &#8211; kod wykonujący się w przypadku błędu</li>
</ul>



<h4 class="wp-block-heading" style="font-size:20px">Łańcuchowanie obietnic &#8211; rozwiązanie problemu &#8222;piekła wywołań zwrotnych&#8221;</h4>



<p class="wp-block-paragraph" style="padding-top:var(--wp--preset--spacing--30)">To był dla mnie moment przełomowy &#8211; zamiast zagnieżdżania funkcji w funkcjach w funkcjach, obietnice można <strong>łańcuchować</strong>:</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>pobierzUzytkownika(1)
    .then(function(uzytkownik) {
        return pobierzZamowienia(uzytkownik.id);
    })
    .then(function(zamowienia) {
        return pobierzSzczegolyProduktu(zamowienia&#91;0].produktId);
    })
    .then(function(produkt) {
        return pobierzOpinieOProdukcie(produkt.id);
    })
    .then(function(opinie) {
        console.log('Wreszcie mam wszystkie dane:', opinie);
    })
    .catch(function(blad) {
        console.log('Coś poszło nie tak w którymkolwiek kroku:', blad);
    });
</code></pre>



<p class="wp-block-paragraph"><strong>Różnica wizualna jest ogromna</strong> &#8211; kod płynie w dół, nie w prawo. I co szczególnie doceniłam: <strong>jeden <code>.catch()</code> na końcu łapie błąd z DOWOLNEGO miejsca w łańcuchu</strong>, zamiast konieczności obsługi błędu osobno w każdej zagnieżdżonej funkcji zwrotnej.</p>



<p class="wp-block-paragraph"><strong>WTF moment #3, ale w dobrym sensie:</strong> &#8222;Czekaj, to jedna linijka <code>.catch()</code> obsługuje błędy z czterech różnych operacji naraz?!&#8221;</p>



<h3 class="wp-block-heading" style="font-size:22px">Async/Await &#8211; składnia, która wszystko zmieniła</h3>



<h4 class="wp-block-heading" style="font-size:20px">Dlaczego to było moje &#8222;aha!&#8221;</h4>



<p class="wp-block-paragraph">Po tygodniu oswajania się z <code>.then()</code> i <code>.catch()</code>, natrafiłam na składnię <code>async/await</code>, która &#8211; jak się okazało &#8211; to po prostu <strong>wygodniejszy sposób pisania tego samego, co robią obietnice</strong>, ale wyglądający jak zwykły, sekwencyjny kod.</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>async function pobierzWszystkieDane() {
    try {
        const uzytkownik = await pobierzUzytkownika(1);
        const zamowienia = await pobierzZamowienia(uzytkownik.id);
        const produkt = await pobierzSzczegolyProduktu(zamowienia&#91;0].produktId);
        const opinie = await pobierzOpinieOProdukcie(produkt.id);

        console.log('Wreszcie mam wszystkie dane:', opinie);
    } catch (blad) {
        console.log('Coś poszło nie tak:', blad);
    }
}

pobierzWszystkieDane();
</code></pre>



<p class="wp-block-paragraph"><strong>To wygląda niemal identycznie jak zwykły, synchroniczny kod!</strong> Żadnych <code>.then()</code>, żadnego zagnieżdżania &#8211; po prostu linijka po linijce, jakby wszystko działo się w kolejności (mimo że pod spodem dalej jest to asynchroniczne).</p>



<h4 class="wp-block-heading" style="font-size:20px">Kluczowe elementy składni</h4>



<ul class="wp-block-list">
<li><strong><code>async</code></strong> &#8211; słowo kluczowe umieszczane przed definicją funkcji, oznaczające, że funkcja będzie zawierała operacje asynchroniczne i automatycznie zwraca obietnicę.</li>



<li><strong><code>await</code></strong> &#8211; słowo kluczowe używane WEWNĄTRZ funkcji async, &#8222;wstrzymujące&#8221; wykonanie tej konkretnej funkcji (nie całego programu!) do momentu, aż obietnica się rozstrzygnie.</li>



<li><strong><code>try/catch</code></strong> &#8211; standardowy mechanizm obsługi błędów w JavaScript, który przy async/await zastępuje <code>.catch()</code> z obietnic.</li>
</ul>



<h4 class="wp-block-heading" style="font-size:20px">Moment, w którym w końcu zrozumiałam różnicę między &#8222;wstrzymaniem funkcji&#8221; a &#8222;zamrożeniem programu&#8221;</h4>



<p class="wp-block-paragraph">To była kluczowa rzecz, którą myliłam przez dobry tydzień. <code>await</code> <strong>nie zamraża całej strony internetowej</strong> &#8211; zamraża tylko wykonanie tej jednej konkretnej funkcji, w której się znajduje. Reszta programu (obsługa kliknięć, inne funkcje) działa dalej normalnie.</p>



<p class="wp-block-paragraph"><strong>Przykład, który to zilustrował:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>async function wolnaOperacja() {
    console.log('Zaczynam wolną operację');
    await new Promise(resolve =&gt; setTimeout(resolve, 3000));
    console.log('Wolna operacja zakończona');
}

wolnaOperacja();
console.log('Ten tekst pojawi się NATYCHMIAST, nie czeka na wolnaOperacja()');
</code></pre>



<p class="wp-block-paragraph"><strong>Kolejność wykonania:</strong></p>



<ol class="wp-block-list">
<li>&#8222;Zaczynam wolną operację&#8221;</li>



<li>&#8222;Ten tekst pojawi się NATYCHMIAST&#8230;&#8221; (bo <code>wolnaOperacja()</code> nie blokuje reszty kodu)</li>



<li>Po 3 sekundach: &#8222;Wolna operacja zakończona&#8221;</li>
</ol>



<h3 class="wp-block-heading" style="font-size:22px">Praktyczny projekt &#8211; pobieranie danych z prawdziwego API</h3>



<p class="wp-block-paragraph">Po opanowaniu teorii, zbudowałam mój pierwszy projekt wykorzystujący asynchroniczność w praktyce &#8211; <strong>prostą wyszukiwarkę informacji o miastach</strong> korzystającą z darmowego, publicznego API pogodowego.</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>async function pobierzPogodeDlaMiasta(nazwaMiasta) {
    const kluczApi = 'TWOJ_KLUCZ_API';
    const url = `https://api.przykladowaPogoda.com/dane?miasto=${nazwaMiasta}&amp;key=${kluczApi}`;

    try {
        pokazLadowanie(true);

        const odpowiedz = await fetch(url);

        if (!odpowiedz.ok) {
            throw new Error(`Błąd serwera:${odpowiedz.status}`);
        }

        const dane = await odpowiedz.json();

        wyswietlPogode(dane);

    } catch (blad) {
        wyswietlKomunikatBledu('Nie udało się pobrać danych pogodowych: ' + blad.message);
    } finally {
        pokazLadowanie(false);
    }
}

function wyswietlPogode(dane) {
    const kontener = document.getElementById('wynikPogody');
    kontener.innerHTML = `
        &lt;h3&gt;${dane.miasto}&lt;/h3&gt;
        &lt;p&gt;Temperatura:${dane.temperatura}°C&lt;/p&gt;
        &lt;p&gt;Warunki:${dane.opis}&lt;/p&gt;
    `;
}

function wyswietlKomunikatBledu(wiadomosc) {
    const kontener = document.getElementById('wynikPogody');
    kontener.innerHTML = `&lt;p class="blad"&gt;${wiadomosc}&lt;/p&gt;`;
}

function pokazLadowanie(czyPokazac) {
    const spinner = document.getElementById('ladowanie');
    spinner.style.display = czyPokazac ? 'block' : 'none';
}

// Podpięcie do przycisku
document.getElementById('przyciskSzukaj').addEventListener('click', function() {
    const miasto = document.getElementById('inputMiasto').value;
    pobierzPogodeDlaMiasta(miasto);
});
</code></pre>



<p class="wp-block-paragraph"><strong>Co się nauczyłam budując ten projekt:</strong></p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong><code>fetch()</code></strong> &#8211; wbudowana funkcja JavaScript do pobierania danych z zewnętrznych źródeł, zwracająca obietnicę</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong><code>response.json()</code></strong> &#8211; konwersja odpowiedzi serwera na obiekt JavaScript, sama w sobie też asynchroniczna (stąd drugi <code>await</code>)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong><code>try/catch/finally</code></strong> &#8211; blok <code>finally</code> wykonuje się zawsze, niezależnie od tego, czy operacja się powiodła czy nie (idealne miejsce na ukrycie animacji ładowania)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Obsługa różnych typów błędów</strong> &#8211; błąd sieci (serwer nie odpowiada) versus błąd logiczny (serwer odpowiedział, ale z kodem błędu)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Łączenie manipulacji DOM (o czym pisałam w poprzednim Learning Logu) z operacjami asynchronicznymi</strong></li>
</ul>



<p class="wp-block-paragraph"><strong>Czas realizacji:</strong> 5 godzin, rozłożone na cztery dni &#8211; znacznie dłużej niż poprzednie mini-projekty, ale też znacznie więcej się nauczyłam.</p>



<h3 class="wp-block-heading" style="font-size:22px">Typowe błędy, które popełniłam &#8211; i jak je naprawiłam</h3>



<h4 class="wp-block-heading" style="font-size:20px">Błąd 1: Zapominanie o <code>await</code></h4>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>// ŹLE
async function pobierzDane() {
    const wynik = fetch('&lt;https://przykladowe-api.com/dane&gt;');
    console.log(wynik); // Promise { &lt;pending&gt; } - nie dane, tylko sama obietnica!
}

// DOBRZE
async function pobierzDane() {
    const wynik = await fetch('&lt;https://przykladowe-api.com/dane&gt;');
    console.log(wynik); // teraz faktyczna odpowiedź
}
</code></pre>



<p class="wp-block-paragraph"><strong>Lekcja:</strong> Bez <code>await</code>, dostajesz samą obietnicę (obiekt &#8222;w trakcie realizacji&#8221;), nie faktyczny wynik operacji. To był mój najczęstszy błąd przez pierwsze dwa tygodnie &#8211; kod &#8222;działał&#8221; bez błędu, ale wyświetlał kompletnie bezużyteczne dane.</p>



<h4 class="wp-block-heading" style="font-size:20px">Błąd 2: Używanie <code>await</code> poza funkcją <code>async</code></h4>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>// ŹLE - błąd składni
function pobierzDane() {
    const wynik = await fetch('&lt;https://przykladowe-api.com/dane&gt;');
}

// DOBRZE
async function pobierzDane() {
    const wynik = await fetch('&lt;https://przykladowe-api.com/dane&gt;');
}
</code></pre>



<p class="wp-block-paragraph"><strong>Lekcja:</strong> <code>await</code> działa TYLKO wewnątrz funkcji oznaczonej jako <code>async</code>. To była prosta zasada, ale zapominałam o niej regularnie, szczególnie przy pisaniu krótkich funkcji pomocniczych.</p>



<h4 class="wp-block-heading" style="font-size:20px">Błąd 3: Sekwencyjne wykonywanie operacji, które mogły działać równolegle</h4>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>// NIEOPTYMALNIE - operacje wykonują się jedna po drugiej, mimo że nie muszą
async function pobierzWszystko() {
    const uzytkownik = await pobierzUzytkownika(1); // czeka 1 sekundę
    const produkty = await pobierzProdukty(); // czeka kolejną sekundę
// razem: 2 sekundy, mimo że te operacje nie zależą od siebie!
}

// LEPIEJ - operacje wykonują się jednocześnie
async function pobierzWszystko() {
    const &#91;uzytkownik, produkty] = await Promise.all(&#91;
        pobierzUzytkownika(1),
        pobierzProdukty()
    ]);
// razem: tylko 1 sekunda, bo obie operacje leciały równolegle!
}
</code></pre>



<p class="wp-block-paragraph"><strong>Lekcja:</strong> <code>Promise.all()</code> pozwala uruchomić kilka niezależnych operacji asynchronicznych <strong>jednocześnie</strong>, zamiast czekać na jedną, żeby zacząć następną. To był koncept, który zrozumiałam dopiero po przeanalizowaniu, dlaczego mój projekt z pogodą dla kilku miast naraz działał wolniej niż powinien.</p>



<h4 class="wp-block-heading" style="font-size:20px">Błąd 4: Brak obsługi błędów</h4>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>// RYZYKOWNIE - brak try/catch
async function pobierzDane() {
    const odpowiedz = await fetch(url); // co jeśli serwer nie odpowiada?
    const dane = await odpowiedz.json();
    return dane;
}

// BEZPIECZNIE
async function pobierzDane() {
    try {
        const odpowiedz = await fetch(url);
        const dane = await odpowiedz.json();
        return dane;
    } catch (blad) {
        console.error('Nie udało się pobrać danych:', blad);
        return null;
    }
}
</code></pre>



<p class="wp-block-paragraph"><strong>Lekcja:</strong> Bez bloku <code>try/catch</code>, błąd w operacji asynchronicznej powoduje niewyjaśniony &#8222;cichy&#8221; upadek funkcji, bez żadnej informacji dla użytkownika, co poszło nie tak. To szczególnie problematyczne przy pracy z zewnętrznymi API, które mogą nie odpowiadać z wielu różnych powodów (brak internetu, przeciążony serwer, nieprawidłowe zapytanie).</p>



<h3 class="wp-block-heading" style="font-size:22px">Dlaczego warto było poznać wywołania zwrotne, zanim poznałam obietnice</h3>



<p class="wp-block-paragraph">Zastanawiałam się, czy nie lepiej było od razu uczyć się async/await, pomijając wywołania zwrotne i obietnice jako &#8222;przestarzałe&#8221;. Po przejściu przez wszystkie trzy etapy jestem przekonana, że <strong>ta kolejność miała sens</strong>.</p>



<p class="wp-block-paragraph"><strong>Zrozumienie wywołań zwrotnych</strong> pokazało mi <strong>PROBLEM</strong>, który asynchroniczność w ogóle stwarza.</p>



<p class="wp-block-paragraph"><strong>Poznanie obietnic</strong> pokazało mi, <strong>JAK</strong> ten problem został rozwiązany na poziomie koncepcyjnym.</p>



<p class="wp-block-paragraph"><strong>Zrozumienie async/await</strong> pokazało mi wygodniejszy <strong>SPOSÓB ZAPISU</strong> tego samego rozwiązania.</p>



<p class="wp-block-paragraph">Gdybym zaczęła od razu od async/await, prawdopodobnie umiałabym pisać kod, który działa, ale bez zrozumienia, <strong>co dokładnie dzieje się pod spodem</strong> &#8211; co utrudniałoby debugowanie w momencie, gdy coś pójdzie nie tak w bardziej złożonym scenariuszu.</p>



<h3 class="wp-block-heading" style="font-size:22px">Zasoby, które pomogły mi zrozumieć asynchroniczność</h3>



<h4 class="wp-block-heading" style="margin-top:var(--wp--preset--spacing--40);font-size:20px">1. &#8222;JavaScript Visualized: Promises&#8221; &#8211; Lydia Hallie (★★★★★)</h4>



<p class="wp-block-paragraph">Wizualne, animowane wyjaśnienie, jak dokładnie obietnice działają &#8222;pod maską&#8221;. To był zasób, który sprawił, że nagle wszystko &#8222;kliknęło&#8221; po tygodniu czytania czysto tekstowych wyjaśnień.</p>



<h4 class="wp-block-heading" style="font-size:20px">2. <a href="http://JavaScript.info">JavaScript.info</a> &#8211; rozdziały o Promise i Async/await (★★★★★)</h4>



<p class="wp-block-paragraph">Jak zawsze przy tym źródle &#8211; szczegółowe, dokładne wyjaśnienia z licznymi przykładami. Wracałam do konkretnych fragmentów wielokrotnie.</p>



<h4 class="wp-block-heading" style="font-size:20px">3. &#8222;What the heck is the event loop anyway?&#8221; &#8211; Philip Roberts (★★★★★)</h4>



<p class="wp-block-paragraph">Prezentacja konferencyjna (dostępna na YouTube) wyjaśniająca <strong>pętlę zdarzeń (event loop)</strong> &#8211; mechanizm, dzięki któremu JavaScript w ogóle może obsługiwać operacje asynchroniczne, mimo że jest jednowątkowy. To wyjaśnienie dało mi zrozumienie &#8222;dlaczego&#8221; na poziomie znacznie głębszym niż samo &#8222;jak pisać kod&#8221;.</p>



<h4 class="wp-block-heading" style="font-size:20px">4. Praktyka &#8211; budowanie własnych mini-projektów z prawdziwymi API</h4>



<p class="wp-block-paragraph">Żadne wyjaśnienie teoretyczne nie zastąpiło realnego zderzenia się z błędami przy pracy z prawdziwym, zewnętrznym API, które czasem nie odpowiada, zwraca nieoczekiwane dane, albo działa wolniej niż się spodziewałam.</p>



<h3 class="wp-block-heading" style="font-size:22px">Plany na listopad &#8211; co dalej</h3>



<p class="wp-block-paragraph" style="padding-top:var(--wp--preset--spacing--30)"><strong>Tydzień 1-2 października (kontynuacja):</strong></p>



<ul class="wp-block-list">
<li>Utrwalenie async/await przez kolejne mniejsze projekty</li>



<li>Praca z kilkoma różnymi publicznymi API dla praktyki</li>
</ul>



<p class="wp-block-paragraph"><strong>Listopad:</strong></p>



<ul class="wp-block-list">
<li>Pierwszy kontakt z React &#8211; framework, który intensywnie wykorzystuje te same koncepty asynchroniczności, tylko w innym kontekście</li>



<li>Może pierwsza integracja JavaScript z projektami WordPress dla praktycznego zastosowania</li>
</ul>



<p class="wp-block-paragraph"><strong>Cel realistyczny:</strong> Czuć się na tyle pewnie z asynchronicznością, żeby móc czytać i rozumieć kod innych osób wykorzystujący te koncepty, nawet jeśli sama jeszcze nie piszę wszystkiego od razu bezbłędnie.</p>



<h3 class="wp-block-heading" style="font-size:22px">FAQ &#8211; asynchroniczność w JavaScript</h3>



<h4 class="wp-block-heading" style="font-size:20px">Czy muszę rozumieć wywołania zwrotne, jeśli i tak będę używać tylko async/await?</h4>



<p class="wp-block-paragraph">Nie jest to absolutnie konieczne, ale mocno polecam przynajmniej podstawowe zrozumienie problemu, który wywołania zwrotne rozwiązywały. Ułatwia to zrozumienie, DLACZEGO async/await wygląda tak, jak wygląda, zamiast traktowania tej składni jako magicznej formułki do zapamiętania.</p>



<h4 class="wp-block-heading" style="font-size:20px">Ile czasu zajęła Ci nauka tego tematu?</h4>



<p class="wp-block-paragraph">Znacznie więcej niż poprzednich tematów &#8211; około trzech tygodni intensywniejszej nauki, w porównaniu do jednego-dwóch tygodni przy wcześniejszych Learning Logach. To zdecydowanie najtrudniejszy temat JavaScriptu, z jakim się do tej pory zmierzyłam.</p>



<h4 class="wp-block-heading" style="font-size:20px">Czy asynchroniczność jest unikalna dla JavaScriptu?</h4>



<p class="wp-block-paragraph">Nie &#8211; większość nowoczesnych języków programowania ma jakąś formę obsługi operacji asynchronicznych, w tym Java (którą poznałam wcześniej), choć mechanizmy i składnia różnią się znacząco. Koncepcja &#8222;czekania na coś bez blokowania całego programu&#8221; jest uniwersalna w programowaniu.</p>



<h4 class="wp-block-heading" style="font-size:20px">Co było najtrudniejsze w tym temacie?</h4>



<p class="wp-block-paragraph">Zdecydowanie <strong>zrozumienie, dlaczego kod nie wykonuje się w kolejności, w jakiej go napisałam</strong> &#8211; to fundamentalnie łamało moje dotychczasowe intuicje wyniesione z Javy. Dopiero po zrozumieniu pętli zdarzeń (event loop) na poziomie koncepcyjnym, reszta zaczęła mieć sens.</p>



<h4 class="wp-block-heading" style="font-size:20px">Czy warto uczyć się wszystkich trzech podejść (wywołania zwrotne, obietnice, async/await), czy tylko najnowszego?</h4>



<p class="wp-block-paragraph">Polecam przynajmniej podstawowe zrozumienie wszystkich trzech, nawet jeśli w praktyce będziesz pisać kod głównie z użyciem async/await. Duża część istniejącego kodu (w bibliotekach, starszych projektach, dokumentacji) nadal korzysta z obietnic bezpośrednio, a zrozumienie wywołań zwrotnych pomaga docenić, dlaczego w ogóle powstały nowsze rozwiązania.</p>



<h3 class="wp-block-heading" style="font-size:22px">Podsumowanie &#8211; Learning Log #8</h3>



<p class="wp-block-paragraph"><strong>Asynchroniczność w JavaScript</strong> okazała się najtrudniejszym tematem, z jakim zmierzyłam się do tej pory w mojej nauce programowania &#8211; trudniejszym niż podstawy Javy, trudniejszym niż manipulacja DOM, trudniejszym niż cokolwiek wcześniej.</p>



<p class="wp-block-paragraph"><strong>Co osiągnęłam:</strong></p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Rozumiem, dlaczego JavaScript nie wykonuje kodu zawsze w kolejności zapisu</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Znam historię rozwiązań tego problemu &#8211; od wywołań zwrotnych, przez obietnice, po async/await</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Potrafię pisać funkcje asynchroniczne z poprawną obsługą błędów</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Rozumiem różnicę między operacjami sekwencyjnymi a równoległymi (<code>Promise.all()</code>)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Zbudowałam działający projekt pobierający dane z prawdziwego, zewnętrznego API</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Znam cztery najczęstsze błędy początkujących i wiem, jak ich unikać</li>
</ul>



<p class="wp-block-paragraph"><strong>Najważniejsza lekcja tego etapu:</strong></p>



<p class="wp-block-paragraph"><strong>Niektóre tematy w programowaniu wymagają nie tylko więcej czasu, ale wręcz zmiany sposobu myślenia.</strong> Asynchroniczność nie jest po prostu &#8222;trudniejszą składnią&#8221; &#8211; wymaga porzucenia fundamentalnego założenia o tym, jak w ogóle działa wykonywanie kodu.</p>



<p class="wp-block-paragraph">Trzy tygodnie frustracji, diagramy strzałkami na kartce papieru, i wieczory gapienia się w konsolę pokazującą <code>undefined</code> &#8211; to była cena zrozumienia tego tematu. Ale teraz, kiedy w końcu &#8222;kliknęło&#8221;, czuję satysfakcję, jakiej nie dała mi żadna łatwiejsza lekcja.</p>



<p class="wp-block-paragraph">Czasem najtrudniejsze tematy dają najwięcej, kiedy się w końcu poddadzą.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>PS: Pamiętasz swój moment zrozumienia asynchroniczności? Albo może dopiero się z nią zmagasz i chcesz się podzielić frustracją? Zostaw komentarz &#8211; obiecuję, że rozumiem tę walkę lepiej niż większość rzeczy, o których pisałam do tej pory!</em></p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/asynchronicznosc-javascript-promises-async-await-learning-log-8/">Learning Log #8: Asynchroniczność w JavaScript &#8211; promises i async/await</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/asynchronicznosc-javascript-promises-async-await-learning-log-8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Learning Log #7: JavaScript &#8211; manipulacja DOM, zdarzenia i pierwsza prawdziwa interaktywność</title>
		<link>https://www.danuta-cybulska.com/learning-log-7-javascript-dom-zdarzenia-interaktywnosc/</link>
					<comments>https://www.danuta-cybulska.com/learning-log-7-javascript-dom-zdarzenia-interaktywnosc/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Wed, 02 Sep 2026 16:00:00 +0000</pubDate>
				<category><![CDATA[LearningLog]]></category>
		<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[delegacja zdarzeń]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[event bubbling]]></category>
		<category><![CDATA[event listener]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[interaktywność]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[learning log]]></category>
		<category><![CDATA[manipulacja DOM]]></category>
		<category><![CDATA[nasłuchiwacze zdarzeń]]></category>
		<category><![CDATA[nauka JavaScript]]></category>
		<category><![CDATA[projekt JavaScript]]></category>
		<category><![CDATA[web development]]></category>
		<guid isPermaLink="false">https://www.danuta-cybulska.com/?p=6009</guid>

					<description><![CDATA[<p>Poniedziałek, 2 września, 21:40. Szkoła wróciła do normalnego rytmu dziś rano. Dom w końcu cichy. A ja siedzę i patrzę na przycisk na ekranie, który właśnie zmienił kolor po kliknięciu. Brzmi banalnie, prawda? Przycisk zmienia kolor. Wielka rzecz. Ale to JA to zrobiłam. Napisałam kod, który sprawił, że strona internetowa reaguje na to, co robi...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/learning-log-7-javascript-dom-zdarzenia-interaktywnosc/">Learning Log #7: JavaScript &#8211; manipulacja DOM, zdarzenia i pierwsza prawdziwa interaktywność</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Poniedziałek, 2 września, 21:40. Szkoła wróciła do normalnego rytmu dziś rano. Dom w końcu cichy. A ja siedzę i patrzę na przycisk na ekranie, który właśnie <strong>zmienił kolor po kliknięciu</strong>.</p>



<p class="wp-block-paragraph">Brzmi banalnie, prawda? Przycisk zmienia kolor. Wielka rzecz.</p>



<p class="wp-block-paragraph">Ale to JA to zrobiłam. Napisałam kod, który sprawił, że strona internetowa <strong>reaguje na to, co robi użytkownik</strong>. Nie odświeżam strony. Nie klikam linku. Element na ekranie po prostu&#8230; reaguje. Na żywo.</p>



<p class="wp-block-paragraph">Po dwóch miesiącach mikroedukacji w wakacje (<a href="https://www.danuta-cybulska.com/learning-log-6-java-vs-javascript-drugi-jezyk/">o czym pisałam w poprzednim wpisie</a>) i powrocie do pełnego tempa we wrześniu, wreszcie dotarłam do tematu, na który czekałam najbardziej: <strong>manipulacja DOM i zdarzenia w JavaScript</strong>. To jest moment, w którym JavaScript przestaje być &#8222;kolejnym językiem do nauki&#8221; i staje się narzędziem, które <strong>tchnie życie w strony internetowe</strong>.</p>



<p class="wp-block-paragraph">Dziś w <strong>Learning Log #7</strong> pokażę Wam czym jest DOM, jak JavaScript nim manipuluje, czym są nasłuchiwacze zdarzeń, i opiszę te momenty &#8222;wow&#8221;, kiedy pierwszy raz zobaczyłam własny kod reagujący na kliknięcie myszką.</p>



<h3 class="wp-block-heading" style="font-size:22px">Czym jest DOM &#8211; wyjaśnienie które w końcu do mnie dotarło</h3>



<h4 class="wp-block-heading" style="font-size:20px">Problem: rozumiałam składnię, ale nie rozumiałam koncepcji</h4>



<p class="wp-block-paragraph">Przez pierwsze tygodnie nauki JavaScript umiałam pisać pętle, funkcje, warunki &#8211; ale nie rozumiałam, <strong>jak to wszystko łączy się ze stroną internetową, którą widzę w przeglądarce</strong>.</p>



<p class="wp-block-paragraph">To była luka, która blokowała mnie od tworzenia czegokolwiek realnego.</p>



<h4 class="wp-block-heading" style="font-size:20px">Wyjaśnienie które zadziałało &#8211; analogia z domem</h4>



<p class="wp-block-paragraph"><strong>DOM</strong> (Document Object Model, po polsku: obiektowy model dokumentu) to sposób, w jaki przeglądarka &#8222;widzi&#8221; stronę internetową &#8211; nie jako tekst HTML, ale jako <strong>strukturę drzewa obiektów</strong>, którymi można manipulować.</p>



<p class="wp-block-paragraph"><strong>Analogia która mi pomogła:</strong></p>



<p class="wp-block-paragraph">Wyobraź sobie dom (budynek, nie stronę). HTML to plan architektoniczny domu &#8211; papierowy dokument opisujący, gdzie są ściany, drzwi, okna.</p>



<p class="wp-block-paragraph"><strong>DOM to sam dom, zbudowany na podstawie tego planu</strong> &#8211; fizyczna struktura, którą można otworzyć, zamknąć, przemalować, przestawić meble.</p>



<p class="wp-block-paragraph"><strong>HTML (plan):</strong></p>



<p class="wp-block-paragraph">html</p>



<pre class="wp-block-code"><code>&lt;div id="salon"&gt;
    &lt;button id="przycisk"&gt;Kliknij mnie&lt;/button&gt;
    &lt;p id="tekst"&gt;Witaj!&lt;/p&gt;
&lt;/div&gt;
</code></pre>



<p class="wp-block-paragraph"><strong>DOM (dom zbudowany z planu):</strong> Przeglądarka tworzy strukturę drzewa:</p>



<pre class="wp-block-code"><code>document
  └── div#salon
        ├── button#przycisk
        └── p#tekst
</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript może wejść do tego &#8222;domu&#8221; i:</strong></p>



<ul class="wp-block-list">
<li>Otworzyć drzwi (znaleźć element)</li>



<li>Przemalować ścianę (zmienić styl)</li>



<li>Przestawić meble (zmienić strukturę)</li>



<li>Zainstalować dzwonek reagujący na naciśnięcie (dodać nasłuchiwacz zdarzenia)</li>
</ul>



<h4 class="wp-block-heading" style="font-size:20px">Pierwsza manipulacja DOM &#8211; znajdowanie elementów</h4>



<p class="wp-block-paragraph"><strong>Podstawowe metody wyszukiwania elementów:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>// Po ID (najczęściej używane)
const przycisk = document.getElementById('przycisk');

// Po klasie (może zwrócić wiele elementów)
const wszystkieKarty = document.getElementsByClassName('karta');

// Po selektorze CSS (najbardziej elastyczne)
const pierwszyPrzycisk = document.querySelector('.przycisk');
const wszystkiePrzyciski = document.querySelectorAll('.przycisk');
</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #1:</strong> &#8222;Czekaj, mogę wyszukiwać elementy DOKŁADNIE tak samo jak w CSS?!&#8221;</p>



<p class="wp-block-paragraph">To była pierwsza rzecz, która sprawiła, że JavaScript nagle &#8222;kliknął&#8221; (nie mylić z tym przyciskiem, o którym za chwilę). Znałam już selektory CSS z pracy z WordPressem. Nagle mogłam użyć tej samej wiedzy do wyszukiwania elementów w JavaScript.</p>



<h3 class="wp-block-heading" style="font-size:22px">Manipulacja DOM &#8211; zmienianie tego, co widać na ekranie</h3>



<h4 class="wp-block-heading" style="font-size:20px">Zmiana tekstu</h4>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>const naglowek = document.getElementById('naglowek');
naglowek.textContent = 'Nowy tekst!';
</code></pre>



<p class="wp-block-paragraph"><strong>Pierwsza rzecz, którą zrobiłam:</strong> Zmiana powitania na stronie w zależności od pory dnia.</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>const godzina = new Date().getHours();
const powitanie = document.getElementById('powitanie');

if (godzina &lt; 12) {
    powitanie.textContent = 'Dzień dobry!';
} else if (godzina &lt; 18) {
    powitanie.textContent = 'Dzień dobry (popołudniu)!';
} else {
    powitanie.textContent = 'Dobry wieczór!';
}
</code></pre>



<p class="wp-block-paragraph"><strong>Efekt na ekranie:</strong> Odświeżam stronę &#8211; tekst się zmienia w zależności od tego, o której godzinie to robię. Proste, ale to był mój <strong>pierwszy prawdziwy moment &#8222;wow&#8221;</strong>.</p>



<h4 class="wp-block-heading" style="font-size:20px">Zmiana stylu (CSS przez JavaScript)</h4>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>const przycisk = document.getElementById('przycisk');
przycisk.style.backgroundColor = 'niebieski';
przycisk.style.color = 'biały';
przycisk.style.padding = '10px 20px';
</code></pre>



<p class="wp-block-paragraph"><strong>Zmiana klasy (lepsza praktyka niż zmiana pojedynczych stylów):</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>const karta = document.querySelector('.karta');
karta.classList.add('podswietlona');
karta.classList.remove('nieaktywna');
karta.classList.toggle('rozwiniety'); // dodaje jeśli nie ma, usuwa jeśli jest
</code></pre>



<p class="wp-block-paragraph"><strong>Dlaczego <code>classList</code> jest lepsze niż bezpośrednie zmienianie <code>style</code>:</strong></p>



<p class="wp-block-paragraph">Bezpośrednia zmiana stylu (<code>element.style.color = 'red'</code>) miesza logikę JavaScript ze stylowaniem CSS. Lepsza praktyka to przygotowanie klas CSS wcześniej (np. <code>.aktywny { color: red; }</code>) i dodawanie/usuwanie tych klas przez JavaScript.</p>



<h4 class="wp-block-heading" style="font-size:20px">Tworzenie nowych elementów dynamicznie</h4>



<p class="wp-block-paragraph">To była kolejna rzecz, która mnie zachwyciła &#8211; możliwość <strong>tworzenia całkowicie nowych elementów HTML</strong> za pomocą kodu, bez wcześniejszego pisania ich w pliku HTML.</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>function dodajZadanie(tresc) {
// Tworzę nowy element
    const nowyElement = document.createElement('li');
    nowyElement.textContent = tresc;
    nowyElement.classList.add('zadanie');

// Dodaję go do listy na stronie
    const lista = document.getElementById('listaZadan');
    lista.appendChild(nowyElement);
}

dodajZadanie('Nauczyć się manipulacji DOM');
dodajZadanie('Zbudować listę zadań');
</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #2:</strong> &#8222;Mogę tworzyć elementy które nigdy nie istniały w oryginalnym HTML?!&#8221;</p>



<p class="wp-block-paragraph">To otworzyło mi drzwi do zrozumienia, jak działają aplikacje typu lista zadań, komentarze dodawane na żywo, czy dynamiczne galerie zdjęć.</p>



<h3 class="wp-block-heading" style="font-size:22px">Zdarzenia (events) &#8211; jak strona reaguje na użytkownika</h3>



<h4 class="wp-block-heading" style="font-size:20px">Czym są zdarzenia</h4>



<p class="wp-block-paragraph"><strong>Zdarzenie</strong> to sygnał, że coś się wydarzyło na stronie &#8211; kliknięcie, najechanie myszką, wpisanie tekstu, przewinięcie strony, załadowanie się dokumentu.</p>



<p class="wp-block-paragraph"><strong>Nasłuchiwacz zdarzenia</strong> (event listener) to fragment kodu, który &#8222;czeka&#8221; na konkretne zdarzenie i uruchamia się, kiedy ono nastąpi.</p>



<h4 class="wp-block-heading" style="font-size:20px">Pierwszy nasłuchiwacz zdarzenia &#8211; moment przełomowy</h4>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>const przycisk = document.getElementById('przycisk');

przycisk.addEventListener('click', function() {
    console.log('Kliknięto przycisk!');
});
</code></pre>



<p class="wp-block-paragraph"><strong>To był moment, o którym pisałam na początku posta.</strong> Kliknęłam przycisk w przeglądarce, i w konsoli pojawił się mój tekst. Coś, co napisałam, zareagowało na moje działanie w czasie rzeczywistym.</p>



<p class="wp-block-paragraph"><strong>Rozwinięcie do praktycznego przykładu &#8211; zmiana koloru po kliknięciu:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>const przycisk = document.getElementById('przycisk');
let jestAktywny = false;

przycisk.addEventListener('click', function() {
    jestAktywny = !jestAktywny; // odwrócenie wartości logicznej

    if (jestAktywny) {
        przycisk.style.backgroundColor = 'zielony';
        przycisk.textContent = 'Aktywne!';
    } else {
        przycisk.style.backgroundColor = 'szary';
        przycisk.textContent = 'Kliknij mnie';
    }
});
</code></pre>



<h4 class="wp-block-heading" style="font-size:20px">Rodzaje zdarzeń które poznałam</h4>



<p class="wp-block-paragraph"><strong>Zdarzenia myszy:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>element.addEventListener('click', funkcja);        // kliknięcie
element.addEventListener('mouseover', funkcja);     // najechanie myszką
element.addEventListener('mouseout', funkcja);      // zjechanie myszką
element.addEventListener('dblclick', funkcja);      // podwójne kliknięcie
</code></pre>



<p class="wp-block-paragraph"><strong>Zdarzenia klawiatury:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>element.addEventListener('keydown', funkcja);       // naciśnięcie klawisza
element.addEventListener('keyup', funkcja);          // puszczenie klawisza
</code></pre>



<p class="wp-block-paragraph"><strong>Zdarzenia formularzy:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>formularz.addEventListener('submit', funkcja);       // wysłanie formularza
input.addEventListener('input', funkcja);             // zmiana wartości podczas pisania
input.addEventListener('change', funkcja);            // zmiana wartości (po opuszczeniu pola)
</code></pre>



<p class="wp-block-paragraph"><strong>Zdarzenia strony:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>window.addEventListener('load', funkcja);             // strona się załadowała
window.addEventListener('scroll', funkcja);            // przewinięcie strony
window.addEventListener('resize', funkcja);            // zmiana rozmiaru okna
</code></pre>



<h3 class="wp-block-heading" style="font-size:22px">Obiekt zdarzenia &#8211; dodatkowe informacje o tym, co się stało</h3>



<p class="wp-block-paragraph">Kiedy funkcja obsługująca zdarzenie się uruchamia, automatycznie dostaje dostęp do <strong>obiektu zdarzenia</strong> &#8211; zawierającego szczegółowe informacje o tym, co dokładnie się wydarzyło.</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>przycisk.addEventListener('click', function(zdarzenie) {
    console.log(zdarzenie.target);        // który element został kliknięty
    console.log(zdarzenie.clientX);       // pozycja X kursora
    console.log(zdarzenie.clientY);       // pozycja Y kursora
});
</code></pre>



<p class="wp-block-paragraph"><strong>Praktyczne zastosowanie &#8211; walidacja formularza podczas pisania:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>const inputEmail = document.getElementById('email');
const komunikat = document.getElementById('komunikatEmail');

inputEmail.addEventListener('input', function(zdarzenie) {
    const wartosc = zdarzenie.target.value;

    if (wartosc.includes('@')) {
        komunikat.textContent = 'Wygląda dobrze!';
        komunikat.style.color = 'zielony';
    } else {
        komunikat.textContent = 'Brakuje znaku @';
        komunikat.style.color = 'czerwony';
    }
});
</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #3:</strong> &#8222;Mogę sprawdzać co użytkownik pisze W CZASIE RZECZYWISTYM, bez klikania jakiegokolwiek przycisku 'sprawdź&#8217;?!&#8221;</p>



<p class="wp-block-paragraph">To był moment, który uświadomił mi, dlaczego nowoczesne formularze internetowe pokazują błędy na bieżąco, zamiast dopiero po wysłaniu.</p>



<h3 class="wp-block-heading" style="font-size:22px">Mój pierwszy prawdziwy projekt interaktywny &#8211; lista zadań</h3>



<p class="wp-block-paragraph">Po dwóch tygodniach nauki manipulacji DOM i zdarzeń, zbudowałam mój pierwszy w pełni interaktywny projekt &#8211; <strong>prostą listę zadań (to-do list)</strong>.</p>



<p class="wp-block-paragraph"><strong>HTML:</strong></p>



<p class="wp-block-paragraph">html</p>



<pre class="wp-block-code"><code>&lt;div class="kontener"&gt;
    &lt;h1&gt;Moja Lista Zadań&lt;/h1&gt;
    &lt;div class="formularz"&gt;
        &lt;input type="text" id="noweZadanie" placeholder="Wpisz zadanie..."&gt;
        &lt;button id="dodajPrzycisk"&gt;Dodaj&lt;/button&gt;
    &lt;/div&gt;
    &lt;ul id="listaZadan"&gt;&lt;/ul&gt;
&lt;/div&gt;
</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>const input = document.getElementById('noweZadanie');
const przyciskDodaj = document.getElementById('dodajPrzycisk');
const lista = document.getElementById('listaZadan');

function dodajZadanie() {
    const tresc = input.value.trim();

// Walidacja - nie dodawaj pustych zadań
    if (tresc === '') {
        alert('Wpisz treść zadania!');
        return;
    }

// Tworzenie nowego elementu listy
    const nowyElement = document.createElement('li');
    nowyElement.classList.add('zadanie');

// Tekst zadania
    const tekstZadania = document.createElement('span');
    tekstZadania.textContent = tresc;

// Przycisk oznaczenia jako wykonane
    const przyciskWykonaj = document.createElement('button');
    przyciskWykonaj.textContent = '✓';
    przyciskWykonaj.classList.add('przycisk-wykonaj');

    przyciskWykonaj.addEventListener('click', function() {
        tekstZadania.classList.toggle('wykonane');
    });

// Przycisk usunięcia
    const przyciskUsun = document.createElement('button');
    przyciskUsun.textContent = '✗';
    przyciskUsun.classList.add('przycisk-usun');

    przyciskUsun.addEventListener('click', function() {
        nowyElement.remove();
    });

// Składanie wszystkiego razem
    nowyElement.appendChild(tekstZadania);
    nowyElement.appendChild(przyciskWykonaj);
    nowyElement.appendChild(przyciskUsun);
    lista.appendChild(nowyElement);

// Czyszczenie inputu po dodaniu
    input.value = '';
    input.focus();
}

// Dodawanie przez kliknięcie przycisku
przyciskDodaj.addEventListener('click', dodajZadanie);

// Dodawanie przez naciśnięcie Enter
input.addEventListener('keydown', function(zdarzenie) {
    if (zdarzenie.key === 'Enter') {
        dodajZadanie();
    }
});
</code></pre>



<p class="wp-block-paragraph"><strong>Co się nauczyłam budując ten projekt:</strong></p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Łączenie manipulacji DOM z obsługą zdarzeń</strong> &#8211; to nie są osobne tematy, tylko dwa elementy tej samej całości</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Tworzenie zagnieżdżonych elementów dynamicznie</strong> (element wewnątrz elementu wewnątrz elementu)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Wielokrotne nasłuchiwacze zdarzeń</strong> na różnych elementach jednocześnie</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong><code>trim()</code></strong> &#8211; usuwanie białych znaków z początku/końca tekstu (zapobiega dodawaniu &#8222;pustych&#8221; zadań ze spacjami)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong><code>zdarzenie.key</code></strong> &#8211; sprawdzanie, który konkretnie klawisz został naciśnięty</li>
</ul>



<p class="wp-block-paragraph"><strong>Czas realizacji:</strong> 3 godziny (rozłożone na trzy dni po godzinie)</p>



<p class="wp-block-paragraph"><strong>Porównanie:</strong> Pierwszy mini-projekt w lipcu (kalkulator) zajął mi 2 godziny, ale był statyczny w tym sensie, że nie tworzył nowych elementów. Lista zadań to pierwszy raz, kiedy strona <strong>rozrasta się i zmienia strukturę</strong> w odpowiedzi na to, co robi użytkownik.</p>



<h3 class="wp-block-heading" style="font-size:22px">Wyzwania techniczne &#8211; co sprawiało najwięcej trudności</h3>



<h4 class="wp-block-heading" style="font-size:20px">1. Zrozumienie <code>this</code> wewnątrz nasłuchiwaczy zdarzeń</h4>



<p class="wp-block-paragraph"><strong>Problem:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>przycisk.addEventListener('click', function() {
    console.log(this); // co to jest "this"?
});
</code></pre>



<p class="wp-block-paragraph">W kontekście nasłuchiwacza zdarzenia, <code>this</code> odnosi się do elementu, na którym zdarzenie zostało zarejestrowane (czyli do samego przycisku).</p>



<p class="wp-block-paragraph"><strong>Ale przy funkcji strzałkowej (arrow function) <code>this</code> zachowuje się inaczej:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>przycisk.addEventListener('click', () =&gt; {
    console.log(this); // to NIE jest przycisk, tylko kontekst zewnętrzny
});
</code></pre>



<p class="wp-block-paragraph"><strong>Lekcja:</strong> Przy pracy z DOM i zdarzeniami, zwykłe funkcje (<code>function() {}</code>) i funkcje strzałkowe (<code>() =&gt; {}</code>) zachowują się różnie względem <code>this</code>. To był mylący temat przez dobry tydzień.</p>



<h4 class="wp-block-heading" style="font-size:20px">2. Event bubbling &#8211; &#8222;wypływanie&#8221; zdarzeń</h4>



<p class="wp-block-paragraph"><strong>Problem:</strong> Kliknięcie na przycisk wewnątrz elementu <code>&lt;li&gt;</code> uruchamiało nasłuchiwacz zarejestrowany na samym <code>&lt;li&gt;</code>, mimo że kliknęłam tylko przycisk.</p>



<p class="wp-block-paragraph"><strong>Wyjaśnienie:</strong> Zdarzenia w DOM &#8222;wypływają&#8221; od elementu, na którym się wydarzyły, w górę przez wszystkich rodziców w strukturze drzewa.</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>lista.addEventListener('click', function(zdarzenie) {
    console.log(zdarzenie.target); // dokładny element, który został kliknięty
    console.log(zdarzenie.currentTarget); // element, na którym zarejestrowano nasłuchiwacz
});
</code></pre>



<p class="wp-block-paragraph"><strong>Praktyczne zastosowanie &#8211; delegacja zdarzeń (event delegation):</strong></p>



<p class="wp-block-paragraph">Zamiast dodawać osobny nasłuchiwacz do każdego elementu listy (co jest nieefektywne przy dynamicznie dodawanych elementach), dodaje się JEDEN nasłuchiwacz do rodzica i sprawdza, co dokładnie zostało kliknięte:</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>lista.addEventListener('click', function(zdarzenie) {
    if (zdarzenie.target.classList.contains('przycisk-usun')) {
        zdarzenie.target.closest('.zadanie').remove();
    }
});
</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #4, ale w dobrym sensie:</strong> Ta technika rozwiązała problem, z którym walczyłam tydzień wcześniej, próbując dodawać nasłuchiwacze do elementów tworzonych dynamicznie.</p>



<h4 class="wp-block-heading" style="font-size:20px">3. Zapobieganie domyślnemu zachowaniu przeglądarki</h4>



<p class="wp-block-paragraph"><strong>Problem:</strong> Formularz po wysłaniu odświeżał całą stronę, co usuwało wszystkie wprowadzone dane.</p>



<p class="wp-block-paragraph"><strong>Rozwiązanie:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>formularz.addEventListener('submit', function(zdarzenie) {
    zdarzenie.preventDefault(); // blokuje domyślne odświeżenie strony
// reszta logiki obsługi formularza
});
</code></pre>



<p class="wp-block-paragraph"><strong>Lekcja:</strong> Wiele elementów HTML ma wbudowane &#8222;domyślne zachowanie&#8221; (formularz wysyła i odświeża stronę, link przenosi na inną stronę). <code>preventDefault()</code> pozwala przejąć kontrolę i zdecydować, co ma się stać zamiast tego.</p>



<h3 class="wp-block-heading" style="font-size:22px">Momenty &#8222;wow&#8221; &#8211; lista moich ulubionych</h3>



<p class="wp-block-paragraph">Podsumowując te dwa tygodnie nauki, oto konkretne momenty, które sprawiły, że poczułam prawdziwą radość z programowania:</p>



<p class="wp-block-paragraph"><strong>1. Pierwszy klik konsoli</strong> &#8211; kiedy <code>console.log('Kliknięto!')</code> faktycznie się pojawił po kliknięciu przycisku</p>



<p class="wp-block-paragraph"><strong>2. Zmiana koloru w czasie rzeczywistym</strong> &#8211; przycisk zmieniający kolor tła po kliknięciu, bez odświeżania strony</p>



<p class="wp-block-paragraph"><strong>3. Tworzenie elementów, których nigdy nie było w HTML</strong> &#8211; dodanie nowego zadania do listy, które fizycznie nie istniało w pliku HTML</p>



<p class="wp-block-paragraph"><strong>4. Walidacja na żywo</strong> &#8211; komunikat błędu pojawiający się i znikający, kiedy piszę w polu formularza, bez klikania czegokolwiek</p>



<p class="wp-block-paragraph"><strong>5. Delegacja zdarzeń działająca poprawnie</strong> &#8211; moment, kiedy zrozumiałam, dlaczego mój kod przestał działać po dodaniu nowych elementów, i jak to naprawić jednym uniwersalnym nasłuchiwaczem</p>



<p class="wp-block-paragraph"><strong>6. Ukończona lista zadań</strong> &#8211; moment, kiedy mogłam dodać zadanie, oznaczyć je jako wykonane, i usunąć &#8211; wszystko bez odświeżania strony ani jednej linijki PHP</p>



<h3 class="wp-block-heading" style="font-size:22px">Zasoby, które pomogły mi zrozumieć DOM i zdarzenia</h3>



<h4 class="wp-block-heading" style="font-size:20px">1. <a href="http://JavaScript.info">JavaScript.info</a> &#8211; rozdział &#8222;Document&#8221; (★★★★★)</h4>



<p class="wp-block-paragraph">Najbardziej szczegółowe i zrozumiałe wyjaśnienie manipulacji DOM, jakie znalazłam. Wracałam do niego wielokrotnie.</p>



<h4 class="wp-block-heading" style="font-size:20px">2. MDN Web Docs &#8211; dokumentacja Event (★★★★★)</h4>



<p class="wp-block-paragraph">Kiedy potrzebowałam sprawdzić, jakie właściwości ma dany typ zdarzenia (np. co dokładnie zawiera obiekt zdarzenia przy <code>keydown</code>), dokumentacja MDN była niezastąpiona.</p>



<h4 class="wp-block-heading" style="font-size:20px">3. Traversy Media &#8211; &#8222;JavaScript DOM Crash Course&#8221; (★★★★★)</h4>



<p class="wp-block-paragraph">Godzinny film, który pokazuje budowanie kilku małych projektów interaktywnych na żywo. Zobaczenie procesu myślowego kogoś doświadczonego bardzo pomogło mi zrozumieć, jak łączyć poszczególne koncepty.</p>



<h4 class="wp-block-heading" style="font-size:20px">4. FreeCodeCamp &#8211; sekcja &#8222;DOM Manipulation&#8221; (★★★★☆)</h4>



<p class="wp-block-paragraph">Ćwiczenia praktyczne z natychmiastową weryfikacją. Trochę oderwane od kontekstu (pojedyncze zadania, nie cały projekt), ale świetne do utrwalenia składni.</p>



<h3 class="wp-block-heading" style="font-size:22px">Plany na wrzesień-październik &#8211; co dalej</h3>



<p class="wp-block-paragraph"><strong>Tydzień 1-2 września:</strong></p>



<ul class="wp-block-list">
<li>Dokończenie tematu zdarzeń (event delegation, custom events)</li>



<li>Rozbudowa listy zadań o zapisywanie w localStorage</li>
</ul>



<p class="wp-block-paragraph"><strong>Tydzień 3-4 września:</strong></p>



<ul class="wp-block-list">
<li>Fetch API &#8211; pobieranie danych z zewnętrznych źródeł</li>



<li>Praca z JSON w JavaScript</li>
</ul>



<p class="wp-block-paragraph"><strong>Październik:</strong></p>



<ul class="wp-block-list">
<li>Pierwsze starcie z asynchronicznością (promises, async/await)</li>



<li>Może pierwszy kontakt z React, jeśli poczuję się gotowa</li>
</ul>



<p class="wp-block-paragraph"><strong>Cel realistyczny:</strong> Do końca września chcę umieć budować w pełni funkcjonalne, interaktywne komponenty dla stron klientów &#8211; formularze z walidacją, proste kalkulatory, dynamiczne galerie.</p>



<h3 class="wp-block-heading" style="font-size:22px">FAQ &#8211; manipulacja DOM i zdarzenia w JavaScript</h3>



<h4 class="wp-block-heading" style="font-size:20px">Czy manipulacja DOM to to samo co React/Vue?</h4>



<p class="wp-block-paragraph">Nie, ale jest fundamentem, na którym te frameworki się opierają. React i Vue &#8222;pod maską&#8221; też manipulują DOM, tylko robią to bardziej efektywnie i za pomocą swojej własnej, uproszczonej składni. Zrozumienie czystego (vanilla) DOM znacznie ułatwia późniejszą naukę frameworków.</p>



<h4 class="wp-block-heading" style="font-size:20px">Czy potrzebuję znać jQuery, żeby manipulować DOM?</h4>



<p class="wp-block-paragraph">Nie. jQuery było popularne, kiedy natywne API JavaScript do manipulacji DOM było bardziej niewygodne. Dzisiaj nowoczesny JavaScript (metody jak <code>querySelector</code>, <code>classList</code>, <code>addEventListener</code>) jest wystarczająco przyjazny, że jQuery stało się w dużej mierze zbędne dla nowych projektów.</p>



<h4 class="wp-block-heading" style="font-size:20px">Ile czasu zajęła Ci nauka tego tematu?</h4>



<p class="wp-block-paragraph">Około dwóch tygodni intensywniejszej nauki (po powrocie do pełnego tempa po wakacjach) &#8211; łącznie może 12-15 godzin, plus dodatkowy czas na budowę projektu listy zadań.</p>



<h4 class="wp-block-heading" style="font-size:20px">Co było najtrudniejsze w tym temacie?</h4>



<p class="wp-block-paragraph">Zdecydowanie zrozumienie <strong>event bubbling i delegacji zdarzeń</strong>. To jest koncept, który na papierze brzmi prosto, ale dopóki nie napotkałam realnego problemu (nasłuchiwacz nie działający na dynamicznie dodanych elementach), nie rozumiałam, po co to jest potrzebne.</p>



<h4 class="wp-block-heading" style="font-size:20px">Czy manipulacja DOM jest przydatna, jeśli pracuję głównie z WordPressem?</h4>



<p class="wp-block-paragraph">Zdecydowanie tak. Nawet przy pracy z gotowym CMS-em, umiejętność dodania własnego, lekkiego JavaScript do konkretnych interakcji (zamiast instalowania kolejnej wtyczki) to ogromna przewaga &#8211; i pod względem wydajności strony, i pod względem tego, co możesz zaoferować klientom.</p>



<h3 class="wp-block-heading" style="font-size:22px">Podsumowanie &#8211; Learning Log #7</h3>



<p class="wp-block-paragraph"><strong>Manipulacja DOM i zdarzenia w JavaScript</strong> to temat, który zmienił moje rozumienie tego, czym w ogóle jest programowanie frontendowe. Wcześniej JavaScript był dla mnie &#8222;kolejnym językiem ze składnią podobną do Javy&#8221;. Teraz jest <strong>narzędziem, które sprawia, że strony internetowe żyją</strong>.</p>



<p class="wp-block-paragraph"><strong>Co osiągnęłam:</strong></p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Rozumiem czym jest DOM i jak przeglądarka go tworzy</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Potrafię wyszukiwać, tworzyć i modyfikować elementy dynamicznie</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Rozumiem nasłuchiwacze zdarzeń i obiekt zdarzenia</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Znam delegację zdarzeń i wiem, kiedy jej używać</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Zbudowałam pierwszy w pełni interaktywny projekt (lista zadań)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Widzę bezpośrednie zastosowanie w pracy freelance</li>
</ul>



<p class="wp-block-paragraph"><strong>Najważniejsza lekcja tego etapu:</strong></p>



<p class="wp-block-paragraph"><strong>Programowanie frontendowe to nie pisanie kodu, który &#8222;coś robi&#8221;. To pisanie kodu, który reaguje.</strong></p>



<p class="wp-block-paragraph">Ten przycisk, który zmienia kolor po kliknięciu &#8211; to nie jest wielka rzecz techniczna. Ale to jest moment, w którym zrozumiałam, dlaczego ludzie kochają programowanie frontendu: <strong>piszesz coś, i to coś odpowiada Ci na żywo</strong>.</p>



<p class="wp-block-paragraph">Po wakacyjnej przerwie i strategii mikroedukacji, wrzesień przywrócił mi pełne tempo &#8211; i przyniósł jeden z najbardziej satysfakcjonujących etapów nauki do tej pory.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>PS: Pamiętasz swój pierwszy moment &#8222;wow&#8221; w programowaniu? Co to było? A jeśli dopiero zaczynasz naukę DOM i zdarzeń &#8211; z czym masz największe trudności? Zostaw komentarz, chętnie pomogę albo po prostu poczuję się mniej samotna w tym zachwycie nad zmieniającym kolor przyciskiem!</em></p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/learning-log-7-javascript-dom-zdarzenia-interaktywnosc/">Learning Log #7: JavaScript &#8211; manipulacja DOM, zdarzenia i pierwsza prawdziwa interaktywność</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/learning-log-7-javascript-dom-zdarzenia-interaktywnosc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Nauka programowania w wakacje &#8211; czy da się utrzymać nawyk?</title>
		<link>https://www.danuta-cybulska.com/nauka-programowania-w-wakacje-jak-utrzymac-nawyk/</link>
					<comments>https://www.danuta-cybulska.com/nauka-programowania-w-wakacje-jak-utrzymac-nawyk/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Wed, 19 Aug 2026 16:00:00 +0000</pubDate>
				<category><![CDATA[LearningLog]]></category>
		<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[Atomic Habits]]></category>
		<category><![CDATA[budowanie nawyków]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mama programuje]]></category>
		<category><![CDATA[mikroedukacja]]></category>
		<category><![CDATA[motywacja do nauki]]></category>
		<category><![CDATA[nauka programowania]]></category>
		<category><![CDATA[nawyki naukowe]]></category>
		<category><![CDATA[organizacja czasu latem]]></category>
		<category><![CDATA[produktywność]]></category>
		<category><![CDATA[wakacje]]></category>
		<guid isPermaLink="false">https://www.danuta-cybulska.com/?p=5991</guid>

					<description><![CDATA[<p>Jest połowa sierpnia. Otwieram laptopa, żeby kontynuować naukę JavaScript. Ostatni raz pisałam kod&#8230; siedem dni temu. Siedem dni. W lipcu byłam dumna z serii 45 dni z rzędu. Teraz patrzę na pusty plik script.js i czuję coś między winą a rezygnacją. Nauka programowania w wakacje brzmi pięknie w teorii &#8211; &#8222;więcej czasu, luźniejszy grafik, może...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/nauka-programowania-w-wakacje-jak-utrzymac-nawyk/">Nauka programowania w wakacje &#8211; czy da się utrzymać nawyk?</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Jest połowa sierpnia. Otwieram laptopa, żeby kontynuować naukę JavaScript. Ostatni raz pisałam kod&#8230; siedem dni temu.</p>



<p class="wp-block-paragraph">Siedem dni. W lipcu byłam dumna z serii 45 dni z rzędu. Teraz patrzę na pusty plik <code>script.js</code> i czuję coś między winą a rezygnacją.</p>



<p class="wp-block-paragraph"><strong>Nauka programowania w wakacje</strong> brzmi pięknie w teorii &#8211; &#8222;więcej czasu, luźniejszy grafik, może nawet uda się przyspieszyć&#8221;. Rzeczywistość: mniej czasu (szkoła zamknięta), więcej rozpraszaczy (upał, wyjazdy, dzieci non-stop w domu) i harmonogram, który sypie się codziennie.</p>



<p class="wp-block-paragraph">Dziś, po dwóch miesiącach prób i błędów, dzielę się tym, co faktycznie zadziałało &#8211; i czego się nauczyłam o <strong>utrzymywaniu nawyku nauki</strong>, kiedy wszystkie zewnętrzne struktury znikają.</p>



<h3 class="wp-block-heading" style="font-size:20px">Dlaczego wakacje są tak trudne dla nawyku nauki</h3>



<h4 class="wp-block-heading" style="font-size:18px">Problem 1: Znika struktura zewnętrzna</h4>



<p class="wp-block-paragraph">Przez rok szkolny mój dzień ma naturalne bloki: szkoła 8:00-16:00 = okno na pracę i naukę. Wakacje = zero tej struktury.</p>



<p class="wp-block-paragraph"><strong>Skutek:</strong> Muszę SAMA tworzyć strukturę, zamiast korzystać z gotowej. To wymaga dodatkowej energii mentalnej, której mam mniej (bo jestem non-stop z dziećmi).</p>



<h4 class="wp-block-heading" style="font-size:18px">Problem 2: Siła woli jest już wyczerpana na coś innego</h4>



<p class="wp-block-paragraph">Wcześniej pisałam o wyczerpaniu siły woli (willpower depletion) w kontekście wieczornej nauki. W wakacje ten mechanizm działa cały dzień, nie tylko wieczorem.</p>



<p class="wp-block-paragraph">Każda decyzja &#8211; jak zająć dzieci, jak poradzić sobie z przegrzaniem, jak nie zwariować od hałasu &#8211; zużywa tę samą pulę zasobów, której potrzebuję do nauki kodu.</p>



<h4 class="wp-block-heading" style="font-size:18px">Problem 3: Rozpraszacze są dosłownie w tym samym pokoju</h4>



<p class="wp-block-paragraph">W roku szkolnym: cisza, mogę się skupić 50 minut bez przerwy.</p>



<p class="wp-block-paragraph">W wakacje: dziecko przychodzi co 8-12 minut. Nie da się wejść w głęboki stan skupienia (deep focus), bo mózg cały czas jest w trybie czuwania na przerwanie.</p>



<h4 class="wp-block-heading" style="font-size:18px">Problem 4: Poczucie winy w obie strony</h4>



<p class="wp-block-paragraph">To był dla mnie największy problem psychologiczny. Kiedy się uczę &#8211; czuję się winna, że &#8222;zaniedbuję&#8221; dziecko w wakacje. Kiedy nie się uczę &#8211; czuję się winna, że &#8222;marnuję czas&#8221; i &#8222;tracę momentum&#8221;.</p>



<p class="wp-block-paragraph"><strong>Efekt:</strong> Zamiast cieszyć się ani jednym, ani drugim, czułam ciągły niepokój.</p>



<h3 class="wp-block-heading" style="font-size:20px">Co NIE zadziałało &#8211; moje błędy z lipca</h3>



<h4 class="wp-block-heading" style="font-size:18px">Błąd 1: Utrzymywanie tego samego celu co w roku szkolnym</h4>



<p class="wp-block-paragraph">W czerwcu uczyłam się 1h dziennie. W lipcu próbowałam utrzymać ten sam cel.</p>



<p class="wp-block-paragraph"><strong>Rezultat:</strong> Porażka za porażką. Codzienne niepowodzenie w osiągnięciu celu = frustracja = w końcu całkowita rezygnacja (te siedem dni przerwy).</p>



<h4 class="wp-block-heading" style="font-size:18px">Błąd 2: Sztywne trzymanie się jednej pory dnia</h4>



<p class="wp-block-paragraph">Moja &#8222;złota godzina&#8221; (14:00-15:00) w wakacje po prostu nie istnieje. Dzieci o tej porze są najbardziej aktywne, najmniej skłonne do samodzielnej zabawy.</p>



<p class="wp-block-paragraph">Próbowałam wciskać naukę w ten slot mimo wszystko. Efekt: 10 minut skupienia, 40 minut frustracji.</p>



<h4 class="wp-block-heading" style="font-size:18px">Błąd 3: Traktowanie każdej przerwanej sesji jako porażki</h4>



<p class="wp-block-paragraph">Dziecko przerywa po 15 minutach? W mojej głowie: &#8222;No i po nauce, cały dzień stracony.&#8221;</p>



<p class="wp-block-paragraph">To binarne myślenie (&#8222;albo pełna sesja, albo nic&#8221;) sabotowało mnie bardziej niż same przerwania.</p>



<h4 class="wp-block-heading" style="font-size:18px">Błąd 4: Brak planu na &#8222;zero energii&#8221;</h4>



<p class="wp-block-paragraph">Zakładałam, że zawsze będę miała choć trochę energii na naukę. Ale niektóre dni wakacyjne &#8211; te po nieprzespanej nocy, po długim upale, po trudnym zachowaniu dzieci &#8211; zostawiają zero.</p>



<p class="wp-block-paragraph">Bez planu B, te dni = całkowita rezygnacja zamiast małego kroku.</p>



<h3 class="wp-block-heading" style="font-size:20px">Strategie mikroedukacji, które faktycznie zadziałały</h3>



<p class="wp-block-paragraph">Po tygodniu przerwy usiadłam i przeprojektowałam całe podejście. Oto co wprowadziłam w sierpniu i co realnie działa.</p>



<h4 class="wp-block-heading" style="font-size:18px">1. Redukcja celu o 80%, nie o 20%</h4>



<p class="wp-block-paragraph">Zamiast &#8222;1h dziennie zamiast 1h dziennie, ale postaram się bardziej&#8221;, zrobiłam radykalne cięcie:</p>



<p class="wp-block-paragraph"><strong>Nowy cel wakacyjny: 10 minut dziennie.</strong></p>



<p class="wp-block-paragraph">Brzmi śmiesznie mało? To jest clou strategii. <strong>Mikroedukacja</strong> (microlearning) polega na tym, żeby cel był tak mały, że niemożliwość jego osiągnięcia praktycznie nie istnieje.</p>



<p class="wp-block-paragraph"><strong>Efekt psychologiczny:</strong> 10 minut nauki JavaScript codziennie = utrzymanie nawyku = poczucie sukcesu, zamiast codziennej porażki przy celu 1h.</p>



<h4 class="wp-block-heading" style="font-size:18px">2. Elastyczna pora zamiast sztywnego bloku</h4>



<p class="wp-block-paragraph">Zamiast &#8222;14:00-15:00 zawsze&#8221;, wprowadziłam zasadę: &#8222;gdziekolwiek znajdę 10 minut, tam się uczę&#8221;.</p>



<p class="wp-block-paragraph"><strong>Realne przykłady z ostatniego tygodnia:</strong></p>



<ul class="wp-block-list">
<li>6:40 rano, zanim dzieci się obudziły &#8211; 15 minut czytania dokumentacji na telefonie</li>



<li>12:30, dzieci oglądają bajkę podczas obiadu &#8211; 10 minut ćwiczenia na FreeCodeCamp</li>



<li>21:15, po położeniu dzieci, zanim opadłam z sił &#8211; 20 minut kodowania</li>
</ul>



<p class="wp-block-paragraph"><strong>Kluczowa zmiana myślenia:</strong> Nauka nie ma jednego &#8222;właściwego&#8221; momentu w wakacje. Ma dowolny moment, w którym się pojawia okazja.</p>



<h4 class="wp-block-heading" style="font-size:18px">3. Zadania podzielone na fragmenty 5-10 minutowe</h4>



<p class="wp-block-paragraph">Przeprojektowałam sposób planowania nauki. Zamiast &#8222;dzisiaj zrobię moduł o pętlach w JavaScript&#8221; (który wymaga 45 minut skupienia), dzielę na:</p>



<ul class="wp-block-list">
<li>Fragment 1 (10 min): Przeczytać teorię o pętli <code>for</code></li>



<li>Fragment 2 (10 min): Zobaczyć 2 przykłady kodu</li>



<li>Fragment 3 (10 min): Napisać jeden własny przykład</li>



<li>Fragment 4 (10 min): Rozwiązać jedno zadanie ćwiczeniowe</li>
</ul>



<p class="wp-block-paragraph">Każdy fragment jest samodzielną jednostką &#8211; mogę go zrobić w dowolnej kolejności, w dowolnym momencie, i przerwanie po jednym fragmencie nie niszczy niczego, bo to nie jest &#8222;połowa czegoś&#8221;, tylko &#8222;cały mały kawałek&#8221;.</p>



<h4 class="wp-block-heading" style="font-size:18px">4. Nauka pasywna podczas aktywności rodzinnych</h4>



<p class="wp-block-paragraph">To była dla mnie rewelacja. Zamiast traktować naukę i czas z dzieckiem jako całkowicie rozłączne kategorie, znalazłam formę nauki, która współistnieje z byciem rodzicem.</p>



<p class="wp-block-paragraph"><strong>Podcasty i audiobooki o programowaniu</strong> podczas:</p>



<ul class="wp-block-list">
<li>Spaceru z dzieckiem do parku (20-30 minut)</li>



<li>Jazdy samochodem na wycieczki (nawet godzina!)</li>



<li>Gotowania obiadu (dziecko bawi się obok)</li>
</ul>



<p class="wp-block-paragraph">Nie piszę wtedy kodu, ale słucham o konceptach, wyjaśnieniach, historiach z branży. To nie zastępuje praktycznej nauki, ale <strong>utrzymuje mózg w kontakcie z tematem</strong>, co znacznie ułatwia powrót do praktycznej nauki.</p>



<h4 class="wp-block-heading" style="font-size:18px">5. Notatki głosowe zamiast pisania</h4>



<p class="wp-block-paragraph">Kiedy mam pomysł albo &#8222;aha moment&#8221; podczas dnia, ale nie mogę usiąść przy laptopie &#8211; nagrywam 30-sekundową notatkę głosową na telefonie.</p>



<p class="wp-block-paragraph"><strong>Przykład notatki:</strong> &#8222;Pamiętać &#8211; destructuring w JavaScript to jak wyciąganie zmiennych z obiektu jednocześnie, muszę to przetestować z tablicą zagnieżdżoną&#8221;</p>



<p class="wp-block-paragraph">Wieczorem, w swoich 10-20 minutach, odtwarzam notatki i przekuwam je w konkretną naukę. To zapobiega utracie przelotnych myśli, które inaczej by zniknęły bezpowrotnie.</p>



<h4 class="wp-block-heading" style="font-size:18px">6. &#8222;Sesja ratunkowa&#8221; na dni zero energii</h4>



<p class="wp-block-paragraph">Wprowadziłam plan B dla dni, kiedy dosłownie nie ma siły na nic.</p>



<p class="wp-block-paragraph"><strong>Sesja ratunkowa = 3 minuty.</strong></p>



<p class="wp-block-paragraph">To może być:</p>



<ul class="wp-block-list">
<li>Przeczytanie jednego akapitu z dokumentacji</li>



<li>Przejrzenie własnych notatek z poprzedniego tygodnia</li>



<li>Obejrzenie 3-minutowego fragmentu tutorialu</li>
</ul>



<p class="wp-block-paragraph"><strong>Cel nie jest nauka nowej wiedzy.</strong> Cel to utrzymanie kontaktu z tematem, żeby nawyk fizycznie nie umarł.</p>



<p class="wp-block-paragraph"><strong>Efekt:</strong> W ciągu sześciu tygodni wakacji miałam może 4 dni z &#8222;sesją ratunkową&#8221; zamiast pełnego zera. To 4 dni więcej momentum niż gdybym całkowicie odpuściła.</p>



<h3 class="wp-block-heading" style="font-size:20px">Jak wygląda mój wakacyjny tydzień teraz &#8211; konkretny przykład</h3>



<p class="wp-block-paragraph"><strong>Poniedziałek:</strong></p>



<ul class="wp-block-list">
<li>6:45 &#8211; 15 min czytania dokumentacji (telefon, jeszcze w łóżku)</li>



<li>13:00 &#8211; 10 min ćwiczeń praktycznych (dziecko na drzemce, ale krótko)</li>



<li><strong>Total: 25 minut</strong></li>
</ul>



<p class="wp-block-paragraph"><strong>Wtorek (dzień wyjazdu do rodziny &#8211; mało czasu):</strong></p>



<ul class="wp-block-list">
<li>3 minuty sesji ratunkowej wieczorem</li>



<li><strong>Total: 3 minuty</strong></li>
</ul>



<p class="wp-block-paragraph"><strong>Środa:</strong></p>



<ul class="wp-block-list">
<li>30 min podcastu podczas spaceru z dzieckiem (nauka pasywna)</li>



<li>10 min notatek wieczorem na podstawie tego co usłyszałam</li>



<li><strong>Total: 40 minut (w tym 30 pasywnych)</strong></li>
</ul>



<p class="wp-block-paragraph"><strong>Czwartek (bardzo trudny dzień, dziecko chore):</strong></p>



<ul class="wp-block-list">
<li>0 minut &#8211; kompletna rezygnacja, i to jest OK</li>
</ul>



<p class="wp-block-paragraph"><strong>Piątek:</strong></p>



<ul class="wp-block-list">
<li>20 min rano (dziecko wstało później niż zwykle)</li>



<li>15 min wieczorem</li>



<li><strong>Total: 35 minut</strong></li>
</ul>



<p class="wp-block-paragraph"><strong>Sobota-niedziela (rodzina, mniej struktury):</strong></p>



<ul class="wp-block-list">
<li>Sobota: 10 min sesji ratunkowej</li>



<li>Niedziela: 0 minut</li>
</ul>



<p class="wp-block-paragraph"><strong>Tygodniowy total: ~113 minut (niecałe 2 godziny)</strong></p>



<p class="wp-block-paragraph"><strong>Porównanie z rokiem szkolnym:</strong> W czerwcu miałam ~420 minut tygodniowo (7h). To jest <strong>75% mniej</strong>.</p>



<p class="wp-block-paragraph"><strong>Czy to problem?</strong> Nie tak, jak myślałam. Bo najważniejsza rzecz się utrzymała: <strong>nawyk siadania do nauki nie umarł całkowicie</strong>.</p>



<h3 class="wp-block-heading" style="font-size:20px">Dlaczego małe kroki wystarczą &#8211; nauka z psychologii nawyków</h3>



<p class="wp-block-paragraph">W jednej z moich ulubionych książek o budowaniu nawyków pojawia się zasada: &#8222;nie przegap dwa razy z rzędu&#8221;. Jedna przegapiona sesja to wypadek. Dwie z rzędu to zaczątek nowego (złego) nawyku.</p>



<p class="wp-block-paragraph"><strong>W wakacje zastosowałam tę zasadę dosłownie.</strong></p>



<p class="wp-block-paragraph">Kiedy miałam dzień zero (jak ten czwartek z chorym dzieckiem), następnego dnia MUSIAŁAM zrobić choćby sesję ratunkową &#8211; 3 minuty. Nie dla wiedzy. Dla utrzymania łańcucha (streak).</p>



<p class="wp-block-paragraph"><strong>Dlaczego to działa psychologicznie:</strong></p>



<p class="wp-block-paragraph">Mózg nie rozróżnia dobrze między &#8222;10 minut nauki&#8221; a &#8222;1 godzina nauki&#8221; jeśli chodzi o <strong>utrzymanie identyfikacji z rolą</strong>. Jeśli codziennie robisz cokolwiek związanego z programowaniem, Twój mózg wciąż kategoryzuje Cię jako &#8222;osobę, która się uczy programowania&#8221;.</p>



<p class="wp-block-paragraph">Jeśli robisz przerwę na dwa tygodnie, ta identyfikacja zaczyna się rozmywać. Wracasz nie jako &#8222;osoba wracająca do rutyny&#8221;, ale jako &#8222;osoba zaczynająca od nowa&#8221; &#8211; co jest znacznie trudniejsze psychologicznie.</p>



<h3 class="wp-block-heading" style="font-size:20px">Co się dzieje z postępem technicznym przy tak małych dawkach</h3>



<p class="wp-block-paragraph">Uczciwie: <strong>postęp techniczny jest wolniejszy.</strong> Nie oszukujmy się.</p>



<p class="wp-block-paragraph">W czerwcu przerabiałam jeden moduł kursu JavaScript tygodniowo. W wakacje &#8211; jeden moduł na dwa-trzy tygodnie.</p>



<p class="wp-block-paragraph"><strong>Ale jest różnica między &#8222;wolniejszy postęp&#8221; a &#8222;brak postępu&#8221;.</strong></p>



<p class="wp-block-paragraph">Gdybym całkowicie przerwała na dwa miesiące wakacji, wrzesień oznaczałby:</p>



<ul class="wp-block-list">
<li>Zapomnienie sporej części tego, czego się nauczyłam</li>



<li>Konieczność &#8222;rozgrzewki&#8221; przez tydzień-dwa, zanim wrócę do pełnej produktywności</li>



<li>Utratę pewności siebie (&#8222;czy ja w ogóle to jeszcze umiem?&#8221;)</li>
</ul>



<p class="wp-block-paragraph">Z mikroedukacją, mimo wolniejszego tempa:</p>



<ul class="wp-block-list">
<li>Materiał się nie zapomina (bo mam z nim kontakt co kilka dni)</li>



<li>Wrzesień będzie płynnym przyspieszeniem, nie startem od zera</li>



<li>Pewność siebie zostaje (&#8222;uczę się, tylko wolniej&#8221;)</li>
</ul>



<h3 class="wp-block-heading" style="font-size:20px">Rozpraszacze &#8211; jak sobie z nimi radzę</h3>



<h4 class="wp-block-heading" style="font-size:18px">Upał</h4>



<p class="wp-block-paragraph">Sierpień w Polsce potrafi być dokuszający. Kiedy jest 32 stopnie, a klimatyzacji brak, koncentracja spada drastycznie.</p>



<p class="wp-block-paragraph"><strong>Moje rozwiązanie:</strong> Przenoszę naukę na najchłodniejsze godziny (wczesny ranek, późny wieczór). W środku dnia, kiedy jest najgoręcej, robię tylko naukę pasywną (podcasty) albo nic.</p>



<h4 class="wp-block-heading" style="font-size:18px">Wyjazdy i zmiana otoczenia</h4>



<p class="wp-block-paragraph">Podczas tygodnia nad morzem (opisywałam to w poprzednim wpisie o planie na wakacje) całkowicie odpuściłam naukę. To był świadomy wybór &#8211; urlop to urlop.</p>



<p class="wp-block-paragraph"><strong>Ale:</strong> Przed wyjazdem i po powrocie zrobiłam &#8222;sesje przejściowe&#8221; &#8211; krótkie przypomnienie tego, co robiłam wcześniej, żeby ułatwić powrót.</p>



<h4 class="wp-block-heading" style="font-size:18px">Zmęczenie fizyczne</h4>



<p class="wp-block-paragraph">To był mój największy wróg. Po całym dniu z aktywnym dzieckiem, wieczorem mam dosłownie zero energii mentalnej.</p>



<p class="wp-block-paragraph"><strong>Rozwiązanie:</strong> Przesunęłam część nauki na rano, kiedy jestem świeższa, zamiast walczyć z wieczornym wyczerpaniem.</p>



<h4 class="wp-block-heading" style="font-size:18px">Media społecznościowe jako ucieczka</h4>



<p class="wp-block-paragraph">Kiedy jestem zmęczona, naturalny odruch to sięgnięcie po telefon i scrollowanie, nie nauka.</p>



<p class="wp-block-paragraph"><strong>Rozwiązanie:</strong> Ustawiłam limit czasu na aplikacjach społecznościowych (30 minut dziennie) w telefonie. Kiedy limit się kończy, telefon pyta &#8222;czy na pewno chcesz kontynuować&#8221; &#8211; to małe tarcie często wystarcza, żeby zamiast tego sięgnąć po notatki z JavaScript.</p>



<h3 class="wp-block-heading" style="font-size:20px">Kiedy warto całkowicie odpuścić &#8211; i dlaczego to jest OK</h3>



<p class="wp-block-paragraph">Ważne zastrzeżenie: <strong>nie każdy dzień musi mieć choćby 3 minuty.</strong></p>



<p class="wp-block-paragraph">Tydzień nad morzem &#8211; zero nauki, i uważam to za słuszną decyzję. Dni kiedy dzieci są naprawdę chore, kiedy sama jestem wyczerpana emocjonalnie, kiedy coś poważnego się dzieje w rodzinie &#8211; <strong>całkowita rezygnacja to nie porażka, to zdrowy rozsądek.</strong></p>



<p class="wp-block-paragraph"><strong>Różnica między &#8222;świadomą przerwą&#8221; a &#8222;utratą nawyku&#8221;:</strong></p>



<p class="wp-block-paragraph">Świadoma przerwa: &#8222;Dzisiaj/w tym tygodniu odpuszczam, bo [konkretny powód], i wrócę [konkretny plan powrotu].&#8221;</p>



<p class="wp-block-paragraph">Utrata nawyku: &#8222;Nie uczę się, bo&#8230; nie wiem, jakoś nie wyszło, może jutro, może pojutrze&#8221; (bez konkretnego planu powrotu).</p>



<p class="wp-block-paragraph">Pierwsza opcja jest częścią zdrowego podejścia. Druga to ślizganie się w kierunku całkowitego porzucenia.</p>



<h3 class="wp-block-heading" style="font-size:20px">FAQ &#8211; nauka programowania w wakacjach</h3>



<h4 class="wp-block-heading" style="font-size:18px">Czy 10 minut dziennie naprawdę coś daje?</h4>



<p class="wp-block-paragraph">Tak, ale inaczej niż myślisz. Nie chodzi o ilość przyswojonej wiedzy w tych 10 minutach &#8211; chodzi o <strong>utrzymanie neuronalnych ścieżek aktywnymi</strong> i <strong>zachowanie tożsamości &#8222;osoby uczącej się&#8221;</strong>. To fundament, na którym łatwo odbudować pełne tempo we wrześniu.</p>



<h4 class="wp-block-heading" style="font-size:18px">Czy nie lepiej zrobić sobie prawdziwą przerwę od nauki na całe wakacje?</h4>



<p class="wp-block-paragraph">Dla niektórych osób &#8211; tak, i to jest w pełni uzasadniony wybór. Jeśli wiesz, że łatwo Ci wrócić do nawyku po dłuższej przerwie, pełna przerwa może być zdrowsza niż wymuszanie mikrosesji.</p>



<p class="wp-block-paragraph">Dla mnie, po doświadczeniu tych siedmiu dni całkowitej przerwy w lipcu, wiem, że łatwiej jest utrzymać choćby minimalny kontakt niż zaczynać kompletnie od nowa.</p>



<h4 class="wp-block-heading" style="font-size:18px">Jak przekonać się psychicznie, że 10 minut &#8222;się liczy&#8221;?</h4>



<p class="wp-block-paragraph">Zmiana definicji sukcesu. Sukces w wakacje to nie &#8222;ile się nauczyłam&#8221;, tylko &#8222;czy nawyk przetrwał&#8221;. Przy takiej definicji, 10 minut codziennie to pełny sukces, nie kompromis.</p>



<h4 class="wp-block-heading" style="font-size:18px">Co z nauką z dzieckiem obok &#8211; czy to w ogóle możliwe?</h4>



<p class="wp-block-paragraph">Częściowo tak. Nauka pasywna (podcasty, audiobooki) działa świetnie przy dziecku w tle. Nauka aktywna (pisanie kodu) wymaga chwil, kiedy dziecko jest zajęte samo sobą &#8211; drzemka, zabawa, bajka. To nieregularne okna, ale realnie istnieją, jeśli się na nie czeka zamiast planować sztywno.</p>



<h4 class="wp-block-heading" style="font-size:18px">Czy warto zmieniać temat nauki latem na coś &#8222;lżejszego&#8221;?</h4>



<p class="wp-block-paragraph">To zależy od osoby. Ja zostałam przy JavaScript, ale obniżyłam intensywność. Niektórzy wolą latem czytać książki o programowaniu (bez praktyki) zamiast pisać kod &#8211; to też forma utrzymania kontaktu z tematem, mniej wymagająca energetycznie.</p>



<h3 class="wp-block-heading" style="font-size:20px">Podsumowanie &#8211; czy da się utrzymać momentum w wakacje</h3>



<p class="wp-block-paragraph"><strong>Krótka odpowiedź: tak, ale nie w tej samej formie co w roku szkolnym.</strong></p>



<p class="wp-block-paragraph"><strong>Kluczowe zasady, które wprowadziłam:</strong></p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Redukcja celu o 80%</strong> (z 60 minut do 10 minut dziennie)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Elastyczna pora zamiast sztywnego slotu</strong> &#8211; uczę się gdziekolwiek znajdę okazję</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Zadania podzielone na fragmenty 5-10 minutowe</strong> &#8211; łatwiej wcisnąć w krótkie okna</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Nauka pasywna podczas aktywności rodzinnych</strong> &#8211; podcasty na spacerze, w aucie</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Notatki głosowe</strong> &#8211; zapisuję przelotne myśli, przetwarzam wieczorem</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Sesja ratunkowa (3 minuty)</strong> na dni zero energii &#8211; utrzymuje łańcuch nawyku</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Świadome przerwy są OK</strong> &#8211; tydzień urlopu bez poczucia winy</li>
</ul>



<p class="wp-block-paragraph"><strong>Nauka programowania w wakacje</strong> to nie kwestia &#8222;utrzymać tempo z roku szkolnego za wszelką cenę&#8221;. To kwestia znalezienia minimalnej dawki, która utrzymuje nawyk żywym, bez wywoływania chronicznego poczucia winy czy wypalenia.</p>



<p class="wp-block-paragraph">Wrzesień przyjdzie. Szkoła będzie. Struktura wróci. A ja będę miała za sobą nie &#8222;stracone lato&#8221;, tylko <strong>wolniejsze, ale ciągłe lato</strong> &#8211; z nawykiem, który przetrwał, mimo wszystkich przeszkód.</p>



<p class="wp-block-paragraph">To wystarczy.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>PS: Też walczysz z utrzymaniem nauki (programowania, języka, czegokolwiek) w wakacje? Jakie strategie u Ciebie działają? Podziel się w komentarzu &#8211; potrzebujemy nawzajem swojego wsparcia w tym sezonie chaosu!</em></p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/nauka-programowania-w-wakacje-jak-utrzymac-nawyk/">Nauka programowania w wakacje &#8211; czy da się utrzymać nawyk?</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/nauka-programowania-w-wakacje-jak-utrzymac-nawyk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Learning Log #6: Java vs JavaScript &#8211; zaczynam drugi język programowania</title>
		<link>https://www.danuta-cybulska.com/learning-log-6-java-vs-javascript-drugi-jezyk/</link>
					<comments>https://www.danuta-cybulska.com/learning-log-6-java-vs-javascript-drugi-jezyk/#comments</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 08:00:00 +0000</pubDate>
				<category><![CDATA[LearningLog]]></category>
		<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[drugi język programowania]]></category>
		<category><![CDATA[freeCodeCamp]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java vs JavaScript]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[learning log]]></category>
		<category><![CDATA[nauka JavaScript]]></category>
		<category><![CDATA[nauka programowania]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[różnice Java JavaScript]]></category>
		<category><![CDATA[vanilla JavaScript]]></category>
		<category><![CDATA[web development]]></category>
		<guid isPermaLink="false">https://www.danuta-cybulska.com/?p=5978</guid>

					<description><![CDATA[<p>Poniedziałek, 1 lipca 2026. Otwieram nowy projekt w VS Code. Nie IntelliJ (Java IDE). VS Code. Tworzę plik: index.html. Potem script.js. Nie .java. Zaczynam naukę JavaScript. Po 6 miesiącach z Javą (styczeń-czerwiec 2026) postanowiłam dodać drugi język. Dlaczego JavaScript? Dlaczego teraz? Czy Java mi pomoże czy przeszkodzi? Trzy tygodnie później (dziś) mogę powiedzieć: nauka drugiego...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/learning-log-6-java-vs-javascript-drugi-jezyk/">Learning Log #6: Java vs JavaScript &#8211; zaczynam drugi język programowania</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Poniedziałek, 1 lipca 2026. Otwieram nowy projekt w VS Code. Nie IntelliJ (Java IDE). VS Code.</p>



<p class="wp-block-paragraph">Tworzę plik: <code>index.html</code>. Potem <code>script.js</code>. Nie <code>.java</code>.</p>



<p class="wp-block-paragraph"><strong>Zaczynam naukę JavaScript.</strong></p>



<p class="wp-block-paragraph">Po 6 miesiącach z Javą (styczeń-czerwiec 2026) postanowiłam dodać drugi język. Dlaczego JavaScript? Dlaczego teraz? Czy Java mi pomoże czy przeszkodzi?</p>



<p class="wp-block-paragraph">Trzy tygodnie później (dziś) mogę powiedzieć: <strong>nauka drugiego języka programowania jest ZUPEŁNIE inna</strong> niż nauki pierwszego. Masz fundamenty (zmienne, pętle, funkcje), ale szczegóły są diametralnie różne. To jak uczyć się francuskiego po hiszpańskim &#8211; podobne, ale gwarantowany chaos w głowie.</p>



<p class="wp-block-paragraph">Dziś w <strong>Learning Log #6</strong> opowiem Wam dlaczego wybrałam JavaScript, jak zaczynałam, co jest podobne do Javy (więcej niż myślałam!), co kompletnie inne (WTF momenty!), i jakie zasoby do nauki wykorzystuję.</p>



<h2 class="wp-block-heading" style="font-size:22px">Dlaczego JavaScript? Decyzja strategiczna</h2>



<h3 class="wp-block-heading" style="font-size:20px">Opcje, które rozważałam po zakończeniu podstaw Java:</h3>



<p class="wp-block-paragraph"><strong> 1: Spring Framework (kontynuacja Java)</strong></p>



<ul class="wp-block-list">
<li><strong>Zalety:</strong> Naturalna progresja, rozwój zaplecza, rynek pracy</li>



<li><strong>Wady:</strong> Ciężkie przy dzieciach, wymaga dużo czasu</li>
</ul>



<p class="wp-block-paragraph"><strong> 2: Python</strong></p>



<ul class="wp-block-list">
<li><strong>Zalety:</strong> Łatwy, wszechstronny, data science, automatyzacja</li>



<li><strong>Wady:</strong> Zero synergii z WordPressem</li>
</ul>



<p class="wp-block-paragraph"><strong>3: JavaScript</strong></p>



<ul class="wp-block-list">
<li><strong>Zalety:</strong> OGROMNA synergia z WordPress, umiejętności front-endowe, natychmiastowe wykorzystanie, lżejszy niż Spring</li>



<li><strong>Wady:</strong> &#8222;Dziwny język&#8221; (słyszałam), może mylące po Javie</li>
</ul>



<p class="wp-block-paragraph"><strong>Wybrałam JavaScript. Dlaczego:</strong></p>



<h3 class="wp-block-heading" style="font-size:20px">1. Synergia z WordPressem</h3>



<p class="wp-block-paragraph"><strong>Aktualnie:</strong> Robię strony WordPress z page builderami (Elementor)</p>



<ul class="wp-block-list">
<li>Mało custom kodu</li>



<li>Ograniczone możliwości</li>



<li>Nie mogę zrobić custom funkcjonalności, które bym chciała</li>
</ul>



<p class="wp-block-paragraph"><strong>Z JavaScriptem:</strong> Mogę dodawać:</p>



<ul class="wp-block-list">
<li>Niestandardowe interakcje (animacje, efekty)</li>



<li>Formularze zaawansowane (walidacja, multi-step)</li>



<li>Kalkulatory (cenniki dynamiczne)</li>



<li>Niestandardowa funkcjonalność (cokolwiek wymyślę)</li>
</ul>



<h3 class="wp-block-heading" style="font-size:22px">2. Natychmiastowe praktyczne zastosowanie</h3>



<p class="wp-block-paragraph"><strong>Java projekt:</strong> Therapy Manager &#8211; używam tylko ja<br><strong>JavaScript:</strong> Mogę użyć w KAŻDYM projekcie dla każdego od jutra</p>



<p class="wp-block-paragraph"><strong>Motywacja:</strong> Widzę natychmiastowy rezultat = łatwiej się uczyć</p>



<h3 class="wp-block-heading" style="font-size:20px">3. Łatwiejszy balans życie/nauka niż Spring</h3>



<p class="wp-block-paragraph"><strong>Spring:</strong> Wymaga 20-30h tygodniowo, żeby ogarnąć (backend, bazy danych, API, deployment)<br><strong>JavaScript:</strong> Mogę uczyć się 1h dziennie i widzieć progres</p>



<p class="wp-block-paragraph"><strong>Z dziećmi:</strong> JavaScript = realistyczne, Spring = przytłaczający</p>



<h3 class="wp-block-heading" style="font-size:20px">4. Umiejętności frontendowe można sprzedać</h3>



<p class="wp-block-paragraph"><strong>Backend (Java/Spring):</strong> Duża konkurencja, wymaga doświadczenia<br><strong>Frontend (JS/React):</strong> Też konkurencja, ale łatwiej pokazać portfolio (strony działają w przeglądarce)</p>



<p class="wp-block-paragraph"><strong>Perspektywa freelancera:</strong> Frontend łatwiej &#8222;sprzedać&#8221; klientom (widzą efekt natychmiast)</p>



<h2 class="wp-block-heading" style="font-size:22px">Pierwsze kroki &#8211; od czego zaczęłam</h2>



<h3 class="wp-block-heading" style="font-size:20px">Tydzień 1 (1-7 lipca): Setup i podstawy składni</h3>



<p class="wp-block-paragraph"><strong>Narzędzia, które zainstalowałam:</strong></p>



<p class="wp-block-paragraph"><strong>1. VS Code</strong> (zamiast IntelliJ)</p>



<ul class="wp-block-list">
<li>Lekki, szybki</li>



<li><strong>Rozszerzenia: </strong>ESLint, Prettier, Live Server</li>



<li><strong>Czas setup:</strong> 30 minut</li>
</ul>



<p class="wp-block-paragraph"><strong>2. Node.js</strong></p>



<ul class="wp-block-list">
<li>Do uruchamiania JS poza przeglądarką</li>



<li>Package manager (npm) &#8211; jak Maven dla Javy</li>



<li><strong>Instalacja:</strong> 10 minut</li>
</ul>



<p class="wp-block-paragraph"><strong>3. Chrome DevTools</strong></p>



<ul class="wp-block-list">
<li>Już miałam (przeglądarka)</li>



<li>Konsola do testowania kodu</li>



<li>Debugger</li>
</ul>



<p class="wp-block-paragraph"><strong>Total setup:</strong> 1 godzina (vs Java było 3 godziny &#8211; IntelliJ, JDK, Maven)</p>



<p class="wp-block-paragraph"><strong>Pierwszy program &#8211; Hello World:</strong></p>



<p class="wp-block-paragraph"><strong>Java (dla porównania):</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`public class HelloWorld {
    public static void main(String&#91;] args) {
        System.out.println("Hello World");
    }
}`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code><code>console.log("Hello World");</code></code></pre>



<p class="wp-block-paragraph"><strong>Reakcja:</strong> &#8222;WAIT, to wszystko?! Gdzie klasa? Gdzie main?&#8221;</p>



<p class="wp-block-paragraph"><strong>Welcome to JavaScript &#8211; język bez szablonów.</strong></p>



<h3 class="wp-block-heading" style="font-size:20px">Mój plan nauki JavaScript:</h3>



<p class="wp-block-paragraph"><strong>1. Fundamenty (lipiec):</strong></p>



<ul class="wp-block-list">
<li>Składnia (zmienne, typy, operatory)</li>



<li>Funkcje i scope</li>



<li>Tablice i obiekty</li>



<li>DOM manipulation (zmiana HTML/CSS przez JS)</li>
</ul>



<p class="wp-block-paragraph"><strong>2. Średniozaawansowany (sierpień):</strong></p>



<ul class="wp-block-list">
<li>ES6+ funkcje (funkcje strzałkowe, destrukturyzacja, promises)</li>



<li>Asynchroniczność (async/await, fetch API)</li>



<li>Events i event handling</li>
</ul>



<p class="wp-block-paragraph"><strong>3. Framework (wrzesień &#8211; może):</strong></p>



<ul class="wp-block-list">
<li>React basics</li>



<li>Albo zostać przy vanilla JS (czystym JS) i opanować dobrze</li>
</ul>



<p class="wp-block-paragraph"><strong>Źródła nauki:</strong></p>



<ul class="wp-block-list">
<li><strong>FreeCodeCamp</strong> (darmowy kurs online) &#8211; główne</li>



<li><strong><a href="http://JavaScript.info">JavaScript.info</a></strong> (dokumentacja) &#8211; odniesienie</li>



<li><strong>YouTube:</strong> Traversy Media, Web Dev Simplified</li>



<li><strong>Praktyka:</strong> Projekty WordPress</li>
</ul>



<p class="wp-block-paragraph"><strong>Czas:</strong> 1h dziennie (vs Java było 1.5h) = lżejsze podejście</p>



<h2 class="wp-block-heading" style="font-size:22px">Co jest PODOBNE do Javy &#8211; zaskakujący!</h2>



<h3 class="wp-block-heading" style="font-size:20px">1. Fundamenty programowania (koncepcje)</h3>



<p class="wp-block-paragraph"><strong>Zmienne:</strong></p>



<p class="wp-block-paragraph"><strong>Java:</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code><code>int age = 30; </code>
<code>String name = "Anna"; </code>
<code>boolean isActive = true;</code></code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code><code>let age = 30; </code>
<code>let name = "Anna"; </code>
<code>let isActive = true;</code></code></pre>



<p class="wp-block-paragraph"><strong>Podobne:</strong> Koncept zmiennej, przechowywanie wartości<br><strong>Różne:</strong> <code>let</code> zamiast typu (<code>int</code>, <code>String</code>), JS = dynamicznie typowane</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>Pętle:</strong></p>



<p class="wp-block-paragraph"><strong>Java:</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`for (int i = 0; i &lt; 5; i++) {
    System.out.println(i);
}`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`for (let i = 0; i &lt; 5; i++) {
    console.log(i);
}`</code></pre>



<p class="wp-block-paragraph"><strong>Identyczne!</strong> (prawie &#8211; <code>let</code> zamiast <code>int</code>)</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>Warunki:</strong></p>



<p class="wp-block-paragraph"><strong>Java:</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`if (age > 18) {
    System.out.println("Adult");
} else {
    System.out.println("Minor");
}`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`if (age > 18) {
    console.log("Adult");
} else {
    console.log("Minor");
}`</code></pre>



<p class="wp-block-paragraph"><strong>Identyczne!</strong> (prawie &#8211; <code>console.log</code> zamiast <code>System.out.println</code>)</p>



<p class="wp-block-paragraph"><strong>Spostrzeżenia:</strong> Fundamenty są takie same. Java nauczyła mnie myślenia programistycznego &#8211; to przenosi się 1:1 do JS.</p>



<h3 class="wp-block-heading" style="font-size:20px">2. Funkcje (podobne, ale&#8230;)</h3>



<p class="wp-block-paragraph"><strong>Java (metoda):</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`public int add(int a, int b) {
    return a + b;
}`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript (funkcja):</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`function add(a, b) {
    return a + b;
}`</code></pre>



<p class="wp-block-paragraph"><strong>Podobne:</strong></p>



<ul class="wp-block-list">
<li>Słowo kluczowe <code>function</code> (vs <code>public int</code> w Javie)</li>



<li>Instrukcja: Return</li>



<li>Parametry</li>
</ul>



<p class="wp-block-paragraph"><strong>Różne:</strong></p>



<ul class="wp-block-list">
<li>Brak typów (a, b &#8211; nie wiesz czy int, string, object)</li>



<li>Brak modyfikatory dostępu (public, private)</li>
</ul>



<h3 class="wp-block-heading" style="font-size:20px">3. Tablice (arrays)</h3>



<p class="wp-block-paragraph"><strong>Java:</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`int&#91;] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers&#91;0]); // 1`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`let numbers = &#91;1, 2, 3, 4, 5];
console.log(numbers&#91;0]); // 1`</code></pre>



<p class="wp-block-paragraph"><strong>Prawie identyczne!</strong></p>



<p class="wp-block-paragraph"><strong>Różnica:</strong> JS arrays są bardziej elastyczne (możesz mix typów)</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`let mixed = &#91;1, "two", true, {name: "Anna"}]; // OK w JS
// W Javie: BŁĄD (tablica musi mieć jeden typ)`</code></pre>



<h3 class="wp-block-heading" style="font-size:20px">4. Obiekty vs Klasy</h3>



<p class="wp-block-paragraph"><strong>Java (klasa):</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`public class Person {<br>private String name;<br>private int age;<br><br>public Person(String name, int age) {<br>    this.name = name;<br>    this.age = age;<br>}<br><br>public String getName() {<br>    return name;<br>}<br><br>}<br><br>Person person = new Person("Anna", 30);`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript (obiekt):</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`const person = {
    name: "Anna",
    age: 30,
    getName: function() {
        return this.name;
    }
};`</code></pre>



<p class="wp-block-paragraph"><strong>Podobne:</strong> Koncept &#8222;obiektu&#8221; (dane + metody)<br><strong>Różne:</strong> JS nie wymaga klasy! (można tworzyć obiekty dosłownie)</p>



<p class="wp-block-paragraph"><strong>JavaScript ma też klasy (ES6):</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`class Person {<br>constructor(name, age) {<br><a href="http://this.name">this.name</a> = name;<br>this.age = age;<br>}<br><br>getName() {<br>    return this.name;<br>}<br><br>}<br><br>const person = new Person("Anna", 30);`</code></pre>



<p class="wp-block-paragraph"><strong>To wygląda prawie jak Java!</strong> Ale pod spodem JS działa inaczej (prototypy, nie prawdziwe klasy).</p>



<h2 class="wp-block-heading" style="font-size:22px">Co jest KOMPLETNIE RÓŻNE &#8211; WTF momenty</h2>



<h3 class="wp-block-heading" style="font-size:20px">1. Typy dynamiczne (loosely typed)</h3>



<p class="wp-block-paragraph"><strong>Java:</strong> Statycznie typowane</p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`int number = 5;
number = "Hello"; // BŁĄD kompilacji!`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong> Dynamicznie typowane</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`let number = 5;
number = "Hello"; // OK! &#x1f631;
console.log(number); // "Hello"`</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #1:</strong> &#8222;Czekaj, mogę zmienić typ zmiennej w trakcie?!&#8221;</p>



<p class="wp-block-paragraph"><strong>Plusy</strong> Elastyczność, mniej kodu<br><strong>Minusy:</strong> Błędy runtime (nie kompilacji), trudniejszy debugging</p>



<p class="wp-block-paragraph"><strong>Moja reakcja:</strong> Początkowo mylące. Teraz doceniam elastyczność, ale brakuje bezpieczeństwa typu Java.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" style="font-size:20px">2. <code>==</code> vs <code>===</code> (porównywanie)</h3>



<p class="wp-block-paragraph"><strong>Java:</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`int a = 5;
int b = 5;
if (a == b) { } // true`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`let a = 5;<br>let b = "5";<br><br>console.log(a == b); // true &#x1f631; (porównuje wartość, konwertuje typy)<br>console.log(a === b); // false (porównuje wartość I typ)`</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #2:</strong> &#8222;Czemu jest DWA operatory porównania?!&#8221;</p>



<p class="wp-block-paragraph"><strong>Zasada:</strong> W JS ZAWSZE używaj <code>===</code> (ścisła równość), nigdy <code>==</code> (luźna równość)</p>



<p class="wp-block-paragraph"><strong>Przykład dlaczego:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`console.log(0 == false);  // true &#x1f631;
console.log(0 === false); // false (poprawnie!)`</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" style="font-size:20px">3. <code>var</code> vs <code>let</code> vs <code>const</code> (szaleństwo zakresów)</h3>



<p class="wp-block-paragraph"><strong>Java:</strong> Wszystko ma zakres bloku</p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`{
    int x = 5;
}
System.out.println(x); // BŁĄD - x nie istnieje poza blokiem`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong> <code>var</code> ma zakres funkcji (WTF), <code>let</code>/<code>const</code> mają zakres bloku</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`// VAR (stary sposób - unikaj!)<br>function test() {<br>if (true) {<br>var x = 5;<br>}<br>console.log(x); // 5 &#x1f631; (x istnieje poza if!)<br>}<br><br>// LET (nowy sposób - używaj!)<br>function test() {<br>if (true) {<br>let y = 5;<br>}<br>console.log(y); // ERROR (jak w Javie - dobrze!)<br>}`</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #3:</strong> &#8222;Czemu <code>var</code> działa inaczej niż w normalnym języku?!&#8221;</p>



<p class="wp-block-paragraph"><strong>Zasada:</strong> Nigdy nie używaj <code>var</code>. Zawsze <code>let</code> (zmienne) lub <code>const</code> (stałe).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" style="font-size:20px">4. Hoisting (podnoszenie deklaracji)</h3>



<p class="wp-block-paragraph"><strong>Java:</strong> Musisz zadeklarować zmienną PRZED użyciem</p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`System.out.println(x); // BŁĄD - x nie istnieje
int x = 5;`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong> Deklaracje są &#8222;podnoszone&#8221; na górę</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`console.log(x); // undefined (nie błąd!) &#x1f631;
var x = 5;`</code></pre>



<p class="wp-block-paragraph">Co się dzieje:</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`// JS interpretuje to jako:
var x; // deklaracja "podniesiona"
console.log(x); // undefined
x = 5; // przypisanie`</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #4:</strong> &#8222;Jak to możliwe, że kod działa, ale źle?!&#8221;</p>



<p class="wp-block-paragraph"><strong>Z <code>let</code> jest lepiej:</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code><code>console.log(y); // ERROR (jak w Javie) </code>
<code>let y = 5;</code></code></pre>



<p class="wp-block-paragraph"><strong>Zasada:</strong> Używaj <code>let</code>/<code>const</code>, unikaj <code>var</code> = unikasz problemy z podnoszeniem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" style="font-size:20px">5. Funkcje są &#8222;first-class citizens&#8221; (obiekty pierwszej klasy)</h3>



<p class="wp-block-paragraph"><strong>Java:</strong> Funkcje (metody) należą do klas. Nie możesz przekazać metody jak zmienną.</p>



<p class="wp-block-paragraph"><strong>JavaScript:</strong> Funkcje można przypisać do zmiennej, przekazać jako argument, zwrócić z funkcji</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`// Funkcja w zmiennej<br>const sayHello = function() {<br>console.log("Hello");<br>};<br><br>// Przekazanie funkcji jako argument<br>function greet(name, callback) {<br>console.log("Hi " + name);<br>callback();<br>}<br><br>greet("Anna", sayHello);<br>// Output:<br>// Hi Anna<br>// Hello`</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #5:</strong> &#8222;Funkcja w zmiennej?! Funkcja jako parametr?!&#8221;</p>



<p class="wp-block-paragraph"><strong>Java odpowiednik (rodzaj):</strong></p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code>`// Java 8+ lambda
Runnable sayHello = () -> System.out.println("Hello");
sayHello.run();`</code></pre>



<p class="wp-block-paragraph"><strong>Podobne:</strong> Java lambdy, ale w JS to jest główna funkcja, w Javie dodane później.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" style="font-size:20px">6. <code>undefined</code> vs <code>null</code> (dwa &#8222;nic&#8221;)</h3>



<p class="wp-block-paragraph"><strong>Java:</strong> <code>null</code> (tylko jeden &#8222;brak wartości&#8221;)</p>



<p class="wp-block-paragraph"><strong>JavaScript:</strong> <code>undefined</code> I <code>null</code> (dwa różne &#8222;nic&#8221;)</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`let a; // zadeklarowana, nie przypisana<br>console.log(a); // undefined<br><br>let b = null; // explicite "brak wartości"<br>console.log(b); // null<br><br>console.log(typeof a); // "undefined"<br>console.log(typeof b); // "object" &#x1f631; (JS bug od początku języka)`</code></pre>



<p class="wp-block-paragraph"><strong>WTF moment #6:</strong> &#8222;Czemu DWA rodzaje 'nic&#8217;?! I czemu typeof null to 'object&#8217;?!&#8221;</p>



<p class="wp-block-paragraph"><strong>Zasada:</strong></p>



<ul class="wp-block-list">
<li><code>undefined</code> = JS default (zmienna istnieje, nie ma wartości)</li>



<li><code>null</code> = programista wyraźnie mówi &#8222;tutaj jest nic&#8221;</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" style="font-size:20px">7. Brak TypeScript (ale mogę użyć później)</h3>



<p class="wp-block-paragraph"><strong>Java:</strong> Kompilator sprawdza typy PRZED uruchomieniem</p>



<p class="wp-block-paragraph">java</p>



<pre class="wp-block-code"><code><code>int x = "Hello"; // BŁĄD kompilacji</code></code></pre>



<p class="wp-block-paragraph"><strong>JavaScript:</strong> Błędy widoczne DOPIERO w runtime</p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code><code>let x = 5; </code>
<code>x.toUpperCase(); // ERROR runtime! (number nie ma toUpperCase)</code></code></pre>



<p class="wp-block-paragraph"><strong>Problem:</strong> Łatwo zrobić błąd, który widzisz dopiero, gdy uruchamiasz.</p>



<p class="wp-block-paragraph"><strong>Rozwiązanie:</strong> TypeScript (JavaScript + typy)</p>



<p class="wp-block-paragraph">typescript</p>



<pre class="wp-block-code"><code><code>let x: number = 5; </code>
<code>x = "Hello"; // BŁĄD kompilacji (jak Java!)</code></code></pre>



<p class="wp-block-paragraph"><strong>Mój plan:</strong> Najpierw opanuję vanilla JS, potem może TypeScript (wrzesień-październik).</p>



<h2 class="wp-block-heading" style="font-size:22px">Pierwszy mini-projekt w JavaScript &#8211; Kalkulator interaktywny</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Po tygodniu nauki</strong> (7.07) zrobiłam pierwszy mini-projekt.</p>



<p class="wp-block-paragraph"><strong>Co:</strong> Kalkulator terapii &#8211; użytkownik wpisuje liczbę sesji i koszt, dostaje podsumowanie</p>



<p class="wp-block-paragraph"><strong>Technologie:</strong></p>



<ul class="wp-block-list">
<li>HTML (struktura)</li>



<li>CSS (wygląd)</li>



<li>JavaScript (logika)</li>
</ul>



<p class="wp-block-paragraph"><strong>HTML:</strong></p>



<p class="wp-block-paragraph">html</p>



<pre class="wp-block-code"><code>`&lt;!DOCTYPE html><br>&lt;html><br>&lt;head><br>&lt;title>Therapy Cost Calculator&lt;/title><br>&lt;link rel="stylesheet" href="style.css"><br>&lt;/head><br>&lt;body><br>&lt;div class="calculator"><br>&lt;h1>Kalkulator Kosztów Terapii&lt;/h1><br><br>    &lt;label>Liczba sesji miesięcznie:&lt;/label><br>    &lt;input type="number" id="sessions" placeholder="np. 8"><br>    <br>    &lt;label>Koszt jednej sesji (zł):&lt;/label><br>    &lt;input type="number" id="costPerSession" placeholder="np. 75"><br>    <br>    &lt;button onclick="calculateTotal()">Oblicz&lt;/button><br>    <br>    &lt;div id="result">&lt;/div><br>&lt;/div><br><br>&lt;script src="script.js">&lt;/script><br><br>&lt;/body><br>&lt;/html>`</code></pre>



<p class="wp-block-paragraph"><strong>JavaScript (script.js):</strong></p>



<p class="wp-block-paragraph">javascript</p>



<pre class="wp-block-code"><code>`function calculateTotal() {
// Pobierz wartości z inputów
const sessions = document.getElementById('sessions').value;
const costPerSession = document.getElementById('costPerSession').value;

// Walidacja
if (!sessions || !costPerSession) {
    alert('Wypełnij oba pola!');
    return;
}

if (sessions &lt;= 0 || costPerSession &lt;= 0) {
    alert('Liczby muszą być większe od zera!');
    return;
}

// Kalkulacja
const total = sessions * costPerSession;

// Wyświetl wynik
const resultDiv = document.getElementById('result');
resultDiv.innerHTML = `
    &lt;h2>Wynik:&lt;/h2>
    &lt;p>&lt;strong>Sesji:&lt;/strong> ${sessions}&lt;/p>
    &lt;p>&lt;strong>Koszt sesji:&lt;/strong> ${costPerSession} zł&lt;/p>
    &lt;p class="total">&lt;strong>TOTAL:&lt;/strong> ${total} zł/miesiąc&lt;/p>
`;
}</code></pre>



<p class="wp-block-paragraph"><br>Co się nauczyłam:<br><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong> Manipulacja DOM</strong> &#8211; `document.getElementById()`<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Obsługa zdarzeń</strong> &#8211; `onclick=&#8221;calculateTotal()&#8221;`<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Walidacja danych wejściowych</strong> &#8211; sprawdzanie czy pola wypełnione<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Szablony literałów</strong> &#8211; &#8222; `${variable}` &#8222; (lepsze niż konkatenacja)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong> Debugging</strong> &#8211; Chrome DevTools console<br><br><strong>Czas:</strong> 2 godziny od zera do działającego projektu<br><br><strong>Porównanie z Javą:</strong><br>&#8211; Java projekt (Therapy Manager): 55 godzin<br>&#8211; JS projekt (Kalkulator): 2 godziny<br><br><strong>Różnica:</strong> JS =natychmiastowa gratyfikacja (widzisz w przeglądarce od razu), Java = długi proces, ale solidniejszy fundament.</p>



<h2 class="wp-block-heading" style="font-size:22px">Zasoby nauki JavaScript &#8211; co NAPRAWDĘ używam</h2>



<h4 class="wp-block-heading" style="font-size:18px"> 1. FreeCodeCamp (★★★★★)</h4>



<pre class="wp-block-code"><code><strong>Link:</strong> <a href="https://freecodecamp.org">freecodecamp.org</a>

<strong>Co:</strong> Darmowy kurs "JavaScript Algorithms and Data Structures"

<strong>Format: </strong>
- Krótkie lekcje (5-10 min)
- Wyzwania (zadania do rozwiązania)
- Projekty na końcu sekcji

<strong>Dlaczego działa:</strong>
- Interaktywny (piszesz kod w przeglądarce)
- Natychmiastowa informacja zwrotna(widzisz czy poprawnie)
- Darmowe (100%)

<strong>Mój progres:</strong> 30% kursu (3 tygodnie)

<strong>Czas:</strong> 1h dziennie</code></pre>



<h4 class="wp-block-heading" style="font-size:18px">2. JavaScript.info (★★★★★)</h4>



<pre class="wp-block-code"><code><strong>Link:</strong> <a href="https://javascript.info">javascript.info</a>

<strong>Co: </strong>Dokumentacja/tutorial JavaScript - od podstaw do zaawansowanych
<strong>
Format:</strong>
- Artykuły (szczegółowe wyjaśnienia)
- Przykłady kodu
- Zadania na końcu rozdziałów

<strong>Dlaczego używam:</strong>
- Wyczerpujący (wszystko w jednym miejscu)
- Dobrze wyjaśnia "dlaczego", nie tylko "jak"
- Darmowe

<strong>Jak używam:</strong> Odniesienie, gdy czegoś nie rozumiem z FreeCodeCamp</code></pre>



<h4 class="wp-block-heading" style="font-size:18px">3. YouTube &#8211; Traversy Media (★★★★☆)</h4>



<pre class="wp-block-code"><code><strong>Kanał:</strong> <a href="https://www.youtube.com/@TraversyMedia">Traversy Media</a>

<strong>Co:</strong> Tutoriale JavaScript, projekty, web development

<strong>Format:</strong> Video tutorials (30-60 min)

<strong>Ulubione video:</strong>
- "JavaScript Crash Course For Beginners" - 1h 40min
- "Build a Calculator with JavaScript" - projekt
- "DOM Crash Course" - manipulation HTML/CSS

<strong>Dlaczego: </strong>Widzę jak ktoś pisze kod (łatwiej zapamiętać)

<strong>Jak używam: </strong>Wieczory (21:00-22:00,) gdy dzieci śpią</code></pre>



<h4 class="wp-block-heading" style="font-size:18px"> 4. MDN Web Docs (★★★★☆)<br></h4>



<pre class="wp-block-code"><code><strong>Link:</strong> <a href="https://developer.mozilla.org">developer.mozilla.org</a>

<strong>Co:</strong> Oficjalna dokumentacja webowe technologie(HTML, CSS, JS)

<strong>Format:</strong> Dokumentacja referencyjna

<strong>Jak używam:</strong> 
- Gdy potrzebuję szczegółów konkretnej funkcji/metody
- "JavaScript Array methods" - pełna lista
- Przykłady użycia

<strong>Nie dla początkujących:</strong> Sucha dokumentacja, lepsze jako odniesienie niż zasób edukacyjny.
</code></pre>



<h4 class="wp-block-heading" style="font-size:18px">5. ChatGPT (★★★★★)</h4>



<pre class="wp-block-code"><code><strong>Jak używam:</strong>

Wyjaśnianie pojęć:

Ja: "Wyjaśnij mi hoisting w JavaScript jak dla 5-latka"
ChatGPT: &#91;proste wyjaśnienie z przykładami]


Debugging:

Ja: "Czemu ten kod nie działa? &#91;wklejam kod]"
ChatGPT: "Błąd w linii 5 - używasz var zamiast let, to powoduje..."


Code review:

Ja: "Czy ten kod jest OK? Jak mogę go ulepszyć?"
ChatGPT: &#91;sugestie, najlepsze praktyki]

<strong>Zalety:</strong> Natychmiastowe odpowiedzi, nieograniczone pytania, dostępne 24/7
<strong>Wady:</strong> Czasem się myli, trzeba weryfikować</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" style="font-size:22px">Java vs JavaScript &#8211; podsumowanie pierwszych 3 tygodni</h2>



<h3 class="wp-block-heading" style="font-size:20px">Co jest ŁATWIEJSZE w JS niż w Javie:</h3>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Setup</strong> &#8211; 1h vs 3h (Java)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Szablon</strong> &#8211; prawie zero (vs dużo w Javie)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Natychmiastowa informacja zwrotna</strong> &#8211; odświeżenie przeglądarki vs kompilacja<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Krzywa uczenia się</strong> &#8211; szybszy start (widzisz efekty od razu)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Projekty</strong> &#8211; 2h mini-projekt vs 55h w Javie</p>



<h3 class="wp-block-heading" style="font-size:20px">Co jest TRUDNIEJSZE w JS niż w Javie:</h3>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Typ bezpieczeństwa</strong> &#8211; brak (łatwo zrobić błąd)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Dziwactwa języka</strong> &#8211; <code>==</code> vs <code>===</code>, podnoszenie, <code>var</code> zakres<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Debugging</strong> &#8211; błędy run-time (nie czas kompilacji)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Konsekwencja</strong> &#8211; wiele sposobów na to samo (mylące!)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Asynchroniczność</strong> &#8211; callbacks, promises, async/await (jeszcze przed mną, ale słyszałam że trudne)</p>



<h3 class="wp-block-heading" style="font-size:20px">Co się przenosi z Javy 1:1:</h3>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pętle (for, while)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Warunki (if/else, switch)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Funkcje (koncept)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tablice (koncept, podobna składnia)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Obiekty/klasy (trochę inne, ale koncept ten sam)<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Myślenie programistyczne</strong> &#8211; algorytmy, rozwiązywanie problemów</p>



<h3 class="wp-block-heading" style="font-size:20px">Czy Java pomogła w nauce JS?</h3>



<p class="wp-block-paragraph"><strong>TAK, ogromnie.</strong></p>



<p class="wp-block-paragraph"><strong>Bez Javy:</strong></p>



<ul class="wp-block-list">
<li>Musiałabym uczyć się fundamentów (pętle, warunki, funkcje) od zera</li>



<li>Nie rozumiałabym OOP</li>



<li>Nie wiedziałabym jak projektować kod</li>
</ul>



<p class="wp-block-paragraph"><strong>Z Javą:</strong></p>



<ul class="wp-block-list">
<li>Fundamenty mam (przeskoczyłam 50% kursu JS)</li>



<li>Rozumiem klasy w JS (bo znam z Javy)</li>



<li>Myślę algorytmicznie (transfer skill)</li>
</ul>



<p class="wp-block-paragraph"><strong>Ale:</strong></p>



<ul class="wp-block-list">
<li>Java-owe nawyki czasem przeszkadzają (próbuję deklarować typy, których JS nie ma)</li>



<li>Muszę &#8222;oduczyć się&#8221; od Java ścisłość</li>
</ul>



<p class="wp-block-paragraph"><strong>Werdykt:</strong> Java była świetnym pierwszym językiem. JavaScript jako drugi = łatwiejszy, niż gdyby był pierwszy.</p>



<h2 class="wp-block-heading" style="font-size:22px">Plany na sierpień &#8211; co dalej z JS</h2>



<p class="wp-block-paragraph"><strong>Tydzień 1-2 sierpnia:</strong></p>



<ul class="wp-block-list">
<li>Dokończenie FreeCodeCamp &#8222;Basic JavaScript&#8221; (50% pozostało)</li>



<li>Praktyka: 3-4 mini-projekty (todo list, quiz, countdown timer)</li>
</ul>



<p class="wp-block-paragraph"><strong>Tydzień 3-4 sierpnia:</strong></p>



<ul class="wp-block-list">
<li>ES6 funkcje (arrow functions, destructuring, spread operator)</li>



<li>Zaawansowana manipulacja DOM</li>



<li>Pierwszy projekt dla klienta WordPress (walidacja formularza niestandardowego)</li>
</ul>



<p class="wp-block-paragraph"><strong>Wrzesień:</strong></p>



<ul class="wp-block-list">
<li>Asynchronous JS (promises, async/await, fetch API)</li>



<li>Może React basics (jeśli czuję się ready)</li>



<li>Większy projekt (może blog z fetch API)</li>
</ul>



<p class="wp-block-paragraph"><strong>Cel:</strong> Do końca sierpnia czuć się komfortowo z vanilla JavaScript.</p>



<p class="wp-block-paragraph"><strong>Realistycznie:</strong> Nie zostanę ekspertem w miesiąc. Ale będę mogła używać JS w projektach klientów.</p>



<h2 class="wp-block-heading" style="font-size:22px">FAQ &#8211; nauka drugiego języka programowania</h2>



<h3 class="wp-block-heading" style="font-size:20px">Czy powinnam kończyć Java całkowicie przed JS?</h3>



<p class="wp-block-paragraph"><strong>NIE.</strong></p>



<p class="wp-block-paragraph">Nie musisz być ekspertem Javy, żeby zacząć JS.</p>



<p class="wp-block-paragraph"><strong>Wystarczy:</strong></p>



<ul class="wp-block-list">
<li>Rozumieć podstawy (zmienne, pętle, funkcje, obiekty)</li>



<li>Zbudować 1-2 projekty</li>
</ul>



<p class="wp-block-paragraph"><strong>Reszta:</strong> Nauczysz się w trakcie lub później.</p>



<h3 class="wp-block-heading" style="font-size:20px">Jak nie pomieszać Java i JS w głowie?</h3>



<p class="wp-block-paragraph"><strong>Początkowo:</strong> Mieszam. Piszę <code>System.out.println</code> zamiast <code>console.log</code>.</p>



<p class="wp-block-paragraph"><strong>Pomaga:</strong></p>



<ul class="wp-block-list">
<li>Używanie różnych IDE (IntelliJ dla Java, VS Code dla JS)</li>



<li>Projekty w jednym języku naraz (nie przełączać co godzinę)</li>



<li>Praktyka (mózg się przyzwyczaja)</li>
</ul>



<p class="wp-block-paragraph"><strong>Po 3 tygodniach:</strong> Już rzadziej mieszam.</p>



<h3 class="wp-block-heading" style="font-size:20px">Czy TypeScript zamiast JavaScriptu?</h3>



<p class="wp-block-paragraph"><strong>TypeScript</strong> = JavaScript + typy (jak Java)</p>



<p class="wp-block-paragraph"><strong>Argument ZA:</strong> Jeśli znasz Javę, TypeScript będzie bardziej podobny</p>



<p class="wp-block-paragraph"><strong>Argument PRZECIW:</strong> Nauka TypeScriptu = nauka JS + nauka TypeScript w działaniu (więcej naraz)</p>



<p class="wp-block-paragraph"><strong>Moja decyzja:</strong> Vanilla JS najpierw. TypeScript może później (wrzesień-październik).</p>



<h3 class="wp-block-heading" style="font-size:20px">Ile czasu dziennie poświęcam?</h3>



<p class="wp-block-paragraph"><strong>JavaScript:</strong> 1h dziennie (vs Java było 1.5h)</p>



<p class="wp-block-paragraph"><strong>Rozłożenie:</strong></p>



<ul class="wp-block-list">
<li>Rano: 30 min (FreeCodeCamp wyzwania)</li>



<li>Wieczór: 30 min (projekt/praktyka)</li>
</ul>



<p class="wp-block-paragraph"><strong>Weekendy:</strong> 2-3h (większe projekty)</p>



<p class="wp-block-paragraph"><strong>Dlaczego mniej niż Java:</strong> Wakacje, dzieci, jestem zmęczona. 1h = zrównoważony.</p>



<h3 class="wp-block-heading" style="font-size:20px">Czy warto uczyć się wielu języków naraz?</h3>



<p class="wp-block-paragraph"><strong>Moim zdaniem: NIE.</strong></p>



<p class="wp-block-paragraph">1 język na raz. Opanuj podstawy, potem dodaj drugi.</p>



<p class="wp-block-paragraph"><strong>Dlaczego:</strong></p>



<ul class="wp-block-list">
<li>Mylące (mieszasz składnie)</li>



<li>Przytłaczający (dwa razy więcej nauki)</li>



<li>Powolny postęp (rozmywasz czas)</li>
</ul>



<p class="wp-block-paragraph"><strong>Lepiej:</strong></p>



<ul class="wp-block-list">
<li>6 miesięcy Java (solidnie)</li>



<li>Potem JavaScript (z fundamentami z Javy)</li>
</ul>



<h2 class="wp-block-heading" style="font-size:22px">Podsumowanie &#8211; Learning Log #6</h2>



<p class="wp-block-paragraph"><strong>Nauka drugiego języka programowania:</strong></p>



<ul class="wp-block-list">
<li><strong>Łatwiejsza</strong> niż pierwszego (fundamenty mam)</li>



<li><strong>Trudniejsza</strong> niż myślałam (dziwactwa, różnice, mieszanie)</li>



<li><strong>Wartościowe</strong> &#8211; widzę konkretny benefit (projekty WordPress)</li>
</ul>



<p class="wp-block-paragraph"><strong>Java vs JavaScript:</strong></p>



<ul class="wp-block-list">
<li><strong>Podobne:</strong> Fundamenty (pętle, warunki, funkcje)</li>



<li><strong>Różne:</strong> Typy, scope, dziwactwa, filozofia języka</li>



<li><strong>Werdykt:</strong> Java pomogła ogromnie, ale JS wymaga &#8222;oduczyć się&#8221; od ścisłość</li>
</ul>



<p class="wp-block-paragraph"><strong>Progres po 3 tygodniach:</strong></p>



<ul class="wp-block-list">
<li>30% FreeCodeCamp kursu</li>



<li>1 mini-projekt (calculator)</li>



<li>Rozumiem podstawy</li>



<li>Czuję się komfortowo z kodem</li>
</ul>



<p class="wp-block-paragraph"><strong>Cel sierpień:</strong></p>



<ul class="wp-block-list">
<li>80% FreeCodeCamp</li>



<li>5-7 mini-projektów</li>



<li>Pierwszy większy projekt  (custom JS w WordPress)</li>
</ul>



<p class="wp-block-paragraph"><strong>Najważniejsza lekcja:</strong></p>



<p class="wp-block-paragraph"><strong>&#8222;Drugi język ≠ zaczynać od zera. Masz fundamenty. Użyj ich.&#8221;</strong></p>



<p class="wp-block-paragraph">Java nauczyła mnie programowania. JavaScript uczy mnie praktyczności i elastyczności.</p>



<p class="wp-block-paragraph">Oba są potrzebne. Oba mają miejsce w moim portfolio.</p>



<p class="wp-block-paragraph"><strong>Od osoby, która się uczy do osoby, która buduje &#8211; teraz w DWÓCH językach.</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>PS: Też uczysz się drugiego języka programowania? Z czego na co przeszłaś/przeszedłeś? Co było najtrudniejsze? Zostaw komentarz &#8211; ciekawa jestem Waszych doświadczeń!</em></p>



<p class="wp-block-paragraph"></p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/learning-log-6-java-vs-javascript-drugi-jezyk/">Learning Log #6: Java vs JavaScript &#8211; zaczynam drugi język programowania</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/learning-log-6-java-vs-javascript-drugi-jezyk/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Java Script dla dzieci &#8211; mój poziom 😁</title>
		<link>https://www.danuta-cybulska.com/java-script-dla-dzieci-moj-poziom-%f0%9f%98%81/</link>
					<comments>https://www.danuta-cybulska.com/java-script-dla-dzieci-moj-poziom-%f0%9f%98%81/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Tue, 18 Feb 2020 08:00:00 +0000</pubDate>
				<category><![CDATA[Blogowanie]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[nauka kodowania]]></category>
		<guid isPermaLink="false">https://www.danuta-cybulska.com/?p=4193</guid>

					<description><![CDATA[<p>Na pewno nie pisałam jeszcze o tej książce, a szkoda. Uważam że jest genialna, jeśli ktoś nie miał w ogóle styczności z Java Script. Rzadko która książka tak prosto i logicznie tłumaczy funkcje tego języka. Ba! W sposób zrozumiały, &#8230; no własnie&#8230; dla dziecka. dlaczego ta&#8230;? Z bardzo prostej przyczyny. Większość książek traktujących o językach...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/java-script-dla-dzieci-moj-poziom-%f0%9f%98%81/">Java Script dla dzieci &#8211; mój poziom 😁</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Na pewno nie pisałam jeszcze o tej książce, a szkoda. Uważam że jest genialna, jeśli ktoś nie miał w ogóle styczności z Java Script. Rzadko która książka tak prosto i logicznie tłumaczy funkcje tego języka. Ba! W sposób zrozumiały, &#8230; no własnie&#8230;  dla dziecka.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="640" height="426" src="https://www.danuta-cybulska.com/wp-content/uploads/2020/02/person-with-grey-ring-using-macbook-pro-159760.jpg" alt="" class="wp-image-4339" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2020/02/person-with-grey-ring-using-macbook-pro-159760.jpg 640w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/person-with-grey-ring-using-macbook-pro-159760-300x200.jpg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/person-with-grey-ring-using-macbook-pro-159760-272x182.jpg 272w" sizes="(max-width: 640px) 100vw, 640px" /></figure></div>



<h2 class="wp-block-heading">dlaczego ta&#8230;?</h2>



<p class="wp-block-paragraph">Z bardzo prostej przyczyny. Większość książek traktujących o językach programowania jest dosyć techniczna. I nikt się temu nie dziwi, prawda? </p>



<p class="wp-block-paragraph">Ta jest inna. Po pierwsze jest pisana dla dzieci, ma również dostęp do materiałów udostępnianych na stronie internetowej. Wszystko wytłumaczone jest bardzo prostym językiem &#8230; na przykładach.</p>



<p class="wp-block-paragraph">Szczerze po przeczytaniu dwa razy, od razu wiedziałam jak taką czy inną funkcję napisać i zastosować w praktyce.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1080" height="1080" src="https://i2.wp.com/www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN-.png?fit=940%2C940&amp;ssl=1" alt="" class="wp-image-4340" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN-.png 1080w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN--300x300.png 300w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN--1024x1024.png 1024w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN--150x150.png 150w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN--768x768.png 768w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN--60x60.png 60w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN--720x720.png 720w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/Insta-TCN--360x360.png 360w" sizes="(max-width: 1080px) 100vw, 1080px" /></figure></div>



<p class="wp-block-paragraph">Dziś ten wpis będzie bardzo, ale to bardzo krótki. Z kilku powodów. Mianowicie o tej książce nie można dużo powiedzieć. Trzeba ją przeczytać. Albo jeszcze lepiej (tak ja robiłam za pierwszym razem) czytać i od razu pisać w przeglądarce. Właśnie tak jest najlepiej się uczyć kodowania.</p>



<p class="wp-block-paragraph">Jeśli będziesz mieć możliwość wypożyczyć lub kupić tą książkę to polecam to zrobić.</p>



<p class="wp-block-paragraph">Miałam dostęp przez IBUK Libra, ale niestety skończył mi się, nad czym bardzo boleję. Teraz będę musiała poszukać jej gdzieś indziej<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f611.png" alt="😑" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="640" height="480" src="https://www.danuta-cybulska.com/wp-content/uploads/2020/02/top-view-photo-of-notebook-and-laptop-390573.jpg" alt="" class="wp-image-4341" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2020/02/top-view-photo-of-notebook-and-laptop-390573.jpg 640w, https://www.danuta-cybulska.com/wp-content/uploads/2020/02/top-view-photo-of-notebook-and-laptop-390573-300x225.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></figure></div>



<p class="wp-block-paragraph">Co jeszcze można w Java Script? Na przykład ten kuras: <a href="https://kursjs.pl/">https://kursjs.pl/</a> Podstawy, które koniecznie trzeba opanować. Wiadomości na temat tego języka zdecydowanie muszę odświeżyć. Bez samozapracia niestety się nie obejdzie.</p>



<p class="wp-block-paragraph">Zaczynam akcję #reaktywacjajs <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">Jeśli znajdziesz jeszcze jakieś fajne źródła z JS, daj znać: w komentarzu lub wyślij do mnie wiadomość.</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/java-script-dla-dzieci-moj-poziom-%f0%9f%98%81/">Java Script dla dzieci &#8211; mój poziom 😁</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/java-script-dla-dzieci-moj-poziom-%f0%9f%98%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Gdzie szukać pomocy w nauce kodowania?</title>
		<link>https://www.danuta-cybulska.com/gdzie-szukac-pomocy-w-nauce-kodowania/</link>
					<comments>https://www.danuta-cybulska.com/gdzie-szukac-pomocy-w-nauce-kodowania/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Tue, 28 Jan 2020 08:00:00 +0000</pubDate>
				<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[freeCodeCamp]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript w 30 dni]]></category>
		<category><![CDATA[kodowanie]]></category>
		<category><![CDATA[nauka programowania]]></category>
		<category><![CDATA[Wes Bos]]></category>
		<guid isPermaLink="false">https://www.danuta-cybulska.com/?p=4183</guid>

					<description><![CDATA[<p>Nauka kodowanie wbrew pozorom nie jest trudna. W moim odczuciu wymaga dużo, bardzo dużo samozaparcia i samodyscypliny. Samo teoretycznie pochłanianie nowej wiedzy przy kodowaniu na wiele się nie zda. Musisz ćwiczyć, wprowadzać od razu poznane informacje w czyn. Powstaje pytanie, jak się uczyć i od kogo, aby się nauczyć? Najlepiej by było uczyć się &#8222;na...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/gdzie-szukac-pomocy-w-nauce-kodowania/">Gdzie szukać pomocy w nauce kodowania?</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Nauka kodowanie wbrew pozorom nie jest trudna. W moim odczuciu wymaga dużo, bardzo dużo samozaparcia i samodyscypliny. Samo teoretycznie pochłanianie nowej wiedzy przy kodowaniu na wiele się nie zda. Musisz ćwiczyć, wprowadzać od razu poznane informacje w czyn. <br>Powstaje pytanie, jak się uczyć i od kogo, aby się nauczyć?</p>



<p class="wp-block-paragraph">Najlepiej by było uczyć się &#8222;na żywym organizmie&#8221;. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f601.png" alt="😁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ale w moim przypadku to odpada, nie mam tyle wolnej przestrzeni czasowej. </p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://www.danuta-cybulska.com/wp-content/uploads/2020/01/person-holding-cup-of-coffee-572738.jpg" alt="" class="wp-image-4303" width="621" height="621" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2020/01/person-holding-cup-of-coffee-572738.jpg 640w, https://www.danuta-cybulska.com/wp-content/uploads/2020/01/person-holding-cup-of-coffee-572738-300x300.jpg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2020/01/person-holding-cup-of-coffee-572738-150x150.jpg 150w, https://www.danuta-cybulska.com/wp-content/uploads/2020/01/person-holding-cup-of-coffee-572738-60x60.jpg 60w, https://www.danuta-cybulska.com/wp-content/uploads/2020/01/person-holding-cup-of-coffee-572738-360x360.jpg 360w" sizes="(max-width: 621px) 100vw, 621px" /></figure>



<h2 class="wp-block-heading">metoda małych kroczków</h2>



<p class="wp-block-paragraph">Zaczniemy od &#8222;jak&#8221;.<br>Z pewnością musisz mieć plan nauki, zwłaszcza gdy każda minuta w ciągu dnia jest na wagę złota. </p>



<p class="wp-block-paragraph">Z pewnością słyszałaś już o:</p>



<ul class="wp-block-list"><li> zjadaniu słonia </li><li> lub zjadaniu żaby,</li><li> małych kroczkach.</li></ul>



<p class="wp-block-paragraph">Kiedy powiemy sobie: &#8222;nauka JavaScript&#8221;, to &#8230; robimy wielkie oczy. Rany, przecież tego jest tak dużo&#8230; Tutaj przychodzi z pomocą &#8222;zjadanie wielkiego słonia&#8221;.</p>



<p class="wp-block-paragraph">Projekt pod tytułem &#8222;Nauka JS&#8221; zamieniamy na malutkie, strawne dla naszego umysłu &#8222;kawałeczki&#8221;.</p>



<p class="wp-block-paragraph">A co z tą żabą? Najobrzydliwsze i ogromniaste żaby zjada się zawsze jako pierwsze, na początku dnia, aby mieć to jak najszybciej z głowy.</p>



<p class="wp-block-paragraph">Jeśli zaplanujemy sobie 15-minutową sesję z kodem codziennie o 8 rano, to ze spokojem (i bez wyrzutów sumienia!) będziemy mogły się zająć innymi rzeczami. <br>Przecież to na czym nam zależało mamy już odhaczone na ten dzień, prawda?<br>Taka metoda sprawdza się zwłaszcza kiedy zaczynamy. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="640" height="426" src="https://www.danuta-cybulska.com/wp-content/uploads/2020/01/computer-313840_640.jpg" alt="" class="wp-image-4302" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2020/01/computer-313840_640.jpg 640w, https://www.danuta-cybulska.com/wp-content/uploads/2020/01/computer-313840_640-300x200.jpg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2020/01/computer-313840_640-272x182.jpg 272w" sizes="(max-width: 640px) 100vw, 640px" /></figure>



<p class="wp-block-paragraph">Kiedy wprowadzałam nawyk codziennej praktyki jogi i medytacji, to właśnie rano, zaraz po obudzeniu się rozkładałam matę. Dlaczego? Mój nawyk nie był na tyle jeszcze mocny, aby ryzykować niewykonanie zaplanowanego zadania na dany dzień.<br>Dziś spokojnie mogę przenieść medytację na wieczór, a jogę na popołudnie, aby podładować się trochę. Zmienił się też rodzaj praktyki jogi. Teraz częściej ćwiczę bardziej energiczną odmianę <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />.<br>Wcześniej bazowałam na bardzo bezpiecznych i spokojnych asanach.</p>



<p class="wp-block-paragraph">A wracając do kodowania. Małe kroczki i zaplanowane bloki czasowe. To mój wybór. Siadam do laptopa, kiedy mam to w harmonogramie dnia. Odfajkowuję kolejne kroczki. </p>



<p class="wp-block-paragraph">Koniecznie zapisuj swoje postępy. Dlaczego? Aby czuć zadowolenie z tego, co robisz i &#8230; no cóż, nie oszukujmy się&#8230; aby trochę dowartościować swoje EGO. Zrozumiesz, kiedy zobaczysz śliczny rządek odfajkowanych dni.</p>



<p class="wp-block-paragraph">Czy czasami się nie chce? Powiedziałabym, że zazwyczaj się nie chce. Mój sposób na to: &#8222;tylko ten fragment&#8221; lub &#8222;tylko minutka&#8221;, &#8222;tylko zerknę&#8221;. Działa cudownie, bo jak już zerknęliśmy do kursu, książki, kodu, to trochę trudno to zostawić w spokoju&#8230;</p>



<h2 class="wp-block-heading">javascript na tapet</h2>



<p class="wp-block-paragraph">JavaScript to mój jedyny temat na ten rok, który dotyczy kodowania. Dlaczego? W zeszłym roku trochę się rozpraszałam na rzecz WordPressa, CSS i innych rzeczy, co skutkowało tym, że SJ schodził na plan dalszy.</p>



<p class="wp-block-paragraph">Od kogo będę się uczyć JS? Tak jak już pisałam <a href="https://www.danuta-cybulska.com/2020/01/powrot-do-programowania/">we wcześniejszym wpisie</a> muszę skupić się na jednym konkretnym źródle na raz. Łapanie kilku srok za ogon nie sprawdzi się w moim przypadku. </p>



<p class="wp-block-paragraph">Wybrałam na początek jednego pana &#8211; <a href="https://wesbos.com/">Wesa Bosa</a> i jego kurs pt. &#8222;JavaScript 30&#8221;.<br>Jak można się domyślać to challenge trwający 30 dni, na każdy dzień przypada jeden konkretne zagadnienie do zakodowania.<br>Z racji tego, że nie czuję się pewnie w języku angielskim, pewnie u mnie będzie to trwało znacznie dłużej niż 30 dni<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f601.png" alt="😁" class="wp-smiley" style="height: 1em; max-height: 1em;" />.  </p>



<p class="wp-block-paragraph">Zaczynam już w lutym, czyli za kilka dni! Następnie biorę się za przerwany w zeszłym roku kurs z <a href="http://www.freecodecamp.com">FreeCodeCamp.</a> Tym bardziej że znalazłam kanał na YouTube FCC <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f601.png" alt="😁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> &#8211; będzie robione<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4aa.png" alt="💪" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p>



<p class="wp-block-paragraph">Zapytasz pewnie: &#8222;a nie ma czegoś po polsku?&#8221; Z pewnością jest. <br>Z całą świadomością wybieram wersje anglojęzyczne. Nie czuję się w tym języku zbyt pewnie, dlatego chcę upiec dwie pieczenie na jednym ogniu &#8211; język i JS.</p>



<p class="wp-block-paragraph">Kolejnym kursem, który mnie kusi jest od Traversy Media, kurs dla absolutnie początkujących.  Tak, trochę liznęłam JS już, ale bądźmy szczerzy, sporo wyleciało z głowy, bo &#8230; nie kodowałam! Tak to już się dzieje, zamiast utrwalić informacje, jakie zdobyłam, przerzuciłam się na coś całkowicie innego.<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f937-200d-2640-fe0f.png" alt="🤷‍♀️" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="JavaScript Crash Course For Beginners" width="720" height="405" src="https://www.youtube.com/embed/hdI2bqOjy3c?feature=oembed&#038;enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">A ty masz jakiś malutki plan na nauczenie się czegoś nowego lub odświeżenie czegoś dawnego?<br>Co by się tobie przydało, aby łatwiej było ogarnąć naukę logistycznie?<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f914.png" alt="🤔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Wsparcia moralnego, ślicznych trackerów do monitorowania postępów? Napisz w komentarzu.</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/gdzie-szukac-pomocy-w-nauce-kodowania/">Gdzie szukać pomocy w nauce kodowania?</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/gdzie-szukac-pomocy-w-nauce-kodowania/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Plany na nowy czas.</title>
		<link>https://www.danuta-cybulska.com/plany-na-nowy-czas/</link>
					<comments>https://www.danuta-cybulska.com/plany-na-nowy-czas/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Sun, 30 Dec 2018 08:00:06 +0000</pubDate>
				<category><![CDATA[Blogowanie]]></category>
		<category><![CDATA[Notatki z życia codziennego]]></category>
		<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[analiza zeszłego roku]]></category>
		<category><![CDATA[bez preski]]></category>
		<category><![CDATA[blogowanie]]></category>
		<category><![CDATA[bootcamp w Kodilli]]></category>
		<category><![CDATA[bootkamp kodilla]]></category>
		<category><![CDATA[bootstrap4]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[co było]]></category>
		<category><![CDATA[czas dla rodziny]]></category>
		<category><![CDATA[dieta BeBio.pl]]></category>
		<category><![CDATA[Ewelina Muc]]></category>
		<category><![CDATA[fanpage]]></category>
		<category><![CDATA[frameworki]]></category>
		<category><![CDATA[freeCodeCamp]]></category>
		<category><![CDATA[front-end]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[ilość wpisów]]></category>
		<category><![CDATA[instagram]]></category>
		<category><![CDATA[Jason Hunt]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript w 30 dni]]></category>
		<category><![CDATA[joga]]></category>
		<category><![CDATA[kodowanie]]></category>
		<category><![CDATA[kurs git-a]]></category>
		<category><![CDATA[kurs pisz tak aby sprzedawać]]></category>
		<category><![CDATA[kurs wirtualna asystentka]]></category>
		<category><![CDATA[mainfulness]]></category>
		<category><![CDATA[medytacje]]></category>
		<category><![CDATA[narzędzia developerskie]]></category>
		<category><![CDATA[nauka języka angielskiego]]></category>
		<category><![CDATA[niedoczynność tarczycy]]></category>
		<category><![CDATA[planowanie]]></category>
		<category><![CDATA[plany]]></category>
		<category><![CDATA[pragmatyczne podejście]]></category>
		<category><![CDATA[próbowanie nowych rzeczy]]></category>
		<category><![CDATA[prowadzenie dziennika]]></category>
		<category><![CDATA[przemyślenia]]></category>
		<category><![CDATA[publikacja kodu na githubie]]></category>
		<category><![CDATA[relacje]]></category>
		<category><![CDATA[responsywność strony]]></category>
		<category><![CDATA[rwd]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[strona na wordpressie]]></category>
		<category><![CDATA[strona www]]></category>
		<category><![CDATA[The Awwwesomes]]></category>
		<category><![CDATA[trening na bosaka]]></category>
		<category><![CDATA[WPdlazielonych]]></category>
		<category><![CDATA[wyciąganie wniosków]]></category>
		<category><![CDATA[wyzwanie #codenovember]]></category>
		<category><![CDATA[zero waste]]></category>
		<guid isPermaLink="false">https://www.danuta-cybulska.com/?p=1985</guid>

					<description><![CDATA[<p>Przyjęło się, aby w tym konkretnym czasie, czyli na początku roku, koniecznie robić wielkie plany. Nieistotne jest to jak &#8222;ambitne&#8221; masz plany w tym czasie. Kluczowe jest ich stopień realizacji. Cel możemy określić sobie jakikolwiek, aby go zrealizować, potrzebujemy determinacji i samodyscypliny. Samo się nie zrobi, a na papierze możemy mieć mnóstwo cudownych marzeń, które...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/plany-na-nowy-czas/">Plany na nowy czas.</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Przyjęło się, aby w tym konkretnym czasie, czyli na początku roku, koniecznie robić wielkie plany. Nieistotne jest to jak &#8222;ambitne&#8221; masz plany w tym czasie. Kluczowe jest ich stopień realizacji. Cel możemy określić sobie jakikolwiek, aby go zrealizować, potrzebujemy determinacji i samodyscypliny. Samo się nie zrobi, a na papierze możemy mieć mnóstwo cudownych marzeń, które nigdy nie zostaną zrealizowane. <br>Do osiągania tego, coś my sobie wymyślili, trzeba podchodzić pragmatycznie i bez emocji.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> <br>Potocznie pragmatyzmem nazywana jest także&nbsp;postawa, polegająca na realistycznej ocenie rzeczywistości, liczeniu się z konkretnymi możliwościami i podejmowaniu działań, które gwarantują skuteczność. </p><cite><a href="https://pl.wikipedia.org/wiki/Pragmatyzm">Wikipedia</a></cite></blockquote>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="698" src="https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rawpixel-579264-unsplash-1024x698.jpg" alt="Zdjęcie biurka, na którym znajduje się laptop, telefon, kalendarza, zegarek, kubek z kawą, jakieś akta, kwiatek , długopis i gazeta." class="wp-image-2014" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rawpixel-579264-unsplash-1024x698.jpg 1024w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rawpixel-579264-unsplash-300x205.jpg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rawpixel-579264-unsplash-768x524.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<span id="more-1985"></span>



<h2 class="wp-block-heading">Co było.</h2>



<p class="wp-block-paragraph">Ciężko sobie przypomnieć co było. Nasza pamięć bardzo lubi przekłamywać i tam, gdzie nie widzieliśmy problemu mógł, tkwić zalążek porażki. Z każdego zdarzenia powinniśmy wyciągać wnioski i na nich się uczyć. Nie warto popełniać wciąż te same błędy. To strata czasu!</p>



<p class="wp-block-paragraph">Dlatego najlepszym rozwiązaniem czasem jest prowadzenie dziennika. I nie chodzi mi nawet o &#8222;pamiętnik&#8221; z prawdziwego zdarzenia&#8230; Miejsce, gdzie zapiszesz, jakie podejmowałeś wyzwania, i w jakim stopniu je zrealizowałeś.  Ja ma troszkę ułatwione zadanie, bo nie dość, że wpisy na blogu usprawniają mi przypominanie to jeszcze w zeszycie, w punktach mam bardzo wiele rzeczy rozpisanych.</p>



<h3 class="wp-block-heading">Blogowanie.</h3>



<p class="wp-block-paragraph">Aby nie przedłużać, przejdę do tego, co było. <br>Blog nadal istnieje. 71 wpisów. Rozwinęłam<a href="https://www.facebook.com/CybulskaDanuta/"> fanPage.</a> I rozhulałam <a href="https://www.instagram.com/danutacybulska/﻿">Instagram</a>. Przeprowadziłam Małą Rewolucję (w lipcu). Pojawiło się więcej ekspercki (jakoś dziwnie mi się to pisze) wpisów na tematy około programowe. </p>



<p class="wp-block-paragraph">Z rzeczy blogowych ciągle zastanawiam się nad właściwą formą. Próbuję, zmieniam i dodaję lub odejmuję tematy. Piszę tak, aby zainteresować. Nawet nie chodzi o ogromne grono odbiorców, ale stałe. Właśnie z taką myślą zakupiłam kursy Jasona Hunta: Masterclass: Blogger i Masterclass: Blogger&amp;Biznes.  Wstyd przyznać, ale jestem na nich dopiero na początku. Wybrałam podejście: bez presji. Dostęp mam jeszcze kawał czasu, więc nie muszę wszystkiego robić naraz. Wszystko w swoim czasie. Tak więcej wyciągnę z tego.</p>



<h3 class="wp-block-heading">Kodowanie.</h3>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="683" src="https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rich-tervet-662093-unsplash-1024x683.jpg" alt="Zdjęcie biurka, na którym jest włączona lampa, kwiatek, kubek oraz laptop z edytorem kodu." class="wp-image-2015" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rich-tervet-662093-unsplash-1024x683.jpg 1024w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rich-tervet-662093-unsplash-300x200.jpg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rich-tervet-662093-unsplash-768x512.jpg 768w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/rich-tervet-662093-unsplash-272x182.jpg 272w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Tu było sporo. Zacznę od WordPressa. Ulepszyłam blog (nieistotne, że nie widać <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61c.png" alt="😜" class="wp-smiley" style="height: 1em; max-height: 1em;" />). Zbudowałam nową stronę, która czeka na opublikowanie. Planowałam to na końcówkę roku, ale nie bardzo to wyjdzie. Zbyt dużo mam rzeczy do przemyślenia w związku z nią, muszę napisać teksty i nadal ciągle zdjęcia i grafiki są do bani. Ale! Zrobiłam ją praktycznie w 3 dni! To sukces. <br>W końcu pożegnałam kurs Eweliny Muc &#8222;WP dla Zielonych&#8221;. Nie dlatego, że już nie jest wartościowy, ale szukam wszędzie oszczędności&#8230; <br>Mija rok (prawie), od kiedy skończyłam Bootcamp w Kodilli.  Wnioski? Czeka mnie jeszcze ogrom pracy nad font-endem. Wiem już bardzo dużo, potrafię też wiele. Niestety w moim odczuciu ciągle zbyt mało. Dopiero po roku niektóre sprawy i informacje zrozumiałam. Już nie boję się ich używać i (co ważniejsze) nie boję się  publikować na <a href="https://github.com/DanaCyb">GitHubie</a> moich postępów. W swoim skrzywionym zamyśle uważałam, że nie powinnam pokazywać, jak bardzo niedopracowany jest mój kod. Chyba jest prawie osiem stronek&#8230; Dużo, nie dużo.<br>W kodowaniu jeszcze przerobiłam huk kursów. Był Bootstrap, zwykły html, css oraz zaczęłam kurs GIT-a. Hmmm&#8230; co jeszcze? W listopadzie wzięłam w cudownym wyzwaniu <strong>#codenovember</strong> (u <a href="https://theawwwesomes.org/">The Awwwesomes</a>)<strong>,</strong> który bardzo mnie zmotywował do dalszej nauki.<br>Nieodłączna pozostała strona <a href="https://www.freecodecamp.org/">FreeCodeCamp.</a> </p>



<h3 class="wp-block-heading">Coś jeszcze.</h3>



<p class="wp-block-paragraph">Regularne trenuję i uważnie się odżywiam. Dzięki temu czuję się lepiej i wyniki tarczycowe już tak nie skaczą. Poza tym &#8211; miły bonusik &#8211; schudłam i nie puchnę. <br>Jestem bardziej skupiona tym, co jest tu i teraz. W końcu nauczyłam się wybierać, a nie gonić za wszystkim na raz. Miałam czas na wakacje i czytanie książek (w tym roku przeczytałam ich 60).<br>Zaczęłam bardziej myśleć o sobie. Zaczęłam kurs <a href="https://brandassist.pl/">&#8222;Wirtualna Asystentka&#8221; </a>i zakończyłam kurs &#8222;<a href="http://tekstowni.pl/">Pisz tak, aby sprzedawać&#8221;.</a> <br>Bardziej świadomie kupuję i używam codziennych rzeczy. Nie twierdzę, że jestem hiper pro, eko, zero waste itp&#8230; Ale staram się i wybieram mądrze.  <br>Zaczynam rozumieć, że tylko ja jestem w stanie pokierować siebie we właściwym (moim) kierunku. </p>



<h2 class="wp-block-heading">Co będzie.</h2>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="683" src="https://www.danuta-cybulska.com/wp-content/uploads/2018/12/giulia-bertelli-116358-unsplash-1024x683.jpg" alt="Zdjęcie podłogi, na której jest otwarty terminarz z ołówkiem, zaczęta robótka ręczna, kubek z wodą i jakimś ziołem (mięta?), laptop." class="wp-image-2016" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/12/giulia-bertelli-116358-unsplash-1024x683.jpg 1024w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/giulia-bertelli-116358-unsplash-300x200.jpg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/giulia-bertelli-116358-unsplash-768x512.jpg 768w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/giulia-bertelli-116358-unsplash-272x182.jpg 272w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Blogowanie.</h3>



<p class="wp-block-paragraph">Jeśli chodzi o tę sferę to mam tu dokładnie rozpisane już tematy przewodnie. Zdecydowałam, że ten rok będzie na blogu należał do kodowania. <br> 1&#x20e3; kwartał &#8211; Strona www // Front-end;<br> 2&#x20e3; kwartał &#8211; Narzędzia developerskie;<br> 3&#x20e3; kwartał &#8211; Frameworki;<br> 4&#x20e3; kwartał &#8211; Dobre praktyki // Clean code.<br>To jeśli chodzi o posty eksperckie. Dopuszczam również wpisy typowo lifestylowe. Ale na kodowaniu chcę się bazować. <br>W ramach pogłębiania wiedzy na temat blogowania i pisania wartościowych tekstów, mam do zrobienia kursy Jasona Hunta oraz kurs SEO.<br>Instagram, facebook? Zostanie tak, jak dotychczas było. Posty przynajmniej jeden na dzień.<br></p>



<h3 class="wp-block-heading">Kodowanie.</h3>



<p class="wp-block-paragraph">Tu popłynęłam z moimi marzeniami i planami. HA! Zbyt wiele i wszystko na raz bym chciała. Już wiem, że w ten sposób nie wiele bym pojęła. To, jaki jest plan? Ugruntowanie tego, co już wiem, czyli html i css. Muszę poczuć się w tym na tyle pewnie, żebym raczej zastanawiała się czym się posłużyć, aby osiągnąć dany efekt, niż szukał rozwiązania. W tym roku chciałabym również nauczyć się JavaScript, bo puki co &#8222;liznęłam&#8221; go jedynie pobieżnie. I niestety zaniedbałam to, co już wiedziałam. Efekt? Zaczynam od nowa. W kodowaniu najważniejsza jest praktyka.</p>



<p class="wp-block-paragraph">Wszystkie moje zmagania z kodem będą na GitHubie, a co za tym idzie w trakcie będę robić <a href="https://kursgita.pl/">kurs GIT-a.</a> Dodatkowo muszę popracować nad responsywnością stron (RWD), bo niestety bardzo kuleje w moich projektach.<br>Chciałam zacząć jeszcze coś w WordPressie, ale chyba tego będzie już za moc. Jak rozpisałam zagadnienia, jakie powinnam opanować lub pogłębić&#8230; okazało się, że czasu może braknąć.<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61c.png" alt="😜" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f469-200d-1f4bb.png" alt="👩‍💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h3 class="wp-block-heading">Coś jeszcze.</h3>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="683" src="https://www.danuta-cybulska.com/wp-content/uploads/2018/12/kyle-glenn-686350-unsplash-1024x683.jpg" alt="Zdjęcie biurka, na którym stoi zielony kwiatek doniczkowy, kubek z parującą kawą oraz otwarty notes założony długopisem." class="wp-image-2017" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/12/kyle-glenn-686350-unsplash-1024x683.jpg 1024w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/kyle-glenn-686350-unsplash-300x200.jpg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/kyle-glenn-686350-unsplash-768x512.jpg 768w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/kyle-glenn-686350-unsplash-272x182.jpg 272w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/kyle-glenn-686350-unsplash-340x226.jpg 340w, https://www.danuta-cybulska.com/wp-content/uploads/2018/12/kyle-glenn-686350-unsplash-370x246.jpg 370w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">I już ostatnia prosta. Co jeszcze? Treningi, zdrowa dieta, kontrolowanie tarczycy, czas dla rodziny (zwłaszcza Pana Męża &#8211; często nasze połówki czują się zaniedbane). </p>



<p class="wp-block-paragraph">Chcę jeszcze popracować (zadbać) nad swoimi nerwami. Niestety stres zbiera u mnie bardzo duże żniwo, a ja czasami czuję, że wybuchnę w najmniej oczekiwanym momencie. Co do sposobu na poprawę koncentracji, cierpliwości i pamięci (a one najczęściej pogarszają się ze stresem) jeszcze nie podjęłam konkretnych decyzji. Będę szukać odpowiedniego narzędzia. Czy będzie to joga, medytacja lub mainfulness&#8230; Nie zdecydowałam. Zobaczymy po wypróbowaniu każdego. </p>



<p class="wp-block-paragraph">Z rzeczy mało istotnych, ale wciąż odkładanych na później. Muszę na poważnie zabrać się do języka angielskiego. Z tym że nie może to być klasyczna metoda. Dlaczego? Bo ja tak naprawdę dużo rozumie, ale wciąż się boję mówić lub sytuacji, że coś przekręcę, inaczej pojmę i &#8230; no właśnie, co będzie? </p>



<div class="wp-block-kadence-spacer aligncenter"><div class="kt-block-spacer kt-block-spacer-halign-center" style="height:45px"><hr class="kt-divider" style="border-top-color:rgba(82, 122, 73, 1);border-top-width:5px;width:80%;border-top-style:solid"/></div></div>



<p class="wp-block-paragraph">Tak wiele by się chciało, a to jedynie rok. Raptem 52 tygodni, 365 dni. Odlicz czas przeznaczony na wakacje i święta, weekendy. Należy nam się odpoczynek przecież. Ile nam czasu zostanie na realizacje naszych planów? Jakie masz plany? Zaplanowane cele i rozpisane w kolejnych krokach? </p>



<p class="wp-block-paragraph">Do dzieła, przed Tobą nowy rok życia. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60e.png" alt="😎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/plany-na-nowy-czas/">Plany na nowy czas.</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/plany-na-nowy-czas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Moja www&#8230;</title>
		<link>https://www.danuta-cybulska.com/moja-www/</link>
					<comments>https://www.danuta-cybulska.com/moja-www/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Thu, 04 Oct 2018 08:00:34 +0000</pubDate>
				<category><![CDATA[Notatki z życia codziennego]]></category>
		<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[avocode]]></category>
		<category><![CDATA[bądź online]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[brackets]]></category>
		<category><![CDATA[codePen]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[darmowe projekty stron]]></category>
		<category><![CDATA[domena]]></category>
		<category><![CDATA[emmet]]></category>
		<category><![CDATA[Ewelina Muc]]></category>
		<category><![CDATA[free PSD]]></category>
		<category><![CDATA[front-end]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[kurs wordpress]]></category>
		<category><![CDATA[Ola Gościniak]]></category>
		<category><![CDATA[PSD]]></category>
		<category><![CDATA[serwer]]></category>
		<category><![CDATA[strefa kursów]]></category>
		<category><![CDATA[strona www]]></category>
		<category><![CDATA[symu]]></category>
		<category><![CDATA[udemy]]></category>
		<category><![CDATA[wizytówka]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WPdlazielonych]]></category>
		<category><![CDATA[youtube]]></category>
		<category><![CDATA[zenbox]]></category>
		<guid isPermaLink="false">https://www.danuta-cybulska.com/?p=1766</guid>

					<description><![CDATA[<p>Obecnie wszyscy mają swoje miejsce w internecie. Niektórzy mają profil na Instagramie, inni na Facebooku. Są również osoby, które chcą własnej strony www. Czy to możliwe, jeśli nie chce się za to komuś płacić i nie potrafi się kodować? A może chcą się nauczyć tej sztuki? Wszystko jest obecnie możliwe. Wystarczy chcieć i znaleźć trochę...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/moja-www/">Moja www&#8230;</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1050" height="700" src="https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982.jpeg" alt="" class="wp-image-1211" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982.jpeg 1050w, https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982-300x200.jpeg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982-768x512.jpeg 768w, https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982-1024x683.jpeg 1024w, https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982-272x182.jpeg 272w, https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982-680x452.jpeg 680w, https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982-340x226.jpeg 340w, https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982-740x492.jpeg 740w, https://www.danuta-cybulska.com/wp-content/uploads/2018/02/pexels-photo-832982-370x246.jpeg 370w" sizes="(max-width: 1050px) 100vw, 1050px" /></figure>



<p class="wp-block-paragraph">Obecnie wszyscy mają swoje miejsce w internecie. Niektórzy mają profil na Instagramie, inni na Facebooku. Są również osoby, które chcą własnej strony www. Czy to możliwe, jeśli nie chce się za to komuś płacić i nie potrafi się kodować? A może chcą się nauczyć tej sztuki? Wszystko jest obecnie możliwe. Wystarczy chcieć i znaleźć trochę czasu. </p>



<p class="wp-block-paragraph">Przyda się też sporo samozaparcia, kiedy motywacja co jakiś czas będzie spadać.</p>



<span id="more-1766"></span>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Zbuduj stronę</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">W internecie można znaleźć wszystko. Dlatego niektórzy chcą mieć tam swoje miejsce. Czy prowadzić bloga, czy postawić stronę wizytówkową &#8211; to kwestia motywacji. Jeśli chcemy coś przekazać od siebie, to blog jest dobrym wyborem. Każda opinia jest dobra. A tak na dobrą sprawę nie trzeba wybierać pomiędzy wizytówką a blogiem. Można mieć obie te rzeczy na raz.  </p>



<p class="wp-block-paragraph">Aby strona faktycznie była nasza, warto kupić sobie domenę oraz miejsce na serwerze. Wtedy jak długo płacimy (raz do roku) tak długo jesteśmy jedynym właścicielem naszej strony. <br/>Gdzie kupimy domenę i serwer? Wpisując w Googla frazę  &#8222;hosting&#8221; wyskoczą nam firmy, które się tym zajmują. <br/>Ja mam serwer na <a href="http://www.zenbox.pl">Zenbox</a>.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Którędy droga?</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Aby postawić stronę, musisz się zastanowić, jak to zrobić. Nie chcesz nikomu za to płacić? Naucz się tego!. <br/>Masz dwie drogi. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Prostą i tą bardziej czasochłonną.<br/>Wybierając <strong>WordPress</strong>, możesz dosyć szybko postawić stronę samodzielnie. Ja tak zrobiłam. Ten blog, który czytasz, powstał dzięki<a href="http://www.ewelinamuc.com"><strong> Ewelinie Muc</strong></a> i jej kursowi <a href="http://www.wpdlazielonych.pl">&#8222;WP dla zielonych&#8221;</a>. I faktycznie jest dla całkiem &#8222;zielonych&#8221; jeśli chodzi o technologie internetowe.</p>



<p class="wp-block-paragraph"><em> Kilka razy w roku może zakupić ten kurs. <br/><em>Obecnie, do poniedziałku &#8211;<strong> 08.10</strong> &#8211; Ewelina prowadzi jego sprzedaż.</em> </em></p>



<p class="wp-block-paragraph">To jest ta prostsza droga. A ta bardziej absorbująca to już faktyczne kodowanie jak front-endowiec. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Będziesz potrzebować ogarnięcia <strong>HTML5</strong> oraz <strong>CSS3</strong>. W późniejszym czasie przyda się znajomość <strong>JavaScriptu</strong>. <br/>Ogarnięcie tego z pewnością zajmie dużo więcej czasu niż WordPress, ale co się nauczysz to Twoje.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Avocode i Brackets</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Jeśli wybierasz tę dłuższą drogę &#8230; no cóż, czeka cię trochę pracy. Ale za to jaka satysfakcja! Dwa programy, które Ci pomogą w programowaniu to (według mnie) Avocode <a href="https://avocode.com/">&#8211; link</a> oraz Brackets <a href="http://brackets.io/">&#8211; link</a>. </p>



<h4 class="wp-block-heading">Avocode</h4>



<p class="wp-block-paragraph">Avocode to program do obróbki plików PSD. Cóż to plik PSD? To format pliku do zapisu grafiki dwuwymiarowej.  Tak zapisuje się projekty stron. Poniżej jej przykład. <br/>Oczywiście, jeśli chcesz wymyślić stronę całkowicie sama, to nie potrzebujesz tej aplikacji i gotowych projektów. Ale! To narzędzie warto poznać. Zwłaszcza że ma ono 14-dniowy okres próbny. Później płaci się miesięczną subskrypcję, którą zawsze można albo zwiesić lub z niej zrezygnować.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://www.danuta-cybulska.com/wp-content/uploads/2018/10/9-8-project-107x300.png" alt="" class="wp-image-1768" width="184" height="516" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/10/9-8-project-107x300.png 107w, https://www.danuta-cybulska.com/wp-content/uploads/2018/10/9-8-project-768x2157.png 768w, https://www.danuta-cybulska.com/wp-content/uploads/2018/10/9-8-project-365x1024.png 365w, https://www.danuta-cybulska.com/wp-content/uploads/2018/10/9-8-project.png 1280w" sizes="(max-width: 184px) 100vw, 184px" /></figure></div>



<p class="wp-block-paragraph">Co potrafi Avocode? Możemy wycinać zdjęcia, pobierać fragmenty kodu, dokładne wymiary elementów oraz ich rozmieszczenie. Mamy gotowe informacje m.in. na temat wysokości, szerokości elementu, czcionki i jej rozmiaru, kolorów; wszystko od razu z odpowiednimi jednostkami. Możemy skopiować wszystko jednym kliknięciem i wkleić do bezpośrednio swojego edytora. Oczywiście nie zakoduje to naszej strony od razu ;), ale bardzo usprawni sam proces.</p>



<h4 class="wp-block-heading">Brackets</h4>



<p class="wp-block-paragraph">To edytor tekstu stosowany do pisania kodu. Istnieje jeszcze wiele innych stosowanych przez programistów. Dlaczego ten? Próbowałam kilku i ten jest dla mnie najwygodniejszy. Można w nim włączyć opcję Emmet &#8211; super sprawa. Co jeszcze? Możesz zmienić jego wygląd, dorzucać masę wtyczek oraz co chyba na początku drogi z kodowaniem jest to prosty w obsłudze program. Koloruje kod. Co to znaczy? Od razu zauważysz, gdzie masz przypisaną kasę, tag czy jakikolwiek inny element (np. zmienne, funkcje w JS).<br/>Poza tym jest dostępny podgląd &#8222;na żywo&#8221;. Coś jak<strong> CodePen</strong>, ale lokalnie <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br/>Brackets jest dostępny w wersji polskiej i można go podpiąć do GIT-a.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">WordPress</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ok. Zdecydowałaś się jednak najpierw poznać WordPress. Też dobra droga, bo oswaja Cię z technologią. Tak ja wspomniałam wyżej &#8211; możesz <a href="https://wpdlazielonych.pl/">kupić kurs u Eweliny</a>   albo &#8230;gdziekolwiek indziej. W internecie wiele osób proponuje kursy WordPressa. W każdym Udemy czy Strefie Kursów znajdziesz to, co potrzebujesz. Możesz też znaleźć na You Tube darmowe kursy WordPressa &#8211; czy są dobre? Nie wiem, bo tak jak już pisałam &#8211; wierna jestem Ewelinie Muc.<br/>Jest jeszcze jedna osoba, która zajmuje się tą technologią. To <a href="https://olagosciniak.pl/"><strong>Ola Gościniak</strong></a>. Nie tak dawno polecałam ją na naszym fanpage&#8217;u na Facebooku. </p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Bądź online</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ola napisała książkę o tworzeniu strony www na podstawie WordPress. Od kompletnych podstaw, czyli celu strony do SEO i innych takich spraw. Wszystko opisała prostym językiem i okrasiła ćwiczeniami. Mamy sporą dawkę teorii popartej praktyką. Nic tylko działać. <a href="https://olagosciniak.pl/sklep/">Książkę możesz kupić tu</a>. Ola poza tym prowadzi bardzo merytorycznego bloga na tematy związane z blogowaniem i WordPressem oraz sprzedaje również swój <a href="https://olagosciniak.pl/sklep/kurs-wordpress/">kurs WordPressa</a>. Nie przechodziłam go, ale jeśli jest choć trochę zbliżony stylem do książki, to jest to bardzo fajny wybór. </p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Co będzie?</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Jeśli chodzi o WordPressa, to warto go znać. I jest mnóstwo kompetentnych osób, które Cię poprowadzą &#8222;za rączkę&#8221;. </p>



<p class="wp-block-paragraph">Dodatkowo nauka html, css i JS to inwestycja w Twoje umiejętności. W serii wpisów o front-endzie chce Ci pokazać, co można zakodować samej. Dlatego na początek wybierz projekt. Tak jak już wspomniałam, taki projekt zapisany jest w pliku PSD. Gdzie znaleźć takie projekty? <br/>Masz dwie drogi (znowu!;)).<br/> Wpisz w wujka googla: &#8222;projekt PSD free&#8221;.</p>



<p class="wp-block-paragraph">Albo skorzystaj z linku poniżej. Zapisując się na darmowe konto, możesz wybierać, przebierać w setkach projektów stron. </p>



<div class="wp-block-button aligncenter"><a class="wp-block-button__link has-text-color has-white-color has-background has-pinnacle-primary-light-background-color" href="https://symu.co/"><em><strong>SYMU &#8211; darmowe projekty stron www</strong></em></a></div>



<p class="wp-block-paragraph"></p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/moja-www/">Moja www&#8230;</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/moja-www/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Raport 5</title>
		<link>https://www.danuta-cybulska.com/raport-5/</link>
					<comments>https://www.danuta-cybulska.com/raport-5/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Wed, 04 Jul 2018 08:00:10 +0000</pubDate>
				<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[bootstrap4]]></category>
		<category><![CDATA[freeCodeCamp]]></category>
		<category><![CDATA[html i css]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[nauka]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[sololearn]]></category>
		<category><![CDATA[strefa kursów]]></category>
		<category><![CDATA[udemy]]></category>
		<guid isPermaLink="false">http://www.danuta-cybulska.com/?p=1357</guid>

					<description><![CDATA[<p>Zaczynają się wakacje i sezon urlopowy. Zastanawiacie się, czy tak czasem nie odpuścić sobie? Oj nie! Tego robić nie wolno. Można trochę zwolnić tempo, ale na pewno nie przestać. Bez codziennej praktyki można zaprzepaścić to, co się już osiągnęło. Skąd wiem? Z doświadczenia. Za każdym razem, kiedy przestawałam na jakiś czas (tydzień, dwa) coś robić,...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/raport-5/">Raport 5</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;">Zaczynają się wakacje i sezon urlopowy. Zastanawiacie się, czy tak czasem nie odpuścić sobie?<br />
Oj nie! Tego robić nie wolno. Można trochę zwolnić tempo, ale na pewno nie przestać. Bez codziennej praktyki można zaprzepaścić to, co się już osiągnęło. Skąd wiem? Z doświadczenia.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1364" src="http://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-300x200.jpg" alt="" width="451" height="300" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-300x200.jpg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-768x512.jpg 768w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-1024x683.jpg 1024w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-272x182.jpg 272w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-680x452.jpg 680w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-340x226.jpg 340w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-740x492.jpg 740w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook-370x246.jpg 370w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/coffee-desk-laptop-notebook.jpg 1050w" sizes="(max-width: 451px) 100vw, 451px" /></p>
<p><span id="more-1357"></span></p>
<p>Za każdym razem, kiedy przestawałam na jakiś czas (tydzień, dwa) coś robić, okazywały się dwie rzeczy:</p>
<ul>
<li>zapominałam po części tego, co się nauczyłam &#8211; wtedy ratują nas dobre notatki.</li>
<li>strasznie trudno wrócić do codziennej praktyki.</li>
</ul>
<p>&nbsp;</p>
<p>A co się u mnie działo w czerwcu? Kilka rozpoczętych wyzwań, tych całkowicie prywatnych i tych publicznych.</p>
<p>Wyzwania:</p>
<ul>
<li><strong>#webdevchallenge </strong>&#8211; pisałam o nim ostatnio. I &#8230; pokonało mnie. Tak bywa. Próbowałam i próbowałam, ale frustracja spowodowana moimi brakami w wiedzy i umiejętności wygrała. Ale, ale &#8230; odkładam je jedynie na później podobnie jak ogarnięcie paru kursów z JavyScript. &#8222;Nie mówię nie &#8211; mówię: później&#8221;.</li>
<li><strong>#100DaysOfCode</strong> &#8211; działam i raportuję na <a href="https://twitter.com/ModernGia">Twitterze</a> codziennie czego się uczyłam i co robiłam związanego z kodowaniem.</li>
</ul>
<p>Kursy:</p>
<ul>
<li>ciągle nadal na tapecie jest <a href="http://www.freecodecamp.org"><strong>F</strong><strong>reeCodeCamp;</strong></a></li>
<li>skończyłam kurs o Bootstrap4 na <strong><a href="http://www.udemy.com">udemy</a>;</strong></li>
<li>zaczęłam kolejny o Bootstrap 4 na &#8230; <a href="http://www.strefakursów.pl"><strong>strefa kursów</strong></a> &#8211; zapytacie, po co robić dwa kursy w tej samej tematyce? Odpowiedź jest nader prosta. Pierwszy kurs był w języku angielskim i nie jestem osobiście pewna czy wszystko dobrze zrozumiałam&#8230; nie ufam na tyle mojej znajomości języka angielskiego&#8230; Podskórnie czuję, że coś mi chyba w głowie źle się zakodowało.</li>
</ul>
<p>&nbsp;</p>
<p>Lecę jeszcze z aplikacją na telefon: <strong><a href="https://www.sololearn.com/">SoloLearn</a>. </strong>W maju zaczęłam podstawy HTML i CSS. W czerwcu skończyłam CSS i zaczęłam podstawy JavaScript.</p>
<p>Poza tym w końcu przeczytałam do końca ( a ciągnęła mi się niemiłosiernie)<strong> &#8222;JavaScript dla dzieci&#8221; Nick Morgan.</strong></p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-1368 alignleft" src="http://www.danuta-cybulska.com/wp-content/uploads/2018/07/pobrane-4.jpg" alt="" width="225" height="225" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/07/pobrane-4.jpg 225w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/pobrane-4-150x150.jpg 150w, https://www.danuta-cybulska.com/wp-content/uploads/2018/07/pobrane-4-60x60.jpg 60w" sizes="(max-width: 225px) 100vw, 225px" /></p>
<p>Cóż o niej mogę napisać? W bardzo prosty wręcz &#8222;łopatologicznie&#8221; (serio!) tłumaczy wszystko, co najważniejsze w JavaScripcie. Pokazuje krok po kroku jak napisać prostą grę i tłumaczy co każda funkcja, metoda itp. robi. Zdecydowanie jest to książka dla tych, którzy nie mieli z programowaniem nic wspólnego.<br />
Dlaczego szło mi tak opornie jej czytanie? Po pierwsze miałam darmowy ( no, powiedzmy &#8211; wypożyczony przez moją bibliotekę ) ebook, który czytałam na aplikacji zainstalowanej na komórce. Często owa appka mi się wieszała i (co tu dużo mówić) przegrywała z papierowymi książkami. Sorry &#8230; taki mamy klimat.</p>
<p>Aktualnie na tapecie pojawił się również ebook z biblioteki p.t.<strong> &#8222;HTML5 i CSS3 Definicja nowoczesności&#8221; Dawid Mazur.</strong> Na razie nie mam wyrobionej opinii. Choć to znowu będą podstawy podstaw. Grunt to usystematyzować wiedzę.</p>
<p>&nbsp;</p>
<p>Zrobiłam też malutką stronkę, jeśli chcecie zobaczyć, to zapraszam. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> &#8211; <a href="https://codepen.io/DanaCyb/pen/MGxGNe">link.</a></p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/raport-5/">Raport 5</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/raport-5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Raport 3</title>
		<link>https://www.danuta-cybulska.com/raport-3/</link>
					<comments>https://www.danuta-cybulska.com/raport-3/#respond</comments>
		
		<dc:creator><![CDATA[Danuta]]></dc:creator>
		<pubDate>Wed, 02 May 2018 08:00:12 +0000</pubDate>
				<category><![CDATA[Programowanie i Rozwój]]></category>
		<category><![CDATA[avocode]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[codzienność]]></category>
		<category><![CDATA[czytamy]]></category>
		<category><![CDATA[Duckett]]></category>
		<category><![CDATA[Elementary OS]]></category>
		<category><![CDATA[freeCodeCamp]]></category>
		<category><![CDATA[html i css]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript w 30 dni]]></category>
		<category><![CDATA[kodowanie]]></category>
		<category><![CDATA[książki]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[marzenia]]></category>
		<category><![CDATA[nauka programowania]]></category>
		<category><![CDATA[organizacja]]></category>
		<category><![CDATA[plan nauki]]></category>
		<category><![CDATA[planowanie]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[skup książek]]></category>
		<category><![CDATA[Wes Bos]]></category>
		<guid isPermaLink="false">http://www.danuta-cybulska.com/?p=1296</guid>

					<description><![CDATA[<p>Jedno jest pewne, nadal nie znalazłam swoje rytmu nauki kodowania. Niestety zbyt często inni odciągali mnie od klikania. :/ Ale nie jest tak, że nic nie zrobiłam. Po prostu w moim odczuciu zrobiłam zbyt mało. Ale możliwe jest, że tak sugeruje mój wewnętrzny krytyk. Popycha mnie do zbytniego perfekcjonizmu na każdym polu. Szczerze Avocode odpaliłam...</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/raport-3/">Raport 3</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Jedno jest pewne, nadal nie znalazłam swoje rytmu nauki kodowania. Niestety zbyt często inni odciągali mnie od klikania. :/</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1287" src="http://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-300x200.jpeg" alt="" width="425" height="283" srcset="https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-300x200.jpeg 300w, https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-768x512.jpeg 768w, https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-1024x683.jpeg 1024w, https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-272x182.jpeg 272w, https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-680x452.jpeg 680w, https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-340x226.jpeg 340w, https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-740x492.jpeg 740w, https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846-370x246.jpeg 370w, https://www.danuta-cybulska.com/wp-content/uploads/2018/04/pexels-photo-583846.jpeg 1050w" sizes="(max-width: 425px) 100vw, 425px" /></p>
<p><span id="more-1296"></span></p>
<p>Ale nie jest tak, że nic nie zrobiłam. Po prostu w moim odczuciu zrobiłam zbyt mało. Ale możliwe jest, że tak sugeruje mój wewnętrzny krytyk. Popycha mnie do zbytniego perfekcjonizmu na każdym polu.</p>
<p>Szczerze <strong>Avocode</strong> odpaliłam w zeszłym miesiącu, zdaje się, że tylko z dwa razy (?). Nie ma co się chwalić, bo nie posunęłam się zbytnio do przodu w tej materii.<br />
Książka<strong><em> Ducketta</em> </strong><em><strong> „HTML i CSS. Zaprojektuj i zbuduj witrynę www”</strong> </em>jest na bieżąco czytana, bardziej jako uzupełnienie kursu na <strong>FreeCodeCamp.<br />
JavaScript w 30 dni </strong>ostatecznie odłożyłam na bliżej nieokreślony czas<strong>.</strong> Niestety tego wszystkiego było za dużo, a dodatkowo (muszę się do tego przyznać) mój angielski jest raczej toporny i wszystko, co Wes Bos mówi, ja niestety muszę na spokojnie sobie przetłumaczyć (nierzadko z tłumaczem google), aby zrozumieć. No i oczywiście czegoś się nauczyć.</p>
<p>Zostaje jeszcze <strong>pan Linux. </strong>Zrobiłam to! Na ten temat planuję posta. Opiszę, jak to wygląda i jak się do tego zabrać krok po kroku. Jedno przesłanie &#8211; Bój się i działaj. Naprawdę nie wiem, dlaczego tak długo zwlekałam z tym. Nowego Windowsa bym nie kupiła ekstra dla Toshiby. To by się nie kalkulowało, bo bym musiała ją jeszcze dodatkowo podkręcać. W końcu to staruszka &#8211; ma osiem(!!) lat.</p>
<hr />
<p>Kolejna partia książek do <strong>Skupbook.pl</strong> już poleciała. Planuję kolejne. A Wy jak pozbywacie się swoich książek?</p>
<p>Artykuł <a href="https://www.danuta-cybulska.com/raport-3/">Raport 3</a> pochodzi z serwisu <a href="https://www.danuta-cybulska.com">To co najważniejsze</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.danuta-cybulska.com/raport-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
