Wspinaczka po drzewie abstrakcji
Pamiętam pierwsze linijki kodu, które napisałem. W pierwszej klasie liceum po raz pierwszy zetknąłem się z programowaniem. Nauczyciel powiedział nam, że pora przestać rozmawiać o pseudokodzie i algorytmach i zacząć pisać działający kod w C++. To było dziwne, ale dawało poczucie spełnienia. Mój program pobierał z konsoli dwie liczby i wypisywał na niej ich sumę.
Wpatrując się w konsolę, wcale nie myślałem o tym, że 29 innych uczniów napisało te same linijki kodu. Dlaczego miałoby to być problemem? Przecież dopiero się uczyliśmy, prawda?
Przenieśmy się 15 lat naprzód. Choć kontekst jest inny, rezultat pozostaje ten sam. Ty, ja i dziesiątki tysięcy programistów na całym świecie piszemy te same linijki kodu. Może nie dodajemy dwóch liczb, ale na pewno wyrównujemy elementy div, pobieramy dane z punktów końcowych REST i wyszukujemy użytkowników w bazie danych. Czy nadal się uczymy?
Rozwój automatyzacji
Mówiąc o uczeniu się ludzi w 2019 roku, mamy silnego konkurenta. Nie męczy się on pisaniem i wykonywaniem w kółko tego samego kodu. Może też mieć ogromny wpływ na to, jak potoczy się przyszłość naszej pracy.
Wiele mówi się dziś o automatyzacji i zastępowaniu ludzi przez maszyny. Jak rynek pracy przygotowuje się na taką zmianę?
Automatyzacja jest już ugruntowaną praktyką w inżynierii oprogramowania. Popularne języki programowania i narzędzia mają mnóstwo wbudowanych mechanizmów automatyzacji. Wystarczy pomyśleć o przydzielaniu pamięci i jej odśmiecaniu, sprawdzaniu typów czy kompilowaniu programów.
Automatyzacja usprawnia również same procesy tworzenia oprogramowania. Uruchamiamy testy funkcjonalne i niefunkcjonalne naszych aplikacji i usług. Korzystamy z automatycznych potoków budowania i wdrażania, które uruchamiają serwery i konfigurują środowiska za nas.
Mimo to samo pisanie kodu wciąż uznajemy za pracę dla ludzi. Na każdym poziomie stosu technologicznego polegamy na wyspecjalizowanych inżynierach, którzy projektują i tworzą systemy backendowe, bazy danych, aplikacje internetowe, aplikacje mobilne itp.
Być może praca inżynierów oprogramowania nie jest skazana na automatyzację. Może „automatyzacja” to niewłaściwe słowo. A co, jeśli chodzi o abstrakcję?
Automatyzacja a abstrakcja
Pomyśl o programowaniu niskopoziomowym i wysokopoziomowym. O tym, jak dużą swobodę daje przydzielanie pamięci lub adresowanie rejestrów procesora. A zarazem o tym, jak wiele możliwości daje dobrze napisany framework.
Wybierając wyższy poziom abstrakcji, pozwalasz innym podejmować za siebie decyzje niskopoziomowe. Dzięki temu możesz znacznie szybciej dostarczyć kompletne rozwiązanie programistyczne. Oczywiście, przynajmniej w teorii.
Abstrakcję można przedstawić jako drzewo decyzji. Cheng Lou wygłosił świetną prelekcję o kompromisach związanych z przemieszczaniem się w górę i w dół tego drzewa abstrakcji.
Ostatecznie abstrakcja polega na automatyzowaniu powtarzalnych zadań i możliwości wyrażania więcej przy mniejszym wysiłku. Chodzi o korzystanie z kodu napisanego przez kogoś innego, zamiast powielać tę pracę.
Automatyzacja jest więc dla nas — nie po to, by nas zastąpić, lecz by umożliwić nam korzystanie z wyższych poziomów abstrakcji. Doprowadzi to do niewielkich zmian na rynku pracy dla inżynierów oprogramowania, ale z pewnością nie sprawi, że przestaną być potrzebni. Coraz więcej z nas będzie poświęcać mniej czasu na kodowanie niskopoziomowych zagadnień, które inni już rozwiązali. Miejmy nadzieję, że dzięki temu więcej czasu będziemy mogli przeznaczyć na rozwiązywanie problemów, z którymi nikt wcześniej się nie uporał.
Czy rozwój frontendu pozostaje w tyle?
Przyglądając się bliżej tworzeniu aplikacji internetowych i mobilnych, widać, że zmierza ono w tym kierunku wielkimi krokami. W ciągu ostatnich kilku lat nastąpił niesamowity rozwój narzędzi, frameworków i usług. Wszyscy starają się oferować lepsze i bardziej zaawansowane abstrakcje.
Backend jako usługa, GraphQL czy narzędzia do tworzenia systemów projektowych stają się powszechnie stosowane. Jednak w tworzeniu interfejsów użytkownika na urządzenia mobilne i do aplikacji internetowych jeszcze nie osiągnęliśmy tego etapu. Pracujemy z niskopoziomowymi podstawami sieci: HTML-em, CSS-em i JavaScriptem. Owszem, mamy TypeScript, Reacta, CSS-in-JS i dziesiątki innych narzędzi, które usprawniają pracę programistów. Jednak charakter naszych zadań zasadniczo się nie zmienił. Wciąż piszemy te same komponenty i interakcje użytkownika co tysiące programistów na całym świecie. Nadal się uczymy.
Wypełnianie luki dzięki automatyzacji i generowaniu kodu
W stosie technologicznym jest luka. Rozwój frontendu może zmierzać ku wyższemu poziomowi abstrakcji. Kod, który obecnie piszemy, można zautomatyzować lub generować. Musimy tylko wymyślić nowe sposoby modelowania całej złożoności interfejsu. Możemy zacząć od systemów zdarzeń, maszyn stanów i dwukierunkowego przepływu danych. To nie będzie łatwe, ale będzie fascynujące!
Dołączyłem do TeleportHQ w listopadzie ubiegłego roku z jasno określonym celem. Chcę wypełnić tę lukę i pracować nad kolejnym poziomem abstrakcji w rozwoju frontendu. Wierzę w nową erę narzędzi, wzorców i praktyk, które zastąpią niskopoziomowe implementacje powtarzalnych elementów interfejsu użytkownika.
Czy ta fala automatyzacji i abstrakcji pozwoli nam skupić się na najważniejszych i najtrudniejszych aspektach inżynierii frontendu? Czy rozwiąże problem powtarzalnych, nudnych zadań? Nie mogę się doczekać, by się przekonać! Dołącz do naszej misji tworzenia najlepszych generatorów kodu dla aplikacji internetowych i mobilnych jako biblioteka o otwartym kodzie źródłowym.
Komentarze
Brak komentarzy. Podziel się swoją opinią jako pierwsza osoba.