Od zera do kodera. Czyli jak nauczyłem się programować?

Raz na jakiś czas do mainstreamowych mediów przebija się historia o „genialnym” nastolatku, który to ucząc się wieczorami programowania stworzył aplikację na której zarobił miliony. Od razu po tego typu publikacji pojawia się niezliczona ilość materiałów o tym jak to szybko i bezboleśnie nauczyć się kodować, zmienić branżę i zwiększyć swoje zarobki. Swoje robią też różnego rodzaju „szkoły” programowania, które również podsycają sporo mitów na ten temat. Każdy ciągnie w swoją stronę w zależności od tego jaki ma w tym interes. Konkluzja jest taka, że żeby dostać przysłowiowe 10k netto miesięcznie to wystarczy skończyć taki, a taki kurs i już! Można podbijać rynek.

Warto jednak dodać, że ucząc się programowania na różnego rodzaju kursach czy to płatnych lub też finansowanych przez samorząd/firmę etc. tak naprawdę nie uczymy się programować ale kodować. Różni się to tym, że programista w przeciwieństwie do kodera (jak zwał tak zwał) poza znajomością danej technologii czyli języka programowania ma również rozległą wiedzę na temat algorytmiki oraz matematyki. Oczywiście pracując w różnego rodzaju „Janusz softach” takie umiejętności raczej nigdy wam się nie przydadzą. Ale tutaj pojawiają się dwa pytania – pierwsze – czy rzeczywiście chcecie pracować w takich firmach, drugie – ile w takim przedsiębiorstwie jesteście w stanie zarobić, bo na pewno nie będzie to 10k. Nikt za proste strony www czy inne aplikacje tyle nie płaci. Sprowadza się to wszystko do tego, że żeby porządnie opanować tajniki wiedzy jaka może się przydać w długiej karierze zawodowej nie wystarczą dwa lub trzy tygodnie, ba nie wystarczy miesiąc czy też dwa. Potrzeba na to kilku lat pracy, zwłaszcza jeśli startujemy od totalnego zera, a przedmioty ścisłe nie były naszą mocną stroną. Krótkie kursy programowania mogą być całkiem w porządku dla absolwentów kierunków ścisłych, takich jak matmatyka czy też fizyka ale tutaj znowu pojawia się pytanie czy dla takich osób jest sens przekwalifikowywania się?

Jeśli macie mityczne 30 lat i rodzinę na utrzymaniu to raczej będzie wam ciężko zamienić swój obecny zawód i przenieść się do IT. Od kilku lat rynek ten jest naprawdę nasycony „juniorami” oraz różnego rodzaju osobami po wszelakich kursach, których w ostatnim czasie pojawiła się cała masa. Problemy ze znalezieniem pracy mają nawet absolwenci informatyki, a co dopiero kursanci jakiejś szkoły programowania. Zdecydowana większość ogłoszeń o pracę w IT skierowana jest do senior developerów bądź też regular developerów. Takich specjalistów na rynku naprawdę brakuje i to właśnie oni mogą liczyć na te przysłowiowe 10k netto miesięcznie. Tyle tylko, że żeby dojść do takiego poziomu od totalnego zera jest naprawdę trudno. Jeśli oczywiście mówimy o osobie, która nie ma za sobą wykształcenia na kierunku ścisłym, a do IT trafiła po ukończeniu jakiegoś kursu programistycznego. Po prostu od pewnego momentu zacznie wam brakować wiedzy odnośnie algorytmów czy też stricte matematyki – tutaj właśnie kłania się na przykład matematyka dyskretna, a dokładniej teoria grafów, teoria języków i automatów i innego tego typu dziedziny dość szeroko wykorzystywane w bardziej złożonych i wymagających projektach.

Tyle tytułem wstępu, a teraz chciałbym Wam przedstawić moją krótką historię wraz z myślę, że cennymi wskazówkami odnośnie tego jak ja zaczynałem swoją przygodę z programowaniem. Dodam na początku, że moja ścieżka edukacyjna od liceum poprzez studia była związana ściśle z informatką oraz matematyką. W szkole średniej uczęszczałem do klasy o profilu „matematyczno-informatycznym”, a studiowałem (i w sumie dalej studiuję na II stopniu) informatykę na wydziale matematyki i informatyki. Jednak swoje pierwsze kroki jeśli chodzi o programowanie stawiałem dużo wcześniej bo już w gimnazjum i to właśnie ten początkowy okres nauki jest chyba najbardziej ekscytujący.

1. W internecie nie ma żadnych sensownych materiałów

Zacznijmy może od tego, że bardzo szybko zorientowałem się, że tak naprawdę w internecie – przynajmniej w tamtym czasie, ale tak jest też obecnie teraz – nie ma żadnych sensownych i darmowych materiałów edukacyjnych. Większość tutoriali niestety charakteryzuje się taką przypadłością, że ostatecznie po uruchomieniu całego kodu coś nie działa i nie wiadomo co z tym fantem zrobić. Tak na marginesie dodam, że to właśnie wtedy narodził się pomysł na stworzenie tego bloga, ale to już zupełni inna historia.

Problem ten rozwiązałem dość sprawnie, po prostu za odłożone pieniądze kupowałem interesujące mnie książki programistyczne. Zaczynałem wtedy od dość archaicznego jak na dzisiejsze czasy języka „Pascal”, o którym zresztą napisałem kilka artykułów (możecie je znaleźć tutaj). Dzisiaj raczej odpuścił bym naukę tej technologii bowiem z tego co zauważyłem to już nawet odchodzi się od wykorzystywania składni Pascala do zapisywania pseudokodu w książkach poświęconych algorytmom. A to jeszcze do niedawna było standardem. Na taki „pierwszy” język programistyczny polecałbym na przykład Javę, C# lub Pythona, który jest chyba najprostszy z tej trójki, a dodatkowo mnogość różnego rodzaju bibliotek powoduje, że większość aplikacji to 2-3 linijki (i to należy rozumieć dosłownie).

Free Pascal IDE. Fot. Thienhau2003, CC 3.0.

Kolejnym moim etapem, kiedy to po paru miesiącach odpuściłem Pascala i pozbyłem się z komputera słynnego i dość archaicznego IDE były technologie frontendowe. Wynikało to z tego, że chciałem w końcu wystartować z moim blogiem, a że potrzeba matką wynalazków no to nie pozostało nic innego jak poszukać jakiś książek na temat HTML’a i CSS’a. Trafiłem wtedy na pozycję pt. „Tworzenie stron WWW. Biblia.„. Książka ta jest co prawda dość stara, a część rzeczy uległa już przedawnieniu. Przykładowo już w zasadzie na porządku dziennym stało się używanie HTML 5 i CSS 3, podczas lektury technologie te przedstawione są jako ciekawostka. Jednak większa jej część moim zdaniem jest ponad-czasowa dlatego też, jeśli jesteście na początku swojej kariery programistycznej i interesuje was tematyka tworzenia stron WWW to mogę ją z czystym sumieniem polecić.

Frontend to jedno ale po jakimś czasie doszedłem do wniosku, że czas stworzyć coś bardziej elastycznego niż tylko statyczną stronę WWW. Tak właśnie wróciłem do korzeni czyli początków mojej nauki i trafiłem na PHP. Tutaj gigantyczną rolę w moim rozwoju odegrała seria książek „Head First” (pl. Rusz główą). Są to pozycje, które zresztą do dzisiaj zbierają naprawdę bardzo dobre recenzje na całym świecie. Jeśli stawiacie swoje pierwsze kroki lub jesteście na początku swojej kariery programistycznej to naprawdę lepiej nie wydacie swoich pieniędzy jak właśnie na książki z tej serii (jeśli mogę wam jeszcze doradzić to nie kupujcie e-booków, tylko papier – to są dosłownie „kolorowanki”, a ciężko raczej korzystać z czegoś takiego na czytniku e-booków). Moją karierę backend developera rozpocząłem od książki autorstwa Micheal’a Morrison’a pod jak, że wymownym tytułem „Head First. PHP & MySQL„. Jak pewnie już się domyśliliście od razu liznąłem też tematykę baz danych i to właśnie wtedy napisałem swoje pierwsze zapytania SQL oraz poznałem całą strukturę danych w bazach MySQL. Wiedza ta później bardzo przydała mi się na studiach gdzie zresztą nauczyłem się znacznie więcej na ten temat. Dzięki temu, że dużo rzeczy już umiałem było mi też znacznie prościej na zajęciach (a nie były one łatwe).

Tak więc od Pascala, którym zainteresowałem się w gimnazjum poprzez HTML’a, CSS’a doszedłem do PHP oraz baz danych. Równolegle z poznawaniem PHP zainteresowałem się .NET’em czyli C#, który to w przeciwieństwo do PHP jest językiem kompilowanym. Czyli w skrócie aby uzyskać działający program, kod który napiszemy musi zostać skompilowany do postaci kodu maszynowego. C# oferował też bardzo dobre wsparcie dla idei programowania zorientowanego obiektowo (obecnie w PHP też chyba jest całkiem w porządku, ale już dawno nic nie pisałem w tej technologii więc nie chce się wypowiadać). Poza tym już na początku moich studiów bawiłem się trochę Javą, JavaScriptem oraz Pythonem, aż w końcu zainteresowałem się bardziej technologiami mobilnymi, a dokładniej Androidem.

Będąc oczywiści studentem i to na wydziale matematyki i informatyki główną rzeczą jaką się robi to poznaje różnego rodzaju algorytmy, struktury danych oraz zagadnienia stricte matematyczne. Jeśli chodzi o algorytmikę to nieodzowną pozycją jest oczywiście książka autorstwa Thomasa H. Cormena pod tytułem „Wprowadzenie do algorytmów„. Ja się nawet śmieję, że na jej podstawie zostało opracowanych kilka przedmiotów na które chodziłem jako student (Programowanie, Metody programowania, Abstrakcyjne Struktury danych i algorytmy, Rachunek prawdopodobieństwa i statystyka, Matematyka dyskretna, Teoria języków i automatów). Jest więc naprawdę spory potencjał.

2. Doświadczenie i jeszcze raz doświadczenie

Oczywiście równolegle w parze z rosnącą wiedzą zawsze miałem świadomość tego, że nigdzie na nauczę się tyle co podczas pracy nad komercyjnymi projektami wraz z doświadczonym zespołem programistów. Tak więc swoją pierwszą pracę powiązaną z programowaniem zacząłem zaraz po maturze i trafiłem na staż do jednego z krakowskich software house’ów. Jak już zresztą pisałem na początku tego artykułu – na rynku mamy deficyt specjalistów, a nadpodaż stażystów – po zdobytych pierwszych doświadczeniach w IT, które mogłem wpisać w CV oraz tym, że prowadzę dev-bloga potem było już z górki. Praktycznie co wakacje, a nawet i dłużej pracowałem w różnych firmach gdzie zdobywałem cenne umiejętności.

To właśnie podczas mojego stażu (zaraz po maturze) miałem pierwszy kontakt z systemem kontroli wersji Git oraz pracą zespołową. Już nie pisałem samodzielnie swoich aplikacji, ale pracowałem w zespole z nieco bardziej doświadczonymi kolegami. Tak się złożyło, że byłem najmłodszy i w zasadzie z najmniejszą wiedzą. Swoją drogą to właśnie wtedy zorientowanie się, że tak naprawdę jeszcze nic nie umiem, a to paradoksalnie jest kolejnym etapem nauki programowania.

Jeśli miałbym dawać wam jakieś rady to naprawdę jak najwcześniej zacznijcie szukać firmy, która potrzebuje stażystów. Czasem decyduje po prostu szczęście bo akurat trafił się nowy projekt, a tu sezon urlopowy. Pamiętajcie, że nigdzie nie nauczycie się tyle co podczas pracy przy komercyjnych projektach. Nawet na studiach nie zdobędziecie takich umiejętności. Dlatego też część absolwentów informatyki ma „problemy” ze znalezieniem pracy. Oczywiście pewnie 99% z Was chciała by tak czy owak być w takiej sytuacji, bo musimy pamiętać, że przecież cały czas w IT jest deficyt pracowników, miesiąc, dwa, a może trzy i każdy taki „ogarnięty” absolwent w końcu znajdzie zatrudnienie w swoim zawodzie. Nie popadajmy w histerię.

3. Era własnych projektów

Jeśli chcesz się nauczyć pisać musisz po prostu pisać. Identycznie jest z programowaniem, jeśli chcesz się nauczyć programować musisz po prostu programować. Nie wystarczy o tym czytać.

Tak moi drodzy wygląda zwykła szara rzeczywistość programisty. Można oczywiście przeczytać milion pięćset sto dziewięćset książek o programowaniu, wkuć na pamięć 1300 stron bibli algorytmicznej Thomasa Cormena ale to wszystko nie podniesie naszego skila. Zawsze odkąd pamiętam poza nauką totalnych podstaw danej technologii pracowałem nad różnego rodzaju projektami programistycznymi, a napotkane problemy próbowałem rozwiązywać właśnie dzięki wiedzy zdobytej z książek, wyszukiwarki Google oraz różnego rodzaju forów dla programistów. Żeby uzupełnić cały kontekst historii jaką opisałem w tym artykule muszę jeszcze dodać jeden kluczowy akapit, któty powinien nosić tytuł „praktyka”.

Dla mnie jest to oczywiste i pewnie dla większości z Was również, ale są jeszcze osoby, które podchodzą do nauki programowania na zasadzie – otwieram dokumentację – wkuwam na pamięć nazwy wszystkich bardziej przydatnych klas, metod itd. i potem coś próbuję stworzyć. No nie. Jak uczyliśmy się pisać, to nie wkuwaliśmy wszystkich słów ze słownika zanim cokolwiek przelaliśmy na kartkę papieru. Tak też jest z programowaniem. Na każdym etapie mojej nauki realizowałem mniejsze lub większe projekty i uczyłem się poprzez rozwiązywanie problemów na jakie natrafiłem w trakcie mojej pracy. Prawdę mówiąc, nawet nie jestem w stanie napisać wam teraz co to były za aplikacje większość z nich, tak ok. 90% już w zasadzie „zaorałem” ale taki właśnie był ich cel. Były to miliony crud’ów, CMS’y, webserwisy, aplikacje wyświetlające pogodę itd. do tego dochodzi masa różnego rodzaju projektów na studiach, które na przykład pisałem, żeby zrozumieć jak działa dany wzorzec projektowy czy też jakaś biblioteka bądź framework. Mniejcie swiadomość tego, że dużo rzeczy była zrobiona po prostu źle, tak żeby tylko działała ale to właśnie praktyka i jeszcze raz praktyka doprowadzi Was do perfekcji.

W każdej szanującej się firmie IT zanim dana zmiana w kodzie zostanie scalona do brancha głównego, kod taki przechodzi review. Zazwyczaj realizowane jest to przez jednego programistę, a czasami przez większą liczbę osób. Wszystko w zależności od wagi projektu. Do tego dochodzi cała seria testów oraz koniec końców weryfikacja po stronie „biznesu”. Jak widzicie proces ten jest naprawdę złożony, a mówimy tutaj o profesjonalistach. Osobach, które przez 8h dziennie pięć dni w tygodniu zawodowo zajmują się programowaniem. Jeżeli na takim poziomie wszystko sprawdza się po kilka razy i dalej natrafia się na błędy to i Wy na początku swojej kariery czy podczas nauki naprawdę nie flustrujcie się, że coś nie wyszło.

Jeśli już doszliśmy do tematyki „czystego kodu” no to pozwolę sobie Wam polecić jeszcze jedną pozycję tym razem autorstwa pewnie znanego niektórym „wujka Boba” czyli Roberta C. Martina. W swojej ksiżące „Mistrz czystego kodu. Kodeks postępowania profesjonalnych programistów” opisuje on własnie dobre praktyki kodowania z którymi warto się na pewno zaznajomić.

Mam nadzieję, że pomogłem i lektura tego artykułu da Wam obraz tego jak wygląda droga od zera do „kodera”, a właściwie to programisty – ale słowo „koder” bardziej pasuje do rymu ;-). Pamietajcie, że jest to moja subiektywna opinia i historia, która niekoniecznie jest idealna. Jeśli macie jakieś swoje rady, przemyślenia bądź uwagi to tradycyjnie sekcję „komentarze” zostawiam do Waszej dyspozyji.

PS: Wszystkie linki do wymienionych przeze mnie książek, są odnośnikami z programu partnerskiego wydawnictwa Helion. Jeśli więc planujecie jakieś zakupy to miło mi będzie jeśli uczynicie to korzystając właśnie z zamieszczonych w tym artykule linków. Was to nic nie kosztuje, a ja otrzymam niewielki procent z Waszych transakcji. Dzięki temu będę mógł dalej rozwijać bloga i tworzyć dla Was darmowe i wartościowe treści.

Przeczytaj również

, , , , , , , , , , ,