“Gdybym dzisiaj zaczął programować to…” — zbiór porad dla osób, które chcą zostać programistami
ZANIM STWIERDZISZ PO PIERWSZYM AKAPICIE, ŻE CHCĘ HEJTOWAĆ SZKOŁY PROGRAMOWANIA — NIE, NIE TAKI CEL JEST TEGO ARTYKUŁU.
“Programowanie jest dla każdego”, “Każdy może zostać programistą”, “W 90 dni zmienisz zawód”, “Wejdź do branży IT” — to tylko niektóre z modnych sloganów, które możemy zobaczyć na bannerach polskich szkół programowania. Owszem, jakoś trzeba zachęcić ludzi do zapoznania się z ofertą, a ta jest równie rozległa i zróżnicowana, co sama branża IT — kursy stacjonarne, niestacjonarne, zdalne, 1on1, interaktywne, statyczne, video czy jeszcze inne.
20 lat temu, kiedy robiłem swoje pierwsze kroki w “programowaniu”, nie było takich możliwości — były książki, dostęp do internetu dopiero stawał się powszechny, ale materiałów było jak na lekarstwo. Przez wiele rzeczy trzeba było przejść totalnie samemu(co miało zalety, jak i wady), a efekty nie były jakoś imponujące. Dzisiaj mając już jakieś 10 lat doświadczenia zawodowego oraz będąc mentorem dla innych programistów postanowiłem podzielić się poradami dotyczącymi tego co można zrobić, żeby w “krótszym” czasie zwiększyć swoje kompetencje jako developer.
1. Do czego potrzebne mi jest programowanie? Motywacja
Motywacja jest tym, co napędza nas do działania. To coś co sprawia, że chce nam się wstać z łóżka i zacząć coś robić lub też czegoś nie robić. W telegraficznym skrócie mamy motywację wewnętrzną(kiedy chcesz coś zrobić bez konkretnej przyczyny), zewnętrzną(kiedy coś robisz, bo wiesz, że coś się może dzięki temu stać), świadomą(kiedy zdajesz sobie sprawę dlaczego coś robisz), nieświadomą(kiedy nie masz pojęcia dlaczego coś robisz), pozytywną(kiedy robisz coś, aby uzyskać nagrodę) i negatywną(kiedy robisz coś, żeby uniknąć kary).
Mając tą wiedzę zastanów się “Do czego potrzebne mi jest programowanie?”. Do rozwiązania problemów? Super. Do samodzielnego wykonywania niektórych prac np. przy stronie internetowej? Extra. W pracy będę mógł wykonać część swoich zadań zwinniej? WOW! Kręci mnie tematyka rozwiązywania problemów i technologii? KURTYNA!!!
Ale jeśli motywatorem jest “dobrze płatna branża IT”, albo “lepsze perspektywy zawodowe”. To zasmucę Cię — jeśli w innej branży tego nie znalazłeś/aś to programowanie Ci tego nie ułatwi, a jeśli nie masz technologicznego bakcyla, to w zasadzie nie bardzo to pomoże.
Uczysz się remontować, malować, gipsować ściany nie poto, żeby zostać budowlańcem, ale by samodzielnie przeprowadzić remont. Nie uczysz się jeździć na rowerze, by zostać kolarzem, lecz by spędzić miło czas. Nie uczysz się degustować wino, by zostać sommelierem, lecz by poznać kunszt próbowania i wytwarzania wina.
Dlatego zadawaj sobie to pytanie BARDZO CZĘSTO! Oraz próbuj określci, jakiego rodzaju jest to motywacja.
2. Czy programowanie jest dla mnie — test
A zatem — jeśli chcesz się uczyć czegokolwiek, to zdecydowanie najlepiej jest jeśli Twoja motywacja jest nieświadoma lub wewnętrzna, ponieważ sprawia, że coś robisz i potrafisz temu się bardzo poświęcić. I to odnosi się w zasadzie do każdej umiejętności. Jeśli jazda na rowerze sprawia Ci przyjemność, jeździsz kilka razy w tygodniu, czytasz o tym, przeglądasz sprzęt itd. to jest to coś co Cię kręci i o wiele szybciej będziesz się tego uczyć, ponieważ jest to przyjemne i nie sprawia wysiłku.
Nie inaczej jest z programowaniem —jest to narzędzie, które służy do rozwiązywania problemów. Dlatego mam dla Ciebie bardzo prosty test, żeby sprawdzić czy programowanie jest dla Ciebie.
Rozwiąż zagadkę Einsteina
5 ludzi różnych narodowości zamieszkuje 5 domów w 5 różnych kolorach. Wszyscy palą papierosy 5 różnych marek i piją 5 różnych napojów. Hodują zwierzęta 5 różnych gatunków. Który z nich trzyma w domu rybki?
1. Norweg zamieszkuje pierwszy dom
2. Anglik mieszka w czerwonym domu.
3. Zielony dom znajduje się bezpośrednio po lewej stronie domu białego.
4. Duńczyk pija herbatkę.
5. Palacz papierosów light mieszka obok hodowcy kotów.
6. Mieszkaniec żółtego domu pali cygara.
7. Niemiec pali fajkę.
8. Mieszkaniec środkowego domu pija mleko.
9. Palacz papierosów light ma sąsiada, który pija wodę.
10. Palacz papierosów bez filtra hoduje ptaki.
11. Szwed hoduje psy.
12. Norweg mieszka obok niebieskiego domu.
13. Hodowca koni mieszka obok żółtego domu.
14. Palacz mentolowych pija piwo.
15. W zielonym domu pija się kawę.Zakłada się, że domy ustawione są w jednej linii (1–2–3–4–5), a określenie „po lewej stronie” w punkcie 3. dotyczy lewej strony z perspektywy naprzeciw tych domów (tj. dom o numerze n jest bezpośrednio po lewej stronie domu n+1, a dom po lewej od domu n to dom o numerze n-1)
Jeśli już się jej podejmiesz, to jeśli rozwiążesz ją do końca to znaczy, że jest z Ciebie potencjał na programistę. Niezależnie czy zajęło Ci to 5 min, czy 5 godzin. Ale ważne jest to, że wykonałeś/aś to samodzielnie.
Podpowiem — w sieci ogólnie są rozwiązania, programiści się oczywiście gotowcami też wspierają, bo nie ma co wynajdywać koła na nowo, ale tutaj chodzi o sprawdzenie, czy potrafisz spędzić czas na rozwiązaniu i szukaniu go.
3. Czy muszę być programistą? Alternatywne ścieżki
Nie będę ściemniać — nawet jeśli Twoja motywacja jest wewnętrzna, lubisz zagadnienia techniczne, to jeszcze nie znaczy, że zostaniesz programistą, ponieważ zawodów dookoła “developerskich” jest cała masa, a w zasadzie programowanie dzisiaj staje się narzędziem do innych zawodów. Analitycy muszą znać języki bazodanowe, żeby wyciągać dane. Testerzy mogą automatyzować swoją pracę.
A zatem, jakie zawody wykorzystują programowanie?
- Programista
- DevOps / Administrator
- Tester oprogramowania / QA
- Analityk danych
- Designer <- sporo designerów również koduje
- Grafik 3D
- Animator
- Konstruktor maszyn
Oczywiście tutaj się nie będę rozdrabniać na to co i kto. Ale z grubsza to taka pula zawodów, które korzystają z umiejętności programowania w swojej pracy. Przed podjęciem się zmiany zawodu warto mieć na uwadze, że programowanie otwiera drogę w różnych kierunkach. I jeśli “wytwarzanie” nie jest dla Ciebie tak bardzo przyjemne jak “wykorzystywanie” to może warto zastanowić się nad zostaniem testerm, analitykiem czy devops’em?
4. Szkoła programowania czy kursy?
Jeden rabin powie tak, a inny powie nie
Temat rzeka — ile osób, tyle opinii. Moja jest taka — wybierz to, co najlepiej TOBIE odpowiada. Prawda jest taka, że żadna droga nie doprowadzi Cię do celu bez zaangażowania. Bootcamp czy szkoła, która ma program będzie odpowiednie dla osób, które nie chcą spędzać czasu na poszukiwaniu wiedzy, a chcą ją otrzymać w przystępnej formie. To jest super okazja do tego by POZNAĆ wiele tematów, oczywiście kwestia ich opanowania w podstawowym stopniu mocno zależy już od samego uczącego się. Szkoły często oferują dodatkową formę jaką są 1on1 z mentorem, czyli spotkania, na których możesz porozmawiać o obecnie przerabianym temacie lub wspólnie rozwiązać jakiś problem.
Jeśli jednak chcesz przyoszczędzić trochę pieniędzy, a masz wystarczająco samozaparcia, żeby spędzać czas na oglądaniu filmików i przerabiane przykładów to kursy online również będą czymś wartościowym. Takie kursy można znaleźć zarówno w języku polskim, jak i po angielsku. Z tym, że UWAGA! Serwisy typu Udemy są fajne, ponieważ jest dużo długich kursów(kilkadziesiąt godzin) i mających fancy hasła “from zero to hero” czy “complete training”. One są często przegadane, warto sobie odtworzyć kilka darmowych próbek, żeby zobaczyć czy autor mówi w sposób dla nas zrozumiały. Często jest też tak, że mówią bardzo wolno i tutaj akurat słuchanie nagrań na prędkościach 1.5–2.5 może być normą. Nieco rozszerzoną formą może być Coursera, gdzie dostęp do kursu wykupujesz miesięcznie, natomiast jakość materiałów jest fajniejsza moim zdaniem.
Oczywiście mamy jeszcze serwisy, które oferują kursy interaktywne typu codecademy, które szczególnie polecam dla tych, którzy czują, potrzebę bycia samodzielnymi, ale chcących być też trochę prowadzonymi za rękę. Z polskich serwisów to Kodilla ma podobne darmowe rozwiązanie.
5. Jaki wybrać język / technologię?
Niezależnie na jaką formę nauki się zdecydujesz, to ważny jest dobór tego “CZEGO” będziesz się uczyć. I podejść jest tutaj również dużo — możesz zacząć od “popularnych” technologii, lub technologii dedykowanym danym problemom.
Kiedy ktoś się mnie pyta jakiej technologii jest się warto uczyć to zawsze mówię, że zależy. Jeśli ktoś chce robić strony internetowe to z frontendu ma niewielki wybór HTML + CSS + JS, później prekompilatory, frameworki i biblioteki. Ale jeśli chce robić już całe strony włącznie z backendem to pole do popisu już jest bardzo szerokie bo zaczynając od PHP’a dla chcących zaczynać od prostych skryptów(choć sam PHP ma wielkie możliwości), poprzez NodeJS(dla frontendowych fanów), a idąc dalej w Ruby, Python’a, GoLang, .Net, C#, Java i w zasadzie wszystko na czym można postawić serwer.
Jeśli chcesz robić aplikacje mobilne to tutaj drzwi się otwierają bardzo szeroko, bo w zależności od platformy może to być Java czy Kotlin dla Androida, czy też Objective C oraz Swift dla iOS’a. Zawsze też można skorzystać z hybryd jakimi są m.in. React Native.
Jeszcze inaczej się ma sprawa jeśli chcesz robić projekty oparte od hardware to najprawdopodobniej będzie to C++.
Rzecz jasna — są technologie bardziej lub mniej dedykowane pewnym rzeczom, np. Python czy R są bardzo popularnymi językami jeśli chodzi o pracę na danych w tym głośne big data, data mining, machine learning czy deep learning.
To co proponuję to zainteresować się tymi językami, które są dedykowane do projektów, którymi chcesz się zajmować.
Warto się wspierać tutaj też bardzo fajnym narzędziem jakim są ROADMAPy. Z obszarów developerów aplikacji internetowych jest przygotowany całkiem fajny serw roadmap.sh — to tego typu narzędzia pomogą Ci sprawdzać co już umiesz, a czego powinieneś się douczyć.
6. Pełnoetatowy programista bez etatu
Policzymy w ten sposób — na pracy zawodowej spędzam średnio 8 godzin dziennie + dodatkowe tematy ok 2–3 godzin = dla łatwej kalkulacji jest to sumarycznie 10 godzin dziennie. W roku jest ok 250 dni pracujących minus 20 dni urlopów(miesiąc). Co daje nam rocznie 230 * 10 = 2300 godzin. Ale oczywiście tyle się nie pracuje, są spotkania, kawy, planowania — załóżmy, że z tego ok 70% poświęcasz na pracę z kodem czy to jest code review, stack overflow i kodowanie. Daje nam to jakieś 1600 godzin czystego doświadczenia.
Teraz zobacz na pewną rzecz. Mówi się o 3 szczeblach kariery — Junior, Regular(Mid) i Senior. Ja proponuję skalę 6 poziomów. Intern, Junior, Regular, Senior, Lead, Architect. I mylne moim zdaniem jest wrzucanie na stanowisko Juniorskie osoby, która nie ma godzin doświadczenia, a tym bardziej komercyjnego.
Wiele źródeł podaje, że Junior to 0–2 lat doświadczenia. Ja podam dwa inne podejścia.
- Junior to osoba, która stale potrzebuje mentora, sprawdzającego jego pracę — tzw. pozycja zależna/niesamodzielna
- Junior to osoba ZDOLNA do wykonania prostych zadań po wskazaniu wzorców.
W moich projektach Juniorzy mają po 2–4 lat doświadczenia zawodowego, ponieważ, aby mogli zostać regularami muszą umieć samodzielnie lub z niewielką pomocą rozwiązywać problemy — to są zazwyczaj osoby 4–7 lat doświadczenia.
Do czego dążę — jeśli chcesz zdobyć poziom juniorski, to musisz poświęcić ten rok ~1600h swojej pracy z kodem. Podaję taką ilość bo dla jednego to będzie 1000, dla drugiego 2200. Jeśli chcesz tyle czasu wygospodarować w roku to musisz sobie zrobić dodatkowy etat na naukę lub pracowanie nad rozwiązywaniem problemów.
7. Pierwsza praca — czy musi być to etat?
Czas na jedno z ważniejszych rzeczy — czy Twoja pierwsza praca(doświadczenie komercyjne — za pieniądze) musi być etatowe? Wiele osób uważa, że TAK znowu nie patrząc na INNE możliwości, a jest ich wiele:
- Praca na zlecenia
- Udział w projektach open source
- Zlecenia “charytatywne” <- dla organizacji
- Projekty własne
Każda z tych form może Ci przynieść jakieś pieniądze, ale nie wywiera presji na tym, żeby od razu znaleźć pracę pełnoetatową. Sam przez wiele lat pracowałem jako freelancer i wspominam to jako czas wielu wyzwań. Moi kursanci i mentorowani często podają jako swój cel właśnie pracę etatową, nie patrząc na inne możliwości.
8. Mentorzy
Na koniec trochę sprzedaży ;)
Na jakim nie jesteś etapie warto mieć albo Mentora albo Buddy. Ten pierwszy to ktoś w rodzaju nauczyciela, ale takiego nauczyciela, który nie daje gotowych rozwiązań — pokazuje możliwości i ewentualne problemy w myśleniu. Buddy to po prostu kompan, z którym możesz się wzajemnie motywować, wymieniać wiedzą i doświadczeniami. Najlepiej, jeśli buddy ma podobną ilość doświadczenia, wtedy współpraca może być niezłą przygodą pełną owocnych rozmów.
I tutaj znowu — zależy od momentu w życiu i kariery, w którym jesteś. Jeśli zaczynasz to sugeruję mentora — nawet jak skończyłeś kurs czy szkołę programowania — warto znaleźć mentora, któremu zapłacisz za 1on1 raz na tydzień lub dwa i będzie on w stanie skierować Twoją ścieżkę na właściwe tory. Jeśli szukasz mentora to napisz do mnie na LinkedIn lub na Facebooku.
9. “Never stop learning” — mantra życiowa nr 1
I najważniejsze na koniec. Kiedyś ktoś mi powiedział, że lekarz czy prawnik to takie specjalizacje, które muszą się ciągle uczyć by być na bieżąco. Od tamtego czasu odkryłem, że takich profesji jest o wiele więcej. Ale branżę IT definiuje wyjątkowa dynamika zmian, o czym świadczą zmieniające się co roku roadmapy.
Dlatego dodaj do mantr życiowych nową, która powinna stanąć przed wszystkimi “Never stop learning”(nigdy nie przestawaj się uczyć). Niezależnie, czy będziesz iść w branżę IT czy jakąkolwiek inną. Wiedza i chęć jej zdobywania jest kluczem do każdego większego sukcesu.