CrossPlatform

Większość dużych przedsiębiorstw programistycznych ma homogeniczne środowisko. W tym środowisku żyją programiści, którzy zwykle koncentrują się na jednej technologii i na jednym języku programowania. Jeżeli występuje nawet jakiś podział na pod-frameworki, to programiści są szkoleni wciąż jako specjaliści do jednego konkretnego rozwiązania.

 

imageMantra “Jeden język, Jedna Platforma” występuje w większości przedsiębiorstw, ponieważ łatwiej zarządza się takim oprogramowaniem. Nie chcemy oprogramowania, które musi za pomocą usług sieciowych komunikować się z innymi członami, gdy z góry wszystko można napisać w jednej platformie. Jest to całkowicie logicznie. Chcemy ułatwiać sobie życie, a nie utrudniać.

Firmy ograniczając się do jednej platformy, zatrudniają programistów z odpowiednimi zdolnościami wynikającymi z używania danego rozwiązania. Taka organizacja dyktuje infrastrukturę potrzeb oraz urządzenia, które będą wspierane. Aplikacja napisana w WPF raczej nie uruchomi się na systemie Linux nawet przy pomocy Mono. Decyzje o urządzeniach, jak i potrzebach są zwykle określane dopiero po wyborze technologii. A ta decyzja w firmach została podjęta dawno, dawno temu.

Wszystko to jest normalne. Niestety to już przeszłość.

Kiedy Apple wymyślił iPhone-a ,a Google przedstawił swój system operacyjny Android życie programistów zmieniło się na zawsze. Klienci zaczęli się domagać od działów IT aplikacji, które będą działały na wszystkich urządzeniach. Te urządzenia niekoniecznie wspierają języki i platformy, na których obecnie działa firma. Status quo “jednego języka i jednej platformy został złamany”. Świat nagle zaczął się gwałtownie zmieniać w kierunku telefonów mobilnych.

Firmy teraz musiały zmierzyć się z zupełniej nowym problemem. Jak wspierać wiele heterogonicznych platform. Co gorsza, dla wielu firm stało się to nagle koniecznością.

image

Rynek mobilny to są naprawdę duże pieniądze. Zyski firm Google, Apple i Microsoft wynikające z urządzeń mobilnych byłyby wystarczająco duże, aby kupić co najmniej taki kraj, jak Polska. Obecnie prawie każdy człowiek ma urządzenie mobilne. Wielu dokupi sobie jeszcze tablet, a co poniektórzy menadżerowie firm z przyjemnością będą zarządzać firmą i kontaktami osobistymi używając 3 telefonów (firma, rodzina, kochanka). W takim wypadku liczba urządzeń mobilnych ma szanse dorównać liczbie mieszkańców ludzkości.

imageW idealnym świecie Google Apple i Microsoft dogadałyby się i stworzyły jedno rozwiązanie mobilne i wszyscy byliby szczęśliwi. Programiści w takim świecie poczuliby się jak rasa panów. Każdy szary obywatel pracuje w biedronce, a ty zarabiasz miliony. Biorąc jednak pod uwagę, jak dobrze przeglądarki porozumiewają się między sobą w sprawie jednej implementacji HTML 5 , to myślę jednak, że to dobrze, że taki świat nie istnieje

image

Zatrzymajmy się na chwilę. Mówimy ciągle o firmach, a jak na tą sytuację patrzy student, który zaczyna swoją karierę z programowaniem w platformie .NET i C#.

Zwykle, gdy myślę o pracy programistycznej, myślę o tym w trzech kategoriach:

  • Praca przy aplikacjach webowych: ASP.NET, jQuery (od cholery ofert tego typu)
  • Praca w firmie bankowej: stary system WinForms, WPF (mało i robota z wyzwaniem)
  • Aplikacje mobilne?

imageAplikacje mobilne w .NET-cię, w końcu ktoś coś ruszył z tym fantem. Na wzór wojny przeglądarek i konsoli XBOX Microsoft przychodzi późno na imprezę, ale się nie poddaje i idzie do przodu. Na końcu staje jak równy z równym ze swoimi rywalami.

Sam jestem użytkownikiem Windows Phone 7, ale szczerze mówiąc nie oszukujmy się dopiero masowe reklamy telefonu Nokia Lumia i nacisk na operatów sprawiły, że ktoś w ogóle usłyszał o tym telefonie.

image

Byłem na spotkaniu firmowym w 2011 roku, określającym strategię mobilną na przyszły rok. Telefon Windows Phone 7 został oceniony niżej niż BlackBerry i Bada i inne urządzenia, o których nic nie wiem. W sumie temat ten nie byłby poruszony wcale, gdyby nie gigantyczne bilbordy z Nokią Lumia sugerującą jakąś rewolucję. Na spotkaniu można było tylko usłyszeć o Androidzie i o dużym problemie z programowaniem na iPhone.

Aby programować na IPhone trzeba mieć Mac i znać Objective-C. Ktoś w firmie kombinował z Flashem, którym był kompilowany do natywnego kodu. Miało to być rozwiązanie działające wszędzie. Chociaż później zawiodłem go faktem, że w Visual Studio nie może uruchomić projektu z Flash-em, nie mówiąc już o samym telefonie. Cóż śmiechem żartem koleś i tak jest bardziej doświadczony i zapewne do dziś więcej zarabia niż ja, więc to jak powinien się poczuć głupio, że opisuję tę historię.

HTML 5 z punktu widzenia web deweloperów wydaje się rajem, ale różne komórki mają różne przeglądarki. Nie mówiąc o utracie tak zwanej natywności o czym później. Chociaż jeśli chodzi HTML5 to projekt PhoneGap wydaje się naprawdę dobry rozwiązaniem Cross-Platform i jest to dobra alternatywa dla króla tego wpisu.

W międzyczasie w firmie próbowałem coś kombinować z Windows Phone 7. A to wziąłem się za napisanie projektu startowego MVVM do Windows Phone 7 ,a to prezentowałem pracownikom jak w Expression Blend 4.0 można łatwo stworzyć animację.

Moja przygoda z firmą się zakończyła, ale moim zdaniem patrząc także na swoich znajomych, to widzę jakie trudności ma programista .NET, który próbuje odnaleźć się w świecie mobilnym. Niektórzy mają nawet problemy z odnalezieniem się w świecie webowym. Nagle okazuje się, że trzeba napisać aplikację w ASP.NET, co w sumie nie jest taką trudną sprawą, dopóki czegoś nie trzeba zrobić w JavaScript.

image

Wiecie co mnie boli w takim wypadku. Programowanie na Windows Phone jest proste. Tak się złożyło, że w nowej firmie miałem okazje przypomnieć sobie język Java i zacząć pisać aplikację na Android-a. Model samej platformy ma tyle dziwnych mechanizmów, że człowiek czuje jakby się cofał. Powiązanie danych z listą w Androidzie wymaga napisania adaptera. Sam adapter musi być napisany zgodnie z pewnymi wytycznym i sztuczkami, które można znaleźć na necie, jak i na samych prezentacjach Google. Jeśli tego nie zrobimy możemy się zdziwić dlaczego lista tak wolno się przesuwa. Jak się okazuje ona z każdą akcja użytkownika się odświeża, co przy zły napisanym kodzie oznacza katastrofę.

Teraz weź porównaj ten mechanizm z bindowaniem kolekcji XAML w Windows Phone 7.

Devil

Szczerze, moim zdaniem każdy powinien trzymać się z dala od aplikacji mobilnych. Każda nawet najlepsza platforma nie jest przygotowana na widzimisię klienta. Blokowanie wybranych telefonów “Windows Phone 7” niemożliwe. Android możliwe tylko trzeba grzebać przy użyciu refleksji w źródle samego systemu aby mieć taką funkcjonalność. Kto tu jest normalny.

Aplikacje mobilne w połączeniu z nawiedzonym klientem, który sam nie wie czego chce, to piekło na ziemi. Jak napisać aplikację, która zrobi coś, czego platforma nie wspiera.

Mój kolega musiał kiedyś napisać na Windows Phone 7 aplikację, która na urządzeniu miała wyświetlić dynamiczną stronę wygenerowaną na bazie XML. Kontrola WebBrowser nie może być w żadnym wypadku nadpisana, jak i ulepszona poprzez dziedziczenie. Ostatecznie skończyło się na tym, że kolega musiał wewnątrz przeglądarki…w wewnątrz kodu w C#…w telefonie uruchomić kod JavaScript.

Język JavaScript był mu dobrze znany, ponieważ jest on urodzonym programistą aplikacji desktopowych (WPF). Skończyło się na tym, że jego szef stwierdził, że skoro nie umie napisać takiej aplikacji to znaczy, że jest kiepski. Szkoda, że jego szef w ogóle nie zrobił rozeznania, czy taki model aplikacji w ogóle ma sens.

Ten wpis jest na temat Cross-platform rozwiązań mobilnych. Z tych historii jasno wynika, że aplikacje mobilne wyniszczyły i dotknęły młodzieńcze marzenia wielu programistów.

image

Czy w ogóle rozwiązanie Cross-Platform istnieją na tym świecie?

Czy istnieje jakaś dobra wiadomość?

Dobra wiadomość jest taka, że większość firm o tym wie i są bardziej inteligentni niż sami studenci. Cała filozofia cross-platform jest ciężka do zaadaptowania, wymaga cierpliwości, czasu. Sam efekt niekoniecznie może być pozytywny. Facebook na przykład stwierdził, że ich aplikacja napisana w HTML 5, mimo iż działa na wielu urządzeniach jest zbyt wolna i złożył zlecenie inne firmie, która napisała aplikację natywnie bez bawienie się w różne dziwadła.

Najprościej jest stwierdzić, że jakiekolwiek rozwiązania cross-platform-e to tylko legenda i mit. Najlepiej napisać aplikację, tak jak Apple, Google czy Microsoft chce abyśmy napisali.

image

Jest to całkowicie logiczne zachowanie. Firma ma pieniądze. Zleca więc napisanie aplikacji innej firmie. Aplikacja podczepia się pod logikę wystawioną w usługach sieciowych (WCF) i gotowe.

Wciąż jednak istnieją firmy, które coś kombinują. Natywnie skompilowany Flash to nie koniec zwariowanych pomysłów.

http://www.motorola.com/Business/US-EN/Business+Product+and+Services/Software+and+Applications/RhoMobile+Suite

Większość rozwiązań cross-platform domyślnie odrzuca Windows Phone jakby był kalekim istnieniem. Ten link powyżej reprezentuje kolejne ciekawe rozwiązanie.

Pomyśl, firmy i rynek mobilny rzuca ci wyzwanie. Zrób coś, co sprawi, że magicznie będziemy pisać aplikacje na wszystkie telefony w 15 minut. Uratuj wszystkich programistów przed głupimi szefami i klientami, i pokaż im gdzie ich miejsce. Oszukaj Google, Apple i Microsoft i stwórz rozwiązanie, które będzie działo lepiej niż oryginalne. Potem firma sprzeda twoje rozwiązanie i ciebie wyrzuci, ale przynajmniej powiesz, że było fajnie.

Co ty jednak możesz zrobić.

image

No więc słyszałem, że bardzo lubisz programować w C# i nie lubisz alternatyw.

Może jednak skusiłbyś się na coś innego. Może byś kupił sobie najtańszego Mac za 5000 zł i zaczął programować w Objective-C.

Oto przykładowa składnia tego języka.

image

Tyle kodu aby wyciągnąć datę, czy ktoś oszalał. Poza tym, co to za składnia. To zapewne nie przypomina ci żadnego znanego języka programowania (C++,Java,C#). Objective-C wywodzi się od Smalltalk*. Język ten objął w ogóle inną ścieżkę ewolucyjną niż inne języki oprogramowania.

Dlatego na pierwszy rzut oka nawet nie wiem, na co tutaj dokładnie patrzę.

Gdybym ja miał nauczyć się Objective-C , to nie wiem , czy bym nie zaczął od nauki C++. Chociaż C++ i Objective-C różnią się jak dzień i noc.

image

Więc lubisz programować w C#.

Co możesz zrobić aby programować na inne platformy mobilne. Chyba nic.

Trzeba poczekać, aż Windows 8 i Windows Phone 8 zawojuje świat.

To jest przyszłość, być może nawet teraźniejszość. Piszę ten wpis w trakcie premiery Windows Phone 8.

imageJednak spójrzmy na statystki 2011 roku. Niech twoja firma z 2011 roku spojrzy na te statystki i powie ci delikatnie, że chce pisać aplikacje tam, gdzie jest największe zapotrzebowanie

Tak to duże zielone kółko to Android.

Cały zespół w firmie to programiści .NET więc dobrze rozumieją twój ból, ale co zrobić Smutek

Wracamy do programowania w Javie. Nie jest to Objective-C i nie musimy wydawać pieniędzy na głupi hipsterski komputer.

Dramatu, jakby nie patrzeć nie ma. Przecież spójrz jeszcze raz na ten czarny obrazek z kodem Objective-C. Java nie jest taka zła. Eclipse niezły. Tylko ten emulator działa 10 razy wolniej niż ten do Windows Phone 7.

Naprawdę taka rzeczywistość jest do akceptacji.

Pewnego dnia jednak wróciłem do domu. Nie miałem czasu aby grać w grę, więc dla odmiany oglądałem na Youtubie jak ktoś gra.

image

Nagle widzicie reklamę jakieś firmy Xamarin.

Co tam pisze.

Napisz aplikację na Androida i na iPhone w .NET i w C#.

WTF?

Wchodzicie na stronę i dostajecie wizji. Wizji, której żaden student świadomy brutalności tego świata nie powinien zaznać

…ale co to jest…

…to uczucie wyzwania…zupełnie takie samo, jak wtedy, gdy próbowałem napisać projekt startowy MVVM na Windows Phone 7

Czy to możliwe?

image