Задания и тесты
Практические задания по HTML и CSS, JavaScript, Python, базам данных, DevOps и веб-разработке. Выполняйте их, проверяйте себя и собирайте портфолио.
1. HTML и CSS
- Свёрстайте карточку товара: изображение, название, цена и кнопка «В корзину». Карточку центрируйте на странице, добавьте эффект при наведении.
- Сделайте резиновую сетку из трёх колонок на CSS Grid, которая на мобильном размере превращается в одну колонку.
- Соберите меню навигации для сайта с тремя страницами: главная, каталог, контакты. Текущая страница выделяется активной ссылкой.
- Сверстайте форму регистрации: имя, email, пароль. Используйте
requiredи правильныеtype, чтобы браузер сам проверял ввод. - Добавьте адаптивную шапку сайта, которая сжимается в мобильное меню на узких экранах.
2. JavaScript
- Сделайте кнопку «Показать уведомление»: уведомление появляется и исчезает через 3 секунды.
- Напишите таймер обратного отсчёта до заданной даты: дни, часы, минуты, секунды.
- Соберите список задач (todo): добавление, удаление, отметка «выполнено». Сохраняйте состояние в
localStorage. - Добавьте валидацию формы: проверка email регулярным выражением и подсказки об ошибках под полями.
- Изучите Chrome DevTools и найдите утечку: повторяйте добавление элементов и следите за памятью в профиле.
3. Python
- Напишите игру «Угадай число»: программа загадывает число, пользователь пытается отгадать, получает подсказки «больше» или «меньше» и счётчик попыток.
- Сделайте калькулятор с меню операций и обработкой деления на ноль.
- Прочитайте текстовый файл, посчитайте частоту слов и выведите топ-10 самых частых.
- Опишите класс
BankAccountс методамиdepositиwithdraw, запрещающий уход в минус. Покройте его тестами на pytest.
4. Базы данных (SQL)
- Создайте таблицы
usersиordersсо связью один-ко-многим и заполните тестовыми данными. - Напишите запрос с
JOIN: имя клиента, его заказы и суммы. - Посчитайте агрегаты: сумма продаж по месяцам через
GROUP BY, топ-5 клиентов по выручке. - Сравните скорость запроса с индексом и без него с помощью
EXPLAINна таблице с большим числом строк.
5. DevOps
- Поднимите веб-сервер Nginx в Docker и примонтируйте папку со статическими файлами.
- Соберите
docker-compose.yml: приложение плюс PostgreSQL, пароли вынесите в.env. - Настройте GitHub Actions для запуска тестов pytest при каждом push.
- Напишите плейбук на Ansible, который устанавливает Nginx на сервере и проверяет, что он отвечает.
6. Веб-разработка
- Сделайте REST API для заметок (CRUD) на FastAPI или Express: создание, чтение, обновление, удаление. Добавьте валидацию ввода.
- Реализуйте форму входа: пароли храните хешами (
bcrypt), а сессию — токеном на сервере. - Разверните статический сайт бесплатно: GitHub Pages или аналогичный хостинг из урока Хостинг и деплой.
- Подключите к приложению базу данных и выводите данные через параметризованные запросы — без «склейки» строк (подробнее в Основы кибербезопасности).
7. Как проверять себя
- программа работает без ошибок на крайних случаях: пустой ввод, деление на ноль, очень большие числа;
- для интерфейсных заданий — страница корректно выглядит на мобильном размере;
- для JavaScript — данные переживают перезагрузку страницы;
- для веб-приложений — проект развёрнут и открывается по ссылке;
- весь код в Git: коммиты по логическим шагам, описания понятные.
8. Проекты для портфолио
Отдельные задания доказывают навык, а собранный проект — умение доводить работу до конца. Выберите 2–3 задачи из предыдущих разделов и превратите их в полноценные мини-проекты:
- личный сайт-визитка на HTML/CSS с адаптивом и формой обратной связи;
- менеджер задач на JavaScript с хранением данных в localStorage;
- парсер или бот: например, Telegram-бот на Python, который присылает погоду;
- приложение с базой данных: заметки или библиотека на FastAPI + PostgreSQL;
- автоматизация деплоя: соберите Docker-сборку одного из проектов.
Как структурировать портфолио: главный проект на обложке, рядом два-три поддерживающих. Для каждого укажите строку о задаче и строку о стеке. Хороший ридми в репозитории читают как объяснение: как запустить, что внутри, куда смотреть.
9. Ошибки и их разбор
Ошибаться нормально: даже опытные разработчики пишут баги. Разница в том, как ошибка разбирается. Сохраните привычку вести «дневник ошибок»: записывайте, что пошло не так и что помогло.
- воспроизведите ошибку и запишите её текст (читайте консоль/логи до конца);
- сузьте круг: спрячьте половину кода и проверьте, исчезла ли проблема;
- найдите опечатку в имени переменной или URL — это причина трети «магических» багов;
- переформулируйте ошибку своими словами и поищите по ключевой фразе;
- после исправления объясните причину вслух или текстом в дневнике.
10. Как получать обратную связь
Ревью кода — быстрый путь роста, но просить его нужно правильно. Покажите работу тому, кто уже прошёл этот путь: коллеге, наставнику или сообществу.
- просите конкретику: «посмотри валидацию формы» вместо «оцени проект»;
- дайте контекст: что делает код, какие решения принял и почему;
- не защищайтесь: на каждое замечание задавайте вопрос «как лучше сделать?»;
- фиксируйте замечания в файле TODO и закрывайте по одному;
- показывайте диффы после правок — это закрепляет навык и доверие.
Практические площадки: GitHub-ревью на своих репозиториях, телеграм-чаты по направлениям, хакатоны с разбором проектов. Не ждите «правильной» порции критики — задавайте наводящие вопросы, чтобы ревьюер рассказал, как бы он реализовал это сам.
11. Гонка на время: спринт-челленджи
Спринт — это задача, рассчитанная на 25–40 минут работы под таймер. Ограничение по времени дисциплинирует: вы учитесь быстро принимать решения, а не «вылизывать» каждую строчку. Главная ценность спринта — честная проверка автоматизации привычных действий.
- выберите маленькую задачу: форма входа, SQL-запрос, одна функция на Python;
- засеките время и работайте без пауз — гонка усиливает концентрацию;
- в момент таймера остановитесь и честно оцените результат по чек-листу из раздела 7;
- запишите время и повторите через неделю — прогресс виден сразу.
# Пример спринта: сумма цифр в строке
def sum_digits(text: str):
return sum(int(c) for c in text if c.isdigit())Тренируйтесь на задачах разделов 1–6: пока укладываетесь в отведённое время, усложняйте условие — добавьте граничный случай, которого не было в постановке.
12. Кросс-курсовые задания
Отдельные навыки — независимые «кирпичи», но карьера строится на стыках: верстальщик, понимающий бэкенд, ценнее верстальщика «в вакууме». Соединяйте два направления в одной задаче.
- Python + SQL: выгрузите заказы из базы, посчитайте выручку по категориям и сохраните отчёт в CSV;
- Frontend + API: сверстайте страницу, которая получает данные с вашего же FastAPI- или Express-сервиса;
- Docker + приложение: упакуйте учебный проект в контейнер и запустите вместе с базой данных;
- Бот + хранилище: Telegram-бот, который складывает историю сообщений в PostgreSQL.
Кросс-курсовые задания сложнее обычных: разбивайте их на шаги и коммитьте каждый отдельно. Так проще находить ошибки, а сам процесс уже напоминает командную работу.
13. Ревью кода: работа рецензентом
Проверять чужой код — отдельный навык, который прокачивает и ваш собственный. Начните с ревью работ сокурсников или собственных старых решений: взгляд со стороны находит то, что в гуще кода не видно.
- прочитайте код и сформулируйте, что автор хотел сделать, своими словами;
- ищите проблемы по порядку: читаемость, дублирование, ошибки на граничных случаях;
- пишите комментарии «здесь непонятно, почему…», а не «перепиши»;
- предлагайте хотя бы одно улучшение с объяснением, зачем оно.
# Плохо: «исправь»
# Лучше: «что должна вернуть функция при пустой строке?»Правило рецензента: критиковать решение, а не человека. Конструктивное замечание всегда содержит вопрос или причину, а не оценку «у тебя плохо».
14. Мини-проекты на 2–3 часа
Между одиночным заданием и большим портфолио-проектом есть «золотая середина»: компактный продукт с понятной целью и ограниченной областью. Здесь вы впервые работаете планировщиком: решаете, что войдёт в задачу, а что осознанно отсечёте.
| Этап | Что делаем |
|---|---|
| Постановка | одной фразой фиксируем продукт и его пользователя |
| Сокращение | убираем всё, без чего продукт не «умрёт» |
| Сборка | работаем по шагам, коммитим каждый |
| Проверка | прогоняем чек-листы разделов 7 и 9 |
Примеры для «золотой середины»: страница с погодой по API, личный планировщик задач, скрипт резервного копирования, дашборд продаж из собственной таблицы. Главный критерий — продукт можно показать незнакомому человеку.
15. Мини-квиз: быстрая самопроверка
Квиз — это 10–15 коротких вопросов по пройденному разделу: «что выведет код», «какой тег для заголовка», «где хранится состояние». Цель — не оценка, а выявление пробелов до того, как они станут дорогими.
Готовые варианты с проверкой и объяснениями — на странице Тесты HTML и CSS: 16 вопросов по разметке, селекторам, flexbox, grid, цвету и доступности.
Пример вопросов по разделу HTML:
1. <h1> заголовок страницы — сколько раз допустим?
2. <p> и <div>: в чём отличие по умолчанию?
3. Что делает <form action="">?- квиз идёт без подсказок — важна честность перед собой;
- после ответа — краткое объяснение правильного варианта;
- «красные» темы возвращаются в повторный квиз через 2–3 дня.
Правило интервального повторения: повторение материала через день, неделю и месяц закрепляет знания лучше, чем час заучивания подряд.
16. Сдача задания через Git и pull request
В реальной работе код сдают в репозиторий через pull request (merge request): это история изменений, ревью и автоматические проверки. Приучайте себя к этому процессу на заданиях.
git init
git add .
git commit -m "Задание 4: калькулятор"
git push origin main
# Из UI GitHub: New pull request → Review- репозиторий на каждый модуль, ветка — на каждое задание;
- заголовок PR = номер задания + краткое «что сделано»;
- в описании — как запускать и что проверять;
- ревьюер оставляет замечания — исправляете и перезаливаете.
Это формирует навыки, которые спросят на собеседовании: чистая история коммитов, понятные описания, умение принимать замечания.
17. Парное программирование по таймеру
Парное программирование — два человека вместе пишут одно решение: один «водитель» набирает код, второй «навигатор» смотрит шире — на структуру, крайние случаи, следующий шаг. Правило: роли меняются каждые 20–25 минут.
1. Включите таймер на 25 минут
2. Водитель пишет, навигатор направляет
3. По таймеру — поменяйтесь ролями
4. В конце — 5 минут разбора решений- мозговой штурм вслух: пока «навигатор» объясняет, «водитель» слышит ошибки раньше;
- меньше «тупняков»: пока один копает, второй держит цель;
- обмен опытом: новичок видит приёмы, эксперт — свежий взгляд.
Парная работа не заменяет сольную: сольные задания прокачивают самостоятельность, парные — коммуникацию. Чередуйте оба формата.
18. Проектная неделя и мини-хакатон
Кульминация курса — компактный хакатон на 3–5 дней: маленькая команда (2–4 человека) собирает работающий прототип с нуля. Это генеральная репетиция реального проекта со всеми его этапами.
| День | Фокус |
|---|---|
| 1 | идея, роли, план на скриншот/доску |
| 2–4 | сборка по веткам, ежедневная короткая сверка |
| 5 | финал: презентация прототипа и разбор решений |
Правила успеха хакатона: ограниченный объём (работает хуже идеально, но прилично), одна интеграционная ветка, честные роли, в конце — демо неидеального продукта.
Что дальше
Соберите решённые задания в один репозиторий — это готовое портфолио для первых стажировок и собеседований. Продолжайте по урокам: HTML, CSS, JavaScript, Python, SQL. Когда почувствуете уверенность — переходите к веб-разработке и Docker.