Własny projekt programistyczny i jego realizacja to w pierwszej kolejności sposób na szlifowanie swoich umiejętności, ale też w przyszłości taki zrealizowany projekt może zaowocować w lepszej pracy lub przerodzić się w Twój biznes! W tym tekście podpowiem Ci, jakie są elementy dobrego side project i jak wymyślić własny projekt programistyczny oraz gdzie szukać pomysłów i skąd czerpać inspirację.

Wpis ten powstał w ramach cyklu postów “Projekt z PSS”. Przeczytaj też:
Jak zacząć nowy projekt na githubie?
Czy Twój idealny projekt programistyczny musi mieć sens?

O tym, dlaczego warto mieć własny projekt programistyczny…

Nie ma jednej złotej zasady, poza jedną: wtedy, kiedy uważasz za stosowne i czujesz się komfortowo, udostępniając swój kod publicznie. Moim zdaniem warto rozważyć pracę nad własnym projektem i publicznym udostępnieniem kodu źródłowego, jeśli:

  • dopiero zaczynasz swoją przygodę i nie masz jeszcze doświadczenia zawodowego;
  • po godzinach pracujesz nad ciekawym projektem i warto wreszcie pokazać go światu!
  • rzeczy, które Cię interesują (i nad którymi spędzasz wieczory) są powiązane z działaniami Twojego przyszłego pracodawcy (który może docenić Twoją ekspertyzę z danego zagadnienia).

W każdym z tych przypadków pracując nad jakimś swoim projektem na githubie i udostępniając go publicznie, dajesz sobie możliwość zaprezentowania swoich umiejętności i pokazania się z  dobrej strony Twoim przyszłym pracodawcom i współpracownikom, zanim jeszcze będą mieli okazję Cię poznać!

To szczególnie ważne, jeśli jeszcze nie masz zbyt dużego doświadczenia w branży i Twoje CV nie jest zapełnione. Masz też szansę pokazać swoje zainteresowania, a także podkreślisz tym samym, że jesteś zmotywowana, lubisz uczyć się nowych rzeczy, dbasz o swój rozwój i umiesz pracować nad kompleksowymi projektami i problemami, których rozwiązanie zajmuje niekiedy kilka długich wieczorów!

Ponadto, to też świetna okazja do przedstawienia swojej wiedzy i umiejętności z zakresu powiązanego z działalnością Twojego wymarzonego pracodawcy. Załóżmy, jeśli interesuje Cię uczenie maszynowe (ang. machine learning, ML) i szukasz pracy z tym związanej, wysłanie linka do Twojego publicznego repozytorium z kilkoma projektami ML będzie Twoim wyróżnikiem z tłumu innych kandydatów i kandydatek na dane stanowisko.

Jak własny projekt na github pomoże Ci w procesie rekrutacyjnym?

Nie tak dawno temu usłyszałam historię o najbardziej zapadającym w pamięć CV! Pewna kandydatka (prawie 10 lat temu!) wysłała link do swojego repozytorium na github. Repozytorium jednak wyglądało na kompletnie puste – z wyłączeniem krótkiego ciągu cyfr i liter. W historii commitów w tym repozytorium działy się jednak różne rzeczy i po krótkiej chwili osoby zaangażowane w proces rekrutacyjny chwyciły, że to repozytorium było tak naprawdę grą.

Autorka nadpisała trochę historię, a każdy nowy commit zawierał coraz to więcej informacji o niej samej. Musiała zrobić wrażenie, skoro słyszałam o niej całkiem niedawno od osoby, która była wtedy zaangażowana w jej proces rekrutacyjny…

Ty nie musisz tworzyć skomplikowanej i tajemniczej gry, w końcu Twój własny projekt programistyczny nie musi nawet działać! Wiele firm pyta swoich kandydatów o podrzucenie linka jeszcze przed pierwszą rozmową w nadziei, że znajdą tam coś ciekawego. Co prawda github nie jest Twoim CV, a raczej jedynie jego uzupełnieniem, to warto skorzystać z tej dodatkowej możliwości autoprezentacji. Pamiętaj też, że ilość nie znaczy jakość i wcale nie chodzi o to, żeby prowadzić nieskończenie wiele własnych repozytoriów i dodatkowo dorzucać zmiany we wszelkiej maści projektach open source. Twój przyszły pracodawca również nie powinien tego od Ciebie oczekiwać. Postaw więc na to, co dla Ciebie ważne i na jakość swoich projektów!

Dobrymi pomysłami na start mogą być:

  • typowe zadania programistyczne i ich rozwiązania (możesz skorzystać z listy materiałów pomocniczych, którą dla Ciebie przygotowałam – znajdziesz tam liczne strony i materiały źródłowe z zadaniami dla programistów i przygotowującymi do rekrutacji w IT);
  • gry – napisanie własnej gry to tak naprawdę projekt interdyscyplinarny, wymusza na Tobie pracę nad interfejsem użytkownika, czy logiki; próba opracowania własnej grafiki na jednym z dostępnych silników gier zaimponuje niejednemu pracodawcy!
  • własne skrypty i pluginy przydatne w pracy – to świetny sposób, żeby pokazać, jak bardzo zaznajomiona jesteś ze swoim środowiskiem pracy i jak dobrze znasz narzędzia, z których korzystasz!
  • projekt, który w jakiś sposób nawiązuje do działań przyszłego pracodawcy – nie tylko przykujesz w ten sposób uwagę pracowników, ale też pokażesz swoje zainteresowanie pracą w tym zespole! Możesz np. opracować serwis, który wykorzystuje API udostępnione przez danego pracodawcę.

Jest wiele rzeczy, które w takich projektach się liczą i na które warto zwrócić uwagę. Moim zdaniem najistotniejsze elementy to czytelność kodu i jasny opis projektu, klarowna dokumentacja. Są to szczególnie ważne elementy pod kątem pracy w zespole i z innymi programistami.
Następne w kolejności to różnorodność (pracując nad projektami, korzystając z różnych narzędzi czy języków, pokazujesz tym samym, że szybko uczysz się nowych rzeczy i jesteś wszechstronna) oraz kompletność danego projektu (nie trudno zacząć nowy projekt, a następnie zostawić rozgrzebane repozytorium, ale czy jesteś w stanie doprowadzić go do końca?).

Podsumowując, Twoje repozytorium na githubie stanowi świetne uzupełnienie Twojego programistycznego CV. Pozwala przykuć uwagę potencjalnych przyszłych pracodawców i przedstawia Cię w roli ekspertki z danego zagadnienia. Wykorzystując github jako swoje programistyczne portfolio, dajesz sobie szansę znalezienia jeszcze lepszej pracy! Przy okazji to też dobry punkt wyjścia do rozpoczęcia rozmowy z Twoimi przyszłymi współpracownikami!

To, nad jakim projektem teraz pracujesz?Programowanie, to ogromnie szeroka dziedzina, która wciąż się rozwija i rozbudowuje. W dodatku programowania najlepiej uczyć się w działaniu – jeszcze nie spotkałam się z poradnikiem, który opisałby wszystko krok po kroku bez konieczności przetestowania w praktyce i rozwiązania setki problemów napotkanych po drodze. Dlatego też własny projekt programistyczny, to idealne rozwiązanie dla programistów i programistek, żeby przyswoić nową wiedzę i oswoić się z nowszymi technologiami.

 
Ale projekt programistyczny to nie tylko nauka! To również sposób rozwiązania problemów, z którymi spotykasz się na co dzień; metoda prezentacji Twoich umiejętności; czy po prostu hobby – kiedy po powrocie ze szkoły czy z pracy masz wreszcie możliwość podłubania w kodzie nad projektem, który ogromnie Cię interesuje i sprawia radość!
 
W przyszłości taki projekt może również zaprocentować w postaci dodatkowego dochodu! Może na przykład okazać się, że pracując nad własnym projektem programistycznym, opanujesz umiejętności mocno pożądane na rynku pracy, a Twoje publiczne repozytorium na GitHubie będzie wtedy świetnym potwierdzeniem Twojego doświadczenia dla przyszłych pracodawców. Być może jednak Twój projekt będzie ewoluował i rozwijał się wraz z Tobą i za rok lub dwa założysz własny startup i to Ty będziesz zatrudniać nowych programistów?
 
Tego Ci właśnie życzę! Zanim to się jednak stanie, to Ty musisz zacząć pracę nad własnym projektem programistycznym, a jeśli wciąż potrzebujesz pomocy z wymyśleniem takiego projektu… pozwól, że Ci pomogę!

Elementy dobrego programistycznego “side project”

Zanim zaczniemy tę właściwą burzę mózgów, chciałabym zastanowić się, czym taki projekt powinien się w ogóle charakteryzować. A więc po kolei!
 
Twój własny projekt programistyczny powinien być ciekawy i sprawiać Ci radość!
Niezależnie od tego, czy uczysz się, czy pracujesz – na pewno ostatnią rzeczą, którą chciałabyś robić po powrocie do domu, jest zmywanie stosu brudnych naczyń i robienie prania… Nie pozwól więc, żeby Twój projekt programistyczny stał się jednym z “obowiązków domowych”, czymś, co wiesz, że musisz zrobić, ale nie sprawia Ci to przyjemności. Będziesz wtedy szukała ciągłych wymówek, a praca nad projektem każdorazowo będzie wydawać Ci się męcząca… Twój własny projekt programistyczny powinien Cię interesować, a praca nad nim wydawać Ci się przede wszystkim ekscytująca!
 
Twój projekt powinien pomóc Ci się rozwijać!
Projekty programistyczne mają to do siebie, że cieszą. Prześliczne strony internetowe cieszą oko, zabawne gry cieszą znajomych, a niewielki program na Windows, który przywraca domyślne ustawienia, kiedy oczywiście “nikt nic nie ruszał” – na pewno ucieszy Twoich rodziców! winking face Idealnie będzie, jeśli Twój projekt programistyczny przyniesie wartość nie tylko użytkownikom, ale też Tobie – a największą wartością, jaką Twój własny projekt programistyczny może Ci dać, jest nauka i rozwój! Staraj się więc pogodzić swoje pomysły z nowymi technologiami, których od dawna chciałaś się nauczyć!
 
Prosty, ale z możliwością rozbudowania!
“Side project” zawsze będzie miał tę jedną słabą cechę – mianowicie, jest “side”, czyli robiony po godzinach. Pakowanie się więc w wieloetapowy i skomplikowany projekt, który w niewielkiej firmie programistycznej wyceniony byłby na setki tysięcy i rok pracy programistów, nie jest najlepszym pomysłem. Idealnie, jeśli Twój projekt jest niewielki – dzięki temu łatwiej jest pozostać zmotywowaną do dalszej pracy, bo dużo szybciej widzisz postępy, a rozmiar projektu nie przytłacza od samego początku. Pracuj nad nim jednak tak, jakbyś w planach miała utrzymanie go przez lata – niech Twój kod będzie czysty i dobrze udokumentowany, a całość ma swoje miejsce w repozytorium na githubie. Rozważaj różne rozwiązania i wybieraj takie, które sprawdzą się przy niewielkim projekcie, a także w przyszłości – kiedy Twój pomysł rozrośnie się do rozmiarów słonia i setek użytkowników!
 

Jak wymyślić własny projekt programistyczny?

Wymyślenie własnego projektu programistycznego to – moim zdaniem – najtrudniejszy krok w tym całym przedsięwzięciu. W końcu, dopóki nie będziesz wiedziała, co chcesz zrobić i jaki jest ostateczny cel – nie będziesz mogła ruszyć z projektem! To krok nie do przeskoczenia – wszelkie inne problemy na Twojej drodze możesz rozwiązać za pomocą stackoverflow, metody copy&paste, zmiany kodu czy języka programowania, wykorzystania innego narzędzia i tak dalej… Super projektu, niestety, nikt za Ciebie nie wymyśli. Jak więc zatem wymyślić ten własny projekt programistyczny i przy tym nie zwariować?
 
Zacznij od tego, co sprawia Ci trudność na co dzień. Być może codziennie rano wykonujesz szereg tych samych czynności, które zwyczajnie w świecie mogłabyś usprawnić? Być może nie dzieje się to codziennie, ale wystarczająco często, żeby frustrować i męczyć? Czemu by więc nie zatrudnić komputera do takich rzeczy? Dla przykładu, moi znajomi często wyjeżdżali na wspólne wakacje w grupie, a po powrocie zawsze męczyli się z obliczeniem, kto komu i ile pieniędzy musi oddać… I tak właśnie powstał ich serwis komuile.pl, który wspólnymi siłami zbudowali po godzinach spędzonych w szkole. W międzyczasie ja miałam problemy z przyswajaniem słownictwa i tym samym ciężko było mi dostać dobre oceny na niemalże codziennych sprawdzianach z języka niemieckiego. Któregoś dnia postanowiłam, że napiszę generator testów, z którymi zaczęłam się przygotowywać i dzięki temu moje oceny skoczyły w górę! Zastanów się, co Tobie sprawia trudność na co dzień – być może warto napisać program, który pomoże Ci rozwiązać ten problem?
 
Jeśli nie możesz znaleźć niczego frustrującego w codziennym życiu – to cieszę się Twoim szczęściem! A pomysłów na projekt poszukaj więc wśród znajomych i rodziny! Być może Twoi znajomi dużo podróżują i potrzebują specjalnego rozwiązania do planowania podróży? Albo ktoś z Twojej rodziny oddałby konia z rzędem za specjalistyczną wyszukiwarkę, która w wynikach zwracałaby tylko pliki pdf z instrukcjami obsługi konkretnych urządzeń elektronicznych?
 
Warto też zastanowić się nad obecną sytuacją na świecie. W tym momencie – czyli w czasach pandemii i izolacji – warto zastanowić się, co Ty możesz zrobić (ot, chociażby nad jakim projektem programistycznym możesz pracować), żeby przynieść wartość i odpowiedzieć na potrzeby innych. Moi znajomi miesiąc temu wypuścili własny serwis informacyjny, który filtruje wiadomości związane z koronawirusem, a także na podstawie publicznie dostępnych danych rysuje diagramy i projekcje związane z liczbą zachorowań. Nie musisz jednak skupiać się tylko na samym koronawirusie! Obecnie popularnością cieszą się wszelkiego rodzaju projekty usprawniające pracę z domu, czy też wspierające interakcje ze znajomymi online – może więc wymyślisz i zaimplementujesz własną grę online, albo popracujesz z API popularnego serwisu i zaimplementujesz własny plugin? Dla przykładu DM mojej grupy D&D ostatnio napisał własny generator map bitewnych, żeby wszystkim nam jeszcze lepiej grało się online!
 
Pamiętaj, że Twój projekt wcale nie musi mieć sensu, ani też nie musi być oryginalny! Jeśli więc zechcesz skopiować mój pomysł na świecący napis “BUSY” na drzwiach, który synchronizuje się z kalendarzem i Google Home oznaczając Twoje domowe biuro jako niedostępne dla domowników, gdy pracujesz – nie obrażę się! (A tak naprawdę to nawet chętnie przygarnę Twój kod, bo nie wiem, kiedy sama do tego wreszcie usiądę!).
 

Gdzie jeszcze szukać pomysłów?

Jeszcze w trakcie studiów obejrzałam świetną prezentację TED Talk prowadzoną przez Guya Hoffmanna, który buduje “roboty z duszą”. Ten TED Talk (a był to rok 2013) zainspirował mnie do realizacji własnego projektu programistycznego. W tym roku przechodzę już trzecią iterację – tym razem poprawiając kod i wykorzystując drukarkę 3d! 
 
Otóż okazuje się, że TED Talks są świetnym źródłem pomysłów i inspiracji, jeśli chodzi o pomysły na własne projekty programistyczne i szczerze polecam Ci szukać właśnie tam! Ot, zacznij od posłuchania prezentacji z działu programming – i nie przejmuj się, jeśli nie czujesz się komfortowo ze słuchaniem anglojęzycznych prezentacji! Większość TED Talks jest tłumaczona na wiele języków – w tym także polski!
 
Kolejnym miejscem, gdzie możesz szukać pomysłów, jest platforma Medium, a także inne blogi skierowane do programistów. To platforma blogowa, na której publikują osoby związane z różnymi branżami i projektami – w tym także programiści. Korzystając z tagów i wyszukiwarki, z łatwością znajdziesz wpisy innych programistów o projektach, które właśnie realizują i czego się nauczyli. A czytając taki artykuł, jesteś już o krok od wymyślenia własnego projektu programistycznego!
 
Wyzwania (czyli internetowe challanges) programistyczne są kolejnym źródłem pomysłów i inspiracji. W internecie istnieje wiele inicjatyw motywujących innych programistów do wspólnej pracy nad danym zagadnieniem, czy rywalizacji. Niekiedy są to niewielkie zadania publikowane codziennie przez określony czas, a czasem – tak jak konkurs Daj się poznać” organizowany niegdyś przez Maćka Aniserowicza, autora bloga devstyle.pl – trwające dłużej i raczej nienarzucające większych ograniczeń dla twórców.
 
Jeśli wciąż brakuje Ci pomysłu na własny projekt programistyczny, przeszukaj GitHub! Korzystając z zakładki Explore”, znajdziesz listę popularnych projektów, nad którymi ostatnio ktoś pracował. Możesz też szukać według tematu czy innych kryteriów. Być może zdecydujesz się skopiować czyjś pomysł i zrealizować go w inny sposób? A może jakiś większy projekt przykuje Twoją uwagę i zapragniesz wkroczyć w świat open source?
 
Niezależnie od tego, jaki jest Twój ostateczny pomysł – ja będę trzymać za Ciebie kciuki! I nie zapomnij podzielić się w komentarzu tym, jak Ty szukałaś swojego pomysłu!