Jak zacz膮膰 karier臋 w IT (programowaniu)[馃嚨馃嚤 PL content]

This post is exceptionally written in Polish, to all those who are willing to start their professional career as a software engineer. If you think that the English version would be useful, I am more than happy to translate it. Just let me know!

Przez lata mojej kariery zwi膮zanej z IT (dok艂adniej, programowaniem), wiele razy zosta艂em poproszony o porad臋, jak rozpocz膮膰 prac臋 w tej bran偶y. Pytania pochodzi艂y od przer贸偶nych grup鈥娾斺妘czni贸w, student贸w, znajomych, kt贸rzy postanowili si臋 przebran偶owi膰 dla zajawki i tych, kt贸rych obecna praca zacz臋艂a wypala膰. Jako, 偶e moje odpowiedzi by艂y bardzo zbli偶one niezale偶nie od grupy pytaj膮cych, postanowi艂em zebra膰 je w artyku艂 o tym jak zacz膮膰 karier臋 w bran偶y programistycznej (IT to zdecydowanie zbyt szerokie poj臋cie).

Podkre艣lam, 偶e pomimo pr贸by spojrzenia na temat z r贸偶nych perspektyw, to co tutaj pisz臋 jest bardzo subiektywne, oparte w wi臋kszo艣ci na do艣wiadczeniach moich lub moich znajomych. Nie jest to na pewno jedyna w艂a艣ciwa droga do sukcesu, kt贸rym jest pe艂noetatowa praca w bran偶y, przynosz膮ca nam przyjemno艣膰.

Poni偶sze odpowiedzi pisz臋 z perspektywy osoby, kt贸ra zawodowo zajmuje si臋 cz臋艣ciowo programowaniem (z naciskiem na mobile), a cz臋艣ciowo prowadzeniem zespo艂u programist贸w (a to znaczy, 偶e z kodem mam do czynienia nieco rzadziej, ni偶 kilka lat temu). 
Pomimo tego, 偶e 艣wiat mobile jest najbli偶szy mojemu sercu, mam nadziej臋, 偶e cz臋艣膰 odpowiedzi mo偶e by膰 z powodzeniem zastosowana przy stawianiu pierwszych krok贸w w takich dziedzinach jak: backend, frontend, data engineering i wielu innych, w kt贸rych j臋zyk programowania jest g艂贸wnym narz臋dziem pracy.

Je艣li programowaniem zajmujesz si臋 profesjonalnie i sam chcia艂by艣 lub chcia艂aby艣 podzieli膰 si臋 swoimi do艣wiadczeniami, daj zna膰. Ch臋tnie podlinkuj臋 wszelkie materia艂y, kt贸re mog膮 okaza膰 si臋 przydatne dla pocz膮tkuj膮cych.

Dlaczego szko艂a i studia nie naucz膮 nas programowania?

Na starcie podkre艣lam鈥娾斺妀e艣li na informatyce w szkole grasz w CSa czy Quake鈥檃, a na studiach scrollujesz Facebooka lub wykop.pl to problem le偶y w nauczycielu/wyk艂adowcy, ale r贸wnie偶 w tobie. Skoro planujesz zosta膰 programist膮 i dysponujesz czasem, kt贸ry jeste艣 zmuszony sp臋dzi膰 w sali komputerowej, dlaczego nie wykorzystujesz go do osi膮gni臋cia swoich ambicji zawodowych?

Jednak abstrahuj膮c od tego przypadku – na pewno w sieci znajdziesz wiele dyskusji na temat tego, czy warto i艣膰 na studia, czy nie. Ja osobi艣cie nie 偶a艂uj臋 trzech lat sp臋dzonych na uczelni (Uniwersytet Jagiello艅ski, Informatyka Stosowana), ale nie twierdz臋, 偶e nie da艂oby si臋 bez nich 偶y膰 (z tego te偶 powodu nie kontynuowa艂em nauki na II stopniu – licencjat mi na tamten moment wystarczy艂).

W moim przypadku na du偶y plus wysz艂y zaj臋cia bardziej teoretyczne, wszelkie rodzaje matematyki鈥娾斺妉ogika, analiza, metody numeryczne. Troch臋 mniej tematy skupione wok贸艂 programowania. Zaj臋cia teoretyczne, je艣li s膮 prowadzone w spos贸b interesuj膮cy (i Ty r贸wnie偶 wk艂adasz w to swoje zaanga偶owanie), wp艂ywaj膮 pozytywnie na nasz膮 umiej臋tno艣膰 adaptacji nowych rozwi膮za艅. Tw贸j umys艂 jest rozgrzany i gotowy do poszerzania horyzont贸w (np. w postaci nowych j臋zyk贸w programowania lub nowej klasy problem贸w do rozwi膮zania). Poza tym, w mojej 10-letniej karierze, podczas budowania kodu nie raz us艂ysza艂em lub wypowiedzia艂em zdanie: 鈥hej, przecie偶 to by艂o na metodach numerycznych!鈥.

Troch臋 inaczej jest z programowaniem. Bardzo cz臋sto wychodzimy z zaj臋膰 niezadowoleni ze zbyt prostych problem贸w, zbyt starego j臋zyka lub zbyt niedo艣wiadczonego nauczyciela. Nie zawsze jednak problemem jest tutaj wyk艂adowca. Taka po prostu jest specyfika bran偶y IT鈥娾斺妌arz臋dzia, j臋zyki, ale te偶 problemy zmieniaj膮 si臋 dos艂ownie z roku na rok. Kiedy ja zaczyna艂em studia o mobile prawie si臋 nie s艂ysza艂o. Pi臋膰 lat p贸藕niej 偶yli艣my w 艣wiecie mobile-first. Dzi艣 dla niekt贸rych temat jest pass茅 馃槈. Wkraczamy w er臋 AI-first.

Co zatem mo偶e zrobi膰 艣rodowisko akademickie? Mo偶e zaszczepi膰 w nas zainteresowanie, nauczy膰 podstaw (kt贸re, kiedy podane we w艂a艣ciwy spos贸b, mog膮 by膰 aplikowane wsz臋dzie i ponadczasowo), nauczy膰 my艣lenia abstrakcyjnego, w oderwaniu od narz臋dzi, kt贸rych u偶ywamy. Prawie na pewno nie nauczy nas rozwi膮zywania konkretnych problem贸w, z kt贸rymi boryka si臋 dana firma w danym j臋zyku lub te偶 frameworku. Wyk艂adowca zwykle nie po艣wi臋ca 8 godzin dziennie, 250 dni w roku tylko na programowanie w danym j臋zyku. Wtedy nie uczy艂by ciebie, a sam pracowa艂 jako programista konkretnej technologii lub j臋zyka. To tylko od nas zale偶y, czy i jak bardzo zag艂臋bimy dany temat. Bycie 鈥渕膮drzejszym鈥 od wyk艂adowcy to tylko pierwszy krok na twojej drodze do sukcesu.

Pami臋taj te偶, 偶e studia to r贸wnie偶 mo偶liwo艣膰 uczestniczenia w ko艂ach naukowych, gdzie prawdopodobnie znajd膮 si臋 podobni do ciebie pasjonaci danego j臋zyka, technologii i zagadnie艅. Studia to te偶 (czasem) mo偶liwo艣膰 pracy ze sprz臋tem, na kt贸ry sami nie mo偶emy sobie pozwoli膰. I oczywi艣cie studia to czas dla ciebie. Czas szalonych imprez, ale te偶 czas, w kt贸rym zarwanie ca艂ej nocy, czy nawet tygodnia na nauk臋 programowania jest jak najbardziej do zrobienia.

Jestem uczniem szko艂y 艣redniej, czy jest za wcze艣nie?

Nigdy nie jest za wcze艣nie, ani za p贸藕no. Ja swoje pierwsze komercyjne projekty tworzy艂em w szkole 艣redniej鈥娾斺奼艂贸wnie proste strony WWW z dodatkow膮 logik膮 w postaci skrypt贸w PHP. Jednak moje pierwsze 鈥減owa偶ne鈥 projekty zwi膮zane z programowaniem powstawa艂y na pocz膮tku studi贸w. Mam te偶 znajomych, kt贸rzy ju偶 w szkole 艣redniej zajmowali si臋 programowaniem profesjonalnie, oraz tych, kt贸rzy zacz臋li to robi膰 d艂ugo po zako艅czeniu studi贸w (nie zwi膮zanych bezpo艣rednio z programowaniem).

J臋zyk angielski

Na pocz膮tku kariery, j臋zyk angielski nie by艂 moj膮 mocn膮 stron膮. W ko艅cu pracuj膮c z polskimi klientami lub pracodawcami w wi臋kszo艣ci przypadk贸w nie musimy go u偶ywa膰. Jednak zwykle taka sytuacja nie trwa wiecznie, dlatego im pr臋dzej b臋dziesz pos艂ugiwa艂 si臋 j臋zykiem angielskim, tym lepiej. Nie lubisz j臋zyk贸w obcych? Zap艂acisz. Kiedy przyszed艂 ten czas w moim przypadku, bardzo dos艂ownie zap艂aci艂em za lekcje, kt贸re jeszcze kilka lat wcze艣niej dostawa艂em za darmo. Kurs by艂 oczywi艣cie przyspieszony i nietani.

Dzi艣 znajomo艣膰 j臋zyka angielskiego to nie jest atut. To jest wymaganie wst臋pne. J臋zyk angielski, przysz艂y programisto, jest twoim podstawowym narz臋dziem pracy:

  • Kod 藕r贸d艂owy jest pisany po angielsku, dlatego je艣li w szkole lub na studiach piszesz function dodaj(int zmienna1, int zmienna2) pope艂niasz b艂膮d. Poprawnie to: function sum(int var1, int var2).
  • Dokumentacja jest pisania po angielsku. Proporcje s膮 r贸偶ne, ale mo偶esz 艣mia艂o za艂o偶y膰, 偶e 80% kodu, kt贸ry napiszesz z czym艣 si臋 integruje. SDK, zewn臋trzna biblioteka, API. 呕eby po艂膮czy膰 si臋 z ka偶dym z nich, musisz wiedzie膰, jak to zrobi膰. Instrukcje zwykle s膮 pisane po angielsku.
  • Wszelkie 藕r贸d艂a wiedzy鈥娾斺妅ursy, video, artyku艂y, szczeg贸lnie te naprawd臋 dobrej jako艣ci, s膮 dost臋pne w j臋zyku angielskim.
  • Je艣li firma, w kt贸rej b臋dziesz pracowa艂 operuje na rynku mi臋dzynarodowym, b臋dziecie komunikowa膰 si臋 w j臋zyku angielskim. Niezale偶nie od zajmowanej pozycji musisz umie膰 鈥渋ch鈥 zrozumie膰, i sprawi膰, 偶e 鈥渙ni鈥 zrozumiej膮 ciebie.
  • Je艣li firma jest lokalna wystarczy, 偶e do twojego zespo艂u do艂膮czy jedna angloj臋zyczna osoba, albo skontaktuje si臋 jeden angloj臋zyczny klient鈥娾斺妔ytuacja jak wy偶ej.

Nie lubi臋 ubiera膰 takich umiej臋tno艣ci w sztywne ramy, ale je艣li mam poda膰 doln膮 granic臋 to angielski na poziomie B2 powinien by膰 wystarczaj膮cy.

Jak si臋 uczy膰 programowania?

To jest temat rzeka, a ostatecznie i tak bardzo du偶o zale偶y od ciebie samego. Tego, co chcesz programowa膰 (backend, frontend, mobile, autonomiczne samochody, czy roboty) oraz tego, w jaki spos贸b naj艂atwiej przyswajasz wiedz臋. Dr贸g jest tak wiele, 偶e mo偶na by o tym napisa膰 ksi膮偶k臋, dlatego te偶 skupi臋 si臋 tylko na jednej z nich鈥娾斺妋ojej.

Nie jestem teoretykiem. Ksi膮偶ek o programowaniu przeczyta艂em zapewne mniej, ni偶 jest palc贸w u jednej r臋ki. Zamiast tego wol臋 praktyk臋. Kiedy pozna艂em absolutne podstawy programowania (sk艂adania, podstawowe cechy), zacz膮艂em po prostu pisa膰 aplikacje. Najpierw proste problemy w konsoli鈥娾斺奱lgorytmy, struktury danych, proste operacje na plikach i bazach danych (g艂贸wnie materia艂y na studiach), p贸藕niej niewielkie aplikacje z poradnik贸w i artyku艂贸w. Dzi艣, je艣li decydujesz si臋 na napisanie pierwszej aplikacji w danym j臋zyku lub platformie, wystarczy, 偶e wejdziesz na oficjaln膮 stron臋, gdzie przyk艂ad贸w jest mn贸stwo. Interesuje ci臋 Android? Wejd藕 na: https://developer.android.com/, przejd藕 przez Getting Started. Je艣li jeste艣 na samym pocz膮tku swojej kariery, temat贸w tam znajdziesz na tygodnie, a mo偶e i miesi膮ce nauki.

Je艣li poszukujesz czego艣 nieco bardziej praktycznego, a problemy same nie przychodz膮 ci do g艂owy (to jest normalne, sam straci艂em mn贸stwo czasu my艣l膮c nad tym, co by tu napisa膰), proponuj臋 zapozna膰 si臋 z kursami online, kt贸re w dzisiejszych czasach ciesz膮 si臋 du偶膮 popularno艣ci膮. Jest tego mn贸stwo, dlatego podam tylko jeden przyk艂ad. Udacity鈥娾斺妏latforma, na kt贸rej znajduj膮 si臋 gotowe projekty, szkolenia, a nawet 鈥渒lasy鈥, w kt贸rych mo偶emy nauczy膰 si臋 naprawd臋 wiele. S膮 p艂atne Nanodegree鈥娾斺妅ursy video wraz z pomoc膮 mentorsk膮, zadaniami domowymi i przyk艂adami kodu oraz bezp艂atne szkolenia, kt贸re r贸wnie偶 przeprowadzaj膮 nas krok po kroku poprzez bardziej 鈥渞ealne鈥 problemy. Bardzo cz臋sto s膮 one przedstawiane przez ludzi, kt贸rzy danymi technologiami zajmuj膮 si臋 na co dzie艅 zawodowo. Temat jest w tym momencie na tyle gor膮cy, 偶e s膮 firmy takie jak Google, kt贸re daj膮 stypendia w postaci darmowego dost臋pu do kurs贸w (np. programowania Androida lub aplikacji internetowych) dla pocz膮tkuj膮cych (poszukaj np. tutaj : https://www.udacity.com/google).

Inne strony z kursami: Udemy, Edx, Coursera i wiele wiele innych.

Polecam r贸wnie偶 zapozna膰 si臋 z platformami takimi jak Github lub Bitbucket. Systemy kontroli wersji to jedne z narz臋dzi, kt贸rych b臋dziesz u偶ywa艂 r贸wnie cz臋sto, jak samego j臋zyka programowania. Natomiast poza prac膮 komercyjn膮, maj膮 one r贸wnie偶 aspekt spo艂eczno艣ciowy, gdzie inni programi艣ci dziel膮 si臋 swoim kodem 藕r贸d艂owym, kt贸ry mo偶emy przegl膮da膰 lub wr臋cz sami do niego kontrybuowa膰. Czytanie czyjego艣 kodu to r贸wnie dobra metoda nauki programowania, jak pisanie go samemu.

I jest jeszcze jedna metoda nauki, kt贸ra w moim wypadku by艂a naprawd臋 skuteczna鈥娾斺奷zielenie si臋 do艣wiadczeniem z innymi. Od wielu lat pisz臋 artyku艂y na blogu oraz dziel臋 si臋 swoim kodem 藕r贸d艂owym na Githubie z innymi programistami. I uwa偶am, 偶e nic innego nie pozwoli nam tak dog艂臋bnie pozna膰 dane zagadnienie, jak w艂a艣nie upublicznianie swojej pracy. Dlaczego? Bo nim postawisz si臋 w roli eksperta w konkretnym temacie, skonfrontujesz wielokrotnie, czy aby na pewno masz racj臋.

Mentoring

Pomimo, 偶e jest to r贸wnie偶 forma nauki, mentoring zas艂uguje na oddzielny akapit. Zna膰 kogo艣, kto zajmuje si臋 programowaniem profesjonalnie i przy tym m贸c pos艂ucha膰 jego rad, cz臋sto ca艂kowicie odmienia to, jak toczy si臋 nasza kariera. Mentor to nie nauczyciel, kt贸ry nas poprowadzi za r臋k臋. Nie jest to te偶 osoba, kt贸ra odpowie na ka偶de z naszych pyta艅. Mentor to kto艣, kto zada nam trafne pytania, podsunie propozycje na kolejne kroki rozwoju lub wymy艣li kolejny problem do rozwi膮zania.

Ja mia艂em ogromne szcz臋艣cie mie膰 takich mentor贸w w r贸偶nych okresach mojej kariery. I pomimo, 偶e nie utrzymywa艂em z nimi sta艂ego kontaktu (zwykle kr贸tka konwersacja raz na tydzie艅 lub miesi膮c), relacje te diametralnie przyspieszy艂y m贸j rozw贸j.

Jak zatem szuka膰 mentor贸w? W艣r贸d znajomych, w ko艂ach naukowych, w grupach programistycznych (np. CocoaHeads dla programist贸w iOS, lub Google Developers Group dla os贸b pracuj膮cych z technologiami Google). Je艣li mimo tego masz trudno艣膰 ze znalezieniem kogo艣, poszukaj w Internecie. Znajd藕 cichego mentora. Inspiruj si臋 tym, co ta osoba publikuje w sieci. Ja, pomimo wsparcia face-to-face na pocz膮tku swojej kariery, inspirowa艂em si臋 tym, co na swoim blogu pisa艂 Maciek Aniserowicz. Dzi艣 moimi cichymi mentorami s膮 m.in. Kevin Goldsmith oraz Tobias Van Schneider.

Ile j臋zyk贸w programowania musz臋 zna膰, 偶eby zacz膮膰 karier臋 jako programista?

Na start? Jeden. Przede wszystkim warto zrozumie膰 co to znaczy 鈥渮na膰鈥 j臋zyk programowania. Sk艂adnia i cechy j臋zyka s膮 wa偶ne. Oczywi艣cie jest pewien poziom minimalny, kt贸ry trzeba przekroczy膰, 偶eby w og贸le zacz膮膰 programowa膰. Istotniejsza jest tutaj umiej臋tno艣膰 rozwi膮zywania zadanych problem贸w za pomoc膮 j臋zyka, kt贸rego si臋 uczysz. J臋zyk jest narz臋dziem, bardzo cz臋sto jednym z wielu. I o ile analogia o naostrzeniu pi艂y przed 艣ci臋ciem drzewa, znajduje tutaj zastosowanie, tak ostatecznie rozliczani jeste艣my z tego drugiego.

Warto te偶 pami臋ta膰, 偶e praca w IT to tak naprawd臋 ci膮g艂a nauka. Nasz fach doskonalimy w trakcie wykonywania zawodu鈥娾斺妟ar贸wno przez w艂asne do艣wiadczenia, jak i szkolenia, kt贸re dostarcza nam firma lub kt贸re sami kupujemy. Znaj膮c jeden j臋zyk na akceptowalnym poziomie mo偶emy 艣mia艂o pr贸bowa膰 swoich si艂 w na rynku pracy. Wraz z momentem zatrudnienia czeka was szczeg贸lnie intensywny czas nauki.

Oczywi艣cie mnogo艣膰 znanych j臋zyk贸w daje nam komfort doboru w艂a艣ciwego narz臋dzia do zadanego problemu. Czasem jednak dobra znajomo艣膰 jednego j臋zyka (oraz dost臋pnych narz臋dzi鈥娾斺奻ramework贸w, SDK) daje nam wystarczaj膮c膮 swobod臋, by nie opuszcza膰 swojej strefy komfortu przez d艂ugi czas. Co wi臋cej, w wielu przypadkach bardzo dobra znajomo艣膰 jednego j臋zyka programowania znacz膮co upraszcza nauk臋 kolejnego.

Warto te偶 podkre艣li膰, 偶e w dzisiejszych czasach nie j臋zyk, a ju偶 konkretne implementacje lub zastosowania s膮 tym, co powinni艣my zna膰. Programuj膮c Androida r贸wnie wa偶na jest znajomo艣膰 Javy, ale te偶 Android SDK. I id膮c dalej鈥娾斺妀u偶 konkretnych rozwi膮za艅 (np. framework贸w do po艂膮czenia z internetowym API, do bazy danych itp.).

Co jeszcze musz臋 zna膰 na starcie?

To ju偶 bardzo zale偶y od dziedziny programowania, kt贸r膮 chcesz si臋 zajmowa膰. Z rzeczy og贸lnych, kt贸re przydadz膮 si臋 ka偶demu:

  • system kontroli wersji (np. GIT),
  • wzorce projektowe (teoria, ale te偶 implementacje ju偶 w konkretnym j臋zyku),
  • troch臋 p贸藕niej r贸wnie偶 wzorce architekturalne,
  • warto te偶 wiedzie膰 czym jest programowanie obiektowe鈥娾斺妀ego cechy i za艂o偶enia,
  • podstawy logiki r贸wnie偶 nie zaszkodz膮. 馃檪

Ile czasu potrzebuj臋, 偶eby zacz膮膰 swoj膮 karier臋 w programowaniu?

Ka偶dy uczy si臋 w swoim tempie. Ka偶dy te偶 ma inny baga偶 do艣wiadcze艅 i umiej臋tno艣ci. Ale podam kilka przyk艂ad贸w:

  • Kiedy na studiach zdecydowa艂em si臋 budowa膰 aplikacje na Androida potrzebowa艂em oko艂o 3鈥6 miesi臋cy nauki we w艂asnym zakresie, aby zacz膮膰 tworzy膰 pierwsze rozwi膮zania na miar臋 pozycji Junior Software Engineer. Studiowa艂em wtedy informatyk臋, a w swoim portfolio mia艂em ju偶 kilka zrealizowanych projekt贸w鈥娾斺妏rostych stron internetowych, g艂贸wnie HTML, CSS, PHP. Pomimo aktywnego studiowania te 3鈥6 miesi臋cy to by艂a nauka po godzinach, we w艂asnym zakresie.
  • Kiedy ju偶 w trakcie kariery zawodowej zacz膮艂em uczy膰 si臋 programowania iOSa, potrzebowa艂em oko艂o 1鈥2 miesi臋cy, 偶eby napisa膰 pierwsz膮 prost膮 aplikacj臋 komercyjnie i zrozumie膰 podstawy tej platformy (programowa艂em wtedy Androida od ok 2 lat).
  • W艣r贸d znajomych, kt贸rzy postanowili si臋 przebran偶owi膰, g艂贸wnie w trakcie lub po studiach, przy du偶ej determinacji i po艣wi臋caniu ca艂ego wolnego czasu na nauk臋, zwykle by艂o to ok 6鈥12 miesi臋cy od pierwszych krok贸w po pierwsz膮 prac臋 jako Junior Software Engineer. Z tym, 偶e 鈥渃a艂y wolny czas鈥 to nigdy nie by艂o tylko sobotnio-niedzielne popo艂udnie. To by艂a przede wszystkim determinacja i skupienie na celu, kt贸re sprawia艂y, 偶e przeznaczali oni ka偶d膮 lu藕n膮 godzin臋 w tygodniu na zrobienie kolejnego kroku ku realizacji swoich plan贸w.

Co musz臋 umie膰, 偶eby dosta膰 si臋 na praktyki, sta偶, do pierwszej pracy?

Przede wszystkim musisz umie膰 rozwi膮zywa膰 podstawowe problemy i zadania pracodawcy lub klienta, za pomoc膮 j臋zyka programowania, kt贸ry jest twoj膮 mocn膮 stron膮. Brzmi abstrakcyjnie, ale kiedy sam mam okazj臋 uczestniczy膰 w rekrutacji, to jest jedna z rzeczy, na kt贸r膮 zwracam uwag臋 najbardziej. Moje pierwsze CV zawiera艂o list臋: C, C++, PHP, HTML, JavaScript, Java i pewnie kilka innych j臋zyk贸w, kt贸re mia艂em okazj臋 lizn膮膰 na studiach czy lekcjach informatyki. W贸wczas umia艂em rozwi膮zywa膰 problemy tylko za pomoc膮 PHP i HTMLa, mo偶e cz臋艣ciowo JavaScriptu. To wystarczy艂o, 偶eby dosta膰 sw贸j pierwszy sta偶 w IT鈥娾斺妛 zespole DreamLab Onet.pl. Jakie mia艂em zadania/problemy do rozwi膮zania? W tamtym czasie by艂o to pobieranie element贸w z bazy danych, prosty interfejs WWW do ich wy艣wietlenia wraz z odrobin膮 dynamizmu UI wspieranego JavaScriptem.

Ten sukces (pierwszy sta偶!) poprzedzony by艂 niejedn膮 kompromitacj膮, w kt贸rej bardzo szybko wysz艂o, 偶e C, C++, czy Java na moim papierze to nic innego, jak prosta aplikacja konsolowa napisana w trakcie zaj臋膰 akademickich. W zasadzie nawet nie napisana/wymy艣lona, a przepisana z materia艂贸w dydaktycznych. Gdybym w pe艂ni rozumia艂 napisany kod i by艂 w stanie jego koncepcj臋 przedstawi膰 z g艂owy, mo偶liwe 偶e oby艂oby si臋 bez nieprzyjemno艣ci.馃檪

Zatrudnisz mnie na (bezp艂atne) praktyki / (p艂atny) sta偶 do twojego zespo艂u/firmy?

Przede wszystkim taka decyzja powinna by膰 obustronnie przemy艣lana i uzgodniona. Niezale偶nie, czy za swoj膮 prac臋 b臋dziesz pobiera艂 wynagrodzenie (sta偶), czy pracowa艂 za darmo (praktyki), musisz zastanowi膰 si臋, jak膮 warto艣膰 ty przyniesiesz firmie (najlepiej, je艣li w kilku zdaniach przedstawisz to swojemu pracodawcy). Te warto艣ci to niekoniecznie dobrej jako艣ci kod, kt贸ry nie zawsze 艂atwo jest napisa膰 nie maj膮c 偶adnego komercyjnego do艣wiadczenia. S膮 nimi r贸wnie偶:

  • Wykonanie pracy, kt贸ra ju偶 nie jest wyzwaniem dla do艣wiadczonych programist贸w. Nie chodzi tu o parzenie kawy. Chodzi o zmian臋 nawigacji w aplikacji, aktualizacj臋 bibliotek, podmian臋 ostylowania, czy napisanie unit test贸w. My robili艣my to ju偶 dziesi膮tki/tysi膮ce razy, ty dzi臋ki temu nauczysz si臋 podstaw pracy z zespo艂em nad istniej膮cym projektem.
  • Przetestowanie kodu, aplikacji, czy te偶 proces贸w wytwarzania oprogramowania. Je艣li kto艣 niedo艣wiadczony jest w stanie napisa膰 kod, kt贸ry sam w sobie dzia艂a, ale psuje wszystko inne i nie zostaje to wykryte odpowiednio wcze艣nie, to mo偶e problemem nie jest brak do艣wiadczenia. Mo偶e to s艂aba architektura rozwi膮za艅, kt贸ra pozwala na takie b艂臋dy?
  • Umiej臋tno艣膰 przekazywania wiedzy. Programi艣ci przychodz膮 i odchodz膮鈥娾斺妕y do艂膮czaj膮c do zespo艂u jako praktykant pozwalasz firmie sprawdzi膰, czy starsi sta偶em programi艣ci s膮 w stanie przekaza膰 swoj膮 wiedz臋 w odpowiedni spos贸b (a przy tym sprawdzi膰 np. czy firma jest w stanie si臋 skalowa膰, poprzez powi臋kszanie zespo艂u).
  • Trafne pytania do programist贸w starszych sta偶em. Cz臋sto wierzymy, 偶e nasze rozwi膮zania s膮 tak doskona艂e, 偶e nie mo偶na juz nic zrobi膰 lepiej. Kiedy natomiast dostajesz pytanie od kogo艣 mniej do艣wiadczonego, sam musisz si臋 dobrze zastanowi膰 nad odpowiedzi膮. To prowadzi do niejednego ol艣nienia. Uczymy si臋 ca艂e 偶ycie. 馃檪

鈥淧racuj臋 za grosze/darmo, dlaczego mam przynosi膰 firmie jak膮艣 warto艣膰?鈥濃娾斺妋o偶esz zapyta膰. Nawet je艣li nie otrzymujesz wynagrodzenia, nie znaczy to, 偶e firma nie ponosi koszt贸w. Jest nim przede wszystkim czas starszych sta偶em koleg贸w, kt贸rzy pobieraj膮c wynagrodzenie skupiaj膮 si臋 na twoim rozwoju, a nie na rozwoju produktu. Jak wskaza艂em wy偶ej鈥娾斺妑ozw贸j ciebie to inwestycja (a nu偶 zostaniesz zatrudniony i twoje umiej臋tno艣ci pos艂u偶膮 dalszemu rozwoju firmy). Jednak inwestycja musi mie膰 jakikolwiek potencja艂 zwrotu. Je艣li ty programujesz w C++ albo PHP, a my robimy aplikacje mobilne w Javie/Swift to temat raczej nie wypali. Ca艂kiem mo偶liwe, 偶e nawet by艣 tego nie chcia艂鈥娾斺妏raca w zespole, w kt贸rym tylko ty znasz dany j臋zyk lub technologi臋 naprawd臋 nie jest 艂atwa dla nikogo.

Jak znale藕膰 sta偶 lub praktyki?

Je艣li wiesz ju偶, co chcia艂by艣 programowa膰 i masz za sob膮 pierwszy napisany kod 藕r贸d艂owy, po prostu dobrze si臋 rozgl膮dnij. Je艣li og艂oszenia z biur karier lub serwis贸w z ofertami pracy nie s膮 dla ciebie wystarczaj膮ce, zacznij od najbli偶szego otoczenia. Czy w twoim mie艣cie s膮 jakie艣 firmy z bran偶y IT? Je艣li tak, warto przegl膮dn膮膰 ich oficjalne strony, blogi lub serwisy spo艂eczno艣ciowe (firma mo偶e mie膰 sw贸j profil np. na LinkedIn lub GoldenLine). Warto te偶 dowiedzie膰 si臋 w jakich technologiach pracuj膮. Je艣li masz sw贸j typ, ale w sieci nie znalaz艂e艣 ofert pracy鈥娾斺妛arto po prostu napisa膰 maila z zapytaniem. 
Poza tym, warto r贸wnie偶 pojawia膰 si臋 na wydarzeniach bran偶owych. W wi臋kszych miastach odbywaj膮 si臋 one niemal codziennie. Nie do艣膰, 偶e masz szans臋 pozna膰 ludzi, kt贸rzy zajmuj膮 si臋 programowaniem profesjonalnie i pos艂ucha膰 ich wyst膮pie艅, to r贸wnie偶 o ofertach pracy dowiesz si臋 z pierwszej r臋ki. I przy okazji b臋dziesz m贸g艂 zapyta膰 nieoficjalnie, jakie s膮 wymagania, 偶eby dosta膰 prac臋 na konkretnym stanowisku.

Gdzie szuka膰 wydarze艅? W sieci, np. na https://crossweb.pl/.

Przyk艂ad sta偶u

Tak si臋 sk艂ada, 偶e jaki艣 czas temu w firmie聽Azimo, dla kt贸rej pracuj臋 przeprowadzili艣my program sta偶owy (skierowany do student贸w, kt贸rzy znali podstawy programowania aplikacji na Androida oraz iOSa). Ca艂a relacja z procesu zosta艂a opisana pod tym聽linkiem:

Na koniec programu zaproponowali艣my prac臋 naszym sta偶ystom. R贸wnie偶 oni opisuj膮 swoje do艣wiadczenia z tego czasu. Mo偶esz je znale藕膰聽tu聽i聽tu.

Nie znalaz艂em odpowiedzi na moje pytanie

Oczywi艣cie zawsze ch臋tni臋 pomog臋 lub doradz臋 w ju偶 bardziej konkretnej sytuacji. Je艣li nie znale藕li艣cie odpowiedzi na swoje pytanie lub chcieliby艣cie kt贸re艣 z nich zg艂臋bi膰 jeszcze bardziej, piszcie 艣mia艂o! W komentarzu pod postem lub bezpo艣rednio na maila froger.mcs@gmail.com.

Mam nadziej臋, 偶e to, co tutaj opisa艂em pomo偶e wam w pierwszych krokach w zawodzie programisty. Powodzenia!

Author: Mirek Stanek

Head of Mobile Development at Azimo. Artificial Intelligence adept 馃. I dream big and do the code 鉁.

Leave a Reply

Your email address will not be published. Required fields are marked *