Jak zostać profesjonalnym programistą? - czyli czego nie powiedzą Ci szkoły programowania - Bez Kompilatora

Jak zostać profesjonalnym programistą? – czyli czego nie powiedzą Ci szkoły programowania

Jak zostać profesjonalnym programistą? – czyli czego nie powiedzą Ci szkoły programowania

Dużo się ostatnio mówi o nauce programowania, dostępnych kursach, studiach, książkach, filmach, blogach, grupach i tak dalej, więc postanowiłem ugryźć temat z nieco innej strony. Dzisiejszy wpis rozpoczyna serię, w której będę opowiadał o tym, co jest potrzebne, żeby zostać profesjonalnym programistą. Takim programistą, którego praca szuka sama (profesjonaliści dostają średnio kilka-kilkanaście ofert pracy miesięcznie), który zarabia znacznie powyżej średniej branżowej. Jeżeli brzmi to dla Ciebie jak dobry plan, to zapraszam Cię do dalszej lektury. Zaczynajmy 🙂

Przyspieszony kurs programowania

Na pewno słyszałeś o kilkutygodniowych kursach programowania, które w ekspresowym tempie mogą zrobić z Ciebie programistę. Może nawet rozważałeś wzięcie udziału w czymś takim. Nie chcę, żeby to zabrzmiało źle – taki kurs może być dla niektórych osób całkiem niezłym rozwiązaniem – ale chciałbym Cię ostrzec. Od ukończenia takiego kursu do zostania profesjonalnym programistą dzieli Cię przepaść. Naprawdę.

W rzeczywistości bardzo trudno jest ocenić ile pracy będzie kosztować Cię osiągnięcie statusu eksperta. Jest to tym bardziej trudne dla mnie – osoby, która uczyła się mało intensywnie przez długi czas. Musisz więc wiedzieć, że to co tu opisuję, to subiektywne opinie i część osób może się z nimi nie zgodzić. Liczę jednak na to, że to moje spojrzenie pomoże wielu osobom podjąć lepsze decyzje i osiągnąć swój cel szybciej, mniejszym nakładem pracy i pieniędzy.

Zasada 10 000 godzin

Zasada 10 000 godzin zyskała popularność dzięki książce Malcolma Gladwella “Outliers: The Story of Success”. Mówi ona mniej więcej tyle: żeby opanować cokolwiek na mistrzowskim poziomie, potrzeba dziesięciu tysięcy godzin praktyki. Teoria ta ma zarówno swoich zwolenników jak i przeciwników, ale jedno jest pewne – doskonale sprawdza się w przypadku muzyków… i programistów.

Z moich obserwacji wynika, że co najmniej właśnie tyle czasu trzeba poświęcić na rozwój, żeby zostać profesjonalistą. Dlaczego piszę “co najmniej”? Ponieważ o ile nie ma tutaj drogi na skróty, o tyle podejmując złe decyzje można sobie tą drogę bardzo mocno wydłużyć. Dlatego jednym może to zająć kilka, a innymi nawet kilkanaście lat.

W rzeczywistości jest to nawet nie bardzo związane z talentem – uzdolnienia w dziedzinie nauk ścisłych mogą być atutem na początku, ale w dłuższym horyzoncie czasowym te różnice zaczynają się rozmywać. Jedyne co naprawdę ma znaczenie to wytrwałość, pasja i podejmowanie odpowiednich decyzji. Jeżeli to czytasz, to wierzę w to, że tych pierwszych dwóch Ci nie brakuje. Skupię się więc na ostatniej – podejmowaniu odpowiednich decyzji.

Nie ma drogi na skróty

Wiem, że to co tu piszę bardzo mocno kontrastuje z tym, co obiecują sprzedawcy 6-tygodniowych kursów programowania za kilkanaście tysięcy złotych. Widziałem nawet ostatnio weekendowy kurs od zera do totalnego początkującego za ponad tysiąc złotych. Nie twierdzę, że kursy nie są bezwzględnie złe. Wręcz przeciwnie – jeżeli prowadzą je doświadczeni trenerzy w małych grupach, to na pewno możesz się na nich sporo nauczyć.

Musisz mieć jednak świadomość, co kupujesz decydując się na taki kurs. Kupujesz 250 godzin pracy prowadzącego, który przekazuje Ci w tym czasie wiedzę dostępną za darmo w internecie lub w ogólnodostępnych książkach. Za to wszystko płacisz tyle, co za średniej klasy używany samochód, a pozostałe 9 750 godzin nauki i tak jeszcze przed Tobą.

Nie zrozum mnie źle – nie mam nic przeciwko kursom, ani nawet przeciwko ich wysokim cenom, ale pod warunkiem, że ich twórcy nie uciekają się do nieetycznych metod w celu ich sprzedaży. Niestety obiecywanie natychmiastowego zatrudnienia na dobrze płatnym stanowisku po ukończeniu kilkutygodniowego kursu jest dziś spotykane dość często i nie minę się z prawdą, jeśli nazwę tego typu sprzedawców zwykłymi naciągaczami.

Ilość pracy potrzebna, żeby zostać profesjonalnym programistą jest bardzo duża i nie możesz dać sobie wmówić, że jest inaczej, bo może Cię czekać rozczarowanie. I przede wszystkim nie możesz pozwolić szkołom programowania wmówić Ci, że bez nich sobie nie poradzisz.

To nie jest takie trudne

Liczba dziesięciu tysięcy godzin dla wielu osób może się wydawać przerażająca, ale tak naprawdę jest to po prostu pięć lat pracy przez 250 dni w roku po 8 godzin dziennie – czyli pięć lat pracy na pełen etat. Musisz przyznać, że z tej perspektywy nie wygląda to aż tak strasznie, szczególnie biorąc pod uwagę, że Twoim celem i tak jest praca na pełen etat na stanowisku programisty i że sporo z tych dziesięciu tysięcy godzin spędzisz właśnie w pracy.

Najtrudniej jest na początku, kiedy nie masz jeszcze umiejętności wystarczających, żeby podjąć pracę i czas poświęcony na naukę musisz wygospodarować ze swojego wolnego czasu. Jednak już po kilku miesiącach możesz zacząć szukać zatrudnienia i kontynuować naukę na stanowisku stażysty czy młodszego programisty.

Słyszałem o przypadkach osób, które znalazły pracę po kilku tygodniach nauki – i uważam, że jest to możliwe, ale musisz wiedzieć, że nie zawsze warto wchodzić na rynek pracy zbyt wcześnie. Możesz się w ten sposób wpakować w zupełnie nierozwojowe zajęcie. Część firm próbuje sprzątać kod w starych projektach wykorzystując do tego tanią siłę roboczą w postaci stażystów.

Z drugiej strony z podjęciem pierwszej pracy nie możesz też zbyt długo zwlekać, ponieważ najważniejsze umiejętności zdobędziesz pracując na stanowisku programisty. To właśnie praca przy konkretnych projektach pozwala na zdobycie doświadczenia, które odróżnia początkujących od profesjonalistów.

Podążaj prosto do celu

Rezygnacja z płatnych szkoleń pozwala zaoszczędzić sporo pieniędzy, ale za samodzielną naukę w domu przyjdzie Ci zapłacić inną walutą – czasem. Nauka programowania sama w sobie jest już bardzo czasochłonna, a brak wsparcia ze strony osób doświadczonych może ją tylko wydłużyć. Na szczęście możliwości radzenia sobie z tym problemem jest kilka. Należą do nich:

Szkoły programowania

Szkoły programowania są z jednej strony bardzo drogie, ale z drugiej umożliwiają kontakt z prowadzącym oraz innymi uczestnikami kursu. Przy wyborze kursu musisz bardzo mocno zwracać uwagę, za co tak naprawdę płacisz. Nie polecam Ci  kursów “od zera” – te bardziej specjalistyczne mają moim zdaniem większy sens. Uczestnictwo w kursie może wpłynąć pozytywnie zarówno na szybkość zdobywania wiedzy i rozwiązywania ewentualnych problemów, jak na Twoją motywację. Musisz jednak pamiętać, co jest Twoim ostatecznym celem, a nie jest nim nauka sama w sobie, ale zostanie profesjonalistą.

Studia

Studia posiadają te same zalety co kursy programowania, a ponadto w wariancie dziennym są zupełnie darmowe. Minusem jest to, że trwają długo (sama inżynierka zajmuje trzy i pół roku), a także to, że skupiają się w 50% na rzeczach niezwiązanych bezpośrednio z zawodem programisty. Nauka fizyki, czterech rodzajów matematyki i historii krajów anglosaskich nie przybliża Cię w żaden sposób do wymarzonej pozycji eksperta. Studia są jednak mimo wszystko dobrym pomysłem, jeśli nie masz jeszcze wyższego wykształcenia i w takim wypadku zdecydowanie Ci je polecam.

Studia podyplomowe

Studia podyplomowe przeznaczone są dla osób, które mają już wyższe wykształcenie. Są skupione bardziej na przekazaniu wiedzy fachowej i zazwyczaj trwają dwa lub trzy semestry. Na studia podyplomowe może się zapisać każdy, niezależnie od rodzaju ukończonych wcześniej studiów, dlatego są one chętnie wybierane przez absolwentów kierunków humanistycznych, którzy zdecydowali się zmienić branżę. Ich koszt jest mniejszy niż w przypadku studiów zaocznych czy szkół programowania, ale wiedza przekazywana jest często w bardzo akademicki sposób, co nie wszystkim może odpowiadać. Są one dobrym motywatorem do systematyczności, dla osób które potrzebują zewnętrznej motywacji.

Grupy wsparcia

Od jakiegoś czasu coraz bardziej popularne stają się grupy wsparcia dla osób, które uczą się programowania. Powstają one z inicjatywy organizacji promujących naukę programowania lub są tworzone przez blogerów skupiających wokół siebie społeczność osób chętnych do nauki. Takie grupy mają często swoje miejsce w internecie (np. grupę na Facebooku), gdzie ich członkowie mogą wymieniać się doświadczeniami i pomagać sobie wzajemnie w rozwiązywaniu problemów. W ramach grup organizowane są też mniej lub bardziej regularne spotkania, a także różnego rodzaju konkursy i wydarzenia. Są świetnym rozwiązaniem dla osób, które potrafią sobie same zorganizować naukę i szukają tylko od czasu do czasu kontaktu z innymi początkującymi programistami. Czasem na grupach można też spotkać bardziej doświadczone osoby, udzielające się tam w roli mentorów. Zamierzam niedługo stworzyć taką grupę dla osób zainteresowanych Linuxem i programowaniem systemowym. Jeżeli jesteś zainteresowany, to koniecznie daj mi znać – będzie to dla mnie sygnał, że warto robić to już teraz, a nie czekać, aż blog się jeszcze rozwinie.

Mentoring

Mentoring to jedna z najlepszych opcji dla osoby początkującej. Praktykowana niezmiennie od tysięcy lat relacja uczeń-mistrz pozwala początkującemu programiście rozwijać się pod okiem doświadczonego eksperta, który jest w stanie na bieżąco oceniać postępy, odpowiadać na pytania i pomagać w rozwiązywaniu bieżących problemów. Dobry mentor pomoże w podjęciu odpowiednich decyzji i nakreśleniu długofalowej strategii rozwoju. Bardzo mocno zachęcam Cię do znalezienia sobie mentora, nawet jeśli wybrałeś już którąś z wymienionych wcześniej opcji. Większość mentorów będzie oczekiwała zapłaty za udzielane konsultacje, co jest zrozumiałe, ponieważ dysponują oni bardzo wartościową wiedzą, ale możesz też mieć szczęście i trafić na kogoś, kto pomoże Ci zupełnie za darmo. Z mentorem możesz spotykać się zarówno osobiście, jak i przez internet (np. przez Skype), a typowa częstotliwość spotkań to raz, maksymalnie dwa razy w tygodniu.

Programowanie to dopiero początek

Nauka programowania jest trudna i może zająć sporo czasu. Biegłość w wymyślaniu rozwiązań, sprawne tworzenie implementacji oraz umiejętność organizacji kodu przychodzą z czasem. Jednak sama umiejętność kodowania to dopiero początek. Kiedy już poczujesz się pewnie z kodem, możesz rozpocząć naukę, którą będziesz kontynuować aż do końca swojej programistycznej kariery – naukę systemów, frameworków, bibliotek i technologii.

Zawodowi programiści zarabiający duże pieniądze nie są zatrudniani dlatego, że znają C++, C#, Javę, Pythona czy PHP. Umiejętność programowania jest tylko podstawą i w gruncie rzeczy, kiedy już znasz dobrze jeden lub dwa języki programowania, to nauka kolejnych pójdzie Ci bardzo szybko. Cała reszta to znajomość technologii, w których się specjalizujesz.

Podczas tworzenia tego bloga musiałem napisać trochę kodu w językach takich jak PHP, JavaScript, HTML i CSS. Znam te języki bardzo słabo, ale mimo to wydały mi się podobne do tych, których używam na codzień, więc ich nauka poszła mi łatwo. Dużo większą trudność sprawiło mi odnalezienie się w kodzie WordPressa. Nie miałem z nim wcześniej styczności i opanowanie go w stopniu podstawowym zajęło mi sporo czasu – znacznie więcej niż nauka tych wszystkich języków. Mam więc świadomość, że pomimo znajomości języków programowania używanych w technologiach webowych, mógłbym mieć problem ze znalezieniem dobrze płatnej pracy jako front-end, back-end, czy full-stack developer.

Sama umiejętność programowania nie uczyni Cię profesjonalnym programistą. Żeby wspiąć się na wyżyny programistycznej kariery musisz wybrać konkretne technologie i poświęcić mnóstwo czasu na ich opanowanie. Na szczęście większość tego czasu spędzisz w pracy, w której wraz ze zdobywaniem doświadczenia będziesz zarabiał coraz więcej i zanim zdążysz się obejrzeć będziesz programistycznym ekspertem.

Co dalej?

Dziś to by było na tyle. W kolejnych wpisach z tej serii postaram się opowiedzieć trochę więcej o tym, jak wygląda ścieżka od początków nauki, przez początki kariery, do zostania profesjonalnym programistą. Spróbuję przekonać Cię do zainteresowania się różnymi, moim zdaniem ciekawymi technologiami i opowiem trochę o tym, dlaczego sam zdecydowałem się wybrać ścieżkę związaną z Linuxem. Możesz więc spodziewać się sporej dawki wiedzy od osoby, która zna świat profesjonalnego programowania od środka i chce się z Tobą tą wiedzą podzielić. Mam nadzieję, że będzie ona dla Ciebie przydatna.

Dziękuję Ci za przeczytanie tego wpisu. Jeżeli Ci się podobało i chciałbyś zobaczyć więcej wpisów tego typu, to koniecznie daj mi znać. Jeżeli masz jakieś pytania, napisz komentarz – możesz być pewien, że nie zostawię Cię bez odpowiedzi.

I jeszcze jedno – jeśli nie chcesz przegapić kolejnych wpisów, to koniecznie zapisz się na mój newsletter i polub moją stronę na Facebooku.

Pozdrawiam i do zobaczenia! 🙂

Zobacz też inne wpisy:

Komentarze

  1. @wykopalisko, dobrze że przeglądnąłem :). Fajnie się to wszystko zapowiada. Liczę że niedługo zaczną się mocniejsze technicznie artykuły. Elektronika mogła by też się pojawić uC z artami o Linukie – fajnie by było poczytać coś o kernelach. Ja ostatni raz kompilowałem wg. książki by osłużyć soft/win/modem 56K w zamierzchłych czasach 2.4.x 🙂

    1. Cześć! Fajnie wiedzieć, że mojego bloga czytają osoby, które pamiętają Linuxa z tak odległych czasów. 🙂
      Mocniejsze techniczne artykuły są w planie – ale jest też plan na serię wpisów tworzonych z myślą o początkujących, więc na jakiś czas musisz uzbroić się w cierpliwość. Ale obiecuję, że będzie warto. 🙂

  2. Cześć!

    Fajnie piszesz, lubię czytać Twoje arty w miarę czasu 🙂

    Co do grupy: twórz, nie czekaj na rozwój bloga. Mówię z własnego doświadczenia: mój blog ma mniej folowersów niż Twój, ale posłuchałam rad innych i założyłam grupę od razu – działa.

    Dzięki za artykuł!

    1. Hej! Dzięki za komentarz!
      Grupa już jest – szybko okazało się, że jest spore zainteresowanie. Przed jej założeniem miałem wątpliwości, czy blog nie ucierpi na tym, że będę musiał poświęcać część czasu na grupę, ale na szczęście dzielnie pomaga mi w tym moja Aneta. 🙂
      Pozdrawiam!

    2. Kurcze, czytam twój kolejny wpis i wlewasz we mnie nadzieję. Jestem w trakcie kryzysu. Uczyć się programowania/nie uczyć się/iść na kurs do szkoły programowania? Na twoim blogu dostałem tak wiele odpowiedzi, że w sumie teraz to nie wiem dlaczego tak długo zwlekałem. Powiem zwyczajnie i po ludzku-dziękuję ?

Dodaj komentarz

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