6 rad dla początkujących programistów od seniora
Programista to zawód rzemieślniczy. Na początku jesteś uczniem, który czerpie wiedzę od mistrza – w dzisiejszych czasach może być to osoba, która prowadzi kurs online, instruktor na warsztatach czy też przełożony na praktykach. Później, gdy zdobędziesz wiedzę niezbędną do działania stajesz się czeladnikiem, który bazując na doświadczeniach, jest w stanie wyrobić najlepsze praktyki i głębokie zrozumienie technologii, w której operuje. Ostatnim krokiem, który nie każdy decyduje się zrobić, jest zostanie mistrzem. To sztuka układania informacji w taki sposób, aby móc ją przekazać osobie dopiero rozpoczynającej swoją przygodę.
Łukasz Piłatowski. Starszy programista w firmie TEONITE. Jego zamiłowanie do programowania zrodziło się jeszcze w gimnazjum, dzięki czemu dzisiaj łączy pracę z pasją. Największe doświadczenie ma w programowaniu aplikacji internetowych, choć obecnie najbardziej interesuje go tworzenie produktów opartych o AI. Łukasz bardzo chętnie dzieli się zdobytytą wiedzą z innymi, prowadząc szkolenia, występując na konferencjach czy pisząc artykuły.
To, co wyróżnia programowanie na tle innych dziedzin, to fakt, że nie jesteś w stanie opanować całej technologii informatycznej – jest to dziedzina tak dynamiczna i tak szybko posuwająca się do przodu, że nie jest możliwe opanowanie jej choćby w połowie.
Stąd nauka programisty podzielona na naukę technologii oraz… naukę nauki. Im szybciej nauczymy się, w jaki sposób poznać nowe technologie i rozwiązania, tym szybciej uda nam się opanować ich najwięcej lub zagłębić się w nie bardziej.
Uczyłem wiele osób, zarówno na poziomie technikum, studiów czy tych po studiach. To, co okazało się wspólne dla wszystkich przypadków to błędy i mylne założenia, które w dużym stopniu ograniczały ich rozwój. W dzisiejszym artykule chciałbym pokazać Wam kilka prostych rzeczy, które można zmienić lub dodać w swoim procesie nauki, aby sprawić żeby była bardziej efektywna.
Spis treści
1. Nie skupiaj się na tym „jak robić”, ale „co robić”
Wiele osób zaczyna naukę programowania od książki lub kursu online, który pokazuje im podstawy dowolnego języka. Następnie biorą bardziej zaawansowany materiał i następny, spędzając czas na opanowywaniu jednego tematu. Niektórzy najpierw wyszukują, które stanowiska są najlepiej płatne na rynku i pod te stanowiska opanowują język i technologię.
Niezależnie od tego, co było przyczyną wybrania akurat tej technologii, proces jej nauki wygląda w gruncie rzeczy podobnie – przechodzenie punkt po punkcie od jednej funkcjonalności do drugiej, przepisanie przykładu, zrobienie samemu zadania i odhaczone – można iść do następnego.
Niestety, bardzo szybko, najczęściej po przyjęciu do pracy czy na praktyki, okazuje się, że wiedza ta nie jest aż tak przydatna – nie mamy już prostych przypadków do rozwiązania, nie ma wyizolowanego środowiska, technologie mogą być inne niż te, których się uczyliśmy.
Stąd czas, który poświęciliśmy na naukę technologii bywa stracony.
Aby tego uniknąć wystarczy odpowiedzieć sobie na pytanie – “Jaki problem zostanie rozwiązany, gdy nauczę się tej technologii?” Jeśli odpowiedź brzmi – “żaden” – lub nie jesteśmy w stanie udzielić prostej odpowiedzi na to pytanie, to prawdopodobnie powinniśmy odpuścić ją sobie.
To problem, z którym walczymy, definiuje technologię, której musimy użyć. Nowe technologie pozwalają rozwiązywać więcej problemów, ale również generują nowe problemy, które z kolei są rozwiązywane przez inne technologie. Przenosząc się na płaszczyznę metaforyczną – nie kupuj młotka, jeśli nie wiesz, czy będziesz wbijał gwoździe.
2. Podejdź do nauki projektowo
Wyobraź sobie sytuację – przychodzi do Ciebie kolega, który nie zna się na programowaniu, a ty akurat kodujesz. Pyta się – “Co robisz?”. Jeśli Twoja odpowiedź będzie ograniczać się do szczegółów implementacyjnych, np. “stawiam restowe API, które udostępnia dwa websockety”, to z pewnością nie pomożemy mu w dowolnym stopniu zrozumieć o co nam chodzi.
Zamiast tego – opowiedz o problemie, który rozwiązujesz, np. “buduję aplikację do wysyłania wiadomości”. A co jeśli nie rozwiązujesz żadnego problemu? No cóż, to najwyższy czas zacząć.
Znajdź problem, który chciałbyś rozwiązać. Poświęć trochę czasu na jego analizę. Spróbuj zrozumieć z jakich elementów składa się dana aplikacja, rozrysuj ją sobie. Postaraj się przewidzieć, jakie problemy możesz napotkać i spróbuj poszukać technologii, które te problemy mogą rozwiązać.
Może istnieje gotowy artykuł lub poradnik jak rozwiązać dany problem? Spróbuj go użyć, rozwiązać problem, a następnie zobaczyć jak inaczej mógłbyś napisać daną aplikację, może powymieniać parę komponentów lub zmienić język.
Wiedza, którą zdobędziesz w ten sposób, da Ci doświadczenie w jednej z uniwersalnych umiejętności – analizie problemów. A to z kolei umiejętność, której moim zdaniem najbardziej brakuje początkującym programistom.
3. Nie wszystko, co robisz, musi być unikalne
Każdemu z nas powtarzano, że ściąganie jest złe. Niewiele osób natomiast (mówiąc z własnego doświadczenia) uczy się rozróżniać, gdzie jest granica między plagiatem, czyli kradzieżą, od wzorowania się na kimś i mimikowania go. System sprawia również, że efektem naszej nauki są oceny, a nie faktyczna wiedza, którą zdobywamy w jej trakcie – niech za przykład posłuży tutaj słynna szkolna sentencja 3xZ: Zakuć, Zdać, Zapomnieć.
Jedyne doświadczenie odnośnie tego, jak się uczyć, początkujący programista wynosi często tylko i wyłącznie ze szkoły, stąd trudno się dziwić, że do nauki programowania podejdzie inaczej. Oczywiście, proces ten działa, jednak jego efektywność może być znacznie lepsza.
Przede wszystkim, chciałbym, abyś zapamiętał łacińskie przysłowie, którego, skądinąd, nauczył mnie jeden z moich mistrzów, genialny aktor i wspaniały człowiek – Cezary Pazura. Brzmi ono: „Quidquid discis, tibi discis”, co możemy przetłumaczyć jako „czegokolwiek się uczysz, uczysz się dla siebie”. Pozwala ono zrozumieć, że niezależnie od tego, czy aplikacja, którą napiszesz, okaże się sukcesem, czy nie, czy będzie to prosty kalkulator czy system internetowy pokroju facebooka, najcenniejszą rzeczą, którą możesz zdobyć, jest wiedza – Twoja wiedza odnośnie tworzenia aplikacji i rozwiązywania problemów.
Jak wiadomo, najtrudniejszą rzeczą jest zacząć coś robić, więc zapewne brakuje Ci pomysłów na aplikację, którą mógłbyś wykonać. Podzielę się z Tobą kilkoma wskazówkami, jak takie pomysły odszukać.
Po pierwsze – zobacz na otaczający Cię sprzęt i internet. Wiele osób korzysta z Facebooka, z zegara systemowego, niektórzy z widget’ów pogodowych. Wielu z Was zapewne także gra w gry, ma jakąś ulubioną. To są wszystko pomysły na aplikacje.
Napisz komunikator, coś a’la Messenger czy Gadu Gadu. Napisz aplikację, która wyświetli Ci pogodę na ekranie. Napisz aplikację, która wyświetli obecną godzinę. Może połącz te trzy pomysły w jeden, gdzie na ekranie pojawi się obecna pogoda, obecna godzina i będziesz mógł udostępnić informację o tym przez komunikator. Wyszukaj popularne gry tekstowe i spróbuj zaimplementować jedną z nich. Może napisz własną uproszczoną wersję Bombermana czy Iron Slug’a. Lubisz muzykę? Napisz własnego Winampa. Odtwórz film w swojej aplikacji. Zbuduj stronę podobną do YouTube, gdzie będziesz mógł wysyłać filmy i je odtwarzać. A potem zintegruj ją z aplikacją wyświetlającą pogodę i godzinę.
Zwróć uwagę na jedną ważną rzecz – pomysły powyżej nie są nowe. Serwisy te istnieją, mają swoich użytkowników i z pewnością będzie ciężko konkurować z czymś takim. Tylko, czy na pewno chcemy konkurować? Nie. Liczy się wiedza. Quidquid discis, tibi discis.
4. Bądź odważny i pewny swojej wartości
Od dłuższego czasu, oprócz programowania, interesuję się także awiacją i aeronautyką – czyli w skrócie, wszystkim tym, co lata, a już w szczególności tym, co lata w kosmos. Sytuacja, o której zaraz się dowiesz ma natomiast miejsce w lotach pasażerskich, a tyczy się sposobu dobierania pilotów do danego lotu. Otóż okazuje się, że pilot, który jest bardzo doświadczony, będzie latał tylko i wyłącznie z pilotem, który również jest doświadczony. Nowicjusz natomiast będzie także latał tylko z innym nowicjuszem.
Dlaczego? Aby jeden z pilotów nie bał się zakwestionować decyzji drugiego pilota. Obaj mają ten sam poziom kompetencji, stąd żaden z nich nie czuje się lepszy czy gorszy. Pokazuje to jednak pewien problem. Otóż, gdy ktoś jest bardziej doświadczony od nas, to czasami, nawet gdy nie zgadzamy się z jakąś jego decyzją czy osądem, z góry założymy, że to on ma rację, a my się mylimy – przecież to on ma dłuższy staż pracy niż ja.
Pamiętajmy jednak, jak już wcześniej wspomniałem, że w programowaniu technologie zmieniają się tak szybko, że nawet najlepszy programista nie jest w stanie ogarnąć wszystkiego. Stąd Ty, jako osoba, która właśnie uczy się danej technologii, możesz mieć lepszą czy też bardziej aktualną wiedzę na jej temat niż osoba, która ma więcej lat doświadczenia w zawodzie.
Tu posłużę się jeszcze jednym, ważnym dla mnie cytatem, tym razem od rapera Araba – „Nie jestem wyżej, po prostu jestem głębiej”. Jesteśmy tymi samymi ludźmi. Zarówno ja, jak i Ty, jesteśmy w stanie rozwiązać dokładnie te same problemy. To, co może nas różnić, to czas, w jakim to zrobimy i sposób, w jaki problem zostanie rozwiązany.
Stąd ważna rzecz dla Ciebie – jesteś w stanie sprostać prawie każdemu zadaniu! Im szybciej zaczniesz wychodzić ze strefy komfortu i brać się za coraz trudniejsze zadania, tym szybciej zdobędziesz niezbędną wiedzę, aby zostać tzw. Midem czy Seniorem.
5. Rób mniejsze kroki, ale często
Czasami, ludzie, których spotykam, mówią mi – “Eee, Ty to masz fajnie, tylko siedzisz przy tym komputerze, klikasz sobie, i zarabiasz, czasami nawet nie wychodząc z domu”.
Moja odpowiedź na to jest zawsze jedna i ta sama – „To zacznij robić to samo! Mogę Ci pomóc!” – po czym następuje długa lub krótka litania wymówek – „Niee, ja to na tych komputerach w ogóle się nie znam”, „Nie mam czasu”, „Musiałbym się na jakiś kurs zapisać” itp. itd.
Dlaczego są to tylko wymówki? Odpowiem na to innym pytaniem, nad którym warto jest się zastanowić – „Co trzeba zrobić, aby zostać pisarzem?”. Odpowiedź jest jedna i banalna – „zacząć pisać”. Możemy być w tym lepsi, lub gorsi, mieć lżejszą rękę do pióra lub cięższą, niemniej – jedynym wymaganiem, aby móc określić siebie jako pisarza, jest fakt, że zaczęliśmy pisać.
To samo tyczy się programowania – nie ma innej metody niż przysiąść do klawiatury i zacząć pisać kod. W obecnych czasach nie trzeba nawet instalować niczego na komputerze – dostępnych jest kilka czy też kilkanaście stron, które umożliwiają kodowanie online.
Osoby, o których wspomniałem, wyszukują problemy. Jeśli chcesz rozwijać się szybciej, szukaj rozwiązań, nie problemów.
Nie masz czasu – czy aby na pewno? Jedziesz w autobusie – poczytaj dokumentację czy obejrzyj kurs online. Polub strony na facebooku związane z nauką kodowania, programowaniem itp., tak abyś miał w aktualnościach informacje o programowaniu.
Masz mało czasu – to i tak dobrze. Programuj codziennie nawet przez 30 minut, a po tygodniu będziesz miał 3,5h kodowania do przodu.
Nie masz komputera – nic nie szkodzi, kursy możesz oglądać przez telefon, są strony online do pisania kodu jak i edytory kodu w telefonie.
Nieważne jak małe kroki robisz, w perspektywie każdy z nich się liczy i uczy cię czegoś nowego. Nie dziś, nie jutro, ale w niedalekiej przyszłości zobaczysz, jak dużo Ci to dało.
6. Rozwiązuj jeden problem na raz
W tworzeniu aplikacji, już po fazie planowania i patrzenia na cały projekt całościowo, powinieneś zmniejszyć swoją perspektywę do konkretnych kroków, które musisz wykonać.
Robiąc, dla przykładu, aplikację typu Gadu Gadu, zacznij np. od skryptu, który będzie zapisywać tekst do pliku.
Oczywiście, docelowo będziesz musiał mieć jakiś serwer, który będzie te wiadomości odbierać i wysyłać do adresata. Ale dzięki temu podejściu, będziesz mógł zrozumieć w jaki sposób obsłużyć przekazywanie tekstu od użytkownika do kodu i następnie poznasz jak wygląda obrabianie tego tekstu – to już coś! Możesz następnie napisać prosty serwer, zająć się interfejsem – ale wciąż, bierz jeden problem do rozwiązania.
Znam wiele osób, które porywając się na dany projekt, rozwiązują wiele albo nawet wszystkie problemy naraz. Nie są wtedy w stanie stwierdzić, dlaczego ich kod nie działa – pozmieniali tyle rzeczy, dodali jeszcze więcej nowych, że nie wiadomo kiedy tak naprawdę w kodzie zaczęły pojawiać się błędy. Pojawia się wtedy frustracja, zniechęcenie, bezsilność – żeby finalnie wyrzucić niedziałający projekt do kosza.
Taktyka rozwiązywania problemów pojedynczo pozwoli Ci na błyskawiczną reakcję właśnie w momencie, gdy wprowadziłeś niedziałającą zmianę. Niemniej, pamiętaj – każdy projekt, po jego zakończeniu, możemy przypisać do dwóch kategorii – udany oraz lessons learned. Nawet najgorszy projekt jest w stanie uświadomić ci, chociażby, w jakich projektach nie chcesz pracować i czego unikać.
Na zakończenie, chciałbym życzyć Ci powodzenia. Będąc tutaj, na początku swojej drogi do świata IT, jest prawdopodobnie najciężej – wszystko wydaje się trudne i skomplikowane, wiadomości do przyswojenia jest ogrom i wiele rzeczy zdaje się nie być tak, jak być powinny.
Mogę Cię jednak pocieszyć – jest wiele miejsc, które pomogą Ci przejść ten etap, może nie bezboleśnie, ale na pewno łagodniej. Szukaj praktyk, które nauczą Cię jak najwięcej. Szukaj staży w ciekawych firmach.
A co jeśli nie znajdziesz żadnego takiego miejsca? Cóż, będziesz w tej samej sytuacji, w której ja byłem. A jedyną receptą na to jest stworzenie takiego miejsca na własną rękę, gdy już przejdziesz całą drogę samemu – aby nikt inny nie musiał. Właśnie dlatego, gdy trafiłem już do odpowiedniego miejsca, mojej obecnej firmy TEONITE, wdrożyłem tam swój autorski program praktyk, BootMeUpTNT. Tworzę go z myślą, abym sam mógł trafić na ten program w momencie, gdy zaczynałem swoją przygodę.
Ciebie również zachęcam – jeśli nie znajdziesz swojego miejsca – rób własne BootMeUp. Pomagaj innym w zdobywaniu wiedzy, dziel się z innymi tym, czego się nauczyłeś – tylko w ten sposób będziesz w stanie ułatwić innym, podobnym do Ciebie, ten najtrudniejszy czas.
Autorem grafiki artykułu jest Krystian Kur z TEONITE.