Привет, Хабр! Меня зовут Александр Бардаш, я главный архитектор интеграционных платформ в МТС. Сегодня расскажу, почему ИТ-архитекторам важно хотя бы иногда всегда читать книги, и поделюсь подборкой для начинающих. Жду вас под катом и в комментариях!
Архитекторы разные — и литература для них тоже
Начнем с того, что архитекторы бывают абсолютно разные. Например, одни вовлечены в бизнес-архитектуру и прорабатывают ее на уровне всей организации. Эти ребята больше углублены в бизнес-процессы, чем в технические.
А есть архитектура уровня solution. Это когда архитектор вместе с командой может спроектировать решение и убедиться, соответствует ли оно общим стандартам компании, не противоречит ли требованиям архитектора более высокого уровня. Такой специалист распределяет зоны ответственности между командами, сохраняя целостность решения.
Еще есть системные, инфраструктурные архитекторы и так далее. Все они отвечают за конкретные области.
У каждого своя специфика, поэтому советовать книги для всех архитекторов в целом — не совсем корректно. Но у меня есть подборка из пяти книг, которая подойдет тем, кто хочет расти в ИТ-архитектуре, — те самые основы из основ. На практике читать, конечно, придется намного больше.
5 книг для начинающих архитекторов
А вот и моя «базовая» подборка:
«Паттерны объектно-ориентированного проектирования», Ральф Джонсон, Джон Влиссидес, Ричард Хелм, Эрих Гамма.
«Микросервисы. Паттерны разработки и рефакторинга», Крис Ричардсон.
«Паттерны разработки на Python. TDD, DDD и событийно-ориентированная архитектура», Гарри Персиваль и Боб Грегори.
Strategic Monoliths and Microservices: Driving Innovation Using Purposeful Architecture, Tomasz Jaskula.
Cloud Native Microservices With Kubernetes: A Comprehensive Guide to Building, Scaling, Deploying, Observing, and Managing Highly-Available Microservices in Kubernetes, Aymen El Amri.
Дальше расскажу, чем мне нравится каждая из них.
«Паттерны объектно-ориентированного проектирования», Р. Джонсон, Дж. Влиссидес, Р. Хелм, Э. Гамма
И сразу приятная новость: есть хороший перевод. А еще сразу предупрежу: в книге даются примеры кода на C++, и это может напугать. Советую не поддаваться порыву отложить ее до лучших времен, потому что ребята рассказывают все достаточно просто и текст в принципе нацелен на понимание.
С момента выхода первого тиража прошло больше 20 лет, и за это время книга стала культовой. В ней описываются паттерны объектно-ориентированного программирования в работе с монолитными решениями и серверами ОА. Их придумали очень давно, и без них никуда не уедешь. Важно понимать, как и почему все это работает.
Книга поможет понять роли паттернов в архитектуре сложных систем, а еще — создавать собственные приложения с учетом ограничений, которые возникают при разработке крупных проектов. Шаблоны в книге взяты из реальных систем и основаны на реальных кейсах.
Если вы нацелены больше на монолитную работу, а значит, должны следить за решениями внутри кода — однозначно рекомендую эту книгу. По сути это и есть системная архитектура.
«Микросервисы. Паттерны разработки и рефакторинга», Крис Ричардсон
В книге описаны 44 паттерна проектирования микросервисных приложений. Она поможет понять, зачем вообще использовать микросервисную архитектуру, как декомпозировать задачу для микросервиса, какого размера он должен быть и так далее. Тут же про управление транзакциями и шаблоны запросов, стратегии тестирования и шаблоны развертывания.
Выдержки из этой книги уже гуляют по русскоязычным форумам. Энтузиасты сами создали подборки: 30 паттернов, 40 паттернов и так далее. Но я рекомендую именно первоисточник.
По промокоду IDKFA в Строках эти книги можно прочитать бесплатно. Активировать промокод — до 30.09.2024.
«Паттерны разработки на Python. TDD, DDD и событийно-ориентированная архитектура», Гарри Персиваль и Боб Грегори
Теория — это классно и здорово, но хороший архитектор должен опробовать свои знания на практике и больше углубиться в процесс работы. Эта книга как раз позволяет ознакомится с TDD, DDD подходами. Все это описано в книге — паттерны можно опробовать и на личном опыте понять, насколько вам удобно с ними работать.
Авторы пишут про:
«инверсию зависимостей» и ее связи с портами и адаптерами,
про паттерны и различия между ними — например, чем отличаются паттерны «Сущность», «Объект-значение» и «Агрегат»;
разделение ответственности на команды и запросы;
событийно-управляемую архитектуру и реактивные расширения.
Отдельно отмечу, что в книге много хороших примеров на Python. Я пользовался ими сам и вам тоже советую.
Strategic Monoliths and Microservices: Driving Innovation Using Purposeful Architecture, Tomasz Jaskula
Многие, услышав «микросервисы», сразу говорят: «Монолит — отстой». Но это неправда, все решения по-своему хороши.
Чтобы действительно понимать это, разбираться в этом и аргументировать свои решения, полезно прочитать эту книгу. Она написана на английском, перевод мне пока не попадался. Но ребята пишут легко и очень классно рассказывают о теме — было интересно читать.
Cloud Native Microservices With Kubernetes, Aymen El Amri
Напоследок одна из моих любимых книг об инфраструктурной части проектирования систем. Полное название: Cloud Native Microservices With Kubernetes: A Comprehensive Guide to Building, Scaling, Deploying, Observing, and Managing Highly-Available Microservices in Kubernetes.
Мы как архитекторы должны понимать, как приложение работает на уровне инфраструктуры, что такое CI/CD, high availability, GitOps и прочее. Об этом тезисно и подробно сказано в книге. Развернуто описаны современные ключевые истории: clinative, cubic architecture, QR компоненты.
Рекомендую эту книгу тем, кто действительно хочет быть многопрофильным архитектором.
Почему вообще нужно читать?
Быть архитектором — это постоянное обучение. Почти как быть программистом. Вот программист, например, выучил C++, но новаторских изменений в нем намного меньше, чем подходов разработки паттернов, фреймворков, технологий и так далее.
Архитектор — это человек, который должен быть в тренде всего и всегда. Чтобы понимать современные решения и разбираться в них, он должен постоянно учиться. Ему важно ориентироваться в выборе технологий, подходов, паттернов, фреймворка – все это может сильно повлиять на процессы компании, на продукт.
Работа архитектора заключается не только в том, чтобы спроектировать классную систему. Еще ее нужно защитить перед Tech Lead разработчиками, которые потом уже будут ее реализовывать. Например, как-то я показывал архитектуру в новой команде и мне сказали: «Да ну, твоя архитектура нам не подходит. Мы всегда работали с монолитами». И вот тогда мне пришлось аргументированно доказывать разработчикам, почему им стоит пользоваться именно моей архитектурой. Я много читал по этому (и не только) поводу — например, ту же Strategic Monoliths and Microservices. Так что мне не составило труда объяснить, почему через пять лет монолит выльется в проблему — даже если разработчики сейчас об этом не думают вообще. Архитектор всегда должен мыслить концептуально и наперед. К слову, убедить разработчиков у меня все-таки получилось.
Но чтобы продать архитектуру разработчикам, нужно сначала продать ее себе. То есть сначала нужно убедить самого себя, что твое решение — качественное и нужное. И сделать это, опять же, намного проще, если у тебя широкий кругозор, ты можешь оценить ситуацию с разных сторон и можешь делать прогнозы. Книги, конечно, в этом очень помогают.
Теперь слово вам! Расскажите в комментариях, какие книги уже читали и как оно. Сейчас я раздумываю над подборкой для уже опытных ИТ-архитекторов, так что скоро продолжим тему.