Java, zaćmienie i Android
  Czasem mówię w żartach, że jestem trzydziestopięcioletnim programistą, przy czym mam na myśli lata mojego doświadczenia zawodowego, a nie wiek. Pisząc o pierwszych kontaktach z komputerem, zajmującym pomieszczenie wielkości fabrycznej hali, czuję się jak dinozaur, ale zaraz potem zerkam na mój smyrofon o mocy porównywalnej z tamtym kolosem i za sprawą Androida znów jestem młody.
Długo dojrzewałem do Javy

  Mówiłem sobie: po co mi do kolekcji jeszcze jeden język programowania? Co może mieć takiego, czego nie mają inne języki? Tak było do czasu, gdy pewnego ranka obudziłem się z przekonaniem, że z wszystkich rzeczy, które można w życiu robić, najbardziej chciałbym pisać programy na Androida.
  Zainstalowałem więc środowisko Eclipse, podparłem je androidowym SDK i - do dzieła! Moją ulubioną techniką nauki programowania jest rozpoznanie bojem. Bierzemy jakiś problem i rozwiązujemy go w nieznanym sobie języku, a niezbędną wiedzę zdobywamy w miarę zapotrzebowania na nią. Przeważnie taki program nie będzie zanadto błyskotliwy (sprawdź), ale osiągamy istotne korzyści:
  • nie tracimy czasu na nudne przyswajanie teorii
  • zdobywamy od razu niezbędne, praktyczne umiejętności
  • powstaje rzeczywisty, przydatny i cieszący oko produkt

Prędko się okazało, że pojęcie nauka języka jest w tym przypadku raczej umowne, bo składnia Javy do tego stopnia przypomina C++, że mając niewielki fragment programu trudno się niekiedy zorientować, w którym języku został napisany.

  Nieco szokujące w pierwszej chwili jest spostrzeżenie, że klasy i metody, będące w C++ miłym urozmaiceniem zwykłego kodu, stanowią sedno Javy, bo zwykłego kodu tu po prostu nie ma. Kiedy się już zrozumie, w jaki sposób anonimowe instancje interfejsów zastępują nieobecne w tym języku referencje funkcji, reszta wydaje się prosta. Wciąż towarzyszy mi miłe poczucie, że każdy problem, z którym się mierzę, został już przez kogoś wcześniej rozwiązany, więc wystarczy skorzystać z gotowej klasy bądź odnaleźć w sieci stosowny samouczek.
Mały wielki system
  Androida nosiłem w sercu już od jakiegoś czasu, widząc że przywraca do życia dawno zapomniane wartości. Zwięzły, efektywny kod programu, optymalizacja wykorzystania zasobów, oszczędna acz wysmakowana grafika... To wszystko, co zdawało się odchodzić w niebyt za sprawą bloatware spod znaku okienek, teraz znów święci tryumfy.
  Myślałem, że umiejętności, nabyte w czasach 8-bitowych komputerów, nigdy się już nie przydadzą, a tu nieoczekiwanie powiał ten sam wiatr, który napełniał nam skrzydła w przypadku małego Atari. Znów mamy do czynienia z niewielkimi, bardzo osobistymi urządzeniami, znów liczy się efektywność i zwięzłość kodu, znów mam poczucie bliskiego związku z użytkownikiem.
  Tym razem Linux nie zaspał w blokach startowych, nie przegapił swojej szansy w dziedzinie urządzeń mobilnych. Uwidoczniły swą moc wszystkie atuty wolnego oprogramowania, jak otwartość, przejrzystość i rozproszenie.
  Dziś (jest listopad 2011) liczba aplikacji dostępnych za pośrednictwem usługi Android Market przekroczyła pół miliona i wciąż rośnie w niesłabnącym tempie. Bez wątpienia przyczyna leży w otwartości projektu, poczuciu, że jest się ważną cząstką wielkiej społeczności i oczywiście w bezprecedensowej dostępności narzędzi, bibliotek, źródeł wiedzy...
Punkty za pochodzenie
  Ech, pochodziłem ja sobie w życiu po wielu drogach i bezdrożach komputerowej wiedzy i szarlatanerii, a z każdej wyprawy coś pozostało:
  • z Pascala Algorytmy + struktury danych = programy (WNT 1980 wyd. 1)
  • z małego Atari oszczędność i optymalizacja
  • z Linuksa bezpieczeństwo, systemy plików, uprawnienia itp.
  • z C++ i Perla idee oop i łatwy start do Javy
  • z SQL-a znajomość SQLite
  • z Postscriptu umiejętność konstruowania plików PDF
  I nagle, niespodziewanie, okazało się, że to wszystko bardzo się przydaje w pracy z Androidem. Czegokolwiek dotknę, wygląda znajomo. Muszę przyznać, że to bardzo miłe uczucie.
Programować każdy może
  Z drugiej strony, nie trzeba żadnych nadzwyczajnych talentów aby zacząć pisać pod Androida. Wystarczy komputer PC, środowisko programistyczne Eclipse, androidowe SDK i już można uruchomić swój pierwszy "Hello world". Nawet nie trzeba go konstruować od zera, bo w komplecie z narzędziami dostajemy gotowe, działające, przykładowe projekty - pozostaje je tylko obejrzeć i zrozumieć. Potem, tworząc bardziej zaawansowane aplikacje, najwygodniej jest modyfikować, rozbudowywać te poprzednie.
Taką właśnie metodą powstały programy
  • Dobry numer
  • Firemka LITE
  • Firemka OTG
  • Insomnia
  • SmartWOL
  • Piąty element
  • Wołami
Certyfikat, wielka mi rzecz...
  Po półtorarocznej praktycznej znajomości z językiem na potrzeby aplikacji pod Androida, głównie na podstawie materiałów dostępnych w sieci, załapałem się na dwutygodniowy kurs finansowany (w tym także egzamin) ze środków unijnych, zorganizowany przez firmę Altkom. Trzeba oczywiście spełniać określone kryteria, lecz tak się szczęśliwie złożyło, że pasują one do mnie jak ulał. Niestety, przypuszczalny możliwy wynik egzaminu po takim kursie oceniam na jakieś 35% (gdy do zaliczenia wymagane jest co najmniej 61%). Trudno to nazwać dobrym wykorzystaniem unijnych funduszy.
  Dalsze, samodzielne przygotowanie oparłem głównie na podręczniku Sierra & Bates SCJP Sun® Certified Programmer for Java™ 6 Study Guide (Exam 310-065). Rzetelne przeczytanie, zrozumienie książki i wykonanie wszystkich testów zajęło mi 2 tygodnie (wliczając weekendy) w czasie bezpośrednio poprzedzającym egzamin. Było to bardzo stresujące doświadczenie, bo wyniki testów oscylowały w okolicach 50%. Po każdym teście bardzo szczegółowo analizowałem swoje błędy i przyczyny ich popełnienia. Ponieważ nie korzystałem praktycznie z żadnych innych pomocy, mogę z czystym sumieniem polecić tę książkę jako wystarczającą do zaliczenia egzaminu (dla osób znających podstawy języka). Dodam, że nie skorzystałem z dołączonej płyty - po prostu brakło mi czasu.
  Zgłębianiu treści podręcznika cały czas towarzyszyło środowisko Eclipse z testowym projektem, gdzie sprawdzałem natychmiast wszelkie wątpliwości i niejasności. W kilku przypadkach zdobywana wiedza stała się impulsem do dokonania korzystnych zmian w swoich wcześniej napisanych aplikacjach. Takim pokusom poddawałem się bez oporu, bo stanowiły miłe urozmaicenie i przeciwwagę dla monotonnego "wkuwania". Szacuję, że z tych 2 tygodni 1 dzień został wykorzystany na takie właśnie spontaniczne i radosne prace.
  Ostatniego wieczoru strzeliłem sobie "mocka" ze strony http://scjptest.com/, który niespodziewanie pokazał rezultat 75%, co znacznie poprawiło mi mocno nadszarpniętą wiarę we własne możliwości. Potem porządnie się wyspałem i po oszczędnym śniadaniu ruszyłem dziarsko do boju.
  Co do samego egzaminu, okazał się dużo łatwiejszy od pytań w książce i dał wynik 86%, czyli dość zbliżony do tego, na ile sam oceniałem stopień własnego przygotowania. Czułem, że parę tematów należało jeszcze powtórzyć i utrwalić i gdybym wygospodarował dodatkowy tydzień, spokojnie podniósłbym swój wynik o jakieś 10%.
  Wbrew zapowiedziom nie odebrano nam telefonów komórkowych, aczkolwiek swój uczciwie wyłączyłem. Doradzam opróżnienie pęcherza bezpośrednio przed egzaminem, bo nie wiem jak u kogo, ale u mnie stres zawsze się przekłada na wzmożoną pracę nerek ;-) Przydała się mała butelka mineralnej dla lekkiego nawodnienia organizmu w połowie zmagań. Nie miałem też oporów przed poproszeniem o spokój opiekunów, którzy wdali się w pewnym momencie w swobodną pogawędkę. Należy znać swoje prawa i egzekwować je, bo potem nikt nam nie odda straconych punktów.
  Wykorzystałem cały dostępny czas. Nie pomijałem żadnego pytania, ale gdy nie byłem całkowicie pewien odpowiedzi, zaznaczałem pytanie do powtórnego przejrzenia. Na koniec uzbierało się ok. 20 takich pytań. W pozostałym do końca czasie spokojnie je przeanalizowałem jeszcze raz. Jednak w żadnym przypadku nie zmieniłem wcześniej zaznaczonej odpowiedzi.
  Po całym tym doświadczeniu nie czuję się w żaden istotny sposób "lepszym programistą". Mógłbym być co najwyżej "lepszym kompilatorem" gdyby ktoś mnie zatrudnił w charakterze kompilatora. Na szczęście tę nudną funkcję wykonują za nas maszyny. Lecz ponieważ to nie ja ustalam reguły rządzące tym światem, ktoś postanowił, że taki certyfikat ważną rzeczą jest. No to go mam.