Привет, Хабр! Меня зовут Дмитрий Дзюба, я руководитель центра практик «Архитектура» в МТС Digital. Эта статья – о Pet project, собственных проектах, которыми многие из нас занимаются в свободное время. Поговорим о том, нужны ли такие увлечения архитектору и как Pet project может помочь в работе. Также я расскажу о своих проектах и опыте, который я с их помощью получил. Добро пожаловать под кат!
Как-то раз я наткнулся на пост Oren Eini, CEO компании Hibernating Rhinos LTD - разработчика RavenDB. Орен рассказал о том, почему при поиске разработчиков он выбирает тех, кто в свободное время работает над личными Pet-проектами.
В этой статье мне понравилась мысль о том, что Pet project – это хороший индикатор того, что в человеке есть энтузиазм к профессии. Именно энтузиазму работника обучить никак не получится – он либо есть, либо его нет. Кроме того, такой проект – признак любви к тому, чем занимаешься.
Я задумался: а полезен ли Pet project для архитектора или эта «фишка» работает исключительно с разработчиками?
Архитекторы бывают разные
Начнем с того, что по работе мне приходится общаться с тремя «видами» архитекторов:
Системный архитектор
Работает в небольшой продуктовой agile-команде, обычно он совмещает функции собственно архитектора и разработчика. Одна из основных его обязанностей – проектировать архитектуру своего цифрового продукта.Архитектор решения
Он проектирует сложные интеграционные решения, взаимодействуя с большим числом продуктовых команд. Такие архитекторы дистанцированы от программного кода и в своей работе оперируют не внутренним дизайном приложения, а целыми системами.Корпоративный архитектор
Этот специалист управляет архитектурой всей компании в целом, взаимодействуя со стейкхолдерами и выступая в роли драйвера исполнения стратегии. Он наиболее далек от программного кода.
С системным архитектором все ясно – это такой «разработчик с дополнительными способностями», для которого способ Oren Eini работает почти всегда, ведь умение писать код – один из основных скиллов этого специалиста. А вот с архитектором решений и корпоративным архитектором ситуация иная.
Зачем архитектору Pet project?
Архитектору полезно развивать свои Pet-проекты для того, чтобы:
Держать руку на пульсе актуальных технологий
Технологические стеки все время меняются и развиваются. И если лет 10 назад было круто делать приложения в классической сервис-ориентированной архитектуре, то сейчас мы не представляем современное приложение без микросервисов. Меняются и технологии, которые облегчают построение приложений подобного класса: сервера баз данных, распределенные кэши, брокеры сообщений, интеграционные среды и так далее.
Современный архитектор – тот, кто хорошо знает и разбирается в технологиях и может проектировать решения, отвечающие требованиям надежности, доступности, масштабируемости. И Pet-проект – это отличная возможность поиграться с подобными технологиями. Например, я лично знаком с архитекторами, которые заводят у себя дома небольшие Kubernetes-кластеры для решения задач машинного обучения.
Уметь разговаривать с разработчиками
Бывший главный архитектор компании Allianz Gregor Hohpe в своей статье The Architect Elevator – Visiting the upper floors доступно рассказывает про роль архитектора, как связующего звена между топ-менеджментом и технологическими командами. Такой специалист должен уметь общаться как высоким начальством, так и с разработчиками.
Наличие возможности ощутить себя в шкуре разработчика, создавая свой Pet-проект, – это хороший способ понять, как думает разработчик. Так архитектору проще общаться с командой на одном языке.
Pet project также помогает не отрываться от реальности, чтобы избежать превращения в архитектора «Башни из слоновой кости», проектирующего решения, которые невозможно реализовать. Кстати, Asanka Abeysinghe из компании WSO2 в своей статье про ключевые навыки архитектора, особенно выделяет именно Implementation – умение работать с кодом.
Избежать выгорания
В эру пандемии и удаленной работы вероятность эмоционального выгорания особенно высока. Для меня одна из главных причин выгорания – усложнение получения обратной связи из-за уменьшения интенсивности общения в команде на удаленке. Архитекторы часто страдают от того, что между принятием архитектурного решения и реализацией его на продуктиве проходит слишком много времени. И чем больше систем-продуктов участвует в решении – тем дольше затягивается эта пауза.
В интернете много исследований на эту тему, авторы которых дружно подчеркивают один факт: программирование – это такой же хороший способ бороться с выгоранием, как музыка или спорт. А еще программирование – это отличная зарядка для ума.
Итак, причин завести Pet project набралось более достаточно. Остался вопрос – где взять идею для проекта? Поделюсь своим опытом.
Lego-робот - охотник на кошек
Пять лет назад я купил своей 9-летней дочке набор Lego Mindstorm – это игровая платформа для создания роботов. С помощью нее можно собирать и программировать разные интересные штуки.
![Собираем Mindstorm nxt Собираем Mindstorm nxt](https://habrastorage.org/getpro/habr/upload_files/ec6/d3c/362/ec6d3c36231be2b71e422fed683aaed2.jpeg)
Поначалу с ней было крайне интересно играть, особенно с детьми, но со временем этот интерес стал угасать. Мне захотелось вдохнуть в игрушку новую жизнь. Появилась задача: с помощью робота построить карту мест в квартире, где любит спать наша кошка по имени «Белка». По моей задумке робот должен был осуществлять обход квартиры и при нахождении кошки отмечать на карте места, где он встретил «объект».
Фаза проекта №1: Выявление технической возможности
Выяснилось, что на Lego Minstorm EVA можно установить Linux c Java, в котором есть API для управление роботом. К нему также можно подключить USB-камеру и WiFi-адаптер. Поэтому проблем с доступом в сеть и получением изображений для распознавания быть не должно.
Фаза проекта №2: Придумываем архитектуру
Изначально я решил сделать простую многоуровневую архитектуру с умным роботом и распознаванием изображений с помощью Microsoft Azure Vision API.
![Архитектура "Версия 1" Архитектура "Версия 1"](https://habrastorage.org/getpro/habr/upload_files/355/51f/653/35551f6531382f3b488d9f7ad2b3de0d.png)
Клиент я сделал с использованием QT, на роботе был поднят простой HTTP-сервер, а код взаимодействия с моторами, датчиками и камерой был написан на Java.
Однако такая архитектура оказалась не слишком эффективной. Неожиданной проблемой оказалось время автономной работы робота – выполняя много задач, он очень быстро «съедал» заряд аккумулятора. Поэтому пришлось вынести все, не связано с управлением «железом» робота, в во внешний сервер.
Так выглядит финальная архитектура:
![Архитектура "Версия 2" Архитектура "Версия 2"](https://habrastorage.org/getpro/habr/upload_files/568/bea/1d8/568bea1d8c30840295bdf386e2654079.png)
Что получилось
На финальных испытаниях робот выглядел так:
![Испытание алгоритма построения карты и обхода помещения Испытание алгоритма построения карты и обхода помещения](https://habrastorage.org/getpro/habr/upload_files/aa0/45f/f69/aa045ff699fc3cbcfe3fadbd3dcf2be8.jpeg)
Удалось ли реализовать мою идею? К сожалению, нет. Я научил робота обходить помещение и даже распознавать кошку, однако появилось слишком много «но».
![](https://habrastorage.org/getpro/habr/upload_files/930/118/dc8/930118dc86fc029716ce9c83dbc29fdd.jpg)
Моторы робота оказались слишком шумными, они пугали кошку, которая убегала всякий раз при появлении механического «дозорного». Такой итог меня, впрочем, не слишком расстроил, ведь в Pet-проектах процесс доставляет не меньше удовольствия, чем результат.
Автомобильная деревня
Вторым проектом я занимаюсь сейчас. Во время отдыха на даче родилась идея – сделать сервис, который считает сколько людей сейчас находятся в нашей деревне. Заодно можно за пару кликов узнать – приехали соседи на дачу или еще нет?
Сперва мне показалось, что сделать это просто – въезд в деревню один и оснащен камерой видеонаблюдения. Дело за малым – подключиться к ней и считать количество машин которые въехали в деревню и выехали из нее.
Вот какие архитектурные решения (ADR) я использовал в этом проекте.
ADR 1 Как считать машины?
Есть два варианта: распознавать сами машины и различать их госномера.
Плюс первого варианта – он кажется проще. Но хочется понимать, въезжает машина или выезжает. Кроме того, такая схема не даст информации о том, приехал ли конкретный сосед? Поэтому я выбрал вариант с распознаванием номеров. Для этого будем использовать известное решение.
OpenALPR – это библиотека с открытым исходным кодом для автоматического распознавания номерных знаков, написанная на C++ с привязкой к C#, Java, Node.js, Go и Python. Библиотека анализирует изображения и видеопотоки для идентификации номеров. На выходе получается текстовое представление любых символов номерного знака.
ADR 2 На чем делать сервер и где его хостить?
С облаками мне связываться не хотелось (да, жалко денег за подписку). Поэтому я решил выбрать решение, которое позволит мне хостить сервис прямо на даче.
Электричество в деревне периодически пропадает, поэтому нужно подумать о бесперебойной работе сервиса.
Я остановился на Jetson Nano – это одноплатник от NVidia с возможностью запускать нейронки. Плюс в том, что его можно запитать от powerbank.
![Испытания время автономной работы Испытания время автономной работы](https://habrastorage.org/getpro/habr/upload_files/064/7d7/760/0647d7760dece0dbf8e061db58c76409.jpeg)
ADR 3 На чем писать сервис?
Сервис для моей цели должен быть легким, потреблять мало процессорных мощностей и не тормозить. По этому в качестве языка разработки я выбрал C++ и распространенный фреймворк для написания встроенных сервисов. Фреймворк актуальный, быстрый и используется большим количеством известных компаний.
Актуальное состояние – я разработал прототип, который может обрабатывать картинки с камеры и делает попытки распознавать номера проезжающих автомобилей. К сожалению, разрешение камеры не дает возможность распознать номер с достаточным качеством. И похоже, что мне придется еще глубже погрузиться в технологии идентификации объектов на изображении. Но меня это только радует, ведь цель проекта – изучить что-то новое для себя.
Заводить ли Pet project?
Какие выводы я сделал о пользе Pet-проектов конкретно для себя:
Они позволяют мне не забывать навыки программирования, ведь писать код самому – это круто!
Они стимулируют погружаться в новые для меня области, такие как машинное обучение.
Они позволяют мне применять навыки архитектора «в бытовых вопросах».
И помните, что идей для своих Pet-проектов вокруг очень много, нужно только присмотреться. =)
А у вас уже есть опыт ведения Pet project? Расскажите о нем в комментариях. Если же вы только планируете завести такой проект – поделитесь своими идеями, обсудим их вместе!
Комментарии (8)
snegprog
18.03.2022 10:04+1Да, пет-проект это круто, но что делать если увлечен своим проектом на работе (тоже работаю в "МТС Диджитал"), бывает засиживаешься до глубокой ночи или встаешь вместе с петухами и новыми мыслями как реализовать какую-то фичу, подписан на хабр, на несколько телеграмм каналов, читаешь различные статьи по разработке, читаешь книги, НО при этом нет пет-проекта, просто не хватает времени, сил и просто не видишь необходимости т.к. все свои мысли имеешь возможность реализовать на работе. Это значит я не увлеченный человек?
Sklott
18.03.2022 11:36+1Заметил на своем опыте такую тенденцию: чем старше становишься - тем меньше pet-проектов. Пока молодой, свободный и задорный - то нет проблем. Как появляется семья, дети, другие увлечения и обязанности - на pet-проекты уже практически ни остается ни времени ни сил и моральных и физических...
Пока у меня присутствует pet-проект, но добираюсь я до него уже достаточно редко...
dvdemon Автор
18.03.2022 13:23+1В моем случае удалось совместить - проект с "кошкой" мы делали вместе с дочкой. Дочка собирала робота - я писал программу. Получилось и весело и интересно.
Vikingg
18.03.2022 17:02+2На самом деле умение довести проект до состояния "не стыдно показать" это уже отдельный успешный проект) Pet проекты однозначно да, и делать их вдвоем гораздо легче! Хотя бы с дочкой или кошкой.
expdxx
С одной стороны да, я согласен, пет-проект важен и для архитектора в том числе. Тем более если волею судеб на основной работе не приходится кодить.
С другой стороны, такое проведение досуга такая себе смена деятельности. Нет, вроде как она есть, есть даже вознаграждение мозга за решенную задачу. Но сами задачи слишком схожи с рабочими, да ещё и предполагают присутствие за компьютером. А после 30-ти мучительно хочется сохранить зрение и работу мозга.
Поэтому моё имхо заключается в том, что лучше бы заинтересовать себя чем-то классным, напрямую не связанным с ИТ. Архитектору и так приходится много читать, плюс я не могу себе представить профессии без постоянного обучения чему-либо.
Лично меня привлек автоспорт и авторство. Первое началось давно и отлично переключает от ИТ, второе дополнительно качает навык презентации своей работы и написания читаемой техдоки. И волки сыты, и крыша на домике цела, плюс есть некая антихрупкость: в случае каких-то адских ситуаций можно найти халтуру тем же копирайтером.
dvdemon Автор
Согласен. Иметь хобби, которое позволяет забыть на время "виртуальный" мир в которым мы живем, как разработчики - это классно!