Что такое pet проект
Pet-проект для джуна. Или зачем и как выбрать pet project. (+личный опыт)
Предисловие
Привет Хабр! Эта публикация написана джуном для джунов (но возможно и специалисты более высокого уровня что-то найдут для себя / своих падаванов).
Зачем нужны pet проекты?
Для саморазвития как разработчика и закрепления изученного материала.
Если Вы днями на пролёт «штурмуете» теорию: читаете посты, смотрите туториалы, но при этом не применяете изученное на практике, то времени на освоение выбранной Вами темы понадобится в разы больше.
Для работающего разработчика pet проект отличная возможность абстрагироваться от рабочих задач и погрузиться в интересную тему. Чаще всего на разработку домашних проектов нет много времени из-за чего код нужно писать быстро и много, а информацию искать по существу не отвлекаясь на лишнее.
Для джуна без постоянного места работы, pet проект заменяет тут самую работу (со стороны разработки). Вы ставите себе задачу/цель и делаете всё возможное что бы её выполнить. При разработке Вы ещё глубже погружаетесь в тему, а иногда находите новые объекты для изучения.
Суммируя pet проекты нам нужны для:
изучения / закрепления нового материала;
получения удовольствия от разработки чего-то интересного лично Вам;
пополнения своего портфолио;
(bonus) есть шанс что Ваш pet проект может кому-то приглянуться и тогда из этого можно получить финансовую выгоду.
Как выбрать и на что обратить внимание?
Я рассматривал этот вопрос со стороны фронтенд разработчика и возможно для других отраслей приведенные ниже тезисы будут не валидны.
Самое главное — разработка должна приносить удовольствие. Технологии, дизайн или что-то ещё не должны вызывать у Вас отвращение, иначе такой pet проект может остановиться на этапе первого коммита.
Технологии
Раз Вы выбрали определенные технологии для своего домашнего проекта, то скорее всего они Вас интересуют и проблема приведенная выше Вас не касается. (Или же Вас заставляют писать на том что Вам отвратно?)
Дизайн
Тут все зависит от человека и ситуации. Есть два варианта:
Запариться и сделать крутейший дизайн.
lvl up как дизайнера;
обычно свой дизайн очень приятен;
так как это собственный макет Вы в нём хорошо ориентируетесь и ещё на этапе дизайна продумываете некоторые фичи.
обычно на это уходит много времени и может получиться ситуация, что макет создавался дольше чем само приложение.
Найти готовый дизайн и работать с ним.
быстро (хотя поиск может затянуться, об этом ниже);
не нужно отвлекаться на дизайн.
не всегда можно найти дизайн для Вашей задумки, особенно если она не типичная;
готовые бесплатные макеты не всегда красивые.
Если авторские идеи не Ваше то на просторах интернета существуют множество тем проектов в которых можно использовать любые нужные Вам технологии.
Вот пару вечно актуальных примеров:
Личный опыт
В этом блоке я раcскажу как придумывались / создавались мои pet проекты.
Начало (AniList)
Шёл июль 2020 года. Спустя семестр изучения JavaScript’а в колледже я решил изучить какой-то фреймворк. Выбор пал на React. Через пару дней ознакомления с фреймворком я наткнулся на серию видеороликов по разработке веб-приложения пиццерии на ютуб канале Archakov Blog. И решил сразу же применять изученное в видео на реальном проекте, но просто переписывать код из видео в IDE было не интересно. По этому я решил делать аниме список.
Выше я писал про два варианта получения дизайна для проекта. Какой же из вариантов выбрал я при создании макета? Оба. Для начала я зашёл на уже существующие сайты с такой-же тематикой потом пролистал Behance и собрал своего «франкенштейна» из собственных идей и кусков уже готовых дизайнов.
Скриншот проекта из Figma
По готовому макету я понял что мне нужно будет где-то брать информацию об аниме (API, AJAX), где-то хранить её (Redux), а также как-то организовать авторизацию и хранение информации о пользователях (Firebase) + работа с версиями файлов(GIT, GitHub). В итоге мне предстояло ознакомиться как минимум с 5 новыми технологиями помимо React.
И в этом я считаю один из плюсов pet проектов. Начиная учить что-то одно, а в конце осваиваешь намного больше чем ожидал.
ToDo list
Следующим проектом должен был стать todo list. Мой одногруппник (тоже начинающий фронтендер) должен был делать frontend на Angular, а я (неожиданно) backend. Тут мне пристояло погрузиться в мир backend’а и может не изучить, но хорошо так ознакомиться с NodeJS, Express, MongoDB, mongoose, cors, dotenv, способами авторизации, деплоем на Heroku и ещё глубже понять работу API.
По итогу вышло так что и я и мой товарищ каждый для себя писали back и front end.
Остальное
Потом было ещё пару проектов. Вкратце напишу что для себя я вынес из них.
Приложение погоды:
рисование на canvas’е;
работа с геолокацией;
анимация React компонентов.
парсинг информации из сайта;
работа с Excel таблицами в NodeJS.
Менеджер подписок:
Магазин аксесcуаров (backend) (в разработке):
более глубоко познал MongoDB + mongoose;
Портфолио (на стадии дизайна):
создание кастомного курсора.
Заключение
Недавно меня постигла идея переписать свой первый pet project (Аниме список), но теперь с новыми навыками: backend на NodeJS, Express, GraphQl вместо Firebase, и frontend React + Apollo Client, ну и дизайн по красивше сделать. Эта мысль является результатом моего прогресcа который я постиг благодаря pet проектам.
«Всякое дело совершенствуется овладением техники. Всякий навык достигается упражнением.» — Гиппократ
Почему мы должны перестать заниматься пет-проектами
Я проработал над своим проектом три года. Причем этот был далеко не первый, у меня скопилось целое кладбище незаконченных проектов. Но ведь на основной работе я вполне успешно справляюсь со своими задачами. Нет проблем ни с оценкой сроков, ни с исполнением.
Конечно, такая ситуация не должна никого удивлять: работа — это работа, а домашний проект должен приносить удовольствие, можно делать самое вкусненькое, а не заниматься однообразной шлифовкой мелких деталей, которые необходимы для релиза.
Все это так, но удовольствие видеть, как твоим продуктом пользуется кто-нибудь еще, видеть, что он решает чьи-то проблемы — несравнимо выше. Так что я решил во что бы это ни стало довести хотя бы один проект до релиза.
Нужно было всего лишь разобраться, что мне мешало сделать это раньше.
Самое начало: что такое пет-проект?
Давайте перестанем заниматься пет проектами, это что-то слишком неопределенное, слишком непонятное, давайте фокусироваться на том, что приведет нас к логическому завершению.
Проект. Просто проект
Каждый знает как работать над проектом. Мы занимаемся этим изо дня в день на основной работе. Вы, наверное, представляете себе все эти таблицы, диаграммы, тайм-трэкеры и думаете, что проект — это скучно. Не стоит переживать. Свой собственный проект — это очень увлекательно. Прежде всего подумайте о перспективе: наблюдать за развитием своего проекта очень приятно. И потом — нужно просто увидеть, как этим пользуется кто-нибудь еще. В любом случае, опыт работы над проектом в качестве и заказчика, и исполнителя, и менеджера никогда не будет лишним.
Терпение безусловно понадобится, но результат стоит этого.
Мне часто приходится повторять себе:
Какова моя цель? Для чего я это делаю?
На пути много разных интересных блестяшек, которые постоянно отвлекают от основной цели. Ответ на этот вопрос поможет правильно расставить приоритеты.
Время
Тайм-менеджмент — это огромная проблема. Написано масса литературы, существует множество лекций и пр., но, конечно, же универсального алгоритма не существует.
Я могу просто дать несколько советов, которые в моем случае работают. Начинайте с планирования. Нет ничего лучше, чем старые добрые диаграммы Ганта. Разбейте свой проект на задачи, сделайте временную оценку каждой задачи, выпишите их. Убедитесь, что для завершения всех задач потребуется больше одной жизни, перенесите некоторые задачи в бэклог «на потом». Повторите все сначала. Опять же, четкое понимание цели поможет расставить приоритеты для каждой задачи.
Кстати, при оценке задачи учтите, что дни — это уже не те самые восьмичасовые рабочие дни. Засекайте время, которые вы потратили на выполнение каждой задачи. Во-первых, это сделает временную оценку более аккуратной. Во-вторых, тайм-трекинг будет хорошей подсказкой, что вы движетесь в правильном направлении (или наоборот — в неправильном). Очень важный момент — таймтрекинг поможет не терять мотивацию в те моменты, когда кажется, что усилия не приносят никаких результатов.
Ресурсы
Изначально может казаться, что у персональных проектов нет ресурсов, которыми нужно управлять, но это не так. Для начала подумайте о своем личном времени. Можете разделить вашу зарплату на количество рабочих часов и получить (очень грубо) вашу стоимость как специалиста в час. Теперь подумайте о деньгах: что дешевле — починить кран на кухне самостоятельно, или заплатить кому-нибудь за эту работу и сэкономить свое время? Если вы собираетесь зарабатывать деньги своим проектом, то почему бы не начать раньше? Вы можете нанять человека для создания сайта, SEO статьи, или проведения маркетингового исследования.
Самый ценный ресурс вашего проекта, его жизненная сила — это ваша мотивация. Не ждите вдохновения, управляйте своей мотивацией как и любым другим ресурсом.
Опять же — никаких серебренных пуль, только советы:
Держите под рукой список задач. Всегда есть что делать, даже если вы не в настроении делать что-то одно, можно заняться и другим. Просто убедитесь, что вы не тратите время на ненужные задачи.
Не дописывайте до точки, оставляйте работу на завтра. У меня есть только 2-3 часа после работы на свой проект. Намного проще продолжить вчерашнюю задачу, чем начинать вникать в новую. А еще это избавляет от «раскачки» (всего 2-3 часа, на фейсбук, любимые блоги и комиксы просто не остается времени).
Сейчас вы прочитали про управление проектом и, возможно, думаете: «А в чем же собственно фан?» Я могу поспорить, что ваш домашний проект очень инновационный. По крайней мере для вас это что-то новенькое (иначе зачем это?).
Хм. Управление инновационным проектом, в условиях полной неопределенности, постоянный поиск. Погодите, разве это не…
Стартап
Стартапы — это очень весело и увлекательно. Спросите кого угодно. Более того, сейчас вы можете найти тонны литературы, видеоуроков, блогов, лекций, курсов о том, как управлять стартапом. Еще лучше: стандартные стартап-техники можно брать и использовать в своем проекте уже прямо сейчас.
Минимально жизнеспособный продукт — MVP
Minimum viable product, или MVP — это общепринятый термин (МЖП звучало бы странно). Стартапы используют MVP чтобы подтвердить (или опровергнуть) гипотезы о продукте. Изначально — «этим будут пользоваться», «это будут покупать», и пр.
MVP в домашнем проекте — не совсем тоже самое, что и в стартапе. Что-то минимально жизнеспособное нужно сделать как можно раньше, с минимальными затратами, но его основная задача — поддерживать вашу мотивацию. Если работать над чем-то, что нельзя «пощупать», это очень быстро надоест.
Например, если мне предстоит написать массу кода перед тем, как я смогу что-нибудь запустить, я делаю юнит тесты. Возможность запустить юнит тесты помогает двигаться дальше, не говоря уже о пользе раннего тестирования.
Что-то рабочее нужно иметь под рукой постоянно. И это не только мотивирует, но и дисциплинирует. Например, заставляет сфокусироваться только на одном изменении, вместо внесения множества изменений за раз, чтобы ничего не сломать, если говорить о коде.
Аудитория
Основная проблема стартапа — поиск своей аудитории. Это тоже можно взять на заметку (есть масса литературы и уроков). Вы не одни, есть еще люди, которые потенциально заинтересованы в вашем проекте также, как и вы сами. Найдите их, расскажите о своей идее. Вы можете найти единомышленников, наслушаться хороших советов и замечаний. В любом случае, отзывы живых людей мотивируют лучше тысячи видео с котиками.
Можно использовать множество других идей из мира стартапов, все зависит от того, чего вы хотите добиться своим проектом.
Продуктивность требует жертв
Времени постоянно не хватает, не только на личные проекты, а вообще. Мы не можем увеличить количество часов в сутках, но мы можем быть более продуктивными.
Режим. Плохие новости, да. Люди наиболее продуктивны, когда живут согласно цикличному графику.
Если сегодня я лягу в 4 утра, завтра я не успею выполнить все задачи на основной работе, прийдется овертаймить, и на персональный проект не останется времени, и т.д. Лучше придерживаться графика.
Спорт. Как ни крути, а тушку нужно поддерживать в хорошем состоянии, иначе — последствия будут печальными. Занятия спортом трудно начать, но зато уже через пару недель тело начнет просить следующую порцию физической нагрузки, да и состояние, когда хочется просто бежать вперед, потому что можешь, словами не описать.
Баланс. Все как всегда, но при наличии персонального проекта ситуация становится более критичной. Я и сам много читал про важность уметь балансировать, но при этом умудрялся загнать себя в burnout. Burnout — это состояние физического и эмоционально истощения. Даже понимая свое состояние, уже не остается сил на то, чтобы переключиться, поехать куда-нибудь, просто отдохнуть. И ты действуешь по привычке, как белка в колесе, не в состоянии вырваться из этого круга.
Вот и все. Я надеюсь, что эта статья поможет вам закончить ваш домашний проект, а с ним Мир станет пусть чуточку, но лучше.
Pet-проекты: зачем они нужны, и стоит ли тратить на это время
Личные проекты для разработчиков и инженеров – важная и интересная тема. В интернете есть множество упоминаний того, как такие проекты приводят к масштабным достижениям – так было в случае нобелевских лауреатов по физике Андрея Гейма и Константина Новоселова, чей эксперимент первоначально состоялся вечером в пятницу, когда ученые по традиции тестировали различные безумные на первый взгляд идеи.
Многие компании также пытаются стимулировать такую активность работников – в Google было правило 20%, которое привело к рождению Gmail, AdSense и Google News, а в Twitter инженеры получали неделю свободную от обычных обязанностей для экспериментов. Да что далеко ходить – мы делали вебинар с Android-разработчиком Дмитрием Рязанцевым (вот его статья про работу на Toptal) – запущенную им игру Draw and Ride скачали 250,000 раз, а начиналась она именно как pet-проект.
Звучит вдохновляюще, но насколько подход pet-проектов актуален в 2021 году? Считают ли до сих пор инженеры наличие таких проектов важным для себя и профессионального развития? С какими проблемами сталкиваются те, кто ими занимается? В новой статьей мы решили найти ответы на эти вопросы.
Есть целый ряд аргументов, которые всегда приводят сторонники личных хобби-проектов. Вот главные и них.
Разработчик из Лондона Чанна Джайамуни (Channa Jayamuni) в своей статье на LinkedIn так описывает пользу pet-проектов:
Разработка софта – отнюдь не самая увлекательная профессия до тех пор, пока вам не дали поработать над любимыми задачами.
Если вы не работаете в Google или в похожей продвинутой компании с интересными проектами и низким уровнем стресса, то вряд ли ваша работа сплошь состоит из таких задач.
В большинстве случаев разработчик может ожидать получить смесь из унылой рутины и относительно неплохих задач. Далеко не всем везет работать с новейшими технологиями в профессиональных средах, чтобы оставаться на острие развития отрасли просто выполняя рабочие обязанности.
По мнению инженера, решить эти проблемы наилучшим образом помогает именно развитие собственных проектов в свободное время.
Многие руководители прямо заявляют о том, что наличие портфолио собственных проектов у инженера – один из ключевых пунктов при найме.
Так директор компании-разработчика открытой NoSQL базы данных ravendb Айенде Райен (Ayende Rahien) говорит о том, что при поисках разработчиков смотрит на наличе страсти к работе. По мнению топ-менеджера, у специалистов, которые не могут найти время на развитие собственных проектов, такой страсти нет, они не собираются выходить за рамки рабочих обязанностей. Нанимать таких разработчиков в небольшую команду может быть не лучшей идеей.
Майк Миллер (Michael Miller) работает на позиции Engineering Manager в Bloomberg LP и считает, что компании должны официально позволять ведущим специалистам развивать свои проекты в рабочее время, и что такой подход может быть отдельной HR-плюшкой для талантливых работников:
Ваша задача – делать таких ведущих работников максимально счастливыми. Никогда не знаешь, что произойдет, если позволить талантливому специалисту развивать свою страсть.
Вполне вероятно, это позволит открыть новую супер-звезду. Понятно, что возможность официально развивать свои проекты нужно заслужить.
Если ты едва справляешься с непосредственными обязанностями, то о каких pet-проектах может идти речь?
Несмотря на очевидные плюсы, существует и целый ряд трудностей при работе над дополнительными проектами вне работы. Кто-то называет эти трудности мифами, как инженер Twitter Аннель Де Джагер (Annelle De Jager). Тем не менее, вот как выглядит этот список:
Написание кода – творческая работа, которая требует значительного количества сил. Инженерам просто необходимо отдыхать, плюс никто не отменял домашние дела, общение с друзьями и родственниками. В таких условиях найти время еще и на pet-проекты довольно трудно.
Пункт частично вытекает из предыдущего. Если у человека есть семья и друзья, а он в какие-то моменты делает выбор не в их пользу, а в пользу написания кода – помимо работы! – но за который ему даже с высокой вероятностью не заплатят – это может выглядеть странно и даже вызывать обиды.
Мы решили прояснить отношение разработчиков к ведению pet-проектов в текущих условиях удаленки и глобальной пандемии. Поэтому мы опросили знакомых инженеров из таких компаний как Gett, «Лаборатория Касперского», Uber, Smartcat и др. и задали им вопросы о том, развивают ли они pet-проекты и с какими трудностями сталкиваются при этом. Вот главные выводы по итогам опроса:
Если вы ведете свои pet-проекты, укажите в боте @g_jobbot информацию о своих проектах, чтобы получать вакансии с учетом использованных в них технологий. Новая работа – отличный способ «монетизации» хобби!
Ведете ли pet-проекты вы? Если да, то зачем?
Какой пет-проект написать junior-разработчику, чтобы сразу получить работу
Проекты junior-разработчика говорят о его способностях больше, чем резюме. Если вы придумали подходящий проект и защитили его на собеседовании — можете получить работу, несмотря на отсутствие опыта. В Mail.ru Cloud Solutions узнали у работодателей, на что обратить внимание при работе над пет-проектом.
Банальный, но рабочий совет — сначала определитесь, в какой сфере и на какой позиции вы хотели бы работать, только потом делайте проект. Работодатели порой встречаются с неуверенными новичками, которые могут прийти на позицию фронтенд-разработчика и показать движок блога на PHP.
Бессмысленно показывать код простого интернет-магазина в компании, которая разрабатывает ПО для обработки видео или занимается машинным обучением. Хотите заниматься веб-разработкой — покажите веб-приложение, суровым бэкендом — хорошо масштабируемое приложение, которое справляется с большой нагрузкой.
Определитесь, где бы вы хотели работать, например, в банке, медицинской компании или ритейле. Сейчас работодателям важно не только умение писать на конкретном языке, но и общее понимание индустрии. Хотите работать в финансовой сфере — лучше показать на собеседовании сложный инвестиционный калькулятор, а не интернет-магазин по продаже запчастей.
Убедитесь, что пет-проект демонстрирует нужные в вакансии навыки. Например, работодателю требуется знание React, а у вас проект на чистом JavaScript — перепишите его на фреймворке.
Если вы идете на собеседование по Java, то покажите проекты мини-порталов, которые показывают опыт работы с базами данных, разграничением прав, масштабируемостью, алгоритмами. И пусть это будет очередной интернет-магазин, главное, чтобы он был сделан качественно.
Работодатели говорят: для собеседования новичкам можно не оптимизировать код до идеального состояния. Главное — понимать, как все работает и почему вы используете именно эту технологию или функцию, а не какую-то другую.
Можно даже заимствовать чужие решения. Но важно, чтобы вы могли объяснить, как это решение работает.
Будьте честны: если скопировали код и не успели с ним разобраться, то так и говорите. Добавили решение для эксперимента, а раньше использовали другой вариант — расскажите об этом. Хороший специалист с опытом собеседований быстро вычислит обман с помощью пары дополнительных вопросов. Копировать не стыдно, учиться не зазорно, а вот пытаться показать знания там, где их еще нет — некрасиво.
Не проблема, если самостоятельный проект новичка далек от идеала или в нем используют не самые эффективные алгоритмы, считает руководитель отдела разработки компании Aim Алексей Ладейщиков. Пусть в них будет созданная с нуля функциональность, несмотря на то, что в языке уже есть решения «из коробки».
Основная ценность самостоятельных проектов — как раз в таких особенностях. На собеседовании кандидат может показать пути оптимизации кода и продемонстрировать свое развитие как специалиста.
Не нужно в пет-проектах пытаться показать все, что вы умеете. Лучше не превращать код в сборник из десятков библиотек, а использовать несколько решений, понимая концепцию инструментов и принцип их работы.
С помощью пет-проекта можно не только показать работодателю умение кодить или знание фреймворков, но и продемонстрировать, насколько вы готовы к реальной работе.
Показывайте законченный продукт. Полуфабрикаты и код, который “точно будет работать, но вот тут еще нужно дописать”, оставляют негативное впечатление. Демонстрация проекта, который работает без дополнительных манипуляций, покажет, что вы умеете доводить дело до конца.
Если есть возможность, организуйте пространство, где можно “пощупать” ваше творение, например, с помощью сервиса с бесплатным хостингом.
Будьте аккуратны и внимательны. В пет-проекте важно не просто сделать, а продемонстрировать, что вы готовы к полноценной работе по принятым циклам разработки.
Например, полезно будет сначала прописать требования к проекту, сделать спецификации, а только потом писать код. Или написать юнит-тесты, покрыть тестами модули или функции.
За покрытие тестами сразу в рай без очереди. Для меня тесты, особенно от junior-специалистов — показатель того, что разработчик неравнодушен. Человек хочет дополнительно убедиться, что его код работает правильно, он предусмотрел поведение на корнер-кейсах. Важно самому искать ошибки, а не ждать, пока расстроенные пользователи придут к тебе с замечаниями.
DevOps-инженерам сложнее сделать сделать пет-проект, чем программистам. Новичку проблематично даже присоединиться к open source проекту — неопытного человека никто не допустит в архитектуру. Выход — моделировать реальную работу на тестовых проектах.
Начинающему системному администратору или DevOps-инженеру стоит разобраться с Linux, возможно, сделать свою сборку. Написать небольшой проект, например, на популярном среди инженеров Python, построить для него CI/CD. Возьмите тестовый аккаунт в облаке, сейчас очень популярен Kubernetes, и поиграйтесь с CI/CD.
Разработка ПО — командная работа, об этом часто забывают новички, пытаясь сделать домашние проекты. Вместо того, чтобы делать всю работу самостоятельно, попробуйте найти единомышленников. Например, если вы бэкенд-разработчик, не используйте Bootstrap, а отдайте верстку начинающему фронтенд-разработчику. Найти коллег можно на профильных форумах, в тематических Телеграм-чатах или на Хабре.
Работая командой, вы сможете не только попрактиковаться в технологиях, но и получить представление о том, как выглядит реальная работа.
IT-специалист — по большей части командный игрок. HR с большей вероятностью заинтересуется в junior-специалисте, который понимает, как работать в команде.
руководитель проекта по созданию прототипов Zero2Hero и IT-рекрутинговой компании Lucky Hunter