Skip to content

Dlaczego personalne projekty programistyczne są tak ważne?

Jest 9:54, jestem w trakcie rozwiązywania pewnego problemu algorytmicznego. Wczoraj pod koniec dnia, moje neurony już odmówiły posłuszeństwa, ale dziś czuję, że to jest ten dzień i nareszcie jestem bliski rozwiązania. Z trybu flow, wybudza mnie głos Maćka:

– Kandydat już jest
– Cholera… zupełnie zapomniałem, już idę.

Outlook po raz kolejny zawiódł, całe szczęście, że tych rozmów przeprowadziliśmy już wspólnie tyle, że nie musimy jakoś specjalnie się przygotowywać. Biorę więc kurtkę i ruszamy do drugiego budynku, ucinając sobie krótką pogawędkę po drodze.

– Mam nadzieję, że ten kandydat będzie lepszy niż ci, których, z którymi rozmawialiśmy wczoraj
– Oby… ostatnio coś nie mamy szczęścia.

Wchodzimy do pokoju, kandydat już na nas czeka. Witamy się, przedstawiamy i pada pierwsze pytanie rekrutacyjne:

Czy możesz powiedzieć coś więcej o sobie, jakie projekty realizujesz?
Na studiach, hobbystyczne, w poprzedniej pracy?

Spis treści

Dlaczego pytanie o projekty to pierwsze od którego zaczynamy?

Dobry opener

To pytanie jest dla nas niezwykle ważne. Zaczynamy od niego, ponieważ jest to dobry przykład pytania otwierającego. Buduje to też pewien fundament pod kolejne bardziej konkretne pytania, gdzie możemy nawiązać do projektu z samego początku. Nie jest to jednak jedyny, a na pewno nie najważniejszy powód.

Prywatne projekty jako rekomepensata braku doświadczenia komercyjnego

Pytanie to pozwala powiedzieć bardzo dużo o dotychczasowych doświadczeniach kandydatów. Jest to jeszcze bardziej istotne, jeżeli jesteś osobą, która nie pracowała jeszcze w branży. W takiej sytuacji takie projekty są właściwie jedynym elementem, na bazie którego możemy wyrobić sobie zdanie o twojej dotychczasowej przygodzie z programowaniem.

Świetna okazja do zaprezentowania swoich umiejętności miękich

Przy każdym pytaniu otwartym wychodzi też na jaw, na jakim poziomie są Twoje umiejętności komunikacyjne. Istotne są również emocje temu towarzyszące. Najlepsi kandydaci bardzo dobrze wykorzystują ten moment, aby dobrze wyeksponować swoje zalety w tych dwóch obszarach. A opowiadanie o własnych projektach jest ku temu jedną z najlepszych okazji.

Rekrutacja to nie jedyny powód ważności robienia własnych projektów, ale to od tego punktu zacznę, płynnie kontynuując wątek ze wstępu tego artykułu. W dalszej części przybliżę Ci kolejne powody.

Własny projekt to świetny element do portfolio

CV bez własnych projektów jest bardzo suche

Pierwszym powodem jak możesz się domyślić, jest właśnie twoje portfolio. Mimo że ten termin głównie kojarzony jest z bardziej artystycznymi zawodami jak grafik, tutaj również znajduje swoje zastosowanie. Samo CV nie zdradza nic o kandydacie i nie pomogą tutaj poziomy dopisane przy każdej wymienionej umiejętności.

Częsty przykład CV z szablonem określającym umiejętności

Efekt Dunninga-Krugera, przypadłość początkujących

Bardzo często w takim momencie działa Efekt Dunninga-Krugera i ludzie z małym doświadczeniem zbyt optymistycznie oceniają swoje umiejętności. Dzieje się tak głównie dlatego, że nie wiedzą, ile nie wiedzą. Starsi kandydaci podatni są z kolei na Syndrom Oszusta, ale tego typu CV widziałem zdecydowanie rzadziej.

Opowieść nawet o najmniejszym projekcie zdradza dużo więcej niż suche informacje zawarte w CV. Nie bez powodu, jest to jeden z pierwszych elementów, których szukamy w nadesłanych CV. Jakikolwiek punkt zaczepienia, czy to link do profilu na GitHubie, czy sekcja projektowa jest z reguły dobrym prognostykiem, czy daną osobę warto zaprosić na rozmowę. Tak jak wspomniałem już we wstępie, jest to też najważniejsza część dla osób bez doświadczenia komercyjnego, która zastępuje sekcje poprzednich pracodawców w regularnym CV programistów z kilkuletnim stażem.

Realizowanie projektów jest jednym z najlepszych źródeł wiedzy

Nikt nie zorganizuje Ci praktyki tak dobrze jak Ty sam

Możesz przeczytać masę książek, przerobić sporą ilość kursów i tutoriali. Nic jednak nie zbuduje u Ciebie tak solidnych umiejętności jak realizacja własnych projektów. Dzieje się tak, ponieważ, realizując własne pomysły, mierzysz się z zupełnie inną klasą wyzwań, która dużo lepiej stymuluje twoje neurony. Każdy napotkany problem, z którym się zmierzysz, powoduje, że nauka przebiega dużo bardziej efektywnie. Realizując bezbłędnie krok po kroku, to co zostało zdefiniowane w tutorialu, nie jest wystarczającym stymulantem, aby przyswoić tę wiedzę od razu.

Szerzej o różnych metodach nauki pisałem przy okazji tego wpisu https://kodujmy.pl/jak-podnosic-swoje-kompetencje-jako-programista/

Ambitniejsze projekty = lepsze efekty

W końcu co pasjonującego odnajdziesz w kolejnej TODO liście lub innym CRUDzie? Sprawa będzie wyglądać zupełnie inaczej, gdy podejmiesz próbę stworzenia np:
– własnej gry,
– programu wspomagającego trening,
– czy aplikacji pomagającej wymieniać pomysły na prezent pomiędzy bliskimi

Ten ostatni przykład został stworzony w ramach projektu grupowego, którego kiedyś miałem przyjemność być mentorem podczas kilku zajęć kończących kurs bootcampowy.
Pomimo tylko kilku godzinnych zajęć, zespołowi udało się zrealizować prosty MVP.


Praktyka przede wszystkim

Firmy w dzisiejszych czasach, dużo bardziej cenią wiedzę praktyczną. Nasi kandydaci wielokrotnie mogli przekonać się, że sam fakt studiowania nie jest wystarczającym elementem do tego, aby zaoferować im prace lub staż. To samo działa w drugą stronę, zdarzały się bardzo ambitne osoby, będące samoukami, od których pasja aż kipiała. Posiadali ciekawe projekty, którymi mogli się pochwalić, a wiedza była bardzo praktyczna, ale tez niezbyt płytka.

Praktyczna wiedza pomaga w zrozumieniu teorii

No właśnie, wiedza oparta na praktyce jest zupełnie innej jakości niż ta czysto teoretyczna. Z reguły podczas naszych dyskusji w trakcie rozmowy rekrutacyjnej, kiedy pytamy o wybrane zagadnienia, zauważamy pewien wzorzec. Kiedy jako kandydat odwołujesz się do praktyki, twoja odpowiedź jest dużo lepiej zorganizowana i mniej książkowa. W efekcie odbiór tego przez osoby rekrutujące jest dużo lepszy.

Bardzo znanym subredditem jest https://www.reddit.com/r/explainlikeimfive/. Ludzie tworzą wątki z pytaniami na różne, czasem bardzo złożone tematy. W odpowiedzi otrzymują wytłumaczenie, które powinien zrozumieć pięciolatek 🙂

Przykładem jest pytanie dlaczego skoro można odespać zmęczenie, nie można pospać sobie na zapas? 🙂 https://www.reddit.com/r/explainlikeimfive/comments/lwmmm9/eli5_why_can_your_body_have_a_sleep_debt_but_not/

To nie studia aby klepać na zaliczenie

W rozmowach rekrutacyjnych nie chodzi o to, aby bezbłędnie recytować regułki czym jest polimorfizm lub jakie znasz wzorce projektowe. Dużo ważniejsze jest podanie przykładów, kiedy dany element przydał Ci się w praktyce i jak z niego skorzystałeś. Pokażesz w ten sposób, że faktycznie rozumiesz dane zagadnienie lub przynajmniej pojąłeś je do takiego stopnia, w jakim stopniu to było niezbędne (just in time learning).

Nie zapominaj o dywersyfikacji wiedzy

Projekty mocno pomagają budować wiedzę od strony praktycznej. Oczywiście nie powinieneś zamykać się tylko i wyłącznie na stronę praktyczną, ale urozmaicać to innymi metodami. Tutaj po raz kolejny odsyłam Cię do artykułu podlinkowanego powyżej i podzielę się ciekawym komentarzem, już po publikacji tego wpisu, który również może być dobrym argumentem, aby nieco mieszać źródła.

Świetny komentarz Michała pod artykułem. W artykule zupełnie pominąłem ten aspekt, ale podpisuję się po tym stwierdzeniem w 100%

Projekty mogą być dobrą okazją do współpracy z innymi

Solo czy w drużynie?

Możesz realizować projekty samemu lub we współpracy z innymi. Ten drugi rodzaj, otwiera całkiem nowe spektrum zalet, o których wspomnę w tym rozdziale. Ten podział na sposób prowadzenia projektu można porównać… do gier komputerowych.

Singleplayer

Realizacja projektów samemu jest jak gra w trybie single player.

Tylko my, wciągająca fabuła i brak innych wkurzających graczy, zupełnie jak przy projekcie solo.

Multiplayer

Współpraca z innymi osobami i tworzenie projektu zespołowo, to odpowiednik gry zespołowej z elementem kooperacji.

Zarówno w realiach projektowych jak i w grze w grupie powinno być łatwiej, ale tylko jeżeli zadbamy o dobrą drużynę.

Czym projekt grupowy rózni się od jednosobowego?

Zalety projektu grupowego

Przede wszystkim kluczowym elementem jest kooperacja z innymi. Z tym wiąże się szereg zalet, jak:

  1. Możliwość podziału pracy i zrobienie wspólnymi siłami więcej niż samemu.
  2. Lepsze wykorzystanie potencjału osób w zespole – nagle nie musisz robić wszystkiego samemu i niekoniecznie to, co Cię najmniej kręci
  3. Praktyczna nauka GITa – tylko i wyłącznie w tym trybie będziesz miał okazję nauczyć się w pełni wykorzystywać potencjał GIT’a. W trybie solo, wykorzystanie GIT’a sprowadza się tylko i wyłącznie do archiwizacji twojej pracy. W zespole jest inaczej, nagle pojawią się konflikty, konieczność organizacji pracy na branchach i pull requesty, z którymi związany jest kolejny punkt.
  4. Review kodu – wspólne przeglądanie kodu, niesie szereg zalet, wymiana wiedzy, wzrost jakości.
  5. Wymusza zbudowanie procesu projektowego – mam tutaj na myśli organizacje pracy w jednym ze znanych frameworków typu Kanban lub jakiejkolwiek innej metodyki, na którą wspólnie się zdecydujecie.

Te kilka elementów, w rewelacyjny sposób przygotowuje do późniejszej pracy w zawodzie, ponieważ większość z wymienionych tutaj elementów przenosi się 1:1.

Wady projektu grupowego

Ok, żeby nie było aż tak kolorowo, projekty grupowe to również szereg wad lub ryzyk, na które należy uważać:

  1. Źle dobrany skład osobowy pod względem doświadczenia – przy źle dobranym składzie osobowym, projekt grupowy traci większość w powyższych zalet. Jeżeli będziesz najbardziej wyróżniającą się osobą w zespole, nagle oprócz samej pracy, dużą jej część będziesz musiał poświęcić na pomoc innym. Podobnie jest w sytuacji, w której jesteś najsłabszym ogniwem i totalnie nie ogarniasz co się wokoło dzieje. Projekt niby się rozwija, ale ze znikomym udziale z twojej strony. Obie sytuacje nie są dobre i radzę się ich wystrzegać.
  2. Kompromisy – jest takie stwierdzenie, które mówi o tym, że kompromisy są złe, bo nie zaspokajają potrzeb żadnej ze stron. Nawet jeśli nie zawsze taka sytuacja jest do końca zła, to powinieneś pamiętać, że w przeciwieństwie do projektu prowadzonego samemu, będziesz musiał się liczyć ze zdaniem innych i swoją wizję konfrontować z wizją swoich towarzyszy klawiatury. Czasem będzie to realizowane kosztem własnych świetnych pomysłów. Oczywiście czasem taka konfrontacja to ogromne zalety.
  3. Szybkie komplikowanie kodu i dług – widziałem to wielokrotnie. Im większy zespół i bardziej ambitne plany, tym łatwiej strzelić sobie w stopę. Rozwój projektu po chwili utyka w martwym punkcie i naprawdę ciężko się z tego wykaraskać. Więcej nie zawsze znaczy lepiej.

O czym warto pamiętać decydując się na projekt w grupie?

Projekty grupowe są więc świetne, bo niosą szereg korzyści, ale należy pamiętać o tym aby:

  1. Zadbajcie o nieprzypadkowy zespół. Próba połączenia w komunę z losowymi osobami, nie jest najbardziej obiecującym podejściem. Dużo lepiej postawić na osoby, z którymi mamy zbudowaną jakąś relację i znamy swoje wzajemne możliwości.
  2. Wykujcie wspólną wizję. i kierunek rozwoju Jeżeli projekt, który realizujesz jest równie motywujący dla wszystkich osób, to jest dobrze. Wspólny kierunek rozwoju z pewnością pomoże taką motywację utrzymać. W przeciwieństwie jedyną osobą zmotywowaną będzie ta, która wymusiła swoją wizję.
  3. Ustalcie wspólne zasady i trzymanie się ich. To trudny punkt, ale bez niego, bardzo łatwo wygenerować kod, do którego nie chce się wracać, a praca nad nim to udręka. Jeżeli zbudujecie swój zestaw reguł, zasady przeglądu kodu, podejście kiedy i co testujecie, oraz z pozoru prozaiczne rzeczy, ale bardzo istotne jak przyjęte konwencje, powinno być zdecydowanie łatwiej okiełznać chaos projektowy.

Własne projekty to świetna zabawa i możliwość kreatywnego wyżycia się

Z czasów studenckich najbardziej wspominam własne projekty. Jednakowo te, które robiłem w swoim prywatnym czasie, jak i te, których celem było zaliczenie jakiegoś przedmiotu. W obu przypadkach łączyło je to, że istniała przestrzeń, w której można było realizować swoje pomysły, a nie narzucone z góry wymagania przez wykładowców, którzy nie zmieniali swojego planu zajęć przez ostatnie dziesięć lat. Praca przy tego typu projektach to zupełnie inne doświadczenie. Poziom motywacji tworzenia czegoś samemu jest nieporównywalny z niczym innym.

Własny projekt motywuje o wiele bardziej od narzuconego toku nauki

Zauważałem to również po osobach, które realizują projekty pod moim okiem, gdzie pełnię rolę mentorską na praktykach lub w szkole programowania. Jeżeli tylko przełamią oni wczesny etap prokrastynacji i prace ruszą, to ciężko je zatrzymać. Ludzie poświęcają na nie swój prywatny czas i bardzo się angażują, osiągając świetne efekty. Wszystko dlatego, że realizują coś, co sami wymyślili, a nie zostało im narzucone.

Każdy pet project to szeroki wachlarz możliwości

Własne projekty cechuje też to, że ich ramy wyznaczamy sami. To od nas zależy:
– co w takim projekcie się znajdzie od strony funkcjonalnej,
– z jakich komponentów technologicznych go złożymy,
– czy wykorzystamy w nim jakieś zewnętrzne elementy gotowe, które skrócą czas pracy
– oraz ostatecznie jak to wszystko będzie prezentowało się od strony wizualnej lub użytkowej

Własne projekty to również ogromna satysfakcja i czasem sława

Nic, tak nie napawa dumą, jak własna twórczość, którą można podzielić się ze światem. Nie jest ważna skala projektu. Nawet jeśli zaczynasz i tworzysz klona gry kółko i krzyżyk, to nadal jest to twój projekt, która da Ci ogromną satysfakcję. Moim pierwszym projektem, który pamiętam, był prosty symulator zwierząt, które poruszały się w formie liter na konsoli i zjadały losowo pojawiające się jedzenie. Pomimo że nie brzmi to jak ciekawy projekt, to dla kogoś, kto dopiero startował, sprawiał ogromną frajdę. Jakiś czas później, kiedy umiejętności nieco urosły zająłem się delikatnie bardziej ambitnymi projektami. Do dziś pamiętam moment, kiedy po stworzeniu swojego większego projektu, gry MMORPG w przeglądarce, podzieliłem się nią z grupą moich znajomych i mogliśmy wspólnie rozegrać kilka pierwszych partii.

Pierwsze projekty często posiadają braki albo brzydkie zapachy

Niestety projekt nie okazał się sukcesem i niczym większym poza prywatnym hobby. Stało się tak głównie dlatego, że zbyt duża część uwagi była skupiona na funkcjonalnościach, kosztem jakości kodu i pobocznej organizacji. Nie mając mentora i zerowe doświadczenie komercyjne, kod nawet dla mnie, jedynego kontrybutora, okazał się piekłem po kilku miesiącach. Nie było tam żadnych testów, istniało za to całkiem sporo dziur bezpieczeństwa. Przyjemność kodowania, która dotychczas napędzała rozwój całości, nagle niemal kompletnie wyparowała i została zastąpiona przez mękę i torturę.

Wyważenie funkcjonalności i jakości w projekcie

Nie przeszkodziło to jednak w tym, aby projekt pozwolił mi na wzięcie udziału w mojej pierwszej rozmowie o pracę. Było to bardzo cenne doświadczenie. Nie powinno Cię zdziwić, że ostatecznie pracy tej nie dostałem, głównie za sprawą spaghetti kodu. Może to i dobrze, nauczyło mnie to, że oprócz warstwy zewnętrznej i funkcjonalnej istotną rolę odgrywa również łatwość utrzymania tego w przyszłości. Ma to ogromne znaczenie, jeżeli projekt ma być elementem twojego portfolio. Dziś podszedłbym do tego zupełnie inaczej. Obciął zakres funkcjonalny projektu, zyskując czas i moce przerobowe, na lepsze zorganizowanie kodu. Ja sam po latach cieszę się z tej decyzji, dzięki temu moja pierwsza praca była później związana z JVM. Gdyby nie to, dziś pewnie kodowałbym w PHP 😉

To, że nie od razu twoje projekty będą idealne, jest w porządku.Najważniejszy jest sam proces, czyli łapanie doświadczenia przez robienie, popełnianie błędów, szukanie rozwiązań.

Projekty mogą jednak odnosić sukces i to całkiem spory

Z każdym kolejnym powinno być tylko lepiej. Któryś z czasem może okazać się natomiast czymś dużo poważniejszym niż tylko chwilową zajawką. Domyślam się, że wiedzę na ten temat ma Tomek Dziurko, twórca platformy jvm-bloggers za pośrednictwem, której część z Was czyta ten wpis 🙂 To projekt, który skupia w sobie wszystkie pozytywy, o których wspomniałem w tym wpisie.

Dla osób, które nie słyszały o platformie, słowem wyjaśnienia. Głównym celem projektu JVM Bloggers jest promowanie polskich programistów i firm, które dzielą się swoją pasją i wiedzą w tematach wokół Javy oraz ekosystemu wokół JVM. Więcej możesz przeczytać tutaj.

Projekty jako podwaliny pod przyszły biznes

Sporo słyszy się też o projektach, które odniosły duży sukces od strony komercyjnej. Aby jednak tego doświadczyć, niezbędny jest całkiem spory zestaw dodatkowych umiejętności, które niekoniecznie związane są wyłącznie z procesem twórczym. Pierwszym krokiem pozyskania takiej wiedzy jest Lean Startup – Erica Riesa https://lubimyczytac.pl/ksiazka/158180/metoda-lean-startup-wykorzystaj-innowacyjne-narzedzia-i-stworz-firme-ktora-zdobedzie-rynek. Ta cienka lektura świetnie pokazuje np. że jednym z ważniejszych elementów każdego pomysłu jest jego wcześniejsza walidacja. Którą najlepiej wykonać przed ciężkim i kosztownym procesem wytwórczym. Jeżeli od początku celujesz, w coś więcej niż tylko hobbystyczny projekt, ta droga wydaje się rozsądniejsza.

Jeżeli chcesz poznać równie dobre pozycje jak Lean Startup, to zachęcam Cię do sprawdzenia mojego wpisu https://kodujmy.pl/10-ksiazek-dla-programistow-w-ktorych-nie-ma-nic-o-programowaniu/

Inicjatywa stworzenia społeczności wokół prywatnych projektów

Wpis ten dedykuję osobom, które tak jak ja dekadę temu, rozmyślają nad stworzeniem własnego projektu lub już takie projekty realizują. Okazuje się, że moje problemy sprzed 10 lat jak:

  • Brak mentora,
  • zły dobór technologii,
  • brak dbałości o jakość,
  • … inne


Dziś są nadal aktualne. Wiem to, ponieważ jakiś czas temu przeprowadziłem prywatne dyskusje mailowe z czytelnikami mojego bloga, aby poznać ich bolączki podczas realizacji projektów.

W tym miejscu chciałbym podziękować wszystkim tym, którzy wzięli udział w badaniu i udzielali czasem bardzo wyczerpujących odpowiedzi. Wszelkie informacje, którymi podzieliliście się ze mną, są bardzo przydatne w kierunku rozwoju https://kodujmy.pl

Wielkie dzięki!

Ważne ogłoszenie!

Chwilę zastanawiałem się, jak mógłbym pomóc innym i stwierdziłem, że najlepszym pomysłem jest rozkręcenie społeczności skupionej na tym temacie. Tak o to została powołana grupa, do której zapraszam wszystkich, których interesuje tematyka tworzenia prywatnych projektów!

https://www.facebook.com/groups/perpropro

Aby dołączyć do społeczności, wystarczy posiadać konto na Facebooku i wyrazić chęć dołączenia do grupy
https://www.facebook.com/groups/perpropro ?


Grupa jeszcze pachnie świeżością i świeci pustkami, ale już niedługo mam nadzieję, że wspólnymi siłami zasilimy ją ciekawymi dyskusjami i wiedzą, która przyda się każdemu, kto myśli o tworzeniu własnych projektów, nie ważne, czy jest fanem half-life, czy bardziej Counter-Strike 🙂

Do kogo kieruję tę inicjatywę. Jeżeli jesteś osobą która:

  • jest w trakcie nauki programowania, stawia pierwsze kroki i szuka efektywnego sposobu nauki,
  • ma już doświadczenie, które chciałaby przekuć w zbudowanie własnego projektu,
  • chciałaby zbudować ciekawe portfolio na potrzeby rekrutacji,
  • szuka innych osób do projektu grupowego,
  • ma już większe doświadczenie i może pełnić role mentora

Zapraszam! Ta grupa jest dla Ciebie.

UWAGA Prośba!
Jeżeli już dołączysz, podziel się z resztą kilkoma zdaniami o Tobie i twoich projektach ?

Pozwoli nam to ruszyć z dyskusją i poradami.

To nie jest kolejna grupa

Grup o nauce programowania jest całkiem sporo i sam do kilku z nich należę. To, co jednak zaobserwowałem to brak w nich jawnego nakierowania na budowę praktycznych projektów, a taki cel ma przyświecać, właśnie temu projektowi, który liczę, że uda nam się wspólnie zbudować. Liczę, że moja inicjatywa wypełni tę lukę na rynku. Powodzenia w realizacji projektów i do usłyszenia!