Книжный куб
11.1K subscribers
2.65K photos
6 videos
3 files
1.96K links
Рекомендации интересных книг, статей и выступлений от Александра Поломодова (@apolomodov), технического директора и эксперта в архитектуре
Download Telegram
The Beauty of Simplicity - Making Your Own Technology • Yan Chernikov • YOW! 2024 (Рубрика #Architecture)

Посмотрел недавно интересно выступление Яна Черникова (The Cherno), австралийского разработчика, популярного YouTube-блогера и бывшего инженера Electronic Arts. Его основной вклад — образовательный контент по C++, разработке игровых движков и программированию, а также создание собственного 3D-движка Hazel. Черников прославился благодаря подробным видеоурокам по архитектуре игровых движков и практическим сериям по созданию Hazel с нуля. До Hazel он работал над движками Osiris и Frostbite в EA, но ушёл, чтобы сосредоточиться на собственных проектах и образовательной деятельности.

В этом выступлении он рассказал интересный доклад про красоту простоты. В своем докладе он подчёркивает ценность простоты как основы для выживания и эффективности в разработке собственных решений. Вот основные темы, что он затронул в своем рассказе
- Как он пришел к Hazel и почему это было вызовом самому себе и стало образовательным проектом для сообщества
- Как Hazel вырос из личного проекта в командную разработку благодаря вовлечённости сообщества и добровольцам
- Как выглядит образовательная часть - самHazel и сопутствующие видео используются для обучения C++, архитектуре движков и демонстрации реальных кейсов разработки
- Как сравнить использование готовых движков с созданием собственного продукта - Unity и Unreal Engine против Hazel
- Какие основные неявные критерии выбора: лицензии, поддержка, найм специалистов - все это важные аспекты при выборе между готовыми решениями и самостоятельной разработкой
- Как работать с зависимостями и почему важна модульность - лучше минимизировать внешние зависимости и работать модульно - это обеспечит гибкость и возможность менять отдельные модули под свои задачи
- Почему open source помогает делает свои решшение - сейчас есть много открытых решений, что позволяют ускорить разработку и делегировать часть задач готовым решениям
- Что такое VSDD (vertical slice driven development) - я уже как-то рассказывал про доклад "Designing for change with Vertical Slice Architecture - Chris Sainty - NDC London 2024", где об это рассказывают сильно подробнее
Вертикальная разработка и оптимизация
Подход VSDD: развитие всех компонентов проекта параллельно, а не углубление только в одну часть; простота как ключ к эффективной оптимизации.
- Почему важно поступательное движение и фокус на конечном продукте, а также зачем пробовать создавать свои решения, даже если это кажется сложным

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

#Architecture #SystemDesign #Engineering #Management #Software
7🔥5👍2
Диснейленд в Шанхае (Рубрика #Travel)

Во второй раз за месяц приехал в Китай, но на этот раз с семьей. Первым делом мы отправились в Диснейленд, чтобы прочувствовать атмосферу диснеевских мультфильмов. В принципе, у нас это получилось - мы пришли к 8.30 в парк, а ушли в районе 17.00, полностью посетив все, что входили в fast tack из 11 аттракционов. Круто, что самого маленького сына пустили почти везде. Особенно нам понравился громадный ландшафтый парк и общая атмосфера с музыкой и парадами игровых персонажей по улицам города. В общем, мы с женой вспоминили свое детство со старыми диснеевскими мультиками, а детишки простт увидели воплощенные сказки, которые они часто видят в телевизоре.

Один день на Дичнейленд конечно потратить стоит, но больше одного дня по нему ходить было бы скучно.

#Travel #Cinema
🔥18👍9🥰72
9 мая

Поздравляю всех с Днем Победы ... а себя еще и с окончанием поездки в Китай, где я провел две недели со своей семьей, чуток подустал от отдыха и рад вернуться на вторые майские праздники в Россию. В связи с этим мой перерыв с постами в этот канал оканчивается и дальше они пойдут примерно в прежнем темпе.
🔥24🫡24👍54🥴3😢1🕊1
Understanding Distributed Architectures - The Patterns Approach (Рубрика #Architecture)

Недавно на конференции YOW! 2024 выступил Unmesh Joshi, известный эксперт в области распределённых систем, который является Principal Consultant в ThoughtWorks с более чем 20-летним опытом работы в индустрии. Это выступление является кратким изложением его книги "Patterns of Distributed Systems", изданной в 2023 году в серии Мартина Фаулера (на сайте Мартина есть краткая версия каталога паттернов из этой книги). Понятно, что в 35 минутном выступлении рассказать все 30 паттернов из книги он не смог, но вот вот какие темы у него раскрыть получилось
- Введение в распределённые системы - современные системы включают облачные сервисы (cloud services), Kafka, Kubernetes и многие другие распределённые технологии.
- Самоподобие шаблонов - паттерны (patterns) применимы на разных уровнях абстракции и часто демонстрируют свойства самоподобия (self-similarity). Мне это напомнило фракталы:)
- Изучение открытого кода - для выявления шаблонов Unmesh использует "правило трёх реализаций", анализируя open source проекты распределенных систем (Kafka, K8s, Cassandra, ...)
- Каталог из 30 шаблонов - созданный автором каталог шаблонов помогает понять внутреннее устройство распределённых систем, с примерами из реальных продуктов.
- "Симпатия к платформе" - концепция, аналогичная "механической симпатии" (mechanical sympathy) в автогонках, помогающая эффективно использовать системы.
Mechanical sympathy is when you use a tool or system with an understanding of how it operates best. You don't have to be an engineer to be be a racing driver, but you do have to have Mechanical Sympathy. Jackie Stewart, racing driver.

- Важность практического опыта - реальный код устраняет двусмысленность и превращает абстрактные концепции в конкретные решения. У автора на Github есть репозитории с примерами распределенных систем для оркестрации контейнеров (аля K8s), messaging system (аля Kafka), nosql database (аля Cassandra)
- Структурирование через шаблоны - паттерны помогают организовать информацию и сделать код более понятным, устраняя неясности в документации. Я бы добавил, что они позволяют использовать инженерам общий язык при проектировании сложных систем
- Архитектура как последовательность паттернов - знание шаблонов упрощает понимание сложных архитектур, а также проектирование собственных систем
- Согласованное ядро и управление метаданными - пример паттерна, где небольшой кластер с высокой степенью согласованности (high consistency) управляет метаданными (metadata), что позволяет основному кластеру масштабироваться до тысяч узлов (nodes). По-факту, это стандартная концепция с разделением control plane и data plane.
- Применение шаблонов в реальных системах - у автора есть демонстрация реализации паттернов на примере мнииатюрных версий Kubernetes и Kafka для обучения (можно поискать на Github аккаунте автора, который я приводил выше)

Ну и финальная мысль выступления в том, что эти шаблоны помогают уменьшить случайную сложность (accidental complexity) и прояснить существенную сложность (essential complexity) распределённых систем (distributed systems), что помогает разобраться с таким сложной темой:)

#Software #Architecture #DistributedSystems #SystemDesign #Patterns #Sofware
👍13🔥82
Конференция T-Observability Day 2025 (Рубрика #SRE)

19 мая в Москве пройдет конференция для обмена опытом и обсуждения современных практик в области наблюдаемости, мониторинга и управления инцидентами в сложных распределённых системах. Доступно как оффлайн, так и онлайн участие. В программе будут три отдельных сессии
1) 10:30—12:00 - Сессия лидеров-визионеров
Здесь пройдет дискуссия о том, как повысить операционную устойчивость и эффективность бизнеса. Участники обсудят как в условиях 2025 года эффективно развиваться, какую роль в этом играют платформы наблюдаемости и аналитики операционных данных и что за горизонтом: какие технологические тренды ближайшего будущего важно отслеживать уже сегодня
2) 12:30–14:15 - Сессия практиков

Здесь пройдет дискуссия о том, как совмещать два в одном: наблюдаемость и непрерывную аналитику операционных данных. Участники поговорят о сценариях использования платформ наблюдаемости в разных отраслях: как расти, масштабировать бизнес, становиться ближе к клиентам с помощью лучшего опыта и проактивного сервиса. Обеспечивать надежность, безопасность цифровых продуктов и быстрее внедрять инновации
3) 15:00–16:45 - Сессия разработчиков и пользователей
Здесь
пройдет дискуссия о том, как выглядит технологический вектор развития платформ наблюдаемости и связанных с ними компонентов. Участники разберут какие подходы, платформы и инструменты актуальны для решения задач наблюдаемости, мониторинга и инцидент-менеджмента.

А кроме выступлений будут еще зоны для прямого общения с инженерами и разработчиками платформ, где можно узнать о решениях FineDog (управление жизненным циклом инцидентов) и Sage (наблюдаемость инфраструктуры, кросс-кластерный поиск, алертинг и дашборды). Кроме этого будет рассказ про Технологический радар Observability на базе радаров от Thoughtworks, куда входят 80+ практик, платформ, фреймворков и инструментов по наблюдаемости за последние 15 лет — для внедрения и развития современных практик и инструментов SRE, DevOps, ITOps, NetOps

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

#SRE #DevOps #Architecture #Software #Processes #Metrics #Engineering
🔥1142👍1
Balancing Coupling in Software Design - GoTo Book Club 2025

В недавнем интервью для GOTO 2025 Влад Хононов представил свою новую книгу "Balancing Coupling in Software Design" в беседе с Шином Брисалсом. Про книги и выступления Влада я уже как-то рассказывал раньше
- Про его книгу "Learning DDD", на которую я написал 4 кратких обзора: общий обзор DDD, DDD и микросервисы, DDD и event-driven architecture, DDD и data mesh
- Про его выступление "Сложность и модулярность две стороны одной медали" на ArchDays с частью истории про coupling еще до публикации книги (1 и 2)
А вот интервьюера я видел в первый раз, хотя Шин Брисалс тоже автор книги "Serverless Development on AWS: Building Enterprise-Scale Serverless Solutions" (O'Reilly, 2024), который специализируется на помощи командам в проектировании, создании и эксплуатации устойчивых serverless-решений

Основными темами интервью были
- История исследования coupling в системах - здесь Влад рассказывает, как неудачный проект с микросервисами подтолкнул его к глубокому изучению принципов coupling в архитектуре ПО
- Вневременная природа проблем проектирования - несмотря на эволюцию технологий, базовые принципы проектирования и управления связями остаются неизменными на протяжении десятилетий. Влад вдохновлялся книгами 70-х годов
- Три измерения связей: интеграционная сила (knowledge sharing), дистанция и волатильность - фундаментальная модель для оценки связей между компонентами. Ниже представлены основные идеи об этих трех измерениях, хотя собеседники их прямо отдельно не проговаривали
-- Оценка силы интеграции между компонентами является ключевой, начиная от интрузивной связи (высокий обмен знаниями) до контрактной связи (низкий обмен знаниями).
-- Когда физическое расстояние между компонентами увеличивается (например, переход к микросервисам), связь должна быть сбалансирована за счет сокращения общих знаний (например, с четкими контрактами API и отсутствием прямого доступа к данным).
-- Прогнозирование и управление изменчивостью, т. е. скоростью изменений, также имеет решающее значение при проектировании для соответствующего уровня связи. Если один компонент, например устаревшая система, не должен меняться, то высокая сила интеграции или большое расстояние не являются проблемой.
- Декомпозиция проблем и оценка сложности - подходы к разбиению сложных задач и объективной оценке их сложности с учетом неопределенности
- Локальная vs глобальная сложность - как оптимизация локальной сложности отдельных компонентов может привести к увеличению глобальной сложности системы
- Модульность как противовес сложности - модульность является ключом к созданию масштабируемых и поддерживаемых систем
- Границы знаний и абстракции - как правильные абстракции создают эффективные границы знаний между компонентами
- Креативный подход к техническому писательству - использование поэзии в технической книге для лучшего донесения сложных концепций (здесь Влад рассказывает как genAI помогал ему писать стихи для этой книги)

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

#Software #Architecture #DistributedSystems #SystemDesign #Patterns #Sofware #Metrics #Management
🔥14👍54
[1/2] Head First Software Architecture (Head First. Архитектура ПО) (Рубрика #Architecture)

В отпуске я прочел книгу из серии Head First по архитектуре, которая вышла в марте прошлого года на английском, а в апреле этого уже появилась на русском в издательстве Питер. Вообще, я люблю серию "Head First" за доступное объяснение сложных тем, а архитектура софта - это определенно сложная тема:) Авторами книги были Раджу Ганди, Марк Ричардс и Нил Форд, причем двух последних я знаю хорошо - я читал их книги по архитектуре и мне показалось, что они уже исписались и я зарекся их читать. А вот Raju Gandhi был для меня новичком, но оказалось, что он уже написал несколько книг в серии "Head First" и его опыт благотворно повлиял на книгу - она мне показалась интереснее и полезнее "Fundamentals of Software Architecture" и "Software Architecture: The Hard Parts", которые писали Форд и Ричардс без Ганди:) Кстати, про обе книги я уже рассказывал: "Fundamentals ..." и "... Hard Parts".

Если же возвращаться к книге "Head First Software Architecture", то это доступное введение в основы software architecture, оформленное в визуально насыщенном стиле (аля комикс), основанном на исследованиях в области когнитивных наук, что делает ее отличной отправной точкой для разработчиков, желающих освоить архитектурное мышление.

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

1) Architectural Characteristics
Это то, какие свойства (нефункциональные требования, атрибуты качества, архитектурные характеристики) система должна поддерживать - такие как scalability, testability, availability и др. Интересно, что я недавно разбирал whitepaper "Quality Metrics in Software Architecture" (1 и 2), где очень подробно разбирались - QualityElements - элементы качества, которые по мнению авторов этой статьи юывают трех видов
- Metric — конкретная метрика для измерения качества архитектуры
- QualityCharacteristic — глобальная характеристика качества (например, reliability, maintainability)
- QualityAttribute — атрибут качества, связанный с одной из характеристик
Авторы книги настолько не упарываются по этим -ilities, но отмечают, что архитектурные характеристики — это основа архитектуры, без которой невозможно принимать архитектурные решения или анализировать компромиссы.
2) Architectural Decisions
Это решения, оказывающие долгосрочное или значимое влияние на систему, например, выбор базы данных, количество сервисов, способы их взаимодействия. Architectural decisions задают структуру для команд разработки, определяя, например, количество сервисов и типы баз данных. Забавно, что лет 5 назад я сам рассказывал про наши архитектурные процессы в Т (Архитектура в масштабе на ArchDays 2020) и там было про RFC (request for comments) и ADR (architecture decision records)
3) Logical Components
Это функциональные строительные блоки системы и их взаимодействие. Например, в e-commerce системе это могут быть inventory management и payment processing. Logical components - это как комнаты в доме: базовые структурные элементы с определённой функцией.
4) Architectural Styles
Это общее физическое устройство и структура системы, аналогично тому, как план здания определяет структуру дома. Architectural styles можно классифицировать по
- Стилю разбиения (technical или domain partitioned)
- Модели деплоя (monolithic или distributed)

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

#Architecture #Software #Engineering #SystemDesign #DistributedSystems #Metrics #Architect
12👍12🔥5
[2/2] Head First Software Architecture (Head First. Архитектура ПО) (Рубрика #Architecture)

Продолжая рассказ об этой книге о проектировании софта, стоит начать с алгоритма создания архитектуры на основе четырех измерений, который по мнению авторов выглядит примерно так
1) Определить architectural characteristics на основе требований. Важно выяснить, какие quality attributes критичны для вашей системы (performance, scalability и др.)
2) Принять architectural decisions - на основе выявленных характеристик принять решения о технологиях, паттернах и подходах
3) Определить logical components - разбить систему на функциональные блоки с учетом как раз функциональных требований, которые должны быть реализованы системой, а также архитектурных характеристик
4) Выбрать architectural style - подобрать стиль (например, microservices, layered), который поддерживает ваши характеристики, решения и компоненты
Все четыре измерения взаимосвязаны - каждое должно соответствовать остальным. Architectural style должен соответствовать выбранным характеристикам и решениям, а logical components - поддерживать характеристики и вписываться в стиль.

Структура книги выглядит следующим образом: в первых пяти главах дается введение в архитектуру и разбираются четыре измерения, описанные выше
1. Software Architecture Demystified: Let’s Get Started!
2. Architectural Characteristics: Know Your Capabilities
3. The Two Laws of Software Architecture: Everything’s a Trade-Off
4. Logical Components: The Building Blocks
5. Architectural Styles: Categorization and Philosophies

В следуюзих частях разбираются архитектурные стили, причем авторы используют схему со звездочками для каждого стиля по избранным архитектурным характеристикам, куда входят maintainability, testability, deployability, simplicity, evolvability, performance, scalability, elasticity, fault tolerance, overall cost. Эти стили примерно соответствуют тому, что было в книге "Fundamentals of Software Architecture", где я в первый раз увидел эти таблички с этими рейтингами
6. Layered Architecture: Separating Concerns
7. Modular Monoliths: Driven by the Domain
8. Microkernel Architecture: Crafting Customizations
9. Do It Yourself: The TripEZ Travel App
10. Microservices Architecture: Bit by Bit
11. Event-Driven Architecture: Asynchronous Adventures

В последней главе авторы предлагают спроектировать систему на основе выданных требований, используя алгоритм, предложенный в предыдущих главах
12. Do It Yourself: Testing Your Knowledge

Заканчивается все приложением "A. Leftovers: The Top Six Topics We Didn’t Cover", в котором авторы обсуждают интересные темы, что не влезли в основную часть книги
- Должен ли архитектор писать код
- В чем состоят обязанности архитектора
- Какие навыки, кроме технических, полезны архитектору
- Немного про построение архитектурных схем
- О глубине и широте знаний архитекторов
- О пользе архитектурных кат

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

#Architecture #Software #Engineering #SystemDesign #DistributedSystems #Metrics #Architect
👍105🔥5
Обложки книг "Head First Software Architecture" и "Head First. Архитектура ПО", а также пара внутренних страниц
9👍8🔥4