Co po studiach informatycznych?

Absolwenci studiów dzielą się na dwie grupy (dla uproszczenia) – tych, którzy już pracują i tych,­ którzy jeszcze nie mieli okazji poznać smaku prawdziwej pracy :) Tekst chciałbym zaadresować głównie do tych, którzy jeszcze nie pracują, ale myślę, że wszyscy mogą coś zyskać przeczytawszy go uważnie. A więc…

...co po studiach?

To pytanie pewnie zadaje sobie tylko część z absolwentów studiów informatycznych. Część – jak wspomniałem - już gdzieś pracuje i myśli, że znalazło miejsce na dopracowanie do emerytury :) Pozostali właśnie rozglądają się za pierwszą pracą. Bez względu na to, do której grupy należysz, jesteście w podobnej sytuacji.


Nie jestem pewien, jaki jest średni czas życia firm technologicznych, ale większości z nich raczej nie będzie na rynku, gdy będziesz przechodzić na emeryturę.


Co to znaczy?

Że będziesz od czasu do czasu zmieniał pracę.

Co więcej - o ile wiem - średni czas pracy programisty w jednej firmie wynosi około dwóch lat. Kończąc studia masz jakieś 25 lat, do emerytury pozostaje jakieś 40. Czyli średnio 20 razy zmienisz pracę. Całkiem sporo. Musisz więc cały czas być „na bieżąco”, wiedzieć co się dzieje na rynku i ciągle się uczyć. Jeśli opuszczając mury uczelni cieszyłeś się, że to już koniec nauki mam dla Ciebie złą wiadomość – to dopiero początek.


Szukanie pracy to coś co będziesz robić często

Gdy zaczynałem swoją pierwszą pracę jako programista, rynek był podzielony pomiędzy C/C++, Perla i Visual Basic :) Java właściwie już była na rynku, ale wciąż spoglądano na nią podejrzliwe, jako wolną i niezbyt stabilną alternatywę C/C++ na desktopach i powolną alternatywę dla Perla na serwerach – dziś wybór jest zdecydowanie szerszy, nie wspominam nawet o tym, że oczekiwania w stosunku do programów są także nieco inne.


Wiedza ze studiów (zakładam, że sumiennie pracowałeś przez cały czas) jest ważna, ale niewystarczająca!


To, co wiesz, daje Ci podstawy do dalszej nauki. Pewnie dowiedziałeś się wszystkiego o teorii relacyjnych baz danych. Pewnie nawet udało Ci się odpytać jakąś przykładową bazę danych stosując proste zapytania, zapytania z podzapytaniami, może także ze skorelowanymi podzapytaniami.
Możliwe, że robiłeś także inner joiny, left joiny, group by’je…
Możliwe, że zastanawiasz się właśnie o czym ja piszę!
Miałeś na pewno wykłady z algorytmów (sortowanie, wyszukiwanie, przeszukiwanie grafów itd.), architekturę systemów operacyjnych (a może po prostu instalowałeś mini-dystrybucję linuxa i jakiś Windows Server?).
Matematyka, fizyka, jakiś język programowania, a może nawet dwa?

To wszystkie jest istotne. Ale w pracy oczekiwania są nieco większe :)


Zanim zaczniesz szukać pierwszej pracy.

Zakładam, że na studiach chociaż odrobinę zainteresował Cię jakiś język programowania. Całkiem duże szanse, że jest to Java lub C# (coraz rzadziej C lub C++). Zakładam także, że właśnie zdecydowałeś, że zwiążesz swoją najbliższą przyszłość z jednym z nich. Staje się on twoim językiem pierwszego wyboru.

Rozejrzyj się w sieci, sprawdź, z jakich narzędzi korzystają zawodowcy używający tego języka (narzędzia do budowania oraz dbania o jakość kodu, zarządzania zależnościami, edytory; sprawdź, gdzie szukać dodatkowych bibliotek itd.).


Kilka umiejętności absolutnie niezbędnych:

  • standardy kodowania w języku
    Sprawdź na stronie języka (lub jeśli takiej nie ma, na stronie utrzymywanej przez społeczność języka) jakie obowiązują standardy kodowania, nazywania elementów programu (klasy, metody, zmienne, stałe) oraz jakie są obowiązujące standardy formatowania kodu
  • standardy pisania dokumentacji
    W różnych językach wygląda to dość różnie, ale dziś większość języków dysponuje jakimś przyjętym standardem dokumentowania kodu (zwróć także uwagę, że pojawiają się także głosy ekspertów, które sugerują, aby kod pisać tak, żeby nie było potrzeby go dokumentować – i w sumie mają rację :))
  • frameworki do testowania
    sprawdź jak pisać testy (jednostkowe, integracyjne, funkcjonalne, wydajnościowe, akceptacyjne), naucz się używać najpopularniejszej biblioteki (frameworka) do testowania (w przypadku Javy jest to jUnit, ostatnio coraz popularniejszy staje się Spock), sprawdź, jakie dostępne są dodatkowe narzędzia (np. Mockito)
  • inne narzędzia dostępne dla języka (wbudowane oraz zewnętrzne)
    Z dystrybucją języka zwykle dostarczane są narzędzia dostępne w jej katalogu /bin (dla Javy to $JAVA_HOME/bin)/ - naucz się ich używać korzystając z systemowego wiersza poleceń; poszukaj narzędzi dodatkowych (tzw. build tools – Maven, Ant (no dobra, Ant to historia, możesz go sobie darować), Gradle, żeby wymienić tylko trzy najpopularniejsze, inne języki – np. Elixir – mogą dostarczać standardowe narzędzia tego typu)
  • web, desktop, terminal, Inne?
    Pisanie aplikacji dla różnych środowisk zwykle wymaga użycia zewnętrznych bibliotek (akurat Java ma w standardowej dystrybucji bibliotekę Swing do pisania aplikacji okienkowych na desktop oraz – w pewnym sensie w standardowej – także biblioteki do pisania aplikacji webowych), różne języki w różny sposób wspierają te środowiska;
  • popularne frameworki
    Dla Javy to biblioteki wspomagające pracę z relacyjnymi bazami danych – Hibernate, EclipseLink, Cayenne) oraz standardowy zestaw interfejsów JPA, biblioteki obsługi szablonów (Velocity, Thymeleaf, freemarker), Spring, Playframework, Akka etc…
  • narzędzia kontroli wersji (VCS)
    Poznaj narzędzia do kontroli wersji. Dziś Git w zupełności wystarcza, ale warto sprawdzić, co czyni go lepszym od Subversion – wciąż są firmy używające właśnie tego produktu – albo Mercuriala, Bazaara czy innych. Większość z nich oferuje podobne możliwości, jednak z jakiegoś powodu jest ich właśnie tak dużo. Wybierz jedno (najpopularniejsze zwykle jest najlepsze) i naucz się go, poszukaj jakichś książek, kursów online i do roboty.
  • korzystanie z terminala
    Naucz się korzystać z terminala oraz pisać w nim skrypty (bash, ksh, power shell).
  • wybierz IDE
    Na rynku jest wiele rozwiązań (Java -> Eclipse, Netbeans, IntelliJ IDEA). Sprawdź wszystkie i wybierz jedno, które Ci odpowiada i poznaj je dobrze (makra, skróty klawiszowe). Osobiście polecam dobre poznanie Vima lub Emacsa. Napiszę o tym więcej innym razem (zarówno o pracy w terminalu jak i tych wspaniałych i potężnych edytorach).

Jak widzisz, przed Tobą dużo pracy. Naprawdę. Ale jeśli prawidłowo tę pracę zaplanujesz, to jest to do zrobienia. Oczywiście, przede wszystkim porządnie naucz się wybranego przez siebie języka, przejrzyj wszystkie jego możliwości składniowe, te używane codziennie przez wszystkich i te używane rzadziej, zapoznaj się z idiomami języka, dobrymi praktykami wypracowanymi przez innych programistów. Zapoznaj się z biblioteką standardową. Sprawdź literaturę opisującą język od strony praktycznej.


Jak szukać pierwszej pracy?


Projekty ze studiów na GitHubie?


Jeśli robiłeś jakieś projekty w trakcie studiów, to zapewne masz jakiś kod do pokazania. Załóż konto na GitHubie/GitLabie/Bitbuckecie czy innym miejscu, które pozwoli podzielić się kodem. Umieść tam kod, możesz oczywiście nieco poprawić to, co napisałeś na drugim czy trzecim roku. Zainteresowani przejrzą zmiany i będą mogli zobaczyć, że czegoś się od tego czasu nauczyłeś.


Projekty open source?


Być może masz zacięcie do kodowania a nie miałeś okazji uczestniczyć w komercyjnych projektach. Sprawdź repozytoria związane z wybranym przez Ciebie językiem/platformą. Często programiści pracujący nad kodem zostawiają mniej skomplikowane zadania dla programistów takich jak Ty. Możesz dzięki temu poznać jednocześnie smak przygody zwanej open source, ale także prawdziwej pracy nad prawdziwym kodem z ludźmi, którzy w dużej części mają już spore doświadczenie. Każda linia twojego kodu powie o Tobie więcej niż test na rozmowie kwalifikacyjnej.


Przygotuj CV


Chwilę po studiach najczęściej nie masz wiele do napisania. Pisz więc prawdę. Pochwal się indeksem (jeśli jest czym). Wspomniane prace semestralne lub roczne także mogą rzucić światło na Twoje nastawienie.

Na tym etapie kariery warto rozważyć także napisanie listu motywacyjnego. Po kilku latach będzie to już niepotrzebny wysiłek. Twoje dokonanie będą mówić więcej niż mógłbyś w takim liście napisać.


Zgłoś się do jakiejś firmy pośredniczącej, która zatrudni Cię w jakiejś formie (UoP, B2B) i będzie wynajmować właściwym pracodawcom. Takie firmy zwykle postarają się o szkolenia dla Ciebie, a także o coś w rodzaju płatnego stażu. Najlepsze z nich dopasują Cię do zespołu o różnym stopniu kompetencji oraz upewnią się, że będziesz miał dobrą opiekę bardziej doświadczonych kolegów i nie spadnie na Ciebie praca ponad Twoje możliwości.


Jeśli jesteś dobrze przygotowany, Twoja kariera będzie się rozwijać w sposób zrównoważony. Z każdym rokiem będziesz zdobywał nowe doświadczenia stając się coraz lepszym rzemieślnikiem, nie bojącym się podejmować świadomie coraz większych wyzwań zawodowych, poznasz nowe języki, frameworki. W końcu Twój zbiór doświadczeń zawodowych wsparty wiedzą pozwoli Ci zostać nauczycielem i mentorem dla młodszych kolegów, właśnie takich, jak Ty dziś.

W pierwszej pracy dużo się nauczysz, jeżeli się do tego odpowiednio przygotujesz.



Już jesteś w pracy

Zapoznaj się z kulturą firmy, do której trafiłeś, przyjrzyj się metodom pracy oraz ogólnie przyjętym standardom. Na początku więcej słuchaj i pytaj. 

Stare powiedzenie mówi, że mamy dwoje uszu i jedne usta, by dwa razy więcej słuchać niż mówić – nie zawsze mi się to niestety udawało :)),

Jeśli jednak dostrzeżesz miejsca, które potrafisz nieco ulepszyć (proces budowania, testowania, dokumentowania kodu) zasugeruj na spotkaniu zespołu, zgłoś się do tej pracy, jeśli jesteś pewien, że przy jakimś wysiłku i ewentualnie pomocy, którą mógłbyś otrzymać, poradzisz sobie z nią. Poza tym:

  • W miarę możliwości bierz odpowiedzialność za efekty pracy swojego zespołu.
  • Zapytaj kolegów z zespołu, jakie blogi śledzą, jak się rozwijają, być może zaproponują ci jakieś interesujące książki czy artykuły.
  • Śledź nowości wydawnicze – sprawdzaj strony popularnych wśród programistów wydawnictw – Manning, Packt, Apress, Pragmatic Programmers, Addison Wesley, O’Reilly.
  • Czytaj co najmniej jedną książkę miesięcznie. Na pewno nie zabraknie Ci materiału; często będziesz walczył (nie walcz!) z pokusą, by czytać więcej.
  • Nie żałuj swojego czasu (tzw. prywatnego) na swój rozwój. Twój pracodawca oczekuje, że w godzinach pracy będziesz dla niego pracował, a nie uczył się. Czytanie odłóż na wieczór lub wczesny ranek przed pracą.

Kilka książek, które warto przeczytać


  • Jak stać się lepszym programistą, (P. Goodlife)
  • Sprawny programista. Pracuj, zarabiaj i zdobywaj kwalifikacje J. Sonmez
  • Lekcja programowania, B. W. Kernighan, R. Pike
  • Hakerzy i malarze, Paul Graham
  • Pragmatyczny programista, A. Hunt, D. Thomas

Jest ich znacznie więcej. Czytanie na długie tygodnie :)


Na koniec

Twoja kariera należy do Ciebie. Jest jak ogród - im wcześniej zaczniesz o nią dbać, tym lepiej się rozwinie. I – tak jak w ogrodzie – ważna rada: codzienna pielęgnacja jest zdecydowanie łatwiejsza niż nerwowe nadrabianie zaległości chwilę przed rozmową kwalifikacyjną.


Na sam koniec (naprawdę)


Naucz się programować w LISP-ie (dziś może to być Clojure).

📚📚📚

KONKURS: Po przeczytaniu artykułu opisz w kilku zdaniach, w komantarzu posta na fb lub linkedin, swoje doświadczenie z 1 pracy.

Jak to wyglądało? Czy miałeś mentora? Najciekawszą odpowiedź nagrodzimy książką "Pragmatyczny programista. Od czeladnika do mistrza".

🎁🎁🎁

Podziękowania


W tym miejscu chciałbym podziękować wszystkim, z którymi prowadziłem rozmowy rekrutacyjne/weryfikacyjne. To właśnie te rozmowy dały mi inspirację i paliwo do napisania tych przemyśleń. Dzięki chłopaki i dziewczyny za długie rozmowy i miło spędzone popołudnia i wieczory na rozmowach o programowaniu, językach, narzędziach, technikach programowania i technologii ogólnie. Podziękowania także kieruję do Dominika i Mai, dzięki którym mogłem w ostatnim czasie odbyć ponad setkę takich rozmów. Każdy była w jakiś sposób pouczająca i inspirująca.