Pet-проекты как ключ к карьерному успеху: гайд по созданию и советыВячеслав Легостин — тимлид backend-разработки Kolesa GroupКевин Систром в свободное от работы время разработал мобильное приложение Burbn, где пользователи могли чекиниться, планировать встречи и загружать фото. После переосмысления проекта с Майком Кригером появилась социальная сеть Instagram. Марк Цукерберг создал Facebook как pet-проект, будучи студентом Гарварда. Дрю Хьюстон начал Dropbox как личный проект, чтобы решить проблему с хранением и синхронизацией файлов, с которой он столкнулся.Эти истории показывают, что небольшие личные проекты могут вырасти в глобальные компании, если они решают реальные проблемы людей.В этой статье Вячеслав Легостин, тимлид backend-разработки Kolesa Group, расскажет про pet-проекты всё, что нужно знать начинающим.Что такое pet-проект и зачем он нуженPet-проект — это личный проект разработчика, который он создаёт в свободное время. Такой проект нужен, в основном, для изучения новых технологий и получения опыта разработки проектов, близких к коммерческим. Также благодаря pet-проекту вы заинтересуете работодателя на собеседовании, показав, на что вы способны. Это может быть любая идея, которая вам интересна: приложение, сайт или даже игра.Гайд по подготовке pet-проектаИдея проектаВыберите тему, которая очень интересна лично вам. Я, например, выбрал своё хобби — пейзажную фотографию. Это позволит вам быть максимально вовлечёнными: сможете придумывать новые фишки и улучшения, находить единомышленников и реальных пользователей.КейсПриведу гайд через призму своего pet-проекта — веб-сайта для фотографов. Потратил на его создание два месяца, чтобы мне не было стыдно его показывать на собеседованиях.Мы не выберем для гайда эту же самую идею: ей не меньше десяти лет. Мы расширим идею на другие направления и адаптируем проект под реалии 2024 года. Сайт должен включать в себя хабы, ленту постов, динамические блоки с полезной информацией, категории, рейтинги. Сайт будет в стиле Reddit.1. Выбираем стекВыбор технологий и языка программирования для проекта должен соответствовать вашим целям и рынку труда. Определите, какой стек используют в компаниях, куда планируете устроиться. Для backend-разработчиков рекомендую PHP, Python или Java.Для сайта выбираем PHP — это относительно простой в освоении язык программирования с большим количеством учебных материалов и фреймворком Laravel. У Laravel мощное комьюнити и много материалов.Для хранения данных всегда выбирайте бесплатные и популярные реляционные базы, такие как MySQL или PostgreSQL.Backend-разработчикам важно знать, как работает frontend. Для быстрой и простой вёрстки советую Tailwind CSS.2. Определяем базовый функционал для сайта- регистрация и авторизация;- создание хабов — аналогов сабреддита {cообщество внутри Reddit на любую тему};- создание постов;- ленты хабов;- главная страница;- лайки, дизлайки, комментарии.На этом этапе вы освоите нужный язык программирования и фреймворк, научитесь работать с базами данных и формировать авторизацию веб-проектов. А также поймёте, как взаимодействуют между собой backend- и frontend.3. Размещаем проект в интернетеКогда базовый функционал готов, пора разместить проект в интернете. Вам нужны будут виртуальный сервер VPS, операционная система (например, Ubuntu) и красивый домен.На данном этапе вы научитесь:- работать с SSH-доступом и SSH-ключами;- настраивать SFTP-протокол и загружать файлы на сервер VPS;- работать с терминалом и командами: cat, ls, nano, vim, history, grep, apt, cp, mv, chmod, chown, artisan и др.;- разворачивать на сервере PHP, MySQL, PostgreSQL, NGINX.Дополнительно можно внедрить систему контейнеризации приложения — Docker. Это популярная и лёгкая в освоении система контейнеризации приложений, содержит библиотеки, системные инструменты, код и среду выполнения.4. Логи и оценка состояния продуктаХороший специалист должен уметь собирать логи и анализировать их. Логи — это хранилище, куда автоматически записываются все события, которые происходили в компьютерной системе. Этим хранилищем могут служить текстовые файлы, собственная база или отдельная система.Необходимо знать, где и как искать логи NGINX, уметь анализировать логи PHP и самого приложения, применять утилиты, такие как Pail из Laravel.5. Развиваем продуктНа этом этапе можно добавить дополнительные функции для улучшения проекта:1) Кеширование с помощью Redis — для ускорения загрузки страниц.2) Поиск на сайте с использованием Elasticsearch — для улучшения пользовательского опыта.3) Настройка CI/CD-пайплайнов — для регулярной автоматизированной сборки кода.4) Работа с очередями через RabbitMQ или Apache Kafka — для асинхронной обработки данных.5) Перевод информации из реляционной базы MySQL в MongoDB — для удобного хранения данных.6) Использование микросервисов на Go — для выделения отдельных функций, например, отправки уведомлений.Рекомендации по подготовке к собеседованиям1) Указывайте в резюме навыки, которые вы приобрели во время работы над проектом. 2) Показывайте проект реальным пользователям и учитывайте их отзывы.3) Повторяйте теорию перед собеседованием и будьте честны: отметьте, что проект был создан для получения опыта.