Jak przestać bez końca uczyć się teorii i w końcu zbudować imponujące portfolio
Brzmi znajomo? Nauczyłeś się składni nowego języka, zrozumiałeś dekoratory lub wskaźniki, ale gdy przychodzi co do czego, Twoje umysł staje pusty? "Co powinienem zbudować?" — to pytanie zabija motywację szybciej niż zepsuty midnight build. Możesz zrobić listę Todo po raz setny, albo możesz sprawdzić repozytorium, które stało się prawdziwą biblią dla tych, którzy chcą zdobyć praktyczne doświadczenie z prawdziwymi zadaniami.
Dzisiaj przyjrzymy się karan/Projects — ogromnej liście pomysłów na projekty, która zgromadziła ponad 47 000 gwiazdek na GitHubie. To nie jest tylko "zbiór ćwiczeń" — to ustrukturyzowany przewodnik przez świat programowania, od prostych obliczeń po protokoły sieciowe i grafikę.
Dlaczego ta lista stała się legendarna
Głównym problemem większości kursów edukacyjnych jest to, że dają Ci narzędzia, ale nie kontekst. Wiesz, jak działa pętla for, ale nie rozumiesz, dlaczego jest potrzebna w kontekście systemu rezerwacji biletów lotniczych.
Projekt Karana Goela rozwiązuje ten problem. Autor zebrał dziesiątki praktycznych zadań, które można zaimplementować w dowolnym języku programowania. Nie ma znaczenia, czy uczysz się Rusta, Pythona, czy próbujesz zrozumieć asembler — te zadania są uniwersalne.
Przy okazji, projekt ma osobne repozytorium z rozwiązaniami, gdzie możesz podejrzeć, jak inni deweloperzy zaimplementowali te same zadania w C++, Javie, Go czy Haskellu. To świetny sposób na porównanie podejść i idiomów w różnych językach.
Co jest w środku: od matematyki do bezpieczeństwa
Cała lista jest podzielona na logiczne kategorie. Przejdźmy przez najciekawsze z nich i zrozumiemy, czego mogą Cię nauczyć.
1. Liczby i klasyczne algorytmy
Tutaj zaczynają się pierwsze kroki. Ale zamiast nudnego "wydrukuj wartość Pi", proszą Cię o stworzenie kalkulatora kredytowego lub konwertera walut.
- Dlaczego to jest przydatne: Nauczysz się pracować z typami danych, precyzją obliczeń (cześć,
0.1 + 0.2w JS) i podstawową logiką. - Przykład: Napisz program obliczający koszt płytek podłogowych dla danego obszaru, uwzględniając cenę za jednostkę. Brzmi prosto? Dodaj uwzględnienie przyciętych płytek i różnych kształtów pomieszczeń — a teraz masz użyteczny mikroserwis.
2. Praca z tekstem (Text)
Tekst jest fundamentem sieci. W tej sekcji zadania wahają się od klasycznego Fizz Buzz po tworzenie własnego edytora tekstu jak Notatnik.
- Ciekawe zadanie: Szyfry Cezara i Vigenère'a. To fundamenty kryptografii. Implementując je, zrozumiesz, jak działają najprostsze algorytmy ochrony danych i dlaczego są tak łatwe do złamania.
3. Sieci i web (Networking & Web)
To prawdopodobnie najbardziej "mięsista" część dla tych, którzy celują w Backend lub DevOps.
- Co możesz zbudować: Skaner portów, narzędzie Whois lub program do sprawdzania dostępności strony według harmonogramu.
- Wartość praktyczna: Zrozumiesz gniazda, żądania HTTP i jak dane faktycznie przemieszczają się między komputerami. Na przykład napisanie własnego Page Scrapera nauczy Cię parsować HTML i pracować z wyrażeniami regularnymi.
4. Klasy i projektowanie obiektowe (Classes)
Jeśli masz problemy z dziedziczeniem i polimorfizmem, ta sekcja jest dla Ciebie. Zamiast abstrakcyjnych "Zwierząt" i "Psów", proszą Cię o zaprojektowanie:
- Systemu zarządzania inwentarzem produktów.
- Hierarchii pracowników firmy (menedżerowie, pracownicy godzinowi, kadra kierownicza).
- Systemu rezerwacji hotelowych.
- Na czym polega haczyk: Tutaj zrozumiesz w praktyce, dlaczego kompozycja jest często lepsza niż dziedziczenie i jak właściwie projektować architekturę aplikacji, żeby nie rozpadała się, gdy dodasz nową funkcję.
Wartość techniczna dla deweloperów
Projekt nie narzuca stacka. To są zadania "white label". W mojej praktyce często używałem tej listy, gdy musiałem szybko nauczyć się nowego frameworka. Chcesz nauczyć się FastAPI? Zbuduj API dla "Budget Trackera" z sekcji Databases. Chcesz zrozumieć wielowątkowość w Go? Zaimplementuj "Bulk Thumbnail Creator" z sekcji Threading.
Przykład: Jak to podnosi Twoje umiejętności
Weźmy zadanie "Walidator kart kredytowych".
- Musisz zbadać algorytm Luhna (suma kontrolna).
- Zaimplementuj obsługę danych wejściowych (walidacja ciągu znaków).
- Napisz testy dla różnych typów kart (Visa, Mastercard). Pod koniec małe zadanie zamienia się w pełny mini-projekt z logiką, testami i dokumentacją.
Jak mądrze korzystać z tego repozytorium
Nie próbuj rozwiązać wszystkiego na raz. Oto moja rada, jak wyciągnąć z tego jak najwięcej:
- Zrób forka repozytorium. To będzie Twoja osobista lista kontrolna.
- Wybierz kategorię, która jest Ci najbliższa (na przykład, jeśli chcesz iść w web, zacznij od sekcji Networking).
- Dodawaj złożoność. Jeśli zadanie wydaje się zbyt proste, dodaj GUI, bazę danych do przechowywania wyników lub spakuj wszystko w kontenerze Docker.
- Patrz na rozwiązania innych. Po tym, jak napiszesz swój kod, przejdź do Projects-Solutions i zobacz, jak inni to zrobili. To otwiera oczy na wiele niuansów.
Podsumowanie: czy warto poświęcić czas?
Absolutnie tak. W świecie, gdzie każdy kopiuje projekty z tutoriali YouTube, samodzielne rozwiązywanie zadań z tej listy wyróżni Cię spośród innych juniorów i midów. To świetny sposób na zbudowanie portfolio, którego nie wstyd pokazać pracodawcy, bo za każdym projektem stoi Twoja logika i Twoje decyzje architektoniczne.
Jeśli utknąłeś w "pętli uczenia się" i nie wiesz, dokąd iść dalej — po prostu wybierz dowolne zadanie z sekcji "Klasyczne algorytmy" lub "Bazy danych" i zacznij kodować. Do zobaczenia na GitHubie!
Powiązane projekty