11 01 2015
Pierwsza praca jako programista
Chciałbym zaznaczyć, że materiał kierowany jest dla osób, które nie pracowały nigdy jako programista oraz nie mają dużego doświadczenia aplikowaniu na takie stanowisko.
Po tym jak pod koniec roku zapytałem Was o propozycje tematów odcinków „Programisty Na Emigracji” często powtarzało się pytanie o pierwszą pracę jako programista.
Nie chodzi o sam proces rekrutacji. Pytania były zadawane bardziej pod kątem zestawu umiejętności, który warto mieć, by szukać tą pierwszą pracę jako programista, czy też by móc zacząć pracować nad jakimś w swoim projektem w zespole osób. Jednak programowanie w pojedynkę, a programowanie z zespołem to (szczególnie dla początkującego) dwa różne światy. Sam widzę po sobie, ze odkąd pracuję z zespołem, praca na moimi projektami wygląda inaczej. Szczególnie jeśli chodzi o organizację mojej pracy. I jakoś tak sprawniej osiągam cele projekcie.
Jeśli nie chce Ci się czytać całego tekstu, to małe tl;dr dla Ciebie:
- naucz się gita (kontrola wersji),
- wyrób sobie nawyk rozbijania zadań na mniejsze zadania (karteczki są bardzo przydatne),
- nie ma sensu kłamać na rozmowie, czy CV, raczej powinieneś się skupić na przekonaniu rozmówcy, ze masz sporo chęci do nauki/rozwoju,
- przedstaw coś, by pokazać, ze potrafisz rozwiązywać problemy (własny projekt + omówienie problematycznych momentów i jak podszedłeś do szukania rozwiązania).
- naucz się stosować w praktyce z 2 wzorce projektowe. Polecam strategie i obserwator. Builder tez jest spoko. Najlepiej byś mógł je przedstawić w swoim projekcie. Mając chociaż tylko ten punkt jesteś na stracie w dużo lepszej pozycji jako początkujący,
- zamiast wypisywać piertrylion technologii, o których czytałeś na Wikipedii, albo napisałeś w nich jeden program na zaliczenie, lepiej wypisać jedną, dwie w których czujesz się najlepiej.
Ja np. w aktualnym CV mam głównie: Android SDK, Core Java i libgdx.
Dopiero później informuje o technologiach, w których coś tam kiedyś grzebałem, ale na dzień dzisiejszy musiałbym wiele doczytać, by zrobić w nich projekt (np.wszelkie technologie wokół Javy EE).
Rozwiązywanie problemów
Już parę razy o tym wspominałem. Praca programisty to rozwiązywanie problemów.
Jak przekonać pracodawcę, że potraficie to robić? Własny projekt. Ciągle to widzę, że osoby, które „coś tam” programują od paru lat nie maja żadnego skończonego projektu, którym mogliby się pochwalić.
Masz kolejna okazje, by wybić się trochę ponad szara masę. Skończony projekt, który można pokazać. Dlaczego do cholery prawie nikt tego nie robi? 😀
Bardzo dobrze, jeśli potrafisz odpowiedzieć na takie pytania jak np. „jakie były głównie problemy w projekcie?”, „dlaczego wybrałeś taką i taką technologie? Co byś ewentualnie zmienił przy drugim podobnym projekcie na podstawie dotychczasowych doswiadczeń?”. Takie pytania często są zadawane, by przekonać się, czy to faktycznie Twój projekt.
Najlepiej jeśli ten projekt zawiera technologie, które będziesz wykorzystywał w przyszłej pracy, o którą się starasz, ale nie jest to 100% konieczne. Wiele razy spotykałem się z tym, że bierze się kogoś dlatego, ze jest „kumaty” chociaż w danej technologii nie ma doświadczenia. Dosyć często widzę ludzi, którzy maja przeszłość pracy w backendzie, a aplikują jako developer aplikacji mobilnych. W takim przypadku jako zadanie testowe taki kandydat pisze webserwis… chociaż aplikuje na stanowisko, gdzie najprawdopodobniej nigdy tego nie będzie robił. Bo sprawdza się, czy ten człowiek potrafi programować. Sama technologia to sprawa istotna, ale nie tak istotna jak umiejętność rozwiązywania problemu i sprawnej realizacji zadania. Jeśli to potrafi, to odpowiedniej technologii się douczy.
Jeśli napisałeś coś co działa (chociaż jesteś świadomy, że milion rzeczy mógłbyś jeszcze poprawić/zrobić lepiej) i czujesz się na siłach, by podyskutować o projekcie, to śmiało: nadajesz się by gdzieś zaczynać. Jeśli może nie komercyjnie w jakiejś firmie, to przynajmniej zacznij szukać zespołu do wspólnego projektu. Pracując w pojedynkę często stoisz w miejscu i rozwijasz się wolniej (szczególnie jako początkujący).
Jeszcze krotko przypomnę, że powinieneś czuć się swobodnie w programowaniu obiektowym, ale o tym już wiele razy wspominałem we wcześniejszych odcinkach. Tak tylko przypominam. 😉
Kontrola wersji (git)
Git to nie jedyna opcja, ale jeśli nie wiesz od czego zacząć, to zacznij ot gita. Jest na tyle popularny, że słyszałem historie osób, które odrzucały ofertę pracy, bo firma zamiast gita stosuje inny system kontroli wersji. W pewnym spotkaniu organizacyjnym (firma pytała co jest dla nich ważne w pracy) programiści ustawili w swoich priorytetach gita wyżej od darmowej kawy. 😀 Git jest fajny. Korzystaj z niego, a Twoje życie stanie się łatwiejsze.
Jeśli myślisz o pracy zespołowej, to narzędzie do kontroli wersji jest niezbędne.
Po raz kolejny: nic ucz się niczego na pamięć. Nigdy (chyba, że do jakiegoś durnego certyfikatu ;)) Zapisz sobie gdzieś przykłady użycia 2-3 komend i je stosuj. Z czasem samo wejdzie do głowy. Będziesz potrzebował zrobić inną operację: googlaj, a następnie dodaj komendę do swoich notatek. Możesz oczywiście próbować kupić ksiażkę do gita i opanowywać wszystkie jego funkcje… ale nie ma takiej potrzeby. Na początek wystarczy jeśli będzie potrafił utworzyć nowe repozytorium, pobrać już utworzone, zrobić commit-a, push-a, pulla i wiedzieć co to branch. Przy okazji fajny tutorial, który mogę polecić:
Nie musisz też korzystać z konsoli (cały czas). Ja np. na co dzień korzystam z programu SourceTree, ale to też kwestia indywidualnych preferencji. Jeszcze się z tym nie spotkałem, by gdzieś ktoś wymuszał jedno konkretne narzędzie. Narzędzia zazwyczaj dobiera sobie programista. Jeśli znasz podstawy konsolowych poleceń gita, albo w miarę swobodnie korzystasz z jakiegoś narzędzia wizualnego, to jest dobrze. Znam masę hobbistów programistów, którzy nie korzystają z żadnego narzędzia do kontroli wersji. Znowu możesz się dzięki temu trochę odbić od szarej masy.
Wykazanie chęci do nauki. Nie kłam, ale znaj kierunek, w którym chciałbyś się rozwijać.
Nikt nie jest ekspertem we wszystkich dziedzinach. Jako początkujący nie jesteś dobry najprawdopodobniej w żadnej. Bądź szczery: przedstaw w jakim kierunku uczyłeś sie samodzielnie i wymień parę rzeczy, których chciałbyś się jeszcze nauczyć. Poopowiadaj trochę o jakimś swoim projekcie. Popisz się swoim entuzjazmem. Przyznanie się, że czegoś nie wiesz, albo znasz to bardzo słabo, nie jest niczym złym.
Źle wypadniesz jedynie, jeśli mówisz, że wiesz, a rozkładasz się na pierwszym pytaniu. „Potrafię to i to, chcę rozwijać się tak i tak, czy jest u Was taka możliwość?”. Pamiętaj, że to Ty też wybierasz pracodawcę i obie strony muszą się do siebie przekonać. Jeśli nie ta firma, to znajdzie się inna. Akurat w IT nie masz w tej kwestii na co narzekać.
Rozbijanie zadań na mniejsze części
Jeśli zadanie nad którym pracujesz wydaje się być zadaniem na więcej niż jeden dzień, to warto robić je na parę mniejszych.
Takie rozbijanie zadań, które prowadzi do efektywniejszej pracy jest cenną umiejętność.
Na początku trudno samemu wyrobić sobie taki nawyk dzielenia zadań. Dlatego polecam jak najszybciej poszukać sobie kogoś do wspólnej pracy nad jakimś projektem. Niby teoretycznie właśnie od tego są zadania grupowe na studiach, jednak u mnie zawsze w praktyce to tak nie działało…. bo całość robiła jedna osoba, a reszta albo robiła w zamian inne zadanie w pojedynkę, albo po prostu tej osobie płacono.
Banalnym przykładem rozbicia takiego zadania może być np. separacja logiki oraz GUI w aplikacji. Jeśli do zrobienia jest jakiś niestandardowy pop-up, który pojawia się po jakimś zdarzeniu, to można to łatwo rozbić na zadania: „logika” oraz „UI”.
Korzyści z takiego rozbicia:
- łatwiej jest się koncentrować na jednym, mniejszym, lepiej sprecyzowanym zadaniu,
- sprawniej można podzielić pracę na większą ilość pracowników,
- mniejsze części dużej całości łatwiej jest testować.
Osobnym zadaniem może być też sama konfiguracja środowiska. Nie panikuj w pierwszej pracy, jeśli pierwsze parę dni spędzisz nad konfiguracją swojego stanowiska pracy. Przy niektórych projektach to normalne, że parę dni należy poświęcić, by wszystkie narzędzia działały jak należy.
Nie wypisuj wszystkich technologii, o których kiedykolwiek słyszałeś, albo miałeś je na studiach
Często słyszę od doświadczonych kolegów, że nim więcej maja stażu pracy, tym mniej rzeczy mają w CV.
Wypisanie ogromnej ilości technologii w CV źle o Tobie świadczy. Możesz ewentualnie podzielić Twoje umiejętności na: „czuję swobodnie w” (tutaj 2-3 technologie) oraz „miałem kiedyś styczność”.
Np. technologie z mojego aktualnego CV to: Android SDK, Core Java i libgdx. Koniec.
Naucz się wykorzystywać w praktyce 2 wzorce projektowe
Wpis nie jest o tym, by uczyć Was wzorców. Chciałbym tylko zaznaczyć, że jest to ogromna wartość dodana, jeśli kandydat może pochwalić się znajomością (a najlepiej jeśli może pokazać je wykorzystane w praktyce w swoim projekcie) 2-3 wzorców projektowych.
Nie tylko wyglądacie wtedy lepiej w oczach pracodawcy, ale Wasze prywatne projekty zaczną być lepiej uporządkowane.
Ze swojej strony polecam strategie i obserwator. Tutaj macie playliste z tutorialami od Pana D. Banas, którego już kiedyś Wam polecałem.
Książka „head first design patterns”, też jest ok.
To na tyle…
…w moim następnym wpisie planuję opisać moje doświadczenia z pierwszych dni pracy jako programista. Łącznie w 3 firmach miałem „pierwsze dni”, więc myślę, że mam się czym z Wami podzielić. 🙂 Mam zamiar niedługo ruszyć z listą mailingową, by powiadamiać o nowych wpisach. Jeśli już teraz chcecie się zapisać, bo wyślijcie mi pustego maila na „matt (at) javadevmatt.pl„.
Jeśli chcecie pomóc w rozwoju projektu JavaDevMatt.pl i „Programisty Na Emigracji”, to możecie polubić fanpage. Niby nic wielkiego, ale dzięki temu łatwiej mi negocjować z potencjalnym sponsorem bloga, dzięki któremu możecie czytać/oglądać moje treści za darmo.
Zapowiedź nowego „Programisty Na Emigracji” + informacje na 2015 Współpraca z Magazynem Programista + Konkurs
to czego uzywasz do gita bo tak niezrozumiale belkoczesz, ze nie kumam
SourceTree 😀
Ostatnio w Empiku kupiłem sobie pewną gazetę o tworzeniu pierwszej strony www za 34zł, bo bardzo mi się przydadza 4 artykuły z niego. Gdybym miał kupić ten artykuł jaki teraz wrzuciłeś, sam jeden artykuł, to 34 zł zapłaciłbym bez zmrużenia oka. Świetna rzecz.
Hej. Dałem like 🙂
Dobry blog. Cieszę się, że wyjechałeś, mam szczerą nadzieje, że masz tam lepiej 🙂 Tez planuję wyjazd, ale muszę zdobyć doświadczenia więcej.
reswgrwegf – ja zrozumiałem 🙂
Jako, że nie muszę pisać na blogu odpowiedzi, bo linka mogę podać 😉 chętnie odpowiem w komentarzu. Mam nadzieje, że link do mnie się pojawi 😉
Dobry wpis. Popieram w wielu aspektach. Pracowałem na gicie, jednak za mało. Muszę się doszkolić we własnym zakresie. Na szczęscie mam prowizorycznego githuba – jak napiszę apkę w WPF MVVM (wlasnie skonczylem na dzisiaj 5 rano… masakra), to wrzucę, właśnie żeby się pochwalić. Ja mam już doświadczenie komercyjne w programowaniu i podzielam, że dopiero napisanie własnej apki tak na 1-3 miesiące pracy i rozwiązywania problemów pozwoli Wam się obeznać z technologią i pracą programisty. Tylko jest ten problem – finansów. Młody człowiek pragnie szmalu jak sucha gleba dżdżu i wolą się łapać prostych prac niż parę miesięcy pisać prostą apkę. Ja piszę, gdyż chcę ją sprzedawać. Za grosze, ale jednak. Zawsze to będzie dodatkowa kasa na domenki hihihi.
Jedna rzecz mnie uderza w programistach. Może ja po prostu nie jestem urodzonym programistą, tylko… kierownikiem. Chcę być w przyszłości project managerem i szczerze łapię się różnych prac związanych z programowaniem w technlogiach Microsoftu (nie jesteśmy konkurencją więc 🙂 )
Dzięki tej różnorodności uważam, że będę mógł w każdej chwili zająć się szeroko pojętym biznesem, a jeśli nie, to właśnie project managerem za dobre pieniądze, kiedyś . Ja nie chce być super specjalistą, który zna daną technologię na wylot, wolę mieć od tego ludzi. Ja jednak muszę rozumieć dobrze każdą z nich, by zarządzać projektami, które się trafią.
Dlatego z tymi technologiami w CV to bym się zastanowił czy nie pisać w CV. Moim zdaniem pisać jak wspomniałeś, ale z uwzględnieniem stopnia znajomości. Jeśli firma szuka programisty zdecyduje się na programistę, który się wąsko specjalizuje, jeśli szuka kogoś, kto ma być w przyszłości kierownikiem, to moim zdaniem zastanowią się nad osobą, która jest wszechstronna.
Pozdrawiam i życzę powrotu do PL
W jakim kraju pracujesz?
Niemcy, Hamburg
Wspaniale! Takiego głosu było trzeba, dajesz mi inspiracje! Podążaj tą drogą! Wszystkiego dobrego
Świetny Blog, świetne filmiki. Zaczynam studiowanie informatyki i przyszłość chcę wiązać z programowaniem. Od podstawówki do liceum miałem profile humanistyczne, dlatego wiem, że muszę wiele nadrobić. Niektórzy programują już w podstawówce (osobiście im zazdroszczę dojrzałości i pomysłu oraz oczywiście realizacji swojego celu). Nie miałem zielonego pojęcia o programowaniu, na razie mamy C oraz C++. Często się jednak demotywuję, ponieważ brak jakichkolwiek motywacji w postaci widzenia swoich wyników i brak pomysłów na ćwiczenie danych formuł, funkcji powoduje, że zamykam lapa i robię coś innego. Bardzo się cieszę, że znalazłem ten blog i profil na YT. Dzięki wielkie i liczę na rozwój Twojego przedsięwzięcia,a zarazem swój.
[…] Pierwsza praca jako programista […]
Ja akurat robię projekcik w formie strony www, niby proste wszystko ale najgorzej wychodzi zastanawianie się czy to tak czy tak i siak ma działać bo mam albo sporo innych pomysłów, które po jakimś czasie uważam za zbędne albo myślę sobie by nagle poprawić coś w kodzie i nie mogę zrobić od a do z takiej strategi by najpierw działało wszystko tak jak trzeba a potem zmienię sobie coś i tak robię to chaotycznie ale idzie do przodu. Mam nadzieje że gdzieś niedługo skończę bo chciałbym za następny projekt się zabrać pewna mała karciana gierka, jest pewna jedna strona ale ma strasznie zryty interfejs i nic nie aktualizują poza dodawaniem nowych kart. Z kontroli wersji na razie nie korzystam bo póki co nie czuję potrzeby go używać ale douczyć się go nie będzie problemem. Co jest jeszcze śmieszne u mnie w szukaniu pracy, albo zawsze brakuje mi jakiejś wiedzy z danej technologi którą uważają za wymaganą albo piszą że wymagane doświadczenie albo jak już jest coś odpowiedniego dla mnie to cholera za daleko, wyjazd nie jest problemem ale problemem jest znalezienie stancji czy też utrzymanie go a nie każdego stać na wszystko. Mam też pewne problemy rodzinne gdzie niestety ale muszę być w domu. Ojciec i brat zrzucili wszystko na mnie a ja że najmłodszy to zawsze traktowany jak ten najgorszy i wszystko na mnie było zrzucane.
Gość Derek Banas wymiata na Youtube.
Ja dodam jeszcze inne kanały dla poczatkujacych z moje plajlisty
– Travisa http://www.youtube.com/user/DevTipsForDesigners/playlists
– Brada vel. TechGuy http://www.youtube.com/user/TechGuyWeb/playlists
Konstruktywne, dziękuje za ten wpis. Właśnie modyfikuję swoje cv i wysyłam na praktyki. Pozdro 🙂
Hej 🙂
Po przeczytaniu tego wpisu wziąłem się za modyfikowanie swojego CV i pisanie listu motywacyjnego. Startuje do Codete w Krakowie na stanowisko Juniora JavaScript 🙂 Trzymajcie kciuki 🙂
Dzięki za wpis, jest super !
Mi udało się znaleźć bardzo fajną pracę, o dziwo przez portal oferia. Wrzuciłam ogłoszenie, że szukam stażu i po kilku dniach miałam trzy odpowiedzi. Praca dla programistów jest zawsze, bardzo opłacalny zawód 🙂
Dzieki za interesujacy post, terez bede tu wpadac czesto 🙂