Strefa komfortu

Jak znasz dobrze jakiś język, staje się on komfortowy dla ciebie. Jak JavaScript dla mnie. Choć nie będę udawał, że znam go całego. Bo co to znaczy "znać język programowania"? Czy znam wszystkie szczegóły implementacji V8 czy innych silników JSa? No nie. Czy znam wszystkie z kilkuset przeglądarkowych API i różnych obiektów, które można utworzyć? Też nie. Czy już używam wszystkich najnowszych ficzerów w języku? Kto by na tym nadążył...

Jednak pisanie w JS dla mnie jest łatwe. Jest moją strefą komfortu. Potrafię bardzo szybko w nim pisać, z prędkością światła refaktorować, usuwać błędy bez czytania komunikatów, ogólnie czuję ten język. Wpadam również na proste rozwiązania rzeczy, które inni programiści piszą bardzo naokoło i bez sensu.

Myślę, że gdybym zrobił trochę dodatkowego researchu, tak, by odrobinę uzupełnić i pogłębić swoją wiedzę, to mógłbym pisać książki o JS. I może tak zrobię. Tylko, że nie wiem, czy jest sens pisać kolejną książkę o samym JavaScript jako języku. Prędzej byłyby to książki dotyczące konkretnego aspektu programowania. Np. o tym, jak robić gry w JavaScript. Albo o architekturze oprogramowania. Tak, żeby przekazać innym to, co już wiem i to, czego się dopiero nauczę pisząc i robiąc research.

Jednak czuję potrzebę jeszcze mocniejszego wyjścia ze strefy komfortu - o ile samo pisanie książki (albo robienie internetowych kursów, nie wiem, w jakiej to będzie formie) będzie takim wyjściem, to nie chcę się zamykać na JavaScript. Zamknięcie się w wygodnej dla siebie technologii kojarzy mi się z postawą szkolnego nauczyciela informatyki, który uczy innych w kółko tego samego od lat, bo się okopał w bagienku.

Dlatego chcę wyjść poza JavaScript, pisać aplikacje w innym języku programowania. Tym językiem będzie Rust. Już w styczniu się zacząłem go uczyć. Później trochę w nim robiłem i ogólnie ponad 60 godzin spędziłem w tym roku na nauce Rusta czy pisaniu w nim prostych programów. Jest to tyle, że już mogę robić proste rzeczy, niby ciągle kompilator krzyczy, ale zwykle wiem, co zrobić, żeby poprawić i żeby się skompilowało. Innymi słowy - mogę już w tym pisać programy.

Jednak dalej moja znajomość Rusta jest powierzchowna, nie mam tego komfortu, pewne rzeczy wydają mi się nienaturalne. Jednocześnie widzę, że język ten ma duży potencjał (duża wydajność, możliwość kompilacji do WebAssembly, ekspresywność samego języka) i ludzie o nim piszą w necie. Powstają ciągle jakieś nowe biblioteki w Rust, jakieś ciekawe projekty ludzie robią. Też chcę w tym uczestniczyć. W JavaScript jest już wszystko porobione, a w Rust można by sobie zrobić bibliotekę i potem by się stała popularna albo coś.

A co chciałbym pisać w tym Rust? No właśnie. Nie żadne HelloWorldy, tylko coś bardziej zaawansowanego. Coś, co samo w sobie będzie wyjściem poza strefę komfortu.

Najbliższym projektem, jaki chcę zrobić, będzie software renderer dla grafiki 3D. Nie dlatego, że to dobry pomysł (bo dla celów praktycznych lepiej byłoby oddelegować obliczenia do karty graficznej i kontrolować je za pomocą shaderów), tylko dlatego, że chcę zrozumieć, jak działa grafika 3D pod spodem. Chcę sam wszystko zrobić, łącznie z funkcjami do obsługi wektorów i macierzy, chcę czuć się komfortowo w algebrze liniowej (a oglądam ostatnio dużo filmików na ten temat).

Można więc powiedzieć, że wychodzę ze strefy komfortu, ale celem tego wychodzenia jest poszerzenie tejże strefy. Żeby mieć więcej możliwości i więcej umieć.

Kolejne moje plany to:

  • raytracer - to taki flagowy projekt dla kogoś, kto chce zrozumieć grafikę 3D. To trochę jak ludzie, którzy się uczą frameworków JSa, piszą Todo listy na początek. To w grafice 3D będzie to raytracer.
  • symulacja płynów - czyli implementacja równań Naviera-Stokesa. Są to takie trudne równania, że jest milion dolarów nagrody za to, że ktoś wyjaśni je światu tak, jak należy. No ale mimo, że ludzkość nie do końca rozumie te równania, to ludzie jednak z nich korzystają, są poradniki, jak można ich użyć do symulacji płynu, więc da się to zrobić. Więc chcę to zrobić, bo zawsze mi się podobało, jak ktoś wrzucił na HackerNews coś z symulacją płynu. To taka magia jakby. Chcę to umieć robić. Poszerzyć swoją strefę komfortu o symulacje fizyczne. Nawet książkę kupiłem o tym.
  • silnik fizyki (bryły sztywne) - to też ludzie umieją zrobić, nie jest to zaawansowana wiedza, tylko coś, co umiałby zrobić student pierwszego roku fizyki. Więc czemu nie ja? Fizyki nie studiowałem co prawda, ale chciałem studiować, więc to tak jakbym studiował, prawda? Wszystko jest w necie i tak.
  • kompilator i VM własnego języka programowania. Już zresztą pisałem, że mnie interesują takie rzeczy.
  • Coś ze sztuczną inteligencją, sieciami neuronowymi, computer vision? Nie wiem jeszcze co dokładnie. Może OCR?

Nie zamierzam jednak porzucać całkiem JSa. Raczej chcę uzupełnić swój arsenał programistyczny o Rusta, żeby mieć więcej możliwości i większą strefę wpływu.

Komentarze

Popularne posty z tego bloga

Ściemy z ogłoszeń o pracę

Zostać programistą (2) - czy się nadajesz?

Czego się nauczyłem w 2021?