Hej 👋
Widzimy się po raz pierwszy w nowym miejscu i w odrobinę odświeżonej formule 😄. W tym tygodniu mam dla Was podsumowanie roku 2020 w oparciu o gwiazdki GitHub’a, nowy proposal dla JavaScrptu, release notes Snowpack’a i Scala.js. Łapcie popołudniową kawę ☕️ i zapraszam do lektury 📚.

1. 2020 JavaScript Rising Stars ⭐️

Połowa stycznia już za nami, a sieci ciągle nie przestają zalewać kolejne podsumowania i raporty dotyczące roku 2020. Dziś dla odmiany mam dla Was raport oparty nie o ankietę czy zescrapowane dane, a o przyrost gwiazdek na GitHubie. Prawdopodobnie pierwsze, o czym teraz pomyśleliście to, że gwiazdki nie są najlepszym odwzorowaniem rynku pracy, ale czasem trendy na GitHubie pozwalają wychwycić przyszłe trendy wśród deweloperów już we wczesnej fazie.

Frontendowa Środa na przełomie roku 2020/2021‌‌

Analizę zaczniemy od backendu, bo jak wynika chociażby z State of JS 2020, czyści Frontend Developerzy powoli odchodzą do lamusa. Tutaj mamy też do czynienia z najbardziej rzucającym się w oczy trendem w całym raporcie, czyli wzrostem popularności Deno. Deno to następca Node’a, który natywnie wspiera TypeScript, stawia na bezpieczeństwo i naprawia błędy swojego poprzednika. Na razie o dużych wdrożeniach na produkcję nic nie słychać, ale rosnące zamieszanie wokół tematu pozwala mieć nadzieję, że projekt nie skończy jako kolejna ciekawostka.

Wracając do clue Frontendowej Środy warto spojrzeć, jak się sprawy mają wśród frameworków frontendowych. Na GitHubie niepodzielnie króluje Vue, który kolejny rok z rzędu gromi konkurencję pod względem wzrostów i gwiazdek. Ciekawe rzeczy dzieją się natomiast w peletonie stawki. Angular wyprzedził Svelte i uplasował się na trzeciej pozycji (czasami zastanawiam się, czy trzecia pozycja Angulara nie powinna stać się równie memiczna, co czwarta pozycja Arsenalu w tabeli Premier League, ale trzymam kciuki za lepszą przyszłość Angulara, więc powstrzymam się od tego porównania). Pierwszą piątkę zamyka debiutant Alpine, czyli framework stawiający na szybkość i prostotę, który podobno świetnie spina się z Elixirem czy Ruby.

Jeśli mówimy o frontendzie to nie sposób pominąć CSSów. Tutaj zdecydowanie wygrał Tailwind (niedawno informowaliśmy Was o wersji 2.0), wokół którego zaczyna się robić coraz więcej hałasu. Podejście Utility First zdaje się powoli wypierać BEM, więc jeśli jeszcze nie mieliście szansy spróbować, to może być ostatni moment, żeby wskoczyć do tego pociągu.

Na koniec jeszcze jedna obserwacja: wśród narzędzi do budowania aplikacji, po latach stagnacji, wreszcie coś zaczyna się zmieniać. W rankingu gwiazdek wygrał raczkujący Rome, ale nie jest to jedyna konkurencja dla webpacka. Ciężko powiedzieć, jak sytuacja w tej kategorii potoczy się dalej, ale duża konkurencja na pewno przyniesie nam deweloperom sporo nowych featerów i możliwości.

Jeśli chcecie wyrobić sobie własną opinię albo jesteście ciekawi pozostałych kategorii, to odsyłam Was do raportu podlinkowanego niżej.

https://risingstars.js.org/2020/en

2. JavaScript immutable types 🥰

Osobiście czuję spore przywiązanie do programowanie funkcyjnego. Wszystko zaczęło się na studiach od nauki Haskella. Zajęcia sprawiły mi sporo trudności ale równocześnie zaintrygowały mnie do dalszej eksploracji tematu. Tym, co wtedy przykuło moją uwagę, był dosyć popularny kurs `Functional Programming in Scala` prowadzony przez samego twórcę języka. Od tego momentu zaczęła się moja fascynacja zarówno Scalą i programowaniem funkcyjnym.

Ścieżka mojej kariery poprowadziła mnie jednak w niespodziewanych kierunkach i tak oto wylądowałem jako Fullstack Developer. W moich pierwszych zawodowych stycznościach z JavaScriptem, dużym zaskoczeniem było określenie tego języka jako funkcyjnego. JavaScript w niczym nie przypominał znanych mi języków funkcyjnych…

Moja reakcja kiedy pierwszy raz czytam, że JavaScript to język funkcyjny - koloryzowane

Nie jest to jednak mój dziennik, więc wróćmy do tematu, a jest nim proposal, który przybliża JavaScript do bycia prawdziwie funkcyjnym językiem, czyli wprowadzenie niemutowalnych typów. Co prawda przed proposalem jeszcze daleka droga, ale mamy nadzieję że finalnie dotrze on do specyfikacji w 2022 roku.

Niemutowalne dane będą wspierać rekordy i krotki, a próba wymieszania ich z mutowalnymi danymi będzie skutkować błędem. Niemutowalne dane będą też współpracować z porównywanie przez wartość.

// new records
const r1 = #{ a: 1, b: 2 };
// new tuples
const t1 = #[1, 2, 3];

Osoby, które do tej pory gimnastykowały się z tworzeniem niemutowalnych typów wiedzą o jak dużym usprawnieniu tutaj mowa. Do tej pory podobny efekt można było osiągać przez `Object.freeze()` albo tworzenie klas z samymi getterami, jednak miało to swoje ograniczenia (np. osiągnięcie w ten sposób zagnieżdżonego immutability było bardzo trudne).

Jeśli chcecie poznać więcej szczegółów, to odsyłam Was do linku poniżej.

JavaScript’s New Immutable Data Types: Records and Tuples - SitePoint
Are you frustrated by immutability issues in JavaScript? Learn how records and tuples will finally permit robust immutable data storage and comparisons.

3. Snowpack v3.0 ☃️

W pierwszym punkcie mówiliśmy o zamieszaniu wśród narzędzi do budowania aplikacji i tutaj mamy jednego z prowodyrów tej sytuacji. Snowpack posiada produkcyjną wersję już od ponad roku, a w tym tygodniu doczekał się wersji 3.0. To czym wyróżnia się Snowpack jest szybkość budowania (albo mi się wydaje, albo wszystkie nowe narzędzia do budowania wyróżniają się tym samym 🤔). Jeśli będziecie kiedyś szukać narzędzia do zbudowania waszego hobbystycznego projektu, to Snowpack może okazać się warty sprawdzenia, bo otrzymał w 2020 roku nagrodę w kategorii Productivity Booster przyznaną przez przyosawards.com.

Deweloper konfigurujący Snowpack po raz pierwszy‌‌

Co nowego w wersji 3.0 ? Przede wszystkim Streaming Imports, które pozwalają całkowicie pominąć krok instalacji dependencji. Oprócz tego w releasie doszło też sporo optymalizacji i ulepszeń dla API.

// you do this:
import * as React from 'react';

// but get behavior like this:
import * as React from 'https://cdn.skypack.dev/react@17.0.1';
Snowpack v3.0
Snowpack v3.0 is here! Our biggest release yet with some serious new features, including pre-bundled streaming imports, built-in bundling & optimizations, new JavaScript APIs, and more.′

4. Announcing Scaja.js 1.4.0 🧐

Dla wielu osób nie zainteresowanych środowiskiem Scali informacja, że projekt scala.js ciągle żyje i jest rozwijany, może być sporym zaskoczeniem (dla wielu zainteresowanych tym środowiskiem również, bo projekt żyje trochę z boku całego ekosystemu). W świecie, w którym TypeScript całkowicie zdominował rynek typowanego JavaScriptu, scala.js w jakiś sposób znalazła swoją niszę (ciekawostka: prace nad TypeScript rozpoczęły się w 2012 roku, a nad Scala.js w 2013 roku, więc może istnieje alternatywny wszechświat, w którym scala.js zajmuje pierwsze miejsca wśród frontend developerów). Jeśli zastanawiacie się gdzie jest ta nisza, to o dobrym zastosowaniu dla scala.js możecie przeczytać: tutaj (TLDR: narzędzie rozszerzające dokumentację o wyszukiwanie funkcji na podstawie jej sygnatury. Dzięki kompilacji do js w pełni działające po stronie klienta).

Wracając na ziemię scala.js jest mocno w tyle, jeśli chodzi o funkcjonalność JavaScriptu. W opublikowanej w tym tygodniu wersji biblioteka otrzymała wsparcie dla lazy loadingu bibliotek: funkcjonalności, która w JavaScript jest obecna już od lat.

class HeavyFeature {
  def doHeavyFeature(x: Int): Int =
    x * 2
}

class MyApp {
  def useHeavyFeature(): Unit = {
    val input: Int = getInput()
    val resultPromise: js.Promise[Int] = js.dynamicImport {
      new HeavyFeature().doHeavyFeature(input)
    }
    for (result <- resultPromise.toFuture)
      updateUIWithOutput(result)
  }
}
Rzadki obrazek pokazujący scala.js nadganiającą nowe funkcjonalności JavaScriptu

Nic nie zapowiada nagłego wzrostu popularności takich projektów jak scala.js albo Kotlin/JS, ale na pewno warto wiedzieć o ich istnieniu. Dla całego grona zatwardziałych backend deweloperów, nienawidzących JavaScriptu z całego serca, jest to jedyna droga do tworzenia frontendu.

Announcing Scala.js 1.4.0
Build robust front-end web applications in Scala with Scala.js

Mamy nadzieje, że się podobało i do zobaczenia za tydzień! ⚡️

Jeśli chcesz otrzymywać tego typu treści spersonalizowane pod Ciebie, pobierz Vived!