Wybór języka

W moim ogródecku…

Dlaczego w ogóle Software Garden, co to znaczy?

Jeśli szukasz odpowiedzi na pytanie czym jest Software garden, to wydaje mi się, że nie znajdziesz lepszego wytłumaczenia niż koncepcja (którą przeczytałem kilka lat temu) oryginalnie wyłożona w książce Pragmatyczny Programista Andrzeja Hunta and Dawida Thomasa.

Istnieją takie książki, filmy, obrazy, etc., które rewolucjonizują nasz sposób myślenia w pewnych obszarach. Wiele osób wyciągnęło ciekawe wnioski z tej inspirującej książki: jedni zaczęli gotować żaby, inni gadać do gumowej kaczki… Ja wychowywałem się blisko natury, dlatego moim zdaniem oprogramowanie przez nas tworzone i wykorzystywane dużo bardziej przypomina ogród niż budownictwo czy jakieś maszyny. Na swój sposób ono żyje. Nigdy nie jest w pełni ukończone. Cały ekosystem dookoła podlega ciągłym zmianom. Modlimy się o deszcz. Pory roku zmieniają się po sobie. Potrzeba miejsca na nowe rośliny. Trzeba się pozbywać pasożytów, żeby było co jeść. Nie można co tydzień wszystkiego zaorać i zaczynać od nowa. I tak dalej…

Dlatego przed kilku laty zmieniłem opis mojego stanowiska z “Programista” lub “Inżynier oprogramowania” na “Software Gardener” (choć z wykształcenia jestem właśnie inżynierem programistą i mam na to papier). Oczywiście ludzie, którzy nie przeczytali Pragmatycznego Programisty, są czasem zmieszani lub zakłopotani. Z drugiej strony pozwala mi to bez słów porozumieć się z tymi paroma osobami (a spotkałem takie), które na wizytówce mają również napisane “Software Gardener”. Coś za coś.

Ta strona to taka internetowa reprezentacja mojej niekończącej się podróży w Ogrodnictwo Programowania. To nie jest wielkoobszarowa farma z monokulturą. To mój mały ogródek, z roślinkami o które staram się dbać, z ptakami śpiewającymi nad głową i z paroma robalami pewnie też. Rozgość się, proszę.

Podczas przygotowywania demek do wykładu co tam w Javie 21 piszczy dla zaprzyjaźnionych JUGów, natknąłem się na ciekawy przypadek JEP 443: Unnamed Patterns and Variables (Preview). Udało się go wydestylować i zreplikować. Przygotowywałem prosty przykład dla tego JEPa. Jest on oczywiście bardzo przydatny (JEP, przykład mniej) i na pewno poprawi możliwości Javy do wyróżniania się w scenariuszach programowania zorientowanych na przetważanie na danych. JEP ten nie dotyczy tylko instrukcji switch i if, ale także lambd, bloków catch i tak dalej.
Java™ 21 is real now. And so are virtual threads. Everyone got excited about them, yet you prefer to keep your Java 8 job forever, and you already have a nice plan to “accidentally” derail the migration to 21 by using virtual threads in a very, very unfortunate way. What a pity… So you decided to come for this talk to look for some inspiration ;-) Okay, please join us to learn how NOT to use virtual threads, and see the potential performance pitfalls of using them the wrong way.
Spoiler alert: this is a “from zero to hero” session. Assuming you’re familiar with programming (hopefully in Java), after this session you should be able to explain why Testcontainers are needed, simple and powerful 😉 The pyramids in Egypt were built in ancient times. We still admire them today, appreciating the craftsmanship and hard work of their builders. However, do we build houses from giant stone blocks today? Not likely, current times bring other needs and offer other technologies.
Minęło kolejne pół roku, pora na wdrożenie kolejnej wersji Javy™ na produkcji. Tym razem na pewno, bo to w końcu LTS. ;-) Zdaniem wielu “Java jest wolna”. Okazuje się, że rozwój Javy jest tak “wolny”, że kolejne wydania nie są tylko podbiciem wersji, bo mogą znacząco zmieniać reguły gry. To dobry powód na kolejny deep dive w Javie. Będzie mowa o: Virtual Threads, Pattern Matching for switch, Record Patterns, Structured Concurrency, String Templates, korzystaniu z rzeczy natywnych, co wyleciało i wyleci, i innych.
Pozwólcie mi rozpocząć ten wpis od suchara. Jedzie sobie elektron na motorze. Nagle zatrzymuje go policjant i mówi: “Musiałem Pana zatrzymać, bo przekroczył Pan znacznie prędkość, jadąc dokładnie 178 i pół kilometra na godzinę.” “No WIELKIE DZIĘKI, panie policjancie. To teraz kompletnie nie wiem, gdzie jestem!” Niektóre suchary są niesamowicie słabe, więc nie martw się, jeśli ten Cię nie rozbawił. Ten sprowadza się to do zasady nieoznaczoności. W niezwykle uproszczonym ujęciu: niektóre rzeczy we wszechświecie nie mogą być obserwowane we wszystkich swoich aspektach.
Minęło kolejne pół roku, pora na wdrożenie kolejnej wersji Javy™ na produkcji. Tym razem na pewno, bo to w końcu LTS. ;-) Zdaniem wielu “Java jest wolna”. Okazuje się, że rozwój Javy jest tak “wolny”, że kolejne wydania nie są tylko podbiciem wersji, bo mogą znacząco zmieniać reguły gry. To dobry powód na kolejny deep dive w Javie. Będzie mowa o: Pattern Matching for switch, Record Patterns, Virtual Threads, korzystanie z rzeczy natywnych, co wyleciało i wyleci, i innych.
Nie zawsze prowadzę publiczne szkolenia otwarte, ale gdy tak robię, to staram się, aby miały one charakter charytatywny. Uważam, że ta formuła ma wiele sensu. W tym wpisie postaram się pokazać, dlaczego uważam ją za użyteczną i potrzebną, ale pozwólcie, że zacznę od kilku zasad. Jeśli podoba ci się ten pomysł, śmiało możesz go wykorzystać. Zasady Gdy prowadzę charytatywne warsztaty z dziedziny IT, wprowadzam następujące zasady. Ważne jest ich pełne przestrzeganie, ponieważ złamanie jednej z zasad może całkowicie wypaczyć sens pozostałych.
Niektórzy ludzie narzekają, że nie wykonują testów integracyjnych “ponieważ zajmują za dużo czasu”. Dobrze, interakcja z rzeczywistymi zależnościami czasami nie może być skrócona, ale z pewnością istnieją sposoby na szybsze uruchamianie baz danych, brokerów wiadomości i innych, jeśli używasz do tego Testcontainers. W tym wpisie będę używał języka Java. Jednakże, ponieważ Testcontainers jest (z pewnego punktu widzenia) wygodnym sposobem na współpracę z kontenerami zgodnymi z Dockerem przy użyciu języka programowania, który znasz, to samo podejście można zastosować również do innych technologii.
Piramidy w Egipcie zostały zbudowane w starożytności. Do dziś je podziwiamy, doceniając rzemiosło i ciężką pracę ich budowniczych. Jednak czy budujemy dzisiaj domy z olbrzymich bloków kamieni? Niewątpliwie nie, obecne czasy przynoszą inne potrzeby i oferują inne technologie. Piramidy testowania zostały również zbudowane jakiś czas temu. Podziwiamy projekty dziedzictwa z bogatym zestawem testów, ale czy tworzymy dzisiaj projekty w taki sam sposób jak 10-15-20 lat temu? Jeśli nie, dlaczego wciąż chcemy je testować w ten sam sposób?
Podczas moich szkoleń i wykładów padają pytania “ale jak ty tak szybko przełączasz Javę?” albo nawet “to da się mieć kilka wersji Javy równocześnie na komputerze?!” Jeszcze jak! Sposób jest bardzo prosty: wykorzystać SDKMAN! Korzystam z niego niemal każdego dnia, przydaje się nie tylko w czasie prelekcji o najnowszych wersjach Javy, ale w zwykłej codziennej pracy, gdy trzeba sprawdzić “jak to działa na innej wersji”. Poniższy minikurs powstał jakiś czas temu m.

Wybór języka