Dlaczego warto zostać developerem systemu operacyjnego Android?

Tobiasz Olejnik on 20 listopada 2018

W życiu każdego developera, prędzej czy później, przychodzi taki moment, w którym musi zdecydować, która dziedzina technologii wydaje mu się najciekawsza i sprawdzić, jakie narzędzia pozwolą mu rozwiązać określone problemy. Najważniejszym z nich jest sam język programowania, który wspiera konkretne rozwiązania i platformy, definiując tym samym sposób pracy.

W niniejszym artykule mam zamiar przedstawić historię o tym, dlaczego Android stał się platformą, którą wybrałem i (być może) pomogę Wam w podjęciu własnej decyzji.

Zalety programowania na Android

Szerokie spektrum zastosowań

Android to system operacyjny, który z pewnością kojarzycie z urządzeniami przenośnymi takimi jak smartfony czy tablety. Programowanie na ten system dotyczy jednak znacznie szerszego spektrum urządzeń. W ramach systemu Android zostały opracowane warianty, realizujące zadania na urządzeniach różnego typu:

  • Android Auto – asystent podróży dla samochodów;
  • Android TV – system dla cyfrowych odtwarzaczy multimedialne (DMP). Jest to następca platformy Google TV;
  • Android Things – platforma umożliwiająca budowanie urządzeń IoT;
  • Wear OS – system dla urządzeń typu wearables (m.in. smartwatche czy inteligentne bransoletki).

Każdy programista może znaleźć coś dla siebie: mobilne aplikacje bankowe, systemy przeznaczone do obsługi sprzętu AGD czy programy ułatwiające życie osobom niepełnosprawnym – z pewnością jest z czego wybierać.

Regularne aktualizacje

Pierwsza generacja telefonów komórkowych pracujących na tym systemie trafiła do oficjalnej sprzedaży w październiku 2008 roku. Przez blisko dekadę system Android doczekał się dziewięciu głównych wersji. Najnowsza aktualizacja, oznaczona numerem 9.0, to już dwudziesta ósma odsłona interfejsu programowania aplikacji (API). Oznacza to, iż system jest ciągle ulepszany, zarówno pod kątem korekty ewentualnych błędów, jak i implementacji nowinek technologicznych.

Ugruntowana pozycja rynkowa

Smartfony z systemem mobilnym Android są nieprzerwanie, od 2010 roku, najchętniej kupowanymi urządzeniami tego typu. W roku 2017 na całym świecie sprzedano ponad 1,3 mld smartfonów z tym systemem, co stanowi 85,9% udziałów rynkowych (wzrost o 1,1 p.p. w stosunku do roku 2016). Duże zainteresowanie klientów urządzeniami z Androidem bezpośrednio przekłada się na popyt usług związanych z developmentem, a przez to na stabilność pracy w tym zawodzie oraz duże możliwości zarobkowe. Początkowo system ten był rozwijany przez firmę Android Inc., natomiast po kilku latach projekt trafił pod skrzydła kalifornijskiego przedsiębiorstwa Google.

Pewną przewagą Androida nad konkurencyjnymi rozwiązaniami jest jego dostępność (ze względu na cenę urządzeń) oraz otwartość (ze względu na dostęp do kodu źródłowego, który może być bezpłatnie pobierany i modyfikowany). W konsekwencji producenci urządzeń ponoszą mniejsze koszty implementacji systemu – korzystają z gotowego rozwiązania, dostosowując je do własnych potrzeb, co również przyczynia się do jego popularyzacji.

Dostępność

Android można nieodpłatnie zainstalować na urządzeniach wielu marek, zarówno na tanim sprzęcie typu low-end, jak i na flagowych smartfonach przedsiębiorstw takich jak Sony, Samsung oraz LG. Dzięki temu początkujący programiści mogą niewielkim kosztem zaopatrzyć się w sprzęt z omawianym systemem i testować opracowywane przez siebie rozwiązania.

Dojrzałość komponentów

W konsekwencji tego, że platforma Android jest dostępna dla deweloperów od kilku lat, programiści mają dostęp do wielu dojrzałych bibliotek usprawniających proces “pisania” aplikacji. Bez wielu z nich trudno wyobrazić mi sobie pracę. Z doświadczenia kolegów programujących na iPhone’y wiem, że u nich nie zawsze jest tak kolorowo.

Narzędzia do programowania aplikacji na platformę Android

Podstawowe aplikacje, nie mam tutaj na myśli trójwymiarowych gier oraz aplikacji korzystających z rozwiązań rzeczywistości rozszerzonej (ang. Augmented reality), systemu Android przygotowywane są przy użyciu następujących narzędzi:

    • Java oraz Kotlin – obiektowe języki programowania, które otrzymały oficjalne wsparcie ze strony przedsiębiorstwa Google.
    • Java JDK – środowisko zawierające m.in. kompilator (magiczny program tłumaczący kod napisany przez programistę na kod zrozumiały przez konkretną maszynę).
    • Android SDK – pakiet programów zawierający m.in. emulator (umożliwia testowanie aplikacji bez fizycznego urządzenia) oraz debugger (pozwala analizować działający program w celu znalezienia błędów)
    • Android Studio – zintegrowane środowisko programistyczne (IDE) oparte na rozwiązaniu IntelliJ IDEA firmy JetBrains (autorzy języka Kotlin). To właśnie w edytorze tekstowym tego programu piszemy kod. Aplikacja ta umożliwia integrację z systemem kontroli wersji Git. Początkowo aplikacje przeznaczone na system Android pisano przy użyciu wtyczki (ang. plugin) do programu Eclipse.
    • XML – język znaczników. Będziemy go wykorzystywać m.in. w celach wygodnego budowania graficznych interfejsów użytkownika oraz definiowania łańcuchów tekstowych dla konkretnych wersji językowych aplikacji .
    • Groovy oraz Gradle – język skryptowy oraz narzędzie służące do budowania projektów.

Początki przygody z programowaniem na platformę Android

W ramach studiów miałem okazję poznać języki programowania takie jak Python, C# oraz Java. Wybrałem ostatni spośród wyżej wymienionych języków ze względu na popularność i dostępność informacji na jego temat. Według danych przygotowanych przez firmę TIOBE, jest to obecnie najpopularniejszy język programowania. W konsekwencji nie ma problemu z odnalezieniem wartościowych kursów, książek oraz pomocy w serwisie Stack Overflow. Dużym plusem jest również multiplatformowość wirtualnej maszyny Javy (Java Virtual Machine, JVM), co oznacza, że  napisany kod może zostać, w myśl zasady “napisz raz, uruchom wszędzie”, czyli funkcjonować na różnych systemach operacyjnych, m.in Microsoft Windows, macOS oraz dystrybucje GNU/Linux.

Znakomita część programistów rozpoczyna przygodę z pisaniem kodu źródłowego od opracowywania i rozwijania prostych aplikacji konsolowych. Programy tego typu komunikują się z użytkownikiem za pomocą poleceń wprowadzanych z poziomu klawiatury. Jak można łatwo sobie wyobrazić, spoglądanie na biały tekst na czarnym tle, nie należy do szczególnie ekscytujących czynności – brakuje tego… czegoś. W pewnym momencie, po przeczytaniu kilku rozdziałów książki “Core Java Volume 1–Fundamentals” Caya S. Horstmanna i wykonaniu kilku prostych programów, doszedłem do wniosku, że tym “czymś” są wszelkiego rodzaju tabelki, kolorowe przyciski, wykresy, okienka, które reagują na akcje podejmowane przez użytkownika. To wszystko oferowały pakiety narzędzi Swing oraz JavaFX dla języka Java. Korzystanie z tych rozwiązań w celu tworzenia graficznego interfejsu użytkownika aplikacji desktopowych dawało mi coraz większą satysfakcję. Kolejnym, naturalnym krokiem było przeglądanie ogłoszeń o pracę dla programistów języka Java. Okazało się, że zamieszczanych ofert jest mnóstwo, jednak prawie każda z nich dotyczyła platformy Java w wariancie Enterprise Edition (Java EE, obecna nazwa to Jakarta EE). W konsekwencji w ogłoszeniach, zamiast pojęcia Swing, pojawiało się Spring, ale to dwie różne bajki (Swing to narzędzie umożliwiające implementowanie desktopowego GUI, Spring to framework usprawniający tworzenie aplikacji biznesowych w ramach wspomnianej platformy Jakarta EE). Do tego od kandydatów oczekiwało się dobrej znajomości narzędzia Hibernate, realizującego zadania warstwy dostępu do danych (m.in. mapowanie obiektowo-relacyjne, ORM). Jednym słowem z frontendem niewiele to miało wspólnego, a backend wówczas zupełnie mnie nie interesował.

Idealnym wyjściem okazał się wybór, wspomnianej wcześniej, platformy Android. Zainteresowany tematem ukończyłem jeden z kursów dostępnych wówczas na platformie Udacity. Również program studiów, który obejmował zajęcia z przedmiotu Mobile programming, umożliwił mi pogłębianie wiedzy w tym obszarze. Okazało się, że wcześniejsze obcowanie z biblioteką Swing pozwoliło łatwiej zrozumieć zagadnienia typowe dla platformy Android. Mam tutaj na myśli zagadnienia z zakresu zarządzania komponentami graficznego interfejsu użytkownika: obsługa zdarzeń (np. naciśnięcie przycisku, wybranie pozycji z listy), zmiana wyświetlanego tekstu, czy budowanie formularzy.

Z nowym bagażem doświadczeń byłem gotowy do podjęcia pracy na stanowisku Android Developera. Praca w firmie przy komercyjnych projektach pozwoliła mi na rozwój w zakresie wielu obszarów, jak m.in.: pisanie czystego i testowalnego kodu źródłowego, korzystanie ze wzorców projektowych, praca z systemem kontroli wersji Git itd. Z perspektywy czasu dobrze oceniam decyzję pozostania przy systemie Android.

Języki programowania dla systemu Android

Do połowy 2017 roku programowanie standardowych aplikacji na platformę Android odbywało się przy użyciu, wspomnianego już przeze mnie kilkukrotnie, języka Java. Jest to język dojrzały, z blisko 25-letnią historią. W tym czasie znalazł on zastosowanie w wielu dziedzinach informatyki, są to m.in. rozwiązania serwerowe oraz aplikacje dla urządzeń takich jak odtwarzacze Blu-ray i drukarki. Jednak po początkowej fascynacji językiem Java, wraz z upływem czasu, lista zarzutów kierowanych w stronę tego narzędzia stale się powiększała. Część z nich to:

  • konieczność pisania wielu linii kodu w celu zaprezentowania nawet najprostszej idei,
  • brak wbudowanego mechanizmu zabezpieczającego przed wywoływaniem metod na zmiennych niewskazujących na żaden obiekt (wartość null),
  • konieczność pisania niewygodnych klas użytkowych (ang. utility classes), w celu poszerzenia funkcjonalności istniejących API.

Delikatna irytacja, pewna zazdrość, zaczęła pojawiać się w momencie, gdy współpracownicy zaczęli mi prezentować możliwość języka Swift, wykorzystywanego w programowaniu aplikacji dla systemów operacyjnych iOS oraz macOS. Jakiś czas później natknąłem się na język programowania Kotlin, będącym czymś w rodzaju Swifta dla wirtualnej maszyny Javy (JVM). Rosnące zainteresowanie zarówno lidera naszego zespołu, jak i społeczności androidowej nowym narzędziem utwierdziły mnie w przekonaniu, że przyswojenie sobie wiedzy na jego temat to kierunek, którym warto podążać. Zamówiłem książkę “Kotlin in Action”, obejrzałem kilka prezentacji, zacząłem pisać własny kod. I nagle… taki kod źródłowy:

można zastąpić takim:

Natomiast wywołania kilku metod na danym obiekcie:

można przedstawić w Kotlinie w bardziej elegancki sposób:

A co najciekawsze i najbardziej przydatne, Kotlin jest w pełni kompatybilny z kodem napisanym w języku Java. Nic więc nie stoi na przeszkodzie, aby  wszelkie nowe pliki źródłowe istniejących projektów były pisane właśnie w języku od firmy JetBrains. Poza tym Kotlin umożliwia pisanie bardziej zwięzłego kodu źródłowego oraz bezpieczniejszych aplikacji aniżeli język Java.

Ku mojemu zadowoleniu Kotlin został w maju 2017 roku, podczas konferencji Google I/O, ogłoszony oficjalnym językiem programowania aplikacji przeznaczonych do uruchomienia na systemie Android. Do tej pory pamiętam swego rodzaju dreszczyk emocji towarzyszący mi w tamtym momencie. Później było jeszcze lepiej. Nastąpił “boom” na język Kotlin. Jego nazwa zaczęła pojawiać się w ogłoszeniach o pracę – i nie mam tu na myśli obecności wyłącznie w kategorii “nice-to-have”. Również w Appchance wszelkie nowe projekty zaczęliśmy rozwijać z użyciem języka Kotlin.

I w tym momencie zapewne w Waszych głowach pojawi się następujące pytanie: czy skoro ten nowy język jest taki cool i wow – mogę zapomnieć o Javie? Niezupełnie. Wciąż lwia część bibliotek i programów przygotowanych na system Android jest napisana w Javie. Oznacza to, że chcąc płynnie wdrożyć się w istniejące projekty, należy znać zarówno jeden, jak i drugi język programowania. Początkujący programiści powinni mieć to na uwadze. Od razu wspomnę, dla ułatwienia procesu przesiadki na nowy język, o istnieniu narzędzia umożliwiającego konwertowanie kodu napisanego w Javie na kod języka Kotlin za pomocą kilku kliknięć myszą. Jest ono automatycznie wbudowane w aktualnych wersjach środowisk Android Studio oraz IntelliJ IDEA. Natomiast osoby zainteresowane przygotowywaniem aplikacji oraz gier wykorzystujących bardziej zaawansowaną grafikę trójwymiarową – oraz wszędzie tam, gdzie liczy się bardzo wysoki poziom wydajności programu – powinny poważnie rozważyć przyswojenie wiedzy z zakresu języka programowania C++.

Przyszłość i alternatywy

Obecnie trudno sobie wyobrazić, iż popularność systemu operacyjnego z tak silną pozycją na rynku, jaką ma Android, mogłaby w najbliższym czasie gwałtownie spaść. Obecnie jedyną realną alternatywą dla tego środowiska jest, wspomniany już przeze mnie wielokrotnie, iOS. Ponadto wiele narzędzi – takich jak Flutter (Google), React Native (Facebook), oraz Xamarin (Microsoft) – pozwala na pisanie aplikacji wieloplatformowych (ang. cross-platform). Duża część kodu jest w tym przypadku napisana raz, w konkretnym języku programowania i jest możliwa do uruchomienia na różnych systemach operacyjnych (np. Android i iOS). Więcej przydatnych informacji na temat aplikacji hybrydowych oraz natywnych możecie znaleźć w artykule “Native vs Hybrid – jaki rodzaj aplikacji mobilnej wybrać?”.

Warto wspomnieć, iż aktualnie przedsiębiorstwo Google pracuje nad systemem nazwanym Fuchsia, który być może zastąpi w przyszłości Androida. Aplikacje dla niego mają być pisane w języku Dart. Jednak na ten moment myślę, że programiści dobrze znający Javę i Kotlina póki co nie muszą się martwić o konieczność szybkiego przekwalifikowania się. 😉

Podsumowując. Jeżeli nadal zastanawiacie się nad tym, czy programowanie pod system operacyjny Android jest ciekawą przygodą, odpowiadam: tak. A jeżeli wciąż macie jakiekolwiek wątpliwości, to z chęcią podrzucę kilka linków do kursów oraz książek. 😉

Tagi: , , , , , , , , , , ,

Przeczytaj również

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *