Подготовка к System Design с нуля и для разных уровней
Эти книги и ресурсы пригодятся не только тем, кто готовится к собеседованиям в FAANG/Big Tech, но и тем, кто хочет развить свои навыки в architecture, software design и system design. Эти умения особенно важны для специалистов, стремящихся вырасти с уровней Junior/Middle до Senior/Staff/Architect.
Рекомендуется читать книги в оригинале, если вы планируете ориентироваться на мировой рынок труда (даже если не планируете переезд, но хотите работать с международными компаниями). Если таких целей нет или вам сложно с английским, можно рассмотреть переводы, однако учтите, что они часто содержат неточности и ошибки.
Beginner. Начать стоит с:
1) Clean Architecture: A Craftsman's Guide to Software Structure and Design by Robert C. Martin. Эта книга познакомит вас с основными парадигмами программирования, принципами SOLID, ключевыми подходами к архитектуре и многим другим.
Intermediate. Продолжить стоит с:
2) Building Microservices by Sam Newman. В этой книге рассматривается создание микросервисной архитектуры. Хотя микросервисы — это спорный подход, многие принципы применимы не только к ним, но и, например, к SOA.
3) [Опционально] System Design Interview: An Insider's Guide by Alex Xu. Книга охватывает основные концепции построения современных распределенных систем и предлагает множество реальных задач, которые встречаются на system design собеседованиях в компании, включая FAANG/Big Tech.
4) Курс Grokking the System Design Interview. Этот курс похож на предыдущую книгу, но в формате онлайн. Набор задач немного отличается.
5) [Опционально] Курс на algoexpert.io. Рекомендуется тем, кто уже занимается алгоритмами на этой платформе.
Advanced.
6) Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppmann. Рекомендую эту книгу всем, кто хочет углубиться в разработку высоконагруженных систем на уровнях Senior и выше. В ней детально раскрываются ключевые концепции современных высоконагруженных систем, включая replication, sharding, transaction isolation levels, two-phase commits, стриминг данных (например, Kafka), SQL и No-SQL базы, а также особенности распределенных систем.
7) [Опционально] Курс на educative.io: Grokking Modern System Design Interview for Engineers & Managers. Этот курс схож с Grokking the System Design Interview и книгой Alex Xu, но является более подробным и современным, с примерами из реальных system design собеседований.
8) [Опционально] Distributed Systems by Maarten van Steen, Andrew S. Tanenbaum
Для тех, кто хочет развиваться в AWS, то там есть и сертификация. Но для собеседований в FAANG (даже Amazon), эта сертификация не нужна. Но некоторые компании (не FAANG) могут наличие такого сертификата приветствовать.
Практика применения
Кроме самостоятельного изучения, важно получить практический опыт. Теория — это хорошо, но опыт работы с подобными системами незаменим. Постарайтесь найти проект у себя на работе, где можно поработать с архитектурой, распределенными и высоконагруженными системами, если это направление вам интересно. В FAANG/Big Tech получить подобный опыт проще, но зачастую такая возможность есть и в крупных локальных компаниях. Если ваш текущий работодатель не может предложить такой опыт, рассмотрите возможность смены работы. Однако, это имеет смысл, только если вы действительно хотите расти в этом направлении.
Post #471
3.96K