mirror of
https://github.com/salmer/CppDeveloperRoadmap.git
synced 2025-12-16 20:17:07 +03:00
72 lines
8.8 KiB
Markdown
72 lines
8.8 KiB
Markdown
# :telescope: Пет-проекты
|
||
|
||
Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, библиотек и фреймворков. Они могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру.
|
||
|
||
Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать хорошим началом для последующего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему.
|
||
|
||
## :arrows_counterclockwise: Сторонние ресурсы
|
||
|
||
* [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://challenges.jeremyjaydan.com/) - [PNG image](https://challenges.jeremyjaydan.com/media/programming-challenges-v4.0.png)
|
||
|
||
Рулетка с идеями для пет-проектов. Настраиваете ожидаемую сложность проекта и запускаете рулетку. Дальше случайность решит за вас, какую задачу придется решать :)
|
||
|
||
|
||
## :boom: Список идей для пет-проектов
|
||
|
||
### :arrow_forward: Игры
|
||
|
||
Ниже представлен список классических видеоигр, которые не содержат в себе сложного искусственного интеллекта или динамическую генерацию мира. Вы можете попробовать реализовать одну из нижеперечисленных игр, а далее дорабатывать дополнительный функционал. В качестве графической библиотеки вы можете использовать [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/
|
||
|
||
|
||
---
|
||
|
||
### :arrow_forward: Приложения
|
||
|
||
При создании приложения начинайте с самой простой реализации консольного приложения. После каждого выполненного шага ставьте более сложную задачу, например: добавить графический интерфейс для приложения, научить приложение запрашивать данные из источника при помощи http-запроса, а затем записать/прочитать полученные данные в тестовый файл/базу данных и т.д. Помните о принципе: "от простого к сложному".
|
||
|
||
* Сетевой чат (на чистых сокетах или при помощи [gRPC](https://grpc.io/docs/languages/cpp/quickstart/))
|
||
* Калькулятор
|
||
* Файловый менеджер
|
||
* Конвертер валют
|
||
* Получение списка Pull-Requests или Issues в любом Github репозитории
|
||
* Автоматизация рутинных: различные вычисления и формирование отчетов в виде таблиц
|
||
|
||
---
|
||
|
||
### :arrow_forward: Студенческие приложения
|
||
|
||
Нижеперечисленные примеры больше подойдут для студентов, которые изучают или недавно изучили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. свежи знания по академическим дисциплинам.
|
||
|
||
* Библиотека линейной алгебры: матрицы, вектора, действия с ними
|
||
* Моделирование различных процессов: физика, теоретическая механика и т.д.
|
||
* Применение численных методов: интегрирование, дифференцирование, аппроксимация, интерполяция и т.д.
|
||
|
||
---
|
||
|
||
[**На главную страницу**](README.md) |