JavaScript dokładniej - dla tych, którzy chcą się zagłębić

Warsztat ekspercki to coś więcej niż szkolenie. To praca w kontekście konkretnych problemów.

Tytuł: JavaScript dokładniej - dla tych, którzy chcą się zagłębić
Kod: JS-deeper
Kategoria: JavaScript
Forma: 20% wykłady / 80% warsztaty
Czas trwania: 3-4 dni
Odbiorcy: developerzy
Zapisy: Indywidualne zamówienie i dopasowanie dla grupy.
Logistyka: W siedzibie klienta lub w innym dowolnym miejscu.

Wymagania co do znajomości JS zmieniły się przez ostatnie kilka lat.

Pobieżna znajomość języka i API modnego dzisiaj frameworka już nie wystarczą. Poza tym frameworki się zmieniają, a język pozostaje na dłużej. W części praktycznej będziemy robić TDD (Test-Driven Development) najciekawszych ficzerów języka i idiomów, wzbogacone o tworzenie modeli koncepcyjnych, testy wydajnościowe oraz dyskusje grupowe w bezpiecznym środowisku. Dziesiątki bardzo starannie zaprojektowanych ćwiczeń pomoże Ci lepiej poznać tajniki języka i przygotuje do pisania nie tylko prostych aplikacji, ale także reużywalnych bibliotek. Założenie: najlepiej zrozumiesz działanie czegokolwiek, implementując to samemu.

Wyróżniki warsztatu

  • Bardzo szczegółowe spojrzenie na język JavaScript
  • Porównanie podejścia obiektowego i funkcyjnego w kontekście JS
  • Nauka z wykorzystaniem testów jednostkowych zamiast slajdów

Program Warsztatu eksperckiego

Program jest ramą w jakiej możemy się poruszać merytorycznie - program dla konkretnego szkolenia dedykowanego ustalamy z grupą na podstawie analizy przed-szkoleniowej.

  1. Typy - dlaczego większość porad na temat koercji typów jest zbyt uproszczona
    1. Implementujemy algorytmy konwersji dla operacji takich jak ToBoolean czy ToPrimitive
    2. Budujemy ogólny model konwersji między typami
    3. Wyrabiamy intuicję kiedy stosować koercję typów, a kiedy jej unikać
    4. Budujemy algorytm siedzący pod maską ==
    5. Dekomponujemy głęboko zagnieżdżone struktury danych z użyciem destrukturyzacji
  2. Programowanie obiektowe - dlaczego klasyczne OO w JS jest niepotrzebnie skomplikowane
    1. Tworzymy zaawansowane modele koncepcyjne dla programów opartych o funkcje konstruktora/klasy
    2. Tworzymy zaawansowane modele koncepcyjne dla programów opartych o linkowanie obiektów
    3. Rozróżniamy pomiędzy: .prototype, [[Prototype]], __proto__
    4. Poznajemy new i instanceof od podszewki
    5. Odkrywamy niuanse mixinów z Object.assign()
    6. Rozpoznajemy sytuacje, w których abstrakcja klasy wycieka
  3. Funkcje i zasięg widoczności - w pełni wykorzystujemy możliwości, które dają proste funkcje
    1. Budujemy dokładniejszą reprezentację umysłową tego czym tak na prawdę jest hoisting, modelując kontekst wywołania
    2. Budujemy dokładniejszą reprezentację umysłową funkcyjnego zasięgu widoczności na podstawie stosu kontekstów wywołania
    3. Wyciągamy niuanse zasięgu blokowego i przyglądamy się sporom na temat użycia const, let i var
    4. Rozkładamy funkcje na czynniki pierwsze (parametry vs argumenty, domyślne wartości, zmienna liczba argumentów)
    5. Porównujemy 4 sposoby dynamicznego wiązania this
    6. Testujemy i porównujemy wydajność i zużycie pamięci kodu opartego o domknięcia i o prototypy
    7. Szukamy przypadków kiedy nowości z ES6 tj. arrow functions nie powinny być automatycznym zastępstwem dla kodu ES5
  4. Programowanie funkcyjne I - zaczynamy używać pragmatyczne narzędzia programowania funkcyjnego bez doktoratu z matematyki, a Twój kod będzie prostszy i bardziej reużywalny
    1. Implementujemy funkcje wyższego rzędu dostępne w JS (map/filter/reduce/flatMap)
    2. Implementujemy przydatne funkcje wyższego rzędu niedostępne w JS (np. takeWhile)
    3. Rozwiązujemy zaawansowane problemy przetwarzania danych z użyciem ciągu funkcji wyższego rzędu
    4. Optymalizujemy wywołania funkcji z użyciem technik tj. memoization
    5. Zapobiegamy modyfikacji obiektów przez deepFreeze i wzorce programowania immutable
  5. Asynchroniczny JS - zaczniesz świadomie poruszać się w gąszczu opcji zarządzania asynchronicznością w JS
    1. Analizujemy model współbieżności oparty o pętlę zdarzeń
    2. Znajdujemy problemy z callbackami inne niż zagnieżdżenia
    3. Budujemy przydatne utilsy dla Promisów: timeout, first, retry
    4. Używamy async/await aby uzyskać synchronicznie wyglądający kod asynchroniczny
    5. Implementujemy własną wersję Observable/RxJS aby zrozumieć koncepcję strumieni
  6. Modularność - nowoczesne środowiska JS nie potrzebują hacków do pisania modularnego kodu
    1. Analizujemy kod programu opartego o wzorce Revealing Module oraz Dependency Injection
    2. Używamy natywnych modułów ES6 w Node.js i w przeglądarce bez dodatkowych narzędzi
    3. Implementujemy własny Event Emitter aby lepiej zrozumieć wzorzec Observer
    4. Porównujemy wzorce komunikacji oparte o orkiestrację i choreografię
  7. Programowanie funkcyjne II - rozrywka intelektualna dla fanów programowania funkcyjnego
    1. Poznajemy różnice pomiędzy partial application i currying
    2. Zastępujemy obiektowe Dependency Injection z konstruktorami, funkcyjnym Dependency Injection z curry
    3. Poznajemy wady i zalety stylu programowania point-free
    4. Budujemy abstrakcje do łączenia funkcji w użyteczne bloki: compose i pipe
    5. Aplikujemy Funktory i Monady do rozwiązywania praktycznych problemów
    6. Zastępujemy null/undefined komponowalnym Maybe
  8. Metaprogramowanie - wzbogacamy możliwości języka
    1. Dodajemy możliwość iterowania po obiektach
    2. Budujemy bardziej wszechstronną wersję async/await z użyciem generatorów
    3. Wzbogacamy możliwości języka z użyciem Proxy
    4. Budujemy własny DSL z użyciem tagged template literals


Pobierz program w formacie PDF

Trenerzy

Poznaj ekspertów, którzy mogą poprowadzić Twój Warsztat.

Materiały związane z warsztatem

Idea renesansowej pracowni - Bottegi zakłada nieustanną pracę jej członków i dzielenie się jej wynikami.

  • Looking for the Holy Grail of Mobile Web Performance
    KATEGORIE: JS i Front-end

    W świecie mobilnym Istnieje przeświadczenie, że jedynie aplikacje natywne są w stanie sprostać oczekiwaniom użytkowników. Wraz z pojawieniem się Progresywnych Aplikacji Webowych, które mają przenieść na platformę webową wiele cech zarezerwowanych dotąd tylko dla rozwiązań natywnych, oczekiwania dotyczące wydajności są silniejsze niż kiedykolwiek wcześniej. Czy Web jest w stanie im sprostać?

    Autor Bottega:

    Adam Bar

    Powiązane usługi:

    Audyty architektury

    Audyty architektury

  • JSON taki albo owaki... czyli kontrolowanie struktur z JSON Schema
    KATEGORIE: JS i Front-end

    Slides

    JSON jest najpopularniejszym formatem definiowania/wymiany danych w sieci. Jest elastyczny niczym XML oraz zwięzły, jak to tylko możliwe. Nie mniej, rozwiązłość strukturalna JSONów powoduje utratę kontroli nad tym, jakie dane są przechowywane. Jeśli chcesz kontrolować, co może być przechowywane w formacie JSON, zerknijmy na JSON Schema.

    Autor Bottega:

    Tomasz Ducin

    Powiązane usługi:

    Audyty architektury

    Audyty architektury

  • A Ty co zrobisz bez frameworka
    KATEGORIE: JS i Front-end

    Podczas tej prezentacji poznamy lit-html – bibliotekę, która w prosty sposób abstrahuje zawiłości operacji na DOM-ie – oraz jej kuzyna lit-element, dzięki któremu Web Componenty są dziś na wyciągnięcie ręki. Sprawdzimy, jak wiele można mieć za tak niewiele i zastanowimy się, czy lit-html może stanowić alternatywę dla frameworków.

    Autor Bottega:

    Adam Bar

    Powiązane usługi:

    Audyty architektury

    Audyty architektury

  • Async Functions Awaiting You - Tomasz Ducin
    KATEGORIE: JavaScript

    Slides

    Farewell callback hell, farewell promise chaining... the most awaited upcoming feature of ES8, async await, is taking async JavaScript by storm. Let's code async processes in a more readable, concise and extensible manner.

    During this talk we'll discuss the fundamentals: promises, generators and coroutines - and introduce async await. We'll have sequential and parallel processing explained, along with most common usecases - and gotchas. After this talk you'll never say that generators scare you or that async await is complicated - expect to find them simple.

  • badass.js - na drodze do biegłości
    KATEGORIE: JavaScript

    Co odróżnia biegłych oraz ekspertów od reszty ludzi - w jaki sposób myślą i jak się uczą? Na czym się skoncentrować, gdy wszyscy wokół zmieniają frameworki tak często jak skarpetki? Jak przygotować się do życia w świecie gdzie głęboka praca i wiedza zaczną wypierać mało wymagające zadania. Postaram się odpowiedzieć na te poważne pytania w kontekście nauki języka JavaScript. Będą też poruszanie mniej poważne tematy: Dlaczego przestałem słuchać smutnych trenerów rozwoju osobistego. Z jaką książką warto sobie wrzucić zdjęcie na Instagrama. Powiem też do czego doprowadziły mnie poszukiwania związku JS z używkami i hazardem.

  • All that JS
    KATEGORIE: JavaScript

    Slides

Zamów warsztat

Imię i nazwisko:
Firma:
E-mail:
Nr tel:
Temat:
Wiadomość:

Jeżeli preferujesz osobisty kontakt to zawsze możesz zadzwonić.

Iwona Sobótka

Koordynatorka szkoleń


Twoje dane osobowe przetwarzamy, aby udzielić odpowiedzi na Twoje pytanie. Administratorem Twoich danych osobowych jest Bottega It Minds Sławomir Sobótka. Przysługuje Ci prawo wniesienia sprzeciwu wobec przetwarzania, prawo dostępu do danych, prawo żądania ich sprostowania, usunięcia lub ograniczenia ich przetwarzania. Szczegółowe informacje dotyczące przetwarzania Twoich danych osobowych znajdują się TUTAJ.