Найкращі завдання з кодування для початківців: практика від простого до складного кодування

Найкращі завдання з кодування для початківців: практика від простого до складного кодування

Ось про що вас ніхто не попереджає. Ви можете місяць переглядати навчальні посібники, підлаштовуватися під кожне відео, а потім відкрити порожній файл і не мати уявлення, що друкувати. Я через це був. Більшість людей, які вчаться програмувати, також.

Рішення нудне, але воно працює: вирішуйте невеликі проблеми самостійно, спочатку погано. Тож цей посібник складається з двох частин. Перша — це ретельно підібраний набір найкращих завдань з кодування для початківців (десять з них, приблизно від легких до складних). Друга охоплює сайти, де ви знайдете ще тисячі, як тільки вивчите мої.

Підійде будь-яка мова програмування. У моїх прикладах використовується Python і трохи JavaScript, оскільки саме з нього починають більшість людей. Якщо можете, йдіть по порядку. Кожна проблема приховує одну нову ідею.

Чому завдання з кодування розвивають справжні навички кодування

Що вважається викликом? Щось крихітне з очевидною правильною відповіддю. «Візьміть слово, вимовте його задом наперед». «Ось список чисел, яке з них найбільше?» Ви нічого не встановлюєте і не вибираєте фреймворк. Ви пишете, можливо, десять рядків.

Перегляд посібника означає слідування за чужим ходом думок. Кодові завдання змінюють це, і це незручно, але корисно. Ви здогадуєтесь, щось ламається, ви мружитеся на помилку, пробуєте ще раз. Робіть це кілька тижнів, і деякі речі непомітно стають легшими:

  • Вільне володіння синтаксисом. Більше не потрібно гуглити, як написати цикл for вп'яте.
  • Навички вирішення проблем. Ви починаєте розбивати нечітке завдання на кроки, перш ніж торкнутися клавіатури.
  • Логічне мислення. Порожній список, від'ємне ціле число, слово з однієї літери. Ви починаєте очікувати цього.
  • Налагодження. Червоний текст помилки перестає сприйматися як образа.
  • Впевненість. Кожна вирішена проблема – це доказ того, що ви можете написати програму самостійно.

Хтось колись сказав мені, що в кодуванні існує власне правило 80/20, і для початкових задач воно досить точне. Більшість із них спираються на ті самі п'ять рухів: цикли, if/else, тикання в рядки, підрахунок елементів у словнику та обхід масиву. Візьміть це в руки, і багато «нових» задач виявляться старими, але без особливих зусиль.

Найкращі завдання з кодування для початківців

10 простих завдань з програмування для початківців, які потрібно вирішити в першу чергу

Жоден з них не є оригінальним, і в цьому, мабуть, і суть. Вони з'являються майже в кожному курсі для початківців, бо працюють. Перші п'ять потребують лише циклів, умов і трохи обробки рядків або списків, тоді як останні п'ять змушують вас задуматися про те, яку структуру даних використовувати, перш ніж щось друкувати. Що б не сталося, намагайтеся не гуглити принаймні двадцять хвилин, навіть якщо це здається безглуздим.

Виклик 1: FizzBuzz

Завдання полягає в тому, щоб вивести числа від 1 до 100, але кожне число, кратне трьом, відображається як "Fizz", кожне число, кратне п'яти, як "Buzz", а числа, кратні обом, отримують натомість "FizzBuzz".

Я пам'ятаю, як подумав, що це майже образливо через те, наскільки просто це звучить. Однак, це не зовсім так просто, тому інтерв'юерам це так довго подобалося. Люди, які багато читали про програмування, але писали дуже мало, зазвичай помиляються в порядку перевірок. Моя версія на Python виглядає так:

python for n in range(1, 101): if n % 15 == 0: print("FizzBuzz") elif n % 3 == 0: print("Fizz") elif n % 5 == 0: print("Buzz") else: print(n)

Як тільки ваш варіант спрацює, перетягніть рядок % 15 вниз, запустіть його та подивіться, скільки FizzBuzzes виживе. Спойлер: жодного.

Завдання 2: Зігніть рядок у зворотному напрямку

Входить «привіт», виходить «оллех».

Майже в кожній мові є скорочення, як-от s[::-1] у Python або split("").reverse().join("") у JavaScript, і нормально написати його один раз, щоб побачити, як він працює. Після цього я б чесно кажучи видалив його та зробив нудну версію з циклом, який додає по одному символу за раз. Саме тут ви помічаєте, що в більшості мов рядок не можна змінювати на місці, що бентежить багатьох людей пізніше, якщо вони ніколи не вивчать це тут.

Завдання 3: Перевірка паліндромів

Паліндром — це слово на кшталт «racecar» або «noon», яке читається однаково в обох напрямках, тому ваша функція повинна відповідати «так» на ці слова, а «hello» — «ні».

Коли це спрацює, саме час покращити свої навички програмування, надавши код "Чоловік, план, канал: Панама", який буде прийнято лише після того, як ви напишете текст малими літерами та видалите пробіли й розділові знаки. Ви можете запозичити код для перетворення рядків з попереднього завдання, що приємно.

Завдання 4: Послідовність Фібоначчі

Ви, мабуть, вже бачили цю послідовність: 0, 1, 1, 2, 3, 5, 8, 13, де кожне число є сумою двох чисел попереду. Ваша функція повинна повернути перші n з них.

Двох змінних і циклу достатньо. Цікаво починається, коли ви переписуєте це з рекурсією, тож функція викликає сама себе, а потім запитує n = 35. На більшості ноутбуків вам доведеться трохи почекати, і з'ясування причини цього — це перший погляд на динамічне програмування. Це один з тих маленьких моментів «о, ось чому», які запам'ятовуються.

Завдання 5: Поворот масиву

Візьмемо масив і число k, потім перемістимо кожен елемент на k позицій праворуч, при цьому елементи з кінця перемістимо вперед. З [1, 2, 3, 4, 5] та k = 2 ви повинні отримати [4, 5, 1, 2, 3].

Більшість перших спроб завершуються невдачею, коли k більше за список. Поворот п'яти елементів на 7 насправді є поворотом їх на 2, що очевидно, як тільки ви це побачите, і невидимо до того часу.

Якщо ви пройшли ці п'ять без особливих зусиль, то це чудова робота. Наступні вимагатимуть від вас трохи більше.

Завдання 6: Знайдіть найбільше ціле число в масиві

Знайти найбільше число легко, якщо вам дозволено використовувати max(), тож вам це не дозволено. Зробіть це за допомогою циклу, а потім знайдіть також друге за величиною число, не переглядаючи список двічі. Тепер ви відстежуєте два значення і повинні бути обережними, яке з них оновлювати першим.

Дублікати та від'ємні числа – це гарні речі для тестування, оскільки багато ранніх рішень непомітно дають з ними невдачу.

Завдання 7: Порахуйте голосні в реченні

Підрахунок голосних – це розминка. Суть вправи полягає в тому, щоб підрахувати кожну голосну окремо та повернути щось на кшталт {"a": 3, "e": 5, "i": 1, "o": 2, "u": 0}.

Для багатьох початківців це той момент, коли словники (або об'єкти в JavaScript) нарешті стають зрозумілими, і це важливо, тому що це, ймовірно, структура даних, на яку ви будете найбільше спиратися протягом наступного року.

Завдання 8: Перевірка анаграм

Анаграми використовують точно такі ж літери в різному порядку, як-от «listen» та «silent», тому ви пишете функцію, яка визначає, чи відповідають вимогам два рядки.

Я знаю два розумні способи. Ви можете відсортувати обидва рядки та порівняти результати, або ж ви можете порахувати, як часто з'являється кожна літера, та порівняти ці показники. Написання обох рядків, а потім роздуми про те, який з них виконує менше роботи, – це, по суті, ваш перший крок до роздумів про ефективність.

Завдання 9: Дві суми

Зі списком типу [2, 7, 11, 15] та цільовим значенням 9 ви повертаєте позиції двох чисел, які в сумі дають цільове значення, яке тут дорівнює [0, 1].

Більшість людей починають із двох вкладених циклів, які перепробують кожну пару, і це нормально для коротких списків, але швидко стає повільним. Швидший підхід зберігає числа, які ви вже бачили у словнику, щоб ви могли миттєво їх знайти. LeetCode не випадково поставив цей підхід на перше місце, оскільки він так чітко показує, наскільки важлива правильна структура даних.

Завдання 10: Гра в вгадування чисел

Тут комп'ютер вибирає секретне число від 1 до 100, ви продовжуєте вгадувати, і він повідомляє вам «занадто високе» або «занадто низьке», поки ви його не отримаєте, а також вказує, скільки спроб знадобилося.

Це не стільки проста програмістська головоломка, скільки крихітний додаток із введенням користувачем, циклом while та випадковими числами. Зрештою, хтось набере «банан» замість числа, тож вам також доведеться мати справу з неправильним введенням. І на відміну від інших, цю гру ви навіть можете передати другу для гри.

Найкращі веб-сайти для онлайн-змагань з кодування

Після того, як я вичерпаю десять, вам знадобиться безмежний запас із автоматичною перевіркою. Ці сайти для онлайн-челенджів з кодування всі це роблять. Вони просто відчуваються зовсім інакше.

Платформа Найкраще для Формат Вартість
Едабіт Абсолютні новачки Проблеми з коротким кодуванням у браузері Безкоштовний рівень
Codewars Гейміфікована практика Рейтинг «ката» з рішеннями для спільноти Безкоштовно
Фізичні вправи Вивчення корисних звичок Мовні треки з додатковими наставниками-людьми Безкоштовно
freeCodeCamp Структуроване навчання Навчальна програма з вбудованими вправами та сертифікатами Безкоштовно
HackerRank Треки навичок та підготовка до роботи Тематичні задачі з позначками складності Безкоштовно для учнів
ЛітКод Підготовка до співбесіди Алгоритмічні задачі з тегами Легкий/Середній/Складний Безкоштовний рівень
CodeChef Рухаємося до змагань Тренувальні доріжки плюс регулярні змагання Безкоштовний рівень
Проєкт Ейлера Любителі математики Головоломки з високим вмістом математики, лише відповіді Безкоштовно
Поява коду Сезонні розваги Щоденні сюжетні головоломки щогрудня Безкоштовно

Едабіт

Якби друг запитав мене, з чого почати, я б сказав, що це Edabit. Задачі короткі, все працює в браузері, і ви володієте XP. Охоплюються Python, JavaScript, Java, C++ та ще кілька, а позначка «дуже легко» насправді означає дуже легко.

Codewars

Codewars називає свої задачі ката (термін бойових мистецтв для позначення вправ). Вони ранжуються від 8 кю, найлегшого, до 1 кю. Магія починається після того, як ви надішлете завдання. Ви бачите відповіді всіх інших, і розміщення ваших десяти незграбних рядків поруч із чиїмось спритним дворядковим завданням навчить вас більше, ніж більшість навчальних посібників.

Фізичні вправи

Exercism працює як некомерційна організація та є безкоштовним, і крапка. Є треки для понад 80 мов, а волонтери-наставники переглянуть ваш код, якщо ви попросите. Ви можете залишатися в браузері або переносити вправи на свій комп'ютер. Я б зрештою порадив вам обрати другий варіант, оскільки він допоможе вам звикнути до Visual Studio Code та терміналу.

freeCodeCamp

Не зовсім сайт із завданнями. Це ціла навчальна програма, але вона побудована із сотень невеликих вправ з кодування, тому підходить. Чудово, якщо вам подобається структурованість: JavaScript, Python, адаптивний веб-дизайн та багато іншого, із сертифікаційними проектами в кінці кожного шляху.

HackerRank

HackerRank сортує задачі за напрямками навичок (Python, SQL, структури даних, алгоритми) та показує складність кожної з них і кількість людей, які її вирішили. Багато компаній відбирають кандидатів за його допомогою. Звикання до інтерфейсу тепер позбавить вас нервів пізніше.

ЛітКод

Це країна підготовки до співбесіди. Завдання позначаються як Легкі, Середні та Складні, і навіть «Легкі» припускають, що ви володієте основами. Я б ставився до програмістських викликів як до того, куди ви прямуєте, а не як до того, з чого починаєте. Повертайтеся, коли мої десять відчують рутину.

CodeChef

CodeChef виріс як сайт змагального програмування. Сьогодні він також пропонує практичні маршрути для початківців поряд зі звичайними конкурсами, тож якщо змагання на час звучать цікаво, це гарне місце, щоб спробувати їх.

Проєкт Ейлера

Математичні задачі, для розгадування яких потрібен код. На сайті немає редактора. Ви пишете програму де завгодно і просто вводите кінцеве число. Математики це обожнюють. Усі інші схильні відскакувати.

Поява коду

Що грудня ви отримуєте двочастинну головоломку на день, об'єднану кумедною історією. Нещодавно її тривалість скоротилася з 25 днів до 12, а також зникла глобальна таблиця лідерів, тому зараз це здебільшого приватні таблиці лідерів з друзями чи колегами. Старіші головоломки залишаються доступними протягом усього року, а архів — це фантастична бібліотека для практики.

Ви також почуєте про Coderbyte, який поєднує складні завдання з курсами для співбесід, та Topcoder, який дійсно призначений для досвідчених розробників.

Одне попередження. Багато старих списків досі вказують на Google Code Jam та Kick Start. Google закрив обидва сервіси у 2023 році, і залишилися лише проблемні архіви.

Найкращі завдання з кодування для початківців

Як практикувати завдання з кодування без вигорання

Додавання десяти сайтів до закладок не робить вас кращими. Звичка робить. Ось що я б приблизно зробив:

  1. Оберіть одну мову програмування та дотримуйтесь її. Python — це звичайний вибір, бо він читається майже як англійська. JavaScript має сенс, якщо ви хочете створювати вебсайти.
  2. Налаштуйте справжній редактор коду. Редактори браузера цілком підійдуть для першого тижня. Рання інсталяція Visual Studio Code навчить вас запускати файли, зчитувати помилки в терміналі та експериментувати з налагоджувачем.
  3. Вирішуйте від однієї до трьох задач на день. Щоденна практика кодування в невеликих дозах перевершує шестигодинне недільне зубріння. Закономірності засвоюються між сеансами, і крихітну ціль важко пропустити.
  4. Прочитайте інші рішення після того, як закінчите. На Codewars або Exercism перегляньте ще дві-три відповіді. Ви почерпнете найкращі практики та справді розумні трюки, які варто перейняти.
  5. Зверніться до старих проблем. Через тиждень переробіть одну з них по пам'яті. Якщо не можете, значить, ви її запам'ятали, а не зрозуміли.
  6. Переходьте до невеликих проектів. Десь 30-50 проблем, створіть щось: список справ, погодний додаток на безкоштовному API, текстову пригоду. Саме тут окремі навички починають працювати разом.

Що робити, коли ви застрягли на челенджі з кодування

Ви застрягнете. Старші розробники застрягають ще до обіду. У них є розпорядок дня, щоб вирватися з глухого кута, тож позичте один:

  • Перефразуйте проблему своїми словами. Дивовижна кількість моментів «Я не можу це вирішити» насправді є «Я неправильно це зрозумів».
  • Розробіть приклад вручну. Невеликі дані, ручка та папір, і записуйте кожен свій крок. Вітаємо, це ваш алгоритм.
  • Спочатку напишіть псевдокод. «Для кожного числа, якщо воно більше за моє поточне найбільше, залиште його». Просту мову легше виправити, ніж код.
  • Виведіть усе. Більшість помилок – це змінна, яка містить щось інше, ніж ви припускали. Виведіть це та дізнайтеся.
  • Поясніть це вголос. Пройдіться по своєму коду рядок за рядком, комусь або гумовій качечці. Програмна помилка часто проявляється посередині речення.
  • Використовуйте підказки в кроках. Багато платформ пропонують підказку перед повною відповіддю. Скористайтеся підказкою, а потім спробуйте ще раз.

Що б ви не робили, не копіюйте рішення, подивіться, як воно пройде, і рухайтеся далі. Я робив це деякий час, і це ні до чого мене не привело. Якщо ви все ж таки прочитали відповідь, закрийте вкладку, зачекайте годину та перебудуйте її самостійно.

Крипто-тематичні виклики коду для початківців у блокчейні

Можливо, криптоплатежі або блокчейн – це причина, чому ви взагалі хотіли навчитися програмувати. Тоді потренуйтеся над задачами з цього світу. Основи ідентичні (рядки, цілі числа, API), але завдання набагато більше схожі на реальну технічну роботу. Вам не потрібно розуміти алгоритми консенсусу для жодного з них.

  • Отримайте ціну монети в реальному часі. Відкрийте безкоштовний публічний API цін на криптовалюту, виведіть поточну ціну біткойна, оновлюйте щохвилини. Привіт, HTTP-запити та JSON.
  • Перевірте формат адреси гаманця. Перевірте, чи рядок виглядає як правдоподібна адреса: правильна довжина, правильний префікс, лише дозволені символи. Чудова практика з рядками та легке введення в регулярні вирази.
  • Створіть конвертер одиниць. Сатоші в BTC (1 BTC = 100 000 000 сатоші), вей в ETH (1 ETH = 10¹⁸ вей). Ви швидко зрозумієте, чому числа з плаваючою комою та гроші не сумісні, і чому розробники зберігають суми у вигляді цілих чисел.
  • Хешуйте рядок за допомогою SHA-256. Хешуйте речення за допомогою стандартної бібліотеки, змініть одну літеру, хешуйте його знову. Зовсім інший результат. Ця властивість є важливою частиною того, що об'єднує блокчейни.
  • Створіть просту сторінку оформлення замовлення. Сторінка товару з кнопкою «Сплатити криптовалютою», яка створює тестовий рахунок-фактуру через API платіжного шлюзу.

Останній об'єднує все інше: форму, виклик API, обробку помилок та показ результату реальному користувачеві. Такі шлюзи, як Plisio, публікують API та документацію, які можна підключити до сховища практичних завдань, що робить вправу для початківців дуже схожою на справжню інтеграцію електронної комерції.

Почніть свою практику кодування з однієї проблеми вже сьогодні

Коли я згадую, що насправді збило мене з пантелику як новачка, то розумію, що це не була якась легендарно складна задача. Найкращі завдання з кодування для початківців виявилися тими нудними маленькими завданнями, які я насправді вирішував, зазвичай пізно ввечері з холодним чаєм біля ноутбука.

Тож відкрийте редактор сьогодні ввечері та запустіть FizzBuzz, з усім цим жахливим кодом. Продовжуйте переглядати мій список, поки це ще цікаво, а коли це перестане бути цікаво, перейдіть на той сайт зі столу, який здається найдружелюбнішим. Зробіть цю звичку настільки короткою, щоб пропускати її було трохи смішно. Через місяць деякі з них будуть майже нудними, і ця нудьга — це саме те, що відчуваєш, коли маєш справжні навички програмування зсередини.

Які-небудь питання?

Чесно? FizzBuzz, як і майже всі. Він вимагає лише циклу та кількох операторів if, і ви можете пояснити це на одному диханні, проте багато людей все одно помиляються в порядку перевірок з першої спроби. Зворотне перетворення рядка на інвертований другий крок.

Edabit — це той, який я б дав повному новачку, головним чином тому, що задачі короткі, і вам ніколи не потрібно нічого встановлювати. Пізніше Codewars стає захопливим завдяки своїм рейтингам і тому, як можна читати рішення кожного. Exercism має безкоштовних менторів, що трапляється рідко. freeCodeCamp підходить тим, хто любить фіксований шлях. LeetCode може почекати, оскільки навіть його легкі задачі непомітно очікують основ.

Я б сказав, що для більшості людей це Python, частково тому, що синтаксис не заважає, і ви можете думати про логіку, а не про дужки та крапку з комою. Якщо ви вже знаєте, що хочете створювати веб-сайти, JavaScript має такий самий сенс, оскільки його підтримує кожен браузер. Будь-який з них добре підходить для вирішення проблем кодування, і, чесно кажучи, дотримання свого вибору важливіше за сам вибір.

Від однієї до трьох, і я маю на увазі це як стелю, а не як мету, коли ви новачок. Дві задачі на день протягом місяця навчать вас більше, ніж тридцять, втиснуті в одні вихідні. Я б використав будь-який час, що залишився, щоб по-справжньому зрозуміти кожне рішення та подивитися, як до нього підходили інші люди.

Як не дивно, вони це роблять, хоча самі задачі ніколи не стають простішими. Змінюється те, що ви починаєте помічати, як часто повертаються одні й ті ж кілька шаблонів, такі як цикли, умовні оператори, обробка рядків, підрахунок за допомогою словників і перегляд масивів. Десь близько сорокової задачі ви спіймаєте себе на думці: «О, це знову одна з них», і це зміна.

Почніть з переписування задачі своїми словами, оскільки, за моїм досвідом, приблизно половина всіх "застряглих" моментів насправді є неправильним прочитанням. Папір також допомагає. Розв’яжіть крихітний приклад вручну, запишіть, що ви зробили, і цей список стане вашим псевдокодом. Оператори друку покажуть вам, що насправді містять ваші змінні. І якщо двадцять чи тридцять хвилин проходять без жодної інформації, однієї підказки достатньо, але повної відповіді зазвичай немає.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.