#Kulisy branży IT. Starszy programista Java

By 17 October 2014 December 16th, 2014 Kulisy branży, Ludzie IT

Na początek ktoś z blo­gowego pod­wór­ka, czyli Kuba współt­worzą­cy tego blo­ga. Kuba pro­gra­mu­je od pod­stawów­ki (!). Z naszej roz­mowy dowiecie się miedzy inny­mi, co kupić dziecku pod choinkę, by zaczęło pro­gramować, jak to jest pra­cow­ać w między­nar­o­dowym pro­jek­cie i dlaczego, nie ma sen­su wpisy­wać w google: najlep­szy język pro­gramowa­nia. Gotowe? To zaczynamy ;)

 Cykl #kulisy branży IT to seria wywiadów z ludź­mi pracu­ją­cy­mi w IT. Chce­my pokazać jak sze­rok­ie możli­woś­ci daje ten sek­tor, jak róż­na potrafi być pra­ca i zada­nia i wyzwa­nia spo­tykane na co dzień, a przede wszys­tkim ile satys­fakcji może dać pra­ca! To wszys­tko po to, by zachę­cić Cię do spróbowa­nia siebie właśnie w tej branży.

Kuba, pracujesz na stanowisku Starszego Programisty Javy. Co należy do Twoich obowiązków?

Przede wszys­tkim rozwi­janie pro­jek­tu zgod­nie z doku­men­tacją. W tym mieś­ci się zarówno pisanie nowych funkcjon­al­noś­ci, sprawdzanie ist­niejącego kodu (tzw. code review) oraz tworze­nie i utrzymy­wanie (ponieważ doku­men­tac­ja jest też aktu­al­i­zowana w trak­cie pro­jek­tu) automaty­cznych testów.Dodatkowo uczest­niczę w pro­jek­towa­niu poszczegól­nych ele­men­tów np. pro­ponu­jąc rozwiąza­nia tech­niczne lub komen­tu­jąc zapro­ponowane rozwiązania.

W ramach obow­iązków starszego pro­gramisty zaj­mu­ję się też wdrażaniem w pro­jekt nowych osób, utrzymy­waniem doku­men­tacji ‘około­pro­jek­towej’ (krótkie tuto­ri­ale, tech note’y, odniesienia służące temu, aby ktoś inny mógł po nas prze­jąć prace nad konkret­nym mod­ułem / ele­mentem) oraz inte­gracją (zapewnie­niem, że twor­zone w naszym zes­pole kom­po­nen­ty współdzi­ała­ją z inny­mi i sa zgodne z ustalony­mi kon­trak­ta­mi — czyli for­mal­nym sposobem wymi­any infor­ma­cji pomiędzy mod­uła­mi). Do tego oczy­wiś­cie ‘gasze­nie pożarów’, ale tego w umowie czy ofer­cie pra­cy nie znajdziecie ;)

Jak wyglądał początek Twojej kariery, jak się ona potem rozwijała?

Zaczęło się dość dawno temu, oko­lice szkoły podstawowej/gimnazjum, kiedy gry uruchami­ane na pier­wszym kom­put­erze zaczęły mnie intry­gować ‘a jak by to było napisać coś takiego samodziel­nie?’. Oczy­wiś­cie pier­wszym pro­gramem nie była gra, a pros­ta baza danych (dane były wpisane na szty­wno w kod pro­gra­mu) dot. jakiejś gry. Później pod choinką znalazłem ser­ię ‘Sym­fo­nia C++’ i jakoś tak się potoczyło…

Jeśli chodzi o samą kari­erę zawodową, moja pier­wsza pra­ca ‘komer­cyj­na’ to była prak­ty­ka w dziale testowa­nia opro­gramowa­nia. W pier­wszych dni­ach napisałem prostą aplikację — wtedy jeszcze w języku PHP — która uspraw­ni­ała nam codzin­ną pracę w zes­pole. Dzię­ki temu prze­nie­siono mnie do dzi­ału automatyza­cji testów, w ciągu week­endu mniej więcej poz­nałem skład­nię VB i do koń­ca prak­ty­ki pro­gramowałem w tym języku. Jed­nocześnie poz­nałem wtedy kil­ka pier­wszych osób z branży, z który­mi po zakończe­niu prak­ty­ki naw­iąza­łem współpracę przy ich projektach.

To zapoc­zątkowało etap free­lancin­gu w mojej kari­erze, kiedy to uczyłem się i real­i­zowałem poje­dyncze zlece­nia z każdym pro­jek­tem ucząc się nowych rzeczy. Zacząłem sys­tem­aty­zować swo­ją wiedzę, zro­biłem pier­wszy cer­ty­fikat (z PHP), zacząłem przy­go­towywać sie do cer­ty­fikacji z Javy i jed­noczes­nie pow­ięk­szać fir­mę. Ostate­cznie doszedłem do momen­tu kiedy uznałem, że nie jestem w stanie sam się dalej rozwi­jać pracu­jąc tylko we włas­nej fir­mie z uwa­gi na ogranic­zoną wielość pro­jek­tów, dostęp do wiedzy itp., co spowodowało że odsprzedałem udzi­ały wspól­nikowi i roze­jrza­łem się za pracą w więk­szej orga­ni­za­cji, gdzie pracu­ję i uczę się obecnie :)

W między­cza­sie oczy­wiś­cie rozwi­jałem się na tyle, na ile było to możli­we, zro­biłem pełną ścieżkę cer­ty­fikacji z Javy, zacząłem przy­go­towa­nia do cer­ty­fikacji z TOGAFa. Zdarza­ło mi się także orga­ni­zować szkole­nia z Javy dla stu­den­tów, czy prowadz­ić pro­jek­ty badaw­cze na uczel­ni w tym zakresie.

W skró­cie — pro­gramowanie odkąd je poz­nałem zawsze było moją pasją, dzię­ki czemu pra­ca i zdoby­wanie nowych kom­pe­tencji jest dla mnie prawdzi­wą przy­jem­noś­cią a nie obowiązkiem :)

Co jest potrzebne żeby móc pracować jako programista?

Jeśli chodzi o rolę devel­opera to głównym ele­mentem który jest potrzeb­ny to chęć nau­ki i opanowanie pewnych pod­staw (bardziej chodzi o kon­cepc­je pro­gramowa­nia). Pogląd że np. tylko na stu­di­ach zdobędziemy potrzeb­ną wiedzę jest tak błęd­ny, co szkodli­wy (oso­biś­cie z przykroś­cią musze powiedzieć że stu­dia nie dały mi żad­nej wiedzy prak­ty­cznej, którą wyko­rzys­tu­je na co dzień).Obecnie oce­ni­am swo­ją wiedzę na 10–15% ‘tech­nologii Javy’ i uważam, że to poziom bard­zo wyso­ki. To, czego oczeku­ją pra­co­daw­cy, to nie zna­jo­mość wszys­tkiego ‘na blachę’, a umiejęt­nosć poz­nawa­nia nowych rzeczy, pra­cy z nowy­mi technologiami/narzędziami korzys­ta­jąc z ich dokumentacji.Do tego potrzeb­ne jest jedynie pozy­ty­wne nastaw­ie­nie, zna­jo­mość pod­staw (żar­gonu, żeby wiedzieć o czym czy­tamy) i trochę czasu :)

W przy­pad­ku devel­op­erów (powiedzmy powyżej roli junio­ra) przy­da­je się umiejęt­ność anal­i­ty­cznego myśle­nia, ponieważ w miarę zdoby­wa­nia wiedzy prak­ty­cznej z różnych obszarów, coraz częś­ciej będziesz pros­zona o pomoc przy planowa­niu i pro­jek­towa­niu pewnych rozwiązań, a zada­nia które będziesz otrzymy­wać będą bardziej samodzielne (tzn. będą zaw­ier­ały bardziej opisy od strony ‘funkcjon­al­nej’ pozostaw­ia­jąc Tobie rozpra­cow­anie tego, jak to zre­al­i­zować z uży­ciem tech­nologii dostep­nych w projekcie).

Jeśli chodzi o role seniorskie w przy­pad­ku devel­op­erów przy­da­ją się choć­by pod­sta­wowe umiejęt­noś­ci miękkie — bard­zo częs­to przyjdzie nam przekazy­wać wiedzę lub opra­cowywać ją dla ‘potom­nych’, umiejęt­ność for­mułowa­nia prostych i klarownych zdań, efek­ty­wnej komu­nikacji sta­je się ważna.

Co jest najważniejsze w kwestii własnego rozwoju w roli, jaką pełnisz?

Dość waż­na jest spec­jal­iza­c­ja i ogólne rozez­nanie. Choć brz­mi to rochę jak paradoks, chodzi o to, żeby mieć wiedzę w okres­lonej tech­nologii (np. Java w moim wypad­ku) z powodów czys­to prak­ty­cznych — mając duże doświad­cze­nie z wąską grupą tech­nologii (np. jeden język i kil­ka pop­u­larnych frame­worków i tech­nologii) będziesz mogła z jed­nej strony dzielić się tą wiedzą z osoba­mi mniej doświad­c­zony­mi, z drugiej strony w pro­jek­tach nie będziesz musi­ała poświę­cać cza­su na poz­nawanie pod­staw, a jedynie na ucze­nie się tylko tych tech­nologii, które są nowe albo nie częs­to spotykane.

Ogólne rozez­nanie, z kolei jest ważne ponieważ wraz z wras­ta­ją­cym doświad­cze­niem będziesz pros­zona coraz częś­ciej o wybór tech­nologii lub doradze­nie jak moż­na rozwiązać okres­lony problem.W tym kon­tekś­cie ważne jest, żeby wiedzieć jakie są alter­naty­wy oraz być świadomym, gdzie znaleźć i jak rozu­mieć infor­ma­c­je o nich, żeby dokon­ać świadomego wyboru.

Oczy­wiś­cie nikt nie oczeku­je że będziesz znała wszys­tkie dostęp­ne tech­nolo­gie, ale zna­jo­mość stan­dard­ów (choć­by do czego są uży­wane i jak nazy­wa­ją się bib­liote­ki, które je imple­men­tu­ją) jest koniecz­na na dal­szych eta­pach kariery.

Jak wygląda dzień z Twojej pracy? Z jakimi wyzwaniami zmagasz się w swojej pracy?

Słowem wstępu pracu­ję obec­nie w dużej fir­mie z branży IT, która real­izu­je między­nar­o­dowe projekty.
Dzień pra­cy zaczy­nam od sprawdzenia skrzyn­ki pocz­towej, na którą od poprzed­niego dnia mogły trafić zarówno nowe zada­nia, uwa­gi od innych pro­gramistów (efekt tzw. code review), ale też raporty z automaty­cznych sys­temów (np. infor­ma­c­ja, że coś się zep­suło, spadła jakość lic­zona wg jakiegoś para­metru itp). Jes­li jest taka potrze­ba, pode­j­mu­je odpowied­nie dzi­ała­nia (np. popraw­iam błąd, który wyszedł lub przy­go­towu­je jak­iś raport/notatkę). Następ­nie pode­j­mu­ję pracę tam gdzie skończyłem ją poprzed­niego dnia — albo kon­tynu­u­jąc prace nad zadaniem (staram się tego nie robić, a raczej kończyć zada­nia w ramach dnia, choć nie zawsze jest to możli­we) albo pode­j­mu­jąc się nowego zada­nia z listy planowanych na bieżą­cy etap.

Przed połud­niem mamy spotkanie zespołu — telekon­fer­enc­je (zespół pracu­je w 3 różnych państ­wach) — tzw. Stand Up (to z metody­ki SCRUM), pod­czas którego każdy krótko mówi o tym, co udało mu się zro­bić, co planu­je robić tego dnia oraz ew jakie napotkał prob­le­my. Pozostała część dnia to w więk­szoś­ci pra­ca nad zada­ni­a­mi, cza­sem zdarza­ją się sytu­acje w których przełączam się na inne zadanie które jest np. pil­nie potrzeb­ne lub pomagam komuś z ich zadaniem czy też robię tzw. refac­tor­ing — poprawę ogól­nej jakoś­ci kodu. Przed końcem dnia wery­fiku­je czy wszystie prace zostały zara­por­towane w sys­temie oraz czy coś nie wyma­ga pil­nej uwa­gi jeszcze tego dnia.

Jeśli chodzi o wyzwa­nia są one różnego rodza­ju, głównie zdarza­ją się prob­le­my tech­niczne — przykład­owo błąd który ‘chował się’ przez jak­iś czas (np. jakaś niek­luc­zowa infor­ma­c­ja nie była zapisy­wana i nikt nie zauważył tego wcześniej) czy też zmi­any w innym mod­ule wpłynęły na nasz i trze­ba jak najszy­b­ciej się dos­tosowac do tych zmi­an (to w sum­ie najczęst­sze prob­le­my). Częs­to popraw­ia­jąc coś powodu­je­my falę mniejszych prob­lemów (kliknij — mantra pro­gramistów ;) ) lub odkry­wamy kod złej jakoś­ci który należy przepisać.

Dużym wyzwaniem jest też sama pra­ca w miedzy­nar­o­dowym zes­pole — najm­niejszy z prob­lemów to różnice stref cza­sowych (u nas najwięk­sza różni­ca to 5h), do tego dochodzą aspek­ty kul­tur­alne, tem­pera­ment osób w pro­jek­cie oraz nieste­ty cza­sa­mi także prob­le­my z kom­pe­tenc­ja­mi niek­tórych osób (na szczęś­cie firmy stara­ją się same dbać o to, żeby zatrud­ni­ać oso­by kom­pe­tentne lub przy­dzielać zada­nia które nie przewyższa­ją kom­pe­tencji danej oso­by). Wiado­mo — im więk­szy pro­jekt tym więcej poziomów skom­p­likowa­nia więc do tego częs­to dochodzi koor­dy­nac­ja dzi­ałań wielu osób.

Ogól­nie to zawsze jest coś, co możn­a­by popraw­ić, ulep­szyć, tylko braku­je cza­su — stąd radze­nie sobie z frus­trac­ja­mi dnia codzi­en­nego też bywa wyzwaniem (ale nie prze­sadza­jmy, nie jest źle, po pros­tu każ­da pra­ca wiąże się z jakim­iś stresami).

Jaką radę dałbyś/dałabyś osobie która zaczyna karierę w IT?

Nie prze­j­muj się zdaniem innych w kwestii tech­nologii — w IT sto­sunkowo silne są oso­biste pref­er­enc­je ;) Pro­gramista .NET bedzie Cię przekony­wał, że jego tech­nolo­gia jest najlep­sza, a prze­cież wiado­mo, że to Java rządzi ( to żart oczy­wiś­cie ;) każ­da z nich ma swo­je wady i zale­ty ) — w pro­gramowa­niu najważniejsze żebyś Ty się dobrze czuła z uży­waną tech­nologią, żeby posz­erzanie swo­jej wiedzy było dla Ciebie przy­jem­noś­cią a nie udręką. Rynek pra­cy jest tak sze­ro­ki, że w dowol­nej tech­nologii moż­na znaleźć zatrud­nie­nie, a co może być lep­szego od pra­cy która jest dla nas prawdzi­wą przyjemnością.

Dru­ga rzecz to nie zrażaj się i nie ucz się ‘na siłę’. Zaczy­na­jąc naukę dość szy­bko zdasz sobie sprawę, że ilość stan­dard­ów, tech­nologii, narzędzi jest ogrom­na, wręcz przytłacza­ją­ca. Pamię­taj o tym, że to nie znaczy że musisz je poz­nać czy nawet wiedzieć o nich — jak wspom­ni­ałem wcześniej swo­ją wiedzę z zakre­su ‘całej Javy’ oce­ni­am na 10–15%. I uważam to za wyso­ki wynik. Po pros­tu są eksper­ci spec­jal­izu­ją­cy się w innych dziedz­i­nach i kluczem do sukce­su jest współpra­ca takich osób.

Wywiadu udzielił Jakub Der­da, Starszy Pro­gramista Java, Współau­tor www.kobietydokodu.pl

Wielkie dzię­ki za miłą rozmowę!

Jeśli chcesz zadać Kubie pytanie — po pros­tu sko­men­tuj ten wpis. W celu kon­tak­tu bezpośred­niego pisz na [email protected]

IMG_0088

Cykl kulisy branży IT szu­ka bohaterów. Dzięku­je­my serdecznie za wszys­tkie doty­chcza­sowe his­to­rie i wywiady! Chcesz podzielić się swo­ją his­torią i opowiedzieć o swoim zawodzie?  Napisz do nas i pomóż nam przed­staw­ić sze­rok­ie per­spek­ty­wy pra­cy w IT.