Na początek ktoś z blogowego podwórka, czyli Kuba współtworzący tego bloga. Kuba programuje od podstawówki (!). Z naszej rozmowy dowiecie się miedzy innymi, co kupić dziecku pod choinkę, by zaczęło programować, jak to jest pracować w międzynarodowym projekcie i dlaczego, nie ma sensu wpisywać w google: najlepszy język programowania. Gotowe? To zaczynamy ;)
Cykl #kulisy branży IT to seria wywiadów z ludźmi pracującymi w IT. Chcemy pokazać jak szerokie możliwości daje ten sektor, jak różna potrafi być praca i zadania i wyzwania spotykane na co dzień, a przede wszystkim ile satysfakcji może dać praca! To wszystko po to, by zachęcić Cię do spróbowania siebie właśnie w tej branży.
Kuba, pracujesz na stanowisku Starszego Programisty Javy. Co należy do Twoich obowiązków?
Przede wszystkim rozwijanie projektu zgodnie z dokumentacją. W tym mieści się zarówno pisanie nowych funkcjonalności, sprawdzanie istniejącego kodu (tzw. code review) oraz tworzenie i utrzymywanie (ponieważ dokumentacja jest też aktualizowana w trakcie projektu) automatycznych testów.Dodatkowo uczestniczę w projektowaniu poszczególnych elementów np. proponując rozwiązania techniczne lub komentując zaproponowane rozwiązania.
W ramach obowiązków starszego programisty zajmuję się też wdrażaniem w projekt nowych osób, utrzymywaniem dokumentacji ‘okołoprojektowej’ (krótkie tutoriale, tech note’y, odniesienia służące temu, aby ktoś inny mógł po nas przejąć prace nad konkretnym modułem / elementem) oraz integracją (zapewnieniem, że tworzone w naszym zespole komponenty współdziałają z innymi i sa zgodne z ustalonymi kontraktami — czyli formalnym sposobem wymiany informacji pomiędzy modułami). Do tego oczywiście ‘gaszenie pożarów’, ale tego w umowie czy ofercie pracy nie znajdziecie ;)
Jak wyglądał początek Twojej kariery, jak się ona potem rozwijała?
Zaczęło się dość dawno temu, okolice szkoły podstawowej/gimnazjum, kiedy gry uruchamiane na pierwszym komputerze zaczęły mnie intrygować ‘a jak by to było napisać coś takiego samodzielnie?’. Oczywiście pierwszym programem nie była gra, a prosta baza danych (dane były wpisane na sztywno w kod programu) dot. jakiejś gry. Później pod choinką znalazłem serię ‘Symfonia C++’ i jakoś tak się potoczyło…
Jeśli chodzi o samą karierę zawodową, moja pierwsza praca ‘komercyjna’ to była praktyka w dziale testowania oprogramowania. W pierwszych dniach napisałem prostą aplikację — wtedy jeszcze w języku PHP — która usprawniała nam codzinną pracę w zespole. Dzięki temu przeniesiono mnie do działu automatyzacji testów, w ciągu weekendu mniej więcej poznałem składnię VB i do końca praktyki programowałem w tym języku. Jednocześnie poznałem wtedy kilka pierwszych osób z branży, z którymi po zakończeniu praktyki nawiązałem współpracę przy ich projektach.
To zapoczątkowało etap freelancingu w mojej karierze, kiedy to uczyłem się i realizowałem pojedyncze zlecenia z każdym projektem ucząc się nowych rzeczy. Zacząłem systematyzować swoją wiedzę, zrobiłem pierwszy certyfikat (z PHP), zacząłem przygotowywać sie do certyfikacji z Javy i jednoczesnie powiększać firmę. Ostatecznie doszedłem do momentu kiedy uznałem, że nie jestem w stanie sam się dalej rozwijać pracując tylko we własnej firmie z uwagi na ograniczoną wielość projektów, dostęp do wiedzy itp., co spowodowało że odsprzedałem udziały wspólnikowi i rozejrzałem się za pracą w większej organizacji, gdzie pracuję i uczę się obecnie :)
W międzyczasie oczywiście rozwijałem się na tyle, na ile było to możliwe, zrobiłem pełną ścieżkę certyfikacji z Javy, zacząłem przygotowania do certyfikacji z TOGAFa. Zdarzało mi się także organizować szkolenia z Javy dla studentów, czy prowadzić projekty badawcze na uczelni w tym zakresie.
W skrócie — programowanie odkąd je poznałem zawsze było moją pasją, dzięki czemu praca i zdobywanie nowych kompetencji jest dla mnie prawdziwą przyjemnością a nie obowiązkiem :)
Co jest potrzebne żeby móc pracować jako programista?
Jeśli chodzi o rolę developera to głównym elementem który jest potrzebny to chęć nauki i opanowanie pewnych podstaw (bardziej chodzi o koncepcje programowania). Pogląd że np. tylko na studiach zdobędziemy potrzebną wiedzę jest tak błędny, co szkodliwy (osobiście z przykrością musze powiedzieć że studia nie dały mi żadnej wiedzy praktycznej, którą wykorzystuje na co dzień).Obecnie oceniam swoją wiedzę na 10–15% ‘technologii Javy’ i uważam, że to poziom bardzo wysoki. To, czego oczekują pracodawcy, to nie znajomość wszystkiego ‘na blachę’, a umiejętnosć poznawania nowych rzeczy, pracy z nowymi technologiami/narzędziami korzystając z ich dokumentacji.Do tego potrzebne jest jedynie pozytywne nastawienie, znajomość podstaw (żargonu, żeby wiedzieć o czym czytamy) i trochę czasu :)
W przypadku developerów (powiedzmy powyżej roli juniora) przydaje się umiejętność analitycznego myślenia, ponieważ w miarę zdobywania wiedzy praktycznej z różnych obszarów, coraz częściej będziesz proszona o pomoc przy planowaniu i projektowaniu pewnych rozwiązań, a zadania które będziesz otrzymywać będą bardziej samodzielne (tzn. będą zawierały bardziej opisy od strony ‘funkcjonalnej’ pozostawiając Tobie rozpracowanie tego, jak to zrealizować z użyciem technologii dostepnych w projekcie).
Jeśli chodzi o role seniorskie w przypadku developerów przydają się choćby podstawowe umiejętności miękkie — bardzo często przyjdzie nam przekazywać wiedzę lub opracowywać ją dla ‘potomnych’, umiejętność formułowania prostych i klarownych zdań, efektywnej komunikacji staje się ważna.
Co jest najważniejsze w kwestii własnego rozwoju w roli, jaką pełnisz?
Dość ważna jest specjalizacja i ogólne rozeznanie. Choć brzmi to rochę jak paradoks, chodzi o to, żeby mieć wiedzę w okreslonej technologii (np. Java w moim wypadku) z powodów czysto praktycznych — mając duże doświadczenie z wąską grupą technologii (np. jeden język i kilka popularnych frameworków i technologii) będziesz mogła z jednej strony dzielić się tą wiedzą z osobami mniej doświadczonymi, z drugiej strony w projektach nie będziesz musiała poświęcać czasu na poznawanie podstaw, a jedynie na uczenie się tylko tych technologii, które są nowe albo nie często spotykane.
Ogólne rozeznanie, z kolei jest ważne ponieważ wraz z wrastającym doświadczeniem będziesz proszona coraz częściej o wybór technologii lub doradzenie jak można rozwiązać okreslony problem.W tym kontekście ważne jest, żeby wiedzieć jakie są alternatywy oraz być świadomym, gdzie znaleźć i jak rozumieć informacje o nich, żeby dokonać świadomego wyboru.
Oczywiście nikt nie oczekuje że będziesz znała wszystkie dostępne technologie, ale znajomość standardów (choćby do czego są używane i jak nazywają się biblioteki, które je implementują) jest konieczna na dalszych etapach kariery.
Jak wygląda dzień z Twojej pracy? Z jakimi wyzwaniami zmagasz się w swojej pracy?
Słowem wstępu pracuję obecnie w dużej firmie z branży IT, która realizuje międzynarodowe projekty.
Dzień pracy zaczynam od sprawdzenia skrzynki pocztowej, na którą od poprzedniego dnia mogły trafić zarówno nowe zadania, uwagi od innych programistów (efekt tzw. code review), ale też raporty z automatycznych systemów (np. informacja, że coś się zepsuło, spadła jakość liczona wg jakiegoś parametru itp). Jesli jest taka potrzeba, podejmuje odpowiednie działania (np. poprawiam błąd, który wyszedł lub przygotowuje jakiś raport/notatkę). Następnie podejmuję pracę tam gdzie skończyłem ją poprzedniego dnia — albo kontynuując prace nad zadaniem (staram się tego nie robić, a raczej kończyć zadania w ramach dnia, choć nie zawsze jest to możliwe) albo podejmując się nowego zadania z listy planowanych na bieżący etap.
Przed południem mamy spotkanie zespołu — telekonferencje (zespół pracuje w 3 różnych państwach) — tzw. Stand Up (to z metodyki SCRUM), podczas którego każdy krótko mówi o tym, co udało mu się zrobić, co planuje robić tego dnia oraz ew jakie napotkał problemy. Pozostała część dnia to w większości praca nad zadaniami, czasem zdarzają się sytuacje w których przełączam się na inne zadanie które jest np. pilnie potrzebne lub pomagam komuś z ich zadaniem czy też robię tzw. refactoring — poprawę ogólnej jakości kodu. Przed końcem dnia weryfikuje czy wszystie prace zostały zaraportowane w systemie oraz czy coś nie wymaga pilnej uwagi jeszcze tego dnia.
Jeśli chodzi o wyzwania są one różnego rodzaju, głównie zdarzają się problemy techniczne — przykładowo błąd który ‘chował się’ przez jakiś czas (np. jakaś niekluczowa informacja nie była zapisywana i nikt nie zauważył tego wcześniej) czy też zmiany w innym module wpłynęły na nasz i trzeba jak najszybciej się dostosowac do tych zmian (to w sumie najczęstsze problemy). Często poprawiając coś powodujemy falę mniejszych problemów (kliknij — mantra programistów ;) ) lub odkrywamy kod złej jakości który należy przepisać.
Dużym wyzwaniem jest też sama praca w miedzynarodowym zespole — najmniejszy z problemów to różnice stref czasowych (u nas największa różnica to 5h), do tego dochodzą aspekty kulturalne, temperament osób w projekcie oraz niestety czasami także problemy z kompetencjami niektórych osób (na szczęście firmy starają się same dbać o to, żeby zatrudniać osoby kompetentne lub przydzielać zadania które nie przewyższają kompetencji danej osoby). Wiadomo — im większy projekt tym więcej poziomów skomplikowania więc do tego często dochodzi koordynacja działań wielu osób.
Ogólnie to zawsze jest coś, co możnaby poprawić, ulepszyć, tylko brakuje czasu — stąd radzenie sobie z frustracjami dnia codziennego też bywa wyzwaniem (ale nie przesadzajmy, nie jest źle, po prostu każda praca wiąże się z jakimiś stresami).
Jaką radę dałbyś/dałabyś osobie która zaczyna karierę w IT?
Nie przejmuj się zdaniem innych w kwestii technologii — w IT stosunkowo silne są osobiste preferencje ;) Programista .NET bedzie Cię przekonywał, że jego technologia jest najlepsza, a przecież wiadomo, że to Java rządzi ( to żart oczywiście ;) każda z nich ma swoje wady i zalety ) — w programowaniu najważniejsze żebyś Ty się dobrze czuła z używaną technologią, żeby poszerzanie swojej wiedzy było dla Ciebie przyjemnością a nie udręką. Rynek pracy jest tak szeroki, że w dowolnej technologii można znaleźć zatrudnienie, a co może być lepszego od pracy która jest dla nas prawdziwą przyjemnością.
Druga rzecz to nie zrażaj się i nie ucz się ‘na siłę’. Zaczynając naukę dość szybko zdasz sobie sprawę, że ilość standardów, technologii, narzędzi jest ogromna, wręcz przytłaczająca. Pamiętaj o tym, że to nie znaczy że musisz je poznać czy nawet wiedzieć o nich — jak wspomniałem wcześniej swoją wiedzę z zakresu ‘całej Javy’ oceniam na 10–15%. I uważam to za wysoki wynik. Po prostu są eksperci specjalizujący się w innych dziedzinach i kluczem do sukcesu jest współpraca takich osób.
Wywiadu udzielił Jakub Derda, Starszy Programista Java, Współautor www.kobietydokodu.pl
Wielkie dzięki za miłą rozmowę!
Jeśli chcesz zadać Kubie pytanie — po prostu skomentuj ten wpis. W celu kontaktu bezpośredniego pisz na [email protected]
Cykl kulisy branży IT szuka bohaterów. Dziękujemy serdecznie za wszystkie dotychczasowe historie i wywiady! Chcesz podzielić się swoją historią i opowiedzieć o swoim zawodzie? Napisz do nas i pomóż nam przedstawić szerokie perspektywy pracy w IT.