Jak zostać programistą?
Cześć! To jest fragment książki JavaScript od podstaw, która ma pomóc w nauce programowania od zera.
Jednym z najczęściej zadawanych mi pytań przez osoby z dalszego otoczenia to: Jak zostać programistką1? Mam wobec niego mieszane odczucia. Doceniam osoby, które chcą się uczyć i wziąć los w swoje ręce. Moi znajomi, którzy zdecydowali się na przejście tej ścieżki, są bardzo zadowoleni ze swojej decyzji. Z drugiej strony widziałem, jak ciężka to była dla nich droga: ile czasu i emocji ich kosztowała. Jest to zwykle bardzo trudny czas — zarówno psychicznie, jak i pod kątem liczby rzeczy, z których trzeba zrezygnować, żeby poświęcić czas na naukę. Dlatego polecam rozłożyć go na raty — najpierw potraktować programowanie jako hobby, uczyć się i kodować dla zabawy. W ten sposób nawet nie zauważamy, jak potencjalna ścieżka do zmiany branży stanie się coraz bardziej osiągalna. Często jednak taka sugestia nie spotykała się z aprobatą wśród moich rozmówców. Słyszałem, że to niemożliwe, że chcieliby zmienić branżę jak najszybciej... Dlatego opracowałem plan jak przebranżowić się i zostać programistą w możliwie najkrótszym czasie.
Geneza planu
Pierwszy plan nauki programowania powstał, gdy pierwsza osoba zapytała mnie jak możliwie szybko rozpocząć karierę programistyczną. Gdy pomagałem tej i kolejnym osobom, mój plan ulegał zmianom. Większość osób modyfikowała go wedle własnych potrzeb, ale ogólnie podążała za nim. Zdawał się im służyć. Jeśli więc nie masz profesjonalnego trenera programowania, który by poprowadził Cię, a chcesz zostać programistą jak najszybciej, to polecam Ci również zaplanować swoją naukę w oparciu o niego.
Dla kogo jest ten plan?
Ten plan powstał dla osób, które:
- znają język angielski na poziomie przynajmniej komunikatywnym,
- potrafią sprawnie operować komputerem, przeglądarką internetową oraz wyszukiwać informacje w internecie.
Osoby, które nie spełniają tych warunków, mają niestety dłuższą drogę do tego zawodu. Im polecam rozpocząć od powyższych, wymaganych umiejętności.
Plan ten jest także dla osób, które rzeczywiście chcą pracować jako programiści. Programowanie wiąże się z dużą ilością czasu spędzonego przy komputerze i ciągłego rozwiązywania problemów. Taki tryb pracy nie będzie odpowiadał każdemu.
Plan zakłada też dostęp do dużej liczby firm poszukujących specjalistów w tej dziedzinie. Tak sytuacja przedstawia się w dużych miastach. Niestety ciężko mi powiedzieć, jak ta ścieżka powinna wyglądać w mniejszych miejscowościach.
Ile zajmuje przejście tej ścieżki?
To kwestia bardzo indywidualna. Poświęcając przynajmniej 20 godzin tygodniowo na intensywną naukę (średnio zakładałbym bliżej 30 godzin), większość znanych mi osób była w stanie przekwalifikować się w 9 do 12 miesięcy, zaczynając od kariery zupełnie nieprogramistycznej (od inżynierów instalacji, aż po sprzedawców w sklepach) do znalezienia pierwszej pracy jako "Junior Developer" lub osoba na stażu. Sumarycznie można by oszacować ten wysiłek na 1000 do 1500 godzin intensywnej nauki. Wynika to przede wszystkim z tego, że do pracy potrzebujemy nabyć umiejętności o wiele szerszych niż tylko samo programowanie w określonym języku. Dla przykładu, jeśli ktoś chce zostać front-end developerem to na pewno powinien znać:
- HTML i CSS,
- JavaScript,
- wybrany framework (jak React, Vue, Angular),
- najważniejsze narzędzia (takie jak Git czy używane IDE),
- przynajmniej podstawowe wzorce i praktyki,
- mieć ogólną wiedzę techniczną,
- poruszać się w tym środowisku naprawdę dobrze (mieć ukończonych przynajmniej kilka projektów).
To dużo więcej niż jedynie język JavaScript, więc tym samym musi zająć więcej czasu.
Plan w 7 krokach
- Podejmij wstępną decyzję, co chcesz robić jako programista. Skonsultuj się z kilkoma doświadczonymi programistami, poczytaj artykuły i pooglądaj porównania na temat różnic między programistą: front-end, back-end, Android, iOS, systemów wbudowanych, gier, big data itp. Zwróć uwagę na łatwość znalezienia pierwszej pracy i wysokość zarobków. Dla przykładu: tworzenie gier brzmi pasjonująco, ale raczej nie jest to łatwa droga. Na ten moment potrzebujesz podjąć decyzję, w jakim kierunku chcesz iść i jakiego języka będziesz używać. Robienie stron internetowych i JavaScript, albo tester automatyczny i Java, albo Data Scientist i Python, albo analityk i SQL, albo Android i Kotlin, albo iOS i Swift, albo programista systemów wbudowanych (ang. embedded systems) i C, albo... cóż, masz ogrom możliwości.
- Naucz się języka programowania. Ten krok zajmie wiele godzin, bo to nie tylko nauka, ale przede wszystkim oswajanie się z czytaniem i pisaniem kodu. Ukończ kilka kursów online od podstaw oraz spędź dość czasu na ćwiczeniach, by czuć się w tym języku komfortowo. Przydatne mogą się okazać gry programistyczne oraz aplikacje do nauki na telefonie.
- Wybierz framework. Nadszedł czas by wybrać z jakiego frameworku2 będziesz korzystać. Na przykład do pisania stron internetowych popularne są aktualnie React, Vue i Angular. Poczytaj o różnicach i zasięgnij rady doświadczonych programistów.
- Naucz się frameworku. Zrób przynajmniej kilka kursów dotyczących programowania, wykonuj wszystkie ćwiczenia, testuj to, co robi prowadzący, eksperymentuj sam z tym, co już wiesz.
- Rób projekty w wybranym frameworku. Zacznij od kursów na YouTubie (albo innych platformach) jak zrobić różnego rodzaju projekty w wybranym przez Ciebie frameworku. Możesz wyszukać na przykład "Make game in React" czy "Make shop in Vue". Takich kursów nie brakuje na YouTubie. Podążaj za tym, co robią prowadzący i wykonuj ten projekt samodzielnie. To ważne, bo jednocześnie zdobywasz wiedzę jak takie projekty powstają i budujesz swoje portfolio. W przyszłości postaraj się je rozwijać — jak nauczysz się nowych rzeczy, to zastanów się, gdzie możesz ich użyć w napisanych już projektach. Pamiętaj o robieniu kopii zapasowych, najlepiej przy użyciu Git.
- W międzyczasie douczaj się reszty narzędzi oczekiwanych przez pracodawców. Zrób kurs z Git, z używania konsoli, ze środowiska, w którym będziesz programować, z popularnych bibliotek. Nie zaszkodzi dowiedzieć się, czym jest regex, HTTP i REST, programowanie funkcyjne i obiektowe, najważniejsze skróty klawiszowe itp. Wydaje się, że to niewielkie tematy, ale te umiejętności okażą się cenne zarówno przy programowaniu, jak i przy rekrutacji.
- Zacznij wysyłać CV. W zasadzie im więcej tym lepiej. Warto wysyłać ich przynajmniej po 100 tygodniowo (nie pomyliłem się, w dużych miastach jest tyle ofert pracy dla programistów). Nie bój się aplikować do tej samej firmy, gdy otworzy się nowa rekrutacja. Nie wahaj się startować na pozycje nieco powyżej Twojego doświadczenia (jak firma nie znajdzie doświadczonego programisty, często zaczyna szukać wśród obiecujących nowicjuszy). Dobrą strategią wydaje się skupienie na tym przez jeden dzień w tygodniu, a przez resztę tygodnia koncentracja na dopracowywaniu swoich projektów oraz przygotowanie się do rozmów o pracę. Do tego procesu pomagają zestawienia typowych pytań padających podczas rozmów rekrutacyjnych. Postaraj się na jak najwięcej z nich mieć z góry przygotowaną odpowiedź.
Na wszystkich etapach rób dużo notatek. Przydatne bywa też uczenie się pewnych rzeczy na pamięć przy użyciu fiszek (na przykład w programie Anki). Co prawda wiedza wykuta na pamięć mało przydaje się w samej pracy, ale pozwala zabłysnąć przed rekruterami.
Podczas całej ścieżki warto mieć przy sobie osobę bardziej doświadczoną, z którą możesz się przynajmniej raz w tygodniu skonsultować. Chodzi o kogoś, kto odpowiedziałby na Twoje pytania i wyłapał błędy, które mogłyby Cię blokować w dalszym rozwoju. Najlepiej by był to praktykujący programista.
Polecam nie bać się pójścia na staż lub praktyki, nawet darmowe. Zwykle firmy w młodych programistów i tak muszą inwestować sporo czasu bardziej doświadczonych osób. Dopiero z czasem zaczynają oni przynosić większy zysk, niż sami są wydatkiem. Zazwyczaj, jak tylko zaczniemy pierwszą pracę w programowaniu, tempo nauki niesamowicie przyspiesza, a nasza pozycja na rynku szybko rośnie. Doświadczenie zawodowe jest też bardzo cenne w CV. Tak więc nawet na darmowy staż czy praktykę można patrzeć jak na inwestycję.
Zakończenie
Zmiana branży to ścieżka ciężka, ale możliwa do osiągnięcia. Nie wymaga studiów, wymaga dużo mniej naturalnych zdolności niż się powszechnie wydaje3. Wymaga jednak wielu godzin. Gdy spędzamy je bez pośpiechu, w ramach hobby, to upływają szybko. Gdy jednak podchodzimy do nich jak do sprintu, by jak najszybciej dotrzeć do upragnionego nowego zawodu, może nas wykończyć emocjonalnie. Zwłaszcza ostatni krok, w którym siłą rzeczy dostaje się odmowy od wielu firm. Dlatego nikogo na tą drogę nie popycham na siłę. Zachęcam raczej, by zacząć od programowania z pasji. Jeśli jednak się na nią zdecydujesz albo życie Cię na nią skieruje, to mam nadzieję, że mój plan okaże się przydatny i skuteczny.
[1] Vicki L. Sauter, Predicting computer programming skill, Computers & Education, Volume 10, Issue 2, 1986, Pages 299-302, ISSN 0360-1315, https://bit.ly/2UNQi9V
[2] Shute, V. J. (1991). Who is Likely to Acquire Programming Skills? Journal of Educational Computing Research, 7(1), 1–24. https://bit.ly/2U6l1Py
Nie udało mi się tutaj uniknąć rozróżnienia płci, więc naprzemiennie będę używać określenia "programista" i "programistka".
Najważniejsza biblioteka używana w projekcie, decydująca jak piszemy nasz kod. Patrz Słowniczek na końcu książki.
Wiele osób rezygnuje, myśląc, że potrzebne są zdolności matematyczne, a tymczasem niektóre badania sugerują, że ważniejsze mogą być zdolności językowe[1][2].