Juniors, Praca w IT

Jak skutecznie nauczyć się programować – wyjaśnia Bartosz Cytrowski

Gdy jedenaście lat temu zaczynałem przygodę z programowaniem, studia informatyczne wydawały mi się jedynym sposobem na zdobycie umiejętności wymaganych w zawodzie.

Dyplom inżyniera odbierałem z lekkim niesmakiem – z trzech powodów: po pierwsze całe studia rozwiązywałem już rozwiązane, nudne lub niepraktyczne problemy, po drugie zdobyta tam wiedza w dużym stopniu zdążyła się zdezaktualizować, a po trzecie sam dyplom nie miał większego znaczenia w procesie zdobywania pracy. Istotniejsze dla rekruterów było to, czy jestem już dostępny w pełnym wymiarze godzin – w czasie studiów, od pierwszego roku zarabiałem programowaniem.

Współpracę z infoShareAcademy zacząłem niejako z potrzeby udowodnienia sobie i innym, że tę drogę da się znacznie skrócić, ucząc tylko niezbędnych zagadnień oraz sposobów rozwiązywania problemów. Gdy moi pierwsi absolwenci dostali pracę na stanowiskach juniorskich, utwierdziłem się w przekonaniu, że robimy to dobrze.

Po dwóch latach prowadzenia bootcampów z czystym sumieniem mogę powiedzieć, że recepta na sukces programisty jest prosta. Wystarczy się zmotywować, wypracować dyscyplinę, znaleźć dobre źródła wiedzy i zgłębiać je regularnie, ćwicząc przy tym na coraz to trudniejszych problemach.

Niestety rzeczy proste niekoniecznie są przy okazji łatwe. Praktycznie każdy, kto na własną rękę próbował nauczyć się programowania wie, co mam na myśli.

Gdy sam zapał nie wystarczy

Podstawowy problem polega na tym, że najcenniejszym z zasobów, który ulatnia się bardzo szybko, gdy stajemy przed trudnym problemem jest motywacja. Jej brak połączony z nie wypracowanymi jeszcze nawykami i dyscypliną prowadzi do zwątpienia w pracę, którą wykonujemy. Jako trener muszę nieustannie dbać o to, żeby moim kursantom jej nie zabrakło.

Bardzo ważne jest tutaj sprzężenie zwrotne, dzięki któremu w trakcie nauki bardzo szybko mogą zweryfikować poprawność własnego rozwiązania. W programowaniu podejmujemy pewne decyzje intuicyjnie, czyniąc założenia, które w dłuższej perspektywie prowadzą niejednokrotnie w ślepy zaułek. W takiej sytuacji brak możliwości skorzystania z pomocy programisty z większym doświadczeniem, wiedzą i umiejętnościami często wpędza nas w pułapkę, która drenuje nasze skończone przecież siły i czas.

W akademii staramy się temu zaradzić wykonując regularne przeglądy kodu kursantów oraz konsultując ich pomysły. Najtrudniejsze jest to, żeby oglądając cudze rozwiązanie nie narzucić przypadkiem swojego, a jedynie skierować osobę, która się uczy z powrotem na tor, który pozwoli jej ukończyć realizowany projekt. W przeciwnym razie pozbawiamy kursanta satysfakcji z rozwiązania problemu, która sama w sobie bywa w pozytywnym tego słowa znaczeniu uzależniająca i dodatkowo zwiększa motywację do podjęcia kolejnych wyzwań.

Specjalnie dlatego wszystkie duże zadania uczymy się dekomponować na mniejsze i wykonalne w krótkim czasie. W każdym wypadku, na zakończenie warsztatów, jako trener przedstawiam własne rozwiązanie, podkreślając wszystkie czynniki, które należało wziąć pod uwagę. Staram się też nie pozostawić żadnego pytania bez odpowiedzi. Kursanci, którzy dysponują większą ilością wolnego czasu, mogą swobodnie kontaktować się ze mną na wypadek, gdyby w trakcie pracy w domu trafili na problem, którego nie mogą rozwiązać.

Zacząć można od czegokolwiek, ale co dalej?

Drugim największym problemem jest podawanie informacji w takiej kolejności, żeby przed każdą nowo poznaną technologią pojawiła się dokładna definicja problemów, które dzięki niej możemy rozwiązać. Ten sposób przekazywania wiedzy pozwala tworzyć mocne ciągi skojarzeniowe, ułatwiające późniejsze powtórzenie materiału oraz pogłębienie wybranych zagadnień.

Ważnym aspektem rozwoju programisty jest dyscyplina. Ma ona koronne znaczenie zwłaszcza w początkowej fazie nauki – gdy poznajemy nowe zagadnienie, czasem nawet jeden dzień przerwy może pokrzyżować nasze plany i sprawić, że zdobyta wiedza uleci. Przez większą część kursu wspólnie pracujemy nad aplikacją, dokumentując kolejne kroki jej powstawania, dając możliwość prześledzenia historii zmian w kodzie. Dzięki temu, żeby nie wypaść z rytmu, wystarczy przeczytać materiały, które danego dnia pojawiły się na zajęciach i w miarę możliwości spróbować rozwiązać poznane problemy samodzielnie.

Dużym powodzeniem cieszą się u nas zadania programistyczne, które oferują możliwość automatycznego sprawdzenia odpowiedzi. Czasami kursanci popadają w skrajność i zarywają przy nich noce, jednak staramy się na to możliwie wcześnie reagować, gdyż nic tak nie sabotuje całego procesu jak stawienie się kolejnego dnia na zajęciach zmęczonym i śpiącym.

Brakującym elementem w układance są źródła, z których warto się uczyć. W sieci jest pełno tutoriali i kursów poruszających wybrane zagadnienia, jednak bez doświadczenia bardzo trudno jest wybrać te, które nie wyrobią w nas złych nawyków lub nie skomplikują tego, co w swej naturze jest proste. Ponadto gdy się uczymy, zwykle potrzebujemy odpowiedzi na konkretne pytania i oglądanie kilkunastominutowych filmów lub czytanie artykułów niepotrzebnie wydłuża ten proces. Gdy prowadzę zajęcia, wszystkie niezbędne zagadnienia poruszamy wspólnie przy tablicy i na rzutniku, kodując na żywo. Każdy dzień owocuje też serią linków do bardzo dobrych stron www opisujących poruszane tematy, jednakże zawsze traktuję je jako materiały uzupełniające.

Podsumowując uważam, że bootcampy pojawiły się w Polsce dość późno. Uważam, że jest to bardzo dobry zapalnik kariery i żałuję, że sam nie miałem okazji skorzystać z tej formy nauki na początku swojej drogi. Dla osób, które zastanawiają się nad podjęciem tego wyzwania napiszę jeszcze, że nie ma znaczenia, kim jesteś i czym się do tej pory zajmowałeś – talent da się zbudować uporem i ciężką pracą, a w tej branży im więcej go zdobędziesz tym dalej zajdziesz. Z mojej strony natomiast przyznam, że satysfakcji z postępów grupy i wiadomości od absolwentów chwalących się nową pracą nie da się niczym zastąpić. Dzięki za uwagę i do zobaczenia na kursie 🙂

Bartosz Cytrowski – Independent IT Consultant

Projektant i programista interfejsów użytkownika. Od 2006 roku związany z tworzeniem aplikacji w przeglądarkach internetowych. Pracował w projektach fullstackowych opartych na Javie, .Necie, PHP i Node.js m.in. dla firm Schibsted Tech Polska oraz Tidal (wcześniej WiMP). Zafascynowany funkcyjnym programowaniem reaktywnym. Specjalizuje się w języku JavaScript i bibliotekach: React, Redux, Rx, Ramda, Immutable. Na sali w infoShare Academy spędził niemal 2 tysiące godzin w roli trenera.

Bardzo dobrze gra w piłkarzyki 😉 http://cytrowski.com

 

Podobne artykuły

[wpdevart_facebook_comment curent_url="https://geek.justjoin.it/jak-skutecznie-nauczyc-sie-programowac-wyjasnia-bartosz-cytrowski/" order_type="social" width="100%" count_of_comments="8" ]