Познакомились со специалистом международной компании EPAM и узнали подробности о работе архитектора программного обеспечения.
Дмитрий Довнар, 35 лет, город — Астана, архитектор программного обеспечения в компании EPAM
Как пришел в профессию
Я окончил университет по специальности математик-системный программист. Обе составляющие помогли мне стать архитектором: математика научила абстрактному мышлению, а программирование — строить сложные системы. В университете преподавали курс по архитектуре ПО. Он был мне интересен. Мы рассматривали реальные примеры вроде архитектуры системы управления грузоперевозками на железной дороге.
В EPAM я пришел в 2009 году. Сначала на практику и постепенно стал частью команды. Меня взяли в штат младшим инженером-программистом и я приступил к выполнению реальных задач. За пять лет прошел путь от младшего до ведущего разработчика на платформе .NET. На нескольких крупных проектах выполнял задачи архитектора. Поэтому логичным оказалось развиваться дальше в этом направлении. Уже девять лет я работаю архитектором ПО. И люблю то, что делаю.
Зачем нужен архитектор программного обеспечения
10 лет назад заказчик обращался к производителям программного обеспечения только за специалистами. У него было четкое представление о том, что и как должно быть выполнено.
Сегодня все иначе. Заказчик ожидает, что мы сами определим проблемы, подскажем грамотное решение, полностью спроектируем и изготовим его, а также предоставим план развития на несколько лет.
Без архитектора такие вещи делать на порядок труднее, особенно если речь идет о сложных задачах и бизнес-процессах.
О работе архитектора программного обеспечения
Архитектор проектирует и планирует развитие программных систем и программ с учетом требований и ограничений. Он — проводник между заказчиком и командой разработки, придает абстрактным требованиям конкретное техническое воплощение.
Простое сравнение: Архитектор строит дом так, чтобы обеспечить жильцов всем необходимым, а также следит, чтобы конструкция была удобной и безопасной. Архитектор в IT решает те же задачи: выбирает эффективные в данном случае технологии и предлагает необходимое заказчику решение.
Одну и ту же задачу можно решить бесконечным числом способов. Но архитектор — это специалист, который предлагает лучший вариант с учетом всех существующих и будущих изменений.
Архитектор работает на стыке профессий: может предложить отличное техническое решение и знает, как его описать, но также понимает, как распланировать работу команды. Он применяет Soft skills, некоторые навыки руководителя команды, проектного менеджера и бизнес-аналитика.
Такие профессионалы нужны в любых областях, тем более в больших или сложных проектах. Ведь любой заказчик хочет получить систему, которая не только решит текущие задачи, но и долго будет оставаться актуальной.
Если раньше существовала только одна специальность — архитектор ПО, то сейчас возможны узкие специализации: например, архитектура облачных систем или данных, построение систем с помощью специфических решений или платформ либо для специфической бизнес-области.
Про зарплату архитекторов говорить сложно: вилка широкая. Доход архитектора выше, чем у ведущего инженера, а верхний порог зависит от человека и его опыта. Среди архитекторов в крупных компаниях есть своя иерархия: как и в разработке, существуют старшие и ведущие архитекторы. Но уровень зарплаты зависит, скорее, от знаний и навыков.
О преимуществах и недостатках
Несомненный плюс — работа на стыке активностей и задач. Эта профессия дает возможность посмотреть на бизнес-процессы и работу крупных заказчиков и решить нерешаемые задачи с помощью технологий.
Минусы тоже есть: чтобы стать архитектором, нужны знания. Но книг или курсов недостаточно. Здесь главное — собственный опыт. А его наработка занимает время.
Необходимо постоянно переключаться с уровня системы в целом до уровня локальных задач: полчаса назад с заказчиком ты обсуждал вектор развития системы на год, а теперь пытаешься решить локальную задачу в разработке подсистемы.
Поскольку ты ключевое звено команды, нагрузка и ответственность вырастают: если не успеешь сделать свою часть, команда не сможет начать разработку.
Все сложности окупаются возможностью поработать с интересными клиентами и увидеть, как твоя система решает локальную или глобальную проблему реального мира.
Что должен знать и уметь архитектор программного обеспечения
Нужно владеть современными технологиями, понимать различие между ними. Архитектор должен выбрать, на чем будет построено программное решение.
До сих пор открытый вопрос: должен ли архитектор иметь свой опыт использования технологий, с которыми он работает? Сложно ответить однозначно, особенно, учитывая, как быстро технологии сменяют друг друга. Но, на мой взгляд, это помогает.
Нужно изучать архитектурные подходы, стандарты проектирования и описания архитектур, иметь опыт написания архитектурных документов.
Главный навык, которым должен обладать хороший архитектор — умение думать на перспективу: не только как решить задачу заказчика, но и построить систему, которая легко адаптируется и будет актуальной через 3-10 лет. Это просто проверить: если через два года заказчик захочет реализовать в вашем решении новый функционал или переделать существующий, а вам не придется переделывать половину, а то и все целиком, значит, ваша архитектура гибкая и сделана правильно.
Где учиться на архитектора программного обеспечения
Могу посоветовать несколько хороших книг:
1. Fundamentals of Software Architecture: An Engineering Approach, Neal Ford, Mark Richards. Книга рассказывает обо всем, что нужно знать будущему архитектору, разъясняет основные принципы и подходы, а также указывает на разницу работы инженера и архитектора.
2. Patterns of Enterprise Application Architecture, Martin Fowler. Классический труд одного из самых известных авторов в области проектирования. Здесь собрано более 40 подходов и паттернов для создания больших программных систем.
3. Design of Design, The: Essays from a Computer Scientist, Frederick Brooks Jr. Это не практическое руководство по проектированию, а взгляд на процесс под иным углом. Автор показывает, что нет разницы в проектировании архитектуры компьютера, сложной системы, здания или машины. Во времена автора размеры систем были большими: проектировалось не только ПО, но и вычислительная машина целиком. Поэтому к его мнению стоит прислушаться. Терминология середины 60-х и наших дней может отличаться, но общие принципы актуальны до сих пор.
Прежде всего, архитектор опирается на свой и чужой опыт
Еще можно изучать литературу по конкретным областям ваших интересов: например, архитектура облачных решений или баз данных.
Прежде всего, архитектор опирается на свой и чужой опыт. Первое достигается ежедневной практикой, а второе — конференциями, митапами и вебинарами. Много интересных идей я почерпнул как раз на мероприятиях. Такие встречи проводятся сообществами EPAM Kazakhstan. Узнать о них можно на Community платформе.
Советы начинающим
Совет разработчикам, которые хотят стать архитектором: обращайте внимание не только на то, как реализовать задачу, но думайте и о том, как этой функциональностью будут пользоваться потом, как сделать ее гибкой и готовой к любым вызовам. Можно задать такие вопросы: «А что, если позже пользователи захотят использовать систему иначе? Может, лучше добавить больше возможностей для настройки подсистемы, чтобы потом не пришлось все переделывать? Может, нужно заложить точки расширения в существующем коде?».
Если посмотреть на свою работу под другим углом, у вас получится написать отличный код и сделать первый шаг к архитектурному мышлению — увидеть программные системы с точки зрения их эволюции.
Знание подходов и процессов разработки, языков программирования, платформ и систем помогут в выборе оптимального решения и подхода во время проектирования. Технологии сменяются все быстрее. Разберитесь в том, как и почему это происходит. Это позволит проще понимать их сильные и слабые стороны, чтобы определить, что подойдет лучше. Изучение подходов и паттернов проектирования также поможет. Часто стоит выбрать подходящее решение из уже имеющихся, а не изобретать велосипед.
Главное — практический опыт и технический кругозор. Всегда пробуйте новое. Обычно разработчики ограничены подходами и технологиями, которые используются на проекте. Выходом может быть создание чего-то своего, чтобы освоить новую технологию, язык программирования или фреймворк. Так вы опробуете технологии в деле и определите для себя их плюсы и минусы. Не останавливайтесь на достигнутом, и у вас все получится.