Java na Desktopy, czy w ogóle warto się uczyć?

Jednym z często zadawanych pytań przez osoby które dopiero zaczynają się uczyć Javy, są pytania dotyczące w kontekście aplikacji desktopowych z wykorzystaniem JavyFX lub Swinga. Temat jest mi wyjątkowo bliski – przez pierwsze 3 lata komercyjnego programowania w Javie, tworzyłem system desktopowy 😊 Dziś porozmawiamy sobie na te tematy 😊

01. Krótka historia Javy na desktopach

Od pierwszej wersji Javy, wydanej w 1995 roku – Java posiadała zestaw narzędzi do budowy graficznego interfejsu użytkownika. W tamtych czasach było Abstract Window Toolkit, znany szerzej jako AWT.

AWT było prekursorem do tworzenia interfejsu użytkownika. Zaledwie dwa lata później powitaliśmy Swinga który został zbudowany z założeniem wyeliminowania większości problemów związanych z AWT. Swing bardzo szybko wyparł AWT, i stał się głównym narzędziem do budowy interfejsu użytkownika. Swing jest dostępny od wersji Javy 1.2.

Swing rządził niepodzielnie aż do 2008 roku, w którym to Oracle zaprezentowała Javę FX – nowe narzędzie do tworzenia interfejsu użytkownika.

Od tego momentu zaczął się podział – część developerów została przy Swingu, część przeszła na Javę FX, a jeszcze większa część w ogóle porzuciła Javę na desktopy.

02. Swing vs JavaFX

JavaFX w pierwszych fazach rozwoju borykała się wieloma problemami, mówiąc krótko nie była to dopracowana technologia, przez co Swing ciągle był numerem jeden jeśli chodzi o budowanie interfejsu użytkownika na desktopach. 

Sytuacja zmieniła się wraz nadejściem Javy 8, JavaFX została dodana do głównego JDK/JRE Javy, a większość problemów została już poprawiona. Od tego momentu można się spotkać z odwróceniem trendu – JavaFX była częściej polecana przez ekspertów, jako nowocześniejsze narzędzie w porównaniu do już przestarzałego Swinga.

Jednak mimo to iż JavaFX obecnie jest bardziej polecana, to jeden z największych projektów desktopowych napisanych w Javie, ciągle używa Swinga – mowa tutaj oczywiście o jednym z najlepszych IDE – IntelliJ.

IntelliJ, czyli najbardziej zaawansowany IDE ciągle używa Swinga do budowy swojego interfejsu. Trzeba im to przyznać że ludzie z JetBrains zrobili naprawdę niesamowitą robotę – wszystko działa naprawdę świetnie, przez co produkt zdobył niesamowitą popularność.

03. Czy w ogóle warto uczyć się Javy na desktopy?

Jaka osoba która przez pierwsze 3 lata komercyjnego programowania tworzyłem aplikacje desktopowe w Javie, jestem zdania że jest to ślepy zaułek. Moim zdaniem, jest to ciekawostka którą można się zainteresować – jednak nie poświęcałbym tym tematom zbyt wiele czasu.

Po pierwsze – nie dajmy sobie wmówić że jeden konkretny język jest super do wszystkiego – tak nie jest. Java idealnie się sprawdza do rozwiązań po stronie backendowej, jednak jeśli chodzi o tworzenie interfejsu użytkownika na desktopy ma zdecydowanie więcej wad niż zalet.

Jedną z głównych wad Javy podczas tworzenia aplikacji desktopowych jest to, iż użytkownik który chciałby z takiej aplikacji skorzystać, musi na swoim komputerze mieć zainstalowaną Javę w konkretnej wersji. Jeśli chodzi o JavaFX (w najnowszej wersji – 11+) musi mieć zainstalowane dodatkowe moduły które pozwolą mu na uruchomienie takiej aplikacji. Niby nic – a jednak, wiele razy borykaliśmy się z problemem że użytkownik miał Javę w dużo starszej wersji niż było to wymagane, a aktualizacja była niemożliwa ze względu na korporacyjne wymagania. Rozwój aplikacji przez to był bardzo utrudniony.

Java na desktopy jest jedynie niewielkim procentem tworzonych aplikacji przy pomocy Javy, większość systemów to systemu działające po stronie serwera. Bardzo ciężko jest znaleźć pracę gdzie tworzy się aplikacje desktopowe w Swingu/JavieFX – z tego też powodu ten wycinek Javy traktowałbym raczej hobbystycznie 🙂


Czy matematyka jest potrzebna programiście?

Dziś postaram się odpowiedzieć na bardzo często poruszane pytanie – szczególnie przez osoby które dopiero zaczynają  – Czy matematyka jest potrzebna programiście?

01. Czy matematyka jest potrzebna programiście?

Odpowiedź na to pytanie nie jest proste, nie można powiedzieć tak lub nie, tak jak to bywa w świecie IT odpowiedź na to pytanie brzmi – to zależy 😊

Okej! W sumie to żadna odpowiedź prawda? Niestety jest ona również prawdziwa. Postaram wam się przedstawić ten temat z mojej perspektywy – 4,5 lata studiowania (2,5 roku inżynierka + 2 lata magisterka) oraz 8+ lat komercyjnego programowania w Javie.

02. Studia – czyli powód dlaczego to pytanie w ogóle się pojawia

Studia (lub „szkoła” ogólnie ) są jednym z najczęstszych powodów dla których to pytanie się w ogóle pojawia. Powód jest bardzo prosty – zadania akademickie związane z programowaniem są w dużej mierze oparte na matematyce lub mocno „algorytmiczne” (np. metody sortowania) które również kojarzą się mocno z matematyką.

Tego typu zadania mają wiele poziomów – od mega łatwych, po zadania które są naprawdę kosmiczne. Dodatkowo wykładowcy często nie ułatwiają życia – czytają slajdy z prezentacji monotonnym głosem, a ćwiczenia przez nich wałkowane od 15 lat są… no cóż, powiedzmy że średnie.

Uczeń któremu nauczyciel nie potrafi dobrze wytłumaczyć problemu, dość łatwo może się zrazić do tematu – i tu pojawia się konflikt ktoś lubi programować – ale nie radzi sobie z tego typu zadaniami. Niestety, jeśli wybierzesz się na studia informatyczne – na 99% matematyka będzie dla Ciebie bardzo ważna, nie tylko z powodów o których pisałem wcześniej, będziesz mieć również inne pokrewne przedmioty które będą mocno bazować na matematyce.

Tak. Na studiach informatycznych matematyka będzie Ci potrzebna.

03. Praca

To jest sedno pytania – czy matematyka będzie mi potrzebna w pracy jako programista? Niestety, odpowiedź na to pytanie to również magiczne „to zależy”. To zależy głównie od tego nad jakim projektem będzie pracować 😉

Przez 8 lat mojego programowania matematyka była mi potrzebna bardziej lub mniej – zależnie od projektu.

W pierwszej pracy, pracowałem nad systemem dla przemysłu tytoniowego – gdzie matematyka była potrzebna tylko w niewielkich obszarach, było jej naprawdę niewiele. Firma dla której pracowałem posiadała również system dla firmy ubezpieczeniowej – tutaj matematyki było naprawdę dużo, jednak ja osobiście się tym nie zajmowałem – tworzyłem moduł raportów który agregował dane, nie zajmował się liczeniem. Spędziłem w tej pracy prawie 5 lat (o tym powstanie chyba oddzielny wpis 😉) Matematyka nie była mi potrzebna aż tak bardzo – była przydatna, ale wystarczył naprawdę podstawowy poziom.

Po zmianie mojej pierwszej pracy trafiłem do projektu gdzie tworzyliśmy oprogramowanie dla przemysłu „spożywczego” – w tym projekcie matematyka była dużo bardziej istotna – było sporo liczenia oraz różnych kalkulacji które odbywały się na różnych poziomach przetwarzania danych. Plusem było to że mieliśmy naprawdę świetny zespół – plus dostęp do mega analityków biznesowych którzy tłumaczyli nam to w taki sposób że po jednej sesji wszystko nabierało sensu. Jednak znajomość matematyki zdecydowania pomagała.

Kolejnym projektem w którym pracowałem – był system bankowy 😊 jak myślisz, jeśli piszesz soft dla banku to potrzebna Ci będzie matematyka? Będzie 😊 Na 100% nikt nie będzie wymagał nie wiadomo czego – jednak naprawdę matematyka w tego typu systemach jest niesamowicie przydatna.

04. Projekty własne

Przy okazji pisania własnej aplikacji mobilnej, większość czasu poświęcam na matematykę aby obliczenia były prawidłowe. Jednak jest to specyficzna cecha projektu nad którym pracuje. Jednak projektów w których matematyka jest przydatna jest naprawdę mnóstwo. Nawet w grach jest tego wiele!

Podsumowanie

Czy matematyka jest niezbędna programiście? Podstawowe umiejętności matematyczne są dużą zaletą i mogą ułatwić Ci pracę. Czasem trafią się miesiące, nawet lata, w których matematyki nie będziesz potrzebował – ponieważ taka będzie specyfika projektu. Jednak prędzej czy później, jest to umiejętność która po prostu się przyda! 😊


Finansowa - Buduję swoją pierwszą aplikację mobilną!

Hej! Dziś chciałbym wam przedstawić projekt nad którym pracuje po godzinach! A w zasadzie to w przerwach między pracą/życiem oraz blogiem 😉

01. Finansowa – Zarządzanie budżetem domowym oraz kalkulatory finansowe

Okej! „Finansowa” to bardzo robocza nazwa – która jednak mi odpowiada, całkiem możliwe że zostanie 😊 Jest to aplikacja na urządzenia mobilne Android / IOS którą tworze przy użyciu Fluttera.

O Flutterze możecie przeczytać w poprzednim wpisie. Krótko podsumowując jest to dość świeża technologia od Google do tworzenia aplikacji mobilnych. Na dzień dzisiejszy, Finansowa, aplikacja nad którą pracuje, wygląda tak:

Muszę przyznać że jak na razie, jestem bardzo zadowolony z prac nad apką 🙂

02. Funkcjonalności?

Przyznam szczerze – nie będzie tutaj nic innowacyjnego i odkrywczego raczej standard 😉 Nie jestem jednym z tych którzy wszędzie wrzucają słówko smart albo innowacja 😉

Po pierwsze – głównym elementem systemu jest budżet, planowanie i śledzenie wydatków. Zależy mi przede wszystkim aby aplikacja pomagała użytkownikom śledzić własne pieniądze – w łatwy i intuicyjny sposób. Drugą równie ważną funkcjonalnością są kalkulatory finansowe, które mogliście zobaczyć na przedstawionym powyżej filmiku.

03. Stopień zaawansowania prac?

Tak naprawdę dopiero zaczynam 😉 W tym momencie mam zaimplementowane 2 z 9 kalkulatorów finansowych, czyli  prawie 23% 😊  Myślę że wszystkie kalkulatory finansowe to jakieś 15%-20% całej aplikacji 😊 Jak widzisz – jestem na samym początku.

04. Po co w ogóle to robię? Kiedy skończę?

Spotkałem się już z opinią – ale po co w ogóle tracisz na to czas? Przecież takich aplikacji jest już cała masa! Odpowiedź jest bardzo prosta 😊 Po pierwsze – chce wyjść ze strefy komfortu, od prawie 8 lat programuję w Javie, czas poznać coś nowego.

Po drugie – zawsze chciałem napisać i wydać własną apkę mobilną. Każdy się kiedyś nasłuchał o niesamowitych sukcesach, firmach/aplikacjach które powstały w garażu, a teraz są gigantami na skalę światową 😊 Żeby nie było! Nie mam takich aspiracji 😊 Kiedyś jak byłem jeszcze młody i naiwny myślałem o czymś takim – i w zasadzie tylko myślałem, w tamtych czasach nie powstała ani jedna linijka kodu 😊

Po trzecie – aplikacja szyta na miarę. Jestem teraz na etapie życia, gdzie finanse osobiste są dla mnie bardzo ważne. Jednak nie mam jednej konkretnej aplikacji która spełniała by moje oczekiwania, w sposób który oczekuje. Czemu zatem nie napisać własnego rozwiązania?

Okej – kiedy wydanie aplikacji? Temat nie będzie tak prosty jak mi się zdaje – zakładam pesymistyczny scenariusz na Styczeń 2020. Aplikacja mam nadzieje że zostanie wydana jednocześnie na obie platformy.

Możecie mi życzyć powodzenia! Będę dawał znać jak idą prace! Jeśli tylko chcecie – możecie podsyłać jakie funkcjonalności chcielibyście zobaczyć w takiej aplikacji!


Flutter - Przyszłość aplikacji mobilnych ?

Dziś trochę mała odskocznia od standardowych backendowych tematów. Porozmawiamy sobie o stosunkowo nowym frameworku do tworzenia aplikacji mobilnych ze stajni Google. Framework jak tytuł wskazuje nosi nazwę Flutter.

01. Aplikacje mobilne? Aplikacje natywne? Aplikacje hybrydowe? O co chodzi?

W świecie aplikacji mobilnych istnieje jeden podstawowy problem – dwa systemy operacyjne które dzielą rynek – Android oraz IOS.
W zależności od źródeł, dane różnią się nieco od siebie jednak pokazują dość zbieżny trend:

Android 74.45%
IOS 22.85%
Inny 2.70%
Android 70.91%
IOS 27.95%
Inny 1.14%
Android 47.27%
IOS 52.28%
Inny 0.45%
Android 73.67%
IOS 24.79%
Inny 1.54%

Widać że Android posiada większość rynku, z wyjątkiem Ameryki północnej, gdzie dzielą rynek mniej więcej po połowie.

Aplikacje na Androida oraz IOS pisane są w różnych językach – oficjalnym językiem w jakim piszemy aplikacje na Androida jest Kotlin (do niedawna była to Java, kotlin jest tak jakby rozwinięciem Javy), natomiast oficjalnym językiem programowania dla IOS jest Swift (podobna historia jak w przypadku Androida, do niedawna oficjalnym językiem był Objective C – na nim wyrósł Swift).

Tu jest sedno problemu – jeśli chcemy wdać aplikację na oba systemy, „musimy” (nie do końca musimy, ale o tym za sekundę 😉 ) napisać oraz utrzymywać dwa kody źródłowe. Jeden dla Android, jeden dla IOS. Jest to dość problematyczna sprawa. Musi być jakieś lepsze rozwiązanie prawda? No i jest 😊

02. Aplikacje Hybrydowe

Próbą rozwiązania tego problemu są „aplikacje hybrydowe” – piszemy z użyciem jakiegoś frameworku jeden kod, który możemy skompilować aby uruchomić na Androidzie oraz na IOS.

Jednym z bardziej popularnych frameworków tego typu jest React Native – tworzony przez Facebook’a od 2015 roku zdobył na GitHubie ponad 70 tysięcy gwiazdek. Innymi frameworkami tego typu są Xamarin  czy Ionic.

Flutter jest najnowszym frameworkiem do tworzenia aplikacji zarówna na Androida jak i IOS’a. Flutter jest tworzony przez Google, oraz jest zbudowany o język programowania Dart.

03. Flutter - Zalety oraz wady - okiem backendowca

Zalety:

Natywna kompilacja: Flutter, pozwala nam przy użyciu tego samego kodu tworzyć aplikacje na Androida oraz na IOS – w zasadzie jak każdy frameworkd do aplikacji hybrydowych, Flutter jednak kompiluje kod do kodu natywnego dla danego urządzenia. Podczas gdy inne frameworki wykorzystują „web-view” (opakowaną stronę internetową w  aplikację mobilną). Flutter ma tutaj ogromną przewagę wydajnościową. Flutter na tym polu ma znaczącą przewagę wydajnościową.

Szybkość pisania aplikacji: Flutter jest naprawdę bardzo dobrze przemyślany, jest stosunkowo łatwym frameworkiem aby się go nauczyć, próg wejścia jest dość niski. W momencie kiedy poznasz już zasady tu panujące – tworzenie aplikacji będzie naprawdę szybkie!

Tworzenie zaawansowanego interfejsu użytkownika: Flutter pod tym względem naprawdę zaskakuje. Tworzenie przepięknego interfejsu jest zdecydowanie prostsze niż w innych frameworkach. Odwołam się tu do jednej z aplikacji napisanych we Flutterze -> Reflectly. Polecam filmik od samych developerów czemu postawili na Fluttera:

Google jako autor: Google nikomu nie trzeba przedstawiać, jest to gigant technologiczny który ma zaplecze aby zacząć rozwijać zupełnie nową technologię, która może naprawdę zabłyszczeć. Udowodnili to już nie raz.


Wady:

Google jako autor: Ten sam punkt w wadach jak i zaletach to nie jest błąd 😉 Google potrafi robić konkretne rzeczy, jednak wiąże się to z ilością projektów – tworzą ich wiele, niektóre chwytają inne nie. Google jest znane z tego że jeśli dany projekt po X czasie nie zdobędzie odpowiedniej społeczności, Google po prostu projekt zamknie. Jedną z bardziej spektakularnych porażek jest chyba Google+

Młoda technologia: W chwili obecnej Flutter to bardzo młoda technologia, pierwsza wersja została wydana w Grudniu 2018 roku. Wiąrze się to jeszcze z wieloma problemami z jakimi zmaga się każda nowa technologia:

Ponad 5 tysięcy zgłoszonych problemów 😉 Ale Liczba gwiazdek 68 tysięcy robi wrażenie! Mimo wielu zgłoszonych problemów społeczność jest naprawdę ogromna

Podsumowanie

Jako programista backendowy początkowo patrzyłem z przymrużeniem oka na Fluttera – jednak postanowiłem że dam mu szanse. Muszę przyznać szczerze że jest to bardzo przyjemny framework, każdego dnia podoba mi się coraz bardziej! Od jakiegoś czasu myślałem nad własną małą aplikacją mobilną, i stawiam na Fluttera! Co z tego wyjdzie? Zobaczymy 😊