Files
CppDeveloperRoadmap/Russian/PetProjects.md
2021-12-10 23:05:28 +03:00

72 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Пет-проекты
Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, а также библиотек и/или фреймворков. Также пет-проекты могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру.
Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать началом для вашего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему, или же список вдохновит на какую-либо собственную идею!
## Сторонние ресурсы
* [Google Summer of Code](https://summerofcode.withgoogle.com/archive)
Коллекция проектов, которые предлагались различными компаниями или комьюнити в рамках ежегодной программы стажировки студентов от Google. Архив содержит проекты за последние несколько лет. Представлено большое количество проектов для языка C++. Возможно вы найдете для себя что-то интересное в архиве для практики, либо попробуете свои силы в будущих стажировках.
* [Project based learning - C++](https://github.com/practical-tutorials/project-based-learning#cc)
Репозиторий содержит коллекцию пет-проектов, собранные для различных языков программирования. Также включает обширный список идей для C++.
* [Programming challenges](https://programming-challenges.jeremyjaydan.dev/) - [PNG изображение](https://programming-challenges.jeremyjaydan.dev/media/programming-challenges-v4.0.png)
Рулетка с идеями для пет-проектов. Настраиваете ожидаемую сложность проекта и запускаете рулетку. Дальше случайность решит за вас, какую задачу придется решать :)
## Список идей для пет-проектов
### Игры
Ниже представлен список классических видеоигр, которые не содержат в себе сложного ИИ или динамическую генерацию мира. Вы можете реализовывать одну из нижеперечисленных игр, а далее дорабатывать дополнительный функционал. В качестве графической библиотеки вы можете использовать [SFML](https://www.sfml-dev.org/). Это простая в использовании библиотека, которая предоставляет достаточный набор возможностей для создания несложных графических интерфейсов для 2D или 2.5D игр при помощи [спрайтов](https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0)). Если же вы захотите сделать что-то более сложное, где применяется физика, то можете начать с простых движков, например: [Box2D](https://box2d.org/) или же освоить более продвинутые: [Cocos2D](https://www.cocos.com/en/), [Unreal Engine](https://www.unrealengine.com/en-US/) и т.п. Не забывайте о правиле: "от простого, к сложному". Начинайте с простого, и постепенно повышайте сложность.
* [Змейка](https://habr.com/ru/company/microsoftlumia/blog/136629/)
* [Тетрис](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B8%D1%81)
* [Жизнь](https://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%B0_%C2%AB%D0%96%D0%B8%D0%B7%D0%BD%D1%8C%C2%BB)
* [Пятнашки](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B8%D1%81)
* [Арканоид](https://ru.wikipedia.org/wiki/Arkanoid)
* [Сапер](https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BF%D1%91%D1%80_(%D0%B8%D0%B3%D1%80%D0%B0))
* [2048](https://ru.wikipedia.org/wiki/2048_(%D0%B8%D0%B3%D1%80%D0%B0))
* [Пасьянс](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D1%8C%D1%8F%D0%BD%D1%81)
* [Пасьянс-паук](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%83%D0%BA_(%D0%BF%D0%B0%D1%81%D1%8C%D1%8F%D0%BD%D1%81))
* [Пинг-понг](https://ru.wikipedia.org/wiki/Pong_(%D0%B8%D0%B3%D1%80%D0%B0))
* [Donkey Kong](https://ru.wikipedia.org/wiki/Donkey_Kong)
* [Лабиринт](https://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B1%D0%B8%D1%80%D0%B8%D0%BD%D1%82_(%D0%B6%D0%B0%D0%BD%D1%80))
* [Сетевые игры для 2-4 игроков: пинг-понг, морской бой, покер, шашки, шахматы и т.д.](https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%B3%D1%80%D0%B0)
Рекомендуем ознакомиться с нижеперечисленными источниками, которые содержат больше информации о различных алгоритмах для игростроения. Они могут пригодиться для одной из вышеперечисленных игр, или же для собственных идей:
* https://www.redblobgames.com/
* http://www.squidi.net/three/
---
### Приложения
При создании приложения начинайте с самой простой реализации консольного приложения. После каждого выполненного шага ставьте более сложную задачу, например: добавить графический интерфейс для приложения, научить приложение запрашивать данные из источника при помощи http-запроса, а затем записать/прочитать полученные данные в тестовый файл/базу данных и т.д. Не забывайте о принципе: "от простого к сложному".
* Сетевой чат (на чистых сокетах или при помощи [gRPC](https://grpc.io/docs/languages/cpp/quickstart/))
* Калькулятор
* Файловый менеджер
* Конвертер валют
* Получение списка Pull-Requests или Issues в любом Github репозитории
* Автоматизация рутинных: различные вычисления и формирование отчетов в виде таблиц
---
### Студенческие приложения
Нижеперечисленные примеры больше подойдут для студентов, которые проходят или недавно проходили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. ещё свежи знания по академическим дисциплинам.
* Библиотека линейной алгебры: матрицы, вектора, действия с ними
* Моделирование различных процессов: физика, теоретическая механика и т.д.
* Применение численных методов: интегрирование, дифференцирование, аппроксимация, интерполяция и т.д.
---
[**На главную страницу**](README.md)