25 maj 2022 POIT #159: Skuteczna nauka programowania
Witam w sto pięćdziesiątym dziewiątym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy jest skuteczna nauka programowania.
Dziś moim gościem jest Marcin Czarkowski – współtwórca Przeprogramowani.pl, kanału Youtube, podcastu oraz bloga dla programistów szukających szerszego spojrzenia na swoje rzemiosło. Od początku kariery programistycznej pracujący w firmach produktowych, obecnie Senior Front-end Engineer w SmartRecruiters, unicornie tworzącym system do obsługi procesów rekrutacyjnych dla klientów korporacyjnych oraz portal SmartR, przyjazny kandydatom portal ułatwiający proces szukania pracy.
Sponsor odcinka
Sponsorem odcinka jest firma Farnell.
W tym odcinku o nauce programowania rozmawiamy w następujących kontekstach:
- czym jest skuteczna nauka programowania?
- jaki jest jej cel?
- co to znaczy wystarczająco dobrze opanować programowanie?
- czy nauka programowania jest trudna?
- o co w niej chodzi?
- czym jest nastawienie na rozwój?
- dyscyplina czy motywacja?
- jak ważne są nawyki?
- po co uczymy się programowania?
- nauka top-down vs bottom-up oraz JIT
- czym jest long life learning?
- studia czy samodzielna nauka?
- dlaczego warto inwestować w ponadczasowe umiejętności?
Farnell – podzespoły elektroniczne
Zapraszam do odwiedzenia strony sponsora odcinka, firmy Farnell, producenta podzespołów elektronicznych.
🎁 Tylko do 1 sierpnia 2022, dokonując zakupów na minimum 300 zł w sklepie internetowym Farnell, na kod: ROZMOWA10 otrzymasz 10% rabatu!
Subskrypcja podcastu:
- zasubskrybuj w Apple Podcasts, Google Podcasts, Spreaker, Sticher, Spotify, przez RSS, lub Twoją ulubioną aplikację do podcastów na smartphonie (wyszukaj frazę „Porozmawiajmy o IT”)
- ściągnij odcinek w mp3
- poproszę Cię też o polubienie fanpage na Facebooku
Linki:
- Profil Marcina na LinkedIn – https://www.linkedin.com/in/mkczarkowski/
- Profil Marcina na Twitterze – https://www.twitter.com/mkczarkowski
- Przeprogramowani – https://przeprogramowani.pl/
- Farnell – https://pl.farnell.com/
- https://pl.farnell.com/3d-printing-solutions
- https://pl.farnell.com/internet-of-things
- https://pl.farnell.com/sensor-technology
- https://pl.farnell.com/e-techjournal
- https://www.element14.com/news/farnells-popular-e-tech-journal-returns-with-new-look/
Wsparcie na Patronite:
Wierzę, że dobro wraca i że zawsze znajdą się osoby w bliższym lub dalszym gronie, którym przydaje się to co robię i które zechcą mnie wesprzeć w misji poszerzania horyzontów ludzi z branży IT.
Patronite to tak platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Chciałbym oddelegować kilka rzeczy, które wykonuję przy każdym podcaście a zaoszczędzony czas wykorzystać na przygotowanie jeszcze lepszych treści dla Ciebie. Sam jestem patronem kilku twórców internetowych i widzę, że taka pomoc daje dużą satysfakcję obu stronom.
👉Mój profil znajdziesz pod adresem: patronite.pl/porozmawiajmyoit
Pozostańmy w kontakcie:
- 📧 Jeśli masz jakieś pytania lub komentarze, pisz do mnie śmiało na krzysztof@porozmawiajmyoit.pl
- 📩 Zapisz się na newsletter, aby nie przegapić kolejnych ciekawych odcinków
- 🎙 Subskrybuj podcast w lub
Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner (posłuchaj)
Transkrypcja podcastu
Cześć! Mój dzisiejszy gość to współtwórca przeprogramowani.pl, kanału YouTube, podcastu oraz bloga dla programistów szukających szerszego spojrzenia na swoje rzemiosło. Od początku kariery programistycznej pracujący w firmach produktowych, obecnie Senior Frontend Engineer w Smart Recruteirs – unicornie tworzącym system do obsługi procesów rekrutacyjnych dla klientów korporacyjnych oraz portal Smart-HR, przyjazny kandydatom portal, ułatwiający proces szukania pracy. Moim i Waszym gościem jest nie kto inny jak Marcin Czarkowski.
Cześć, Marcin!
Bardzo miło mi gościć Cię w podcaście.
Cześć!
Myślę, że wielu słuchaczom jesteś znany z takiego, powiedziałbym, popularyzowania frontendu, wiedzy na temat frontendu, w szczególności Java Scriptu, ale również takiego zdroworozsądkowego podejścia do rozwoju w tym naszym światku programistycznym, stąd myślę, że jesteś doskonałym gościem, żeby porozmawiać o skutecznej nauce oprogramowania.
Ale też znam Cię trochę, a właściwie słucham i oglądam Cię i wiem, że jesteś też fanem rytuałów, fanem nawyków i mam też taki rytuał tutaj u siebie, mianowicie na początku pytam mojego gościa o to, czy słucha podcastów, jeśli tak, to jakich najchętniej. O to samo chciałbym też Ciebie zapytać.
Tak, podcastów słucham naprawdę dużo, gdzieś tam za sprawą Spotify Rapt, tego podsumowania zeszłego roku, dowiedziałem się, że samego Joe Rogana słuchałem w zeszłym roku 205 godzin, więc to jest dość dużo. Bardzo lubię podcasty, to jest element mojej codziennej rutyny. Zawsze gdy sobie gotuję albo sprzątam, to ten podcast mi towarzyszy. I są trzy podcasty, których słucham najczęściej. Jest to wspomniany Joe Rogan ze względu na ciekawych gości, ale też bardzo luźną i autentyczną formę. Często jak ludzie widzą 3,5 godziny, to mówią: „Ja pierniczę”, w sensie po co, gdzie i jak? A ja sobie to do obiadku zawsze wrzucę i to naprawdę poszerza moją perspektywę.
Kolejnym takim podcastem jest Lex Fridman, również znany za pośrednictwem Joe Rogana, ale również obecnie już bardzo popularny podcaster, który również ma ciekawych gości i dużo bardziej merytoryczne rozmowy niż w przypadku Joe Rogan, dużo też tematów takich filozoficznych, historycznych, więc to bardzo mnie kręci.
I trzeci podcast, którego obecnie słucham trochę mniej, ale wcześniej bardzo dużo wniósł do mojego życia, to jest podcast Jordana Petersona, również dość znana postać, profesor psychologii. Od niego się bardzo dużo dowiedziałem o psychologii właśnie, o wartościach, trochę o tym, jak brać odpowiedzialność za własne życie. Na początku mojej nauki programowania to była wiedza, która bardzo mi pomogła, i wydaje mi się, że gdyby nie Jordan Peterson, to byśmy tutaj ze sobą nie rozmawiali i być może nie robiłbym tego wszystkiego, co teraz robię. Bardzo ten pan mi w życiu pomógł i wiele rzeczy mi rozjaśnił. Więc polecam.
To są takie trzy podcasty, do tego jeszcze Tim Ferris, Sam Harris – również bardzo polecam. A jeżeli chodzi o polskie, to szczerze mówiąc, nie słucham ich zbyt wiele, ale ostatnio słuchałem odcinka Twojego podcastu o języku Rust, bardzo mi się podobał, więc osobom zainteresowanym tym językiem bardzo polecam sprawdzić ten odcinek.
Te polecajki, zwłaszcza zagraniczne, o których tutaj powiedziałeś i też sposób, w jaki je konsumujesz, to jest, mam wrażenie, połączenie takich trzech rzeczy: wiedza, rozrywka i nauka angielskiego jednocześnie. Nie da się już chyba więcej w jednym czasie zrobić dla siebie. Super!
Chciałbym na początku zdefiniować, jak Ty w ogóle rozumiesz skuteczną naukę programowania, bo to może dla wielu osób oznaczać różne rzeczy. To może być otrzymanie pierwszej pracy, to może być zdanie testu na studiach, robienie czegoś po godzinach… Czym dla Ciebie jest skuteczna nauka programowania?
Te wszystkie takie zewnętrzne cele, o których wspominałeś i o których często ludzie myślą, np. pierwsza praca albo staż, albo osiągnięcie jakiegoś progu zarobków, to oczywiście jest istotne i jest jakimś tam wyznacznikiem tego, czy nam dobrze idzie, ale ja tego nigdy nie traktowałem jako nadrzędny cel. To dla mnie są tak naprawdę efekty uboczne procesu, w który ja wierzę, że jest ważny w XXI wieku, czyli właśnie poszerzanie swoich kompetencji, rozwój.
Mam głęboką wiarę, że inwestycja w wiedzę to jest coś, co zawsze się zwróci. Nie do końca może wiemy, jak, czy to będzie właśnie zdobycie pracy za rok czy za trzy, bo to nie jest od nas tak bardzo zależne, bo to, czy my zdobędziemy pierwszą pracę, to jest tak naprawdę decyzja kogoś, kogo my nie znamy, jest dużo czynników środowiskowych, na które możemy nie mieć wpływu, bo np. ktoś może dostać tę pracę zamiast nas, bo zna tę osobę. Znajomości grają rolę w życiu i nie ma sensu stwierdzić, że uczyliśmy się nieskutecznie przez dwa lata, robiąc to w sposób naprawdę zdyscyplinowany, bo np. nie jesteśmy w stanie dostać pracy. Nie traktowałbym tego jako wyznacznika tego, czy nam dobrze idzie. Oczywiście jeżeli będziemy faktycznie uczyli się w sposób systematyczny, zdyscyplinowany, to my te cele będziemy osiągali, bo po prostu będziemy zbyt dobrzy, żeby nas ignorować.
Więc ja bardziej tę skuteczną naukę programowania definiuję jako proces, który jestem w stanie powtarzać codziennie i który jest na tyle dobry, że coby się w świecie nie działo, to ja będę gdzieś tam te swoje cele realizował, jakie by one nie były. One u mnie dość często w życiu się zmieniały, bo coraz lepiej siebie rozumiem, coraz lepiej siebie znam. Trzy lata temu myślałem, że chcę A, teraz chcę B, a pewnie za kolejne trzy lata będę chciał C, bo po prostu się rozwijam, ale cały czas ta nauka mi towarzyszy, bo to jest proces, a nie dążenie do jakiegoś sześciopaka na lato, jak to dość często ludzie patrzą w ten sposób na siłownię.
Pewnie. Bardzo podoba mi się to ujęcie nauki programowania jako procesu, a nie jako odfajkowania na naszej liście, że już teraz umiem programować i bierzcie mnie na rynek pracy, jestem gotowy i będę zarabiał kokosy.
Ale chciałbym jeszcze ten temat trochę podrążyć, bo z pewnością jest Ci znany taki model rozwoju kompetencji w kształcie litery T, myślę, że wielu słuchaczom też jest on znany. I tam jest ta nóżka w tym T, która oznacza jakąś wąską specjalizację w wybranym zagadnieniu, w naszym przypadku programowaniu. Dla mnie ta nóżka w tym T to jest taka czarna dziura. Jak już się tam wejdzie, to nie ma końca. Zawsze jest coś, co mogę jeszcze poznać, zawsze są rzeczy, których jeszcze nie wiem, umiejętności, których jeszcze nie nabyłem.
I tutaj pojawia się też taka pułapka, żeby powiedzieć sobie dość. Albo kiedy powiedzieć, że jestem już wystarczająco dobry, że już wystarczająco nauczyłem się języka, biblioteki, podejścia, architektury, czegokolwiek, że mogę już z tymi umiejętnościami wejść na rynek, zacząć dzielić się tą wiedzą. Czy masz jakiś taki framework, jakieś takie zasady, które powiedzą, że okay, już wystarczająco dobrze opanowałem dane zagadnienie techniczne.
Tutaj udzielę dwóch odpowiedzi. Po pierwsze zawsze możemy znaleźć w internecie jakieś checklisty, roadmapy tego, co powinniśmy umieć, aby zostać programistą np. Java Script. Czy to są jakieś tam domknięcia, wynoszenie, zrozumienie tego typu koncepcji, bardzo często te listy się pojawiają, mają podobną zawartość, więc możemy trzy takie materiały znaleźć i uznać to za drogowskaz i odfajkowywać pozycje na tej liście. To jest na pewno skuteczny sposób. Działałem na taką modłę.
Ale drugie, to po raz kolejny chciałbym zauważyć, że wystarczająco dobry to jest zawsze względne. Bo możemy pójść na rozmowę o pracę i jedna osoba nam powie, że jesteśmy świetni, jutro możemy zaczynać jako junior i w ogóle, świetlana przyszłość przed nami, a drugiego dnia pójdziemy do innej firmy i nam powiedzą, że jesteśmy do niczego i że możemy przyjść najwcześniej za trzy lata, bo np. to będzie Google, gdzie wymagania są bardzo wysokie. Więc nie szukałbym tego „wystarczająco dobry” wewnątrz siebie.
Trzeba sprawdzać, wychodzić na ten rynek i dostawać feedback. I jak w końcu ktoś nam powie, że jesteśmy wystarczająco dobrzy, to jesteśmy. Ale to będzie bardzo zależne od kontekstu, więc po raz kolejny: bardziej inwestowałbym w to, żeby się uczyć, odfajkować z czystym sumieniem listę, a potem niech się dzieje, co ma się dziać, najwyżej przysiądę na kolejne 100 godzin i w końcu będę wystarczająco dobry.
Mówiłeś o tym procesie, mówiłeś, że nabywanie kompetencji, umiejętności związanych z programowaniem to droga. Chciałbym nieco bardziej zrozumieć tę drogę. Czy to jest coś wg Ciebie trudnego? Patrząc z Twojego doświadczenia i z perspektywy Twoich znajomych – o co tak naprawdę w tej nauce programowania chodzi?
Odpowiadając krótko na pytanie, czy nauka programowania jest trudna, moim zdaniem jest i wynika to z mojego doświadczenia i z dość licznych obserwacji. Miałem ku temu okazję, mamy z Przemkiem i Adamem kurs Opanuj Javascript, już prawie 700 osób uczyło się z nami tego oprogramowania i widzę, że większości ludzi sprawia to podobny problem, jaki sprawiało mnie. Wiem, bo prowadzę sesje mentoringowi jeden na jeden.
Ludzie przez pierwsze dwa lata walczą o życie, chyba że mają ku temu naprawdę predyspozycje. Ja nigdy się ich w sobie nie doszukiwałem, bo uważałem się za humanistę, zawsze byłem w klasie z rozszerzonym polskim, historią. Jeżeli do czegokolwiek w szkole się przykładałem, to właśnie do tych przedmiotów. Całą resztę miałem gdzieś tam w poważaniu większym.
I kiedy podjąłem decyzję, że spróbuję w programowaniu, to byłem po studiach prawniczych, które przerwałem, bo stwierdziłem, że to jednak nie będzie dla mnie. To było po prostu duże wyzwanie. Temu wszystkiemu towarzyszył jeszcze jakieś tam dołek psychiczny, zarówno na gruncie osobistym, ale też na gruncie rodzinnym, więc to był naprawdę ciężki okres i to było dla mnie trudne i wydaje mi się, że często ludzie decydują się na to, żeby zostać programistą – jeżeli nie idą tą klasyczną drogą, że idą na studia i przez 5 lat, utrzymywani przez rodziców mają czas, żeby się tego nauczyć – czyli jeżeli ktoś decyduje się, żeby zostać programistą w bardziej niestandardowych warunkach, czyli np. już ma rodzinę, dzieci, albo tak jak ja wtopił z innymi studiami i ma poczucie, że już jest ostatni dzwonek, to jest to na ogół trudne i wymaga dużo wysiłku i samozaparcia, żeby sobie z tym poradzić.I dużo czasu też tracimy na zrozumienie, co jest naszym prawdziwym celem.
Czyli to wcale nie jest poznanie składni języka Java Script albo jakiegoś tam frameworku React, wszyscy nam to zresztą mówią w internecie, bootcampy nam to mówią, cała komunikacja, jaka jest w internecie, mówi nam, że musimy po prostu posiąść jakieś umiejętności techniczne polegające na znajomości jakiegoś narzędzia. To tak naprawdę jest 20% sukcesu, a 80% sukcesu (znacznie trudniejszy), to jest sposób myślenia programisty, ta umiejętność analizowania problemów, rozwiązywania ich, rozbijania na mniejsze części – to naprawdę sprawia ludziom większość problemów.
Kiedy obserwuję podczas mentoringów, z czym ludzie mają problem, to nie jest to Java Script, tylko to, że oni tak naprawdę nie wiedzą, co chcą zrobić, bo np. nie zrobili dobrych notatek z treści zadania, nie przeanalizowali tego dobrze. Jak rozumiemy problem, to napisanie kodu to tak naprawdę jest ten przysłowiowy Google i Stack Overflow, bo o wszystko jesteśmy w stanie zapytać i tylko bierzemy gotowe rozwiązania tych naszych mikroproblemów, ale na ogół nie jesteśmy w ogóle w stanie zrozumieć, do czego dążymy.
I na tym polega ten cały problem przez pierwsze dwa lata, że niby koncentrujemy się na Javascripcie albo innym języku programowania, a totalnie z czym innym mamy problem. Ale dużo ciężej też przyznać przed sobą, że ja jeszcze nie potrafię dobrze myśleć jak programista, niż że ja nie znam Javascriptu. To jest najtrudniejsze w tym wszystkim.
Tak, bo to też nie jest takie sexy, nie? Tworzenie jakichś systemów, bycie częścią wielkich korporacji – wow, to jest coś, czym możemy się pochwalić, zaimponować. A nauka logicznego myślenia, nauki robienia notatek, nauka podejścia, nauka nauki (jak się uczyć) już nie są takie fajne. Jest elementem tej drogi, ale nie wygląda fajnie gdzieś tam na Instagramie.
Ale kiedy tak opowiadałeś, to przyszło mi do głowy, że może powinniśmy zrobić pewne rozróżnienie. Nauka programowania vs nauka kodowania. Myślę, że rzadko kto podchodzi do tego jak do nauki programowania, większość traktuje to jednak jako naukę kodowania, jako opanowanie rzemiosła, języka, frameworka itd. Natomiast programowanie to jest coś znacznie szerszego. Jest to temat pewnie na osobny podcast, ale warto tutaj też jasno sobie o tym powiedzieć.
Myślę, że sam rynek pracy też utrudnia młodym stażem opanowanie tych kompetencji, bo mierzy rzeczy, które są bardzo techniczne, namacalne, łatwe do oceny, a jak wiemy to, co się mierzy, to rośnie. Obserwując przez ileś lat ten rynek, widzę, że umiejętności miękkie (z braku lepszego określenia tak bym je nazwał) przerastają na znaczeniu jeśli chodzi o branżę IT, ale ciągle takie pierwsze zrozumienie np. nowej rekrutacji, która się otwiera, jest rozumieniem przez pryzmat tych kompetencji twardych, jakkolwiek by nie było.
Jestem w ogóle pod dużym wrażeniem Twojej otwartości w mówieniu o Twojej drodze. Myślę, że oprócz dawania konkretnych porad, może warto też zainspirować słuchaczy. Gdybyś jakoś szerzej opowiedział o swoich początkach nauki programowania.
Z wielką przyjemnością, w zasadzie nigdy tego nie robiłem, więc myślę, że to jest dobry moment. Miałem poczucie, że to się raczej nie uda, bo tak jak mówię, miałem łatkę humanisty, miałem też łatkę ze szkoły człowieka zdolnego, ale leniwego i to też była taka samospełniająca się przepowiednia. Jak usłyszałem to w wieku siedmiu lat, to potem już do matury grałem pod dyktando tych słów, mniej lub bardziej świadomie.
Na studia również poszedłem bardziej z myślą o tym, żeby się fajnie imprezowało i żeby były dziewczyny. Chciałem też wykorzystać swoje naturalne predyspozycje, więc poszedłem na prawo, bo stwierdziłem, że się świetnie wykłócam, zawsze świetnie mi szły jakieś debaty w szkole i to był, powiedzmy, mój poziom świadomości, gdy się decydowałem na drogę zawodową, zresztą nie jest mi specjalnie wstyd, że myślałem w ten sposób, mając 18 lat, bo to jest naprawdę bardzo młody wiek na podejmowanie takich poważnych decyzji.
Trzy lata później obudziłem się z ręką w nocniku, skończyłem praktyki w prokuraturze, myślałem, że będę prokuratorem i ręką sprawiedliwości, praktyki miałem bardzo fajne, ale niestety kompletnie mi się nie podobały i stwierdziłem, że jeżeli na to mam bardzo ciężko pracować do 30 roku życia, żeby skończyć w takiej pracy, to dziękuję. I podjąłem decyzję, że rezygnuję z tych studiów. Rodzice oczywiście nie byli przychylni tej decyzji. Gdy na dodatek wyskoczyłem z programowaniem, to było tak odległe od tego, czym się zajmowałem do tej pory. Oczywiście dużo czasu spędzałem przy komputerze, ale raczej grając, niż kodując, więc to była raczej decyzja z czapy, wszyscy komentowali, że ten to odpłynął daleko, ale stwierdziłem, że koniec takiego traktowania życia byle jak i że tym razem sobie wszystko dobrze przemyślę i podejdę do tego w taki sposób, że ryzyko porażki będzie naprawdę znikome i że dopóki mi się nie uda, to będę walczył.
I nawet nie skupiłem się od razu na tym, żeby się zagłębić w Java Script, tylko bardziej sobie przemyślałem, co jest ważne dla mnie w życiu, o co mi chodzi, czy ja naprawdę mam środowisko, które w ogóle mi pozwoli na tę skuteczną naukę programowania, czy ja się w ogóle dobrze czuję w swoim ciele. No nie, nie czułem się dobrze, dlatego poszedłem na siłownię i potem ta energia i pewność siebie bardzo mi pomagały przy nauce programowania. Dużo też pisałem w dzienniku, zadawałem sobie jakieś tam trudniejsze pytania.
Tutaj właśnie rola Jordana Petersona, który mówił, że to jest świetny sposób na to, żeby siebie poznać. I gdzieś tam powiedzmy, że włożyłem dużo pracy, żeby poznać samego siebie i żeby mieć tę pewność, że, mimo że to jest coś totalnie nowego i trudnego dla mnie, bo pierwsze dwa lata nauki programowania kojarzę głównie z uderzaniem dłonią w stół i mówieniem „mam dość”, ale udało się przez to przejść, bo miałem takie poczucie, że mając takie nastawienie na rozwój, jestem w stanie naprawdę dużo osiągnąć. I w taki sposób do tego podchodziłem, wyrabiałem w sobie konkretne nawyki, które mi pozwalały codziennie wkładać tę pracę i prowokować trochę szczęście.
Najpierw była okazja na staż, gdzieś tam kolega z dzieciństwa kończył teleinformatykę, załapał się do pracy, szukali stażysty, ja praktycznie goły i wesoły, aczkolwiek chętny do pracy, przyszedłem, za naprawdę śmieszne pieniądze, ale wreszcie ktoś mi płacił za to, żeby się tego programowania uczyć, więc bardzo szybko, po trzech miesiącach nauki już byłem na stażu, nie umiałem kompletnie nic, ale miałem chyba ten błysk w oku, poczuli, że co by mi nie dali, to może i za tydzień czy dwa, a nie na drugi dzień, ale przyjdę z gotowym rezultatem i powiem „dawajcie więcej”. Więc miałem takie poczucie, że trzeba włożyć tę pracę i że to w końcu będzie owocowało. I to się świetnie sprawdziło.
Potem poznałem Adama Overmenta, bo założyłem bloga, na którym dokumentowałem to, czego się obecnie uczę. Stwierdziłem, że może spróbuję z YouTubem, napisałem do Adama i on nie dość, że mi pomógł w rozpoczęciu drogi youtubowej, to jeszcze powiedział, że w zasadzie to szuka programisty w Krakowie i spytał, czy bym nie chciał spróbować swoich sił w rekrutacji. Spróbowałem i potem pracowaliśmy razem przez półtora roku. Dzięki temu poznałem też Przemka i teraz mamy owocną współpracę, mamy Przeprogramowanych, on mi też polecił firmę, w której obecnie pracuję, z której jestem mega zadowolony i to wszystko było wynikiem tego, że codziennie gdzieś tam wkładałem tę robotę i po prostu dawałem sobie szansę na to, żeby poznawać fajnych ludzi i za pomocą kompetencji, które sobie wyrobiłem, zyskać ich przychylność, żeby byli w stanie mi pomóc.
Dzięki, Marcin, za podzielenie się tymi informacjami. Myślę, że teraz słuchacze znają Cię jeszcze lepiej. To jest też fajne, dodaje takiego ludzkiego rysu do naszej historii. Jest to inspiracyjne, dziękuję Ci za to. Myślę, że to jest doskonały przykład na to, jak bardzo przeceniamy to, co jesteśmy w stanie zrobić w krótkim czasie, a jak bardzo nie doceniamy tego, co jesteśmy w stanie zrobić w dłuższym, pod warunkiem oczywiście, że regularnie wkładamy tę pracę, bo tu nie chodzi o upływ czasu, tylko o tę pracę, która jest regularnie wkładana.
Powiem Ci szczerze, że też jestem nieraz pytany o to, jak ja to robię, że przez ileś tam lat tworzę te treści, gdzieś tam się udzielam itd. Dla mnie to jest element lifestyle’u, element codzienności, element zaplanowanych małych rzeczy, które robię codziennie i które z perspektywy całego dnia wcale nie wyglądają jako coś tak olbrzymiego, ale kiedy się na to spojrzy faktycznie z perspektywy dłuższego czasu, to ten efekt widać.
I myślę, że identycznie działa to w przypadku nauki programowania i chciałbym Cię teraz zapytać o to, o czym już tutaj wspomniałeś przed chwilą, o to nastawienie i nawyki, które powtarzane codziennie przez dłuższy czas robią tę robotę. Jak Ty to widzisz?
Pierwsze, o czym warto wspomnieć, to jest właśnie ten element nastawienia. Czy my w ogóle wierzymy, że jesteśmy w stanie się tego programowania nauczyć. Bo wbrew pozorom wiele osób nie wierzy w to. Jest taka pani, Carol Dweck, ona jest profesorem psychologii abo socjologii na Uniwersytecie Stanforda i ona w swoich badaniach na dzieciach i dorosłych zauważyła, że ludzie mają dwa nastawienia do swoich możliwości i do tego, w jaki sposób są w stanie się rozwijać w świecie.
Niektórzy mają nastawienie na stałość, czyli uważają, że większość tego, co byli w stanie zrobić, zostało postanowione w chwili ich urodzenia za sprawą ich intelektu, genów i środowiska, w którym dorastali. Są teraz skończonym produktem i nadają się np. tylko do bycia prawnikiem, a nie nadają się do bycia programistą, bo nigdy nie byli np. dobrzy z matematyki w szkole. Mimo że na samym programowaniu spędzili w życiu zero godzin albo dwie godziny w fatalnych warunkach, ucząc się C++ na jednej lekcji informatyki. I to im wystarczyło, żeby stwierdzić, że oni programistą nie zostaną, gdzie tak naprawdę decyzję co do tego można by było podjąć po pewnie tysiącu godzin przepracowanych w sposób świadomy. Wtedy można wydać jakiś osąd, czy ktoś się do czegoś nadaje, czy nie.
Rzecz w tym, że to nie jest jedyne podejście, jakie mamy, bo jest również podejście „na rozwój”, które jest tam gdzieś dla nas dostępne. Czyli możemy mieć założenie, że to, że ja czegoś nie umiem, to nie jest w ogóle żaden wyznacznik tego, czy będę w stanie się tego nauczyć. To jest bardziej wiara w to, że trzeba poświęcić ileś tam czasu przez dłuższy okres, żeby nabyć jakieś tam umiejętności. Czyli tak naprawdę ja jestem w stanie nauczyć się większości rzeczy, tylko potrzebuję na to czasu. Na niektóre rzeczy potrzebuję go więcej, bo np. nie mam ku temu predyspozycji, a na niektóre rzeczy potrzebuję tego czasu mniej. Tak czy inaczej, ja się tego wszystkiego nauczę, tylko daj mi 3, 5, 10 lat na to.
I to jest naprawdę uwalniające podejście, bo wtedy jesteśmy w stanie grać ten long game, o którym ja tak mówiłem, że nie napinam się, że nauczę się programowania w pół roku, bo nie wiem, czy to mi zajmie pół roku, czy dwa lata na podstawie pierwszych pięciu godzin. I to też nie powinno mieć dla Ciebie specjalnie większego znaczenia, jeżeli Ty wiesz, że inwestycja w programowanie to jest dobra inwestycja. U mnie tak się stało, jak człowiek już gdzieś tam wchodzi na próg zarobków seniora, to naprawdę wszystkie jakieś poświęcenia finansowe, czasowe wydają się tego warte. Bo teraz ta kasa wpada, zagryzałem zęby, zaciskałem pasa, a teraz mam tych pieniędzy tyle, że nie muszę się niczym przejmować.
Ale żeby do takiego momentu dojść, to może nam to zająć rok, 5 lat, 10 lat… Musimy wierzyć w to, że to jest osiągalne. Kluczowe jest, żeby ściągnąć z siebie to takie sztuczne ograniczenie psychiczne. Ale niestety w szkole jesteśmy tak oceniani. Zdolny, leniwy, humanista, ścisłowiec – to są naprawdę kategorie, które nie mają wiele potwierdzenia w badaniach. Od tego bym mocno uciekał.
To teraz może powiedz właśnie o inteligencji, o tym, jak jesteśmy w stanie szybko przyswajać te nowe umiejętności. Czy tutaj jest wpływ bezpośredni naszej wrodzonej inteligencji? Czy można by powiedzieć, że tutaj nie ma to właściwie znaczenia? Czy też jest bezpośredni wpływ?
To, że inteligencja jest jakimś wyznacznikiem tempa naszego rozwoju i że ona jest w znacznej części wrodzona, to jest fakt i z tym nie da się w żaden sposób dyskutować. Jeżeli cokolwiek w psychologii jest potwierdzone, to inteligencja to jest właśnie to. I ona ma wpływ, ale na tempo naszego rozwoju. Więc jeżeli jesteśmy obdarzeni ponadprzeciętną inteligencją, to nauka programowania zajmie nam rok zamiast trzech lat.
Więc traktowałbym wiedzę o własnym poziomie inteligencji jako wskaźnik tego, ile muszę się spodziewać pracy, jaką będę musiał włożyć. Nie traktowałbym tego w żaden sposób jako ograniczenie albo wymówkę. Jeżeli ktoś wie, że nie jest super bystry i nie ma świetnego hardware’u w mózgu, to ja bym to jedynie traktował jako „aha, czyli ja po prostu zamiast dwóch godzin dziennie, muszę się uczyć trzy” i jeżeli naprawdę nam zależy i bierzemy odpowiedzialność, to jest jedyne, czego się dowiedzieliśmy i co powinno nas interesować.
W żaden sposób nie uważam, że programowanie jest tylko dla osób ponadprzeciętnie inteligentnych. Naprawdę w pracy spotykam zarówno osoby bardzo bystre, jak i osoby przeciętnie inteligentne. Programistami są często na podobnym poziomie, bo to jest po prostu bardziej kwestia poświęconych godzin i doświadczenia, niż tego, na ile szybko jesteśmy w stanie myśleć.
Jasne. Czyli ten proces po prostu zajmie nam najwyżej dłużej. Mimo wszystko składa się on z takich codziennych klocków, z czasu, który powinniśmy w miarę codziennie poświęcać na to, żeby rozwijać te umiejętności. Jak to jest wg Ciebie? Czy lepiej jest podchodzić do tego z dyscypliną, ustalonym planem, że np. od 8 do 9 koduję, obojętnie co by się nie działo. Czy też może motywacja też jest tutaj potrzebna, bo dyscyplina może się okazać niewystarczająca, żeby utrzymać nas w ryzach tego planu?
Zdecydowanie ten czas jest dla nas najważniejszym zasobem. Realnie do realizacji naszego celu, czyli np. dostania pracy albo zostania senior deweloperem dzieli nas określona ilość czasu. Może to być tysiąc godzin, 2 tysiące, 5 tysięcy. Więc najbardziej nas powinno interesować, żeby mieć czas, żeby się przybliżać do naszego milestone. Więc musimy ten czas inwestować, bo każda taka inwestycja to mały krok w kierunku tego, na czym nam naprawdę zależy.
Więc czas staje się z perspektywy osoby uczącej się najważniejszym zasobem, jaki mamy do dyspozycji. Wszystko, co nie jest konieczne, traktowałem jako coś, czego próbuję się pozbyć, żeby mieć jak największą pulę czasu, żeby to nie było pół godziny codziennie, tylko żeby to były 3 godziny codziennie. I może musimy zrezygnować z niektórych rzeczy, które robiliśmy wcześniej. Bo bardzo często słyszę, że ja nie mam na coś czasu np. „nie mam czasu, żeby pójść na siłownię”. Ja mam tyle samo godzin w ciągu doby, co każda inna osoba.
To wszystko jest kwestią tego, na co ja ten czas znajduję, a z czego rezygnuję. Ja np. zrezygnowałem już dość dawno, na początku kosztem własnego portfela w sposób odczuwalny np. zrobienia zakupów. Nie robię zakupów, tylko je zamawiam. Bo to pozwala mi zaoszczędzić, powiedzmy, 2 godziny w ciągu tygodnia. I te 2 godziny mogłem zainwestować w naukę programowania. Zwłaszcza jeżeli jesteśmy osobami, które nie mają do dyspozycji całego dnia, bo nie tylko studiują, ale też chodzą do pracy i też mają bliskich, z którymi chcą spędzić czas, to powinniśmy zrobić analizę, czy ja muszę to robić i czy to jest dla mnie wartościowe. Więc bardzo bym ten swój czas szanował, jak się uczymy, nawet kosztem pieniędzy, czy czegokolwiek innego, bo nam się to wszystko zwróci, tylko czas nam się nie zwróci. Bo mamy 24 godziny, jak je wykorzystaliśmy, tak wykorzystaliśmy, potem jest kolejny dzień i czas przemija, więc trzeba go moim zdaniem bardzo szanować.
A jeżeli chodzi o dyscyplinę, motywację, wolną wolę, to jestem mimo wszystko zwolennikiem podejścia zdyscyplinowanego. Tak jak mówiłeś, Krzysztof, to, że Ty prowadzisz ten podcast i robisz to od lat, i obecnie nie wymaga to od Ciebie dużego wysiłku, to jest kwestią tego, że na początku podszedłeś do tego w zdyscyplinowany sposób, a potem to już się dla Ciebie stało codziennością, tak jak dla mnie jest też prowadzenie Przeprogramowanych czy wiele innych aktywności.
Więc wierzę w to, że na początku musimy mocno inwestować w jakąś aktywność, co by się nie działo, robić ją w sposób regularny, aż się do niej przyzwyczaimy, aż się stanie naszym nawykiem i potem jesteśmy w stanie to robić z automatu. Motywacja? Przez 60 dni będziemy mega zmotywowani, będzie nam się chciało siedzieć 5 godzin przy kodzie i wymiatać, a będziemy mieć dni, kiedy najchętniej nie otworzylibyśmy w ogóle edytora. Rzecz w tym, że nie warto polegać na emocjach. Jeżeli motywacja jest, to super, a jak nie ma to trudno, ale ja muszę przysiąść, zaplanowałem sobie 2 godziny i tyle spędzę przy tym kodzie. I jeżeli przysiądziemy nawet jeżeli nam się nie chce, to z każdą minutą, gy coś robimy, to ta motywacja się wbrew pozorom pojawia. Jednak nie idzie mi dziś tak źle, jednak czegoś tam się nauczyłem. To działanie bardzo często wywołuje w nas motywację, a nie potrzebujemy motywacji, żeby działać.
Więc fajnie sobie tak odwrócić w głowie. To też jest mocno zauważalne, jak ktoś chodzi na siłownię. Jak przychodzisz na siłownię i masz gorszy dzień i źle się czujesz i Ci się nie chciało przyjść, ale jednak zrobisz ten trening, to zawsze wychodzisz w lepszym stanie, niż przyszedłeś. Nigdy nie miałem tak, żebym przyszedł na siłownię i się czuł gorzej po niej niż przed nią. Więc to naprawdę pokazuje, że te działania, nawet jak nie mamy na nie ochoty, to nas i tak obdarzą satysfakcją i poczuciem, że robimy coś wartościowego i czujemy się lepiej, kiedy to zrobiliśmy. Więc mega polecam takie zdyscyplinowane podejście. Zaplanowanie sobie przynajmniej dzień wcześniej, co ja będę robił, o której godzinie, w jakim miejscu i faktycznie działać zgodnie z planem.
Bo gdy tylko musimy podejmować decyzje, to wchodzą emocje. Jeżeli zacznę się zastanawiać, czy będę się uczył o 16 czy o 18, czy wcześniej zjem pizzę albo pójdę do kina, to u mnie nigdy nie zdawało egzaminu. Musiałem zawsze mieć konkretny plan, 16-18 się uczę, 18-20 idę do kina, postanowiłem to już dzień wcześniej, tak się po prostu wydarzy i nic mnie nie interesuje, co będę w danej chwili uważał, jak się będę czuł. Po prostu to zrobię i tyle. I to jest moja recepta na sukces.
Takie podejście też nie wyczerpuje zapasów silnej woli. Bo niedawne badania pokazują, że mamy pewien zapas, akumulator, który jest naładowany rano, ale pod wpływem różnych decyzji, które podejmujemy w ciągu dnia, wyczerpuje się i jeśli faktycznie mamy ustalony przynajmniej plan ramowy już poprzedniego dnia, to tym lepiej, bo nie musimy zastanawiać się, co powinniśmy robić w następnej kolejności – podpowie nam to nasz kalendarz.
I ta dyscyplina oraz wynikające z niej podejście wyrabiania nawyków jest też niezwykle pomocna, bo odciąża naszą świadomość i jest to na pewno potrzeba rzecz. Motywacja… może być trochę przereklamowana. Jeśli jest, to super, ale jeśli jej nie ma, to nie powinniśmy się zrażać. To jest też element ćwiczeń – wyrobienie w sobie takiego podejścia, że nawet jeżeli mi się nie chce, to pomimo to spróbuję, bo zazwyczaj pierwszy krok powoduje, że jednak się wkręcimy, zainteresujemy, widzimy jakiś efekt i nawet się nie zorientujemy, kiedy ta godzina poświęcona na kodowanie minie.
Ale myślę sobie, że można do tego wszystkiego dołożyć jeszcze jedną rzecz, mianowicie cel. Bo widzimy, że osoby, które mają jasno zdefiniowany cel, w chwilach wątpliwości i zawahania są w stanie sobie przypomnieć motywy swoich działań. Patrząc po sobie, widzę, jak uczyłem się rzeczy związanych z programowaniem na studiach na zaliczenie, a jak uczę się, teraz kiedy np. mam jakiś problem do rozwiązania w pracy i jest jakaś biblioteka, framework, podejście, które wiem, że może mi pomóc. To są dwa zupełnie różne światy.
Chciałbym Cię zapytać o taką rzecz, którą też nieraz widzę i o którą jestem pytany: czy uczyć się na zapas, bo widzę, że jakaś technologia czy język trenduje, czy też może raczej polegać na tym, że uczymy się just in time i potrzebujemy dowiedzieć się czegoś i wówczas do tego podchodzimy z otwartą głową. I jak do tego jeszcze się ma przebranżowienie, kiedy musimy się jednak trochę nauczyć na zapas?
No właśnie, na początku, wydaje mi się, że to ratio się zmienia tej nauki na zapas do tego just in time wraz z poziomem doświadczenia. Na początku musimy się uczyć dość dużo na zapas, bo siłą rzeczy nie mamy w ogóle okazji, żeby zastosować tę wiedzę w praktyce, bo nie mamy np. jeszcze pierwszej pracy, pierwszego stażu, więc siłą rzeczy musimy nauczyć się na zapas jakiejś listy technologii, która naszym zadaniem pozwoli nam tę pracę zdobyć. Ale wraz z tym, jak nasza wiedza wzrasta, a my jesteśmy bardziej dojrzali jako programiści, to coraz więcej wiemy, czego nie wiemy. I ta lista rzeczy, których możemy się nauczyć, wbrew pozorom znacznie rośnie, a nie maleje.
Tak jak mówiłeś na początku, mamy to „T” i to jest czarna dziura wiedzy, którą można zdobywać. I ja się już raczej mocno przestawiłem na to, żeby mieć to podejście just in time. Kiedy faktycznie potrzebuję jakiejś biblioteki, to z tej listy 50, których chcę się nauczyć, biorę tą, która jest mi idealnie potrzebna, chociaż gdzieś tam też staram się mieć te 20% czasu w tygodniu, żeby zrobić coś może niezwiązanego z programowaniem, przeczytać jakąś książkę dotyczącą psychologii lub historii, nie mam zastosowania bezpośredniego takiej wiedzy w danej chwili, ale wierzę, że warto też tę wiedzę na zapas akumulować, bo te kropki się fajnie łączą w przyszłości, może w nieoczywistych momentach.
Więc na początku dużo tej nauki na zapas, ale wydaje mi się, że dobrze mieć analizę tego, czego rynek od nas oczekuje, jakie technologie są najpopularniejsze, które zwiększają realizację naszego pierwszego celu, jakim jest pierwsza praca, a potem coraz bardziej podchodzenie w sposób zadaniowy. Mamy jakiś projekt w pracy, to się douczam, a dopóki nie ma tej okazji, to może bardziej zgłębię to, co jest mi obecnie potrzebne. Bo inaczej możemy być cały czas mega zestresowani, że nic nie potrafimy.
Wydaje mi się, że też m.in. stąd się bierze ten syndrom oszusta, który jest tak popularny w naszej branży, bo jest tej wiedzy tak dużo, i my niby jesteśmy już seniorami, leadami, a cały czas mamy poczucie, że kurcze, ja praktycznie nic nie wiem, bo dużo więcej rzeczy nie wiem, niż wiem. I to jest przytłaczające. Ale tylko jeżeli mamy podejście, że musimy to wszystko wiedzieć tui teraz. Raczej samo poczucie, że jestem w stanie się szybko nauczyć, może nas uwolnić od takiego dyskomfortu.
Chciałbym jeszcze z Tobą porozmawiać o takich taktykach, dobrych poradach, różnych podejściach, które pomogą w tej nauce programowania. Bo myślę, że mimo wszystko potrzebujemy tego typu wskazówek, jak sobie z tym wielkim słoniem poradzić. I zacznijmy może od języka angielskiego. Czy wg Ciebie to jest umiejętność, którą warto nabyć jeszcze przed nauką IT, czy może w trakcie?
Uważam, że bez języka angielskiego jest naprawdę ciężko. Zasób wiedzy, jaki jest dostępny w języku polskim w porównaniu z zasobem wiedzy w języku angielskim to ogromna różnica. Również jakość samych kursów, książek, artykułów. Tych materiałów po polsku jest co prawda coraz więcej i naprawdę fajnie ostatni lata poprawiły sytuację, ale nadal różnica jest wielka, chociażby Stack Overflow. Bez znajomości angielskiego i posługiwania się nim w sposób komfortowy jest ciężko. I znowu tu jest tak jak z tą inteligencją. Możesz nie umieć języka angielskiego, tylko sobie dolicz kolejny tysiąc godzin, które utopisz w tym, że nie masz dostępu do tych materiałów.
Więc to nie jest tak, że jest to bloker, ale jest to znaczny koszt. Więc moim zdaniem, jeżeli nawet z tym angielskim nie czujemy się na początku drogi komfortowo, to ja bym poświęcał równie dużo uwagi, aby te umiejętności podciągnąć, co samej nauce programowania. Można to bardzo dobrze ze sobą łączy i nawet trochę siebie zmuszać, żeby zamiast po polsku, poszukać odpowiedzi po angielsku i z jakimś translatorem, np. DeepL czytać te odpowiedzi po angielsku na Stack Overflow. Jednocześnie uczymy się i programowania i angielskiego. Dlatego wychodziłbym poza tę przysłowiową strefę komfortu, języka polskiego, bo uciekanie przed tym to jest po prostu duży koszt, który może nam bardzo utrudnić rozwój, zarówno krótko-, jak i długoterminowo tym bardziej.
Wspominałeś o just in time learning, czyli takim uczeniu się w momencie, kiedy mamy taką potrzebę poznania nowej technologii, frameworka itd. Kiedy praca albo konieczność wymusza na nas zdobycie nowej wiedzy. Myślę, że to jest dobre podejście dla osób, które mają już jakieś doświadczenie, rozeznanie, które uczą się punktowo.
Ale dla tych wszystkich początkujących, którzy stoją dopiero przed tym wyzwaniem nauczenia się programowania, co byś polecał? Takie podejście, kiedy na początku próbujemy ogarnąć bardzo płytko mimo wszystko większość tej wiedzy i później wejść w szczegóły? Czy też może odwrotnie, zaczynać właśnie od jakichś bardzo szczegółowych zastosowań i później nadbudowywać rozeznanie całości?
To są właśnie dwa przeciwstawne podejścia, jakie możemy mieć do nauki. Mamy właśnie to podejście bottom up, które znamy dobrze ze szkoły i ze studiów, czyli że mocno wchodzimy w teorię, fundamenty, praktyka jest gdzieś tam na trzecim planie. Drugie podejście jest totalnie przeciwstawne, znane z boot campów, gdzie po prostu próbujemy jak najszybciej nabyć umiejętności praktyczne bez większego zrozumienia tego, co my tak naprawdę robimy i w jaki sposób to się dzieje. Ja bym tutaj nie szukał takiej fałszywej dychotomii, bo tak naprawdę moim zdaniem najskuteczniejsze jest coś pomiędzy. Czyli szukanie zarówno tej ponadczasowej wiedzy, tej kluczowej teorii, jak i jak najwięcej praktyki, szukania okazji do stosowania poznanej teorii. To wydaje mi się, że jest takim złotym środkiem w nauce programowania i są miejsca w internecie, które moim zdaniem świetnie to realizują w praktyce.
Takim kursem, który moim zdaniem jest idealnym przykładem, jest Harvard CS50. Tam od totalnych podstaw jesteśmy podciągnięci na naprawdę fajny poziom pod koniec, a dużo osób blokuje się tym, że ten kurs jest realizowany główne w C. Ale tak jak mówiłem, kluczem dla nas nie jest poznanie Javascriptu jeżeli jesteśmy Frontend Deweloperami, tylko nauczenie się myślenia. Myślenie w C jest bardziej wymagające, pozwala nam na mniej błędów, musimy jeszcze lepiej zrozumieć problem, niż jak rozumiemy go w językach wysokopoziomowych.
Jest to świetna okazja, żeby podciągnąć skille z krytycznego myślenia, które jest niezbędne w programowaniu plus w tym kursie jest naprawdę dużo istotnej teorii z samej computer science informatyki, a jednocześnie mamy dużo zadań, które są wymagające, projekty, które w pocie czoła robi się 20 godzin, więc wydaje i się, że to jest taki suit spot tej teorii i praktyki. W tego typu materiały bym szedł.
Wspomniałeś na początku, że ciało, w którym działa mózg, jest też istotne, nie możemy o tym zapominać. I przychodzi mi tu na myśl sposób, w jaki pracujemy. Każda osoba, która miała kiedykolwiek być w tzw. trybie flow, wie, że to jest coś fajnego, coś poszukiwanego. Chcemy się zatracić niemalże w tym zadaniu, procesie, w którym jesteśmy, na tyle, żeby zapomnieć o całym świecie wokół. Czyli bycie w tzw. deep worku, gdzie odcinamy się od zewnętrznych bodźców i jesteśmy całkowicie pochłonięci wykonywaną pracą. Ale właśnie tutaj trochę też przychodzi to ciało, które mówi, że nie możemy tak bez końca pracować. Te zasoby niestety się dosyć szybko wyczerpują.
I właśnie, tutaj powstaje pytanie, czy takie podejście związane z flow, z deep workiem jest wg Ciebie w przypadku nauki programowania skuteczne, dobre? Czy też może powinniśmy sobie robić co jakiś czas przerwy, dawać odetchnąć umysłowi i wracać? Co wg Ciebie działa, co nie działa, co możemy poradzić słuchaczom?
Tu na pewno również nie ma żadnej dychotomii, na pewno ten deepwork i flow są kluczowe, bo nauka czy praca w trybie skoncentrowanym jest dużo bardziej efektywna, więc wpierw powinniśmy się zmusić, żeby usiąść, a potem jeszcze zadbać, żeby nic nam nie przeszkadzało, więc telefon poza zasięgiem dłoni, żebyśmy mogli faktycznie wsiąknąć w tę naukę i naprawdę spędzić tylko godzinę, ale w dużej koncentracji. I to może być więcej niż pięć godzin pracy z patrzeniem w telefon.
Więc ta koncentracja jest bardzo ważna, ale tak jak wspominałeś – nie można przeginać. Bo to wcale nie jest efektywne. Można pójść w drugą stronę i np. ja mam taką granicę koncentracji na poziomie czterech godzin. Jak w danym dniu w wielkiej koncentracji pracuję albo uczę się przez cztery godziny, to potem już mam jajko zamiast mózgu i niczego wielkiego tego dnia już nie wymyślę. Mogę oczywiście cały czas dalej pracować, ale bardziej w trybie excess luck niż w trybie ciężkiej rozkminy. Albo przynajmniej muszę iść na siłownię, na rower, żeby się zresetować.
Bo taka praca w trybie skoncentrowanym jest męcząca i wymagająca, więc powinniśmy robić sobie przerwy i fajnie jak te przerwy nie polegają na Instagramie, tylko bardziej na jakimś ruchu fizycznym, żeby dać odetchnąć swoim neuronom. One zresztą wbrew pozorom wtedy równie pracują nad tą nauką czy nad rozwiązywaniem problemów, stąd ten sukces rozwiązywania problemów pod prysznicem albo po ośmiu godzinach snu, że często jest tak, że się budzimy i wiemy to, co nie byliśmy w stanie rozkminić dzień wcześniej przy pięciu godzinach skoncentrowanej pracy.
Mózg cały czas sobie podświadomie pracuje nad wieloma sprawami i musimy dać mu czas, żeby mógł w taki sposób mniej zorganizowany do niektórych rzeczy dojść, bo często jest to bardziej skuteczne i nie wymaga od nas wysiłku. Dlatego ja nigdy bym np.nie poświęcał snu na rzecz nauki lub pracy. To dla mnie jest absurdalne, bo i tak mam poczucie, że jak już pracowałem 10 godzin, to te dwie dodatkowe niewiele wniosą. Wydaje mi się, że znacznie więcej może się wydarzyć, gdy pójdę spać i rano się obudzę, mając nową energię, i być może gotowe rozwiązanie problemu, z którym walczyłem.
Przy nauce programowania często też pojawia się takie pytanie, czy iść na studia. Na każdej grupie, Discordzie, Slacku to można zobaczyć. Tutaj naprawdę pasuje odpowiedź „to zależy”, ale ja chciałbym poznać Twoją perspektywę. Co myślisz na ten temat?
Osobiście poszedłem na studia informatyczne i, co ciekawe, nie skończyłem ich, chociaż zostało mi pół semestru, bo tak mi się życie ułożyło. Przeprowadziłem się do Krakowa za sprawą tej pracy u Adama, o której wspominałem i w tym momencie życia wydawało mi się to mega atrakcyjne, już miałem trochę dość życia w Bydgoszczy, więc taką podjąłem decyzję. Ale w ogóle nie żałuję, że poszedłem na studia, bo dzięki nim dostałem ten staż, o którym wspominałem. Gdybym nie miał statusu studenta, to bym tego stażu nie dostał. To była mała firma, gdzie ta ulga podatkowa wynikająca z tego, że byłem studentem, dała szansę zatrudnienia mnie. A kto wie, może gdybym miał więcej czasu na sensowną naukę, to bym stażu nie dostał, bo miałbym większą konkurencję w tych dużych firmach, które nie zwracają na to dużej uwagi.
Więc moim zdaniem studia to jest fajny sposób, żeby wejść w branżę IT, bo tam poznajemy ludzi, którzy też tej pracy szukają. Ktoś znajdzie, powie nam: „Ej, Stary, tutaj jest jeszcze okazja, weź spróbuj”. To jest dużo łatwiejsze, niż szukanie swojej szansy nie mając żadnej bazy w branży. Więc to wydaje mi się, że w studiach jest fajne. Bo pod kątem samej wiedzy, to i tak musimy wziąć odpowiedzialność i samemu się nauczyć, zwłaszcza w tej mojej niszy frontowej. Na studiach nie napisałem nawet linijki kodu w Javascripcie i nie miałem z tym większego problemu tak naprawdę, bo nie miałem w ogóle oczekiwania, że studia mnie tego nauczą. Ja tam poszedłem po jakąś bazę informatyczną plus po to, żeby sobie wyrobić jakąś pierwszą sieć znajomości i tak naprawdę odniosłem sukces, bo dostałem ten staż, przez prawie całe studia pracowałem. Zarabiałem śmieszne pieniądze, ale ktoś mi płacił za to, żebym przez kilka godzin dziennie mógł się dalej rozwijać i to było super.
Dokładnie. Tutaj nie ma jednej dobrej odpowiedzi, bo nie znamy alternatywnej rzeczywistości, nie wiemy, jak by to było, gdybyśmy podjęli inne decyzje. I oczywiście są przykłady osób, które rzuciły studia albo w ogóle ich się nie podjęły, a odniosły olbrzymie sukcesy. Są przykłady wręcz przeciwne, gdzie później słyszymy o takich wspomnieniach, że gdyby nie osoby poznane wówczas, to ktoś nie założyłby firmy, nie wymyśliłby czegoś itd.
Więc nie ma tutaj dobre odpowiedzi, ale myślę, że istotne jest takie rozeznanie, co nam te studia mogą dać. Tak, jak powiedziałeś, to też jest może przypadłość naszego polskiego systemu edukacji, że zazwyczaj ten skill techniczny potrzebny na rynku to nie jest coś, co bezpośrednio będzie nam dane. Aczkolwiek to wcale nie znaczy, że nie możemy wykorzystać tego czasu, żeby nabyć umiejętności. Wszystko znowu sprowadza się do nastawienia i oczekiwań.
Ale dobrze, nawet jeżeli ktoś się na te studia zdecydował i poświęcił te 5 lat, to na tym się przecież nauka programowania nie kończy. Wie to każdy, kto ma już jakieś tam doświadczenia w tej branży. Wiem, że jesteś fanem takiego podejścia, gdzie uczymy się całe życie. A jakbyś mógł zdradzić, co o tym myślisz, z jakich kanałów czerpiesz wiedzę, motywację, to myślę, że też mogłoby to być inspirujące.
To jest kluczowe właśnie. Podejście długoterminowe i założenie, że nauka to jest proces, który się nigdy nie skończy. Wtedy przestajemy się trochę przejmować tymi poszczególnymi narzędziami i zastanawiać się, czy studia to jest idealne narzędzie. No nie, to jest narzędzie, które ma wady i zalety, trzeba się zastanowić, czy te zalety są wystarczające, aby zainwestować. Tak samo jest z bootcampami – to też jest tylko narzędzie, które w skali całego naszego życia jest nieistotne tak naprawdę. To może nam krótkoterminowo pomóc, i tyle. Bo jeżeli zakładamy, że i tak będziemy się uczyli, to jedyne, co się może okazać, to że może nie wybraliśmy najlepszej drogi przez jakiś tam krótki okres czasu, nic się nie stało, lecimy dalej, teraz znajdę lepsze narzędzie, lepsze źródło.
Więc wydaje mi się, że takie podejście trochę też nas spowalnia od małych porażek, bo nie traktujemy tego jako: coś się stało wielkiego, strasznego. Utopiłem pół roku, 10 tys. na jakiś tam boot camp – no trudno, to teraz spróbuję się nauczyć samemu i wszystko będzie w ostateczności okay. Takie nastawienie jest też o tyle fajne, że ten proces nauki daje nam dużo okazji, żeby się dzielić tym, czego się nauczyliśmy, a ludzie bardzo lubią, jak się z nimi czymś dzielimy.
Zresztą cała moja działalność w internecie to jest nic innego, jak taka moja dokumentacja tego, czego się uczę, czym się interesuję, co uważam za ciekawe. Mało w tym wszystkim jest jakiegoś tworzenia contentu w sposób zaplanowany i ukierunkowany na widzów. Jestem w tym wszystkim dość mocno egoistycznym altruistą, bo realnie utrwalam sobie wiedzę, która dla mnie jest w danej chwili istotna, chcę jeszcze lepiej coś zrozumieć.
Bo moim zdaniem nauczanie kogoś, opowiadanie o tym to jest świetny sposób, żeby to zrozumieć jeszcze głębiej i nie dość, że się lepiej uczę, to jeszcze mam dużo fajnych profitów, bo ludzie są mi wdzięczni, uważają mnie za dużo większego eksperta, niż jestem w rzeczywistości (przynajmniej ja tak uważam). Bo jak człowiek coś tam mówi w internecie, to wszyscy mają założenie „ale on musi dużo wiedzieć na ten temat”. Rzecz w tym, że właśnie powiedziałem ci wszystko, co wiem. Nic więcej nie ukryłem, ale to fajnie się sprawdza i otwiera dużo ciekawych furtek i okazji w życiu, w branży, więc mega zachęcam do tego, żeby się uczyć i żeby się gdzieś tam tą swoją nauką dzielić i naprawdę nie trzeba tego robić z dużym rozmachem, można sobie założyć bloga i dzielić się notatkami z tego, czego się nauczyliśmy z kursu Hardvard CS50.
Jestem przekonany, że jak z takim blogiem pójdziemy na rozmowę kwalifikacyjną na juniora, to będziemy jednym ze stu, który ma takiego bloga i to może być właśnie decydujące, a nie to, czy znasz mega na wypasie Reacta, tylko ktoś powie „aha, ten gość faktycznie lubi się uczyć, może on nie umie tego i tego, ale on umie i lubi się uczyć, więc my go nauczymy. To jest gość, który się szybko uczy, który się rozwija, jeden ze stu dziwak, który poświęca na to czas” i to naprawdę wystarcza, przynajmniej u mnie w życiu to wystarczało. Bo to daje ludziom informację, że Ty nie jesteś człowiekiem z przypadku, że Ci faktycznie zależy, więc naprawdę jest dużo profitów z tego, żeby się uczyć przez całe życie i się dzielić owocami tej nauki.
Właśnie, bo rekruterzy firmy poszukują zwłaszcza osób z odpowiednim podejściem do nauki i które rokują, że będą zaangażowane. I to, o czym powiedziałeś, że posiadanie asa w rękawie pod postacią dokumentowania swojej wiedzy, procesu nauki to zdecydowani coś, co nas wyróżnia spośród dziesiątek czy setek CV.
Chciałbym jeszcze na chwilę wrócić do tematu studiów, bo myślę, że to jest fajna sposobność do tego, żeby się nauczyć uniwersalnych rzeczy. Niestety z uwagi na to, że przypadają one w takim, a nie innym etapie naszego życia, zazwyczaj nie czerpiemy z tego pełnymi garściami, ale ja np. po kilkunastu latach wracam do podstaw, do struktur danych, do algorytmów itd., bo po pierwsze mnie to ciekawi, po drugie pewnie już połączyłem trochę kropek i wiem, jaką wartość może mi to dać, i żałuję czasem, że nie przykładałem większej uwagi do tego, żeby te rzeczy poznać wcześniej.
To jest oczywiście takie gdybanie, wcześniej to nie miało dla mnie znaczenia, więc nie ma co do tego wracać, ale generalizując, wiedza ogólna, ponadczasowa może być przydatna. Warto też w nią inwestować, nie tylko w poznanie tych bardzo precyzyjnych, wąskich frameworków czy języków, bo to z nami zazwyczaj zostanie na dużo dłużej.
Zgadzam się, zdecydowanie. Na początku człowiek tego nie rozumie, bo ma te klapki na oczach i myśli tylko o tym, co jest wymienione w ofercie pracy, a rzadko to są rzeczy an poziomie fundamentów, jak struktury danych, algorytmy itd., ale to naprawdę odblokowuje nam później różne ścieżki rozwoju, które nie są dostępne jeśli tej wiedzy nie mamy. I ona też z nami zostanie nawet jeśli Javascript jutro by poszedł do kosza, to stracę całą wiedzę dotyczącą Javascriptu, dość dużo czasu zainwestowałem, ale też dość dużo czasu zainwestowałem w inne tematy, które mogę przenieść na grunt innych języków, np. wzorce projektowe albo zasady pisania czystego kodu. Więc mocno zachęcam ludzi, żeby czytali książki, bo w nich możemy szukać tej ponadczasowej wiedzy i to jest świetna inwestycja, bo ona nas czyni antykruchymi na zmiany na rynku pracy.
Więc nawet jeżeli Java Script pójdzie w odstawkę na rzecz jakiegoś Rusta albo czegoś innego, to ja nie będę miał poczucia, że jestem w tarapatach, bo inwestuję cały czas w ponadczasową wiedzę i im jestem bardziej doświadczony, tym więcej czasu i wiedzy inwestuję w tę wiedzę, a coraz mniej w chwilowe błyskotki, biblioteki itd. Więc nie wiem, czy można to zrobić, nie bazując na własnym doświadczeniu, bo na początku to jest takie gadanie starych dziadków. Trzeba trochę poczuć, o co tak naprawdę chodzi, z własnego doświadczenia, ale naprawdę zachęcam. Nigdy przeczytanie książki, takiej jak „Czysty kod” nie będzie stratą czasu.
No właśnie, trzeba poczuć to na własnej skórze, ale warto też czerpać z doświadczenia innych i książki są świetnym sposobem do tego. Marcin, na początku prosiłem Cię o rekomendacje podcastowe, to może zamknijmy t naszą rozmowę pytaniem o rekomendacje książkowe.
Przygotowałem ich pięć. Pierwsza, książka i TED tak naprawdę, dotycząca tego nastawienia na rozwój. TED się nazywa „The power of believing that you can improve”, Carol Dweck, mega polecam, bo możemy zrozumieć, dlaczego nastawienie na rozwój jest kluczowe. Jest też książka „Mindset”, która rozwija tę ideę, ale moim zdaniem można obejrzeć samego TED-a.
Druga pozycja to książka Scotta Adamsa, „Jak przegrać prawie wszystko i wyjść z tego zwycięsko”. To jest książka, która mnie nauczyła, że są dwa podejścia, jak sobie poradzić w życiu. Jedni się mocno specjalizują i nie zwracają uwagi na nic poza wąską specjalizacją, czyli powiedzmy, są hardcore’owymi programistami i spoza kodu wychodzą tylko jak muszą, a są tacy bardziej generaliści, np. jak ja, którzy łączą ze sobą kilka różnych skilli. W żadnym nie są specjalnie wybitni, ale sam fakt, że jest to dość unikalne połączenie, sprawia, że sobie świetnie radzą.
Ja programistą jestem okay, ale nie uważam, żebym był wybitnym ekspertem technicznym. Umiem pisać, umiem mówić i mam umiejętności sprzedażowe, marketingowe, graficzne i taki pakiet fajnie się sprawdza i w pracy i poza nią, bo tacy ludzie również są potrzebni, bo po prostu ich na ogół nie ma i w ten sposób możemy się wyróżnić wśród specjalistów. To jest szczególnie fajne jeżeli mamy jakiś bagaż z innej branży, właśnie się przebranżawiamy albo całe życie byliśmy humanistami. To może się wydawać naszą słabością, ale to jest nasza siła, jeżeli tylko fajnie obrócimy to na naszą korzyść. I ta książka fajnie o tym opowiada, bo ten Scott Adams był dokładnie w takiej samej sytuacji, on się wybił jako rysownik komiksu Dilbert, mimo że nie był ani wybitnym rysownikiem, ani wybitnym komikiem, ale był niezłym rysownikiem, który potrafi żartować i wyszedł z tego sukces. Więc takie fajne podejście, jak łączyć ze sobą nieoczywiste rzeczy.
Kolejna książka to „Atomowe nawyki”, Jamesa Cleara. Absolutny bestseller od lat, świetnie podsumowuje wiedzę o nawykach, jak one są skuteczne w porównaniu z takim naiwnym podejściem, że mamy jakiś cel i na bazie motywacji próbujemy go zrealizować. Tu James Clear pokazuje jak za pomocą nawyków i procesów możemy realizować dużo ambitniejsze cele i tak naprawdę, mając tę wiarę, że powtarzanie przez długi czas czegoś, co się sprawdza, prowadzi do niesamowitych wyników. Więc mega polecam. Bardzo konkretna książka, może wydawać się ogólnorozwojowa, ale moim zdaniem to jest mega konkret, samo mięso, praktyczna wiedza, mało książek jest tak dobre napisanych.
Następna książka miała bardzo duży wpływ na to, jak się uczę, i wydaje mi się, że jest to pozycja obowiązkowa dla osób, które się uczą programowania. To jest „głowa do liczb” Barbary Oakley. To jest pani profesor, która spędziła dużo czasu w psychologii kognitywnej i mówi o wszelkich sposobach an to, żeby się uczyć skutecznie. Jest w tej książce mowa o tym trybie rozproszonym, skoncentrowanym, deep work, nauka w interwałach. Omówione jest, jak się skutecznie uczyć, jak notować, jak czytać, ile czasu powinniśmy na to poświęcać, ile czasu na przerwy, jakie przerwy – naprawdę to jest taki mega przyjazny podręcznik skutecznej nauki, bardzo polecam.
Kolejna książka to „Pragmatyczny programista” Andrew Hunta i Dave’a Thomasa, też znany klasyk. Moim zdaniem ta książka fajnie pokazuje takie zdrowe podejście do programowania, które np. my staramy się na Przeprogramowanych gdzieś tam promować, czyli szersze spojrzenie nie tylko na ten kodzik, ale również na to, co próbujemy osiągnąć, jak się rozwijamy, żeby inwestować w ponadczasową wiedzę, w poznawanie różnych narzędzi, bo to ma istotny wpływ na naszą produktywność, więc to jest taka fajna książka o skillach miękkich dla programistów.
I ostatnia książka to jest „Inspired” Marty’ego Cagana. To jest fajny podręcznik dla osób, które chcą pracować w firmach produktowych. To jest moim zdaniem praca, która daje dużo satysfakcji. Osobiście nigdy nie pracowałem w software housie i chyba nigdy pracować nie będę, bo czuję, że bym się szybko wypalił, jednak mam dużą satysfakcję z budowania czegoś przez długi okres w sposób świadomy, kiedy rozumiem użytkownika, rozumiem domenę, czuję związek z firmą, że zmierzamy do wspólnego dużego celu, a nie mamy trzymiesięczny kontrakt, jesteśmy najemnikami dla jakiejś firmy, których przedstawicieli nigdy nawet nie widzieliśmy na oczy i odfajkowujemy tylko listę wymagań. Nie byłbym w stanie w ten sposób pracować i ta książka świetnie tłumaczy to, jak działają firmy produktowe, jak pracować z product designerem, product menedżerem, jaka jest rola inżyniera w tym wszystkim, jak odkrywać w ogóle te funkcjonalności, a potem je w sposób świadomy budować. Więc to jest taka fajna książka, która, wydaje mi się, że potrafi zainspirować do pracy w firmach produktowych. Moim zdaniem taka praca pozwala na to, żeby się nie wypalić i mieć przez długi czas radość z programowania i z inżynierii.
No i pięknie. Moc rekomendacji książkowych. Marcin Czarkowski z Przeprogramowanych był moim gościem. Rozmawialiśmy o życiu, a nawet nam się trochę udało o nauce programowania. Tak że dzięki, Marcin, za ten poświęcony czas, z mojej strony bardzo fajnie spędzony piątkowy poranek.
Dziękuję Ci bardzo.
Dziękuję również. Pozdrawiam!
Powiedz, proszę, na koniec, gdzie odsyłamy słuchaczy, gdzie Cię można znaleźć w internecie.
Przede wszystkim można mnie znaleźć na YouTubie na kanale Przeprogramowani. Można mnie również znaleźć na LinkedInie – M.K. Czarkowski i na Tweeterze również jako M.K. Czarkowski. To są takie miejsca, gdzie się najczęściej pojawiam i wypowiadam.
Świetnie! Oczywiście linki będą dołączone do odcinka. Z mojej strony, Marcin, jeszcze raz bardzo Ci dziękuję.
Do usłyszenia! Cześć!
Cześć! Dzięki!