Полное руководство по становлению архитектором программного обеспечения

Полное руководство по становлению архитектором программного обеспечения

1 ноября 2022 г.

За последние 20 лет моей карьеры инженера-программиста и архитектора программного обеспечения у меня было много бесед с инженерами-программистами в различных областях и дисциплинах. Некоторые из них были старшими инженерами с 8 или 10-летним опытом работы.

Многие из них только начинали свою карьеру, имея опыт работы от 3 до 5 лет. Некоторые из них были моими коллегами. Некоторые были кандидатами на работу. В какой-то момент все они задавались одним и тем же вопросом, который я слышал снова и снова:

<цитата>

«Я хочу стать архитектором решений. Какие есть ресурсы, чтобы узнать больше об архитектуре?» — вопрос, который задают многие инженеры-программисты.

Ну, они задали неправильный вопрос. Вы поймете почему, если будете читать дальше. Кроме того, поскольку моя компания нанимает ведущего Архитекторы программного обеспечения на момент написания этой статьи стоит объяснить, что такое архитектор программного обеспечения и как им стать.

Что такое архитектура программного обеспечения?

Что такое архитектура программного обеспечения? Как следует из названия Software Architect, я часто слышу аналогию со строительством здания. Архитектор здания создает план здания. Инженеры строят его физически и заставляют работать по чертежу. Я бы сказал, что это плохая аналогия во многих отношениях.

Аналогия со зданием заставляет людей слишком много внимания уделять статическим аспектам системы. В этом отношении более подходящей аналогией является создание города, поскольку оно включает в себя как статические элементы, такие как дороги, здания и мосты, так и динамические элементы, такие как транспортные потоки и люди, живущие в городе.

Архитектор — это человек, который придумывает дизайн города, план того, как он должен быть построен, и как все должно сочетаться друг с другом. И последнее, но не менее важное: у архитектора есть видение того, как город будет развиваться. Но архитектура программного обеспечения — это нечто большее. Иногда архитектору необходимо увеличивать и уменьшать масштаб города, чтобы убедиться, что план сработает.

Архитектор, вероятно, не будет сильно заботиться о дизайне интерьера здания, но важно решить, где поставить светофор. Архитектору потребуются широкие и в то же время глубокие технические знания для создания программного обеспечения, которое часто бывает таким же сложным, как город. Архитектору также необходимо будет передать заинтересованным сторонам последовательное сообщение без всех технических деталей, чтобы добиться успеха.

Аналогия со строительством подразумевает, что архитектор является самым старшим человеком в команде, который принимает все важные решения, заранее создает спецификации проекта, а затем обеспечивает соблюдение проекта во время реализации.

Поначалу многим кажется крутым стать самым опытным человеком в комнате, достигнув вершины технического стажа. Вам может быть приятно, когда вся команда слушает вас, следует вашим приказам и решениям, которые вы принимаете.

Но если задуматься, это так сильно давит на архитектора при принятии правильных решений, что часто не совсем возможно на такой ранней стадии проекта. В Agile-команде это означает, что команда разработчиков не самоорганизована, а архитектор является препятствием, мешающим команде стать гибкой. Архитектор забирает всю ответственность у команды. Кто хотел бы оказаться в таком положении под высоким давлением?

Роль архитектуры программного обеспечения

Архитектуру программного обеспечения можно рассматривать как центральный элемент, находящийся между бизнес-целями и программной системой, которая поддерживает бизнес для достижения этих целей.

Role of Software Architecture

Архитектура программного обеспечения используется для достижения бизнес-целей. Он разработан на основе бизнес-целей, которые должны быть достигнуты. Затем программная система реализуется в соответствии с проектом, и она должна соответствовать этому проекту. Это должен быть повторяющийся процесс.

Как я упоминал ранее, часто невозможно принять правильное решение на ранней стадии проекта. Лучшее решение — это решение, которое вам еще не нужно принимать. Архитектор создаст дизайн, достаточный для реализации, чтобы удовлетворить потребности бизнеса.

Это закрывает цикл обратной связи, поскольку вы могли видеть нечто подобное в методах Agile и DevOps. Идея заключается в том, что по мере того, как меняется мир, меняются и требования бизнеса. Архитектура программного обеспечения должна помогать бизнесу принимать изменения, развиваясь в соответствии с требованиями.

Архитектура программного обеспечения

Архитектура программного обеспечения — настолько сложная тема, что вам необходимо разработать систему, которая одновременно удовлетворяла бы всем бизнес-требованиям и всем атрибутам качества. Это было бы практически невозможно выполнить одному человеку. Часто это результат совместной работы команды архитекторов и экспертов в предметной области.

Common software architecture quality attributes

Архитектура программного обеспечения — это не просто диаграммы, прямоугольники и линии. Давайте рассмотрим в качестве примера один из атрибутов качества — безопасность. Я, вероятно, не смогу увидеть никаких проблем с безопасностью, просто взглянув на схему проекта высокого уровня с некоторыми линиями, соединяющими некоторые блоки. Я даже не знаю, работает ли дизайн вообще. Это код, который защищает систему.

Поэтому важно, чтобы архитектор писал код и тесно сотрудничал с командой разработчиков. Кроме того, это может также подойти архитекторам, которые умеют читать код и часто общаются с командой разработчиков.

Вот что происходит, когда архитектор программного обеспечения увеличивает и уменьшает масштаб проекта, как я упоминал в аналогии с дизайном города. Если архитектор не разговаривает с командой разработчиков, а также не пишет код, он отделяет себя от реальности, и создаваемая им архитектура не будет практичной.

Кто такой архитектор программного обеспечения?

Исторически сложилось так, что архитекторы программного обеспечения — это команда, которая набросала спецификацию логического потока на бумаге и передала ее другой команде, называемой перфокартами, для создания перфокарт и обеспечения работы программного обеспечения.

Source: Wikimedia Commons

С развитием технологий нам больше не нужен такой процесс, и определение архитекторов программного обеспечения стало менее четким. В современных ИТ архитектор программного обеспечения — это не звание и не звание, поскольку они не дадут вам высшие полномочия по разработке программного обеспечения за одну ночь. Это такая же роль, как и любая другая роль в Scrum-команде.

Я бы сказал, что самая интересная роль — архитектор программного обеспечения. В отличие от врачей, инженеров-строителей, психологов, социальных работников или бухгалтеров, вы не получаете квалификацию архитектора программного обеспечения за один курс обучения. Почти ни в одном из университетов мира нет диплома по архитектуре программного обеспечения.

Архитектору программного обеспечения необходимы широкие и в то же время глубокие знания почти во всем, чтобы достичь целей, упомянутых в предыдущем разделе. Так что же делает архитектор программного обеспечения с этими навыками и знаниями?

Что делает архитектор программного обеспечения и с кем?

Как я уже говорил, архитектура программного обеспечения находится между бизнес-целями и программной системой, которая их удовлетворяет. Архитектор программного обеспечения связывает компании с командами разработчиков, которые говорят на разных языках, думают иначе и имеют разные задачи.

Многоуровневая разрозненность команд управления и разработчиков только ухудшает общение. Нередко инженеры-программисты, обладающие опытом и соответствующей информацией, не являются лицами, принимающими решения, а люди из управленческой команды принимают решения, не имея соответствующей информации.

Архитектор программного обеспечения играет решающую роль в восхождении и спуске по корпоративной лестнице, а также в детальном рассмотрении технических деталей для решения противоречивых компромиссов и продвижения организации вперед.

An astronaut — Photograph by NASA

Напротив, когда люди имеют звание архитектора программного обеспечения в некоторых организациях, но они остаются только на вершине корпоративной лестницы или только увеличивают изображение, они отделяют себя от реальности. Как сказал Джоэл Спольски, этих людей зовут Архитектурные астронавты, которые не вносят свой вклад и не приносят никакой пользы. Кажется, что многие крупные организации могут позволить себе их большое количество!

Навыки архитектора программного обеспечения и способы их приобретения

Разнообразный опыт

Разнообразный опыт почти во всем имеет решающее значение для роли архитектора программного обеспечения. Это позволяет вам знать, когда подниматься и опускаться по корпоративной лестнице и на что обращать внимание при увеличении и уменьшении масштаба изображения. Вы также увидите закономерности, когда определенные архитектурные решения применяются в разных контекстах.

Поработав более чем в 10 компаниях, я перешел в Zuhlke, консалтинговую компанию, где мне больше не нужно было менять работу, чтобы получить широкий спектр опыта. Мне предлагают проекты практически из неограниченного круга отраслей, включая FinTech, InsurTech, логистику, производство, модную одежду класса люкс, стартапы, и этот список можно продолжить.

Знание предметной области

Глубокое знание определенных областей бизнеса имеет решающее значение для успеха архитектора программного обеспечения, потому что вы должны знать не только, что это такое, но и то, что будет или может быть и почему. Клиенты часто приходят к архитектору программного обеспечения и просят показать им, что и как делают бизнес-лидеры.

Знание предметной области также помогает архитекторам программного обеспечения говорить на языке, общем для бизнеса, что, в свою очередь, помогает им подниматься и опускаться по корпоративной лестнице, связывая руководство с командой разработчиков.

Навыки межличностного общения

Архитектор программного обеспечения также отлично умеет общаться. Многим великим старшим инженерам-программистам трудно получить повышение до архитекторов программного обеспечения, поскольку они не зарекомендовали себя в таких навыках, как слушание, устное и письменное общение, фасилитация, управление конфликтами, презентации, переговоры и убеждение. Точные типы навыков, необходимых для работы, зависят от конкретной среды компании, в которой вы работаете.

В моей компании мне предлагают возможность практиковать эти навыки в безопасных условиях, подобных тем, которые мы назвали «Лагерь Зульке< /а>». Мой работодатель также предложил мне официальное обучение в этих областях. Наконец, культура конструктивной обратной связи в компании способствовала развитию многих людей.

Zuhlke Asia Camp 2019 @ Legacy Yen Tu, Vietnam

Технические навыки

Нет ни одного университетского образования, которое давало бы вам квалификацию архитектора программного обеспечения. Вам нужно узнать как можно больше обо всех областях разработки программного обеспечения, включая разработку программного обеспечения, кодирование, обеспечение качества, DevOps, проектирование производительности, безопасность программного обеспечения, управление проектами, поддержку программного обеспечения и т. д.

Эти навыки имеют решающее значение для создания решений, удовлетворяющих требованиям архитектуры программного обеспечения. Разговаривая с экспертами в команде разработчиков, архитектор программного обеспечения лучше понимает соответствующую информацию, потому что они приобрели практический опыт в этих областях.

В обычный рабочий день в качестве члена команды разработчиков я могу работать во всех областях, включая бэкенд, интерфейс и DevOps. Это позволяет мне видеть от первого лица, что происходит за кулисами, и держаться на близком расстоянии от моих команд.

Бизнес и процессы разработки

Бизнес-процессы описывают бизнес-операции организации и определяют бизнес-требования, которые обычно не формулируются четко как требования проекта программного обеспечения. Предполагается, что архитектор программного обеспечения должен знать или, по крайней мере, знать, у кого запрашивать соответствующую информацию о бизнес-процессах. Нередко архитектору программного обеспечения требуются годы, чтобы стать экспертом в предметной области, предоставляя решения организациям из одной отрасли.

Понимание важности технических процессов, жизненного цикла разработки программного обеспечения и лучших практик так же важно, как и знание бизнес-процессов. Это связано с тем, что архитектор программного обеспечения обычно играет решающую роль в обеспечении согласованности между бизнес-процессами и процессами разработки, что необходимо для получения повторяющихся результатов и реалистичного планирования проекта.

Лидерство

К настоящему моменту вы должны быть поражены тем, что архитекторы программного обеспечения обладают всеми знаниями и навыками. Ну, ответ, они не делают! Все это просто не может быть у одного человека. Для создания отличных продуктов требуется команда способных экспертов. Успешные архитекторы программного обеспечения часто являются эффективными лидерами, имея в своей команде замечательных членов и способствуя их развитию, чтобы они стали чем-то большим, чем отдельные личности.

Архитекторы программного обеспечения часто рассматриваются как представители команды. Они прилагают огромные усилия, чтобы руководить, управлять и согласовывать деловую сторону с технической стороной. Хотя люди часто думают, что лидеры ведут только вперед, иногда в одном проекте используются все пять стилей лидерства. Обучение лидерству, которое предлагала моя компания, научило именно этому.

Готовы ли вы повысить уровень своей карьеры, став архитектором программного обеспечения? Сейчас лучшее время для инвестиций!

Об авторе

Алан Тай – главный разработчик программного обеспечения в Zuhlke – международной консалтинговой компании премиум-класса, предоставляющей высококачественные решения для наших деловые партнеры. Если эта статья имеет смысл для вас, и вы хотели бы присоединиться ко мне в решении сложных проблем с нашим техническим совершенством, вот текущие вакансии в моем офисе в Гонконге:

Подпишитесь на меня в LinkedIn


Также опубликовано здесь.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE