Jak zostać programistą?

Ten artykuł należy do serii Przebranżowienie i praca programisty. Listę wszystkich artykułów w tej serii znajdziesz tutaj.

W tym artykule przedstawię kroki, które trzeba moim zdaniem podjąć, aby zostać programistą. Zakładam, że nie masz doświadczenia w programowaniu. Najpierw jednak wyjaśnię dlaczego, moim zdaniem, warto zostać programistą. Wspomnę też o wyzwaniach związanych z pracowaniem jako programista.

Dlaczego warto zostać programistą?

Programowanie to bardzo ciekawe zajęcie – z niczego tworzymy coś, co zaczyna działać przed naszymi oczami, wedle naszego zamysłu. Jest to, przez większość czasu, bardzo satysfakcjonujące zajęcie. Gdy myślę o programowaniu, to najbliższymi porównaniami, jakie przychodzą mi do głowy, to malowanie i rysowanie. Jedyną granicą tego, co możemy stworzyć, jest nasza własna wyobraźnia.

Pracując jako programista mamy szansę poznać bardzo wiele interesujących osób, na różnych stanowiskach i pracujących w różnych działach, a niekiedy także i innych firmach. Praca z takimi osobami jest bardzo rozwijająca i, ponownie, zazwyczaj satysfakcjonująca.

Ponadto, niezmiennie od wielu lat, zarobki programistów są na bardzo wysokim poziomie, w szczególności stawki dla senior developerów pracujących „na kontrakt”, czyli samozatrudnienie (tzn. prowadzimy jednoosobową firmę i sami płacimy sobie ZUS). Oczywiście, wysokie stawki dostępne są dopiero po przepracowaniu wielu lat jako programista, ale nie są nieosiągalne nawet w przypadku, gdy postanowisz się przebranżowić z innego zawodu.

O programistach mówi się także, że w ich przypadku mamy do czynienia z „rynkiem pracownika”. Ofert pracy jest tak dużo, że zmiana pracy zazwyczaj nie stanowi problemu. Wynika to z niedoboru programistów na polskim rynku. Praca jako programista pozostanie, moim zdaniem, solidnym wyborem.

Uważam, że zostanie programistą to bardzo dobra inwestycja w samego siebie. Popyt na programistów nie będzie malał – tworzone jest coraz więcej oprogramowania, które trzeba utrzymywać i rozwijać.

Jakie są wyzwania i wady pracy jako programista?

Za jedną z wad pracy jako programista można uznać to, że... mało się programuje, a przynajmniej mniej, niż mogłoby się wydawać. Szczególnie programiści z dłuższym stażem na projekcie i programujący od wielu lat przeznaczają w pracy dużą część swojego czasu na:

  • wspieranie współpracowników, w tym: przekazywanie wiedzy, robienie code review, pomaganie w implementacji wymagań i projektowanie kodu źródłowego,
  • ustalenia wymagań z osobami biznesowymi,
  • spotkania techniczne i Scrumowe (więcej o Scrumie tutaj).

Z powyższego od razu wynika, że jeżeli ktoś uważa, że będzie cały tydzień w spokoju pisał kod źródłowy, to jest na to mała szansa. W dzisiejszych czasach pracuje się w wieloosobowych zespołach i ma się do czynienia z wieloma osobami z działów biznesowych. To powoduje, że chodzimy na wiele spotkań i mamy dużo innych zadań poza programowaniem. Ponadto, posiadanie umiejętności komunikacji staje się bardzo ważne.

Praca jako programista to także ciągła nauka. Nie można zostać w miejscu, bo wykorzystywane technologie idą naprzód. Tworzone są nowe frameworki i biblioteki, które czasem wypierają stare, a czasem stają się kolejnymi elementami całości. Powoduje to, że programiści muszą dużo się uczyć i cały czas się rozwijać, aby nie zostać w tyle w kontekście rynku kompetencji programistycznych.

Na końcu wspomnę, że praca jako programista może być bardzo stresująca. Presja kierowników projektów i innych osób zarządzających jest nierzadko ogromna i przytłaczająca. Szczególnie, gdy projekt zaczyna przekraczać założony budżet bądź ramy czasowe, a klient zaczyna się niecierpliwić (a dzieje się tak, niestety, często). Wielokrotnie pracowałem w takich warunkach, więc z doświadczenia mogę powiedzieć, że programowania na projekcie komercyjnym nie można porównywać do programowania w domu. To pierwsze jest zdecydowanie trudniejsze i bardziej wymagające, zarówno psychicznie, jak i jeśli chodzi o wymagany wachlarz umiejętności oraz wiedzę techniczną.

Od czego zacząć?

Wybór języka programowania

Do wyboru masz wiele języków programowania. Od tego, który wybierzesz, będzie zależała Twoja potencjalna praca w przyszłości. Ten artykuł napisałem z myślą o osobach, które chcą zostać programistami języka Java.

Ofert dla programistów Java jest bardzo dużo na rynku i znalezienie pierwszej pracy nie powinno stanowić problemu, jeżeli będziesz miał solidne podstawy.

Programując w Javie możesz tworzyć aplikacje backendowe, czyli pisać logikę, która stoi za frontendem. Backend to część systemu odpowiedzialna za wszystko to, co dzieje się poza widokiem użytkownika – zapis i odczyt danych z bazy danych, generowanie raportów, przygotowywanie zestawu danych do wyświetlenia dla użytkownika, wyszukiwanie danych itd. Frontend to z kolei warstwa aplikacji, z której korzystają bezpośrednio użytkownicy – np. strona internetowa.

Możesz także tworzyć gry na telefony z systemem Android, aplikacje frontendowe korzystając np. z technologii Java Server Faces, aplikacje analityczne i wiele więcej. Język Java posiada bardzo szeroki wachlarz zastosowań.

Inne języki programowania

Wspomnę jeszcze o kilku innych, popularnych językach programowania, które mogą być alternatywą dla języka Java:

  • C# – odpowiedź firmy Microsoft na język Java – w C# będziesz tworzył aplikacje podobne do tych tworzonych przez programistów Java, z pominięciem gier na telefony Android.
  • JavaScript – najpopularniejszy język używany do tworzenia aplikacji webowych. Bardzo szybko się rozwija i posiada setki bibliotek i frameworków. Jest dość wymagający, jeśli chodzi o naukę. Szybki rozwój powoduje, że trzeba uczyć się na bieżąco, aby nie pozostać w tyle.
  • Python – interesujący język, który umożliwia tworzenie szerokiego wachlarza aplikacji. Jest często używany w analizie danych. Pierwsza wersja wyszukiwarki Google była napisana w Pythonie.
  • C i C++ to języki, które są prekursorami Javy oraz C#. Często pisane są w nich gry oraz różne zaawansowane aplikacje wymagające wysokiej wydajności. Wydaje mi się, że języki te mogą być zbyt skomplikowane na początek przygody z programowaniem, a poprzeczka posiadanych umiejętności i wiedzy dla programistów C i C++ jest szczególnie wysoka jeśli chodzi o znalezienie pracy.
  • Go i Kotlin – relatywnie nowe języki programowania. Go został stworzony przez Google, a Kotlin przez firmę JetBrains, która jest twórcą m. in. narzędzia IntelliJ IDEA.

Jeżeli szukasz alternatywy dla Javy, to może nią być C#. Jeżeli chcesz tworzyć aplikacje webowe, to wybierz JavaScript, ale miej na uwadze, że będziesz musiał nauczyć się wielu dodatkowych technologii i frameworków, które zmieniają się szybko i w dużym zakresie. Python to bardzo interesujący język z ciekawą składnią i dużymi możliwościami.

Nie powinieneś mieć trudności ze znalezieniem pracy, jeżeli nauczysz się Javy, C#, JavaScriptu bądź Pythona (oraz, oczywiście, szeregu innych technologii i narzędzi, które są wymagane do pracy programisty). Trudniej może być z C, C++, Go, oraz Kotlinem, ponieważ, moim zdaniem, te języki są bardziej wymagające i ich nauka zajmie więcej czasu.

Jeżeli chcesz dowiedzieć się więcej o danym języku programowania, to poczytaj o nim na Google. Możesz też przejrzeć oferty pracy na różnych stronach (np. na No Fluff Jobs) aby zobaczyć, jak rozkłada się zapotrzebowanie na programistów danego języka.

Zapoznanie się z wymaganiami

Jeżeli myślisz o przebranżowieniu na programistę, to polecam Ci przeczytać trzy poniższe artykuły, które przygotowałem dla osób, które myślą o zmianie pracy. Dowiesz się z nich o najważniejszych technologiach, narzędziach, oraz umiejętnościach, które są, moim zdaniem, potrzebne do pracy jako programista Java. W artykułach tych zawarłem także informacje, co trzeba wiedzieć o danej technologii/narzędziu, jakie są ewentualne alternatywy, oraz czy są one dedykowane dla programistów Java:

Innym wartym przeczytania artykułem jest wywiad z moim bratem ciotecznym, który przebranżowił się na programistę Java z zupełnie innego zawodu z moją pomocą, nie mając wcześniej doświadczenia w programowaniu. W nowym zawodzie pracuje on już prawie trzy lata. Z wywiadu dowiesz się m. in. jaki był proces nauki i ile trwała, jak wygląda praca programisty z punktu widzenia osoby, która się przebranżowiła, oraz ile czasu zajęło znalezienie pracy:

Wywiad z osobą, która przebranżowiła się na programistę

Kursy programowania, mentoring, samodzielna nauka

W ostatnich latach powstało bardzo wiele firm, które oferują szkolenie na programistę. Podyktowane jest to ogromnym zapotrzebowaniem na programistów na polskim rynku. Nie znam nikogo, kto ukończyłby taki kurs, ale wiem, że są to popularne rozwiązania – za pewną kwotę (różniącą się pomiędzy różnymi firmami), otrzymujemy zestaw kursów, które mają przygotować kursanta do pracy jako programista na wybranym stanowisku. Kursy (w formie stacjonarnej) prowadzone są przez różnych nauczycieli.

Jedna, często powtarzająca się opinia, z którą spotkałem się rozmawiając z wieloma współpracownikami, na temat osób po komercyjnych kursach programowania jest taka, że osobom tym brakuje „bazy”, tzn. najważniejszych podstaw związanych z programowaniem.

Wydaje mi się, że w dzisiejszych czasach istnieje tak wiele technologii, bibliotek, i narzędzi, z którymi trzeba się zaznajomić pracując jako programista, że być może komercyjne kursy przeznaczają na nie zbyt dużo uwagi kursantów. Jest to jednak tylko mój domysł. Jeżeli myślisz o zapisaniu się na kurs programowania, dokładnie przeczytaj jego opis, zobacz, kim są nauczyciele, a także sprawdź opinie w Internecie. Na pewno taki kurs, stworzony z myślą o osobach, które chcą zmienić pracę, jest dużym krokiem w kierunku przebranżowienia.

Inną możliwością jest nauka we własnym zakresie i na tej opcji skupiam się w tym artykule. Dodatkowo, ciekawym rozwiązaniem jest znalezienie mentora, który dbałby o kierunek naszego rozwoju, i którego moglibyśmy poprosić o pomoc, gdy utkniemy na jakimś problemie, lub nie będziemy wiedzieli czego uczyć się w następnej kolejności.

Samodzielna nauka pozwala nam na narzucenie sobie własnego tempa i przyswajanie materiału wtedy, kiedy mamy na to czas. Jeżeli jednak chcesz w najbliższej przyszłości myśleć o zmianie pracy, to musisz wykazać się sporym zapałem i chęcią nauki. Wydaje mi się także, że wymogiem jest, po prostu, polubienie programowania – bez tego będzie ciężko. Znalezienie mentora, który pomoże Ci w trudnych chwilach i pokieruje Twoim procesem nauki jest, moim zdaniem, bardzo dobrym pomysłem.

Jeżeli myślisz o przebranżowieniu się na programistę we własnym zakresie, to chętnie Ci pomogę – skontaktuj się ze mną, najlepiej mailowo:

przemyslaw.kruglej@gmail.com

Zapraszam także na kanał Discord, na którym możemy porozmawiać o programowaniu i pracy programisty.

Rozpoczęcie nauki

Język programowania

Podstawą programowania jest nauka języka programowania. Nie ma tutaj znaczenia, czy chcesz docelowo pracować jako programista Java, C#, C++, Python, JavaScript, czy też wybierzesz jeszcze inny język. W pierwszej kolejności musisz nauczyć się podstaw programowania w języku, na który się zdecydujesz. Wszystkie pozostałe technologie i narzędzia będą uzupełnieniem Twojej wiedzy.

Warto zwrócić tutaj uwagę, że większość języków programowania ma wiele cech wspólnych i ucząc się podstaw programowania w jednym z nich będziesz, w mniejszym bądź większym stopniu, w staniu korzystać z innych języków po zdecydowanie krótszej ich nauce. Dla przykładu:

  • zmienne,
  • instrukcje warunkowe,
  • pętle,
  • tablice,
  • metody,
  • klasy,

znajdziesz praktycznie w każdym nowoczesnym języku programowania. Składnia kodu będzie się różnić pomiędzy językami, ale zasada działania będzie taka sama lub bardzo podobna.

W pierwszej kolejności zacznij od nauczenia się podstaw wybranego języka. Jeżeli jest to Java, to proponuję mój kurs Nauka programowania w języku Java od podstaw. Przygotowałem go z myślą właśnie o osobach, które nie miały wcześniej doświadczenia z programowaniem, a które myślą o przebranżowieniu się. Poznasz kolejne elementy tworzenia własnych programów w języku Java, a na końcu każdego rozdziału znajdziesz pytania, które sprawdzą zrozumienie materiału, oraz zadania, które pozwolą na jego przećwiczenie. Do wszystkich pytań i zadań przygotowałem szczegółowe odpowiedzi i rozwiązania.

Od samego początku musisz pamiętać o najważniejszym aspekcie nauki programowania: musisz pisać bardzo dużo kodu źródłowego. Jest to jedyny sposób na nauczenie się programowania. Jeżeli poprzestaniesz głównie na teorii, to efekt będzie podobny jak do czytania o tym, jak malować obrazy, bez faktycznego dotknięcia pędzla, lub czytanie o teorii muzyki bez ćwiczeń na instrumencie.

Jeżeli w trakcie nauki nie będziesz czegoś rozumiał lub będziesz się zastanawiał, jak pewny kod źródłowy zadziała w konkretnym przypadku, to otwórz swój edytor kodu i napisz prosty przykład, za pomocą którego sprawdzisz dane zagadnienie. Ponadto, pisz małe programy, eksperymentuj, dodawaj funkcjonalności poznane w kolejnych rozdziałach do programów, które napisałeś wcześniej, rób zadania z końców rozdziałów itd. Nie ma dużego znaczenia, co będziesz pisał – na początku najważniejsze jest zaznajomienie się ze składnią języka programowania i dojście do momentu, w którym nie będziesz musiał myśleć „jak napisać instrukcję warunkową” lub „jak się pisało pętlę?”. Gdy pisanie różnych instrukcji będzie przychodziło automatycznie, będziesz mógł pisać więcej kodu w krótszym czasie, co przełoży się na przyspieszenie procesu dalszej nauki.

W związku z wymogiem pisania kodu źródłowego, najlepiej byłoby, gdybyś potrafił pisać szybko na klawiaturze bez patrzenia na nią. Jeżeli na razie tego nie potrafisz, to warto ćwiczyć tę umiejętność w przerwach od programowania, pisząc dowolny tekst. Ta umiejętność znacząco ułatwi Ci naukę, ponieważ będziesz w stanie szybciej pisać kod źródłowy. Raz nauczona zostanie na zawsze.

Skróty klawiaturowe

Twój proces nauki znacząco przyspieszy znajomość skrótów klawiaturowych, szczególnie tych, które pozwalają na szybkie manipulowanie i przemieszczanie się po kodzie źródłowym. Stosowanie skrótów klawiaturowych zamiast myszki pozwala kilkukrotnie przyspieszyć wiele operacji. Dzięki nim będziesz w stanie szybciej pisać kod źródłowy, co przełoży się bezpośrednio na tempo nauki programowania. Uwierz mi na słowo – skróty klawiaturowe dają sporo korzyści.

Przygotowałem krótką listę skrótów klawiaturowych, które są moim zdaniem szczególnie przydatne dla programistów: Skróty klawiaturowe dla programistów – znajdziesz tam również wersję do druku w formacie PDF. Na początek szczególnie polecam skróty z rozdziału Manipulacja tekstem i poruszanie się po tekście.

Linia poleceń

Dodatkowo, na początku przygody z programowaniem warto zaznajomić się z korzystaniem z linii poleceń. Jest to nieodzowna umiejętność każdego programisty, niezależnie od wybranego języka programowania. Jak korzystać z linii poleceń oraz najważniejsze związane z nią zagadnienia znajdziesz w moim artykule Podstawy linii poleceń.

IntelliJ IDEA

IntelliJ IDEA to środowisko programistyczne, w którym piszesz kod źródłowy swoich programów, zarządzasz nim, uruchamiasz, wywołujesz testy itp. IDEA zawiera bardzo wygodny edytor kodu, który koloruje składnię kodu i wskazuje na bieżąco znalezione w nim błędy. Nauczenie się korzystania z tego narzędzia przyspieszy i ułatwi Twój proces nauki – napisałem szczegółowy artykuł o tym, jak używać najważniejszych funkcjonalności IntelliJ IDEA, krok po kroku: IntelliJ IDEA w akcji. Tego narzędzia będziesz, najprawdopodobniej, używał także w pracy.

Dobrze znać IntelliJ IDEA i korzystać z niego, ale musisz być w stanie kompilować i uruchamiać swoje programy z poziomu linii poleceń za pomocą kompilatora języka Java oraz Maszyny Wirtualnej Java. Jak to zrobić dowiesz się z mojego kursu Nauka programowania w języku Java. To zagadnienie było tematem jednego z pierwszych pytań na mojej pierwszej rozmowie o pracę jako programista.

Szukanie w Internecie

Szukanie odpowiedzi w Internecie to ważna umiejętność, która będzie Ci bardzo potrzebna na początku nauki. Przeszukiwania Internetu trzeba się nauczyć – co prawda często wystarczy wpisać w wyszukiwarce kilka fraz związanych z problemem lub wkleić komunikat błędu, ale niekiedy trzeba się sporo naszukać, aby znaleźć odpowiedź.

Będąc w stanie samemu szukać odpowiedzi uniezależnisz się od pomocy innych osób, co, w większości przypadków, pozwoli Ci na szybsze rozwiązywanie zaistniałych problemów.

Język angielski

Znajomość języka angielskiego jest wymagana w większości przypadków. Po pierwsze, większość materiałów, z których będziesz korzystał podczas nauki i pracy, napisanych jest w tym języku. Mam tutaj na myśli dokumentacje, książki, artykuły, odpowiedzi na StackOverflow itd. Po drugie, programiści często pracują na międzynarodowych projektach, na których na porządku dziennym przeprowadza się rozmowy w języku angielskim.

W związku z powyższym, wszelki kod źródłowy na projektach komercyjnych powinien stosować anglojęzyczne nazwy. Nie spotkałem się w pracy, aby korzystano w kodzie z języka polskiego (poza okazjonalnymi komentarzami). Spotkałem się, natomiast, z kodem ze zmiennymi, nazwami klas i innych obiektów, zapisanych w języku Francuskim oraz Duńskim. Ciężki orzech do zgryzienia.

Ile czasu dziennie przeznaczyć na naukę?

Im więcej, tym lepiej. Musisz nastawić się na dość długi proces nauki, który jest ważny szczególnie na początku. Kilka godzin dziennie to moim zdaniem minimum, jeżeli myślisz o przebranżowieniu się w ciągu roku. Sześć i więcej godzin powinno być wystarczające, aby myśleć o zmianie pracy po pół roku.

Zdaję sobie sprawę, że sześć godzin dziennie jest możliwe jedynie w przypadku, gdy nie masz pracy, jednakże ilość materiału, jaką musisz przyswoić, jest ogromna, a nauka jest bardzo wymagająca. Mój brat cioteczny mówił mi, że gdy uczył się programować, często po kilkugodzinnych sesjach musiał się zdrzemnąć ze zmęczenia spowodowanego intensywnością nauki – nauka programowania jest bardzo wymagająca umysłowo.

Warto opracować sobie proces nauki. Możesz np. zaczynać od przeczytania fragmentu nowego rozdziału, po którym napiszesz kilka prostych przykładów z wykorzystaniem tego, czego się właśnie nauczyłeś. Jeżeli wymyślisz program, które chciałbyś napisać, możesz następnie nad nim popracować, tworząc go krok po kroku w kolejnych dniach. Warto także robić sobie przerwy od jednej technologii, przeznaczając część czasu na inną (w kolejnych rozdziale opisałem, czego powinieneś uczyć się w następnej kolejności). Takie odejścia od jednej technologii na rzecz innej są odświeżające.

Dalsza nauka

Gdy zaznajomisz się z podstawami programowania, powinieneś powoli zacząć poznawać kolejne technologie.

Git

W pierwszej kolejności polecam nauczyć się Gita. Git to system kontroli wersji, który pozwala na wersjonowanie Twoich plików, tzn. monitoruje i zachowuje historię ich zmian. Git to bardzo ważne narzędzie w arsenale każdego programisty, ale korzystanie z niego, szczególnie na początku, może sprawiać problemy. Warto przyswoić podstawy używania Gita na początku swojej przygody z programowaniem. Brak znajomości podstaw Gita, szczególnie w pracy, będzie problematyczny – łatwo nadpisać czyjeś zmiany bądź nieprawidłowo wykonać merge.

Wszystkie przykłady do moich kursów i artykułów znajdziesz na GitHubie, który udostępnia możliwość udostępniania repozytoriów Gita. Ponadto, nie wyobrażam sobie, aby w pracy, na projekcie komercyjnym, nie było Gita. Warto, abyś utworzył sobie prywatne repozytorium Gita na GitHubie i wersjonował za jego pomocą swoje projekty. Dzięki temu będziesz miał do nich dostęp z dowolnego komputera oraz będziesz miał wgląd do historii ich zmian.

Podstaw Gita nauczysz się z świetnej, darmowej książki „Pro Git v. 2”, która dostępna jest na oficjalnej stronie Gita:

https://git-scm.com/book/pl/v2

Moim zdaniem wystarczą Ci na początek trzy pierwsze rozdziały powyższej książki. Możesz także spojrzeć na rozdział szósty, którego tematem jest GitHub.

Innym dobrym źródłem do nauki Gita jest darmowy kurs firmy Atlassian:

https://www.atlassian.com/git

Pamiętaj także, że trening czyni mistrza! Git to jedno z tych narzędzi, które wymaga sporo praktyki, aby czuć się pewnie korzystając z niego.

Maven i XML

Maven to popularne, darmowe narzędzie wspomagające programistów Java. Maven ułatwia:

  • dodawanie do projektu zależności do danej biblioteki bądź frameworku,
  • kompilowanie i budowanie projektu,
  • przeprowadzanie testów jednostkowych i integracyjnych,
  • generowanie raportów z testów oraz stron informacyjnych o projekcie,
  • i wiele więcej – w zależności od tego, co potrzebujesz.

Maven jest na tyle popularny i oferuje dużo równocześnie niewiele wymagając, że istnieje mała szansa, byś nie spotkał Mavena na projekcie, do którego dołączysz (ewentualnie będzie to Gradle, alternatywne narzędzie dające podobną funkcjonalność).

Jeżeli opanujesz podstawy Mavena raz, to będziesz w stanie zbudować każdy korzystający z niego projekt. Wszystkie projekty w Maven konfiguruje się w podobny sposób – jeśli poznasz format pliku konfiguracyjnego Mavena pom.xml, to będziesz w stanie się w nim odnaleźć na dowolnym projekcie.

Maven korzysta z formatu XML w plikach konfiguracyjnych, więc warto zaznajomić się z tym formatem. XML jest powszechnie stosowany i jego znajomość będzie Ci potrzebna w pracy. Podstawy XML możesz poznać na stronie W3Schools – wystarczy przeczytać kilka pierwszych rozdziałów.

Solidne podstawy Mavena nabędziesz po przeczytaniu mojego darmowego kursu Podstawy Maven.

SQL i bazy danych

SQL to skrót Structured Query Language – będzie Ci on potrzebny do manipulacji danymi w bazie danych. Zaletą tego języka jest to, że nauczenie się jego podstaw jest relatywnie proste, a używanie go – przyjemne. Możesz w przerwie od nauki pozostałych technologii uczyć się SQLa. Mam w planach napisanie kursu SQL, ale zanim to nastąpi, możesz nauczyć się jego podstaw na stronie W3Schools.

Spring

Spring to bardzo popularny framework dla programistów Java. Na początku swojego istnienia oferował on łatwe wykorzystanie Dependency Injection, czyli „wstrzykiwania” do obiektów innych obiektów, które wymagane są do ich działania. Pozwala to z jednej strony na łatwą wymianę używanych klas, a z drugiej zmniejsza liczbę powiązań pomiędzy klasami w naszych programach.

Przez lata Spring osiągnął dużą popularność, a w rezultacie rozrósł się tak bardzo, że w tej chwili oferuje moduły ułatwiające pracę z bazami danych, tworzeniem web service'ów, zarządzaniem uprawnieniami w aplikacjach i wiele, wiele innych. Kilka lat temu powstał Spring Boot – ma on na celu jeszcze bardziej przyspieszyć i ułatwić tworzenie aplikacji za pomocą Springa.

Na oficjalnej stronie Springa znajdziesz wiele darmowych, anglojęzycznych tutoriali, które wprowadzą Cię w świat Springa: spring.io.

Dodatkowymi technologiami, którymi możesz się zacząć interesować, gdy rozpoczniesz naukę Springa, są JSON i YAML, a także HTTP oraz REST.

JUnit i testy jednostkowe

Testy jednostkowe to testy kodu źródłowego, które mają na celu sprawdzenie, czy działa on zgodnie z założeniami. JUnit to popularna biblioteka dla języka Java, która ułatwia proces tworzenia testów jednostkowych. Pisania testów trzeba się nauczyć – nie jest to proste zagadnienie, więc warto, abyś do swoich programów pisał testy w ramach ćwiczeń.

Hibernate

Hibernate to framework służący do mapowania obiektów klas Java do tabel w bazie danych. Warto poznać podstawy, np. zaglądając do oficjalnej dokumentacji.

Dodatkowe technologie

Gdy nauczysz się podstaw programowania oraz najważniejszych, z punktu widzenia przyszłego programisty Java, technologii i frameworków, warto poznać podstawy Dockera, HTML, oraz CSS. Docker pozwala na tworzenie kontenerów, w których uruchamiane są aplikacje napisane np. w Javie, i jest bardzo popularny od pewnego czasu.

HTML służy do opisu struktury zawartości stron Internetowych, a CSS do ustawiania ich wyglądu. Ze względu na ogromne zapotrzebowanie na aplikacje webowe, warto mieć w zanadrzu podstawową wiedzę na temat tych dwóch technologii.

Dodatkowe zagadnienia

Jeżeli chcesz pracować jako programista, to warto poznać proces Code Review. Jest to sprawdzanie kodu napisanego przez jednego programistę przez jego współpracowników, w celu wykrycia potencjalnych błędów i fragmentów kodu, które można by poprawić, zanim wejdę one do produkcyjnej wersji oprogramowania. Jeżeli na projekcie nie ma wymogu robienia Code Review, to mimo wszystko zawsze warto poprosić o nie jednego z innych programistów. Code Review to świetny sposób na polepszenie jakości kodu i wymianę wiedzy.

Scrum to metodologia tworzenia oprogramowania. Niestety, zazwyczaj nierozumiana, nadużywana, i dające odwrotne do założonych skutki. Warto dowiedzieć się, czym jest Scrum, aby łatwiej odnaleźć się na projekcie, na którym jest używany. Podstawowe informacje o Scrumie znajdziesz w jednym z moich artykułów.

Dobrze byłoby także, gdybyś rozumiał czym jest złożoność algorytmiczna. W skrócie chodzi o to, że różne problemy można rozwiązać szybciej lub wolniej, w zależności do sposobu, jaki wybierzemy. Jest to złożone zagadnienie i można na jego naukę przeznaczyć setki godzin, ale wystarczy, że będziesz zdawał sobie sprawę z tego zagadnienia i z jego konsekwencji. Różne algorytmy (sposoby na rozwiązanie pewnego zadania) mają różne złożoności algorytmiczne, które, upraszczając (w naprawdę dużym uproszczeniu), mówią nam, jak „dobry” / „szybki” jest dany algorytm do rozwiązania konkretnego zadania.

Przydatne informacje dla programistów

W poprzednim roku napisałem dokument zatytułowany Craftsmanship of Software Development. Zawiera on 21 Elementów, które podzieliłem na cztery kategorie. Elementy te opisują moje przemyślenia po 10 latach pracy jako programista, a także wskazówki jak, moim zdaniem, być dobrym programistą i współpracownikiem. Dokument napisany jest w języku angielskim.

Gdy zaznajomisz się z programowaniem, zajrzyj na powyższą stronę – znajdziesz tam kilka przydatnych wskazówek, które pomogą Ci pracy.

Proces nauki

Jak już wspominałem, nauka programowania to głównie pisanie kodu, pisanie kodu, i jeszcze raz pisanie kodu. Gdy będziesz się uczył i poznawał nowe technologie, staraj się korzystać z nich w nowych projektach i przykładach, które będziesz pisał w ramach ćwiczeń.

Jeżeli chcesz skorzystać z pewnej funkcjonalności np. Springa, ale nie wiesz jak, warto poszukać odpowiedzi w Internecie, znaleźć fragmenty kodów prezentowane przez inne osoby, spróbować dodać je do swojego projektu, przeanalizować, i zmodyfikować. Jest to bardzo dobre ćwiczenie, zarówno mające na celu praktykę szukania i aplikowania znalezionych rozwiązań, jak i rozszerzania swojej wiedzy na temat możliwości różnych frameworków, jak i samego języka Java.

Warto, abyś założył sobie prywatne repozytorium Gita np. na GitHubie, w którym będziesz umieszczać swoje projekty i przykłady. Szczególnie polecam zapisywanie różnego rodzaju komend (np. Gita) lub małych fragmentów kodu, które wykonują pewne zadania, które będą mogły Ci się przydać w przyszłości.

Często takie komendy będziesz chciał używać wielokrotnie w swojej pracy – zapisanie ich w czytelnej formie pozwoli Ci na zaoszczędzeniu sporo czasu w przyszłości, gdy znowu będziesz potrzebował wykonać dana operację bądź skorzystać z fragment kodu. Dla przykładu, ja zapisuję sobie przydatne komendy Gita – oto kilka z nich:

# aliasy
git config --global alias.te checkout
git config --global alias.f fetch
git config --global alias.p pull

# log abbrevCommit
$ git config --global log.abbrevCommit yes

# sprawdzanie tylko nazwy plików, które zmieniły się w commitach
git log --name-only

# sprawdzanie zawartości stasha
git stash show -p

# szukanie stringa w git log
git log --grep jakis_tekst

# przejdź na poprzedni branch
git checkout -

# tworzenie i zmiana brancha (skrót)
git checkout -b nazwa_brancha

# usuwanie brancha na remote
git push origin --delete nazwa_brancha

Pierwsza praca i oczekiwania

Po kilku miesiącach nauki, gdy będziesz czuł, że masz solidne podstawy, czas rozpocząć poszukiwania pierwszej pracy. Przeglądaj strony z ofertami, wysyłaj CV, umawiaj się na rozmowy. Nie przejmuj się, jeżeli wymagania będą wydawały się zbyt duże – często oferty o pracę dla programistów zawierają wymagania wielu technologii, które nie okazują się wymogiem koniecznym.

Ponadto, jeżeli oferta wymaga ukończenia studiów o kierunku powiązanym z informatyką, a Ty takiego nie ukończyłeś, nie przejmuj się – wyślij CV. Jeżeli firma nie będzie zainteresowana, to się nie odezwie. Wielu firmom w pierwszej kolejności zależy na zaangażowaniu i chęci do pracy oraz rozwoju, i niekiedy wymóg konkretnego kierunku studiów takie firmy są w stanie pominąć dla dobrego kandydata.

Przygotuj się na wiele rozmów, które często nie będą przyjemne – z mojego doświadczenia wynika, że (niestety) wiele osób przeprowadzających rozmowy nie ma do tego kwalifikacji, albo wręcz nie powinna być wysyłana na takie rozmowy – nie przejmuj się, nie ta firma, to kolejna. Bycie niemiłym, w szczególności w tak stresującej sytuacji jaką jest rozmowa o pracę, nie jest niczym usprawiedliwione. W takim przypadku szukaj dalej.

Dobrym pomysłem jest znalezienie bezpłatnego stażu bądź praktyk, lub pracy z bardzo niskim wynagrodzeniem, ponieważ na początku Twojej przygody jako programista najważniejsze jest doświadczenie. Taki staż bądź praktyki będą dobrym miejscem na nauczenie się wszystkiego, co jest związane z byciem programistą, a czego nie nauczysz się sam w domu czytając o tym. Po kilku miesiącach możesz porozmawiać z przełożonym o zmianie umowy lub poszukać kolejnego projektu. Jeżeli zależy Ci na wysokich zarobkach, to musisz nastawić się na wieloletnią naukę i rozwój – nie ma innej drogi. Potencjał na przyszłość jest ogromny – warto zainwestować w siebie podczas tych pierwszych miesięcy zdobywając cenne doświadczenie niewiele zarabiając.

Czy każdy może zostać programistą?

Jest to dość podchwytliwe pytanie, bo w zasadzie nic nie stoi na przeszkodzie aby każdy, kto chce nauczyć się programować, prędzej czy później był w stanie pisać programy w wybranym przez siebie języku programowania. Jednak nauka programowania dla własnej satysfakcji i jako hobby nijak się ma do pracy jako programista.

Aby pracować jako programista, trzeba polubić programowanie na tyle, aby patrzeć dzień w dzień godzinami w ekran monitora i pisać kod wyglądający jak hieroglify dla osób niewtajemniczonych w świat programowania. W przeciwnym razie nie będziesz miał zapału na długą i trudną naukę oraz pisanie kodu źródłowego. Jedyny sposób na nauczenie się programowania to pisanie bardzo dużej ilości kodu źródłowego, próbowania różnych rozwiązań i implementacji, szukania błędów i poznawania coraz to nowych technologii.

Jeżeli myślisz o pracy jako programista, to będziesz musiał przeznaczyć znacząco więcej czasu na naukę, niż w przypadku chęci nauki w celach hobbistycznych. Ponadto, będziesz musiał poznać więcej technologii i narzędzi, zdecydowanie bardziej dbać o jakość swojego kodu i wykształcić umiejętności wymagane w pracy z innymi osobami.

Podsumowując, programowanie jest jak jazda samochodem – każdy może się jej nauczyć, ale nie każdy może zostać zawodowym kierowcą rajdowym. To drugie wymaga zdecydowanie więcej zapału i czasu.

Chcę pracować w IT, ale nie jako programista – jakie mam opcje?

Jeżeli nie chcesz być programistą, ale interesuje Cię branża IT, to jedną z opcji jest zostanie testerem oprogramowania. W ostatnich latach stanowiska testerów tak się rozwinęły, że ich zarobki są często niewiele niższe od zarobków programistów, jednak wymagania także poszły w górę. Testerzy muszą wiedzieć coraz więcej o sposobie wytwarzania programowania, rodzajach testów, wymaganiach biznesowych itd. Często osoby, które chcą zostać programistami, zaczynają od zawodu testera i uczą się w międzyczasie programowania.

Poza testowaniem oprogramowania, możesz pracować także jako Product Owner. Jest to osoba odpowiedzialna za wizję rozwoju systemu informatycznego (bądź jego części). Pracuje ona blisko z zespołem programistów, a także z osobami biznesowymi. Nie jest to łatwa praca, a uzyskanie takiego stanowiska może być trudne. W pierwszej kolejności należałoby zdobyć doświadczenie pracując na projekcie informatycznym, będąc częścią zespołu odpowiedzialnego za część biznesową, która współpracuje z programistami. Po pewnym czasie, po nabyciu wiedzy o tym, jak pracuje się z zespołami programistów, jak wygląda proces wytwarzania oprogramowania, tworzenia wymagań biznesowych, testowania i wdrażania, mógłbyś porozmawiać z przełożonym o potencjalnej ścieżce rozwoju w kierunku zostania Product Ownerem. Jeżeli takiej opcji nie ma w firmie, w której pracujesz, możesz pomyśleć o poszukaniu nowej pracy, z zaznaczeniem na rozmowach kwalifikacyjnych w jakim kierunku chcesz się rozwijać.

Na projektach informatycznych pracują także analitycy biznesowymi, ale, z mojego doświadczenia, ich rola w ostatnich latach zmalała, a wymagania odnośnie ich umiejętności i wiedzy wzrosły. Są to osoby na pograniczu analityka, Product Ownera, i testera. Muszą rozmawiać z klientem w celu zrozumienia jego potrzeb, przygotowywać opis tych wymagań, prezentować je programistom, sprawdzać, czy finalne oprogramowaniem jest zgodne z wymagania itd.

Podsumowanie

Jeżeli chcesz zostać programistą, to będziesz potrzebować dużo czasu i zapału. Nauka programowania nie jest prosta, a w pracy programisty wymagana jest znajomość bardzo wielu technologii i posiadania wachlarza różnych umiejętności. Jest to jednak, moim zdaniem, dobra inwestycja w siebie – programistów brakuje, zarobki są wysokie, a praca ciekawa.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Nie musisz podawać swojego imienia, e-mailu, ani strony www, aby opublikować komentarz. Komentarze muszą zostać zatwierdzone, aby były widoczne na stronie.