Pierwsza praca
Pierwsza praca to istne przetarcie szlaków i zapoznanie się z “prawdziwymi problemami na produkcji”. Dużą część stanowi współpraca z innymi programistami nad tym samym kodem, rozwijaniem aplikacji, dodawaniem nowych funkcjonalności i rozwiązywaniem bug’ów, które pojawiają się na produkcji. Te i wiele innych doświadczeń są szczególnie ekscytujące na pierwszym stanowisku w karierze developera.
Swoją pierwszą pracę jako “Stock Exchange Developer” zacząłem podczas ostatniego semestru na studiach, o czym pisałem tutaj. Trochę dziwna nazwa, nigdy z taką się nie spotkałem, jakby nie można było tego stanowiska nazwać po prostu “Java Developer” ale jakby nie patrzeć brzmiało dumnie! :P Była to niewielka firma, na tamten czas liczącą 5 programistów razem z Szefem. Pierwsze stanowisko pracy wyglądało tak: biurko stojące w rogu, przy oknie z widokiem na plac pełen zieleni i parking. Zestaw roboczy - dwa monitory, stacja, klawiatura, myszka i “rakietowy serwer”, dlaczego rakietowy? Ponieważ kilka razy dziennie, kiedy ktoś z niego cokolwiek pobierał “rozpędzał” się i było słychać, że działa :) Jako system operacyjny - pierwsza styczność z systemem MacOS. Tylko jak MacOS na zwykłej stacji?! Wtedy dowiedziałem się co to “hackintosh” - to taki zestaw, który był zgodny z wymaganiami MacOS i można było uruchomić na nim ten system operacyjny ;)
Codziennie mieliśmy “stand-up’y”, czyli szybkie, kilkuminutowe zebrania na środku naszego “biura”, w którym osoba trzymająca przedmiot mówiła “1. co zrobiła wczoraj 2. z czym ma problemy 3. co planuje zrobić dziś”. Przedmioty się zmieniały, długo wytrwała piłka, którą przywiozłem jako pamiątka z nad naszego, pięknego morza, jednak najdłużej wytrwała ciupaga, którą przywiozłem z gór ;) To też było ciekawym doświadczeniem, uczyliśmy się podsumowywać swoją pracę, określać problemy i często pomagać/podpowiadać innym, jeżeli słyszeliśmy, że ma podobnym problem z którym my mieliśmy już kiedyś do czynienia.
Pierwszy projekt - Aplikacja giełdowa. Pamiętam tą ekscytację i jednocześnie strach z myślą “kiedy przyjdzie mi tworzyć funkcjonalność, która odpowiada za zarobek lub stratę klienta”, coś pięknego! Projekt bazowo w Javie w wersji 6, do tego jako część wizualna (User Interface) - Swing. Była to aplikacja desktopowa, czyli uruchamiana lokalnie na maszynie. Co ciekawe, programowaliśmy i testowaliśmy na wspomniamym MacOS, a klient korzystał z aplikacji na systemach Windows :) Z perspektywy czasu jakbym miał określić czy to było dobre czy złe określił bym to podejście zdecydowanie za złe, ponieważ niesie to za sobą spore ryzyko pojawienia się problemów związanych z systemem operacyjny, których nie wykryliśmy u siebie (z całym szacunkiem dla przenośności Javy). Mimo wszystko miało to swoje plusy! Wymagało trochę więcej myślenia! Przykład? Jeżel stosowaliśmy GWT w celu stworzenia własnej przeglądatki internetowej, musieliśmy pomyśleć o tym, że osobna biblioteka jest pod Windowsa i pod MacOS! Mało tego, byliśmy przygotowani również pod Linuxa! Także niosło to za sobą ciekawe doświadczenia :) Dodatkowo pojawiła się odrobina styczności z HTML, CSS i JavaScriptem. Wtedy poznałem ciekawe możliwości przechwytywania danych z przeglądarki oraz zawartości strony i jej elementów DOM(Document Object Model), czyli w dużym skrócie elementów strony i dostęp do nich, jak do obiektów. W ten magiczny sposób pozyskiwaliśmy dane live a giełd, które nie udostępniały publicznie swojego API. Czy było to dobre rozwiązanie? W momencie, kiedy tworzyliśmy moduł do zbierania danych z różnych giełd - owszem tak, ponieważ lepsze takie dane, niż żadne ;) Powstał też moduł, który uczył się na podstawie zebranych danych, jednak nie miałem z nim styczności, ponieważ zajmowałem się innymi modułami, zapewniającymi automatyzację. Był to swoisty pół automat do grania na giełdzie. Największe wrażenie zrobiło na mnie jak odwiedziłem klienta w siedzibie i zobaczyłem istne centrum dowodzenia, w którym było kilka stanowisk, każde z nich miało po 6 monitorów jeden obok drugiego i na większośći z nich aplikacja, którą rozwijałem, nie zapomnę tego do końca życia :) Miałem bezpośredni kontakt z klientem i w zasadzie po pewnym czasie sam byłem odpowiedzialny za szczegóły, baaang! Kolejne ciekawe doświadczenie, gdzie nie tylko poza samym programowaniem masz realnym wpływ na to, co i jak zostanie wdrożone.
Nie obyło się również bez problemów na produkcji ;) W większości przypadków wystarczały logi, jednak czasami dochodziło do takich sytuacji, kiedy nawet logi nie dawały jasnego obrazu sytuacji. Dopiero wnikliwe analizy z klientem, step-by-step, pozwalały zdiagnozować źródło bug’a. Klient na szczęście miał siedzibę w tym samym mieście w którym pracowałem, więc obyło się bez dalszych podróży. Co najmniej raz na dwa tygodnie pojawiałem się u klienta, w celu podsumowania dwu-tygodniowego sprintu i omówienia tego, co zostało zrobione i zaplanowania tego, co jest do zrobienia i czy jest realne do wdrożenia przez czas kolejnego sprintu.
Dotarliśmy również do momentu, gdzie pomysły u klienta były wyciągane niczym asy z rękawa i niestety nie było możliwości by mnie sklonować, więc zorganizowaliśmy nabór na nowego członka zespołu. Brałem udział w rozmowach kwalifikacyjnych ale już z drugiej strony stołu, jako osoba, która weryfikowała towarzysza do współpracy. Baaang! Kolejne świetne doświadcznie, które daje poznać temat z drugiej strony. Pamiętam, jak przygotowywałem listę pytań, które moim zdaniem były niezbędne do pracy na tym projekcie, dotyczyły głównie technologii, komunikacji oraz sprawdzały wiedzę ogólną ze świata Javy. Pamiętam, jak zwracałem uwagę na fakt, czy osoba jest komunikatywna, ponieważ nie ukrywam, że nie chciałbym pracować z osobą, która lekceważąco podchodzi do rozmowy (a był taki gość, który rozsiadł się na fotelu, ba, wręcz rozłożył i wyglądał jakby trafił tam z przypadku). Finalnie wybraliśmy jedną osobę spośród kilku kandydatów i dostałem kolejne extra obowiązki - wprowadzenie, prowadzenie i wsparcie dla nowego członka zespołu! Baaang! Kolejne doświadczenie w zarządzaniu zespołem i zadaniami. Jak patrzę na to teraz z perspektywy czasu, to w przeciągu około 2-3 lat, z poziomu Junior Developer miałem do czynienia z wieloma kwestiami, którymi nie powstydził by się Senior Developer!
Bylo wiele sukcesów i naprawdę ciekawych rozwiązań. Jednym z tych, z których jestem najbardziej dumny było przyśpieszenie procesu wykonywania kliknięcia. Mieliśmy moduł, który początkowo był zaimplementowany na zasadzie “przenieś mysz tam i klinij”, odkryłem, że cały proces od momentu zlecenia do wykonania zajmował około 400-500ms. Na giełdzie duże znaczenie mają dziesiątki milisekund, a co dopiero setki! Dlatego wdrożyłem rozwiązanie, które zmniejszyło ten czas do 0ms! Tak, do zera! Zamiast korzystać z klasycznego RobotHelper’a i przenosić myszkę w odpowiednie miejsce na naszej przeglądarce GWT, wyciągałem odpowiedni przycisk (jako obiekt DOM) z strony i przekazywałem referencje do kodu Javy. Następnie w momencie zlecenia operacji wywoływałem na tym elemencie event kliknięcia (fire click event) i vuala! W ten magiczny sposób kliknięcie wykonywane było instant z pominięciem wątku graficznego (który wykonanie zajmowało setki milisekud!). Baaang! Kolejne świetne doświadczenie!
Pracowałem w tej firmie przez 3 lata. Mnóstwo ciekawych doświadczeń, wiedzy, rozwiązanych problemów i wdrożonych oraz ulepszonych modułów. Przez ten czas wręcz zakorzeniłem się w tej firmie, świetny kontakt z klientem, brak konfliktów. Pracując w tej firmie było wiele nieformalnych awansów (o których wspomniałem wyżej) zapewniających nowe doświadczenia i nie obyło się również bez podwyżek, było ich przez ten czas aż 5! Z czego również bardzo się cieszę, każda następna była następstwem nowych obowiązków i progresu. Niestety pracując przez tak długi okres na jednym projekcie ciężko szukać stałego progresu i rozwoju, doszło więc do stagnacji i praca zaczęła mnie najzwyczajniej męczyć - było nudno, ciągle to samo. Czy to długo? Z perspektywy czasu uważam, że tak, zdecydowanie za długo w jednym miejscu. Jeżeli czytasz to i jesteś na początku swojej kariery, polecił bym zmieniać miejsce pracy odrobinę wcześniej i częśćiej, pracując stabilnie co najmniej rok w jednym miejscu. Nowe miejsce to nowi ludzie, nowe projekty, nowe technologie, a co za tym idzie rózwój i nowe możliwości! A to jest najważniejsze w pracy programisty! Tutaj niestety nie ma czegoś takiego, że raz się nauczyć i do końca życia tylko tak będziesz pisał, stale wychodzą nowe wersje, nowe technologie, nowe koncepty i rozwiązania, za którymi często nie jesteśmy nawet w stanie nadążyć, ponieważ siedzimy na “utrzymaniu” projekty w przed epokowej technologii.
To by było na tyle, w takim “telegraficznym” skrócie z pierwszej pracy ;) Jezeli dotrwałeś do końca i nie ziewnąłeś ine razu - szanuję i zapraszam do dalszej lektury lub w razie poczucia potrzeby podzielenia się wrażeniami - do kontaktu! ;)