Początki programowania na Androida – Java czy Kotlin?

Paweł Dedio Programowanie 2019-02-02

Witajcie w kolejnym odcinku. W ramach tej serii nie miałem na celu pisania kolejnego kursu programowania na Androida, lecz przybliżenie Wam, w jaki sposób ten system działa pod spodem. Ponieważ wiele osób pisało w komentarzach lub do mnie osobiście, że zainspirowałem ich do nauki programowania, postanowiłem zrobić mały wyjątek. Dzisiaj chciałbym Wam mniej więcej nakreślić, na czym polegają różnice pomiędzy Javą i Kotlinem, czyli dwoma językami programowania, za których pomocą możemy tworzyć aplikacje na platformę Android.

Trochę historii

O Kotlinie po raz pierwszy mogliśmy usłyszeć w 2011 roku, kiedy został zaprezentowany przez czeską firmę JetBrains. W założeniu miał to być nowoczesny język w pełni kompatybilny z Javą. Na początku większość programistów po usłyszeniu słowa Kotlin myślała raczej o keczupie niż o języku programowania. Z biegiem lat język ten stawał się coraz bardziej popularny, jednak w przypadku Androida, nie mieliśmy jego domyślnego wsparcia, więc trzeba było liczyć się z pewnymi utrudnieniami. Wszystko zmieniło się w 2017 roku podczas konferencji Google I/O. To właśnie wtedy Google ogłosiło wsparcie dla Kotlina przy tworzeniu aplikacji na Androida.

Oglądając ten fragment teraz, jestem nieco zdziwiony słabością aplauzu – możliwe, że mikrofony słabo wyłapały głos publiczności. Oglądałem tę transmisję na żywo razem z kilkudziesięcioma innymi programistami w wielkiej sali i reakcja większości z nich była niesamowita. Każdy cieszył się tą decyzją, ponieważ Kotlin jest językiem, w którym bardzo łatwo można się zakochać.

Od tego czasu wzrost popularności Kotlina nabrał niesamowitego tempa. Obecnie już prawie nikt nie zaczyna pisania nowych projektów w Javie. Fajnie można to zobaczyć na wykresie prezentującym procentową liczbę projektów Kotlinowych (z podziałem na Androida i wszystko inne).

Źródło: https://medium.com/@victoralbertos/kotlin-adoption-on-the-android-open-source-community-fe01d00a8bb3

Dlaczego Kotlin?

Pewnie zastanawiacie się, dlaczego Google zdecydowało się na zastąpienie Javy Kotlinem. Tutaj można wyróżnić dwie główne przyczyny. Pierwszą z nich jest to, że programiści pokochali Kotlina, bo pisze się w nim znacznie przyjemniej niż w wysłużonej już Javie (powiemy sobie o tym więcej za chwilę). Kolejnym ważnym aspektem jest spór prawny pomiędzy Google i Oracle dotyczący wykorzystywanie bibliotek Javy. Mimo pomyślnego wyroku z 2016 roku Google starał się uniezależnić w pewnym stopniu od firmy Oracle. Porzucenie Javy na Kotlina byłoby pod tym względem świetną decyzją. Z perspektywy czasu widzimy, że Google ma się czego obawiać, ponieważ kolejny wyrok nie był już taki przychylny firmie.

Tak więc twórcy Androida mieli wybierać pomiędzy lekko przestarzałym językiem znienawidzonym przez programistów, który dodatkowo może narazić ich na kary finansowe, a nowoczesnym językiem pokochanym przez programistów. Myślę, że wybór był dość prosty 😉

Jakie są zalety Kotlina?

Nie chciałbym się tutaj za bardzo rozwodzić nad różnicami w składni, bo artykułów na ten temat jest chyba ponad milion. Bardziej chciałbym skupić się tutaj na odczuciach i spostrzeżeniach po ponad rocznej przygodzie z Kotlinem. Największą różnicą jest zwięzłość napisanego kodu w Kotlinie. Wystarczy napisać kilka klas i już nie mamy ochoty wracać do Javy. Projektanci tego języka podeszli do niego niesamowicie praktycznie. Przykładowo, po co mamy stawiać średniki po każdej linii lub dublować typ zmiennej przy jej deklaracji. Z pozoru są to rzeczy bardzo trywialne, lecz kilka takich malutkich cegiełek potrafi zrobić kolosalną różnicę w przyjemności z pisania.

Kolejną zaletą jest niesamowite tempo rozwoju. Praktycznie każda kolejna wersja Kotlina przynosi ze sobą jakieś nowości znacznie usprawniające tworzenie oprogramowania. W porównaniu do Javy jest tutaj przepaść, ponieważ Java wprowadzała niektóre funkcjonalności dopiero kilka lat po konkurentach. Ciekawskich odsyłam do listy wydań Kotlina, gdzie możecie zobaczyć jakie funkcjonalności zostały wprowadzone w kolejnych wersjach tego języka.

Według mnie ogromnym plusem jest również obecność Kotlin Native (wspominałem o nim w artykule o frameworkach crossplatform). Jest to narzędzie umożliwiające tworzenie aplikacji jednocześnie na Androida i iOSa. Co prawda projekt dopiero raczkuje, jednak zapowiada się bardzo dobrze i być może w przyszłości dzięki znajomości Kotlina będziemy mogli programować też na iOS. 

Co przemawia za pisaniem w Kotlinie?

Dowiedzieliśmy się już, że Kotlin jest taki super. Wiem jednak, że niektórzy czują obawy przed pisaniem w nim, ponieważ jest dość młodym językiem. Mam nadzieję, że ten akapit rozwieje wasze wątpliwości.

W dzisiejszych czasach prawie wszystkie nowe projekty są pisane w Kotlinie. Również te już istniejące są przepisywane z Javy na Kotlina. Tak więc musisz się liczyć z tym, że coraz więcej firm będzie wymagało znajomości tego języka programowania. Kolejnym aspektem są wszelakie poradniki i artykuły branżowe. Obecnie ciężko spotkać artykuł pokazujący jakieś nowości z Androida, posiadający przykłady napisane w Javie. Jeśli nie chcesz pisać w Kotlinie, to i tak musisz znać jego podstawową składnię w celu zrozumienia tego, co ktoś chciał przekazać.

Ostatnim aspektem jest podejście Google. Co prawda firma obiecała, że Java nigdy nie przestanie być wspierana. Jednak słyszeliśmy od nich podobne zapewnienia już kilkukrotnie i przeważnie okazywało się, że takie nieskończone wsparcie trwa maksymalnie kilka lat. Tak więc warto mieć na uwadze, że w przyszłości Kotlin będzie jedynym językiem używanym do tworzenia aplikacji androidowych.

Java czy Kotlin — co wybrać na początek?

Opowiedziałem Wam trochę o zaletach Kotlina, ale nadal nie odpowiedziałem na tytułowe pytanie. Niestety tutaj nie ma prostej odpowiedzi. Wszystko zależy od progu, z jakiego startujesz. Jeśli nigdy nie programowałeś w żadnym języku, możesz zaczynać od razu od nauki Kotlina, ponieważ i tak to wszystko będzie dla ciebie nowe.

Jeśli jednak programowałeś już coś w nieco starszych językach, może prościej będzie dla ciebie nauczyć się programowania na Androida korzystając z Javy, ponieważ z pewnością odnajdziesz w niej podobieństwa do innych języków. Co innego, jeśli jesteś programistą iOS, Swift bowiem jest bardzo podobny do Kotlina, dlatego łatwiej będzie Ci pisać od razu w Kotlinie.

Nie traktujcie moich słów jako wyrocznia. Przed rozpoczęciem nauki przeglądnijcie sobie kilka poradników zarówno do Javy, jak i Kotlina i sami wybierzcie, co Wam bardziej odpowiada. Jednak wybierając Javę, pamiętajcie, że prędzej czy później będziecie się musieli nauczyć także Kotlina.

Dzięki za dzisiaj – mam nadzieję, że odcinek się podobał. Tradycyjnie zachęcam do pisania komentarzy z propozycjami interesujących Was tematów. Na pewno zostaną poruszone w ramach tej serii. Widzimy się za tydzień, gdzie przedstawię Wam główne zasady, których powinien przestrzegać każdy szanujący się programista. Do zobaczenia!

Zapraszam również na największe w Polsce forum dla programistów Android. Jeśli macie pytania odnośnie do kariery programisty — zapraszam do działu Kariera programowanie. Zachęcam również do przejrzenia działu Praca oraz zlecenia dla programistów — być może to właśnie tam znajdziesz swoją pierwszą pracę.

Poprzednie odcinki:

  1. Typowy dzień pracy programisty
  2. Wady pracy programisty
  3. Zalety pracy programisty
  4. [FAQ] Wszystko, co powinieneś wiedzieć, jeśli interesuje Cię praca programisty
  5. Co mnie zdziwiło w programowaniu?
  6. Motywacje – w jaki sposób nie stracić zapału do programowania?
  7. Jaką firmę wybrać na początku kariery programisty?
  8. Jak wygląda rozmowa o pracę na stanowisko programisty?
  9. Jak zacząć programować?
  10. Skąd czerpać wiedzę o programowaniu?
  11. Początki programowania — jaką technologię wybrać?
  12. Cykl życia aplikacji na Androida — co to takiego?
  13. Jak tworzymy interfejs użytkownika w aplikacjach na Androida?
  14. Jak system Android oszczędza energię?
  15. Jak działają i czym są powiadomienia push w Androidzie?
  16. W jaki sposób aplikacje pobierają dane z zewnętrznych serwisów i czym jest API?
  17. Jak działają pozwolenia w systemie Android?
  18. Śledzenie użytkowników — co wiedzą o nas aplikacje?
  19. Dlaczego aplikacje na Androida zajmują coraz więcej miejsca?
  20. Frameworki crossplatform – jak stworzyć aplikację na iOS i Androida jednocześnie?
  21. Jak obsłużyć kilka języków w aplikacji na Androida?
  22. Dodatkowe funkcjonalności Androida, których nikt nie wspiera
  23. Co się dzieje podczas kompilacji aplikacji na Androida?
  24. App Bundle – jak Google rewolucjonizuje Androida?
  25. W jaki sposób testujemy aplikacje na Androida?
  26. Jak zabezpieczamy aplikacje na Androida?


  • ShalonyCoderIT

    Całkowicie zgadzam się z artykułem. Zrobiłem przesiadkę z Javy na Kotlina i jestem mile zaskoczony. Po pierwsze samo przejście zajęło raptem z 2 tygodnie, po drugie kompatybilność z Javą, po trzecie zmaksymalizowanie esencji kody (czyt. Jak najmniej linijek jak najwięcej działania). Szkoda, że nie ma dużej ilości tutoriali w Polsce. Znalazłem trzy ( z czego jeden był straszny i nie dałem rady dalej niż 8 lekcje dotrwać) dotyczące Kotlina w całości po Polsku.
    Tutaj są te dwa, które oglądałem i z nich się nauczyłem Kotlina + dokumentacja oczywiście:

    https://youtu.be/dLH2XYNnesQ —> Podstawy Kotlina i programowania
    https://youtu.be/DOOa89jyBGw —> Programowanie na Android’a z Kotlinem

  • OnDaReal

    WOW. Na ACPL pojawił się artykuł (bo sporej części krótkich notek nie da się tak nazwać) o Androidzie (co powoli też zaczyna być rzadkością) a w dodatku ciekawy, nie będący wróżeniem z fusów, bez zbędnego wychwalania Apple… i widzę ze jest tego cała seria!

    Nie wiem kim jesteś, ale znajdę Cie… znajdę Cię i przytulę za trzymanie poziomu tej upadającej już strony.

    • Paweł Dedio

      Jeśli się spodobało, to zachęcam do zaglądania tutaj częściej 😉 Już w kolejną sobotę wracam z nowym artykułem.

  • Ralink

    trochę nie na miejscu jest określenie że Java jest wysłużona, wszystko w jezykach opiera się na frameworkach Java ma długą historie i mnóstwo świetnych frameworków, które są wspierane cały czas i rozwijane i nie pachną archaizmami wręcz przeciwnie 😉

    • Karls

      Swojego czasu był projekt przepisania Androida na bodajże C# i przynajmniej ten wczesny szkielet co powstał był wysoce bardziej wydajny. Nie wiem co się z tym dalej stało. W tym sensie Java jest archaizmem – powstała dawno, kiedy nieco inne były priorytety. Ani nie króluje w wydajności, ani nie jest specjalnie intuicyjnym i przyjemnym językiem. Jej główną siłą jest popularność. Zaryzykuję stwierdzenie, że gdyby java powstała teraz to w obecnej formie by się nie przebiła z uwagi na swoją przeciętność.

      • Ralink

        C# wzorował się na Javie znał jej słabe strony które mógł wyeliminować, gdyby Java powstała później niż C# mogło by być podobnie 🙂
        Pomijając stare Javowe systemy które są ciągle utrzymywane (np. bankowe) dużą rolę w jej obecnej popularności i chęci tworzenia nowych systemów właśnie z jej użyciem pełni Amazon, gdyby nie to Azure z C# przejął by rynek

        • Karls

          No właśnie – java w obecnej formie, gdyby teraz debiutowała to nie miała by szans. W porównaniu z nowszymi językami to jest programistyczny średniak, żeby nie powiedzieć bubel :). Ale mają potężne plecy dlatego to trwa.

    • Paweł Dedio

      To prawda, gdyby nie Frameworki to by już w ogóle był dramat. Używając słowa wysłużona, chodziło mi też o to, że Java jest już dość stara i czasami nie nadąża za nowszymi językami. Chociaż nie można jej odmówić niesamowitej popularności.

  • Łukasz Florkowski
  • Flaqs

    Dzięki za ten artykuł! Ostatnio to pytanie bardzo często sobie zadawałem i teraz trochę rzeczy stało się jaśniejszych.
    Powiedz mi proszę jedną rzecz: czy umiejąc pisać aplikacje na androida w Javie i chcac przejść na Kotlina wystarczy się nauczyć jego skladni czy są jeszcze jakieś różnice w tworzeniu projektów? Wystarczy podmienic kod czy są jeszcze jakieś wyzwania?

    • Paweł Dedio

      Główną różnicą jest składnia, oczywiście trzeba dokonać trochę zmian w konfiguracji ale to jest dość proste i jest mnóstwo poradników.

      W kotlinie jest też kilka narzędzi które nie mają swoich odpowiedników w Javie, tak więc z czasem zauważysz kilka usprawnień i zaczniesz pisać bardziej po kotlinowemu.