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

Jak zacząć programować

Opublikowano Kategorie Felietony, Praca w ITCzas czytania 14min

Gdy zaczynałem uczyć się programowania, brakowało mi artykułu, w którym ktoś podpowiedziałby mi, jak 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 masz 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 pt. 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 w doborze języka programowania, ale 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 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, C#, 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 jeden 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ęzykach, 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 nadrobić 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 COBOL-u są bardzo atrakcyjne finansowo, jednak sam język ma kilkadziesiąt lat, a oferty dla programistów COBOL-a 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ładowych 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ładowych obecnych w zdecydowanej 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ązywać coraz trudniejsze. W tym przypadku im więcej tym lepiej. Te zadania są specjalnie zaprojektowane tak, by sprawdzić znajomość konkretnej konstrukcji, 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 przedstawionego 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 kombinuj, 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 uczelni 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 zagadnienie. Istnieją także wielogodzinne kompletne kursy dla danej technologii i być może taka forma będzie dla Ciebie odpowiednia.

Możesz też zacząć czytać 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 którego rozwiązanie 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 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łaca w pierwszej pracy będzie prawdopodobnie daleka od programistycznego eldorado opisywanego w mainstreamowych 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ś/aś i jakie problemy rozwiązałeś/aś. 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 standardem 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ócz 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 przygotowania tego artykułu. Ich pełną listę znajdziesz poniżej.

Trzymam kciuki i życzę powodzenia!

Źródła i materiały dodatkowe

Dominik Szczepaniak

Zawodowo Senior Software Engineer w CKSource. Prywatnie bloger, fan włoskiej kuchni, miłośnik jazdy na rowerze i treningu siłowego.

Inne wpisy, które mogą Cię zainteresować

Zapisz się na mailing i odbierz e-booka

Zapisując się na mój mailing, otrzymasz darmowy egzemplarz e-booka 106 Pytań Rekrutacyjnych Junior JavaScript Developer! Będziesz też otrzymywać wartościowe treści i powiadomienia o nowych wpisach na skrzynkę e-mail.

Subscribe
Powiadom o
guest

0 komentarzy
Inline Feedbacks
View all comments