Najlepsze wyzwania programistyczne dla początkujących: od łatwych do trudnych ćwiczeń kodowania
Oto rzecz, przed którą nikt cię nie ostrzega. Możesz miesiącami oglądać tutoriale, kiwając głową przy każdym filmiku, a potem otworzyć pusty plik i nie mieć pojęcia, co wpisać. Sam to przeżyłem. Większość osób, które uczą się kodować, też tak miała.
Rozwiązanie jest nudne i działa: rozwiązuj małe problemy samodzielnie, początkowo nieudolnie. Dlatego ten poradnik składa się z dwóch części. Pierwsza to starannie dobrany zestaw najlepszych wyzwań programistycznych dla początkujących (dziesięć, mniej więcej od łatwych do trudnych). Druga obejmuje strony, na których znajdziesz tysiące kolejnych, po tym jak przebrniesz przez moje.
Każdy język programowania się nada. W moich przykładach używam Pythona i odrobiny JavaScriptu, bo od tego większość ludzi zaczyna. Jeśli potrafisz, postępuj po kolei. Każdy problem skrywa w sobie nowy pomysł.
Dlaczego wyzwania związane z kodowaniem rozwijają prawdziwe umiejętności kodowania
Co uznaje się za wyzwanie? Coś drobnego z oczywistą, poprawną odpowiedzią. „Weź słowo i wypowiedz je od końca”. „Oto lista liczb, która jest największa?”. Nie instalujesz niczego ani nie wybierasz frameworka. Piszesz może dziesięć linijek tekstu.
Oglądanie samouczka oznacza podążanie za cudzym tokiem myślenia. Wyzwania programistyczne odwracają tę sytuację i jest to niewygodne, ale w pożyteczny sposób. Zgadujesz, coś się psuje, mrużysz oczy na błąd, próbujesz ponownie. Robisz tak przez kilka tygodni, a niektóre rzeczy po cichu stają się łatwiejsze:
- Płynna składnia. Koniec z googlowaniem, jak napisać pętlę for po raz piąty.
- Umiejętność rozwiązywania problemów. Zaczynasz dzielić niejasne zadanie na kroki, zanim jeszcze dotkniesz klawiatury.
- Logiczne myślenie. Pusta lista, ujemna liczba całkowita, jednoliterowe słowo. Zaczynasz się tego spodziewać.
- Debugowanie. Czerwony tekst błędu przestaje być odbierany jako obelga.
- Pewność siebie. Każdy rozwiązany problem to dowód na to, że potrafisz samodzielnie napisać program.
Ktoś mi kiedyś powiedział, że kodowanie ma swoją własną zasadę 80/20 i w przypadku problemów dla początkujących sprawdza się ona całkiem dobrze. Większość z nich opiera się na tych samych pięciu ruchach: pętlach, if/else, grzebaniu w ciągach znaków, liczeniu w słowniku i przechodzeniu przez tablicę. Weź to w swoje ręce, a wiele „nowych” problemów okaże się starymi problemami w kapeluszu.

10 łatwych wyzwań programistycznych dla początkujących, które warto rozwiązać
Żaden z nich nie jest oryginalny i o to właśnie chodzi. Pojawiają się w niemal każdym kursie dla początkujących, ponieważ działają. Pierwsze pięć wymaga jedynie pętli, warunków i odrobiny obsługi ciągów znaków lub list, podczas gdy ostatnie pięć zmusza do zastanowienia się, jakiej struktury danych użyć, zanim cokolwiek się wpisze. Cokolwiek się stanie, postaraj się nie googlować przez co najmniej dwadzieścia minut, nawet jeśli wydaje się to bezcelowe.
Wyzwanie 1: FizzBuzz
Zadanie polega na wydrukowaniu liczb od 1 do 100, ale każda wielokrotność liczby trzy wyświetlana jest jako „Fizz”, każda wielokrotność liczby pięć jako „Buzz”, a liczby będące wielokrotnościami obu wyświetlają się jako „FizzBuzz”.
Pamiętam, że pomyślałem, że brzmi to wręcz obraźliwie, jak proste to brzmi. Nie jest jednak aż tak proste, dlatego rekruterzy tak długo to lubili. Osoby, które dużo czytały o kodowaniu, ale niewiele napisały, zazwyczaj mają problem z kolejnością sprawdzania. Moja wersja w Pythonie wygląda tak:
python dla n w zakresie (1, 101): jeśli n % 15 == 0: print("FizzBuzz") elif n % 3 == 0: print("Fizz") elif n % 5 == 0: print("Buzz") w przeciwnym razie: print(n)
Gdy Twój już zadziała, przeciągnij linię %15 na dół, uruchom ją i zobacz, ile FizzBuzzów przetrwa. Spoiler: żaden.
Wyzwanie 2: Odwróć ciąg
wchodzi "hello", wychodzi "olleh".
W praktycznie każdym języku istnieje skrót, taki jak s[::-1] w Pythonie czy split("").reverse().join("") w JavaScript, i można go napisać raz, żeby sprawdzić, czy działa. Potem, szczerze mówiąc, usunąłbym go i zastosował nudną wersję z pętlą, która dodaje jeden znak na raz. W tym miejscu zauważa się, że w większości języków nie można zmienić ciągu znaków w miejscu, co dezorientuje wiele osób, jeśli nigdy się tego tutaj nie nauczą.
Wyzwanie 3: Sprawdzanie palindromów
Palindromem jest słowo takie jak „racecar” lub „noon”, które czyta się tak samo w obu kierunkach, więc Twoja funkcja powinna odpowiedzieć „tak” na te słowa i „nie” na „hello”.
Kiedy to zadziała, to dobry moment, aby poprawić swoje umiejętności kodowania, wprowadzając kod „Człowiek, plan, kanał: Panama”, który działa dopiero po zapisaniu tekstu małymi literami i usunięciu spacji oraz znaków interpunkcyjnych. Możesz zapożyczyć kod odwracający ciągi znaków z poprzedniego wyzwania, co jest całkiem przyjemne.
Wyzwanie 4: Ciąg Fibonacciego
Prawdopodobnie widziałeś już tę sekwencję: 0, 1, 1, 2, 3, 5, 8, 13, gdzie każda liczba jest sumą dwóch poprzedzających ją liczb. Twoja funkcja powinna zwrócić pierwsze n z nich.
Dwie zmienne i pętla wystarczą. Zabawa zaczyna się, gdy przepiszesz to z rekurencją, więc funkcja wywołuje samą siebie, a następnie żąda n = 35. Na większości laptopów trzeba będzie trochę poczekać, a zrozumienie, dlaczego tak się dzieje, to pierwsze delikatne spojrzenie na programowanie dynamiczne. To jeden z tych krótkich momentów „aha, właśnie dlatego”, które zostają w pamięci.
Wyzwanie 5: Obrót tablicy
Weź tablicę i liczbę k, a następnie przesuń każdy element o k miejsc w prawo, tak aby elementy na końcu zawinęły się do przodu. Przy [1, 2, 3, 4, 5] i k = 2 powinieneś otrzymać [4, 5, 1, 2, 3].
Większość pierwszych prób kończy się niepowodzeniem, gdy k jest większe od listy. Obrót pięciu elementów o 7 to tak naprawdę obrót o 2, co jest oczywiste, gdy się to zauważy, i niewidoczne do tego momentu.
Jeśli udało Ci się przejść przez te pięć bez większego bólu, dobra robota. Następne będą wymagały od Ciebie trochę więcej.
Wyzwanie 6: Znajdź największą liczbę całkowitą w tablicy
Znalezienie największej liczby jest łatwe, jeśli masz dozwoloną funkcję max(), więc jej nie masz. Zamiast tego zrób to za pomocą pętli, a następnie znajdź drugą co do wielkości liczbę bez dwukrotnego przeszukiwania listy. Teraz śledzisz dwie wartości i musisz uważać, którą z nich aktualizujesz jako pierwszą.
Duplikaty i liczby ujemne są dobrymi rzeczami do testowania, ponieważ wiele wczesnych rozwiązań po cichu zawodzi.
Wyzwanie 7: Policz samogłoski w zdaniu
Liczenie samogłosek to rozgrzewka. Właściwe ćwiczenie polega na liczeniu każdej samogłoski osobno i zwracaniu czegoś w rodzaju {"a": 3, "e": 5, "i": 1, "o": 2, "u": 0}.
Dla wielu początkujących jest to moment, w którym słowniki (lub obiekty w JavaScript) nabierają wreszcie sensu, a to ma znaczenie, ponieważ prawdopodobnie będzie to struktura danych, na której będą się opierać najczęściej w ciągu najbliższego roku.
Wyzwanie 8: Sprawdzanie anagramów
Anagramy wykorzystują dokładnie te same litery, ale w innej kolejności, na przykład „listen” i „silent”, więc piszesz funkcję, która sprawdza, czy dwa ciągi znaków spełniają kryteria.
Znam dwa rozsądne sposoby. Możesz posortować oba ciągi i porównać wyniki albo policzyć, ile razy pojawia się każda litera i porównać te liczby. Zapisanie obu i zastanawianie się, który z nich wykonuje mniej pracy, to w zasadzie pierwszy krok do myślenia o wydajności.
Wyzwanie 9: Dwie sumy
W przypadku listy takiej jak [2, 7, 11, 15] i wartości docelowej 9 zwracasz pozycje dwóch liczb, które sumują się do wartości docelowej, która w tym przypadku wynosi [0, 1].
Większość osób zaczyna od dwóch zagnieżdżonych pętli, które sprawdzają każdą parę. To rozwiązanie sprawdza się w przypadku krótkich list, ale szybko staje się powolne. Szybsze podejście zachowuje liczby, które już widziałeś, w słowniku, dzięki czemu możesz je natychmiast wyszukać. Nieprzypadkowo LeetCode umieściło to rozwiązanie jako pierwsze, ponieważ wyraźnie pokazuje, jak ważna jest prawidłowa struktura danych.
Wyzwanie 10: Gra w zgadywanie liczb
Tutaj komputer wybiera tajną liczbę z przedziału od 1 do 100, a Ty próbujesz zgadnąć, a komputer mówi Ci, że jest „za wysoka” lub „za niska”, aż do momentu, w którym zgadniesz i poda, ile było prób.
To nie jest prosta łamigłówka programistyczna, a raczej mała aplikacja z danymi wprowadzanymi przez użytkownika, pętlą while i liczbami losowymi. Ktoś w końcu wpisze „banana” zamiast liczby, więc musisz radzić sobie również z błędami wprowadzanymi przez użytkownika. I w przeciwieństwie do innych, w tę grę możesz po prostu dać znajomemu do zabawy.
Najlepsze strony internetowe do wyzwań związanych z kodowaniem online
Po wyczerpaniu moich dziesięciu, będziesz potrzebować nieograniczonego źródła z automatycznym sprawdzaniem. Wszystkie te strony z internetowymi wyzwaniami programistycznymi to oferują. Po prostu działają zupełnie inaczej.
| Platforma | Najlepszy dla | Format | Koszt |
|---|---|---|---|
| Edabit | Absolutni nowicjusze | Małe wyzwania związane z kodowaniem w przeglądarce | Bezpłatny poziom |
| Wojny kodowe | Praktyka z elementami grywalizacji | Ranking „kata” z rozwiązaniami społecznościowymi | Bezpłatny |
| Ćwiczenie | Nauka dobrych nawyków | Ścieżki językowe z opcjonalnymi mentorami | Bezpłatny |
| freeCodeCamp | Ustrukturyzowane uczenie się | Program nauczania z wbudowanymi ćwiczeniami i certyfikatami | Bezpłatny |
| HackerRank | Ścieżki umiejętności i przygotowanie do pracy | Problemy tematyczne z etykietami trudności | Bezpłatne dla osób uczących się |
| LeetCode | Przygotowanie do rozmowy kwalifikacyjnej | Zadania algorytmiczne oznaczone tagami Łatwy/Średni/Trudny | Bezpłatny poziom |
| CodeChef | Zmierzając w stronę zawodów | Ścieżki treningowe i regularne konkursy | Bezpłatny poziom |
| Projekt Euler | Miłośnicy matematyki | Zagadki wymagające dużej ilości matematyki, przesyłanie wyłącznie odpowiedzi | Bezpłatny |
| Nadejście kodu | Zabawa sezonowa | Codzienne łamigłówki oparte na fabule każdego grudnia | Bezpłatny |
Edabit
Gdyby znajomy zapytał mnie, od czego zacząć, powiedziałbym, że Edabit. Problemy są krótkie, wszystko działa w przeglądarce i można zbierać punkty doświadczenia. Python, JavaScript, Java, C++ i kilka innych są omówione, a etykieta „bardzo łatwy” w rzeczywistości oznacza bardzo łatwy.
Wojny kodowe
Codewars nazywa swoje zadania kata (słowo w sztukach walki oznaczające ćwiczenia). Są one uszeregowane od 8 kyu (najłatwiejsze) do 1 kyu. Magia zaczyna się po przesłaniu zadania. Możesz zobaczyć odpowiedzi innych, a zestawienie swoich dziesięciu niezgrabnych linijek z czyjąś zgrabną dwulinijką nauczy cię więcej niż większość samouczków.
Ćwiczenie
Exercism jest prowadzony jako organizacja non-profit i jest całkowicie darmowy. Dostępne są ścieżki dla ponad 80 języków, a mentorzy-wolontariusze przejrzą Twój kod, jeśli o to poprosisz. Możesz pozostać w przeglądarce lub ściągnąć ćwiczenia na swój komputer. Ostatecznie skłaniałbym Cię ku drugiej opcji, ponieważ pozwala ona oswoić się z Visual Studio Code i terminalem.
freeCodeCamp
Nie jest to typowa strona z wyzwaniami. To cały program nauczania, ale składa się z setek krótkich ćwiczeń z kodowania, więc idealnie pasuje. Świetne, jeśli lubisz strukturę: JavaScript, Python, responsywne projektowanie stron internetowych i wiele innych, z projektami certyfikacyjnymi na końcu każdej ścieżki.
HackerRank
HackerRank sortuje problemy według ścieżek umiejętności (Python, SQL, struktury danych, algorytmy) i pokazuje, jak trudny jest każdy z nich i ile osób go rozwiązało. Wiele firm rekrutuje kandydatów za jego pomocą. Przyzwyczajenie się do interfejsu teraz oszczędzi Ci nerwów później.
LeetCode
To jest kraina przygotowań do rozmowy kwalifikacyjnej. Zadania są oznaczone jako łatwe, średnie i trudne, a nawet „łatwe” zakłada, że opanowałeś podstawy. Potraktowałbym wyzwania programistyczne jako cel, do którego zmierzasz, a nie punkt wyjścia. Wróć, gdy moja dziesiątka stanie się rutyną.
CodeChef
CodeChef wyrósł na platformie poświęconej programowaniu. Obecnie, oprócz regularnych konkursów, oferuje również ścieżki treningowe dla początkujących, więc jeśli zawody na czas brzmią interesująco, to jest to dobre miejsce, aby spróbować swoich sił.
Projekt Euler
Zadania matematyczne, do których rozwiązania potrzebny jest kod. Brak edytora na stronie. Piszesz program, gdziekolwiek chcesz, i po prostu wpisujesz wynik. Matematycy to uwielbiają. Wszyscy inni zazwyczaj się wycofują.
Nadejście kodu
Każdego grudnia dostajesz dwuczęściową łamigłówkę dziennie, połączoną z zabawną historią. Ostatnio skróciła się z 25 do 12 dni i zniknęła z globalnego rankingu, więc teraz są to głównie prywatne rankingi ze znajomymi lub współpracownikami. Starsze łamigłówki są dostępne przez cały rok, a archiwum to fantastyczna biblioteka ćwiczeń.
Usłyszysz również o Coderbyte, który łączy wyzwania z kursami przygotowującymi do rozmów kwalifikacyjnych, a także o Topcoder, który jest przeznaczony głównie dla doświadczonych programistów.
Jedno ostrzeżenie. Wiele starszych list nadal odsyła do Google Code Jam i Kick Start. Google zamknęło obie w 2023 roku, a pozostały tylko archiwa problemów.

Jak ćwiczyć wyzwania związane z kodowaniem, nie wypalając się
Dodanie dziesięciu stron do zakładek nie czyni cię lepszym. To nawyk. Oto, co ja bym mniej więcej zrobił:
- Wybierz jeden język programowania i trzymaj się go. Python jest powszechnym wyborem, ponieważ czyta się go prawie jak angielski. JavaScript ma sens, jeśli chcesz tworzyć strony internetowe.
- Skonfiguruj prawdziwy edytor kodu. Edytory przeglądarkowe wystarczą na pierwszy tydzień. Wczesna instalacja programu Visual Studio Code nauczy Cię, jak uruchamiać pliki, odczytywać błędy w terminalu i korzystać z debugera.
- Rozwiązuj od jednego do trzech problemów dziennie. Codzienna praktyka kodowania w małych dawkach jest lepsza niż sześciogodzinne niedzielne wkuwanie. Schematy zapadają w pamięć między sesjami, a drobny cel trudno pominąć.
- Przeczytaj inne rozwiązania po zakończeniu. Na Codewars lub Exercism sprawdź dwie lub trzy inne odpowiedzi. Poznasz najlepsze praktyki i kilka naprawdę sprytnych sztuczek, które warto wykorzystać.
- Wróć do starych problemów. Tydzień później rozwiąż jeden z nich z pamięci. Jeśli ci się nie uda, to znaczy, że go zapamiętałeś, zamiast zrozumieć.
- Przechodź do małych projektów. Około 30–50 problemów, stwórz coś: listę zadań, aplikację pogodową opartą na darmowym API, przygodówkę tekstową. To właśnie tam oddzielne umiejętności zaczynają ze sobą współdziałać.
Co zrobić, gdy utkniesz w wyzwaniu programistycznym
Utkniesz. Starsi programiści utknęli przed lunchem. Mają oni swoją rutynę na oderwanie się od rzeczywistości, więc pożycz jedną:
- Przedstaw problem własnymi słowami. Zaskakująco wiele momentów „nie potrafię tego rozwiązać” to tak naprawdę „źle to zrozumiałem”.
- Rozwiąż przykład ręcznie. Mały wkład, długopis i kartka papieru, i zapisz każdy krok. Gratulacje, to Twój algorytm.
- Najpierw napisz pseudokod. „Dla każdej liczby, jeśli jest większa od mojej obecnej największej, zachowaj ją”. Prosty język jest łatwiejszy do naprawienia niż kod.
- Wypisz wszystko. Większość błędów to zmienna przechowująca coś innego niż zakładałeś. Wypisz to i sprawdź.
- Wyjaśnij to na głos. Opowiedz o swoim kodzie linijka po linijce, osobie lub gumowej kaczce. Błąd w oprogramowaniu często ujawnia się w połowie zdania.
- Korzystaj ze wskazówek krok po kroku. Wiele platform oferuje podpowiedź przed podaniem pełnej odpowiedzi. Skorzystaj ze wskazówki, a potem powtórz.
Cokolwiek robisz, nie kopiuj rozwiązania, obserwuj, jak przechodzi i idź dalej. Robiłem tak przez jakiś czas i nic z tego nie wyszło. Jeśli przeczytasz odpowiedź, zamknij kartę, odczekaj godzinę i przebuduj ją samodzielnie.
Wyzwania związane z kodem o tematyce kryptograficznej dla początkujących w blockchainie
Być może płatności kryptowalutowe lub blockchain były powodem, dla którego chciałeś nauczyć się kodowania. Następnie poćwicz na problemach z tego świata. Podstawy są identyczne (ciągi znaków, liczby całkowite, API), ale zadania wyglądają bardziej jak praktyczna praca techniczna. Nie musisz rozumieć algorytmów konsensusu, aby je wykorzystać.
- Pobierz aktualną cenę kryptowaluty. Skorzystaj z darmowego, publicznego API cen kryptowalut, wyświetl aktualną cenę Bitcoina i odświeżaj co minutę. Witajcie, żądania HTTP i JSON.
- Sprawdź format adresu portfela. Sprawdź, czy ciąg wygląda jak wiarygodny adres: prawidłowa długość, właściwy prefiks, tylko dozwolone znaki. Przyjemne ćwiczenie z ciągami znaków i delikatne wprowadzenie do wyrażeń regularnych.
- Zbuduj konwerter jednostek. Satoshi na BTC (1 BTC = 100 000 000 satoshi), wei na ETH (1 ETH = 10¹⁸ wei). Szybko dowiesz się, dlaczego liczby zmiennoprzecinkowe i pieniądze nie idą w parze i dlaczego programiści przechowują kwoty jako liczby całkowite.
- Zahaszuj ciąg za pomocą SHA-256. Zahaszuj zdanie za pomocą biblioteki standardowej, zmień jedną literę i ponownie zahaszuj. Zupełnie inny wynik. Ta właściwość w dużej mierze spaja blockchainy.
- Utwórz prostą stronę płatności. Strona produktu z przyciskiem „Zapłać kryptowalutą”, która generuje fakturę testową za pośrednictwem interfejsu API bramki płatniczej.
Ten ostatni element spaja resztę: formularz, wywołanie API, obsługę błędów i prezentację wyników prawdziwemu użytkownikowi. Bramki takie jak Plisio publikują API i dokumentację, które można podłączyć do sklepu ćwiczeniowego, dzięki czemu ćwiczenie dla początkujących przypomina prawdziwą integrację e-commerce.
Rozpocznij swoją praktykę kodowania od rozwiązania jednego problemu już dziś
Kiedy myślę o tym, co tak naprawdę mnie wytrąciło z równowagi jako początkującego, to nie był to jakiś legendarny, trudny problem. Najlepsze wyzwania programistyczne dla początkujących okazały się tymi nudnymi, małymi zadaniami, które w końcu kończyłem, zazwyczaj późnym wieczorem, przy zimnej herbacie przy laptopie.
Więc otwórz edytor dziś wieczorem i uruchom FizzBuzz, z brzydkim kodem i wszystkim. Czytaj dalej moją listę, póki jeszcze sprawia ci to przyjemność, a kiedy przestanie, przełącz się na stronę z tabeli, która wydała ci się najbardziej przyjazna. Niech ten nawyk będzie na tyle mały, że pominięcie go byłoby absurdalne. Za miesiąc niektóre z nich będą się wydawać wręcz nudne, a ta nuda to mniej więcej to, co odczuwa się z prawdziwymi umiejętnościami kodowania.