Co powinien umieć początkujący programista – pierwsza praca
Zaczynając się uczyć programowania z reguły to wygląda tak, że oglądamy jeden, drugi tutorial na temat jakiegoś zagadnienia. Następnie uczymy się kolejnej technologii i znowu przerabiamy jakiś tutorial z tym związany. Potem następny i następny i następny. W końcu to wygląda tak, że się niby uczymy, a ciągle dochodzą nowe rzeczy do nauki i zamiast to maleć to stale rośnie. Dochodzimy w końcu do momentu, w którym tak naprawdę sami już nie wiemy czego się uczyć i co tak naprawdę będzie wymagane, aby zdobyć pierwszą pracę jako programista.
Obecnie przez natłok informacji w Internecie można się pogubić w tym co jest potrzebne do zostania programistą. Dla początkującej osoby spośród setek różnych technologii, narzędzi, bibliotek czy frameworków ciężko wybrać te, które akurat dla mnie będą odpowiednie. Oczywiście możemy wyjść z założenia, że im więcej się ich nauczymy tym lepiej. Teoretycznie miałoby to sens. Ale w praktyce? Raczej tak to nie wygląda np. dla danego obszaru programowania z góry mamy określony jakiś obszar technologii poza który się nie wychodzi. To już nam pozwala zawęzić wybór odpowiednich technologii.
Podobnie wygląda sprawa z umiejętnościami poza technologią. Możemy nauczyć się wiele różnych umiejętności, ale czy one będą przydatne w pracy programisty? Lub jakie posiadamy kompetencję miękkie? Nawet programiści komunikują się między sobą, więc też powinni cechować się pewnymi umiejętnościami, tak aby nie zrazić do siebie współpracowników.
Reasumując, wszystko tak naprawdę sprowadza się do jednego pytania: Co powinien umieć początkujący programista? Dlatego też powstał ten wpis. Ma on na celu pokazanie Ci 8 kluczowych umiejętności jakie moim zdaniem powinien posiadać początkujący programista:
- Znajomość co najmniej jednego języka programowania
- Znajomość Frameworka
- Co najmniej podstawowa znajomość baz danych
- Znajomość systemu kontroli wersji (GIT) i obsługa dowolnej platform obsługującej GITa
- Zrozumienie drugiej strony
- Angielski pozwalający na swobodne czytanie dokumentacji
- Dobra znajomość zintegrowanego środowiska programistycznego (IDE)
- Umiejętność rozwiązywania problemów
8 umiejętności jakie musi umieć początkujący programista
(1) Znajomość co najmniej jednego języka programowania
Pierwsza i zarazem najważniejsza umiejętność: Język programowania. Bez niego tak naprawdę ciężko byłoby nam cokolwiek zrobić. Najważniejsze dla początkującego programisty jest wybranie jednego języka programowania i postaranie się w jak najlepszym stopniu opanować go. Im bardziej się w niego zagłębimy tym lepiej, ponieważ to właśnie stanowi naszą podstawową wiedze i umiejętność programowania:
- Java
- Python
- C#
- JavaScript
- PHP
- Ruby
- GO
Jeśli dalej się nie zdecydowałeś na język programowania do zapraszam do wpisu na temat jaki język programowania wybrać?
(2) Znajomość Frameworka
W dzisiejszych czasach znajomość samego języka nie wystarczy. Trzeba znać dodatkowo jakiś Framework, czyli taki szkielet do budowy aplikacji oraz zapewnia nam zestaw komponentów i bibliotek ogólnego użycia, które znacznie przyśpieszają pracę nad aplikacją.
- Spring (Java)
- Django (Python)
- .NET (C#)
- Angular 2 (JavaScript)
- React (JavaScript) – co prawda jest to biblioteka, ale można ją zaliczyć do tej grupy
- Vue (JavaScript)
- Laravel (PHP)
- Ruby on Rails (Ruby)
(3) Co najmniej podstawowa znajomość baz danych
Nieważne z jaką aplikacją mamy do czynienia gdzieś musimy przechowywać różne dane. Dlatego też wymyślono bazy danych, które nam to zapewniają. Bez różnicy w jakiej branży programowania pracujemy warto chociaż mieć podstawową znajomość jak takie dane są przechowywane i jak można się do nich w najprostszy sposób dostać (mowa tutaj o 4 najprostszych zapytaniach CRUD: zapis, odczyt, aktualizacja i usuwanie).
Bazy danych dzielą się na relacyjne SQL (Tutaj znajdziesz listę polecanych kursów) i nierelacyjne NoSQL (Tutaj znajdziesz listę polecanych kursów). Jeśli jesteś początkującym programistą osobiście polecałbym Ci naukę zacząć od tego pierwszego typu baz danych. Chyba, że obrałeś ścieżkę kariery jako Frontend to możliwe, że dla Ciebie lepszym wyborem będzie najpierw nauka bazy NoSQL ze względu na format przechowywanych danych.
(4) Znajomość Systemu kontroli wersji (GIT) i obsługi dowolnej platformy obsługującej GITa
Jest to technologia, którą trzeba znać chociaż w podstawowym stopniu. W każdym projekcie zawsze pracuję się w zespole przez co trzeba jakoś utrzymywać odpowiednią wersję projektu. Dlatego znajomość systemu kontroli wersji jest tak ważna. Bez niej, po paru tygodniach projekt by się rozjechał i każdy z członków zespołu pracowałby na innej wersji projektu. Dlatego przed podjęciem pierwszej pracy trzeba się go nauczyć, bo na pewno na niego trafisz. Wystarczy na początek znać podstawowe pojęcia i co się za nimi kryje: branch, push, pull, fetch, pull request (lub merge request), rebase czy commit. Dla początkującego programisty powinno to być wystarczające. Bardziej zaawansowanych rzeczy można się dopiero uczyć jak już nazbiera się parę lat doświadczenia.
(5) Zrozumienie drugiej strony
Jako programista prawie nigdy nie pracujesz sam. Często jest tak, że jesteś członkiem zespołu i razem pracujecie nad jakąś aplikacją. Dlatego dobrze byłoby chociaż znać w podstawowym stopniu rzeczy jakimi zajmują się twoi koledzy z zespołu np. pracując jako Backend developer, tworzący jakieś usługi, byłoby dobrze wiedzieć co się dzieje po drugiej stronie. W przypadku stron internetowych znać chociaż podstawy pisania takich stron (HTML, CSS, JavaScript). Nie trzeba ich znać jakoś szczególnie dobrze, ale w przypadku, gdy spojrzymy na taki kod to chociaż wiedzieć, że właśnie z tymi technologiami mamy do czynienia.
(6) Angielski pozwalający na swobodne czytanie dokumentacji
Jak chcesz zostać programistą to język angielski Cię nie ominie. Wszystkie aplikacje i cały kod jest pisany właśnie w języku angielskim. Dlatego należy umieć się nim posługiwać w co najmniej podstawowym stopniu. Według mnie, jeśli nie pracujesz dla zagranicznego klienta to znajomość angielskiego pozwalająca na swobodne czytanie dokumentacji powinna być wystarczająca. Wtedy będziesz w miarę sprawnie mógł pisać kod, szukać informacji w Google czy czytać właśnie dokumentacje projektu.
Więcej na temat języka angielskiego i jego znajomości opisywałem w poprzednim wpisie co jest potrzebne oprócz samego programowania? Tak żeby nie powielać tego samego tekstu, jeśli interesuje Cię bardziej ten temat, zerknij do tamtego wpisu.
(7) Dobra znajomość zintegrowanego środowiska programistycznego (IDE)
Znać dobrze środowisko programistyczne, w którym się na co dzień pracuje. Narzędzie programistyczne, oprócz ułatwienia samej pracy nad projektem, oferuję znacznie więcej i dobrze jakbyś chociaż o części z nich wiedział m.in. podgląd zmienionych plików od ostatniego commita czy możliwość wyszukiwania w całym projekcie.
Dodatkowo dobrze jakbyś się po nim sprawnie poruszał, czyli znał chociaż podstawowe skróty klawiszowe do jego obsługi (Dla Intellij IDEA dodałem film w tym temacie na YouTube – 61 skrótów klawiszowych do Intellij IDEA oraz PDF, który można pobrać tutaj)
(8) Umiejętność rozwiązywania problemów
O co mi tutaj chodzi. Mając pewien zestaw umiejętności i cech nic nie będzie znaczył jeśli nie będziesz ich umiał dobrze wykorzystać. Dostając jakieś zadanie do wykonania będziesz musiał umieć samemu wymyśleć JAK wykonać zadnie oraz z jakich umiejętności/technologii/narzędzi w danej sytuacji skorzystać.
Aby się nauczyć tej umiejętności trzeba po prostu w sobie ją wyćwiczyć. Z każdym to coraz trudniejszym zadaniem będziesz tworzyć w głowie pewien zestaw schematów jak podchodzić do konkretnego typu zadania. Aż dojdziesz do momentu, w którym naprawdę bardzo skomplikowane zadanie nie będzie dla Ciebie stanowić problemu, ponieważ będziesz wiedział jak do niego podejść.
Przykład: Jakie umiejętności muszę znać na stanowisku Junior Java Developera?
W poprzednim rozdziale rozpisałem umiejętności jakie powinien znać początkujący programista. A teraz spróbuje Ci to przedstawić na przykładzie Junior Java Developera.
(1) Znajomość co najmniej jednego języka programowania
Znam język programowanie Java. Znam podstawy składni języka, wiem czym cechuje się programowanie obiektowe, ale też znam bardziej zawansowane aspekty jak programowanie generycznie, pracę z kolekcjami czy strumieniami i lambdą. Wiem jak pisać czysty kod w tym języka np. jak opisywać metody, klasy, zmienne itp.
(2) Znajomość Frameworka
Znam Spring i podstawowe zagadnienia z nim związane np. Dependency Injection. W Springu często pracuje się z wystawianiem różnych usług dla innych aplikacji, więc dodatkowo znam takie zagadnienia jak REST, SOAP, Http, json czy xml. Wiem jak wywołać zapytania do usługi z użyciem narzędzie Postman. Umiem też napisać podstawowe testy z wykorzystaniem bibliotek JUnit I mockito.
(3) Co najmniej podstawowa znajomość baz danych
Znam bazę danych PostgreSQL oraz wiem jak w niej wykonać podstawowe zapytania CRUD: zapis, odczyt, aktualizację i usuwanie. Dodatkowe wiem jak zintegrować bazę danych z Frameworkiem Spring przy użyciu technologii Spring Data, Hibernate i JPA.
(4) Znajomość systemu kontroli wersji (GIT) i obsługa dowolnej platform obsługującej GITa
Wiem czym jest git, jak z niego korzystać oraz znam platformę Github do zarządzania projektami. Wiem czym jest gałąź (branch) master i dlaczego tworzymy i pracujemy na osobnych gałęziach. Do tego znam podstawowe pojęcia związane z gitem m.in. branch, push, pull, fetch, pull request (lub merge request), rebase czy commit.
(5) Zrozumienie drugiej strony
Mimo, że swoją karierę wiąże z pracą nad usługami jak Backend Developer wiem również co się dzieje po stronie Frontend. Umiem napisać prostą stronę internetową z użyciem HTML oraz CSS i wspierając się podstawowymi funkcjami w JavaScript.
(6) Angielski pozwalający na swobodne czytanie dokumentacji
Jestem osobą, która jest wstanie napisać całą aplikację w języku angielskim i opisać ją w tym języku w pliku README. Dodatkowo jeśli mam jakiś problem potrafię znaleźć na anglojęzycznych stronach rozwiązanie.
(7) Dobra znajomość zintegrowanego środowiska programistycznego (IDE)
Wiem, gdzie mogę znaleźć najważniejsze dla mnie funkcje m.in. maven, baza danych, terminal, drzewko projektu, GIT czy struktura klasy. Umiem sprawnie się poruszać po IDE, znam dużo przydatnych skrótów, które ułatwiają mi codzienną pracę.
(8) Umiejętność rozwiązywania problemów
Umieć rozwiązywać bardziej złożone problemy. W przygotowanym portfolio na platformie Github, oprócz podstawowej aplikacji, przygotowałem również trudniejsze funkcjonalności, które wymagały ode mnie większego wysiłku i szukania pomocy w Google.
Podsumowanie
Dzisiaj postarałem się Ci odpowiedzieć na pytanie Co powinien umieć początkujący programista. Liczę, że po przeczytaniu tego wpisu chociaż w małym stopniu pomogłem Ci to wszystko poukładać w głowię i lepiej zrozumieć czego tak naprawdę powinieneś się nauczyć.
Pamiętaj oczywiście, że to nie wszystko co programista powinien umieć! Są to tylko podstawowe umiejętności bez których ciężko będzie Ci rozwinąć swoją karierę jako programista. Jak już ich się nauczysz to nie zapominaj o dalszym rozwoju i zacznij poznawać bardziej zaawansowane narzędzie. Dużo ciekawych propozycji podałem w dwóch poprzednich wpisach Narzędzie i technologię dla programisty: Część 1 (podstawowe) i Część 2 (bardziej zaawansowane).
A według Ciebie jakie umiejętności są najważniejsze dla początkującego programisty?
Dziękuję za te wpis. Trochę poukładałam sobie w głowie i wiem od czego zacząć 🙂