Jak zostać Android developerem?

W ramach podcastu “Porozmawiajmy o IT” miałem okazję porozmawiać z Mateuszem Dziubkiem o umiejętnościach, które musi posiąść junior Android developer.

Posłuchaj naszej rozmowy w wersji audio 🎧 👇

Cześć Mateusz, bardzo mi miło cię gościć w Podcaście.

Cześć Krzysztof Miło mi być gościem Twojego podcastu.

Jasne, przyjemność po mojej stronie. Tak jak powiedziałem na początku, Mateusz to Senior Android developer. Ja w odcinku piątym tego podcastu, to już było trochę czasu temu, półtora roku temu jak sobie przed chwilą sprawdziłem, rozmawiałem i właśnie poruszałem różne kwestie związane z Androidem, czy czy tak naprawdę z programowaniem na tą platformę. Natomiast półtora roku to oczywiście taki czas kiedy sporo się zmieniło, doszło sporo nowych rzeczy, sporo rzeczy już pewnie się nie używa, warto jest tą wiedzę sobie odświeżyć. A po takiej fajnej rozmowie którą miałem z Mateuszem, postanowiliśmy, że dobrze byłoby pokazać osobom, które dopiero myślą o zostaniu Android Deweloperem, jakie umiejętności, jaką wiedzę trzeba posiąść na początku, żeby skutecznie działać jako Android developer w 2019/2020, bo już niedaleko końca roku. Stąd ten odcinek jest taką road mapą dla juniorów, dla osób które rozpoczynają swoją przygodę z Android Deweloperem. Road Mapa, która ma za zadanie pokazać w co warto inwestować swój czas, jakie umiejętności zdobyć, żeby można było się nazwać powiedzmy takim solidnym Junior deweloperem. To po tym trochę przydługim wstępie myślę, że możemy zaczynać. No i na początku moje standardowe pytanie skierowane do ciebie Mateusz, czy słuchasz podcastów, Jeśli tak to jakich najczęściej?

Tak słucham podcastów. Jakby sposób przyswajania wiedzy przeze mnie, jako sposób przez słuchawki, jest to coś, co odkryłem dość niedawno i wydaje mi się to jednym z lepszych sposobów dowiadywania się nowych i ciekawych informacji. Nie słucham podcastów, aż tak często jak bym chciał, stricte technicznych. Wolę po prostu po pracy usiąść sobie i posłuchać czegoś związanego wiesz, z takimi kwestiami miękkimi, których używamy w pracy na co dzień jako programiści. Wiesz, lubię słuchać o biznesie, trochę o historiach innych ludzi, o ciekawych projektach, o takich psychologiczno komunikacyjnych. Wiesz, bardzo lubię taki podcast, który nazywa się Smart Passive Income — to jest podcast Pata Flynna, który jest dość znanym kolesiem w takiej blogosferze szeroko pojętej, bardzo dobrze uczy dywersyfikować swój przychód i udziela naprawdę świetnych rad. I trochę dzięki niemu zacząłem się trochę bardziej udzielać na swoim blogu Coders Bible. Takim klasykiem też w Polsce myślę, że wiele osób też nie związanych z IT, słucha Michała Szafrańskiego. On ma podcast “Więcej niż oszczędzanie pieniędzy” — też bardzo lubię ten jego styl przekazywania tej wiedzy, który jest bardzo konkretny. Z takich krótkich rzeczy, bo wiesz jakby podcastów, jest mnóstwo, informacji jest mnóstwo do przyswojenia, ale według mnie więcej trzeba robić niż słuchać, więc ostatnio odkryłem taki fajny podcast od Harvard Business Review, nazywa się IT icast — wiesz, takich 10–15 minut j idealne na to, żeby słuchać jak jedziesz do pracy, jakiejś idei fajnej, czyli zaprasza jakiegoś autora jakiejś książki, która została wydana i po prostu rozmawiaj przez 10 minut o czymś, co jest jakby dla niego ważne. Często fajny początek jakiegoś większego tematu, na temat wiesz, głębszego researchu. To są takie główne podcasty wokół, których oscyluje. No i oczywiście masa audiobooków, które uwielbiam. [śmiech].

Też się tym zaraziłem. Fajne jest to co powiedziałeś, że starasz się słuchać nie tylko technicznych rzeczy, bo takie poszerzanie horyzontów myślę, że nawet przekłada się na to, że jako programiści jesteśmy po prostu skuteczniejsi, mamy jakieś szersze pole, więc jestem jak najbardziej fanem takiego podejścia. Okej, a powiedz jak to się stało, że zostałeś Android deweloperem, jakie masz doświadczenie, co cię skłoniło, żeby właśnie w tym kierunku pokierować swoją karierą.

A, jasne. Jakby moja kariera nie była taka dość oczywista, nie studiowałem informatyki, więc trochę przez przypadek znalazłem się w świecie IT. Studiowałem automatykę i robotykę na wydziale mechanicznym, na Polibudzie w Krakowie, więc było tam dużo rzeczy związanych z pompami, tokarkami, frezarkami i gdzieś tam po drugim roku zdałem sobie sprawę, że nie do końca mnie to kręci. I najciekawszą rzeczą, którą zawsze omawialiśmy była elektronika, więc ta elektronika gdzieś tam się zawsze przewijała. Potem gdzieś się przewinął Python, taka moja naprawdę podstawowa znajomość Pythona. Parę dni poświęciłem na to, żeby w ogóle zobaczyć na czym polega programowanie. No i zacząłem się uczyć C, przez zajęcia, które mieliśmy z mikrokontrolerów na uczelni, bo to było ciągle połączone z elektroniką. No i oczywiście te zajęcia były prowadzone w tragiczny sposób, programowaliśmy na na kartkach z tego co pamiętam. Według mnie to jest bardzo słaby sposób uczenia się programowania, więc w końcu wziąłem sprawy w swoje ręce i chciałem zaprogramować coś, co jest niby mikrokontrolerem, ma jakieś czujniki, ma pewną moc obliczeniową, ale nie chciałem, żeby to było tak prymitywne, jak mikrokontroler, więc pomyślałem, że w sumie takie urządzenie ma w kieszeni — jest to smartfon, więc zacząłem się bawić się jakoś tam czujnikami i zacząłem bawić się w końcu czymś bardziej skomplikowanym, jak jakieś widoki, no i tak zostało mi w końcu, że zacząłem tworzyć aplikacje na Androida, które nawet nie są związane stricte z czujnikami, więc odszedłem od tego mojego zafascynowania samym hardware. Bardzo to polubiłem dlatego, że jeśli chodzi o Androida, to jest wizualne ,możesz napisać po 2–3 dniach aplikację, którą twój kolega, twoja koleżanka mogą zobaczyć, przy czym jest to na przykład do backendu, gdzie tam zmiany są bardziej subtelne i robią jakby świetne rzeczy back-end owcy, ale ciężko je zauważyć prawda? Ciężko je zauważyć komuś, kto nie jest związany z informatyką.

Jasne.

Pytałeś o moje doświadczenia też, bo to też jest bardzo bardzo różne. Ja pracowałem nad wieloma różnymi aplikacjami, tak jak mówiłeś — jakiś rok temu stworzyłem własną aplikację, pierwszą, która miała chyba jakieś 3000 użytkowników, co i tak jest dużym sukcesem biorąc pod uwagę niszę, którą sobie wybrałem czyli, świat gier planszowych. Była to Apka, która służyła do łączenia ze sobą graczy planszówek w Polsce, całkiem fajnie sobie radziła. Ja zaczynałem od trzymiesięcznego bezpłatnego stażu, gdzie na tym stażu zadanie, które dostałem jako pierwsze to przepisywanie jakiś stringów na litewski, łotewski, bułgarski, więc jakby zaczynałem jako taki typowy stażysta albo praktykant, potem zaczynały się bardzo fajne aplikacje, bo pamiętam, że trafiłem do jednego projektu, gdzie robiliśmy jakąś aplikację dołączenia kościołów w Teksasie. Potem przechodziłem do kolejnych firm, gdzie robiłem jedną z bardziej popularnych aplikacji pogodowych w Szwecji i współpracowałem właśnie ze Szwedami, z Norwegami, mieliśmy też współpracę częściowo z Bangladeszem, gdzie tworzyliśmy taką dość popularną apkę — e-commerce. I naprawdę moje doświadczenie zahacza też trochę od Bluetooth, bo pracowałem też w firmie gdzie, pracowaliśmy nad bardzo ciekawym projektem, który był ogromnym hitem sprzedażowym, ma chyba kilkadziesiąt milionów dolarów finansowania i to jest pompa laktacyjna, pompa laktacyjna sterowana przez Bluetooth, która jest niesamowicie pięknie zaprojektowana i ma piękną aplikacje do tego i okazało się, że ta aplikacja to był taki killer, który łączył to wszystko i dzięki temu inwestorzy i konsumenci po prostu na to lecieli i to było bardzo fajne. A w tej chwili pracuję nad aplikacją Boardly, która jest taką aplikacją społecznościową, która ma około 6 milionów użytkowników teraz, więc to są problemy już trochę innej skali, które są bardzo dużym wyzwaniem, ale bardzo się cieszę, nigdy nie miałem tylu użytkowników do utrzymania w aplikacji, więc to jest coś, nad czym pracuję teraz.

Fajnie, naprawdę sporo takich różnorodnych doświadczeń masz za sobą. Ja jakiś czas, kilka lat temu też miałem taki epizod, takie zachłyśnięcie programowaniem na aplikacjach mobilnych, to był co prawda u mnie iOS, ale też to co mnie przyciągnęło i to co mnie przekonało, to właśnie ta wizualność tego, że bardzo szybko, nawet na własnym telefonie można zobaczyć taki efekt, to jest zupełnie coś innego, niż taka wirtualna strona internetowa, także doskonale wiem o czym mówisz.

Wiesz to jest też trochę w ten sposób, u mnie to było trochę w ten sposób, że moi znajomi — Każdy mój znajomy miał Androida i wydaje mi się, że częściowo dlatego jestem Android Deweloperem, że gdyby wszyscy wokół mnie mieli iOS, no to jakby po co miałbym tworzyć apkę dla moich znajomych, żeby pochwalić się, że coś umiem, jakby nikt nie mógłby jej odpalić, więc wydaje mi się, że trochę zostałem Androidem, dlatego, że na początku studiów nie było mnie stać na iOS po prostu, ale ciągle cieszę się, bo myślę, że zebrałem coś co, koniec końców podoba mi się bardziej i cały ten system podoba mi się bardziej niż ten od Apple.

Według mnie całościowy programista powinien umieć rozwiązywać techniczne problemy przy pomocy języków programowania

Powiedziałeś, że wszyscy twoi znajomi mieli właśnie Androida i to też może po części pokrywa się z tym, co ja obserwuję na różnych job boardach, w różnych miejscach, gdzie są ogłoszenia o pracę skierowane właśnie do deweloperów. Obserwuję to że, rośnie ich liczba, rośnie ilość w ogóle Android deweloperów mam wrażenie na rynku. Myślisz że to jest perspektywiczna specjalizacja?

Wiesz ciężko spekulować. Ja też zrobiłem taki research na temat tego jak to wygląda, osobiście mogę mówić tylko z własnego doświadczenia, że sam na brak pracy i perspektyw nigdy nie mogłem narzekać, ale wiem, że jest nas dużo Juniorów, więc wydaje mi się że taką ogólną radą, którą mogę dać to żeby po prostu starać się być inżynierem oprogramowania. Bardziej niż jakby konkretnie Android Deweloperem. Mam tutaj na myśli, że według mnie taki całościowy programista, taki pełny programista, powinien po prostu umieć rozwiązywać techniczne przy pomocy języków programowania i gdy rynek wskazuje na to że, technologia umiera, to powinien umieć się przebranżowić. Wydaje mi się, że to jest coś, w którym kierunku…jeżeli jakiś Junior, który nas teraz słucha myśli sobie, że nauczy się dzisiaj tworzyć aplikacje mobilne i będzie tworzył aplikacje mobilne, albo przynajmniej będzie tworzył w ten sam sposób za 5–10 lat, to w jest dużym błędzie. To wszystko zmienia się tak niesamowicie, że ja już w ciągu swojej kilkuletniej kariery, żeby tworzyć aplikacje na Androida, już musiałem się uczyć dwóch języków programowania, więc to bardzo bardzo się zmienia i to jest to jest właśnie ekscytujące według mnie. Jeśli mamy już mówić o konkretach, jest taki raport przygotowany przez stronę indeed.com — to jest jeden z takich bardziej popularnych boardów chyba w Stanach, ale też ogólnie na świecie, gdzie po prostu wrzuca się ogłoszenia o pracę. I czytałem tam, że w ostatnim roku od maja 2018, do maja 2019, ludzie szukali mniej pracy na Androida, ale było więcej ogłoszeń o pracę na Androida, Co oznacza że jest mniejsze zainteresowanie na Androida, ale jest więcej ofert pracy. To było chyba o 26% było mniej wyszukiwań, a o 10% więcej ofert pracy. Co oznacza, że biorąc pod uwagę tylko ten raport, który bazuje na dość dużej próbce, mamy mniejszą konkurencję i mamy po prostu mniejszą konkurencję, mamy po prostu więcej ofert, a mniej ludzi zainteresowanych, co jest też dość ciekawym fenomenem.

Ciekawe, to jesteś fajna myśl, którą poruszyłeś, że warto być takim deweloperem, który powiedzmy potrafi rozwiązywać problemy, bo to jest najistotniejsze, a technologia musi iść zawsze za tym problemem, ale jest generalnie czymś wtórnym, czego się można nauczyć. To się pokrywa z tym co ja często dostaję — pytania od słuchaczy właśnie takich początkujących, którzy zastanawiają się jaki język wybrać, albo w którym kierunku tą swoją karierę na początku pokierować. I raczej staram się tłumaczyć, że to na początku naprawdę nie ma znaczenia, bo najprawdopodobniej wiele razy tą technologię po prostu zmienią. Ważne jest to, żeby zrozumieć pewne prawidła, które się powtarzają, są wspólne dla większości różnych technologii, ale to w związku z tym mam…

Język programowania to jest po prostu narzędzie, które jest narzędziem dobrego inżyniera oprogramowania. I to czy robimy w tej chwili coś na Androida, czy za parę lat będziemy robić coś, co jest wiesz, jednoczesne na Androida i na iOS, czyli mam to tutaj na myśli takie Cross platformowe podejście typu Flutter, ja z chęcią się tego nauczę, jeżeli faktycznie rynek będzie na to gotowy.

Jasne. To idąc jakby tą ścieżką, mam do ciebie też pytanie, czy Android deweloperem może zostać ktoś, kto jeszcze powiedzmy nie programuje, wiesz zupełnie Świeżak, czy osoba, która nie ma jakiś doświadczeń z programowaniem webowym, dysk topowym, która powiedzmy chcę dopiero wejść na ten rynek. Czy myślisz, że w ogóle programowanie na takiej powiedzmy właśnie platformie mobilnej, to jest dobry Punkt startowy?

Oczywiście że tak. Ja uważam, że do nauki programowania nie trzeba być jakimś niesamowitym mózgiem z matematyki, czy z fizyki, nie potrzeba nawet studiów. Uważam, że jeśli chodzi o Android Development, próg wejścia jest dość niski. Uważam też, że jest bardzo wdzięczne programowanie na Androida na początku, też na inne systemy mobilne dlatego, że tak jak już wspomnieliśmy wcześniej, kodzisz sobie coś i po dwóch trzech dniach po prostu widzisz efekt wizualny, możesz się tym pochwalić. Wydaje mi się, że to jest bardzo, bardzo motywujący element. Szczególnie dla kogoś, kto uczy się na początku czegoś, szczególnie programowania, które potrafi być czasami upierdliwe, ale koniec końców nie jest niczym ciężkim. Moim zdaniem po prostu wymaga odrobinę systematyczności.

Zanim przejdziemy do jakiś takich konkretnych technologii, takich twardych umiejętności, które są na co dzień potrzebne deweloperowi, to powiedz proszę jak może wyglądać taka droga wejścia, właśnie do branży, w szczególności właśnie do zostania Android deweloperem. Nie wiem, z jakich źródeł można czerpać wiedzę? Czy trzeba iść na staż, czy może samodzielna nauka wystarcza, jakie tutaj masz przemyślenia w tym temacie?

Jeśli chcesz sprawdzić czy to jest dla Ciebie, to są kursy online. Pamiętajcie, że wiele słabych kursów

Wiesz znowu to zależy od człowieka. Ja na przykład ucząc się na błędach zauważyłem, że taka nauka, jaką oferują nam studia, czyli po prostu chodzenie na wykłady, chodzenie na ćwiczenia… cała ta otoczka ze zdobywaniem tytułu, to nie jest optymalny sposób dla mnie na przyjmowanie wiedzy, ale wiem, że są ludzie, którzy uczą się dzięki temu i i osiągają o wiele lepsze wyniki, niż osiągałem ja, więc jeśli to jest sposób — pójście na studia i nauczenie się tam programowania mobilnego, bo są oczywiście kursy na przykład na AGH lub na UJ, na każdej uczelni w Polsce dobrej z mobilnego programowania, to proszę bardzo, to jest jak najbardziej sposób gdzie można się nauczyć. Moim zdaniem o wiele szybszy sposób — chcesz po prostu sprawdzić czy to jest dla ciebie, siebie, no to są po prostu jakieś kursy online. Jest oczywiście mnóstwo słabych kursów online, więc ja też nie mówię, że kursy są z automatu lepsze od uczelni, ale jest mnóstwo świetnych kursów online. Ja jakbym miał wybierać kurs online, żeby sprawdzić to faktycznie Android Development może być być dla mnie, to postawiłbym na praktykę, postawiłbym na kursy, które otwierają się co jakiś czas i mają na przykład — że robisz sobie jakiś projekt i masz jakiś kontakt z grupę, gdzie uczysz się, albo z mentorem. I ja czegoś takiego doświadczyłem ucząc się właśnie takich zagadnień związanych ze sztuczną inteligencją na Udacity. Udacity oferuje kilka płatnych, kilka darmowych programów, które są świetne żeby się nauczyć. Mają świetne wykłady, mają świetne materiały, przede wszystkim ta praktyka połączona z takim mentoringiem lekkim, to jest coś, co bardzo procentuje. No i koniec końców, jakby głównym źródłem tej wiedzy jest dokumentacja, więc wydaje mi się, że jak połączysz to wszystko, to możesz sprawdzić sobie, co jest tak naprawdę dla ciebie, czyli łączysz uczelnie, po uczelni sprawdzasz sobie jakiś kurs, może jeszcze znajdziesz jakiegoś starszego kolegę, który dosyć lepiej ogarnia — to jest taka kwestia mentoringu. No i wiesz, do snu czytasz sobie dokumentację. No i wcześniej, czy później zobaczysz, która wersja jest dla ciebie.

Jasne, pewnie. Czyli generalnie otaczasz się powietrzny ze wszystkich możliwych stron danym tematem…

Tak, i potem wybierasz, który sposób jest dla ciebie najlepszy.

Ok, to może zacznijmy od tych twardych umiejętności, od języka programowania. Kiedyś to była Java, a teraz Kotlin, z tego co obserwuję gdzieś tam z boku, przejął panowanie, poleciłbyś mimo wszystko zaczynanie od Javy? Czy nie wiem, w 2019–2020 nie ma to sensu i warto się skupić tylko na Kotlinie?

Java wymaga po prostu więcej linijek kodu, żeby coś rozwiązać czy opisać niż Kotlin

Wiesz co, myślałem o tym trochę. Ja jestem osobą, która i ogarnia Javę i zaczynała od Javy i też nauczyłem się Kotlina i w tej chwili większość kodu, który pisze — przez większość mam na myśli 95% kodu, który pisze jest w Kotlinie i bardzo się z tego cieszę, ale wydaje mi się, że to jest coś, co już wiesz, jeśli wiesz jak smakuje gorycz, to potrafisz lepiej docenić ten smak słodyczy. I wydaje mi się że Java jest tutaj taką lekką goryczą, a Kotlin potrafi osłodzić ci życie jak piszesz jakieś aplikacje. Głównym argumentem za tym, że Java jest gorsza od Kotlina, jest to, że Java jest bardzo rozwlekła. Co oznacza w skrócie dla juniorów, którzy mogą nas słuchać, którzy wiedzą jak to wygląda, że Java wymaga po prostu więcej linijek kodu, żeby po prostu coś rozwiązać, żeby rozwiązać jakiś krótki problem, żeby coś opisać, niż Kotlin. Czyli na przykład, w Kotlinie można coś zrobić w 3 linijki kodu, w Javie to samo zajęłoby linijek załóżmy 15, albo 20. Tylko, że ja uważam, że ta rozwlekłość jest dość ważna dla kogoś, kto zaczyna dlatego, że dzięki temu możesz widzieć dokładnie co się dzieje krok po kroku, prawda? nie musisz jakby tworzyć skrótów i liczyć na to, że okej, niech się dzieje co się dzieje pod spodem, mnie to nie interesuje, do pewnego momentu to nie powinno Cię obchodzić, na tym polegają te języki programowania, które są wysokopoziomowe, ale Kotlin ulepsza Jave, w sensie Kotlin powoduje, że niektóre wady JavyKotlin nie ma tych wad Javy i po prostu musisz wiedzieć, które wady Javy — Kotlin naprawia moim zdaniem. Jeśli zaczniesz pisać w Javie zobaczysz że masz null pointer exception albo, że przeszkadza ci to, że musisz opisywać coś po raz trzeci w sposób, który zajmuje 30 linijek kodu, to przechodząc potem na Kotlina, zobaczysz jak łatwiej, jak lepiej można coś napisać w tym języku. Najlepiej byłoby moim zdaniem uczyć się Javy i Kotlina jednocześnie. Wydaje mi się, że to jest coś bardzo ciekawego, coś czego nigdy nie było mi dane zrobić, ale wydaje mi się, że to byłoby dość ciekawe doświadczenie. Porównywać sobie jednocześnie ucząc się dwóch języków, ale na pewno rozpoczęcie od Javy i kontynuacja w Kotlin, jest moim zdaniem też dobrym sposobem na to, żeby zrozumieć na czym polega sukces Kotlina i na czym polega jego przewaga nad Javą.

Ciekawe. Czyli zalecasz, że gdyby rozpoczęcie jednoczesne z Javą i Kotlinem, z jakimś tam naciskiem mimo wszystko na Kotlina. Czy są jeszcze jakieś narzędzia, albo technologie, które musimy opanować, żeby stworzyć tego przysłowiowego “Hello Worda” na Androida?

Gradle to system budowania projektów na Androidzie. Jest to napisane w Groove.

Jest kilka małych rzeczy, o których wydaje mi się, że powinienem wspomnieć. Jest coś, co nazywa się Gradle. Jest to w dużym skrócie, taki system budowania projektów na Androidzie. Jest to napisane w groove. I wydaje mi się, że nie trzeba wiedzieć jakoś bardzo dużo o tym gradle dlatego, że on działa automatycznie dzięki Android Studio, który ma sobie wbudowane pluginy, które budują nam te projekty, ale żeby nie wystraszyć się tego, że widzimy chwilkę odrobinę inny język programowania, gdy ściągnęliśmy Android Studio i budujemy jakiś projekt, to wydaje mi się, że warto przeczytać przynajmniej pierwszą stronę dokumentacji i zobaczyć na czym w ogóle polega gradle, na czym polega Android gradle plugin, jak na przykład dołączać różne biblioteki do naszego projektu, tak żeby wykorzystywać kod innych. To jest jedna kwestia, ale tak jak mówię — myślę, że nie warto poświęcać na to jakoś bardzo dużo czasu, to jest kwestia bardziej, żeby się nie wystraszyć, jeżeli ktoś zobaczy pliki groove, albo ogólnie gradle w projekcie. XML jest dość ważnym aspektem programowania na Androida. XML jest językiem znaczników, czyli nie jest takim pełnoprawnym językiem, jest takim bardzo bardzo podobnym do HTML. My, Androidzi przede wszystkim używamy XML do tego, żeby tworzyć layouty. Oczywiście jest parę innych zastosowań, ale głównie tworzymy layouty. Czyli jeżeli ktoś odpala aplikacje i widzi na przykład pole tekstowe, jakiś przycisk… no to jakby sam ten layout, samo to co widzimy jest zaprojektowane w XML. To, że tworzymy ten layout jako coś interaktywnego, no to już jest faktycznie zasługa Kotlina i Javy, ale sam ten XML, sam layout, to jest coś co tworzymy osobno. No i na koniec myślę, że Jason to jest też taka podstawa JavaScript Object Notation, dla tych którzy nie wiedzą co to jest. Bardzo prosta rzecz — to jest pewien sposób takiego lekkiego przenoszenia danych pomiędzy platformami, pomimo tego, że ma w sobie nazwę JavaScript, to jest bardzo często używane w różnych technologiach po to, żeby na przykład przenosić dane serwera i wyświetlać je na przykład na telefonie, więc wydaje mi się, że poświęcenie jednego dnia, na takie delikatne obycie się z tymi trzema rzeczami- gradle, XML i Jason na pewno zaprocentuje i gdy otworzymy sobie projekt w Android Studio, to będziemy mniej przerażeni.

No dobrze, na początku powiedzieliśmy, że to co ty to powiedziałeś również, że to co Cię gdzieś tam przeciągnęło powiedzmy, do tworzenia aplikacji mobilnych, to jest ta warstwa wizualna. To, że coś widać, to że możemy zaprogramować coś, co w jakiś sposób zmienia swój wygląd. Jakie podstawowe komponenty, zagadnienia według ciebie trzeba znać opanować, żeby z tą warstwą właśnie wizualną móc podziałać na Androidzie?

Wydaje mi się, że takie podstawy. Jeśli chodzi o kwestie wizualne, może Activity? Activity to jest klasa od której chciałbym zacząć. Activity to jest klasa, która odpowiada w dużym dużym skrócie za ekran. Wyobraź sobie że otwierasz sobie aplikację, która ma ekran logowania, potem sobie przechodzisz w jakiś główny ekran, który ma jakąś listę, potem sobie możesz przejść w jakiś osobny ekran, który ma na przykład dane o twoim profilu. Każdy z tych ekranów najczęściej — bo jeszcze wspomnę jakie są przypadki, jak to może być podzielone, ale najczęściej jest to implementowane jako osobne Activity. Czyli mamy na przykład login Activity, main Activity, załóżmy profile Activity, i do każdego z tych Activity, które są utworzone w Kotlinie, albo w Javie jest właśnie dopisany jakiś XML. Czyli po prostu takie pliki XML, które, gdzie definiujemy sobie layout, czyli co chcemy wiedzieć na tym widoku. Gdy będziecie przeglądać na przykład dokumentację, związaną właśnie z Activity, albo będziecie uczyć się Activity, to pytanie klasyczne na rozmowie kwalifikacyjnej i coś co, powtarza się potem bardzo często — to to jest Life cycle activity, czyli cykl życia Activity. Czyli przez jakie callbacki wewnątrz Activity przechodzi się podczas interakcji z aplikacją. Co się dzieje gdy włączymy ekran? Co się dzieje gdy wycofany aplikacje na chwilę do backgrounda? Czyli na przykład wyjdziemy z niej, ale ona ciągle będzie działała. To jest coś, na co warto zwrócić szczególną uwagę i do czego warto się przyłożyć, bo wydaje mi się że, nawet mi — jako Seniorowi zdarzają się małe fuck up w tym, w tej kwestii. To jest jedna rzecz — Activity. Czyli duży ekran. Druga rzecz o której chciałem wspomnieć to fragment. I też, fragment też ma swój Life cycle, ma swój cykl życia, czyli znowu mamy fragment jako klasę, która jest częścią ekranu. Czyli możemy mieć Activity, które jest całym ekranem, ale możemy sobie to Activity podzielić na jakieś małe fragmenty. Czyli możemy mieć jakby górną część ekranu i dolną część ekranu. I sam fragment jest osadzony w Activity. Activity jest osadzone ogólnie w całej naszej aplikacji, no i fragment, tak jak mówiłem też ma swój cykl życia, więc tutaj już pojawiają się problemy. Dlatego tak bardzo kładę nacisk na to, żeby zwracać uwagę na cykl życia podczas nauki, bo to jest coraz bardziej skomplikowane, im więcej elementów do siebie dodajemy, mamy wtedy cykl życia, wewnątrz cyklu życia i znowu jedno z najczęściej pojawiających się pytań rekrutacyjnych — czyli cykl życia fragmentu, biorąc pod uwagę, wiesz, jest wewnątrz Activity, więc w skrócie fragment to jest wydzielona porcja, jakby część ekranu, część Activity. Fragmenty stosujemy najczęściej dlatego, żeby jakby stworzyć coś, co jest bardziej, co możemy sobie odłączyć, taki plugin mały. Czyli bierzemy sobie jeden fragment z jednego Activity i wrzucamy do innego Activity. Na fragmentach można to łatwo zrobić. Z Activity może być trochę ciężej, więc w dużym skrócie fragmenty są po to żeby dać nam taką lepszą modularyzację ekranów, żebyśmy mogli przerzucać sobie takie malutkie widoczki na różne Activity, żeby ten widok był jak najbardziej modularny. No i mamy Activity, mamy fragment i tak jak mówiłem — Do każdego z tych bytów, z tych klas jest podłączony jakiś XML. XML, który opisuje nam ten layout, który opisuje nam co my chcemy widzieć. Fragment i Activity tworzy interaktywność z tych layoutów, które są Martwe, ale tak samo layout może zawierać takie rzeczy, jak linearlayout. Linearlayout to jest po prostu layout, który jest taki najprostszy, od którego radzę zacząć, że po prostu wypisujesz sobie w XML kolejne elementy, jakie chcesz tam mieć jakieś tam mieć. Najprostszy to na przykład taki textView. Tekst View to jest taki prosty element, który wrzucasz sobie do XML, no i to jest po prostu zwykły tekst zwykły, taka labelka, jakiś opis możesz tam wrzucić. Edit text to jest kolejna rzecz, którą możesz sobie wrzucić do layoutu, to jest taki input free, czyli po prostu, że masz pasek, gdzie możesz wpisywać jakiś tekst. Też bardzo przydatne, bardzo proste na początek i właśnie od tych, od tych takich prostych rzeczy radzę zacząć. Potem masz button, na przykład button to jest kolejny element, kiedy możesz wrócić sobie do prostego layoutu, gdzie to jest po prostu zwykły przycisk. Image View, też bardzo fajny na sam początek, po prostu jest to malutki widok, gdzie możesz wrzucić jakieś zdjęcie. No i na przykład Progress Bar, czyli jak coś robimy, jak będziemy potem wspominać, o tym że robimy coś w tle, na przykład czekamy aż coś wykona. No to warto pokazać taki ekran ładowania malutki, taki okrąg który się kręci, to jest wbudowane wszystko Androida. Od tych prostych widoków bardzo radzę zacząć. Zbudować coś prostego z Activity, fragmentem, poczuć przede wszystkim Life Cycle, to jest najważniejsze. No i właśnie to co powinien umieć ktoś, kto chce opanować te takie wizualne komponenty na tym poziomie podstawowym.

No właśnie rozpocząłeś już to zdanie, że oprócz tego, że mamy warstwę prezentacji, no to aplikacja nasza, najczęściej posiada też jakąś logikę, czyli coś się dzieje w tle, komunikujemy się z jakimś zewnętrznym API, wykonujemy jakieś obliczenia, jakieś jakieś modyfikacje danych i tak dalej. Z Czego na Androidzie mogę skorzystać, aby właśnie tego typu operację móc sobie zakodować?

Tak jak mówiłeś, oprócz tego co widzimy, oczywiście musi być też wykonywana jakaś praca w tle i na początek jest oczywiście mnóstwo sposobów, żeby to zrobić. Jeśli chodzi o takie rzeczy, które radzę zgłębić na początku, to serwisy. Serwisy są to takie komponenty Androida, które wykonują jakąś pracę, nawet jeżeli użytkownik nie korzysta z aplikacji. Wykonują ją tle mają, nie mają UI, czyli nie mają tak jak Activity, albo fragment, o którym wspominałem, nie mają XML ,który jest przyczepiony, coś pokazuje. Serwisy wykonują jakąś pracę w tle, coś się dzieje i znowu zaczynamy zgłębiać te serwisy i pojawia się taka czerwona flaga i tutaj też nie warto panikować, tą czerwoną flagą jest to że od Androida 8,i trochę zmieniły się te serwisy. Co oznacza, że nie możemy na przykład używać teraz serwisów w tle. Podam na przykład coś, co ja montowałem do niedawna. Możemy mieć aplikację, która chce zsynchronizować swoje dane z serwerem. Nie chcemy tego robić tak, żeby blokować dla użytkownika ekran, bo to by było bez sensu, chcemy zrobić w tle. Dlatego uruchamiamy serwis, który robi nam synchronizację. Przed Androidem 8 mogliśmy spokojnie ten serwis uruchomić w tle i kompletnie się nie przejmować tym, czy użytkownik wie o tym, czy nie. O tyle, po Androidzie 8, coś co według mnie jest słusznie zrobione, twórcy Androida czyli Google, zobaczył że to bardzo często wpływa na jakość baterii, czyli na długość życia baterii. Bo często są aplikacje, które wykonują niesamowicie ciężką pracę w tle i użytkownik nawet o tym nie wie. Dlatego wprowadzono wiele limitów, jednym z tych limitów jest to, że nie możemy odpalić takich serwisów w tle. Ale to nie znaczy, że serwisy całkowicie umarły. Warto o nich poczytać i warto zastanowić się, jak są one wykorzystywane w tej chwili, mając na uwadze coś, co właśnie nazywa się popularnie Background Execution limit , czyli właśnie na Androida 8.0 jakby wchodzą te limity, które pozwalają nam cieszyć się jeszcze więcej z baterii, więc serwisy — na pewno padnie o to pytanie, wcześniej czy później na jakiejś rozmowie kwalifikacyjnej, przynajmniej wydaje mi się, w tym albo w następnym roku, nie wiadomo co Google wymyśli jeszcze. Druga rzecz, wydaje mi się, że ona jest łatwiejsza i bardziej powszechnie będziecie ją stosować, tworząc jakieś apki proste, ale też bardziej skomplikowane na Androida — retrofit. Retrofit 2 jest to biblioteka ,która została napisana przez między innymi takiego jednego z bogów Androida, czyli Jake Whartona, pewnie będziecie o nim będziecie słyszeć, jak będziecie czytać sobie o różnych rzeczach na Androidzie. Retrofit jest to biblioteka, która służy w dużym skrócie do konsumowania jakiś zewnętrznych API, czyli wyobraźmy sobie, że mamy jakiś serwer, który wystawia nam jakiś endpoint i chcemy zaciągać jakieś dane, na przykład nie wiem, listy użytkowników — chcemy to wyświetlić. To jest tak naprawdę bardzo prosta aplikacja, którą polecam zrobić na początek. Activity, jakiś może fragment i po prostu zasysanie danych i pokazywanie ich na ekranie. I Retrofit właśnie tym się zajmuje. Retrofit dodaje się przez Gradle, tam gdzie dodaje się wszystkie zewnętrzne biblioteki. Gradle to jest ten system budowania, o którym wspominałem, no i Retrofit pozwala nam w taki fajny sposób zaciągnąć to, łatwo możemy tam ogarnąć wątki, żeby nie blokować jakby UI, Retrofit pozwala nam współpracować z API i robić coś ciekawszego, niż jakieś takie widoczki, więc tak jak mówię — serwis i Retrofit na początek, pobawić się tym na pewno to zaprocentuje i i to jest taka fajna podstawa.

Czytaj dalej na: https://porozmawiajmyoit.pl/poit-052-jak-zostac-android-developerem/

kkempin’s dev blog

Dev and life blog. Thoughts about programming, design patterns, Ruby and life.

Krzysztof Kempiński

Written by

IT expert. Ruby on Rails/iOS/Elixir programmer. Blogger. Podcaster.

kkempin’s dev blog

Dev and life blog. Thoughts about programming, design patterns, Ruby and life.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade