Nie ma dróg na skróty

Napiszę to w pierwszym akapicie. Moim zdaniem jest to bardzo ważny punkt, który wielu pomija. Programowanie nie jest łatwe. Nauka programowania tym bardziej nie jest łatwa. Wymaga od Ciebie zaangażowania, często również sporo poświęcenia. Jeśli aktualnie pracujesz i chcesz zmienić swój profil jesteś w jeszcze cięższej sytuacji.

Jak to mówią, “nikt nie powiedział, że będzie łatwo i słowa dotrzymał”. Z nauką programowania jest jak z nauką języków obcych. Są ludzie, którzy mają swego rodzaju dar i przychodzi im to łatwiej. Znakomita większość (w tym ja) musi spędzić mnóstwo czasu żeby przyswoić tę wiedzę. Jeśli liczysz na to, że kupisz kurs, przeczytasz dwie książki i zostaniesz programistą muszę wyprowadzić Cię z błędu. Tak nie będzie. Tylko Twoja ciężka praca może doprowadzić Cię do celu. Materiały w internecie mogą Ci w tym pomóc, nakierować na pewien tor. Na pewno nie zastąpią Twojej pracy. Ona po prostu jest niezbędna.

Jeśli masz słomiany zapał (jak ja) to też nie jesteś na uprzywilejowanej pozycji. Będzie ciężko, ale będzie też mnóstwo satysfakcji jeśli osiągniesz cel, który sobie założyłeś. Jeśli nie masz zamiaru ciężko pracować żeby zostać programistą zamknij tę zakładkę przeglądarki. Jeśli tak jest to szkoda Twojego czasu, nie ma sensu czytać dalej.

Full stack Java developer

Określenie “programista” czy “developer” jest bardzo szerokie. Kryje w sobie mnóstwo technologii i ścieżek, które możesz wybrać. A może “programista Java”? Programista Java niestety także nie jest wystarczająco specyficzne. Skupię się zatem na profilu, który moim zdaniem aktualnie jest jednym z najczęściej poszukiwanych na rynku pracy “full stack Java developer”.

Czym zajmuje się szablonowy “full stack Java devloper”? Jest to programista, który rozwija aplikacje webowe. Zajmuje się zarówno warstwą interfejsu użytkownika jak i kodem wykonywanym po stronie serwera. Dalsza część artykułu opisuje właśnie ten typ stanowiska wraz z zakresami wiedzy, które powinieneś opanować.

Rzeczy, które opiszę poniżej dotyczą profilu idealnego kandydata. Jest tego dużo, jednak nie zrażaj się. Firmy bardzo często patrzą na potencjał nie na aktualny zestaw umiejętności.

Wiedza ogólna

Składnia języka Java

Podstawą jest znajomość składni języka Java. Obsługa wyjątków, pętle, instrukcje warunkowe, adnotacje czy “lambdy” – wszystko co związane jest z samym językiem programowania. Wiedzę z tego zakresu możesz zdobyć przerabiając artykuły zebrane w ramach kursu języka Java.

Pobierz opracowania zadań z rozmów kwalifikacyjnych

Przygotowałem rozwiązania kilku zadań algorytmicznych z rozmów kwalifikacyjnych. Rozkładam je na czynniki pierwsze i pokazuję różne sposoby ich rozwiązania. Dołącz do grupy ponad 6147 Samouków, którzy jako pierwsi dowiadują się o nowych treściach na blogu, a prześlę je na Twój e-mail.

Biblioteka standardowa

Bez znajomości biblioteki standardowej nie będziesz mógł efektywnie pracować z kodem źródłowym. Znajomość kolekcji czy wyrażeń regularnych świetnie pasuje do tej kategorii. Dobrym sposobem na ćwiczenie tej umiejętności jest rozwiązywanie zadań. Sporo zadań z przykładowymi rozwiązaniami znajdziesz na blogu.

Biblioteki narzędziowe

Tutaj mam na myśli najczęściej używane biblioteki, które rozszerzają możliwości biblioteki standardowej na przykład Guava, Apache Commons czy Joda. Nie chodzi mi tu o zapamiętanie całego API dostępnego w tych bibliotekach, chodzi o samą świadomość ich istnienia i możliwości użycia w projektach. Jako przykład mogę podać Ci jeden z projektów, który realizowałem. Pogodynka także dostępna jest na githubie gdzie możesz przejrzeć kod źródłowy tego projektu.

IDE

Do efektywnej pracy z językiem Java niezbędne jest IDE. Czy to będzie Idea, Eclipse, Netbeans czy cokolwiek innego – nie ma to znaczenia. Istotne jest abyś swobodnie pracował z IDE. Znajomość skrótów klawiaturowych czy możliwości IDE są bardzo przydatne. Tę umiejętność także rozwiniesz przez praktykę. W większości IDE są wtyczki, które wspierają pracę ze skrótami klawiaturowymi. Pracując z Eclipse używałem wtyczki mousefeed. Teraz z Ideą bardzo często używam funkcjonalności Search Everywhere (Shift + Shift) lub Navigate to Action (Ctrl + Shift + A).

System kontroli wersji

System kontroli wersji to mechanizm ułatwiający pracę z kodem. W systemie tym zapisuje się historyczne wersje plików, dzięki temu w łatwy sposób możemy śledzić zmiany. System ten pomaga także przy pracy zespołowej nad jednym fragmentem kodu. Standardem w większości firm jest Git, zdarzają się też firmy, które używają SVN czy innych bardziej “egzotycznych” systemów. Proponowałbym zacząć do Git’a. Jeśli dopiero zaczynasz przygodę z systemami kontroli wersji zachęcam do zajrzenia do kursu gita dostępnego na Samouczku.

Testy jednostkowe

Umiejętność pisania testów jednostkowych jest bardzo przydatna. Jeśli będziesz mógł się pochwalić znajomością bibliotek takich jak JUnit, Mockito czy Hamcrest będzie bardzo dobrze. Sam używam tej trójki przy pisaniu testów. Jeśli ta tematyka Cię interesuje napisałem serię artykułów dotyczących testów jednostkowych. Znajdziesz je na podstronie opisującej narzędzia i dobre praktyki.

Biblioteki, specyfikacje i technologie

Interfejs użytkownika

Aplikacje webowe posiadają interfejs użytkownika. W zależności od projektu, w którym będziesz pracował do jego tworzenia mogą wykorzystywane być różne technologie. Jest jednak pewien zestaw minimum, który zawsze powinieneś znać. Chodzi mi tu o podstawy HTML, CSS i JavaScript. Jako początkujący wystarczy, że znasz podstawy tych technologii. Im jesteś bardziej doświadczony poznasz kilka bibliotek JavaScript używanych przy pracy z interfejsem użytkownika. Osobiście bardzo zaniedbuję ten obszar. Sam musisz zobaczyć co Ci bardziej odpowiada :).

Kod wykonywany na serwerze

Pracując z aplikacjami webowymi w Javie będziesz miał styczność z servletami. Powinieneś poznać mechanizm ich działania wraz z ich ograniczeniami. Przechodząc przez serię artykułów na temat programowania webowego w Javie poznasz specyfikację serwletów.

Spring MVC

Spring MVC jest bardzo popularny. Używany jest w dużej liczbie projektów. Dokumentacja tylko do tej biblioteki to kilkaset stron tekstu. Nikt od początkującego nie będzie wymagał cudów. Jeśli będziesz potrafił stworzyć prostą aplikację webową opartą o kilka kontrolerów jesteś na dobrej drodze. Jako przykład może posłużyć Ci Pogodynka, którą realizowałem na blogu.

Bazy danych

Większość aplikacji webowych zapisuje dane w bazach danych. Powinieneś wiedzieć czym są relacyjne bazy danych. Takie rzeczy jak klucz główny, klucz obcy, indeks czy rodzaje złączeń nie powinny Cię zaskakiwać. Powinieneś także konstruować proste zapytania z użyciem GROUP BY, HAVING, ORDER BY i JOIN. Pomoże Ci w tym wstęp do relacyjnych baz danych, który jest częścią kursu SQL

ORM (ang. Object-Relational Mapping)

Po Spring MVC mamy tu kolejnego mocnego gracza. Chodzi o Hibernate. Jest to de facto standard w branży. Także i tutaj dokumentacja to kilkaset stron. Moim zdaniem na początek umiejętność zmapowania relacji wiele do wielu powinna wystarczyć. Resztę przeczytasz w dokumentacji jak będziesz tego potrzebował.

Programowanie to nie tylko technologia

Język angielski

Większość materiałów pomagających przy nauce programowania napisana jest w języku angielskim. Jeśli nie wiesz od czego zacząć podszlifuj angielski do poziomu gdzie czytanie dokumentacji technicznej nie jest problemem.

Praca zespołowa

Rzadko zdarzają się projekty, które możesz zrealizować samodzielnie. Szczególnie jeśli jesteś początkującym programistą. Programowanie to praca zespołowa. Musisz umieć pracować w zespole. Jak się tego nauczyć? Jak zwykle praktyka jest najlepsza, wcale nie trzeba ćwiczyć tej umiejętności w projekcie programistycznym. Równie dobrze można pracować zespołowo na aplikacją webową jak i innym projektem spoza działki IT.

Przyjmowanie krytyki

Programiści czasami potrafią być straszni. Część osób (w tym ja) ma problem z przyjmowaniem krytyki. Niestety jest to spora wada. Musisz koniecznie się tego oduczyć! Jeśli ktoś krytykuje Twoją pracę postaraj wyciągnąć od tej osoby jak najwięcej informacji. Szczególnie sposobu naprawienia danego błędu. Pamiętaj też, że krytykujące nie zawsze musi mieć rację. Niemniej jednak zawsze warto go wysłuchać aby poznać inny punkt widzenia.

Sprzedaż

No tak… W końcu nadchodzi czas na pierwszą rozmowę kwalifikacyjną. Rozmowa to nic innego jak sprzedawanie swojego czasu przyszłemu pracodawcy. Jeśli potrafisz ten czas sprzedać i pasujesz do zespołu dostaniesz pracę.W tym punkcie można też zawrzeć CV i jego przygotowanie. Tutaj odsyłam Cię do materiałów w internecie – są ludzie, którzy poradzą Ci jak to zrobić dużo lepiej ode mnie ;).

Podsumowanie

Jak wspomniałem na początku artykułu programowanie nie jest łatwe. Jego nauka także nie. Szczególnie, że materiału do opanowania jest sporo. W artykule tym starałem się zebrać dla Ciebie listę zagadnień, które są istotne w pracy jako “junior full-stack Java developer”. A może uważasz, że pominąłem coś istotnego? Daj znać w komentarzach co sądzisz o tej liście.

Mam nadzieję, że artykuł przypadł Ci do gustu. Proszę podziel się nim ze swoimi znajomymi, może ktoś z nich zechce nauczyć się programowania?

Jeśli nie chcesz pominąć kolejnych artykułów dopisz się do samouczkowego newslettera i polub stronę na Facebooku. Do następnego razu!

Pobierz opracowania zadań z rozmów kwalifikacyjnych

Przygotowałem rozwiązania kilku zadań algorytmicznych z rozmów kwalifikacyjnych. Rozkładam je na czynniki pierwsze i pokazuję różne sposoby ich rozwiązania. Dołącz do grupy ponad 6147 Samouków, którzy jako pierwsi dowiadują się o nowych treściach na blogu, a prześlę je na Twój e-mail.

Kategorie: ,

Ostatnia aktualizacja:

Autor: Marcin Pietraszek


Nie popełnia błędów tylko ten, kto nic nie robi ;). Bardzo możliwe, że znajdziesz błąd, literówkę, coś co wymaga poprawy. Jeśli chcesz możesz samodzielnie poprawić tę stronę. Jeśli nie chcesz poprawiać błędu, który udało Ci się znaleźć będę wdzięczny jeśli go zgłosisz. Z góry dziękuję!

Zostaw komentarz