Мы пообщались с Алексеем, руководителем отдела разработки ПО.
Поговорили о функциях разработчика в IT компании и о том, какие навыки и знания нужны, чтобы стать успешным в этой сфере. Также Алексей поделился своим опытом управления командой и рассказал о наиболее сложных процессах в разработке.
КТО ТАКИЕ РАЗРАБОТЧИКИ
💬Как бы ты описал роль разработчика в IT компании?
Алексей: — Продукт компании – программные решения.
Разработчик, на мой взгляд, одно из основных звеньев в длинной цепи производства продукта: когда идеи, сценарии, дизайн «высекаются в камне».
Нам поступают требования, спецификации, как должен выглядеть конечный результат, сценарии работы программы, по которым мы и пишем наши решения.
После реализации – обратная связь от команды тестирования и конечного потребителя решения. Поэтому очень важно сделать решение качественным и легко поддерживаемым.
💬Какие навыки и знания нужны, чтобы стать успешным разработчиком?
Алексей: — Самый большой навык, которым должен обладать разработчик, – готовность к изменениям.
В отрасли меняется всё и постоянно. Меняются требования, сложность систем, технологии, с помощью которых мы реализуем продукты.
Поэтому необходимо всегда быть в курсе, что происходит, какие новые возможности появляются. Только так можно идти в ногу со временем и эффективно решать задачи, которые требуются нашим клиентам.
Хорошая практика, например, учить по одному новому языку в год. И, конечно, иметь хороший технический базис, чтобы понимать на фундаментальном уровне «как это все работает».
💬Какие программные языки и технологии ты обычно используешь в своей работе?
Алексей: — Технологические стеки в современном мире весьма разнообразны, и на каждом из них можно в принципе реализовать все, что хочется.
Критерием выбора стека для нас были следующие: распространенность и известность. Так мы можем приглашать инженеров, обладающих необходимыми знаниями.
Еще один критерий: поддержка и развитие платформ. Мы стараемся использовать актуальные возможности сред и библиотек.
Поэтому для разработки клиентской части мы используем Angular, серверной – dotnet. Что касается баз данных, основной вендор баз данных для нас сейчас – PostgreSQL.
💬Как бы ты описал программиста в трех словах?
Алексей: — Погруженный, логичный …ленивый.
По последнему поясню. В разработке всегда бывают интересные задачи, а бывают рутинные.
Хороший программист всегда создаст себе в помощь хитрые инструменты, чтобы сократить рутину и тратить на нее как можно меньше времени.
Тут лень – двигатель прогресса, изобретательства. И это здорово!
КАК СТАТЬ КРУТЫМ ЛИДЕРОМ ОТДЕЛА РАЗРАБОТКИ
💬Как ты стал руководителем отдела?
Алексей: — В компанию я пришел ведущим разработчиком в 2013 году. Меня пригласили на проект, где я отвечал за клиентскую часть. Вместе с ребятами ее реализовали в связке с серверной командой.
Компания развивалась, проектов становилось все больше, нужно было подбирать, приглашать специалистов и строить новые команды. Тут пригодилось мое второе образование: кроме инженерного, у меня за плечами курс «управление персоналом».
Ребят набрали, команды построили. Со временем обязанностей становилось все больше, и с 2017 добавилось управление отделом: подбор и развитие персонала, оценка и старт проектов, организация обмена опытом, проведение стажировок, аттестация сотрудников.
💬Каким образом ты организуешь и управляешь работой своего отдела разработки ПО?
Алексей: — Моя работа главным образом заключается в том, чтобы «собрать пазл». То есть обеспечить продуктовые команды необходимыми кадрами в нужной конфигурации, когда специалисты эффективно взаимодействуют друг с другом, решая проектные задачи.
Дальше – развитие: обеспечить рост, чтобы навыки и умения ребят постоянно повышались. Так всем интереснее. Ну и, конечно, решение проблем, когда все идет не совсем так, как хотелось бы.
💬Как ты набираешь людей в свою команду? На какие умения и качества ты обращаешь внимание прежде всего?
Алексей: — Источников для формирования команд два.
Внутренние ресурсы: ребята, которые давно работают в компании. И внешние: инженеры, которых мы приглашаем к нам присоединиться.
Главные критерии – практический опыт, умение думать, рассуждать в правильном русле и, конечно, мотивация. На проекте должно быть интересно как в технологическом смысле, так и в бизнес-задачах.
💬Расскажи о наиболее сложной задаче/проекте и какие проблемы тебе с командой пришлось преодолеть?
Алексей: — У нас простых проектов не бывает, но со всем справляемся (с).
Здесь надо отметить, что основную часть проектов мы создаем для энергетического сектора, и наши продукты используются в управлении генерации электроэнергии.
Из сложных, но достаточно интересных можно выделить, например, расчет показателей готовности электростанций к генерации. Для этого мы собираем данные из различных систем, проводим на их основе расчеты и получаем бизнес-показатели, которые показывают, как обстоят дела в настоящее время, и позволяет делать прогнозы: какую генерацию может обеспечить электростанция на следующий день, через 5 дней, неделю и так далее.
При этом характеристики станций постоянно меняются: различные режимы работы в зимнее, летнее время, на станциях проводится ремонтные работы объектов генерации, когда целый блок выводится из работы.
В общем, целый набор параметров, которые необходимо учитывать при расчете. Сами алгоритмы расчета также могут меняться со временем: сегодня мы считаем одним способом, через неделю алгоритм расчета другой.
Отдельный вызов был реализовать «энергетический» диалект VB.NET для написания таких алгоритмов (заказчик очень уж любил этот язык). Реализовать и отладить все это было, конечно, непросто, но всегда приятно осознавать, что результатом работы команды сотрудники энергетики пользуются в своей работе каждый день.
💬Какой самый необычный запрос от клиента тебе приходилось реализовывать?
Алексей: — Задачи интеграции, когда нужно было связать данные из трех разрозненных систем, чтобы получить необходимые данные для работы нашего комплекса.
Самое интересное, что со стороны заказчика за эти системы отвечали разные команды, и единого представления не было ни у кого. Поэтому пришлось «в полях» разбираться, какие данные мы можем собрать.
А еще была грузинская локализация, когда все приложение выглядит как меню в восточном ресторане.
💬Какой самый странный баг или ошибку в коде тебе когда-либо приходилось исправлять?
Алексей: — Мы, конечно, пишем без ошибок (с). Однако бывают достаточно забавные случаи, когда фича превращается в баг.
В одном из проектов был реализован отладочный терминал, который в реальном времени отображает текущие выполняемые задачи комплекса. Штука очень полезная при развертывании и настройке продукта, сэкономила много времени на этапе внедрения решения.
При запуске сервера приложений в терминал выводился состав подключенных модулей, их инициализация, выход в рабочее состояние – в общем, достаточно подробная информация. Некоторое неудобство было в том, что состав модулей «пробегал» очень быстро на экране и не всегда можно было успеть увидеть данный вывод.
Решение было выбрано достаточно простое – мы добавили небольшую задержку после запуска очередного модуля, и мы успевали ознакомиться со всей необходимой информацией.
Время шло, продукт развивался, количество модулей увеличивалось и сервер стартовал уже минуты. Продукт был в эксплуатации уже пару лет, отладочным терминалом пользовались не часто, и про хитрую задержку при старте модулей мы уже и забыли.
Когда мы пошли искать причину тормозов, эти таймауты в коде мы, конечно, нашли и поправили, но впечатления были весьма противоречивые: с одной стороны, смешно, что сами себе наделали проблем, с другой – немного обидно, потому что очевидное простое решение оказалось неудачным со временем.
Вывод достаточно простой: всегда нужно учитывать рост системы и закладывать это в реализуемом функционале.
А еще бывает смешно при поиске какого-то бага увидеть комментарий «завтра надо будет на свежую голову все переписать» в коде пятилетней давности.