🔥 1 апреля: началась Предварительная подготовка
📅 1 мая: старт курса
ЗабронироватьЭто разбор паттернов и принципов программирования с акцентом на их нативную реализацию в JavaScript и TypeScript.
Мы поможем вам глубоко понять суть и особенности реализации каждого паттерна и принципа, а также закрепим знания на практических занятиях в малых группах.
Вы получите code review, обратную связь и валидацию ваших знаний от Тимура и команды опытных инженеров.
Мы разберём качественные характеристики кода — такие как понятность, семантичность, гибкость, поддерживаемость и ресурсоёмкость. Сфокусируемся на многомерном анализе этих характеристик и поиске их оптимального баланса.
Это позволит не только получать удовольствие от написания кода, но и упростит дальнейшую работу с ним.
В процессе прикладной работы вы накапливаете опыт, который со временем превращается во внутренние практики, принципы и подходы — зачастую даже неосознанно. Во время обучения вы будете узнавать знакомые методы, которые уже использовали ранее, даже не зная их формальных названий или определений.
Наша задача — помочь вам понять, как ваш практический опыт соотносится с фундаментальными подходами: когда уместно применять тот или иной паттерн и почему вы интуитивно приходили к похожим решениям.
Паттерны выступают в роли общей терминологии, доступной всем участникам процесса. Даже если кто-то не знаком с конкретным паттерном, он всегда может найти его формальное определение в интернете, избежав неправильной интерпретации ваших слов.
Понимание и использование паттернов способствует более точной и краткой передаче информации, а также снижает вероятность ее неверного восприятия.
Чем меньше времени вы тратите на разработку и поддержку кода — тем больше его остаётся на решение реальных бизнес-проблем.
Чем эффективнее вы справляетесь с прикладными задачами — тем выше ваша ценность для команды, компании и рынка в целом. А значит — тем больше становится и ваша профессиональная свобода.
С улучшением качества вашего кода и рабочих результатов коллеги и работодатели будут внимательнее прислушиваться к вашему мнению. Ведь оно будет подкреплено не только теоретической базой, но и реальными практическими достижениями.
Відеолекція на тему тижня.
Видеолекция по теме недели. Обучение занимает до 2 часов в неделю в удобное для вас время.
Тимур разбирает практические примеры применения знаний и отвечает на вопросы по теме недели.
Начало — в понедельник или вторник. Продолжительность — 1 час.
Групповая встреча с ментором для анализа кода и предоставления рекомендаций.
Дополнительно даётся неделя на доработку и сдачу домашнего задания.
В небольшой группе от 5 до 10 человек.
Продолжительность встречи — от 50 до 100 минут.
Структура и модульность.
Почему нужно переосмыслить и адаптировать GoF, SOLID и GRASP для современного JavaScript/TypeScript.
Как это сделать?
Задачи 1 Unit-a:
🧩 Существует путь, который ведёт к радикальному улучшению структуры и характеристик кода. Мы рассмотрим принципы и шаблоны GoF, SOLID, GRASP — как их применять и что они дают. Характеристики кода: читаемость, надёжность, тестируемость, поддерживаемость, повторное использование, гибкость, безопасность. Оптимальное использование вычислительных ресурсов: процессор, память, ввод-вывод и когнитивные ресурсы разработчиков.
⭐ Характеристики кода и стратегии оптимизации, механизмы V8, SOLID: SRP, SoC
⭐ Принципы GRASP — распределение ответственности
💡 Принципы SOLID
💡 Паттерны GoF
💡 Мономорфный и полиморфный код, inline-кэш, скрытые классы в JavaScript
JavaScript имеет встроенные контракты: Thenable, Iterable, AsyncIterator, Callback-last, Callable, Cancelable, Observable, но культура разработки через контракты и интерфейсы не слишком распространена в сообществе. Как улучшить производительность разработки с помощью подхода, основанного на знаниях? Как шаблоны могут помочь нам в этом: реализовывать новые фичи быстро и эффективно, быть продуктивными, делать ежедневную работу интересной, оставаться мотивированными и избегать выгорания.
⭐ Контракты Callback и Callback-last-error-first
⭐ Контракт Thenable
⭐ Контракты Iterator и AsyncIterator
⭐ Promise
💡 Паттерн Наблюдатель (Observer + Observable)
Порождающие шаблоны: Constructor, Singleton, Factory, Pool, Builder, Prototype, Flyweight, а также другие шаблоны и техники. Давайте найдём связанные принципы и переосмыслим прикладное значение: GRASP: Creator, Polymorphism, Information Expert SOLID: ISP (Interface Segregation Principle) А также разберёмся с такими концепциями, как Aggregation и Composition.
Как экономить память и другие ресурсы? Как эффективно применять оптимизации и кэширование? Как разрабатывать крайне быстрый код, минимизировать latency, сделать его кросс-платформенным и понятным для коллег?
⭐ GRASP: 👉 Information Expert, Creator, Polymorphism
⭐ SOLID: Interface Segregation Principle (ISP)
⭐ Инстанцирование: Constructor, Factory Method, Object Pool
⭐ Декомпозиция, инстанцирование, инкапсуляция, агрегация, композиция, ассоциация, делегирование
⭐ Порождающие паттерны GoF: 👉 Builder, 👉 Prototype, 👉 Singleton, 👉 Flyweight
⭐ Паттерн Revealing Constructor — открытый конструктор
💡 Фабрики и пулы объектов
💡 Ассоциация, агрегация и композиция объектов
Separation of Concerns (SoC) — это общий инженерный принцип, направленный на создание гибких, надёжных и легко модифицируемых систем.
Мы можем использовать следующие инструменты и подходы:
- Шаблоны GoF: Mediator, Bridge, Abstract Factory, Strategy(в реализации на JavaScript — Map)
- Системы модульности
- Принципы GRASP: Information Expert, Indirection, Protected Variations
- Принцип SOLID:SRP(Single Responsibility Principle)
Эти подходы улучшают тестируемость кода и снижают затраты на интеграцию.
⭐ Структура приложений: системы модульности, пакеты и зависимости
⭐ Слои и внедрение зависимостей
⭐ GoF Patterns: 👉 Abstract Factory, 👉 Factory Method, 👉 Strategy, 👉 Pool
⭐ GRASP: Indirection Principle, Protected Variations
💡 AsyncPool — шаблон асинхронного программирования (асинхронный пул) пул»
Мы научимся оптимизировать связность и зацепление между компонентами программных систем и проектировать их таким образом, чтобы они были готовы к коллаборативной разработке множеством участников без конфликтов. Мы разберёмся, как построить приложение таким образом, чтобы оно было готово обработать любой объём данных и было готово среагировать на все возможные ошибки и исключительные ситуации.
Паттерны: Adapter (Wrapper), Facade, Bridge, Composite, Proxy, Promisify; Front Controller; GRASP: Low Coupling and High Cohesion; SOLID: LSP (Liskov); и SOLID: OCP (Open-Closed). Применение контрактов открывает возможность пошагового рефакторинга, устранения технического долга и повышения стабильности подсистем; снижения зависимости (связанности) между слоями и модулями. На уровне управления проектом это позволяет масштабировать команду, управлять приоритетами и принимать архитектурные решения.
⭐ Контрактное программирование
⭐ Layers and Low Coupling на примере конфига и транспорта
⭐ GoF: 👉 Adapter, 👉 Proxy, 👉 Facade, 👉 Composite
⭐ GRASP: Зацепление и связность — Coupling and Cohesion
💡 SOLID: Liskov Substitution Principle (LSP) — Принцип подстановки Барбары Лисков
💡 Семинар по адаптерам для Node.js и асинхронного программирования
Следующий подход — это применение шин событий внутри приложения и между подсистемами. Это распространено в пользовательских интерфейсах, распределённых системах, совместном доступе к разделяемым ресурсам. На базе асинхронного и событийного программирования построено решение с неблокирующим вводом-выводом в Node.js. Мы рассмотрим GRASP: Pure Fabrication и Low Coupling; AsyncQueue, Async collections и другие.
⭐ События: EventTarget, EventEmitter
⭐ GRASP: Чистая выдумка — Pure Fabrication
💡 GoF: Паттерн Наблюдатель Observer + Observable
💡 Фазы Event-loop в V8 и Node.js
💡 Стрим с разбором Event Loop и асинхронности
Реактивное программирование развилось в отдельную парадигму; потоки и сигналы основаны на GoF: Observer; GRASP: Pure Fabrication и event-driven подходе с потоками данных и операторами преобразования данных. Это широко используется в сетевых протоколах, доступе к данным и файловым системам, разработке игр, финансовых и аналитических системах, управлении встроенными системами, телеметрии и других областях. Это даёт выразительный синтаксис, более высокий уровень абстракции, гибкость и производительность для улучшения пользовательского опыта.
⭐ Стримы: Readable, Writable, Transform, открытый конструктор, буферизация, backpressure
💡 Асинхронность на RxJS и потоки событий
💡 Работа с файлами, буферами и файловыми потоками
💡 Actor model — модель акторов
Мы рассмотрим лучшие практики обработки ошибок — как с исключениями, так и с доменными ошибками. Как Graceful shutdown, Gracefully recover и обработка доменных ошибок повысят общую производительность системы. Мы будем использовать Chain of Responsibility, SOLID, Promises, fallback-механизмы для некритических ошибок; GRASP: Protected Variations, а также кастомные, специфичные для JavaScript, AggregateError и Error.prototype.cause, а также сериализацию ошибок для передачи по сети.
⭐ Обработка ошибок, логирование и агрегирование
⭐ Семинар: Обработка ошибок — прикладных, операционных и доменных; исключения, восстановление и логирование
💡 Реализация Graceful shutdown в Node.js, unhandled exceptions, async stack trace
Объединение всех рассмотренных техник и подходов в реальных условиях. В этом юните мы рассмотрим, как основные концепции построения структуры приложений, такие как контрактное программирование и паттерны, превращаются в работающие и масштабируемые приложения.
Этот модуль сосредоточен на том, как особенности среды исполнения ложатся на задачи структуры и архитектуры приложений. Вы получите навык внедрения техник программирования, превращающих программное решение в платформу, рассчитанную на долгую эксплуатацию; это включает поддержку смены инструментария, расширения коллектива, постоянное интенсивное наращивание функциональности и нагрузок.
Для улучшения выразительности кода и ясности семантики любое сложное программное обеспечение требует создания DSL (языков, специализированных для предметной области). При разработке DSL можно использовать хорошо известные синтаксисы, такие как JSON, JSON5, Markdown и даже сам JavaScript.
Мы рассмотрим паттерны: Command, Interpreter, State, Strategy, Visitor.
DSL делает код понятным для аналитиков предметной области и даже опытных пользователей. Это улучшает общение и понимание, ускоряет разработку, адаптацию решений к новым требованиям, упрощает обучение и передачу знаний, скрывает технические сложности и позволяет специалистам сосредоточиться на своей области, улучшая общую предсказуемость проекта.
⭐ DSL (специализированные языĸи), AST, Pattern Interpreter, подмножество JavaScript, MarkDown, LISP
⭐ Pattern Interpreter — Реализация AST и LISP на JavaScript
⭐ Pattern Command
⭐ Example: Spreadsheet with formulas
💡 CQS, CQRS, Event Sourcing, Транзаĸции
Разработка систем, независимых от фреймворков, платформ, протоколов, баз данных и облачных решений, — как стандартный подход для обеспечения гибкости и свободы архитектурных решений. Такой подход устраняет зависимость от поставщиков облачных решений и фреймворков. Конечно, не нужно реализовывать все аспекты агностического подхода, но некоторые из них принесут значительные выгоды в масштабировании системы и в процессе её эксплуатации.
Мы будем использовать изоляцию, GRASP: Controller, SOLID: DIP, принципы IoC и DI, интерфейсы и паттерн Strategy для отвязки от конкретных реализаций.
⭐ SOLID: DIP — Принцип инверсии зависимостей (Dependency Inversion Principle)
⭐ Service Locator
На этой неделе мы рассмотрим, как проектировать системы, которые могут масштабироваться и развиваться эффективно, используя различные архитектурные стили: DDD, слоёная архитектура, SOA, микросервисы, событийная архитектура, монолитная, порты и адаптеры, чистая архитектура, Event-Sourcing, CQRS, Pipeline, Peer-to-Peer, Client-Server архитектура — и как применять SOLID, GRASP и GoF для реализации архитектуры.
Заключительная часть программы тренинга сосредоточена на практическом применении всех знаний в комплексе. Мы рассмотрим, как начать внедрять концепции и шаблоны, изученные на курсе, в реальных проектах. Этот модуль предоставляет практические стратегии для создания дорожной карты по их внедрению: как выявить необходимость в шаблонах и принципах и учесть возможные негативные аспекты. Рефакторинг унаследованных систем, внедрение новых методов разработки и активностей в коллективе. Как спланировать собственное обучение и наладить развитие команды, используя знания из этого тренинга.
⭐ Bridge;
⭐ Mediator;
⭐ Как применять паттерны на примере Mediator и Bridge в ООП, ФП, мультипарадигменном стиле
Узнайте, как шаблоны проектирования поддерживают масштабируемую, надёжную архитектуру и долгосрочную поддержку системы. Сфокусируйтесь на стратегических решениях и командном внедрении практик для достижения успешных результатов и создания бизнес-ценности. В этой части будет рассмотрено, как внедрять шаблоны проектирования в команды бэкенда и фронтенда, а также как бизнес-факторы влияют на архитектурные решения.
⭐ Обзор и классификация архитектуры ПО
⭐ Многослойная архитектура ПО, DDD, чистая архитектура ПО
⭐ Структура приложения: модульность, DI, DTO, модели
⭐ Очереди: Pub/Sub, Push/Pull, CQS, CQRS, Event Sourcing, Command, Query Object
⭐ Vertical Slice Architecture и Feature-Slice Design
⭐ Архитектура Web: DDD для фронтенда и бэкенда
⭐ Многопоточность для Web: Atomics/CAS, workers, locks, races
⭐ Local-first, распределённые системы, блокчейн для Web 3.0
⭐ Разбор того, почему большая часть внедрения даже самых хороших идей часто проваливается.
⭐ Что такое «репутация инженера» и какую роль она играет в успехе (или провале) изменений.
⭐ Как участники проекта — от разработчиков до менеджеров — по-разному смотрят на инженерные практики и их внедрение.
⭐ Типичные проблемы, с которыми сталкиваются команды при попытке внедрить инженерные подходы, — и практические решения, которые действительно работают.
⭐Список наиболее распространённых паттернов проектирования на фронтенде.
⭐Чем фронтенд отличается от бэкенда в разрезе применимости паттернов?
⭐Стоит ли бороться за чистоту концепций или всё-таки довериться фреймворкам? Спойлер: скорее второе, чем первое.
⭐Каков результат: понимание того, как применять полученные знания во фронтенде — и где делать этого не стоит.
$650
$550
3 месяца / ∞
Забронировать$1400
$1250
3 месяца / 200 мест
Забронировать$3100
$2850
4 месяца / 50 мест
Забронировать$10000
4 месяца / 3 места
ЗабронироватьДа, если вы прошли все занятия, но хотите больше практики или получить доступ к дополнительным модулям.
Доступ к уже имеющимся материалам и их обновлениям у вас сохраняется независимо от участия в следующих итерациях курса.
В формате Standard студенты обучаются в группах по 10 человек, в Senior — по 5. В Senior-группах — более квалифицированные разработчики, которые непосредственно занимаются разработкой сложных и высоконагруженных систем, их проектированием и поддержкой.
В Standard предусмотрен основной, базовый курс — он самодостаточный и оптимизированный, без перегрузки. В Professional дополнительно включены все материалы, которые Тимур подготовил, но сознательно не включил в базовую программу — чтобы не усложнять обучение для тех, у кого ограничено время. час.
Участники Professional-формата смогут изучать эти дополнительные лекции самостоятельно и обсуждать их с менторами.
Также в тариф Professional входит отдельный курс по архитектуре от Тимура, курс по soft skills от Ильи, и общая продолжительность обучения составляет 4 месяца — за счёт двух дополнительных модулей.
Да, оплата в криптовалюте доступна. Для этого выберите в чате при оплате связь с менеджером заботы.