diff --git a/English/PetProjects.md b/English/PetProjects.md index 21c407b..1a04b14 100644 --- a/English/PetProjects.md +++ b/English/PetProjects.md @@ -1,3 +1,69 @@ # Pet-projects -TODO: Add project ideas +The pet-projects are a great chance to gain hands-on experience when learning a programming language or libraries and/or frameworks. The pet-projects can also become a starting point for interviews and an invitation to dialogue if you start your career. + +There are often difficulties with finding and choosing the idea of a pet-project. We tried to put together a small collection of links and ideas that can be a start for your inspiration. After reading it, you will be able to choose the most suitable idea or it will inspire you to some idea of your own! + + +## External links + +* [Google Summer of Code](https://summerofcode.withgoogle.com/archive) + +A collection of projects that were offered by various companies or the community as part of the annual student internship program from Google. The archive contains projects from the last few years. A large number of projects for the C++ language are presented. Perhaps you will find something interesting for yourself in the archive for practice, or try your hand at future internships. + +* [Project based learning - C++](https://github.com/practical-tutorials/project-based-learning#cc) + +The repository contains a collection of pet projects collected for various programming languages. Also includes an extensive list of ideas for C++. + +* [Programming challenges](https://programming-challenges.jeremyjaydan.dev/) - [PNG изображение](https://programming-challenges.jeremyjaydan.dev/media/programming-challenges-v4.0.png) + +Roulette with ideas for pet projects. You set up the expected complexity of the project and run the roulette. Then randomness will decide for you what task you will have to solve :) + + +## The list of pet-project ideas + +### Games + +Below is a list of classic video games that do not contain complex AI or dynamic world generation. You can implement one of the following games, and then refine additional functionality. As a graphics library, you can use [SFML](https://www.sfml-dev.org/). This is an easy-to-use library that provides a sufficient set of features for creating simple graphical interfaces for 2D or 2.5D games using [sprites](https://en.wikipedia.org/wiki/Sprite_(computer_graphics)). If you want to do something more complex where physics is applied, you can start with simple engines, for example: [Box2D](https://box2d.org/) or learn more advanced ones: [Cocos2D](https://www.cocos.com/en/), [Unreal Engine](https://www.unrealengine.com/en-US/) etc. Don't forget about the rule: "from simple to complex." Start with a simple one, and gradually increase the difficulty. + +* [Snake](https://en.wikipedia.org/wiki/Snake_(video_game_genre)) +* [Tetris](https://en.wikipedia.org/wiki/Tetris) +* [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) +* [15 puzzle](https://en.wikipedia.org/wiki/15_puzzle) +* [Arkanoid](https://en.wikipedia.org/wiki/Arkanoid) +* [Minesweeper ](https://en.wikipedia.org/wiki/Minesweeper_(video_game)) +* [2048](https://en.wikipedia.org/wiki/2048_(video_game)) +* [Solitaire](https://en.wikipedia.org/wiki/Solitaire) +* [Spider Solitaire](https://en.wikipedia.org/wiki/Spider_(solitaire)) +* [Ping-pong](https://en.wikipedia.org/wiki/Pong) +* [Donkey Kong](https://en.wikipedia.org/wiki/Donkey_Kong_(video_game)) +* [Labyrinth](https://en.wikipedia.org/wiki/Labyrinth:_The_Computer_Game) +* [Network games for 2-4 players: ping-pong, poker, chess, battleships, etc.](https://en.wikipedia.org/wiki/Online_game) + +It's recommended reading the following sources, which contain more information about various algorithms for gamedev. They can be useful for one of the above games, or for your own ideas: +* https://www.redblobgames.com/ +* http://www.squidi.net/three/ + + +--- + +### Applications + +When creating an application, start with the simplest implementation of a console application. After each completed step, set a more complex task, for example: add a graphical interface for the application, teach the application to request data from the source using an http request, and then write/read the received data to a test file/database, etc. Do not forget about the principle: "from simple to complex." + +* Network chat (raw sockets or using [gRPC](https://grpc.io/docs/languages/cpp/quickstart)) +* Calculator +* File Manager +* Currency Converter +* Getting a list of "Pull-Requests" or "Issues" in any Github repository +* Routine automation: various calculations and generation of reports in the form of tables + +--- + +### Student applications + +The following examples are more suitable for students who are passing or recently passed basic disciplines: linear algebra, analytical geometry, mathematical analysis, physics, etc. Tasks for the application of the studied theory will help to simultaneously "catch two birds with one stone": to consolidate the studied theory in practice and to practice programming. This path is not closed to others, but it is obviously easier for students, because knowledge of academic disciplines is still fresh. + +* Linear algebra library: matrices, vectors, calculations, etc. +* Modeling of various processes: physics, theoretical mechanics, etc. +* Application of numerical methods: integration, differentiation, approximation, interpolation, etc. \ No newline at end of file diff --git a/Russian/PetProjects.md b/Russian/PetProjects.md index 3326a5c..6d5fc2a 100644 --- a/Russian/PetProjects.md +++ b/Russian/PetProjects.md @@ -1,3 +1,68 @@ # Пет-проекты -TODO: Add project ideas +Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, а также библиотек и/или фреймворков. Также пет-проекты могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру. + +Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать началом для вашего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему, или же список вдохновит на какую-либо собственную идею! + +## Сторонние ресурсы + +* [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 репозитории +* Автоматизация рутинных: различные вычисления и формирование отчетов в виде таблиц + +--- + +### Студенческие приложения + +Нижеперечисленные примеры больше подойдут для студентов, которые проходят или недавно проходили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. ещё свежи знания по академическим дисциплинам. + +* Библиотека линейной алгебры: матрицы, вектора, действия с ними +* Моделирование различных процессов: физика, теоретическая механика и т.д. +* Применение численных методов: интегрирование, дифференцирование, аппроксимация, интерполяция и т.д. \ No newline at end of file