Архитектор программного обеспечения
Архите́ктор програ́ммного обеспече́ния — проектная роль в разработке ПО, профессия, возможно — должность[3].
Общие сведения
| Архитектор программного обеспечения | |
| Описание | |
|---|---|
Область деятельности |
Архитектор программного обеспечения отвечает за проектирование структуры и взаимодействия компонентов программных систем. |
| Cпециализация |
Корпоративная архитектура Облачные решения Микросервисы и распределённые системы Big Data и аналитикаWeb и мобильные архитектуры[1] |
Деятельность |
Проектирование архитектуры Оценка технологий и инструментов Документирование архитектуры Контроль и ревьюРешение технических проблем[2] |
Образование |
Высшее техническое образование в области компьютерных наук, информационных технологий, прикладной математики или инженерии. Специализация в разработке ПОДополнительные сертификации |
Описание
Ключевая обязанность архитектора — проектирование архитектуры ПО, то есть принятие ключевых проектных решений относительно внутреннего устройства программной системы и её технических интерфейсов[4].
Проектирование архитектуры ПО является частным случаем проектирования ПО[5].
Типы архитекторов программного обеспечения
| Тип архитектора | Стратегическая направленность | Системные взаимодействие | Коммуникация | Дизайн |
|---|---|---|---|---|
| Организационный архитектор | Охватывают несколько проектов | Высоко абстрактный | На уровне всей организации | Дизайн высокого уровня |
| Архитектор решений | Ориентированность на взаимодействие решений | Детализированный | С несколькими командами | Подробный |
| Архитектор приложений | Повторение использование компонентов и их поддержание | В рамках одного проекта | С одной командой | Очень подробно[6] |
История
С ростом популярности разработки многослойных приложений увеличился и выбор способов их создания. Разработчики часто оказывались в ситуации, когда приходилось «изобретать колесо» заново в одной и той же компании. Так появилась необходимость в новой роли — архитектор программного обеспечения[7].
Основные обязанности этого специалиста включают:
- Ограничение выбора при разработке, такие как:
- выбор стандарта для разработки приложений;
- создание/определение фреймворка для использования в приложении.
- Определение потенциальных точек повторного использования в компании или приложении, таких как:
- широкое видение архитектуры;
- компонентно-ориентированный дизайн;
- знакомство с другими приложениями в организации.
Эта роль стала востребованной в конце 1990-х годов, когда объектно-ориентированное программирование (ООП) получило широкое распространение. С помощью ООП стали возможны создание и управление более крупными и сложными приложениями, что потребовало более общего и структурированного подхода. Новые обязанности архитекторов программного обеспечения стали включать:
- Разбиение сложности больших приложений на более управляемые части на этапе проектирования;
- Понимание функций каждого компонента;
- Понимание взаимодействий и зависимостей между компонентами;
- Общение с разработчиками по этим вопросам.
Для этого архитектору программного обеспечения необходимо иметь, по крайней мере, базовые знания об UML (унифицированном языке моделирования) и ООП. UML позволяет архитекторам объяснять свои проектные решения разработчикам и другим членам команды. Это аналогично архитектурным чертежам в строительстве. Однако UML — не единственный способ коммуникации.
«Башня из слоновой кости»
Когда архитекторы теряют связь с командами разработчиков, их называют «жителями башни из слоновой кости». Это термин используется для описания архитекторов, которые разрабатывают архитектуру, но не вовлечены в практическую разработку. Это часто происходит в компаниях, использующих каскадную методологию разработки.
Архитектор программного обеспечения
Это лицензированный профессионал в области информатики или инженер-программист, являющийся членом профессионального сообщества в нескольких странах.
В небольших проектах роль архитектора программного обеспечения может выполнять аналитик, руководитель проекта или ведущий разработчик. В крупных компаниях может быть главный архитектор программного обеспечения, который отвечает за соблюдение архитектурных стандартов во всех проектах, управление программными компонентами компании и их повторное использование. В масштабных проектах может быть архитектор программного обеспечения и несколько подчинённых архитекторов, которые отвечают за разные части создаваемого программного обеспечения.
Функциональный аналитик, архитектор программного обеспечения и инженер-программист имеют чётко разграниченные обязанности: первый управляет сценариями использования, второй проектирует архитектуру, а третий занимается разработкой[8][9].
Задачи
В проектирование архитектуры ПО входят следующие задачи
- Планирование
При планировании проектов разработки программного обеспечения архитекторы обычно участвуют в создании технических заданий, особенно в выборе, описании и обосновании технических подходов, применяемых для реализации. Кроме того, архитекторы часто играют ведущую роль в оценке затрат и выборе модели разработки.
- Анализ
При анализе программные архитекторы обычно участвуют только в случае необходимости создания прототипов (mock-ups). Прототипы помогают лучше понять определённые техники и технологии архитектуры, чтобы решить, насколько они практичны.
- Проектирование
Архитекторы обычно несут ответственность за все процессы проектирования. В частности, они отвечают за создание, описание и передачу программной архитектуры, используя, например, унифицированный язык моделирования (UML) и подходящие шаблоны проектирования. Архитекторы также участвуют в выборе среды выполнения, но редко имеют влияние на выбор аппаратной платформы. В большинстве случаев они не занимаются системной архитектурой оборудования[10][11].
- Программирование
В процессе программирования архитекторы обычно несут ответственность за корректное выполнение определённой архитектуры и правильное использование библиотек и фреймворков. Они также определяют стиль программирования и инструменты разработки, такие как интегрированные среды разработки (IDE), инструменты управления сборкой и системы контроля версий. При этом архитекторы отвечают за возможность реализации, но не за саму реализацию.
- Тестирование
В рамках тестирования архитекторы обычно отвечают за модульное тестирование, реже — за интеграционное. Системные и приёмочные тесты они обычно поддерживают, разрабатывая тестовые драйверы и интерфейсы.
- Вспомогательные процессы
В вспомогательных процессах разработки архитекторы обычно занимаются отдельными техническими задачами, но никогда не отвечают за весь процесс. Обычно они ответственны за статический анализ кода, документацию программного обеспечения и техническую документацию, а также за эксплуатационные руководства.
Полномочия архитектора ПО
- рецензирование требований
- разработка нефункциональных требований[8]
- участие в совещаниях с заказчиком
- стратегическое планирование технического развития системы
- реинжиниринг ПО
- архитектурный надзор разработки
- текущее консультирование команды
- технический аудит сторонних/вновь приобретённых систем
- регламентация процедуры внесения изменений
- разработка стандартов кодирования/проектирования[8]
- написание технического проекта.
Виды программных архитекторов
Корпоративные архитекторы (Enterprise-Architekten) принимают организационные решения, касающиеся нескольких программных систем. Эти решения обычно затрагивают несколько команд разработчиков или мест работы. Примеры таких решений:
- Введение межсистемных архитектур, например, сервис-ориентированной архитектуры (SOA).
- Решение о внедрении межсистемных сред разработки или фреймворков.
Архитекторы приложений (Applikationsarchitekten) принимают архитектурные решения для конкретного приложения и, следовательно, для одной команды разработки. Примеры таких решений:
- Выбор конкретного ORM (объектно-реляционного маппера), если такое решение не принято корпоративным архитектором.
- Определение архитектуры приложения.
Существуют и похожие описания должностей, например:
- Архитектор решений (Solutions-Architekt) — описывает роль человека, который управляет бизнес-решением, охватывающим несколько программных систем.
- Системный архитектор (System-Architekt) — обычно используется как синоним архитектора приложений.
- Системные архитекторы (Systems Architect) — используется как синоним корпоративного архитектора или архитектора решений.
Обязанности
Несмотря на отсутствие простого определения, в профиле архитектора программного обеспечения выделяют несколько общих аспектов[12]:
- Стратегическое мышление Архитекторы сосредоточены на решении бизнес-задач компании с учётом стратегической перспективы. Например, решения принимаются с учётом устойчивого роста компании и долгосрочной производительности ПО. Особое внимание уделяется созданию возможностей для повторного использования. Из-за стратегического фокуса решения архитектора могут сильно отличаться от решений разработчиков и менеджеров проектов. Часто архитекторы ведут себя как бизнес-менеджеры, обладающие техническими знаниями. В то время как разработчики сосредоточены на создании отдельных компонентов ПО, архитекторы определяют, как эти компоненты будут взаимодействовать[7] .
- Системное взаимодействие Архитекторы работают с интерфейсами, границами и взаимодействиями между системами. Это может включать взаимодействие двух систем, написанных на разных языках и расположенных в разных местах, или взаимодействие компонентов в одной системе. Архитектура, ориентированная на сервисы (SOA), стала недавним развитием, упрощающим работу архитекторов, так как она предлагает подход к архитектуре, более близкий и согласованный с их потребностями в определении API систем.
- Дизайн Архитектор принимает множество решений, как на высоком уровне, так и, иногда, на низком. Архитектор также диктует стандарты кода, инструменты и платформы. Эти меры нужны не для того, чтобы ограничивать выбор разработчиков, а чтобы помочь достичь стратегических целей.
- Коммуникация Важный аспект работы архитектора связан с коммуникацией: сначала для понимания бизнес-требований, а затем для передачи своего архитектурного видения. Помимо устного общения, существуют различные модели архитектуры программного обеспечения, которые помогают эффективно делиться архитектурными решениями.
Образование
Из-за высокого уровня абстракции основной требованием для начала работы в качестве программного архитектора является образование в области информатики с упором на программную инженерию или архитектуру программного обеспечения, полученное в университете или высшей школе. Также инженерные или естественнонаучные специальности с соответствующим направлением подготовки обеспечивают хорошие возможности для старта карьеры[13][14][15][16][17][18].
Некоторые профессиональные академии, школы информационных технологий или колледжи предлагают курсы для подготовки программных архитекторов, например, для специальности «специалист по прикладной разработке». Однако такого образования недостаточно: чтобы стать программным архитектором, необходимо иметь многолетний практический опыт.
1. Московский государственный технический университет имени Н. Э. Баумана (МГТУ им. Баумана)[19]
- Направления: Информатика и вычислительная техника, Программная инженерия.
2. Национальный исследовательский университет «Высшая школа экономики» (НИУ ВШЭ)[20]
- Факультет компьютерных наук: Программная инженерия.
3. Санкт-Петербургский политехнический университет Петра Великого (СПбПУ)[21]
- Институт компьютерных наук и технологий: Направления, связанные с информационными системами и проектированием программного обеспечения.
4. Московский физико-технический институт (МФТИ)
- Факультет управления и прикладной математики: Программная инженерия, Системная архитектура.
5. Национальный исследовательский ядерный университет «МИФИ» (НИЯУ МИФИ)[22]
- Программы по направлению Информатика и вычислительная техника.
6. Университет ИТМО (Санкт-Петербург)
- Факультет информационных технологий и программирования: Программная инженерия, Архитектура информационных систем.
Метафора
Термин «программный архитектор» стал известен за пределами ИТ-сферы в начале 2000-х годов, когда Билл Гейтс, в то время президент и генеральный директор Microsoft, отошёл от своей роли, заняв должность главного архитектора программного обеспечения (Chief Software Architect). Этот титул отражал его новую задачу — контроль и консультирование по многим проектам разработки программного обеспечения в Microsoft, функции, которые обычно выполняет технический директор (Chief Technical Officer)[23].
Крупные компании и организации для работы архитектором ПО
1. Крупные IT-компании: Яндекс, VK[24] , Mail.ru Group, Ростелеком, СберТех.
2. Телекоммуникационные компании: МТС[25] , Билайн[26] , МегаФон, Tele2.
3. Государственные организации: Министерства, муниципальные учреждения, национальные агентства, работающие с данными и IT-инфраструктурой.
4. Банковские и финансовые учреждения: Сбербанк[27] , ВТБ, Альфа-Банк[28] , Тинькофф, Газпромбанк.
5. Международные компании: IBM, Cisco, Huawei[29] , Dell, Microsoft, Google.
6. Научно-исследовательские и образовательные учреждения: крупные университеты, исследовательские центры, НИИ.
7. Промышленные и энергетические компании: Газпром, Росатом, РЖД, Лукойл, Роснефть, Норникель.
8. Аутсорсинговые IT-компании и дата-центры: компании, предоставляющие услуги в области сетевой инфраструктуры и безопасности для сторонних клиентов, например, Softline, КРОК, ИТ-Град, DataLine.