4 skuteczne kroki w nauce programowania


Poznaj 4 skuteczne kroki w nauce programowania. Zobacz jak zacząć naukę oraz jak długo trwa nauka programowania.


Programowanie przyciąga coraz to więcej osób. Po części jest to spowodowane bardzo dobrym wynagrodzeniem i dobrymi warunkami pracy. Są też tacy co najbardziej cenią w tej branży to, że jest po prostu ciekawa. Niezależnie od motywacji jest to ciekawa przygoda.

Jeśli tu trafiłeś to prawdopodobnie jesteś mocno zdecydowany na naukę programowania i szukasz odpowiedzi jak długo trwa nauka programowania albo jak zacząć naukę programowania.

Kwestia motywacji jest bardzo ważna, ale opisanie jej w jednym wpisie z nauką niepotrzebnie wydłużyłaby cały wpis. Dlatego bez zbędnego przedłużania przejdźmy do tematu i poznajmy 4 skuteczne kroki w nauce programowania.

Skuteczne kroki w nauce programowania

Ja osobiście naukę programowania podzieliłbym na cztery grupy.

  • Nauka podstaw
  • Praktyka mózgu
  • Nauka praktycznego rozwiązywania problemów
  • Nauka dobrych wzorców i praktyk

Każdy z tych aspektów jest ważny i każdy z nich postaram się bliżej opisać niżej.

Jak zacząć naukę programowania

To pierwszy etap z którym spotyka się każdy początkujący. W głowie zrodziła Ci się myśl do nauki programowania i ogarnąłeś już czym jest pętla i warunek ale nie wiesz co dalej?. To bardzo częste. Ludzie się tego boją ale naprawdę nie ma czego.

Zastanów co chcesz robić, wpisz pierwszy lepszy poradnik z YouTube i go przerób. Najczęściej poradniki są robione w ten sposób, że wspólnie z autorem realizowany jest jakiś projekt. Nie przejmuj się jeśli na początku nie wszystko będzie zrozumiałe. Po prostu zróbcie wspólnie ten materiał. Jak już skończysz, to spróbuj zrobić własny projekt w oparciu o ten poradnik. Ja tak właśnie realizowałem gry mobilne. Znalazłem poradnik w którym autor robił endless runnera i sam metodą prób i błędów zrobiłem swoją grę, która teraz jest w Google Play - Furry Jumper . To bardzo ważny etap w nauce programowania.

W ten sposób, dzięki eksperymentom tworzysz swój własny projekt. A to daje ogromną satysfakcję i napędza do działania. Bardzo ważny jest fakt, że musisz ten program pisać. Nigdy nie kopiuj kodu, bo w ten sposób dużo się nie nauczysz. A jeśli czegoś nie rozumiesz i coś jest niejasne to baw się tym, zmieniaj wartości i monitoruj co się zmienia. Dzięki temu lepiej zrozumiesz trudne fragmenty kodu.

Jak już poznasz podstawy możesz przejść dalej i poznawać kolejne skuteczne kroki w nauce programowania.

Praktyka mózgu

Bardzo ważna jest praktyka logicznego myślenia i kreatywnego rozwiązywania problemów. Tego uczą zagadki matematyczne i algorytmy. Jeśli będziesz pracować jako programista webowy, to stosunkowo rzadko będziesz rozwiązywać zaawansowane problemy algorytmiczne. Nie będziesz się też zbyt często spotykać ze skomplikowaną matematyką. To wszystko nie oznacza jednak, że powinieneś to pominąć. Rozwiązywanie algorytmów pozwala Ci inaczej spojrzeć na problem i uczy algorytmicznego myślenia, które prcentuje w przyszłości.

Najprawdopodobniej nie będziesz musiał implementować żadnego algorytmu do sortowania, bo obecne są już bardzo wydajne i nie ma sensu odnajdywać koła na nowo. To nie jest istotne. Pisząc różne algorytmy sortowania poznajesz ich specyfikę i orientujesz się w ich złożoności. Nigdy nie wiesz też, które rozwiązania mogą Ci się przydać. A tym bardziej ich nie użyjesz, jeśli nie będziesz wiedzieć o jego istnieniu. Podobnie jest zresztą z matematyką. Przykładowo, ostatnio w pracy mieliśmy problem ze skalowaniem i obracaniem obrazków na canvasie . Poprawiliśmy to dopiero po narysowaniu przypadków i rozbiciu tego na czynniki pierwsze. Rozwiązanie okazało się trywialne i był to po prostu obrót punktu względem innego punktu.

Każdy problem można rozwiązać prosto i naiwnie. Ja w swojej pierwszej grze obsługę cienia w grze realizowałem za pomocą chyba 20 warunków. A do tego całość była powielona dwukrotnie, bo przecież postać może poruszać się w prawo i w lewo. Na studiach mieliśmy matematykę dyskretną i właśnie algorytmy. Po tych przedmiotach dokładnie ten sam kod z 40 linijek zmieścił się w jednej z prostym wzorem i to wszystko dzięki algorytmach i nauce ich rozwiązywania.

Dlatego gorąco zachęcam Cię do główkowania i rozwiązywania algorytmów. Nigdy nie wiesz kiedy mogą się przydać ;). Kolejną ogromną zaletą z ich implementacji jest fakt, że możesz je spotkać na rozmowach rekrutacyjnych ;)

Nie zapominaj o tym ważnym elemencie, który jest zdecydowanie zbyt często pomijany. Zarejestruj się w project Euler , Codewars, spoj lub innych stronach do realizacji zadań logicznych i równolegle z poznawaniem języka czy frameworka rozgrzewaj też swoje szare komórki przy. Nie popadaj też w drugą skrajność gdzie ludzie twierdzą, że algorytmy są najważniejsze i są ponad językami programowania dlatego to na nich musisz się skupiać. To po części prawda, bo algorytmy rzeczywiście są uniwersalne ale żeby je zaimplementować musisz umieć przelać myśli na kod ;)

Nauka praktycznego rozwiązywania problemów

Na tym etapie powinieneś już znać język i framework na tyle, że możesz próbować swoich sił w większym projekcie. Nic tak nie uczy pokory jak duży projekt.

Tu masz dwie drogi. Z jednej strony możesz iść w OpenSource , a z drugiej to dobra pora żeby zrealizować własny projekt. Obie drogi są skuteczne, dobre i rozwijają w różnych obszarach. Ideałem byłoby gdybyś równolegle zaczął do czegoś kontrybuować i rozwijał swój projekt. To jest czasochłonne, dlatego nie musisz od razu iść na całość. Jeśli miałbym wybrąć jedno to jednak zacząłbym od własnej aplikacji.

Jaki projekt, a właściwie jakie projekty wybrać na start opisałem w innym wpisie . Ważne, żeby był to większy projekt. Rozwijając własny produkt uczysz się wielu praktycznych umiejętności, od napisania pierwszej linijki po wdrożenie. Może będziesz musiał jakiś proces zautomatyzować i poznasz CI/CD? Spotkasz po drodzę masę problemów i zaprzyjaźnisz się ze StackOverflow, a to wierny przyjaciel, który pomaga w nauce programowania ;)

Twój kod może być chaotyczny ale ważne, żeby miał jedną ogromną zaletę - DZIAŁAŁ! Mam nadzieję, że nie jesteś w gronie osób podobnych do mnie, które zaczynały setki projektów i żadnego nie doprowadzały do końca. Byłem tak zafascynowany tworzeniem prostych gier konsolowych, że menu było mi zbędne. I tak skończyłem z masą gier, które nigdy nikomu się nie przydały i których teraz nawet bym nie potrafił uruchomić. Nie potrafiłbym, bo nawet ich nie mam. Jak zaczynałem, to nie wiedziałem czym jest system kontroli wersji i wszystko trzymałem na pendrive. Ten się zgubił i całe portfolio zniknęło. A szkoda bo były to długie godziny pełne poświęcenia, krwi i potu ;)

Nauka dobrych praktyk

Jeśli rzetelnie przepracowałeś 3 poprzednie kroki, to znasz język na całkiem przyzwoitym poziomie i możesz przejść dalej i uczyć się dobrych wzorców.  To jest dobry moment, żeby zacząć sięgać do książek i uczyć się więcej na temat architektury. Wdrażaj się w kolejne wzorce projektowe i staraj się pisać zgodnie z zasadami SOLID. Tu dużo wiedzy będziesz czerpać z książek, wykładów i prelekcji na różnych wydarzeniach.

Jeśli wcześniej nie pisałeś testów, to możesz też spróbować TDD. Testy początkowo mogą przeszkadzać w nauce, bo nawet nie wiesz co chcesz zrealizować ale z czasem zmienią twoją perspektywę i sposób w jaki patrztsz na kod.

Stosując jedną zasadę będziesz mieć wrażenie, że łamiesz inną. Czytając jedną książkę napotkasz się na trzy kolejne, które warto poznać. Dlatego właśnie odradzam zaczynać od razu z tej strony. Tego jest za dużo przez co będziesz czuć się przytłoczony i szybko byś się zniechęcił.

Nie odkładałbym tego też w nieskończoność, bo łatwo można popaść w skrajność w której nie ma czasu na analizę rozwiązania. Kod sam się przecież nie napisze ;). Prawda jest taka, że dobrze zaprojektowany system tworzy się znacznie szybciej. Niektóre problemy można też przewidzieć wcześniej. Zbyt późno zlokalizowane mogą się okazać kosztowne do wycofania. To wszystko wymaga jednak doświadczenia, a tego ten sposób zdobędziesz nawięcej.

Jaki język wybrać na początek

To proste, Python! ;)

A tak poważnie to może Cię zaskoczyć ale to bez znaczenia. Język jest tylko narzędziem. Przekonasz się o tym jak będziesz na tym ostatnim etapie. Każdy ma swoje mocne i słabe strony. Każdy z nich ma inne zastosowania ale na upartego niemal wszystko zrobisz w każdym, który sobie wybierzesz. Będzie to proste, lub trudniejsze. Będzie to mniej lub bardziej wydajne ale da się. Pytanie tylko po co? Pisząc w danym języku poznajesz jego specyfikę i sztuczki, które pozwolą Ci szybciej w nim pracować. Przyzwyczajasz się również do IDE, które przyspieszą twoją pracę. Ale dalej to są tylko narzędzia. To jaki język wybierzesz na start uzależniłbym od dwóch kwestii.

Znasz kogoś, kto programuje w wybranym języku i ta osoba jest chętna do dzielenia się wiedzą? Jeśli tak, to jesteś w domu. Wybierz ten sam język i ucz się od innych. To najłatwiejsza droga.

Jeśli natomiast nie znasz nikogo takiego to zastanów się co chcesz właściwie robić na początku? Jak mówiłem każdy język ma inne przeznaczenie i w dużym uproszczeniu jeśli celujesz w aplikacje okienkowe pod windows, to prawdopodobnie C# będzie najlepszym wyborem, jeśli chcesz bawić się w multiplatformowe aplikacje to spróbuj Javy, która zresztą sprawdzi się super również w aplikacjach na telefony z systemem android. W aplikacjach mobilnych z Javy do Kotlina szybko przeskoczysz w razie potrzeby. A może celujesz w urządzenia od Apple? Tu Swift albo Objective C powinny okazać się dobrym wyborem. Może masz raspbery, lub inny mikontroler i chcesz popracować niskopoziomowo? Warto, żebyś zerknął na C. Chociaż zaczynanie od C nie będzie najprzyjemniejsze. I na koniec mój faworyt, czyli Python. Python najczęściej widuję w DataScience, wszelakich skryptach i stronach internetowych.

Python ze wszystkich wymienionych ma prawdopodobnie najłatwiejszy próg wejścia. Jest najbardziej intuicyjny, chociaż to to bardzo subiektywne. Moim zdaniem po prostu najłatwiej od niego zacząć. Ale uwaga, jest to język dynamicznie typowany, a jednak statyczne typowanie może na początku się przydać w nauce. Z tym typowaniem chodzi o to, że nie musisz jawnie deklarować jakiego typu jest dana zmienna. Na początku może wydawać się, że to ułatwienie ale później zauważysz też wady takiego podejścia.

Pamiętaj, że język to nic stałego. W każdym momencie możesz go zmienić. Nawet zachęcam do tego, żeby raz na jakiś czas napisać jakiś program w innym języku. To miła odskocznia, która również rozwija. Odradzam natomiast skakać między językami, zwłaszcza na początku kariery. Wtedy żadnego nie nauczysz się dobrze i zmarnujesz tylko czas.

Z drugiej storny możesz tkwić w obozie fanatyków jednego języka. Brutalna prawda jest taka, że najwięcej osób uczy się tego języka, na który jest zapotrzebowanie.

Jak długo trwa nauka programowania

Zadam Ci inne pytanie. Czy potrafisz powiedzieć jak długo trwa nauka gry na gitarze lub fortepianie? Odpowiedź pewnie brzmi - To zależy ;).

Programowania nie można się od tak nauczyć. To jest jednocześnie pasjonujące i irytujące w naszej branży. Nauka programowania to proces, który trwa. Na początku uczysz się podstaw, składni, języka i frameworka. Później uczysz się dobrych praktyk i wzorców. Z czasem zauważysz, że to tylko czubek góry lodowej. Jest masa różnych podejść do architektury. Łatwo jest jedne krytykować a inne faworyzować. Dużo trudniej jest już poznać je na wylot i rozwiązanie wybierać na podstawie chłodnej analizy. Im dalej wejdziesz w ten świat tym więcej pokory zdobędziesz.

Jest to też uzależnione od konkretnej osoby. Jedni uczą się szybciej inni wolniej. Osobom technicznym i takim, co myślą analitycznie prawdopodobnie przyjdzie to szybciej. Ale to nie tak, że trzeba być matematykiem, który liczy całki w pamięci, żeby zostać dobrym programistą.

Jak wrócę do moich początków, to było to bardzo rozwleczone ale podstaw uczyłem się jakieś 2, może 3 miesiące. Następnie utknąłem na etapie dłubania swoich gierek w Pascalu i w Allegro pod C. Później miałem 2 lata przerwy i od razu po powrocie wsiąknąłem w Pythona i strony internetowe. Teraz jestem na etapie w którym uczę się o architekturze i wzorcach. Wcześniej wiedziałem, że dane wzorce są ale jak się okazało z praktycznym zastosowaniem już było gorzej. Potrafiłem je też narysować ale jak próbowałem napisać kilka z nich w Python to zauważyłem, że jest nad czym pracować ;)

Jeśli miałbym to ubrać w konkretne ramy czasowe, to myślę że  przy przyjęciu około 8 do 10 godzin tygodniowo w 3 miesiące powinienieś przejść pierwsze dwa etapy. Następnie kolejne 3 miesiące na projekt. Oczywiście etap z projektem jest uzależniony od jego wielkości i stopnia zaawansowania ale średniej wielkości projekt powinien zająć właśnie mniej więcej 3 miesiące . Wszystkie punkty poza pierwszym będą się przewijać prawdopodobnie przez całą twoja karierę.

Kilka wskazówek

Załóż konto na GitHub i tam wrzucaj swoje aplikacje.

Nawet jeśli uważasz, że są słabe to i tak tam je trzymaj. Będziesz mieć portfolio, a to ogromny plus na początku kariery. Takie repozytorium pozwoli Ci również monitorować postępy. Na początku nie wiesz tak na prawdę czy twój kod jest dobry czy nie. Dowiesz się tego jak spojrzysz na niego po czasie.

Kup gumową kaczuszkę.

Jeśli jej nie posiadać to koniecznie spraw sobie taką. Nie żartuje.

Jak masz jakiś problem to weź kaczuszkę i wyjaśnij jej jaki to problem. Jeśli jakieś rozwiązanie wydaje Ci się dziwne, weź kaczuszkę i jej to przedstaw. I w końcu jak masz jakiś fragment kodu, który wydaje Ci się zawiły, wyjaśnij go kaczuszce. Mówiąc to wszystko na głos sam wyłapiesz błędy w swoim rozumowaniu.

Nie musi to być akurat żółta, gumowa kaczuszka. Zerknij na zdjęcie otwierające artykuł, żeby zobaczyć armię " kaczuszek " autora zdjęcia - Yetem.pl . Tak się po prostu przyjęło, że to kaczuszka. Spróbuj i koniecznie napisz w komentarzu czy pomogło :)

Cierpliwość to cnota.

Zapamiętaj te zdanie. Jeśli wcześniej nie programowałeś to nie wiesz co to dziesiątki godzin spędzone na debugowaniu. Każda kolejna sekunda wysysa z Ciebie całą energię. Masz ochotę wyrzucić monitor przez okno. Ale jak tylko zaciśniesz zęby i uda Ci się rozwiązać problem to czujesz się jak bóstwo. Świat stoi przed Tobą otworem i jesteś królem świata. Żeby zostać programistą musisz włożyć sporo pracy. Ale uwierz, warto :)

I tu jeszcze jedna uwaga. Po rozwiązaniu problemu poświęć jeszcze kilka minut, żeby przeanalizować co było jego przyczyną. Dzięki temu w przyszłości możesz uniknąć podobnych.

Podsumowanie

Programowanie to bardzo ciekawe ale wymagające zajęcie. Jeśli chcesz być dobrym programistą musisz nieustannie się doskonalić.

Na start zacznij od poradników na YT. Jak poznasz podstawy uderzaj w OpenSource i/lub większe, własne projekty. Z czasem wdrażaj do swoich programów dobre praktyki i wzorce. Cały czas pamiętaj też o rozwijaniu logicznego myślenia poprzez rozwiązywanie algorytmów.

Programowania nie nauczysz się z dnia na dzień. Będzie to od Ciebie wymagać wielu godzin. Nie ma określonych ram czasowych na zostanie dobrym programistą.

Moim zdaniem jeśli jesteś w stanie samodzielnie napisać 3 projekty, które podlinkowałem w tym wpisie , albo ich odpowiedniki to jesteś gotowy, żeby zacząć na tym zarabiać. Poznałeś 4 skuteczne kroki w nauce programowania ale to Ciebie zależy jak potoczy się twoja kariera. Możesz iść do pracy i tam jeszcze bardziej doskonalić swój warsztat.

Na jakim etapie Ty jesteś? Zgadzasz się z takim podziałem? A może w twoim przypadku było inaczej? Koniecznie podziel się opinią w komentarzu.

Oct 18, 2019

Najnowsze wpisy

Zobacz wszystkie