Лучшие задачи по программированию для начинающих: от простых до сложных упражнений.
Вот о чём никто не предупреждает. Можно целый месяц смотреть обучающие видео, кивать головой в знак согласия с каждым роликом, а потом открыть пустой файл и понятия не иметь, что писать. Я это проходил. Большинство людей, которые учатся программировать, тоже.
Этот способ решения скучен, но он работает: решайте небольшие задачи самостоятельно, поначалу не очень хорошо. Поэтому это руководство состоит из двух частей. Первая — это тщательно отобранный набор лучших задач по программированию для начинающих (десять задач, примерно от простых до сложных). Вторая часть посвящена сайтам, где вы найдете тысячи других задач после того, как изучите мой список.
Подойдет любой язык программирования. В моих примерах используется Python и немного JavaScript, поскольку большинство людей начинают именно с него. По возможности, решайте задачи по порядку. В каждой задаче есть одна новая идея.
Почему задачи по программированию развивают настоящие навыки программирования
Что считается сложной задачей? Что-то совсем незначительное с очевидным правильным ответом. «Возьми слово и произнеси его наоборот». «Вот список чисел, какое из них самое большое?» Ничего не устанавливаешь и не выбираешь фреймворк. Пишешь, может быть, десять строк.
Просмотр обучающих видеороликов подразумевает следование чужому ходу мыслей. Задания по программированию меняют этот подход, и это, хотя и вызывает дискомфорт, приносит пользу. Вы пытаетесь угадать, что получится, вы пытаетесь разглядеть ошибку, вы пробуете снова. Делайте это несколько недель, и некоторые вещи незаметно станут проще:
- Уверенное владение синтаксисом. Больше никаких пятых попыток в Google найти информацию о том, как написать цикл for.
- Навыки решения проблем. Вы начинаете разбивать нечеткую задачу на этапы еще до того, как коснетесь клавиатуры.
- Логическое мышление. Пустой список, отрицательное целое число, слово из одной буквы. Вы начинаете ожидать именно этого.
- Отладка. Красный текст ошибки перестал восприниматься как оскорбление.
- Уверенность. Каждая решенная задача — доказательство того, что вы можете написать программу самостоятельно.
Однажды мне сказали, что в программировании существует своё правило 80/20, и для задач начинающих оно довольно точное. Большинство из них основаны на одних и тех же пяти приёмах: циклы, операторы if/else, работа со строками, подсчёт элементов в словаре и обход массива. Освоив их, вы обнаружите, что многие «новые» задачи оказываются старыми, только в шляпе.

10 простых задач по программированию для начинающих, которые стоит решить в первую очередь.
Ни один из этих способов не является оригинальным, и в этом-то и суть. Они встречаются почти в каждом курсе для начинающих, потому что работают. Первые пять требуют только циклов, условий и немного работы со строками или списками, в то время как последние пять заставляют вас задуматься о том, какую структуру данных использовать, прежде чем что-либо вводить. Что бы ни случилось, постарайтесь не гуглить хотя бы двадцать минут, даже если это кажется бессмысленным.
Задание 1: FizzBuzz
Задача состоит в том, чтобы вывести числа от 1 до 100, но каждое число, кратное 3, отображается как "Fizz", каждое число, кратное 5, как "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: Перевернуть строку
Входит "hello", выходит "olleh".
Практически в каждом языке есть сокращение, например, 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 | Программы повышения квалификации и подготовка к работе | Тематические задачи с указанием уровня сложности. | Бесплатно для учащихся |
| LeetCode | Подготовка к собеседованию | Алгоритмические задачи, помеченные тегами Легкие/Средние/Сложные | Бесплатный уровень |
| CodeChef | Движение к соревнованиям | Тренировочные маршруты плюс регулярные конкурсы | Бесплатный уровень |
| Проект Эйлер | Любители математики | Задачи, требующие решения, только ответы. | Бесплатно |
| Появление кода | Сезонные развлечения | Ежедневные сюжетные головоломки каждый декабрь. | Бесплатно |
Эдабит
Если бы друг спросил меня, с чего начать, я бы сказал, с Edabit. Задания короткие, всё работает в браузере, и вы получаете XP. Охвачены Python, JavaScript, Java, C++ и ещё несколько языков, а пометка «очень легко» действительно означает очень легко.
Codewars
На Codewars задачи называются ката (термин из боевых искусств, обозначающий упражнения). Они ранжированы от 8 кю (самые лёгкие) до 1 кю. Вся магия начинается после отправки решения. Вы видите ответы других участников, и сравнение ваших десяти неуклюжих строк с чьим-то лаконичным ответом в две строчки даёт вам больше знаний, чем большинство обучающих материалов.
Упражнения
Exercism работает как некоммерческая организация и абсолютно бесплатна. Здесь есть курсы по более чем 80 языкам программирования, а наставники-волонтеры готовы проверить ваш код по вашей просьбе. Вы можете оставаться в браузере или загружать упражнения на свой компьютер. Я бы посоветовал вам в конечном итоге выбрать второй вариант, потому что он поможет вам освоиться с Visual Studio Code и терминалом.
freeCodeCamp
Это не совсем сайт для решения сложных задач. Это целая учебная программа, но она состоит из сотен небольших упражнений по программированию, поэтому она вполне подходит. Отлично подойдет, если вам нравится структурированность: JavaScript, Python, адаптивный веб-дизайн и многое другое, с сертификационными проектами в конце каждого раздела.
HackerRank
HackerRank сортирует задачи по областям знаний (Python, SQL, структуры данных, алгоритмы) и показывает, насколько сложна каждая из них и сколько людей её решили. Многие компании используют этот инструмент для отбора кандидатов. Привыкнув к интерфейсу сейчас, вы избежите лишних переживаний в будущем.
LeetCode
Это раздел подготовки к собеседованиям. Задачи помечены как «Легкие», «Средние» и «Сложные», и даже «Легкие» предполагают, что вы освоили основы. Я бы рассматривал эти задачи по программированию как направление, к которому вы движетесь, а не как отправную точку. Вернитесь, когда мои десять заданий покажутся вам привычными.
CodeChef
CodeChef начинался как сайт для соревнований по программированию. Сегодня, помимо обычных конкурсов, здесь также есть тренировочные курсы для начинающих, так что если соревнования на время кажутся вам интересными, это отличное место, чтобы попробовать свои силы.
Проект Эйлер
Для решения математических задач нужен код. На сайте нет редактора. Вы пишете программу где угодно и просто вводите итоговое число. Математики в восторге. Все остальные, как правило, от этого отворачиваются.
Появление кода
Каждый декабрь вы получаете по одной головоломке из двух частей, объединенных забавной историей. Недавно количество дней сократилось с 25 до 12, и глобальная таблица лидеров исчезла, поэтому сейчас в основном это закрытые таблицы лидеров с друзьями или коллегами. Более старые головоломки остаются доступными в течение всего года, а архив представляет собой фантастическую библиотеку для тренировки.
Вы также услышите о Coderbyte, который сочетает в себе задачи и курсы подготовки к собеседованиям, и о Topcoder, который действительно предназначен для опытных разработчиков.
Одно предупреждение. Многие старые списки по-прежнему отсылают вас к Google Code Jam и Kick Start. Google закрыл оба этих проекта в 2023 году, и остались только архивы заданий.

Как практиковаться в решении задач по программированию, не перегорев при этом
Добавление десяти сайтов в закладки не сделает вас лучше. Это сделает привычка. Вот примерно что я бы сделал:
- Выберите один язык программирования и придерживайтесь его. Обычно выбирают Python, потому что он читается почти как английский. JavaScript подойдет, если вы хотите создавать веб-сайты.
- Установите полноценный редактор кода. Браузерные редакторы подойдут на первую неделю. Ранняя установка Visual Studio Code научит вас запускать файлы, читать ошибки в терминале и работать с отладчиком.
- Решайте от одной до трех задач в день. Ежедневная практика программирования небольшими порциями лучше, чем шестичасовая зубрежка в воскресенье. Шаблоны запоминаются между занятиями, и маленькую цель сложно пропустить.
- После завершения работы почитайте другие решения. На Codewars или Exercism посмотрите два-три других ответа. Вы почерпнете лучшие практики и несколько действительно умных приемов, которые стоит позаимствовать.
- Вернитесь к старым задачам. Через неделю повторите одну из них по памяти. Если не получится, значит, вы просто запомнили её, а не поняли.
- Переходите к небольшим проектам. Набросайте около 30-50 задач и создайте что-нибудь: список дел, приложение погоды на основе бесплатного API, текстовую приключенческую игру. Именно здесь отдельные навыки начинают работать вместе.
Что делать, если вы застряли на задании по программированию?
Вы обязательно столкнетесь с трудностями. Опытные разработчики часто застревают еще до обеда. У них есть отработанный алгоритм действий, чтобы выбраться из тупика, так что переймите один из них:
- Переформулируйте проблему своими словами. Удивительно много случаев, когда вы говорите: «Я не могу это решить», на самом деле объясняются фразой: «Я неправильно понял».
- Решите пример вручную. Небольшие входные данные, ручка и бумага, и записывайте каждый шаг, который вы делаете. Поздравляем, это ваш алгоритм.
- Сначала напишите псевдокод. «Для каждого числа, если оно больше моего текущего максимального значения, оставьте его». Простым языком исправить ошибки проще, чем кодом.
- Распечатайте всё. В большинстве случаев ошибки связаны с переменной, содержащей нечто иное, чем вы предполагали. Распечатайте её и выясните.
- Объясните это вслух. Пройдитесь по коду строка за строкой, перед человеком или резиновой уточкой. Программная ошибка часто проявляется в середине предложения.
- Используйте подсказки пошагово. Многие платформы предлагают подсказку перед полным ответом. Воспользуйтесь подсказкой, а затем попробуйте снова.
Что бы вы ни делали, не копируйте решение, не смотрите, как оно проходит, и не переходите к следующему. Я так делал некоторое время, и это ни к чему не привело. Если вы всё же прочитали ответ, закройте вкладку, подождите час и переделайте всё самостоятельно.
Задания по программированию на тему криптовалют для начинающих пользователей блокчейна
Возможно, именно криптовалютные платежи или блокчейн стали причиной вашего желания научиться программировать. Тогда попрактикуйтесь на задачах из этой области. Основы идентичны (строки, целые числа, API), но задачи гораздо больше похожи на реальную техническую работу. Вам не нужно разбираться в алгоритмах консенсуса ни для одной из этих задач.
- Получайте актуальную цену криптовалюты. Обращайтесь к бесплатному общедоступному API для отслеживания цен на криптовалюты, выводите текущую цену биткоина и обновляйте страницу каждую минуту. Привет, HTTP-запросы и JSON.
- Проверка формата адреса кошелька. Проверка соответствия строки правдоподобному адресу: правильная длина, правильный префикс, только допустимые символы. Прекрасная практика работы со строками и ненавязчивое введение в регулярные выражения.
- Создайте конвертер единиц измерения. Сатоши в BTC (1 BTC = 100 000 000 сатоши), вей в ETH (1 ETH = 10¹⁸ вей). Вы быстро поймете, почему числа с плавающей запятой и деньги несовместимы, и почему разработчики хранят суммы в виде целых чисел.
- Хэшируйте строку с помощью SHA-256. Хэшируйте предложение с помощью стандартной библиотеки, измените одну букву и хэшируйте снова. Результат будет совершенно другим. Это свойство — важная составляющая, которая скрепляет блокчейны.
- Создайте простую страницу оформления заказа. Страница товара с кнопкой «Оплатить криптовалютой», которая создает тестовый счет-фактуру через API платежного шлюза.
Последний элемент связывает все остальное воедино: форму, вызов API, обработку ошибок и отображение результата реальному пользователю. Такие шлюзы, как Plisio, публикуют API и документацию, которые можно интегрировать в тестовый магазин, что делает упражнение для начинающих очень похожим на реальную интеграцию в сфере электронной коммерции.
Начните свою практику программирования с решения одной задачи уже сегодня!
Когда я вспоминаю, что на самом деле помогло мне преодолеть трудности на начальном этапе, это оказывается не какая-то легендарно сложная задача. Лучшими задачами для начинающих оказались те скучные мелочи, которые я действительно решал, обычно поздно ночью, с холодным чаем рядом с ноутбуком.
Так что откройте сегодня вечером редактор и запустите FizzBuzz, со всем его некрасивым кодом. Продолжайте выполнять задания из моего списка, пока это еще интересно, а когда перестанет быть интересным, переключитесь на тот сайт из таблицы, который показался вам наиболее удобным. Сделайте эту привычку настолько незначительной, чтобы пропуск её казался немного нелепым. Через месяц некоторые из этих заданий покажутся почти скучными, и эта скука — это примерно то, что ощущается изнутри, когда обладаешь настоящими навыками программирования.