Django Carrots, PyCon 2015 Montreal
Photo by Kamila Stępniowska
Django Carrots, PyCon 2015 Montreal Photo by Kamila Stępniowska zasoby własne
Reklama.
Podobnie jest z programowaniem. Jako użytkownicy internetu, smartfonów, korzystający z samolotów, czy coraz częściej inteligentnych samochodów, widzimy niesamowite efekty działania kodu komputerowego (programów). Efekt jest “magiczny”. Ulepsza, ułatwia, umila nasze codzienne życie. Dzięki niemu możemy podróżować szybciej i bezpieczniej, komunikować się z ludźmi z odległych stron świata w czasie rzeczywistym, czy zamówić papier toaletowy z dostawą do domu w godzinę (Manhattan i część Brooklynu). Czy zawsze wiemy i rozumiemy jak działają programy, które na to pozwalają? Nie. Łatwo jest o nich myśleć, że działają “magicznie”.
W tym sensie programiści i programistki to magicy współczesności.
Czy programowanie komputerowe jest magiczne?
Nie jest. Wręcz przeciwnie, programowanie jest logiczne. Kod komputerowy, składający się na programy i systemy komputerowe działa według konkretnych zasad, reguł. Wykona to i tylko to co zostało napisane przez autora/kę. To dobra wiadomość! Jeżeli coś jest logiczne, to znaczy że można się tego nauczyć.
Czy trudno uczyć się programowania?
Zależy co chcesz osiągnąć. Nauczenie się podstaw wcale nie musi być trudne. Żeby napisać prostą aplikację webową, z bardzo ograniczoną grafiką, pokazującą wszystkie parki w danym mieście osoba nigdy nie ucząca się programowania, może potrzebować od tygodnia do trzech miesięcy. Dużo zależy od motywacji i zaangażowania.
Jeżeli chcesz przyspieszyć działanie serwerów światowej korporacji “X” o 0,02% używając wymyślonego przez siebie algorytmu, to możesz być w stanie to osiągnąć po wielu latach doświadczenia w programowaniu.
Żeby jednak osiągnąć 10 plus lat doświadczenia od czegoś trzeba zacząć.
Nie mam czasu na studia programistyczne, muszę zarabiać
Przy pracy nad warsztatami programistycznymi Django Carrots (organizowanych przez Geek Girls Carrots) w Polsce i US, bardzo często spotykałam dorosłe osoby, które chciały obrócić swoją karierę o 180 stopni. W wielu wypadkach nie miały do tej pory żadnego doświadczenia z naukami ścisłymi – informatyką, matematyką, czy fizyką. Czasami nawet bali się matematyki, tłumacząc, że są z natury humanistami. Mimo wszystko zaczynali przygodę z programowaniem, bo szukali dobrze płatnej, stabilnej pracy.
Jak zacząć uczyć się programowania gdy masz 27 lat, do zapłacenia miesięczne opłaty, a twój wolny czas to tylko popołudnia i jeden dzień weekendu? Jak podtrzymać motywację, tak żeby nie skończyło się na jednorazowym “zrywie”? Jak w końcu nauczyć się wystarczająco wiele żeby móc znaleźć pierwszą pracę?
Chcę podzielić się z wami tym co przez 3 lata wypracowałam, podpatrzyłam, nauczyłam się, sprawdziłam w praktyce w czasie warsztatów programowania nie dla dzieci. Siłą rzeczy moje rekomendacje będą nakierowane na język Python, który uważam za świetny dla początkujących, a społeczność wokół niego zgromadzoną za bardzo otwartą i wspierającą. Znajdziecie jednak też inne propozycje.
Projekt a nie język programowania
Znajdź swój projekt. Program, który stworzysz od początku, a który zaspokoi twoją konkretną potrzebę, czy ciekawość. To może być strona internetowa pokazująca śmieszne obrazki z kotami, przycisk do zamawiania ciasteczek (pomysł pożyczony od Marka Stępniowskiego), czy licznik liczby użycia słowa „marchewka” w postach twoich znajomych z Facebooka. Ważne żeby projekt był ciekawy dla ciebie.
Nie zaczynaj od przerobienia jednego czy drugiego samouczka konkretnego języka programowania, póki nie masz pomysłu do czego go użyć. To jest dobre na studiach, gdy na naukę masz kilka lat, a program jest ubrany w ramy uczelni, system kar, nagród i wzajemnej motywacji. W przypadku gdy uczysz się sam/a dla siebie bez wsparcia instytucji, dobrze jest mieć konkretny cel. Takim celem może być twój projekt. To na bazie tego celu dobierasz książki i samouczki, które pomogą ci go osiągnąć.
Na początku możesz napotkać bardzo konkretne wyzwania. Nie będziesz wiedział/a co jest możliwe do stworzenia, a co nie. Co jest łatwe, a co jest trudne. Nie będziesz w stanie oszacować ile czasu będziesz potrzebować na zrealizowanie danego etapu projektu (często doświadczeni programiści też mają z tym kłopot). Trudne będzie nie tylko poznanie nowych technologii, ale też wyrobienie dobrych nawyków, tak, aby tworzony kod był prosty i czytelny dla innych. Niech to cię nie przeraża, to normalne. Dlatego jednak warto znaleźć „mentorów” – doświadczonych programistów, którzy pomogą ci się nie zgubić w procesie nauki.
Znajdź swoich ludzi – mentorzy i grupy
W Polsce istnieje wiele społeczności wokół różnych języków programowania, typów programowania, nauki programowania, czy nowych technologii jako takich. Warto przeszukać Evenea i Meetup, aby znaleźć grupy w twojej okolicy. Informację o konkretnych społecznościach i eventach w Polsce, które mogę zarekomendować znajdziecie pod tym linkiem. Niektóre z tych grup oferują płatne, lub bezpłatne warsztaty, lub regularne spotkania typu hacknights, czy hackathons, w trakcie których uczestnicy pracują nad swoimi projektami programistycznymi.
To świetne miejsca, w których możesz spotkać ludzi nowych w świecie programowania, którzy zmagają się z podobnymi wyzwaniami co ty. Niektórzy z nich będą o krok dalej – wtedy ty będziesz mógł/a nauczyć się czegoś od nich, niektórzy krok za tobą – wtedy ty będziesz mógł/a podzielić się swoim doświadczeniem.
Na spotkaniach organizowanych przez społeczności wokół Tech i programowania znajdziesz też doświadczonych programistów. Pamiętaj, że każdy i każda z nich ma swoje ulubione technologie, nawyki programistyczne, a odpowiedzi na twoje pytanie prawdopodobnie istnieje więcej niż jedna.
Jeżeli interesujesz się programowaniem, to jest też duża szansa, że wśród twoich znajomych, rodziny, przyjaciół są doświadczeni programiści. Oni też mogą ci pomóc, stać się twoimi mentorami – osobami, które nie boisz się spytać jak czegoś nie wiesz, czy doradzić się jeżeli dane rozwiązanie wydaje ci się nie optymalne.
Nie bój się pytać
Nie ma głupich pytań! To od zawsze była pierwsza zasada warsztatów Django i Code Carrots. Jest wiele miejsc w których możesz znaleźć odpowiedzi. Wymienione powyżej społeczności i grupy, listy dyskusyjne (Grupy dla początkujących – programowanie), fora takie jak Stack Overflow. Oczywiście nawet w najlepszej społeczności może znaleźć się ktoś kto zapomniał jak to było na początku i wyśmiać pytanie. Pamiętaj że to nie jest twój problem, tylko tej osoby. Większość programistów i programistek, szczególnie związanych z Open Source jest chętna i otwarta na pomoc.
Z czego korzystać – kursy, książki, samouczki
Pamiętając cały czas o projekcie, który tworzysz, warto zajrzeć do sprawdzonych źródeł. Poniżej znajdziesz konkretne propozycje.
Szeroki wybór bezpłatnych, lub stosunkowo tanich kursów online oferuje Coursera, Codeschool, Codecademy, czy Treehouse.
Dobrych książek programistycznych jest mnóstwo. Spora część publikacji wydawnictwa O'Reilly jest bardzo dobrej jakości. W przypadku Pyton na pewno ważnymi pozycjami są Python. Receptury, Python. Cookbook. Ogólne, bardziej zaawansowane, ucząca dobrych praktyk książka o programowaniu to Beautiful Code, czy klasyczne Algorytmy i Struktury danych.
Samouczki i Tutoriale dla początkujących: Django Carrots, Django Girls, Rails Girls Tutrial, ogólny przewodnik z materiałami do nauki Pythona polecany przez Python Software Foundation.
Listę sprawdzonych materiałów znajdziecie też na platformie She's Coding.
Nawyki – twoja motywacja może potrzebować wsparcia
Żeby być w czymś naprawdę dobrym potrzebujesz ok. 10 000 h pracy nad danym tematem. Żeby zacząć swoją przygodę z programowaniem potrzebujesz nawyku. Praca nad projektem raz w tygodniu nie wystarczy. W ciągu 7 dni twoja cała wiedza, którą zdobyłeś/aś podczas ostatniej sesji nauki, znacznie się rozmywa. Tracisz to co już zrozumiałeś/aś. Warto jest pracować nad projektem częściej. Żeby nie ulegać prokrastynacji (kunktatorstwu), można pracować nad nim w konkretne dni tygodnia, o konkretnych godzinach. Wtedy wyrabiasz nawyk. Nie musisz już za każdym razem podejmować decyzji o pracy nad projektem, uczeniu się programowania w tym dniu, o tej godzinie. To jest dla ciebie oczywiste. Przy braku motywacji zewnętrznej – np. uczelnia – taki nawyk jest tym bardziej cenny.
Sinusoida wiedzy i przekonania o własnej wiedzy
Im więcej wiesz, tym (myślisz że) wiesz mniej. Jak w przypadku każdej innej dziedziny, wraz z wiedzą przychodzi większa niepewność. Zdajesz sobie sprawę z tego ile jeszcze nie wiesz. Na początku, kiedy zrozumiesz podstawowe zagadnienia takie jak pętle, czy klasy, będziesz miała/a przekonanie że wiesz bardzo dużo. To będzie początek przygodny. Od tego momentu zaczniesz intensywną naukę, a wraz z czasem zdasz sobie sprawę z tego ilu rzeczy jeszcze nie wiesz. To znaczy, że wszystko robisz bardzo dobrze, chociaż może ci się wydawać całkowicie na odwrót. Warto o tym pamiętać i nie zrażać się!
Podziel się – Github, Stack Overflow, Projekty Open Source
Ale jak znaleźć pracę? Najlepsza sytuacja to ta w której praca znajduje ciebie. W przypadku programistów nie jest to rzadkie. Daj się znaleźć. Pokaż swój kod.
Możesz zacząć od stworzenia własnego repozytorium na Githubie. Na początku projekt nie musi być masywny a kod piękny, ważne abyś mógł/a podzielić się swoją pracą, pokazać postęp i zaangażowanie w naukę. Dobrze jest też odpowiadać na pytania na Stack Overflow, to wymaga często nieco więcej wiedzy, ale buduje twoją widoczność i markę jako programisty/ki.
Na dalszym etapie, zaangażowanie się w projekty Open Source to świetny sposób na naukę, budowanie sieci kontaktów (często też znajomości na długie lata), sprawdzenie się w pracy w grupie, pokazanie umiejętności. Jest to zawsze zobowiązanie wobec społeczności, że angażujesz swój czas i wiedzę dla wspólnej budowy otwartego projektu. Projekty Open Source mają bardzo różną trudność i złożoność. Dobrym pomysłem i ćwiczeniem jest zaczęcie od poprawiania zgłoszonych już wcześniej błędów w istniejącym kodzie. Dla przykładu w języku CPython możesz wyszukać błędy (bugs) które są do poprawienia na tak zwanym bugs tracker (bugs.python.org).
Któregoś dnia to ty możesz zostać uznany/a za magika współczesności. Trzymam kciuki!

*Tekst powstał z rozwinięcia prezentacji „From „it's magic” to „I know how to code that””, konferencja ACT-W, Seattle Maj 2015.
Za pomoc w przygotowaniu tekstu dziękuję Krzyśkowi Płocharzowi - mentorowi Django i Code Carrots.