O Mobice – firmie specjalizującej się w tworzeniu aplikacji mobilnych na całym świecie, konferencji Mobilization oraz testowaniu, tworzeniu i przyszłości aplikacji mobilnych rozmawiamy z Markiem Defecińskim Software Engineerem Mobici.
Powiedz coś o sobie. Czym się zajmujesz i gdzie pracujesz?
Jestem programistą aplikacji mobilnych w firmie Mobica. Długi czas zajmowałem się projektami w technologi J2ME. Naturalną ścieżką rozwoju było zostanie programistą aplikacji na system Android.
Także poza pracą staram się rozwijać jako programista. Dużo czasu poświęcam na Java User Group w Łodzi, gdzie raz w miesiącu organizujemy 1-2h prelekcję na tematy związane z programowaniem (testowanie, nowe biblioteki, jakość kodu).
W zeszłym roku zorganizowaliśmy konferencję Mobilization, na której pojawiło się kilka interesujących tematów z dziedziny mobilnej. W tym roku też zamierzamy zrobić nową, lepszą edycję. Stworzenie aktywnego community w Łodzi to moje marzenie. Chciałbym, żeby ludzie z pomysłami byli zainteresowani współpracą, dzieleniem się wiedzą i dyskusjami, z których wyjdą ciekawe idee.
Jak zacząłeś przygodę z programowaniem aplikacji mobilnych?
Pierwszy raz na studiach w 2003 roku na przedmiocie dotyczącym tworzenia interfejsów użytkownika na laboratoriach zetknąłem się z platformą J2ME. Rok później na wymianie studenckiej w Finlandii próbowałem po raz kolejny oswoić się z emulatorem Nokii. Wiedza, którą wtedy zdobyłem wydawała mi się niewielka, jednak bardzo się przydała, kiedy zacząłem pracować w Mobice i pracować w technologii J2ME.
Z jakich aplikacji stworzonych przez Mobica jesteście najbardziej dumni?
Mogę mówić o aplikacjach, w których tworzeniu uczestniczyłem. Razem z Krystianem, moim kolegą z Mobici, pracowaliśmy nad telewizją mobilną w telefonach komórkowych Nokiach S40 i S60 oraz Sony Ericsson. Podejrzewam, że niewiele osób nawet zajmujących się J2ME uwierzyłoby, że można coś takiego na tej platformie zrobić, a jednak udało się. Projekt niestety nie trafił na “produkcję”, ale było w nim dużo ciekawych zagadnień jak np. własna biblioteka UI (projektu Krystiana) czy właśnie obsługa streamingu video.
Mobica realizuje również zlecenie poza granicami Polski. Jaki rodzaj aplikacji jest najczęściej zlecany? Czy klienci proszą o stworzenie aplikacji dedykowanych danym firmom czy są to również startupy?
Mobica realizuje głównie zlecenia poza granicami Polski. Pomagamy różnym firmom i na wielu platformach i być może są wśród firm startupy, niestety ja tego nie wiem. Skala firmy od czasu kiedy w niej pracuję zwiększyła się i po prostu nie jestem nawet w stanie wiedzieć w co się angażujemy. Co do trendów to teraz widzę różnorodność, 3 lata temu większość aplikacji służyła do synchronizacji kontaktów, potem do czatowania w mediach społecznościowych (multikomunikatory). Teraz głównie z powodów, o których mówiłem wcześniej nie jestem w stanie wskazać trendów.
Mobica to dość duża firma, zatrudniacie nowych ludzi i niedługo ma powstać nowy oddział w San Diego. Jakie macie plany na przyszłość?
Tak, Mobica niemalże nieustannie rozwija się i cały czas rekrutuje. O oddziale firmy w Stanach Zjednoczonych słyszałem już ponad rok temu, teraz najprawdopodobniej ten plan materializuje się. Myślę, że to otwiera kolejne możliwości i szansę na rozbudowę portfolio. Dla programistów szansa na ciekawy wyjazd. Co do planów to firma jest bardzo czujna i monitoruje rynek oraz uczestniczy w wielu projektach typu proof-of-concept. Widziałem na biurkach kolegów płytki Raspberry Pi czy też telewizory na których rozwijają oprogramowanie telewizji interaktywnej, niestety szczegółów projektów nie znam.
Ile osób obecnie pojawia się na spotkaniach Java User Group w Łodzi?
Spotkania gromadzą od 15 do 60 osób. Ostatnio mieliśmy ponad 50 osób na prelekcji Sławomira Sobótki, który wygłosił prezentację nt. architektury systemów. Prelekcja ta była na bardzo wysokim poziomie i na pewno zachęciła ludzi do kolejnych spotkań JUGa.
Co trzeba zrobić, aby zachęcić ludzi do dzielenia się swoimi doświadczeniami?
Dzielenie się wiedzą daje bardzo dużo przede wszystkim dzielącemu się. Sam się o tym przekonałem angażując się 2 lata temu w JUG. Moje pierwsze prezentacje były po prostu słabe i nieciekawe, ale starałem się za każdym razem poprawiać, czytałem recenzję i szukałem opinii i poprawiałem mankamenty. Dużo się dzięki temu nauczyłem samemu, przygotowując materiały do tychże prezentacji. Wiele też nauczyłem się od innych prelegentów JUGa np. od Pawła Włodarskiego w kwestii testowania kodu.
Podsumowując, główną zachętą do tego działania, jest możliwość rozwoju osobistego, która jest korzystnym “efektem ubocznym” wysiłku jaki musimy podjąć :).
Kiedy odbędzie się tegoroczna edycja Mobilization? Tak jak rok temu w październiku?
W tym roku dokładnie miesiąc wcześniej – 22 września. Mobilization odbędzie się tym razem na Politechice Łódzkiej w aulach wydziału FTIMS. Właśnie dlatego, że uczelnia jest lokalizacją na tą edycję konferencji, przesunęliśmy termin żeby nie kolidować z zajęciami. Dodatkowo mamy nadzieję na większy udział studentów, ponieważ uczestnikami zeszłorocznej edycji w zaledwie 5% byli studenci. Jest to szczególnie ważne dla sponsorów, którzy poszukują pracowników, ale także dla nas. Chcemy, żeby młodzi absolwenci widzieli realną mobilną alternatywę dla programowania aplikacji internetowych (technologie webowe).
Na jakie atrakcje napotkamy uczestnicząc w tegorocznej edycji Mobilization?
Samo znalezienie się w jednym miejscu z tyloma pasjonatami jest największą atrakcją wydarzenia. Możliwość nawiązania kontaktów poznania innych ludzi jest tym po co jeździ się na konferencje. Kto wie może na Mobilization nawiążą się współprace, których rezultatem będą nowe mobilne startupy?
Mam nadzieję że Mobilization będzie inspirującym wydarzeniem dla wszystkich uczestników, poznają oni nowe tematy dzięki interesującym prelekcjom i może rozpoczną nowe kariery w aplikacjach mobilnych. Ludzie poszukujący nowej pracy będą mieli okazję porozmawiać z firmami sponsorującymi konferencję na temat perspektyw i ofert zatrudnienia.
Jeśli pytasz o konkursy to będziemy starali się przede wszystkim nie odciągać naszych uczestników od prelekcji ani dyskusji z innymi uczestnikami i konkursy, które planujemy nie będą zbyt inwazyjne i wymagające czasowo.
Na jakie problemy napotkałeś przygotowując się do organizacji tegorocznej edycji Mobilization? Czy sponsorzy są chętni na tego typu działania?
Właściwie nie powinno się zdradzać swoich słabych punktów, bo może być wykorzystane przeciw Tobie 😉 Najbardziej brakuje mi jednego urzędu w Polsce, w którym mógłbym zadać pytanie: czy mogę zrobić tak i tak i czy zgodne jest to z prawem, lub uzyskać poradę prawną lub podatkową. Na przykład każdy z księgowych, których pytałem o radę ma inne zdanie w jaki sposób rozliczać sponsoring tzn. czy podpisywać umowę, porozumienie, proponować sponsorom darowizny czy w ogóle Stowarzyszenie JUG Łódź, które nie prowadzi działalności gospodarczej może podpisać jakieś umowy itd.
Odpowiadając na drugą część pytania to nie jest łatwo pozyskać nowych sponsorów. Na tą chwilę sponsorami są wyłączeni łódzkie firmy branży IT: Cybercom, Ericpol, Mobica, Rule Financial, Symphony Teleca, TomTom z czego 4 z nich były już sponsorami w zeszłym roku. Myślę, że pomaga nam też to, że osoby tworzące zarząd Stowarzyszenia JUG Łódź (5 osób) są lub byli pracownikami tychże firm i w ten sposób mamy zaufanie, na którym możemy zbudować sponsoring.
Co jest najważniejsze w testowaniu aplikacji? Na co powinniśmy zwrócić uwagę?
Jeśli mówimy o testach pisanych przez samych programistów to pierwsza rzecz, którą się samemu zauważa to jak dużo drobnych błędów popełniamy. Druga to jak szybko się o tym dowiadujemy pisząc testy. Najważniejsza rzecz to zacząć wykorzystywać te dwie rzeczy jak najszybciej. Testy powodują, że stajemy się użytkownikiem swojego własnego kodu i w ten sposób wychodzi nam lepszy, bardziej czytelny i łatwiejszy do użycia kod.
Jakich narzędzi używasz do testowania kodu aplikacji?
Narzędzi do statycznej analizy kodu pod parasolem sonara, które liczą metryki, wskazują najczęściej popełniane błędy i słabe miejsca w kodzie. Staram się analizować czego dotyczy błąd i jak poprawić ten kod. Jeśli chodzi o testy, to staram się w ogóle je pisać, w Androidzie pewnym standardem stał się Robotium Framework, ostatnio zainteresowałem się Robolectric do testowania bez urządzenia.
Warto podejmować się testowania kodu na “własną rękę” czy lepiej zlecić to zewnętrznej firmie? Jakie są zalety i wady obu rozwiązań?
Z perspektywy samodzielnych programistów lub małych firm zlecanie testowania na zewnątrz to raczej marnowanie pieniędzy bo koszty takiej usługi są bardzo duże. Dużym korporacjom może się to opłacać. Ja jestem zdania, że nie powinno rozdzielać się testowania i produkcji oprogramowania oraz to, że testy pisane przez programistów powinny być podstawą testowania. Oczywiście zewnętrzny (z poza zespołu), niezależny tester też jest potrzebny. Zaletą testowania na zewnątrz jest też inna perspektywa z której oceniana jest aplikacja, a w przypadku zleceń do firm zajmującym się dedykowanym testowaniem także doświadczenie tych firm z innych aplikacji.
Jakie błędy najczęściej popełniamy tworząc swoje aplikacje?
Przede wszystkim wydaje mi się że twórcy aplikacji zbyt późno konfrontują swoje aplikacje z rzeczywistością czyli z użytkownikami. Na początku nie zdradzają nawet swoich pomysłów, potem starają się dopieścić aplikację zanim pokażą ją światu. Gdy aplikacja jest już niemalże gotowa odważają się ją udostępniać. Wtedy zaczynają gromadzić informacje od użytkowników. Okazuje się, że niektóre rozwiązania nie działają tak jakby się spodziewali, są też prośby o zmiany w pewnych częściach aplikacji. Niestety powstało już tyle kodu, że zmiany są bardzo kosztowne.
Dodatkowo, mój kolega Mariusz Saramak, który zajmuje się review kodu, powiedział ostatnio ciekawą rzecz. Jeśli chodzi o język Java to panuje przekonanie, że każdy znający trochę jego składnię lub inny język programowania np c++ może zacząć w nim pisać na platformie Android. Rezultatem jest kod źródłowy, który jest mieszaniną stylów programowania z różnych języków i jest tak nieczytelny, że nie jest się w stanie go rozwijać. Też uważam, że nie przywiązuje się dużej wagi do jakości oprogramowania co powoduje, że bardzo dużo czasu traci się na dalszych etapach rozwoju aplikacji na wprowadzanie zmian, które przy innym postępowaniu byłyby mniej bolesne do zaaplikowania.
Jaka jest przewaga systemu Android i dlaczego warto na nią robić aplikację?
Myślę że największym plusem jest otwartość tej platformy. Po pierwsze bariera wejścia jest bardzo niska – mamy zwykły PC i ściągamy SDK i to wystarczy, żeby pisać już aplikacje. Żadnych opłat lub konieczności zakupu kosztownego sprzętu.
Java to jeden z najpopularniejszych języków programowania, więc łatwo przesiąść się do Androida wystarczy poznać kilka klas. Możemy korzystać przy tym z dostępnych tutoriali tworzonych przez community wokół Androda i Javy.
Oczywiście każdy kij ma dwa końce i znajdziemy argumenty, że niska bariera wejścia powoduje kiepski poziom aplikacji w Google Play/Market (wpływ na to ma też brak weryfikacji aplikacji). Jednak mnie się wydaje, że dzięki temu mamy możliwość wyboru oraz czerpania inspiracji. Nawet kiepskie aplikacje mogą mieć fajne pomysły, które możemy poprawić, zrobić lepiej i umieścić w naszym programie. A niski koszt rozpoczęcia powoduje, że nie liczy się wielkość portfela, ale umiejętności.
Co powinno nas przekonać do tworzenia aplikacji na daną rozdzielczość wyświetlacza? Na jakie rozdzielczości najlepiej tworzyć aplikacje?
To pytanie powinieneś zadać komuś kto ma więcej doświadczenia w pisaniu typowych Androidowych aplikacji. Mnie los rzucił w projekt, w którym Androidowe aplikacje oglądam z perspektywy testowania i continous integration i nie do końca rozwiązuje problemy z dostosowywaniem rozdzielczości. Z tej perspektywy mogę dać jedną radę. Moim zdaniem od samego początku tworzenia aplikacji powinniśmy być przygotowani na różną rozdzielczość i powinniśmy testować chociażby na emulatorze jak wyglądają layouty na innych ekranach. Wymagania biznesowe mogą się zmienić i nagle aplikacja tworzona przez rok na rozdzielczość 800×480 może być oczekiwana do poprawnego zachowania na telefonach z inną rozdzielczością. Zmiana takiej aplikacji wtedy zaczyna stanowić ogromny problem. Do problemu wyboru rozdzielczości powinniśmy przystąpić analitycznie. Wybierzmy sobie grupę docelową naszej aplikacji, sprawdźmy jakie telefony używa ta grupa, wybierzmy najczęstszą rozdzielczość i traktujmy ją jako referencyjną. Miejmy oczywiście na uwadze to, co napisałem powyżej – powinniśmy być przygotowani na zmianę wymagań.
Kiedy w Polsce aplikacje na Android zaczną zarabiać tak jak na zachodzie?
Myślę, że kluczem jest cierpliwość. Od niedawna można zarabiać na aplikacjach w złotówkach i możemy zarabiać na szerokim rynku nie tylko w Polsce. Rynek aplikacji w Polsce też kiedyś dorośnie do zachodnich standardów i będziemy z tego korzystać.
Co trzeba zrobić by przekonać ludzi do płacenia za pewne dodatkowe opcje w naszych aplikacjach?
To jest bardzo trudne pytanie. Sam przyznam, że nie lubię żadnych rozwiązań w aplikacjach, które zmuszają mnie do opłat. Jeśli to możliwe szukam bezpłatnych podobnych funkcjonalnie aplikacji. W dość bogatym ekosystemie całkiem często znajduje się zadowalający ekwiwalent. Z drugiej strony jako posiadacz iPada mam kilka niepotrzebnych aplikacji, za które zapłaciłem. I dość trudno to racjonalnie wytłumaczyć. Temat monetyzacji jest ostatnio na topie, więc możemy obejrzeć wiele prezentacji na ten temat, możemy inspirować się rozwiązaniami, wybrać jedno i dopasować je do naszej sytuacji. W jednym przypadku sprawdzi się jeden model w innym drugi. Na pewno musimy próbować i monitorować w jaki sposób rozwiązanie działa lub nie działa i je poprawiać.
Jaka jest przyszłość aplikacji mobilnych w Polsce?
W Polsce i na całym świecie oczekujemy ciągłego wzrostu znaczenia mobilnych aplikacji. Póki co nie mogę się z tym nie zgodzić, natomiast nie chciałbym wypowiadać jakiś proroctw, ja i tak wiem, że życie (rynek :)) napisze swój własny scenariusz.
Czym powinniśmy się kierować tworząc aplikację na system Android?
Powinniśmy kierować się dobrą zabawą i frajdą jaką nam sprawia programowanie.