Специалист по проектированию программного обеспечения с опытом работы более трех лет получает от 150000 рублей. Минимум к его техническим обязанностям — это умение управлять командой и наличие определенных личностных качеств. Работодатели предъявляют требования к этому профессионалу:
Системный архитектор. Кто это такой?
Кому адресована эта статья? Она предназначена для специалистов, работающих в области информационных технологий, а именно для разработчиков, тестировщиков, менеджеров различного уровня, аналитиков и многих других. Также данный материал может быть полезен для широкой аудитории, желающей понять, чем занимается системный архитектор. Эта информация будет полезной и тем, кто планирует карьерный рост, и тем, кто ищет такого специалиста для своей команды.
Что еще стоит упомянуть? Я собираюсь структурировать материал так же, как в первой статье. На основе практического примера я покажу специфику работы этого специалиста. В заключении постараюсь ответить на ключевые вопросы: кто такой системный архитектор, какими навыками он должен обладать и так далее. Итак, начинаем!
Немного о себе: меня зовут Владимир Воловиков. У меня более 20 лет опыта в разработке программного обеспечения, из которых пять лет я занимаю должности системного архитектора и программного архитектора. У меня имеется четыре международных сертификата, и в данный момент я работаю в качестве системного архитектора в Банке ВТБ.
Ускорим работу
На каких принципах осуществляется преобразование монолита в микросервисы? Существуют различные подходы, но наиболее очевидным является тот, который ориентирован на бизнес-возможности. Мое начало работы над одним проектом совпало с разработкой информационной системы, которая была разделена из монолита в микросервисы согласно этому принципу. Следует отметить, если бы работа выполнена была успешно, системному архитектору не было бы с чем работать. Однако, как показывает практика, это редко случается.
Чтобы понять, что означает «успешно», необходимо пояснить: “успех” подразумевает, что новая информационная система отвечает всем заранее определённым атрибутам качества. Существует множество таких атрибутов качества, однако два основных — это надежность и производительность. Что же такое надежность? В общем смысле, это вероятность корректного функционирования вашей системы в различных нестандартных ситуациях — например, при отключении электроэнергии, отсутствии связи, пожаре или землетрясении. Проектирование высоконадежных систем включает все возможные меры резервирования: основная база данных, репликации, избыточность в рамках одного дата-центра (ЦОД), автоматические системы переключения на резервную базу данных и геораспределение, и так далее. Я перечислю лишь те аспекты, которые непосредственно касаются нашей темы, а далее перейду к вопросу производительности.
Производительность — это способность системы обрабатывать определенное количество запросов в секунду с требуемой скоростью. И вот здесь возникает ряд вопросов. Дело в том, что в некоторых сценариях производительность не удовлетворяет потребителей. Но кто же эти потребители?
Как оказывается, у вновь разрабатываемой системы существует двое совершенно разных потребителей. Первый потребитель — это конечный пользователь, человек. Это так называемые “фронт” приложения, которые генерируют нагрузку в 1-2 запроса в секунду. Второй потребитель — это внутренние информационные системы, и именно в этом случае производительность системы может оказаться недостаточной. В данном сценарии нагрузка может достигать 100 и больше запросов в секунду, а время ответа колеблется от 0.8 до 2 секунд. Что здесь может показаться незначительным? Действительно, две секунды — это не двадцать, так что же может разочаровать потребителей?
Чтобы глубже понять, в чем заключается проблема, я сделаю еще одно пояснение. Давайте представим себе монолитный интернет-магазин и сценарий оплаты, который состоит из нескольких этапов:
- проверка наличия товара в конкретном магазине;
- списание средств с карты пользователя;
- резервирование товара.
Как бы выглядел написанный программный код для этого сценария? В приведенном примере:
if (Goods.available(shopId, userGoodsSelectedList)) < if (PaymentCard.getMoney(totalUserGoodsCost)) < if (Storage.reserved(shopId, userGoodsSelectedList ) < Response.send(INFO.GOODS_RESERVER); >else < Response.send(ERROR.GOODS_RESERVED); >> else < Response.send(ERROR.GET_MONEY); >> else
Здесь присутствуют три сущности: Goods (Товары), Payment (Оплата), и Storage (Хранилище). Каждая из этих сущностей имеет свои инкапсулированные методы и свойства. Как быстро будет выполняться этот код? Мгновенно! Он выполняется из памяти. Однако, если теперь мы разделим его на микросервисы в соответствии с бизнес-возможностями, то ситуация изменится.
Система товаров (Goods), система платежей (Payments), система хранения (Storage) и контроллер платежей (PaymentsController) — все это отдельные микросервисы, использующие взаимодействие друг с другом через HTTP интерфейсы. Понятно, что это уже медленнее, чем выполнение одного монолита. Появляются накладные расходы. А что, если наше взаимодействие не является параллельным, как было показано? Что если сервис Goods, получив запрос от PaymentsController, делает дополнительные интеграционные запросы для получения дополнительной информации о пользователе? И если другой сервис также запрашивает данные из третьей системы, сколько времени в общей сложности потребуется на выполнение всей операции? Если допустим, каждый из этих блоков работает со скоростью 0.5 мс, то три системы в совокупности займут 1.5 секунды. И вот в этой цепочке кто-то полагает, что время отклика должно составлять две секунды. “Это явно недостаточно” 🙂
Архитектор программного обеспечения — это высококвалифицированный разработчик, занимающийся проектированием программного обеспечения, определяя его архитектуру, внутренние структуры и внешний облик. Обычно такие специалисты начинают свою карьеру в качестве системных администраторов или программистов. Постепенно накапливая опыт и знания, они осваивают весь процесс разработки программного обеспечения. Благодаря глубокому пониманию как программного обеспечения, так и бизнес-процессов, такие архитекторы играют ключевую роль в компании. Давайте подробнее рассмотрим их задачи в различных направлениях.
Основные задачи:
- Техническая задача. Сюда входит все, что связано с проектированием программного обеспечения. Инженер-программист создает архитектурные шаблоны, делит систему на модули и выбирает языки программирования. Он также определяет средства исполнения и разрабатывает технические сценарии взаимодействия компонентов будущего программного обеспечения. Кроме того, он отвечает за проектирование технических интерфейсов, выбор форматов передачи и хранения данных, а также подбор необходимых технологий для реализации подсистем.
- Экспертная задача. Специалист анализирует проект, предоставляет экспертные оценки и пишет требования к его реализации. Программист-архитектор планирует дальнейшее развитие системы и проводит реинжиниринг — коренное обновление уже существующего программного обеспечения для устранения ошибок. Он проверяет приобретенные системы, регламентирует изменения и разрабатывает стандарты проектирования.
- Управленческая задача. Программист-архитектор возглавляет команду разработки, дает рекомендации и распределяет технические задания. Он общается с заказчиком и менеджером проекта, может вносить коррективы и предлагать решения. Архитектор обязан объяснять сложные технические концепции на языке, понятном заказчику. Это важно для налаживания бизнес-процессов, успешной коммуникации между отделами разработки и клиентов. Архитектор осуществляет контроль за выполнением проекта, занимается документацией и координирует работу своих подчиненных.
Возможные направления работы включают крупные IT-компании и бизнес.
У ИТ-руководителей проектов много обязанностей, однако основными должны быть:
- проектирование программного обеспечения и информационных систем;
- создание баз данных;
- формирование архитектуры программного обеспечения и его алгоритмов работы;
- разработка стратегии, методов реализации, подбор соответствующих средств и инструментов;
- планирование и оперативное управление проектом;
- координация работы команды, обеспечение техническим заданием и поддержкой;
- взаимодействие с заказчиком, анализ требований к компонентам и составление технической документации с финансовыми обоснованиями;
- оценка возможностей и перспектив проекта;
- контроль за этапами выполнения работ, проведение проверок и тестирования;
- выявление и устранение ошибок, оценка качества готового проекта;
- ведение технической, отчетной и другой документации.
Эксклюзивное предложение — -50% на ВСЕ курсы Skillbox. Овладейте современными онлайн-профессиями и раскройте свои возможности.
Активировать скидку →
Чем занимается IT-архитектор?
Системный архитектор выполняет множество задач по профессиональному долгу. Конечно, некоторые из них зависят от уровня опыта и сложности проекта. К основным задачам относятся:
- Формирование системных требований. Это включает не только определение того, что необходимо для выполнения проекта, но также оптимизацию затрат с учетом установленного бюджета.
- Создание прототипов IT-систем. Важно, чтобы у всех участников был структурированный план, к которому нужно придерживаться. Прототипы — это визуальные или функциональные модели программ или веб-сервисов, разработка которых обычно выпадает на долю специалистов данной области.
- Набор персонала. Часто системный архитектор также отвечает за набор сотрудников. Это может касаться как выбора конкретных специалистов, так и формированию целого штата.
- Управление персоналом. Эта задача подразумевает контроль за теми, кого системный архитектор привлек к работе над проектом.
Существует множество других обязанностей, связанных с этапами работы над проектом. Некоторые из них применяются редко, а другие являются неотъемлемой частью любой IT-инфраструктуры. Надеюсь, из приведенного списка вам уже стало понятно, чем занимается инженер проектирования.
Системный архитектор чаще всего сосредоточен именно на архитектуре. Для него не имеет значения, на каком языке ведется разработка. Его целью является продумывание и формирование интерфейсов взаимодействия сервисов, чтобы эти сервисы могли быть масштабируемыми, развиваемыми и не мешали друг другу.
Что должен знать системный архитектор?
К требованиям, предъявляемым кандидатам на должность системного архитектора, относятся как обязательные, так и желательные навыки. Рассмотрим ключевые аспекты.
Простого знания языков программирования недостаточно; главное требование – это наличие практического опыта, то есть прямое участие в процессе разработки. В списках вакансий вы часто встретите следующие требования:
- опыт работы на позиции старшего разработчика не менее трех лет;
- опыт в веб-разработке;
- опыт работы на должности solution-архитектора;
- знание архитектурных паттернов: многослойная архитектура, SOA (сервис-ориентированная архитектура), микросервисная архитектура.
Кроме всего вышеперечисленного, важно понимать, как устроены IT-системы, их ключевые сервисы, сетевые взаимосвязи, домены и другие элементы. Как уже упоминалось, системный архитектор самостоятельно руководит проектом, что подразумевает умение находить общий язык как с командой, так и с заказчиками.
К числу часто требуемых качеств также можно отнести межличностные навыки, так как важно уметь отстаивать свою точку зрения, защищать свою позицию и находить компромиссы между заинтересованными сторонами.
Как стать ИТ-архитектором
Сегодня в России вузы не готовят специалистов именно для этой профессии. Чтобы стать ИТ-архитектором, необходимо получить базовое техническое образование и затем развивать свою карьеру в сфере ИТ с самого начала. Молодым специалистам важно проявлять инициативу и искать для себя новые вызовы, способствующие их росту.
Хороший опыт и возможность многому научиться можно получить, работая в ИТ-компании на коммерческих проектах продолжительностью не менее одного года. Решая задачи, находясь под руководством более опытных коллег, молодые разработчики получают практический опыт, который усваивается быстрее.
Пример. В практике нашей компании были случаи, когда члены архитектурного комитета приходили на помощь коллегам в вопросах оптимизации запросов к базе данных, деления приложений на микросервисы и настройки взаимодействия между компонентами распределенной системы. Обычно к тому времени команда уже глубоко погрузилась в задачу, рассматривая различные варианты ее решения, однако по ряду причин они не подходили. В результате, когда архитектор предлагал решение, это было осознанное понимание того, почему необходимо поступать именно так, а не иначе. Чтение книг и статей, к сожалению, не дает такой практики.
Часто именно так ИТ-архитекторы развиваются через сотрудничество и взаимодействие на проектах. В эту профессию, как правило, приходят опытные back-end, front-end, web-разработчики и системные администраторы. Если у начинающего специалиста имеется возможность участвовать в сложных проектах в качестве помощника ИТ-архитектора, это существенно ускоряет процесс погружения в профессию и понимание, как теоретические знания, изложенные в книгах, могут быть применены на практике.
Hard skills, без которых не обойтись в работе ИТ-архитектора
Часто базового образования бывает недостаточно. Чтобы ИТ-архитектор успешно справлялся со своими задачами, ему нужно обладать широким кругозором, знанием современных технологий и опытом работы на сложных коммерческих проектах не менее пяти лет.
ИТ-архитектор должен знать стандартные методики проектирования, модификации программных продуктов и уметь:
- проектировать архитектуру нагруженных систем;
- создавать горизонтально масштабируемые приложения;
- обеспечивать баланс между стоимостью разработки и гибкостью решений для быстрого внедрения будущих требований;
- выбирать и обосновывать выбор технологий и оптимальных технических решений в зависимости от бизнес-планов и развития продукта;
- контролировать процесс реализации, создавая каркас системы и осуществляя архитектурный надзор;
- разрабатывать и принимать решения по адаптации продукта к новым требованиям бизнеса, даже если на начальном этапе проектирования они были не полностью известны;
- разрабатывать структуру хранения данных.
Для начала достаточно изучить теоретические аспекты по книгам (например, Software Architecture in Practice и Designing Software Architectures: A Practical Approach), статьям, видеоматериалам и другим открытым источникам. После этого стоит применять на практике полученные знания. Далее, для расширения профессиональных взглядов и углубления знаний необходимо изучать документацию, следить за информационными источниками (прежде всего, англоязычными), где публикуют сведения о передовых технологиях.
Как понять, хотите ли вы быть ИТ-архитектором
Перепрофилирование в ИТ-архитектора стоит рассмотреть, если:
- вашка текущая работа в разработке стала вам неинтересной и вы хотите двигаться дальше;
- вы желаете расширить свои горизонты и решать технически сложные, но увлекательные задачи;
- вам хочется принимать решения и нести за них ответственность, участвовать в обсуждении жизненного цикла проектов.
Кроме того, важно иметь сильное желание работать в ИТ, быстро усваивать информацию и обрабатывать большие объемы данных.
Представленный чек-лист поможет вам определить, насколько вы в данный момент соответствуете требованиям, выдвигаемым компаниями к ИТ-архитекторам, и понять, что необходимо подтянуть для перехода в эту профессию.
Зарплата архитектора программного обеспечения
Начинающих специалистов, делящих свой путь по карьерной лестнице в ИТ, особенно интересует уровень заработной платы архитектора программного обеспечения.
Согласно данным сайта HeadHunter, минимальная зарплата для начинающего профессионала на этой позиции составляет от 70000 рублей. К основным обязанностям кандидата на данную должность относятся:
- сбор требований для создания программного продукта;
- участие в разработке структуры внутренней системы и функционала ПО;
- разработка некоторых составных частей архитектуры, протоколов и API;
- составление проектной документации;
- участие в тестировании.
Зарегистрируйтесь на бесплатный интенсив и получите подборку материалов, которые гарантированно помогут вам найти работу в ИТ за 14 дней.
Заработок специалиста среднего уровня с опытом от одного года до трех лет колеблется от 100000 до 150000 рублей. Перечень необходимых навыков, знаний и обязанностей значительно расширяется, включая:
- опыт проектирования Enterprise Architecture, Technical Architecture, Solution Architecture и применение этих навыков при разработке мягких узлов, компонентов, представлений, коннекторов;
- умение разрабатывать и прорабатывать внутреннюю структуру программного продукта;
- навыки проектирования архитектурных артефактов (например, технологических схем, карт, моделей, стандартов, рекомендаций, принципов);
- опыт разработки программного обеспечения с микросервисной архитектурой;
- развитое системное мышление;
- умение вести переговоры с клиентами.
Опытный архитектор ПО с более чем трёхлетним стажем может рассчитывать на зарплату свыше 150000 рублей в месяц. Кроме требований, необходимых на начальном и среднем уровнях, к кандидатам на эту должность предъявляют дополнительные условия:
- знание нескольких языков программирования и основных инструментов для разработки внутренней структуры ПО;
- способность изучать и оценивать существующие структурные решения и системы, выявлять слабые места, разрабатывать корректировки и модификации;
- составление проектной документации;
- анализ и выбор информационных технологий для решения задач;
- разработка требований к хранению и передаче данных между компонентами системы;
- участие в создании программного кода и контроль его качества;
- консультирование и обучение членов команды;
- координация работы сотрудников на всех стадиях разработки IT-продукта.
Как стать архитектором программного обеспечения
Стать экспертом в области архитектуры программного обеспечения без базовых навыков программирования и написания кода, без опыта инженерной работы невозможно.
Теоретически, вы можете начать осваивать любую IT-специальность, например, работая с языком C++, устраиваться на работу на младшие позиции, затем продвигаться до middle- и senior-уровней и только потом углубляться в изучение архитектуры ПО. Однако такое изучение и последовательный переход между ролями не является оптимальным. Проще всего войти в профессию системного архитектора, имея уже определенный технический опыт в IT.
Наиболее целесообразный путь в эту профессию — через должность технического лидера. Для перехода достаточно будет освоить навыки ведения переговоров с заказчиками, управления командой и владея корректным составлением проектной документации.
Профессия архитектора программного обеспечения требует комплексного подхода, необходимы широкий технологический кругозор, значительный опыт в IT и отличные коммуникативные навыки. Важно помнить, что помимо работы над внутренним проектом, архитектору потребуется постоянно взаимодействовать с заказчиками и членами команды, работающими над проектом.
Аналитические способности также окажутся полезными в данной специальности, позволяя разбираться в стандартной методологии разработки архитектуры, логически мыслить и находить новые решения для бизнес-задач клиентов.
Высокая квалификация и опыт работы над множеством различных проектов предоставят более широкие возможности для получения дополнительных доходов за счет консультирования предпринимателей. В дальнейшем это может привести к созданию и собственной компании. В любом случае, для успешного освоения профессии системного архитектора необходимы навыки программной разработки не ниже уровня middle, а также опыт работы в области IT-аналитики.
Многозадачность и комплексность данной специальности делают её нелегкой для изучения с нуля без предварительной подготовки и навыков.
Обучение в высших учебных заведениях
В российских университетах не предусмотрены программные курсы, нацеленные на подготовку специалистов в области системной архитектуры. Однако можно найти смежные специальности, которые могут стать хорошей основой для получения технических знаний. Вот несколько из них:
- Прикладная математика и информатика;
- Инженерия программного обеспечения;
- Системное программное обеспечение;
- Распределенные информационные системы;
- Архитектура предприятия;
- Проектирование и разработка систем.
Прохождение онлайн-курсов
Онлайн-обучение стало одной из самых популярных образовательных форм сегодня. Это хороший альтернативный способ освоить новую профессию, так как оно основывается на структурированной подаче информации, включает множество практических заданий и постоянное взаимодействие с преподавателями.