Jak zacząć programować - pierwsze kroki w programowaniu - okładka

Jak zacząć programować

Posted on Categories Felietony

Gdy zaczynałem uczyć się programowania, brakowało mi artykułu, w którym ktoś podpowiedziałby powinna wyglądać moja ścieżka nauki. Zdaję sobie sprawę, że najtrudniejszy jest ten pierwszy krok. Dlatego też postanowiłem napisać ten artykuł. Będzie on dla Ciebie szczególnie przydatny jeśli dopiero stawiasz pierwsze kroki w nauce programowania. Jednak jeśli masz już swój pierwszy napisany program za sobą, to i tak zachęcam do przeczytania wpisu. Nawet jeśli jesteś już spore doświadczenie to też zachęcam do przeczytania. Być może Twoja perspektywa i doświadczenia będą nieco inne niż moje. W takim wypadku gorąco zachęcam do dyskusji w komentarzach i pomoc tym nieco mniej doświadczonym czytelnikom.

Dlaczego chcesz zacząć programować?

Na samym początku warto sobie odpowiedzieć po co Ci umiejętność programowania. Być może potrzebujesz nauczyć się programować do jakiegoś projektu w pracy, szkole lub na studiach. Być może potrzebujesz uprościć sobie życie i zautomatyzować pewne czynności. A być może chcesz zostać zawodowym programistą.

W zależności od powodu Twoja ścieżka rozwoju będzie wyglądała inaczej. Ścieżka rozwoju na potrzeby jednego projektu lub na własny użytek będzie wyglądać inaczej niż w przypadku chęci zostania profesjonalistą. Ta druga wymaga zdecydowanie większego wysiłku. Co więcej, po czasie może się okazać, że programowanie nie jest dla Ciebie. Dlatego warto zawczasu wiedzieć, z czym wiąże się kariera programisty i że nie jest to droga usłana różami. Więcej o wadach pracy jako programista dowiesz się z artykułu Dlaczego nie warto być programistą. W tym artykule skupię się głównie na tej drugiej ścieżce, ale nawet jeśli nie planujesz robić kariery jako programista, to znajdziesz w nim coś dla siebie.

Jeśli jeszcze Cię nie zniechęciłem to bardzo dobrze. Bo pomimo wad jakie wynikają z pracy jako programista, to i tak to lubię robić. Mam nadzieję, że i ty polubisz.

Ale jak zacząć programować?

Wiedząc już dlaczego chcesz zacząć programować, warto zastanowić się co konkretnie chcesz programować. Niezależnie od wyboru, pierwsze kroki będą wyglądały podobnie. Różnice pojawią się nieco później. Przemyślenie tematu już na tym etapie pomoże Ci zarówno w doborze języka programowania, a także konsekwentnie podążać obraną ścieżką rozwoju. Wiedząc co chcesz programować, sprawdź jakie języki są dominującymi w segmencie aplikacji, które zamierzasz tworzyć. Możesz zrobić research na własną rękę lub skorzystać z kilku propozycji ode mnie:

  • Data Science, analiza danych statystycznych –  Python, R,
  • Aplikacje serwerowe (backend) – C#, Java, Go, JavaScript, Python, PHP,
  • Aplikacje WWW (frontend) – HTML/CSS/JavaScript,
  • Aplikacje desktopowe – Java, C#, JavaScript,
  • Aplikacje mobilne – Kotlin, Swift,
  • Gry – C++, Java, C#,
  • Internet of Things – Python, C.

Osobiście, gdybym miał dziś podejmować się wyboru języka, to postawiłbym na JavaScript lub Pythona. Po części ze względu na fakt, że właśnie w nich głównie programuję, a po części z uwagi na ich wszechstronność.

Jeśli jednak w chwili obecnej nie wiesz jeszcze co chcesz programować, to możesz odłożyć tę decyzję na później. W takim wypadku zachęcam do spróbowania czegoś wszechstronnego np. wspomniane już Python czy JavaScript.

Zdecydowanie odradzam Ci wybór więcej niż jednego języka na start. Tak samo, nie warto zaczynać nauki od frameworków. Powinieneś budować solidne fundamenty wiedzy a nie iść na skróty. Zaufaj mi, wybierz jeden język i trzymaj się go konsekwentnie. Chyba że uznasz że dany język całkowicie Ci nie odpowiada, wtedy warto rozważyć zmianę.

Najważniejszy język

Mając już wybrany język programowania będziesz potrzebny Ci jeszcze jednen języka. Jest to język angielski i jest on obowiązkowy. Zdecydowana większość treści z branży IT tworzona jest w języku angielskim, stąd bez podstawowej znajomości angielskiego nie będziesz w stanie ani się uczyć ani wchodzić w interakcję z innymi programistami. Nawet sam kod jest pisany w języku angielskim. Oczywiście możesz znaleźć kod w innych języka jednak jest to zdecydowanie nisza, a język angielski jest standardem branżowym.

Jeśli masz problem z gramatyką, konstruowaniem wypowiedzi lub czytaniem to mogę polecić Ci książki Grama to nie drama autorstwa Arleny Witt. Nic za to nie otrzymuję, a link NIE jest linkiem afiliacyjnym. Robię to, ponieważ dzięki tym książkom moje umiejętności posługiwania się językiem angielskim istotnie wzrosły i uważam je ze szalenie wartościowe. Braki w słownictwie możesz nardobić przy pomocy Google Translate lub Deepl. Najważniejsze jest, abyś umiał/a czytać i pisać w stopniu umożliwiającym Ci uczenie się.

Wybór języka programowania a zarobki

Nie jest tajemnicą, że programiści pewnych języków zarabiają lepiej, a inni gorzej. Możesz się tym sugerować, jednak osobiście to odradzam. Możesz w ten sposób postawić na dobrze płatną technologię, w której pracy przyprawi Cię o ból głowy.

Przykładem takiej technologii jest język COBOL. Co prawda oferty pracy w COBOLu są bardzo atrakcyjne finansowo, jednak sam język ma kilkadziesiąt lat a same oferty pojawiają się bardzo rzadko. Pojawiają się wtedy wręcz żarty, że jakiś programista właśnie umarł i trzeba mu znaleźć zastępstwo. Na dodatek sam język, mówiąc eufemistycznie, do najprzyjemniejszych i najprostszych nie należy.

Dlatego zamiast skupiać się na zarobkach, skupiłbym się na ilości ofert, powszechności użycia danej technologii oraz wymaganiach pracodawców. Zobacz jakie języki przodują w ofertach pracy w Twojej okolicy i zastanów się, czy któryś z nich jest językiem, w którym chcesz programować. Nie bez powodu napisałem w Twojej okolicy. Wielu pracodawców nie prowadzi praktyk ani staży w wariancie zdalnym.

Mam już wybrany język, co dalej?

Mając już wybór języka za sobą czas na zbudowanie solidnego fundamentu. Przez fundament mam na myśli pozyskanie podstawowej wiedzy, która pozwoli Ci rozpocząć swój pierwszy projekt. Zanim jednak zaczniesz pracę nad projektem, to zachęcam do nauki absolutnych podstaw. W tym celu polecam Ci odwiedzić strony z wyzwaniami programistycznymi. Kilka przykłakdowych przedstawiam poniżej ale po wpisaniu frazy „coding challenges” w Google znajdziesz ich wiele więcej:

Pozwoli Ci to na poznanie podstawowych elementów skłądowych obecnych w zedcydowanej większości języków programowania tj. typy danych, zmienne, pętle, instrukcje warunkowe, funkcje, obiekty, itd.

Zacznij od tych najłatwiejszych zadań i stopniowo próbuj rozwiązaywać coraz trudniejsze. W tym przypadku im więcej tym lepiej. Te zadania są specjalnie zaprojektowe tak, by sprawdzić znajomość konkretnej konsktrukcji, funkcji lub algorytmu. Każde kolejne zadanie będzie wymagało od Ciebie nauki czegoś nowego.

Tutaj umiejętność wyszukiwania danych będzie nieoceniona. Odradzam natomiast szukania gotowych odpowiedzi do zadań, bo niweczy cały trud włożony w naukę. Nie bój się korzystać z wyszukiwarki, czytaj dokumentację, poznawaj algorytmy czy znane wzorce i rozwiązania w programowaniu. Przeszukiwanie internetu to całkowicie normalna sprawa. Robi to praktycznie każdy programista i bardzo często więcej czasu spędza się na badaniu problemu, szukaniu dodatkowych informacji niż na pisaniu kodu. Kod jest tylko rozwiązaniem przedstwionego problemu w języku zrozumiałym dla komputera. Samo rozwiązanie powstaje w głowie a dojście do niego zwykle wymaga zdobycia nowej wiedzy czy dotarcia do konkretnych informacji.

Nie zniechęcaj się wolnym progresem. Programowanie nie jest łatwe, zwłaszcza dla kogoś, kto dopiero zaczyna. Daj sobie czas i pozwalaj sobie nie błędy. Jeśli utkniesz na jakimś zadaniu, to kobinuj aż wpadniesz na działające rozwiązanie. Doświadczonym programistom też zdarza się utknąć i szukać rozwiązania przez wiele godzin a nawet dni. Najczęściej rozwiązanie okazuje się banalne i w Twoim przypadku też pewnie tak będzie. Tym również nie ma co się przejmować.

Nie bój się też zadawać pytań. Możesz poszukać grup na FB, Slacku czy Discordzie lub spróbować zapytać na Stack Overflow. Tutaj odsyłam Cię do artykułu Jak zadawać dobre pytania techniczne, ponieważ zadawanie dobrych pytań nie jest takie proste jak się na pierwszy rzut oka wydaje.

Pierwszy projekt

Gdy już uznasz, że czujesz się na siłach czas zacząć pierwszy projekt. Nie musi to być drugi Facebook, a wręcz nie powinien. Niech to będzie coś małego, a najlepiej coś co Ci się przyda w życiu np. prosta automatyzacja lub zmodyfikowany przykład aplikacji z dokumentacji. Może to być też aplikacja związana z tematem, który Cię interesuje. Dzięki temu będziesz miał/a większą motywację aby go rozwijać i ulepszać. Ja w ramach treningu napisałem kiedyś aplikację, która zmieniała nazwy plików w folderze według podanego wzoru, co przy folderach zawierających kilkadziesiąt tysięcy plików znacznie ułatwiało mi pracę. Brzmi prosto i takie ma być. To jest bardzo istotne, aby nie rzucać się z motyką na słońce.

Ten projekt nie musi być perfekcyjny, a wręcz jestem pewien że nie będzie. Potem napisz kolejny projekt i kolejny. Tak jak pisałem wcześniej, możesz robić błędy i one na pewno będą się zdarzać. Najważniejsze jednak jest to, że każda kolejna zmiana w projekcie czy napotkany problem nauczy Cię czegoś nowego. W zależności od wybranej technologii, celów i potrzeb tworzonej aplikacji będziesz chciał lub wręcz musiał użyć kolejnych narzędzi/technologii. To jest idealny moment na zrobienie researchu i poznawanie kolejnych wzorców, zależności czy technologii.

Gdy już skończysz swój projekt zacznij kolejny, i kolejny. Uruchom swoją kreatywność i nie bój się eksperymentować. Teraz jest ten czas gdy możesz próbować nowych rzeczy i technologii. Tutaj wciąż zachęcam do zrobienia kilku mniejszych projektów zamiast jednego dużego. Robiąc kilka lub kilkanaście kiepskich projektów, z każdym kolejnym zaczniesz zauważać kolejne wzorce i sam zaczniesz rozumieć czego i jak dalej się uczyć. Z kolei utknięcie przy jednym projekcie może spowodować zmęczenie materiału.

Przy poznawaniu nowych technologii dla wybranej ścieżki rozwoju pomocny będzie portal roadmap.sh. Znajdziesz tam roadmapy dla różnych stacków technologicznych oraz kolejność w jakiej warto poznawać kolejne narzędzia/technologie. Opanowanie technologii z takiego jednego drzewka to praca na grube miesiące o ile nie lata.

Konkursy

Zachęcam Cię również do spróbowania w konkursach i wydarzeniach programistycznych. Jeśli się uczysz, to być może w Twojej szkole lub uczelnii odbywają się olimpiady programistyczne czy hackatony. To świetna okazja na zdobycie nowych doświadczeń. Nie tylko poznasz tam innych zdolnych i ambitnych ludzi, ale też poznasz nowe problemy spotykane w branży IT. Co więcej, udział w konkursach często potrafi dać fory przy rozmowach o pracę.

Materiały do nauki

Obowiązkowym miejscem do nauki jest dokumentacja dla wybranej technologii. Oprócz dokumentacji, w Internecie znajdziesz ogromną ilość materiałów zarówno w formie pisanej jak i w formie video. Znajdź sobie bloga, a najlepiej kilka, dedykowanych wybranemu językowi i śledź je regularnie.

Jeśli preferujesz formę video, to na YouTube znajdziesz ogrom darmowych kursów i poradników dla dowolnej technologii. Kilka przykładowych kanałów godnych polecenia zamieściłem w artykule Wartościowe kanały programistyczne na YouTube. Osobiście jestem zwolennikiem krótkich filmów objaśniających jedno zagadanienie. Istnieją także wielogodzinne kompletne kursy dla danej technologii i byc może taka forma będzie dla Ciebie odpowiednia.

Możesz też zacząć książki dla programistów. Dość obszerną listę polecanych przeze mnie pozycji znajdziesz na przygotowanej przeze mnie liście z polecanymi książkami. Co do wyboru książek to tak jak w przypadku pierwszego projektu, nie rzucaj się z motyką na słońce. Zacznij od jakiejś książki dla początkujących. Na zaawansowane książki przyjdzie jeszcze czas. Zdecydowanie bardziej docenisz książki o wzorcach projektowych czy zasadach tj. SOLID, KISS, DRY, gdy wcześniej napotkasz problemy, które te pojęcia rozwiązują.

Zachęcam jednak do stawiania na praktykę ponad teorię. Oczywiście teoria w pewnym momencie będzie niezbędna, lecz całkowite poświęcenie się chłonięciu treści i zdobywaniu tylko wiedzy teoretycznej uważam za nową formę prokrastynacji.

Praktyki, staż, pierwsza praca

Po zdobyciu pierwszych doświadczeń przy pracy z hobbystycznymi projektami zachęcam do znalezienia stażu, praktyk lub nawet pierwszej pracy. Nic tak nie napędzi rozwoju jak praca z innymi ludźmi i rozwiązywanie realnych problemów. To ogromnie buduje, że Twój kod będzie rozwiązywał jakiś faktyczny problem, za rozwiązanie którego ktoś zapłacił (często niemałe) pieniądze. Z kolei praca z innymi ludźmi pozwala korzystać z ich doświadczeń i wiedzy. Powiem więcej, nawet praca z z kimś, kto jest na początku swojej ścieżki zawodowej może przynieść Ci ogromną wartość. Być może ta osoba zada jakieś pytanie, które zmieni Twoje postrzeganie jakiegoś tematu. A być może wie o czymś, czego ty nie wiesz i się tą wiedzą z Tobą podzieli. Każdy poznany człowiek to szansa na nowe pozytywne doświadczenia. Zwłaszcza gdy mowa o ludziach o podobnym obszarze zainteresowań.

Szukając pracy nie zniechęcaj się odmowami. Obecnie konkurencja na rynku początkujących programistów jest ogromna. Ponadto, płace w pierwszej pracy będą prawdopodobnie dalekie od programistycznego eldorado opisywanego w mainstremowych mediach. Dlatego tym bardziej zachęcam aby przyłożyć się do nauki i wyróżnić się z tłumu. Dobrym posunięciem będzie założenie profili na LinkedIn i GitHub i regularnego publikowania tam postępów. Wrzuć tam informacje o swoich projektach, opisz czego się w nich nauczyłeś i jakie problemy rozwiązałeś. Możesz też rozważyć założenie bloga, kanału na YouTube czy podcastu. W moim przypadku nie zdarzyło mi się, aby rekruter nie zwrócił uwagi na mojego bloga w trakcie interview.

Podsumowanie

Na sam koniec wspomnę o kilku tematach których znajomość będzie nieoceniona niezależnie od wybranej technologii:

  • Znajomość systemu kontroli wersji – obecnie standaradem jest Git. Kontrola wersji pozwoli Ci śledzić zmiany w kodzie oraz pracować z innymi programistami. Przenoszenie kodu na pendrive, archiwizacja w plikach .zip, czy wysyłanie plików mailem lub na dysk w chmurze jest już passé.
  • Podstawowa znajomość terminala i komend wiersza poleceń. Nie zawsze będziesz miał/a dostęp do środowiska graficznego. Dodatkowo, poprzez środowisko graficzne nie zautomatyzujesz ani nie zaprogramujesz pewnych rzeczy. Zachęcam do pójścia. w kierunku nauki poleceń z systemów Unixowych. Nawet na Windowsie dzięki powłoce PowerShell będziesz mógł z nich korzystać.
  • Umiejętność debuggowania. Jeśli wiesz jak znaleźć źródło danego problemu, to jego rozwiązanie często jest tylko formalnością.

Opróćz tego, gorąco zachęcam do przeczytania innych artykułów mojego autorstwa związanych z rozwojem kariery:

Oprócz tych wpisów zachęcam do zapoznania się z resztą materiałów, które posłużyły mi do przygotwania tego artykułu. Ich pełną listę znajdziesz poniżej.

Trzymam kciuki i życzę powodzenia!

Źródła i materiały dodatkowe

Zapisz się na mailing

Zapisując się na mój mailing będziesz otrzymywać wartościowe treści powiadomienia o najnowszych wpisach na skrzynkę email.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *