Chcesz nauczyć się programować? Zrób side-project!

Na co zwracać uwagę robiąc swój pierwszy side-project? W jaki sposób dobrać projekt pod swoje wymagania? Jakie są techniki wymyślania tematów na side-project? Na te pytania postaram się odpowiedzieć w tym tekście. Znajdziesz także tutaj dwa przykładowe tematy projektów do wykonania na wypadek, gdyby żadna ze strategii wymyślania tematu nie pomogła.

Sylwek Brzęczkowski. Python Technical Lead w Trust Stamp, a po pracy twórca kanału na YouTube “Sylwek Brzeczkowskioraz współtwórca podcastu CYBERFAZA. We wszystkim co robi koncentruje się na odbiorcy, czy to klient, widz czy słuchacz. Wielki fan optymalizacji procesów, wyznawca twelve-factor i pragmatycznego myślenia.


Jeśli jesteś po lekturze książki o programowaniu albo skończyłeś kurs i myślisz, który kurs zrobić teraz, to przestań w tej chwili! Zrób side-project!

Upewnij się, że książkowa wiedza na dobre zagościła w twojej głowie i przejdź do praktyki. Wybór tematu twojego pierwszego side-projektu jest bardzo ważny. Potrzebujesz motywacji, żeby go skończyć i musisz go też odpowiednio dobrać do swoich umiejętności. Przedstawiam ci praktyczne porady oraz techniki, które pozwolą ci znaleźć odpowiedni temat. Obiecuję ci, że nie opuścisz tego artykułu bez pomysłu na projekt.

Zanim zaczniesz szukać pomysłu na projekt poboczny, zapoznaj się z poniższymi faktami.

Co muszę wiedzieć zanim zacznę uczyć się robiąc side-project?

Potrzebujesz wyzwania

Nikt nigdy nie zrobił nic innowacyjnego albo kreatywnego bez wyzwania. Jeśli myślisz, że wiesz jak wykonać jakiś projekt, dodaj do niego trochę niewiadomych. W przeciwnym wypadku będziesz tylko oszukiwać się, że poruszasz się do przodu, podczas gdy tak naprawdę stoisz w miejscu.

Side-project może być frustrujący

Bądź przygotowany na momenty, kiedy będziesz wyrywać włosy z głowy, a programiści ze stackoverflow nie będą mieli czasu ci pomóc. Musisz pokonać pokusę poddania się. Uwaga! Frazes! Kiedy zmagasz się z jakimś zadaniem i jesteś kompletnie zblokowany, pomyśl, że wszechświat daje ci szansę do zdobycia nowego doświadczenia. I to doświadczenia najwyższej jakości. Nie brzmi to lepiej?

Przygotuj się na otrzymanie nauki najwyższej jakości

Wiedza, którą nabywasz przez swoje własne bolączki z side-projectem jest nie do zapomnienia. Jest najbardziej wartościowa i dodatkowo dodaje ci wiary we własne umiejętności. To właśnie dlatego tak ważne jest żebyś się nie poddawał, ale możesz to sobie trochę ułatwić… 

Rozpocznij od czegoś, co cię pasjonuje

O wiele lepiej jest pracować nad czymś, co cię interesuje, ponieważ będzie ci dużo łatwiej podtrzymać wysoki poziom entuzjazmu. Jest to niezbędne do dalszego rozwoju projektu i twoich umiejętności.

Motywacja nie działa. Dyscyplina jest królową rozwoju

Gdy już zaczniesz pracować nad projektem i skorzystałeś z mojej poprzedniej rady, to zauważysz, że możesz bardzo łatwo zatopić się w tworzenie twojego side-projectu. Właśnie o to chodzi. Daj sobie szansę wejścia we “flow”, czyli stan totalnego skoncentrowania na zadaniu. Rezultaty będą kosmiczne!

Ale muszę cię ostrzec. W końcu nadejdzie dzień, w którym nie będzie ci się chciało robić kompletnie nic. To naturalne. Twoim zadaniem w takim momencie jest zmuszenie siebie samego do robienia side-projektu. Bywały dni, gdy potrafiłeś kodzić po kilka godzin bez przerwy, teraz nie możesz się zebrać na godzinę. Rozwiązaniem jest dyscyplina.

Ustal sobie łatwy cel czasowy. Na przykład umów się sam ze sobą, że będziesz pracować nad side-projektem 40 minut dziennie (systematyczność) i zmuś się do tego żeby go robić dokładnie tyle – absolutnie nie mniej i może najwyżej trochę więcej jeśli masz ochotę, np. maksymalnie 60 minut (dyscyplina). Ta technika to tak zwany 20 mile march.

Sprawi to, że nie tylko się nie wypalisz, ale także w dni, w które kompletnie ci się nic nie będzie chciało i tak pójdziesz do przodu z nauką.

Wybierz coś, co będziesz mógł potem pokazać światu

Jedną z najlepszych metod szybkiej i efektywnej nauki praktycznie każdej umiejętności jest nieustanne pytanie o feedback. I, co równie ważne, słuchanie go i stosowanie się do uwag – nie możesz tej części pominąć.

Największą przysługą jaką profesjonalny programista może zrobić dla ciebie jest Code Review. I nie chodzi tutaj tylko o ocenienie stylu i poprawności twojego kodu, ale przede wszystkim o sprawdzenie twojego sposobu myślenia.

Nic nie musi być idealne

To jest tylko side-project. Jest to świetna okazja do spróbowania nowych rzeczy bez konsekwencji. W pracy twój szef będzie raczej wymagał od ciebie, żebyś używał tylko narzędzi, które znasz najlepiej, aby zminimalizować ryzyko nie dostarczenia zamówionego oprogramowania na czas. W side-projekcie możesz robić co tylko chcesz i na kiedy chcesz.

Chcę nauczyć się konkretnej umiejętności

Jeśli twoim głównym powodem do rozpoczęcia side-projectu jest nauka konkretnej umiejętności, wykonaj poniższe kroki.

Zacznij od końca. Pomyśl dokładnie co chcesz osiągnąć?

Wyznaczenie konkretnego celu nauki, znacząco podnosi prawdopodobieństwo, że nie porzucisz go w trakcie. Pomyśl o tym czego chciałbyś się nauczyć, na przykład:

  • lepiej zapamiętać informacje o których przeczytałem w książce,
  • nauczyć się nowej technologii/frameworka/platformy,
  • zdobyć doświadczenie w zarządzaniu pełnym cyklem życia aplikacji na produkcji.

Zidentyfikuj swoje braki

Koniecznie przeanalizuj, co już wiesz i potrafisz w danym temacie, następnie zaplanuj proces swojej nauki. Wykonaj poniższe kroki:

  1. Napisz swój główny cel na kartce, czyli opisz umiejętność, którą chcesz posiąść.
  2. Spisz wszystko, co już wiesz na temat tej umiejętności.
  3. Następnie zastanów się jakie masz braki w wiedzy i także zapisz je na kartce.

Wybierz side-project, który pozwoli Ci zrealizować twój cel.

Spróbuj wymyślić projekt, który w pełni nauczy cię wybranej umiejętności, uzupełni twoje braki i jednocześnie będzie to temat, którym się interesujesz. Gdy wszystkie te czynniki zagrają razem, masz gwarancję powodzenia.

Jakie są techniki szukania pomysłu na side-project?

Pomyśl o swojej codziennej rutynie

Czy jest coś co musisz robić codziennie i jest to chociaż odrobinę frustrujące? Możesz to zautomatyzować?

Jeśli niczego takiego nie robisz codziennie, to może kilka razy w tygodniu albo w miesiącu? W najgorszym przypadku pomyśl o czymś, co robisz tylko okazjonalnie, ale ciągle jest frustrujące.

Kilka przykładów:

  • przypomnieć SMSem partnerce o wizycie u lekarza,
  • sprawdzić trasę do pracy, czy nie ma na niej korków albo wypadków, co sprawi, że się spóźnię,
  • zebrać zdjęcia od wszystkich znajomych z ostatniej imprezy,
  • sprawdzać wszystkie najważniejsze newsy o firmie, której akcje właśnie kupiłeś.

Wymyśliłeś? To automatyzuj! Jeśli masz więcej niż kilka pomysłów, to świetnie. Zacznij od najprostszego by nie wypalić się już na starcie.

Replikuj

Jeśli jest jakiś program, który uwielbiasz używać, zrób jego kopię. Autorzy tego programu już zrobili za Ciebie całą brudną robotę – udowodnili, że coś jest możliwe do zrobienia. Więc gdzie tu wyzwanie zapytasz?

Zrób to lepiej niż firma warta miliony dolarów

Przeszukaj wszelkie fora, Reddita, Quorę, Wykop i znajdź ludzi narzekających na ten program. Usuń ich bolączki w twojej wersji programu. To jednocześnie bardzo motywujące wyzwanie, dzięki któremu będziesz miał szansę zrobić coś lepiej niż autorzy twojego ulubionego programu.

Co jeśli Twój ulubiony program jest za duży?

Powiedzmy, że bardzo lubisz używać Adobe Photoshop. Jego skopiowanie może zająć nawet 100 lat. Wybierz więc tylko jedną funkcję, którą lubisz najbardziej i zreplikuj ją najlepiej jak się da.

Czy masz jakieś gotowe pomysły na projekt?

Oczywiście. Jeśli żaden z powyższych kroków nie podrzucił ci pomysłu na projekt, sprawdź poniższe gotowe tematy, które nauczą Cię konkretnych umiejętności.

Początkujący: Organizer folderów.

Na pewno masz taki folder na swoim komputerze, do którego wrzucasz wszystkie pliki mogące się przydać w przyszłości. Napisz skrypt, który posegreguje “śmieciowy folder”. To znaczy, że przeniesie lub skopiuje konkretne pliki do konkretnych podfolderów sprawiając, że ich przeglądanie stanie się łatwiejsze.

Skrypt ma segregować pliki po jednym z poniższych:

  • nazwie,
  • rozszerzeniu,
  • dacie utworzenia,
  • rozmiarze.

*Jeśli chcesz sobie trochę utrudnić, posegreguj pliki według ich zawartości, na przykład;

  • jeśli są to pliki tekstowe, segreguj po słowach kluczowych np. zawiera słowo “studia”.
  • jeśli są to pliki zdjęciowe, segreguj po twarzach znajdujących się na nich osób.
  • jeśli są to pliki wideo, segreguj po ich długości.

Z tego projektu nauczysz się:

  • Jak radzić sobie ze ścieżkami plików?
  • Jak skanować foldery?
  • Jak sprawdzić metadane pliku?
  • *Jak otworzyć (i zamknąć) plik?
  • *Jak porównywać twarze?
  • *Jak sprawdzić metadane pliku wideo?

Teraz twoje zadanie to poszukanie takiego folderu i wymyślenie najlepszego sposobu na jego zorganizowanie.

Początkujący: Inwentarz posiadanych rzeczy

Zapewne masz w domu mnóstwo rzeczy i nie do końca wiesz, gdzie wszystko leży. Napisz program, w którym możesz:

  • dodać nową rzecz do spisu, czyli: nazwa, lokalizacja, wiek, czy kolor,
  • wyświetlić listę wszystkich przedmiotów w wybranej lokalizacji,
  • wyszukać konkretną rzecz.

Najlepiej, jeśli na początku skupisz się na konkretnej kategorii posiadanych rzeczy, jak kable, baterie, narzędzia, czy ubrania.

Upewnij się, że zapisujesz na dysku informacje o inwentarzu, byś mógł bezpiecznie wyjść z programu, otworzyć go następnego dnia i wszystkie informacje ciągle w nim będą. Zacznij od zapisywania tych informacji do pliku tekstowego.

*Jeśli chcesz sobie trochę utrudnić:

  • użyj standardowego formatu przechowywania danych jak JSON albo YAML (właściwie uczyni to program łatwiejszym do napisania, ale jest to ciągle nowa rzecz do nauczenia się),
  • dodaj opcję “pożycz”, żebyś mógł pożyczyć śrubokręt sąsiadowi i o nim nie zapomnieć,
  • dodaj funkcję przypomnienia, która przypomni ci o tym śrubokręcie.

Z tego projektu nauczysz się:

  • jak zapisywać pliki na dysk,
  • jak zapisywać informacje w sposób, który umożliwia ich odczytanie po ponownym uruchomieniu programu (serializer, parser),
  • zaawansowanej interakcji z użytkownikiem,
  • *jak sprawić by program uruchamiał się sam raz na jakiś czas (cron).

Potrzebujesz więcej pomysłów? Napisz w komentarzu co lubisz robić w wolnym czasie i czego chcesz się nauczyć, a pomogę ci znaleźć pomysł.

Porady na koniec

Rób notatki o tym jak się uczysz

Najważniejszym zadaniem notatek jest danie ci możliwości cofnięcia się i przeglądnięcia twojego procesu nauki. Ulepszaj proces w trakcie nauki, żeby osiągnąć najwyższą możliwą efektywność.

Poznaj technikę Feynmana

Jestem w 100% za “naturalnym” uczeniem się. Spróbuj wszystkich możliwości nauki i zostań przy tej, która najlepiej na ciebie działa. Moim ulubionym sposobem jest immersja. Polega na “zatopieniu” się w temacie, którego się chcesz nauczyć, otaczanie się nim wszędzie, gdzie to tylko możliwe. Jest ona z założenia bardzo chaotyczna i można się łatwo wypalić, dlatego wraz z immersją stosuję technikę Feynmana. Ten artykuł został napisany z użyciem tej techniki.

Technica Feynmana jest dla ciebie, jeśli preferujesz bardziej ustrukturyzowaną formę nauki. W skrócie składa się ona z 4 kroków:

  1. Spisz wszystko co wiesz o temacie, którego chcesz się nauczyć. Jeśli zrozumiesz kolejną małą jego część, dodaj to do twoich notatek.
  2. Wytłumacz to komuś, jak gdyby miał 5 lat. Dzieci nie rozumieją złożonych zagadnień ani branżowego żargonu. Jeśli masz z tym problem, jest to pole do poprawy i lepszego zrozumienia istoty zagadnienia.
  3. Zidentyfikuj braki w swojej wiedzy. Podczas robienia side-projectu na swojej drodze wielokrotnie napotkasz takie braki. Spisz je w swoich notatkach by je zorganizować. Przeczytaj odpowiednie książki lub artykuły i naucz się z nich tego, co pozwala konkretny temat wykreślić z listy braków.
  4. Organizuj, uprość i opowiedz historię. Połącz wszystkie notatki układając je w jedną całość spojoną opowieścią korzystającą z analogii, uproszczeń i metafor. Opowiadaj tę historię na głos. Wyobraź sobie, że przemawiasz do grupy, której próbujesz przedstawić dane zagadnienie.

Jeśli zainteresowała Cię ta technika, to polecam ci przeczytać artykuł o niej od Evernote.

Dodaj choć jeden cel niezwiązany z programowaniem

Powiedzmy, że zdecydowałeś się na stworzenie aplikacji webowej w Pythonie i chcesz ją na końcu uruchomić na jakieś platformie cloudowej, takiej jak Google Cloud Platform (GCP) albo Amazon Web Services (AWS). Więc jeśli wiesz już jak pracować z AWS, tym razem spróbuj GCP.

Inny przykłady: Jeśli nie używałeś dockera, użyj go teraz. Jeśli używałeś do tej pory SQLite3, użyj teraz PostgreSQL. Jeśli zawsze ręcznie robiłeś wdrożenie, to tym razem zintegruj się z systemem typu Continuous Delivery.

Nie bój się popełniać błędów

Jeśli bardzo dużo myślisz o tym jaką bibliotekę wybrać do wykonania konkretnego zadania, czy “powinienem użyć pyparser czy zwykłego regexpa?” i nie możesz się zdecydować przez dłużej niż jeden dzień, to mam dla ciebie złą wiadomość, ale to jest prokrastynacja.

Najczęściej oglądaną prezentacją TED jest prezentacja pod tytułem “Czy szkoła zabija kreatywność?. Ken Robinson mówi o tym, że dzieci nie trzeba nauczać kreatywności, ponieważ one już są kreatywne. Według Robinsona jest tak dlatego, ponieważ dzieci nie boją się popełniać błędów. A my (dorośli) jesteśmy nauczeni by błędów za wszelką cenę unikać. To blokuje nas od eksperymentowania i próbowania nowych rzeczy, a to przecież jest istota nauki.

Pamiętaj, że gdy popełniasz błąd, to tak naprawdę się uczysz. Nie bój się uczyć!


Zdjęcie główne artykułu pochodzi z unsplash.com.

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Co jest najtrudniejsze w byciu developerem? Seniorzy odpowiadają (cz.3)