Contents
С чего начать
Resolution
Project/product management
- Управление разработкой: карта трека, три контура и зачем инженеру классика
- Этапы жизненного цикла ПО
- Модели разработки ПО
- Подходы к разработке ПО
- PMBoK
- Prince2
- Ландшафт стандартов: ISO 21500/21502, IPMA ICB, P3.express, ГОСТ и модели зрелости
- Устав, содержание и WBS: три базовых документа проекта и контроль изменений
- Предварительная оценка проекта
- Декомпозиция задач: вертикально или горизонтально, восемь приёмов и границы дробления
- Делегирование
- Генерация идей
- Принятие решений в проекте: типы решений, DACI и RAPID, ADR, эскалация и допуски
- Контроль исполнения и извлечённые уроки: отчётность, освоенный объём, health check, база знаний
Development
- Инженерная практика: анатомия системы и карта трека
- Client side
- Server side
- Базы данных
- Интеграция: как части системы разговаривают друг с другом
- Распространенные архитектурные шаблоны
- git
- Инструменты
- Сборка и зависимости: от исходника до артефакта
- Качество в потоке: линтеры, типы, тесты и ревью как автоматика
- CI/CD
- Окружения, конфигурация и секреты
- Масштабирование
- Эксплуатация и эволюция: жизнь системы после релиза
- Как создать хороший Pull Request
Языки программирования
Полные курсы «с нуля до продакшена»: основы, идиоматика, конкурентность, тестирование, архитектура, деплой, наблюдаемость и место языка в SDLC. Каждый трек заканчивается курированным списком лучших блогов и книг.
Go
- Go: обзор языка и дорожная карта курса
- Установка Go и инструментарий: тулчейн, модули, линтеры, layout
- Основы Go: типы, срезы, карты, управление потоком и модель значений
- Идиоматичный Go: обработка ошибок, паттерны и стиль
- Конкурентность в Go: горутины, каналы, context, sync и паттерны
- Тестирование в Go: табличные тесты, моки, интеграция и CI
- Архитектура и прод-код на Go: слои, DI, конфигурация и БД
- Деплой и наблюдаемость Go: статический бинарник, Docker, метрики и трейсинг
- Go в SDLC: CI/CD, релизы, безопасность зависимостей и лучшие ресурсы
- Рантайм Go изнутри: планировщик, стеки, escape-анализ и сборщик мусора
- Дженерики и итераторы в Go: параметры типа, ограничения и range-over-func
- Стандартная библиотека вглубь: io, bufio, encoding/json, time, exec, embed и шаблоны
- Метапрограммирование в Go: reflect, теги структур, кодогенерация, unsafe и cgo
- CLI-приложения на Go: flag и cobra, контракт терминала, конфигурация и дистрибуция
Elixir
- Elixir с нуля до продакшена: обзор курса и философия языка
- Установка и инструментарий Elixir: asdf, Mix, Hex, форматтер, Credo, Dialyzer
- Основы Elixir: паттерн-матчинг, неизменяемость, структуры данных и управление потоком
- Идиоматика Elixir и обработка ошибок: теги, with, поведения, протоколы, антипаттерны
- Конкурентность в Elixir: процессы, OTP, супервизия, GenStage/Broadway и распределённость
- Тестирование в Elixir: ExUnit, async, doctests, Mox и property-based со StreamData
- Архитектура Elixir-приложений: контексты, гексагональная архитектура, Ecto и устойчивость
- Деплой и наблюдаемость Elixir: mix release, Docker, telemetry, OpenTelemetry, observer
- Elixir в SDLC: CI/CD, релизная стратегия, безопасность зависимостей и лучшие ресурсы
- Phoenix изнутри: Plug, Endpoint, роутер, контроллеры, HEEx и каналы
- Phoenix LiveView: интерактивный UI с состоянием на сервере
- Метапрограммирование Elixir: AST, quote/unquote, гигиена, макросы и DSL
- Erlang-интероп и бинарные данные: битовый синтаксис, iodata, порты, NIF и Rustler
- Внутренности BEAM: планировщики, редукции, сборка мусора и настройка ноды
TypeScript
- TypeScript: обзор языка и дорожная карта курса
- Установка и тулчейн TypeScript: от Node до tsconfig
- Система типов TypeScript: фундамент
- Продвинутые типы, идиомы и обработка ошибок в TypeScript
- Конкурентность в TypeScript: event loop, Promise и async/await
- Тестирование в TypeScript: пирамида, Vitest, моки и CI
- Продакшн-архитектура на TypeScript: слои, DI, БД, устойчивость
- Деплой и наблюдаемость TypeScript-сервиса
- TypeScript в SDLC: CI/CD, релизы, безопасность и лучшие источники
- Модули и файлы деклараций: ESM, CommonJS и типы чужого кода
- Классы, ООП и декораторы в TypeScript
- Типобезопасные API-контракты: tRPC, OpenAPI, GraphQL и кодогенерация
- Миграция JavaScript → TypeScript и производительность компилятора
- Compiler API, ts-morph и кодмоды: автоматизация над кодовой базой
C# / .NET
- C# и .NET: обзор языка, философия и дорожная карта курса
- Установка и тулчейн .NET: SDK, dotnet CLI, NuGet и структура проекта
- Основы C#: типы, nullable, записи, pattern matching, LINQ и память
- Идиоматика C# и обработка ошибок: исключения, Result, IDisposable, паттерны
- Конкурентность в C#: async/await, Task, Channels и как не словить дедлок
- Тестирование в .NET: xUnit, моки, property-based, Testcontainers и CI
- Архитектура прод-приложений на .NET: DI, слои, Options и EF Core
- Деплой и наблюдаемость .NET: publish, Docker, OpenTelemetry и перф
- .NET в SDLC: CI/CD, релизы, безопасность зависимостей и лучшие ресурсы
- Типы и абстракции C#: наследование, интерфейсы, дженерики, делегаты и события
- Ввод-вывод, JSON и HTTP в .NET: потоки, System.Text.Json и IHttpClientFactory
- ASP.NET Core изнутри: конвейер middleware, маршрутизация, связывание и доступ
- Фоновая обработка в .NET: Generic Host, BackgroundService, очереди и graceful shutdown
- Производительность .NET: аллокации, Span, бенчмарки, GC и JIT
Python
- Python: обзор языка, экосистема и дорожная карта курса
- Установка и инструментарий: версии, venv, pip, uv, poetry, линтеры
- Модель данных Python: объекты, ссылки, изменяемость, dunder-методы
- Коллекции: списки, словари, множества, кортежи и их устройство
- Функции, области видимости, замыкания, декораторы
- ООП в Python: классы, наследование, MRO, дескрипторы, dataclasses
- Идиоматичный Python: генераторы, итераторы, контекстные менеджеры, comprehensions
- Аннотации типов: mypy, Protocol, generics, строгость в реальном проекте
- Исключения и обработка ошибок: иерархия, свои исключения, EAFP
- Модули, пакеты и распространение: импорты, структура проекта, публикация
- Стандартная библиотека: что в ней есть и почему это стоит знать
- Конкурентность: GIL, threading, multiprocessing, asyncio — что когда
- Тестирование: pytest, фикстуры, моки, property-based, покрытие
- Производительность: профилирование, оптимизации, C-расширения, PyPy
- Работа с данными: numpy, pandas, форматы, типичные ошибки производительности
- Веб и API: FastAPI, Django, валидация, асинхронные приложения
- Продакшн-архитектура: слои, зависимости, конфигурация, логирование
- Деплой, наблюдаемость, SDLC и лучшие ресурсы по Python
Java
- Java: обзор языка, платформы JVM и дорожная карта курса
- Установка и инструментарий: JDK, Maven, Gradle, структура проекта
- Основы Java: типы, ссылки, строки, управление потоком
- ООП в Java: классы, интерфейсы, наследование, records и sealed-типы
- Коллекции и дженерики: устройство, выбор структуры, вариантность
- Идиоматика и обработка ошибок: исключения, Optional, immutability
- Stream API и функциональный стиль: лямбды, коллекторы, ленивость
- Конкурентность: потоки, executors, CompletableFuture, виртуальные потоки
- JVM изнутри: байткод, области памяти, сборщики мусора, JIT
- Тестирование: JUnit 5, Mockito, Testcontainers, интеграционные тесты
- Spring и Spring Boot: DI, конфигурация, web-слой, что происходит под капотом
- Работа с данными: JDBC, JPA/Hibernate, транзакции, N+1 и другие ловушки
- Архитектура прод-приложений: слои, модули, конфигурация, устойчивость
- Производительность: профилирование, JMH, настройка GC, типичные утечки
- Деплой и наблюдаемость: сборка, контейнеры, метрики, трейсинг
- Java в SDLC: CI/CD, зависимости, безопасность и лучшие ресурсы
Rust
- Rust: обзор языка, философия безопасности и дорожная карта курса
- Установка и инструментарий: rustup, cargo, clippy, rustfmt
- Основы Rust: типы, переменные, управление потоком, функции
- Владение и заимствование: модель памяти без сборщика мусора
- Времена жизни: зачем нужны, как читать аннотации, типичные ошибки
- Типы и трейты: обобщения, диспетчеризация, типажи стандартной библиотеки
- Обработка ошибок: Result, Option, оператор ?, свои типы ошибок
- Коллекции и итераторы: ленивость, адаптеры, эффективность
- Бесстрашная конкурентность: потоки, каналы, Send и Sync, разделяемое состояние
- Асинхронный Rust: future, tokio, async/await и его подводные камни
- unsafe и FFI: когда необходимо, как ограничить, связь с C
- Тестирование и документация: тесты, doc-тесты, бенчмарки, property-based
- Прод на Rust: структура проекта, модули, конфигурация, ошибки в проде
- Экосистема и ресурсы: веб, встраиваемое, WASM, куда двигаться дальше
C и системное программирование
- C и системное программирование: карта трека и зачем это сегодня
- Основы C: типы, операторы, управление потоком, функции
- Память и указатели: адреса, разыменование, арифметика указателей
- Массивы, строки и структуры: раскладка в памяти и выравнивание
- Динамическая память: malloc, free, утечки, фрагментация, свои аллокаторы
- Сборка и компоновка: препроцессор, объектные файлы, статические и динамические библиотеки
- Отладка и диагностика: gdb, valgrind, санитайзеры, чтение core dump
- Системные вызовы и ввод-вывод: файлы, дескрипторы, буферизация
- Процессы и сигналы: fork, exec, каналы, обработка сигналов
- Потоки и синхронизация: pthreads, мьютексы, условные переменные, атомарность
- Ассемблер для программиста: регистры, стек, соглашения о вызовах
- Неопределённое поведение и безопасность памяти: как ломается и как не ломать
- C++ после C: RAII, классы, шаблоны, умные указатели — что меняется
- Современные альтернативы: Rust, Zig, Go — когда уходить с C и когда оставаться
База знаний
Учебные треки от фундамента до продукта. Навигация — в каталоге курсов и на странице роадмапа.
Фундамент: математика, структуры данных, алгоритмы, ОС, парадигмы, принципы
Математика для программиста
- Математика для программиста: карта трека и зачем она нужна на практике
- Теория множеств: от наивной к аксиоматической
- Математическая логика и доказательства: как рассуждать строго
- Дискретная математика и комбинаторика
- Теория графов: структуры, свойства и теоремы
- Линейная алгебра: векторы, пространства, базисы и линейная независимость
- Матрицы, линейные отображения, определители и системы уравнений
- Собственные значения, SVD и матричные разложения
- Абстрактная алгебра: группы, кольца, поля и моноиды в коде
- Теория категорий: объекты, морфизмы, функторы, естественные преобразования
- Теория категорий в программировании: функторы, монады, F-алгебры, линзы
- Теория вычислимости: машина Тьюринга, лямбда-исчисление, проблема остановки
- Теория сложности: классы P, NP, PSPACE, редукции и полнота
- Автоматы, формальные языки и грамматики
- Теория вероятностей и статистика для инженера
- Численные методы: точность, устойчивость, арифметика с плавающей точкой
- Теория игр: равновесия, механизмы, приложения в распределённых системах
- Теория хаоса и динамические системы: аттракторы, фракталы, чувствительность
Структуры данных
- Структуры данных: карта трека и как выбирать структуру под задачу
- Асимптотика, амортизация и модель памяти: как на самом деле считать стоимость
- Массивы, динамические массивы и строки
- Связные списки: односвязные, двусвязные, кольцевые
- Стеки, очереди и деки
- Хеш-таблицы: хеш-функции, коллизии, открытая адресация
- Деревья и бинарные деревья поиска
- Сбалансированные деревья: AVL, красно-чёрные, B-деревья
- Кучи и приоритетные очереди
- Префиксные деревья, суффиксные массивы и строковые структуры
- Графы: представления, свойства и выбор структуры
- Система непересекающихся множеств (DSU)
- Дерево отрезков и дерево Фенвика
- Вероятностные структуры: Bloom filter, HyperLogLog, Count-Min Sketch
- Персистентные и конкурентные структуры данных
Алгоритмы
- Алгоритмы: карта трека и как учиться решать задачи
- Анализ алгоритмов: асимптотика, инварианты и доказательство корректности
- Сортировки: от пузырька до Timsort и radix
- Поиск и бинарный поиск, в том числе по ответу
- Два указателя и скользящее окно
- Рекурсия и разделяй-и-властвуй
- Жадные алгоритмы и когда они корректны
- Динамическое программирование: от мемоизации до оптимизаций
- Обходы графов: BFS, DFS, топологическая сортировка, компоненты
- Кратчайшие пути: Дейкстра, Беллман–Форд, Флойд–Уоршелл, A*
- Остовные деревья и потоки в сетях
- Строковые алгоритмы: KMP, Z-функция, Ахо–Корасик, хеширование
- Вычислительная геометрия: примитивы, выпуклая оболочка, sweep line
- Теория чисел и математика для алгоритмов и криптографии
- Рандомизированные алгоритмы и вероятностный анализ
- NP-полнота, приближённые и эвристические алгоритмы
- Параллельные и распределённые алгоритмы, консенсус
- Потоковые алгоритмы и алгоритмы внешней памяти
- Практическая оптимизация: кэш, ветвления, профилирование, SIMD
Операционные системы
- Операционные системы: карта трека и что программисту нужно знать об ОС
- История ОС: от Multics и Unix до BSD, Linux и наших дней
- Архитектуры ядер: монолитное, микроядро, гибридное, экзоядро, unikernel
- Процессы, потоки и планировщики
- Управление памятью: виртуальная память, страницы, TLB, swap, аллокаторы
- Файловые системы: VFS, ext4, XFS, btrfs, ZFS, журналирование
- Ввод-вывод, драйверы, прерывания и DMA
- Системные вызовы и межпроцессное взаимодействие
- Сетевой стек операционной системы: от сокета до драйвера
- Безопасность и изоляция: права, capabilities, SELinux, namespaces, cgroups, jails
- Загрузка системы: BIOS и UEFI, MBR/GPT, GRUB, systemd-boot, initramfs
- Системы инициализации: SysV, systemd, runit, OpenRC, launchd, rc.d в BSD
- Linux для программиста: базовый курс всего необходимого
- Командная строка и инструментарий Linux: shell, утилиты, процессы, пакеты
- Наблюдаемость и производительность ОС: /proc, strace, perf, eBPF, ftrace
- Семейство BSD: FreeBSD, OpenBSD, NetBSD, DragonFly — философия и различия
- Другие ОС: macOS и XNU, Windows NT, Solaris/illumos, Plan 9, RTOS
- Графический стек: X11, Wayland, оконные менеджеры, композиторы и DE
- Виртуализация и контейнеры: KVM, Xen, QEMU, jails, zones, OCI-рантаймы
- Как пишут свою ОС: от bootloader до планировщика и что читать дальше
Парадигмы разработки
- Парадигмы программирования: карта, история и как они связаны
- Императивная и процедурная парадигмы
- Объектно-ориентированное программирование: инкапсуляция, полиморфизм, наследование
- Функциональное программирование: чистота, неизменяемость, композиция
- Декларативное и логическое программирование
- Конкурентные парадигмы: акторы, CSP, STM, разделяемая память
- Реактивное программирование и dataflow
- Обобщённое программирование и метапрограммирование
- Аспектно-ориентированное и событийно-ориентированное программирование
- Как выбирать и смешивать парадигмы в реальном проекте
- Автоматное программирование: состояние как явная величина
- Программирование, ориентированное на данные: DOP, ECS и массивы
- Модульное и компонентное программирование: единица композиции крупнее функции
- Парадигмы за горизонтом: вероятностное, дифференцируемое и квантовое программирование
Принципы разработки
- Принципы разработки: зачем нужны и как не превратить их в карго-культ
- SOLID: пять принципов с честным разбором и критикой
- DRY, KISS, YAGNI и цена преждевременной абстракции
- Связанность, связность и закон Деметры
- Чистый код: имена, функции, границы, комментарии
- Запахи кода и каталог рефакторингов
- Принципы тестирования: пирамида, TDD, BDD, свойства хорошего теста
- Twelve-Factor App и cloud-native принципы
- Обработка ошибок, контракты и отказоустойчивое мышление
- Код-ревью, командные стандарты и Definition of Done
- Зависимости: компонентные принципы, циклы и цена чужого кода
- Совместимость: как менять то, чем уже пользуются
- Легаси-код: швы, характеризующие тесты и безопасные изменения
- Принципы, которые проверяет машина: типы, линтеры, архитектурные тесты и quality gates
Железо, системное мышление и логика
Железо и архитектуры
- Железо и архитектуры: карта трека и где он начинается
- От ламп до кристалла: как физика формировала архитектуру
- Транзистор и вентиль: что происходит под булевой логикой
- Система команд: контракт между железом и программой
- RISC и CISC: спор, который закончился не победой, а смешением
- RISC-V: открытая система команд и почему это важно
- Конвейер: как процессор делает несколько дел одновременно
- Суперскалярность и внеочередное исполнение
- Предсказание переходов и спекуляция: цена ошибки
- Подсистема памяти: кэши, когерентность, контроллер
- SIMD и векторные расширения: параллелизм внутри ядра
- Многоядерность: согласованность, барьеры, модели памяти
- Ускорители: GPU, NPU, FPGA, ASIC и когда они оправданы
- Мощность и пределы: почему частота больше не растёт
- Производство: литография, техпроцессы, выход годных
- Выбор железа под задачу: как читать характеристики
Системное мышление
- Системное мышление: карта трека и зачем это инженеру
- Что считать системой: элементы, связи, назначение
- Границы системы: как выбор границы меняет вывод
- Петли обратной связи: усиливающие и уравновешивающие
- Запасы и потоки: почему очередь растёт, а нагрузка та же
- Задержки: главный источник неожиданного поведения
- Нелинейность и пороги: когда «чуть больше» меняет режим
- Эмерджентность: свойства целого, которых нет у частей
- Ментальные модели: почему участники видят разные системы
- Системные архетипы: повторяющиеся ловушки
- Локальная оптимизация: как улучшение части ломает целое
- Точки воздействия: где вмешательство даёт результат
- Диаграммы причинных связей: как строить и как проверять
- Моделирование и его пределы: что модель не покажет
- Разборы: инцидент, техдолг, найм и очередь как системы
- Практика и ресурсы: с чего начать и что читать дальше
Логика и ошибки мышления
- Логика и ошибки мышления: карта курса от Аристотеля до инженерных решений
- Понятия, определения и классификации: где ошибка возникает ещё до вывода
- Суждения, отрицание и квадрат оппозиции
- Категорические силлогизмы: фигуры, модусы и проверка вывода
- Энтимема и риторическое доказательство: как восстанавливать скрытые посылки
- Тринадцать софизмов Аристотеля: первый систематический каталог ошибок
- Формальные ошибки современной логики: импликации, кванторы и модальность
- Ошибки релевантности: атака человека, подмена позиции и уход от вопроса
- Ошибки презумпции и неоднозначности: что аргумент незаметно принимает заранее
- Причинные, вероятностные и статистические ошибки
- Когнитивные искажения и информационная среда: почему знать список недостаточно
- Научная и инженерная аргументация: от гипотезы к решению
- Практикум по логике: разбор аргумента от тезиса до исправления
- Каталог логических ошибок: 67 приёмов с примерами и ответами
- Как человечество научилось рассуждать: от Аристотеля до программ и категорий
Проектирование систем
Паттерны проектирования
- Паттерны проектирования: что это, откуда взялись и как читать каталог
- Порождающие паттерны: Factory, Builder, Singleton, Prototype
- Структурные паттерны: Adapter, Decorator, Facade, Proxy, Composite
- Поведенческие паттерны: Strategy, Observer, Command, State и другие
- Паттерны конкурентности: пул, producer-consumer, future, pipeline
- Функциональные паттерны: функторы, монады, линзы, комбинаторы
- Антипаттерны: God Object, Big Ball of Mud, Golden Hammer и другие
- Паттерны в реальном коде: когда они мешают
- Внедрение зависимостей и composition root: как собирается граф объектов
- Паттерны ресурсов: Object Pool, RAII и владение временем жизни
- Правила как данные: Interpreter, Specification и композиция предикатов
- Точки расширения: реестр, SPI, хуки и плагины
- Паттерны границ: DTO, мэпперы и отсутствующее значение
- Когда паттерн растворяется в системе типов
Архитектурные паттерны
- Архитектурные паттерны: карта трека и как выбирать архитектуру
- Многоуровневая, гексагональная, луковичная и чистая архитектуры
- Монолит и модульный монолит: недооценённый выбор
- Микросервисы: границы, коммуникация, данные, эксплуатация
- Событийная архитектура: брокеры, топики, гарантии доставки
- CQRS и Event Sourcing
- Saga, распределённые транзакции, outbox и идемпотентность
- Стили API: REST, GraphQL, gRPC, вебхуки и версионирование
- Кэширование и масштабирование: уровни, инвалидация, шардирование
- Устойчивость: circuit breaker, retry, bulkhead, backpressure, деградация
- Serverless и edge-архитектуры
- Архитектурные решения: ADR, trade-offs, ATAM, эволюционная архитектура
- System design: как проектировать систему под нагрузку от и до
- Геораспределённая архитектура: регионы, ячейки, failover и аварийное восстановление
- Кромка системы: API-шлюз, BFF, sidecar и service mesh
Domain-Driven Design
- DDD: зачем нужен, когда не нужен и карта трека
- Стратегический DDD: домен, поддомены, единый язык
- Ограниченные контексты и карта контекстов
- Тактические блоки: сущности, объекты-значения, агрегаты, сервисы
- Репозитории, единица работы и персистентность без протечек
- Доменные события и интеграция контекстов
- Event Storming и практики моделирования домена
- DDD в коде: полный пример от домена до API
- Типичные ошибки внедрения DDD
- Гибкий дизайн: как модель становится глубокой
- Дистилляция ядра и эволюция модели
- Моделирование типами: недопустимые состояния невыразимы
- Время в домене: процессы, версии правил и темпоральные данные
- DDD в legacy: как внедрить модель в живую систему
Данные, машинное обучение и поисковые алгоритмы
Data Engineering и ETL
- Data Engineering: карта трека, роли и архитектура данных
- ETL и ELT: этапы, различия и практика
- Моделирование данных: нормализация, звезда, снежинка, Data Vault
- Пакетная обработка: MapReduce, Spark, партиционирование
- Потоковая обработка: Kafka, Flink, окна и семантика доставки
- Оркестрация пайплайнов: Airflow, dbt, идемпотентность и backfill
- Хранилища и форматы: Parquet, колоночные БД, lakehouse
- Качество данных, контракты, линидж и governance
- Аналитика, метрики и стык с машинным обучением
- Коннекторы и приём данных: SaaS API, файлы, вебхуки и дрейф схемы
- Тестирование и CI/CD дата-пайплайнов: среды, unit-тесты SQL, data diff и релиз моделей
- Производительность и стоимость аналитической нагрузки
- Активация данных: reverse ETL, сервинг и data-продукты
- Архитектура и эволюция платформы данных: Lambda, Kappa, lakehouse, Data Mesh и миграции
Машинное обучение
- Машинное обучение: карта трека, типы задач и постановка
- Математика для ML: линейная алгебра, анализ, вероятности
- Данные и признаки: очистка, кодирование, масштабирование, утечки
- Линейная и логистическая регрессия
- k ближайших соседей и наивный байесовский классификатор
- Метод опорных векторов и ядерный трюк
- Решающие деревья
- Ансамбли: бэггинг, случайный лес, градиентный бустинг
- Кластеризация: k-means, DBSCAN, иерархическая, GMM
- Снижение размерности: PCA, SVD, t-SNE, UMAP
- Оценка моделей: метрики, кросс-валидация, калибровка
- Переобучение, bias-variance и регуляризация
- Рекомендательные системы
- Временные ряды: от ARIMA до градиентного бустинга
- Обучение с подкреплением
- MLOps: от эксперимента до продакшена
Нейронные сети
- Нейронные сети: карта трека, интуиция и место среди ML
- Перцептрон, функции активации и обратное распространение ошибки
- Обучение сетей: оптимизаторы, инициализация, нормализация, регуляризация
- Свёрточные сети и компьютерное зрение
- Рекуррентные сети, LSTM и GRU
- Внимание и трансформеры
- Большие языковые модели: предобучение, дообучение, инференс
- Генеративные модели: VAE, GAN, диффузия
- Графовые нейронные сети
- Эмбеддинги и обучение представлений
- Инференс и деплой: квантизация, дистилляция, сервинг
- Интерпретируемость, устойчивость и безопасность моделей
- Распределённое обучение: от одной видеокарты до кластера
- Мультимодальные модели: речь, зрение и язык в одной сети
SBSE и поисковые алгоритмы
- SBSE: поисковая инженерия ПО — что это и зачем
- Пространство поиска, представление решения и фитнес-функция
- Локальный поиск: hill climbing, имитация отжига, tabu search
- Генетические алгоритмы: селекция, кроссовер, мутация
- Генетическое программирование
- Многокритериальная оптимизация: Парето, NSGA-II, SPEA2
- Роевой интеллект: муравьиные алгоритмы и PSO
- Автоматическая генерация тестов: EvoSuite, фаззинг, мутационное тестирование
- Автоматическое исправление программ
- SBSE на практике и связь с современными ИИ-подходами
- Поисковый рефакторинг: модуляризация монолита и уборка кода как задача оптимизации
- Конфигурируемые системы: покрывающие массивы, модели фич и поиск по конфигурациям
- Дорогой фитнес: кэш, суррогатные модели и байесовская оптимизация
- Настройка самого поиска: параметры, гиперэвристики и выбор алгоритма
- Каскад GA0 → GA1 → GA2: разделение уровней поиска
- Воспроизводимый эксперимент: seed, 30 прогонов и непараметрический критерий
- Исполняемая спецификация как фитнес-функция: поиск, у которого судья — компилятор
- Иерархический каскад: три уровня поиска, делящих один бюджет
- Антагонистический режим: два подагента и явное управление областью поиска
Продукт и процесс
Product Management
- Product management: чем занимается продакт и карта трека
- Discovery: интервью, JTBD, проверка проблемы
- Продуктовые метрики: AARRR, North Star, unit-экономика
- Приоритизация: RICE, ICE, Kano, MoSCoW, WSJF
- Продуктовая стратегия и роадмап
- MVP, гипотезы и A/B-эксперименты
- UX, CJM, требования и user stories
- Ценообразование, монетизация и рост
- Продуктовая аналитика и принятие решений на данных
- Рынок и конкуренты: сегменты, ICP, TAM/SAM/SOM, позиционирование
- Go-to-market и запуск: от позиционирования до раскатки
- B2B и enterprise: покупатель — не пользователь
- Жизненный цикл продукта: зрелость, каннибализация, депрекация и закрытие
- Стейкхолдеры, влияние без полномочий и операционка продакта
Project Management
- Управление проектами в IT: карта трека и связь с материалами портала
- Agile и Scrum: ценности, роли, церемонии, честная критика
- Kanban и управление потоком: WIP, cycle time, диаграммы
- Оценка и планирование: story points, PERT, #NoEstimates
- Управление рисками в IT-проектах
- Команда, коммуникации, конфликты и мотивация
- Качество, Definition of Done и релизный менеджмент
- DORA и метрики инженерной эффективности
- Масштабирование процессов: SAFe, LeSS, Spotify-модель и их критика
- Lean и бережливое производство в разработке: поток, потери, вытягивание
- Scrumban и гибридные процессы: как совмещают Scrum и Kanban
- RAD, спиральная модель, RUP и итеративные подходы: наследие и что осталось
- Сравнение всех методологий: waterfall, RUP, XP, Scrum, Kanban, Scrumban, LeSS, SAFe, Lean
- Запуск и закрытие проекта: бизнес-кейс, устав, контроль изменений, остановка
- Расписание, зависимости и ресурсы: сетевой график, сжатие срока, критическая цепь
Первые шаги: с нуля, как делают софт, тайм-менеджмент
Мнемотехника: память на образах
- Мнемотехника: карта курса и договор о честности
- Как работает память: три стадии и кривая забывания
- Почему образ сильнее слова: двойное кодирование и конкретность
- Челпанов и история мнемоники: что уже было сказано в 1900 году
- Ассоциации и цепочки: первый рабочий приём
- Метод локи: дворец памяти, который у вас уже есть
- Числовые опоры: как ответить «что было шестым»
- Буквенно-цифровой код: превращаем числа в слова
- Иностранные слова: фонетические ассоциации и метод ключевого слова
- Имена и лица: почему они забываются и что делать
- Тексты и определения: сжатие в опоры вместо заучивания
- Школьные предметы: даты, карты, формулы и таблицы
- Интервальные повторения: почему без них всё осыпается
- Эйдетика и другие обещания: что проверено, а что продаётся
- Границы и цена: где приём мешает
- Программа на восемь недель: от приёмов к навыку
Программирование с нуля
- Программирование с нуля: карта курса и честный разговор о профессии
- Как устроен компьютер: биты, память, процессор и файлы простыми словами
- Как работают интернет и сайты: клиент, сервер, домены, HTTP
- Первая программа: устанавливаем инструменты и запускаем код
- Переменные и типы данных: как программа хранит информацию
- Условия: как программа принимает решения
- Циклы: как заставить программу повторять действия
- Функции: как перестать повторять себя и навести порядок
- Списки, словари и множества: работа с наборами данных
- Файлы и форматы данных: текст, CSV, JSON
- Ошибки и отладка: как читать сообщения и находить причину
- Объекты и классы: первое знакомство с ООП
- Командная строка и Git: как разработчики работают с кодом
- Первый проект: от идеи до работающей программы
- Как устроена IT-индустрия: роли, команды, как выглядит рабочий день
- Куда двигаться дальше: специализации, план обучения и первая работа
Как делают софт и карьера
- Как на самом деле делают софт: карта курса для начинающего разработчика
- Что такое SDLC: из чего состоит путь от идеи до работающего продукта
- Требования и аналитика: откуда вообще берутся задачи в трекере
- Проектирование: почему нельзя просто сразу начать писать код
- Разработка: ветки, код-ревью, стандарты и Definition of Done
- Тестирование и приёмка глазами разработчика
- Релиз и эксплуатация: деплой, мониторинг, дежурства, инциденты
- Поддержка, технический долг и эволюция продукта
- Кто есть кто в команде: роли, зоны ответственности, кто что решает
- Какие бывают проекты: продукт, аутсорс, аутстафф, внутренняя разработка, госсектор
- Энтерпрайз изнутри: процессы, согласования, масштаб, плюсы и минусы
- Стартап изнутри: скорость, хаос, риск, опционы, плюсы и минусы
- Грейды: что на самом деле отличает junior, middle, senior и lead
- Как расти: план развития, обратная связь, performance review, менторство
- Зарплата и своя цена: как устроено вознаграждение и как исследовать рынок
- Переговоры об оффере: как готовиться, что можно обсуждать, типичные ошибки
- Как проходить собеседования: этапы, подготовка, поведение, вопросы работодателю
- Как проводить собеседования: структура, оценка, предвзятость, обратная связь
- Первая работа и первые 90 дней: онбординг, ожидания, типичные ошибки
- Карьерные треки: эксперт, менеджер, архитектор, фриланс, свой продукт
Тайм-менеджмент для инженера
- Тайм-менеджмент для инженера: карта курса и почему «просто соберись» не работает
- Внимание и энергия: почему время — не главный ресурс разработчика
- Сбор задач: инбокс, выгрузка из головы и почему память — плохой планировщик
- GTD Дэвида Аллена целиком: пять шагов, контексты, честный разбор
- Приоритизация: матрица Эйзенхауэра, ABC, MoSCoW, «съешь лягушку»
- Календарь как главный инструмент: time blocking, day theming, календарная гигиена
- Фокус: помодоро, deep work и защита от прерываний
- Личный канбан и ограничение незавершённой работы
- Горизонты планирования: день, неделя, квартал, год и недельный обзор
- Цели: SMART, OKR, антицели и почему цели часто вредят
- Прокрастинация: настоящие причины и что действительно помогает
- Встречи: как не утонуть, как отказываться и как работать асинхронно
- Почта, мессенджеры, уведомления: информационная гигиена инженера
- Инструменты: таск-трекеры, заметки, Zettelkasten, автоматизация рутины
- Удалённая и гибридная работа: границы, режим, самоорганизация
- Выгорание, отдых и устойчивый темп на дистанции в годы
Как учиться, искать информацию и понимать компьютер
Как учиться
- Как учиться: карта трека и почему это отдельный навык
- Зачем учиться, когда есть ИИ: разбор без утешений
- Что значит понимать: узнавание, воспроизведение, перенос
- Иллюзия понимания: почему перечитывание не работает
- Извлечение из памяти: главный рабочий приём
- Интервальное повторение: забывание как инструмент
- Желательные трудности: почему лёгкое обучение хуже
- Перемежение и вариативность: против иллюзии беглости
- Осознанная практика: что на самом деле показали исследования
- Обратная связь: без неё практика закрепляет ошибки
- Перенос знания: почему выученное не применяется само
- Чтение технических текстов: документация, статьи, книги
- Учиться на чужом коде и внутри рабочих задач
- Заметки и внешняя память: инструмент, а не ритуал
- Учиться с ИИ: где он ускоряет, а где отнимает обучение
- План обучения: как не утонуть и как заметить, что продвинулся
Как искать информацию
- Поиск для созидателя: карта трека и почему это отдельный навык
- От симптома к термину: как превратить незнание в запрос
- Операторы, движки и время: механика запроса
- Поиск по коду и артефактам: индекс, который не врёт
- Первоисточник против пересказа: как дойти до места, где написана правда
- Документация, которую вы видите впервые
- Когда документации нет: исходники, история, трекер
- Проверка: дата, автор, воспроизводимость
- Модель как источник: профиль ошибок и способы проверки
- Академический слой: arXiv, Scholar, препринты
- Где живут ответы: языки, корпуса, сообщества
- Когда перестать искать: цена поиска против цены проверки
- Поиск во время отладки: отдельный жанр
- Что делать с найденным: воспроизводимый след
Основы Computer Science
- Computer Science: карта курса и зачем нужна большая картина
- Что такое вычисление: от абака до Тьюринга и что значит «вычислимо»
- Двоичная система, биты и байты: как всё становится числами
- Представление данных: целые, дробные (IEEE 754), текст (Unicode), цвет, звук
- Булева логика и логические вентили: из чего собран процессор
- Как работает процессор: фон Нейман, регистры, ALU, fetch-decode-execute
- Иерархия памяти: регистры, кэш, RAM, диск и почему это важно
- От кода к исполнению: компиляторы, интерпретаторы, ассемблер, машинный код
- Что делает операционная система: процессы, память, файлы — обзор
- Как хранят данные: обзор структур данных и зачем их так много
- Что такое алгоритм и сложность: интуиция Big-O для всех
- Как компьютеры общаются: сети, модель OSI, стек TCP/IP
- Как работает веб: DNS, HTTP, браузер, клиент и сервер
- Как данные переживают выключение: файлы, БД, транзакции — обзор
- Многозадачность: процессы, потоки, параллелизм и почему это сложно
- Теория вычислений для всех: автоматы, машина Тьюринга и что нельзя вычислить
- Основы безопасности: угрозы, шифрование, аутентификация
- Как всё складывается: слои абстракции от транзистора до приложения и куда двигаться
Языки и парадигмы (дополнительно)
Функциональное программирование
- Функциональное программирование: карта курса, история и зачем это нужно
- Чистые функции, побочные эффекты и почему это меняет всё
- Неизменяемость: как работать с данными, ничего не меняя
- Функции первого класса и высшего порядка, замыкания
- Рекурсия, хвостовые вызовы и как не переполнить стек
- Композиция, каррирование, частичное применение и конвейеры
- Алгебраические типы данных и сопоставление с образцом
- Функторы и аппликативы: контейнеры, к которым применяют функции
- Монады без страха: что это на самом деле и зачем
- Карта функторов: иерархия абстракций ФП от полугруппы до комонады
- Обработка ошибок в ФП: Option, Either, Result, накопление ошибок
- Ленивость, бесконечные структуры и потоки данных
- Персистентные структуры данных и их реальная стоимость
- Эффекты и ввод-вывод: как чистый код общается с грязным миром
- Конкурентность в ФП: неизменяемость, STM, акторы
- ФП в обычных языках: JavaScript, TypeScript, Python, Java, C#, Kotlin
- Архитектура на ФП: функциональное ядро и императивная оболочка, ресурсы
Лямбда-исчисление Чёрча
- Лямбда-исчисление Чёрча: зачем оно программисту и что это вообще такое
- Нотация: переменная, абстракция, аппликация и как читать выражения
- Свободные и связанные переменные, подстановка и захват имён
- Альфа, бета и эта: три преобразования, из которых всё состоит
- Кодирование Чёрча: истина, ложь и условия из одних функций
- Числа Чёрча: арифметика без чисел
- Пары, списки и структуры данных из одних лямбд
- Рекурсия без имён: комбинатор неподвижной точки Y
- Стратегии вычисления: нормальный порядок, аппликативный, ленивость
- Типизированное лямбда-исчисление и соответствие Карри-Ховарда
- Лямбда-исчисление в живых языках: от Lisp до современных стрелочных функций
- Комбинаторная логика: S, K, I и программирование без переменных
- Продолжения и CPS: откуда взялись колбэки, генераторы и async/await
- System F: полиморфизм, дженерики и теоремы задаром
Исполняемые спецификации: FTS
FTS — исполняемые спецификации
- FTS: зачем разработчику исполняемая спецификация
- Ментальная модель FTS: данные, правила, вывод и эффект
- FTS toolchain: CLI, библиотека, MCP и канонический JSON
- FTS на русском и английском: синтаксис без скобок
- Структуры и типы FTS: форма предметных данных
- Исполняемые утилиты FTS: правила, порядок и свойства
- FTS examples: новый вид предметных unit-тестов
- FTS в Node.js: CLI-утилита и HTTP boundary
- FTS в React: форма и таблица из одной модели
- FTS и DDD: bounded context, ubiquitous language и command guard
- FTS для AI-агентов и MCP: допуск выдаёт движок, а не текст модели
- Доказательства FTS: теоремы, сертификаты и научные границы
- FTS из Python, Go и shell: работающие клиенты, а не декларации
- FTS generation и CI: TypeScript без drift
- Производительность FTS: воспроизводимый замер
- Capstone FTS: исполнение заказа от модели до React и Node.js
- FTS: читаем ошибки компилятора
- FTS и время: версии правил, снапшоты и аудит задним числом
- Антипаттерны FTS: что не стоит выражать в спецификации
- Миграция в FTS: от вложенных if к исполняемой спецификации
- FTS pipeline и визуализация: один прогон и диаграмма модели
- Вам не нужен lodash — но не там, где вы думаете
- Требования, которые проверяются до реализации: корпус спек, конституция и ftspec
flang — язык с доказуемым завершением
- flang: язык, которому сутки
- flang и FTS: что унаследовано, что своё
- Два класса программ: тотальная и обычная
- Инструмент: команды flang и контракт вывода
- Синтаксис по факту: модули, функции, выражения, образцы
- Система типов и то, чего в ней нет
- Тотальность: как доказывается завершение
- Стандартная библиотека и связывание модулей
- Интерпретатор: явный стек, лимиты, хвостовые вызовы
- Кодогенерация: печать в C, Go, JavaScript, Rust и Python
- Ядро FTS, переписанное на flang
- Чего в языке пока нет: проверенный список
- Как читать репозиторий и как участвовать
- Факт-чекинг: право ответить «не могу проверить»
Данные и ИИ (дополнительно)
Базы данных
- Базы данных: карта трека и как выбирать хранилище под задачу
- Реляционная модель, нормализация и SQL как язык
- PostgreSQL: возможности, индексы, MVCC, расширения, эксплуатация
- MySQL и MariaDB: InnoDB, репликация, различия форков
- Microsoft SQL Server и Oracle: корпоративный мир, лицензии, особенности
- SQLite и встраиваемые БД: где они сильнее «взрослых» серверов
- Индексы и планы выполнения: B-tree, hash, GIN, покрывающие индексы
- Транзакции, уровни изоляции, блокировки и аномалии
- Репликация, шардирование и высокая доступность
- NoSQL: таксономия, CAP, BASE и когда реляционка не подходит
- MongoDB и документные БД: модель, агрегации, транзакции, подводные камни
- Redis: структуры данных, персистентность, кластер, паттерны кэширования
- Cassandra, ScyllaDB и wide-column: модель запросов и компромиссы
- ClickHouse и колоночные аналитические БД: движки, партиционирование, MergeTree
- Временные ряды и поиск: TimescaleDB, InfluxDB, Elasticsearch, OpenSearch
- Векторные базы: pgvector, Qdrant, Milvus, Weaviate, HNSW и метрики близости
- Объектные хранилища: S3, MinIO, слои хранения и lakehouse
- Графовые и key-value БД: Neo4j, Dgraph, etcd, RocksDB, LMDB
- NewSQL и распределённые БД: CockroachDB, YugabyteDB, TiDB, Spanner
- Как выбрать БД и как мигрировать: сравнительная сводка по всем классам
ИИ-агенты и prompt engineering
- ИИ-инженерия: карта трека, что умеют модели и что от них ждать
- Как устроена LLM с точки зрения инженера: токены, контекст, температура, стоимость
- Основы промптинга: zero-shot, few-shot, роли, структура и формат ответа
- Продвинутые техники: chain-of-thought, self-consistency, tree-of-thoughts, chain-of-verification
- Структурированный вывод: JSON-схемы, function calling, валидация и восстановление
- RAG: чанкинг, эмбеддинги, гибридный поиск, реранжирование, оценка качества
- Продвинутый RAG: graph RAG, агентный поиск, контекстное сжатие, кэширование
- Агенты и ReAct: цикл рассуждение-действие, инструменты, планирование, память
- Мультиагентные системы: роли, оркестрация, критики, верификация
- Model Context Protocol: зачем нужен, архитектура, серверы, инструменты и ресурсы
- Оценка и бенчмарки: MMLU, SWE-bench, HumanEval, LLM-as-judge, свои датасеты
- Локальные модели: llama.cpp, Ollama, vLLM, LM Studio, квантизация, требования к железу
- Дообучение: LoRA, QLoRA, инструкционный тюнинг и когда оно вообще нужно
- ИИ в продакшене: латентность, кэширование, роутинг моделей, стоимость, наблюдаемость
- Безопасность: prompt injection, утечки данных, ограничение инструментов, red teaming
- ИИ в жизненном цикле разработки: кодинг-агенты, ревью, тесты, документация
- Обучение на практике: отрицательные результаты одного проекта
ИИ: основы, агенты и аналитика данных
ИИ для инженера: основы
- ИИ для инженера: карта трека и текстовая версия лекции
- Предсказуемость: какой вопрос на самом деле решает ИИ
- Цепи Маркова: предсказание без понимания
- Машинное обучение: картинки, звук, текст
- Нейросети: как обучают модель
- Представления: почему модель «не знает», как выглядит мир
- Большие языковые модели: от T9 до трансформера
- Токены, контекстное окно и память диалога
- Железо: почему для ИИ нужны видеокарты
- Могут ли нейросети думать
- Промптинг: RCTF и STAR
- Продвинутый промптинг: ZS, FS, CoT, CoV, ToT
- Диффузионные модели: как генерируются изображения
- RAG, MCP и агенты
- Провайдеры, фрейминг и цензура
- SDD, оркестрация и разговоры о замене специалистов
Инженерия с ИИ-агентами
- Инженерия с ИИ-агентами: карта трека и чего ждать от агента
- Агент и чат: чем отличается и почему это меняет работу
- Модель исполнения: контекст, инструменты, цикл наблюдение-действие
- Промпт как спецификация, а не заклинание
- Контекст: окно, компакция и что можно терять без ущерба
- Инструменты и протоколы: вызов функций, MCP, свои интеграции
- Память агента: что стоит хранить, а что вредно
- Планирование и декомпозиция: когда агент должен остановиться и спросить
- Ревью кода от агента: на что смотреть в первую очередь
- Где агенты врут: типология отказов и как их ловить
- Проверяемость: тесты, прогоны и доказательства вместо обещаний
- Многоагентные схемы: когда оправданы, а когда дорогая иллюзия
- Цена работы с агентом: токены, время и внимание человека
- Безопасность: секреты, права, инъекции в промпт и цепочка поставки
- Агенты в командной работе: ревью, договорённости, ответственность
- Инструменты и практика: что выбрать и как встроить в свой процесс
Аналитика данных
- Аналитика данных: карта трека и какой вопрос она решает
- Сначала вопрос: какое решение изменится от ответа
- Откуда берутся данные: сбор, события, выживший источник
- Качество данных: пропуски, дубликаты, поздние события
- SQL для анализа: агрегаты, окна, воронки
- Описательная статистика: среднее врёт чаще, чем кажется
- Распределения: почему хвосты важнее центра
- Неопределённость: доверительные интервалы и размер выборки
- Проверка гипотез: что на самом деле означает p-значение
- A/B-тесты: подглядывание, множественные сравнения, мощность
- Корреляция и причинность: что делать, когда эксперимент невозможен
- Когорты и удержание: как читать кривые и не обмануться
- Визуализация: как график врёт честными данными
- Дашборды: почему их не смотрят и как сделать иначе
- Метрики и закон Гудхарта: цифра, которая меняет поведение
Инфраструктура, инструменты и качество
CI/CD, инфраструктура и облака
- DevOps и доставка ПО: карта трека, культура и метрики
- Непрерывная интеграция: принципы, триггеры, кэш, матрицы сборок
- Jenkins: архитектура, Jenkinsfile, агенты, плагины и когда он всё ещё уместен
- GitHub Actions, GitLab CI, Drone и другие: сравнение современных платформ CI
- Continuous Delivery и стратегии релизов: blue-green, canary, feature flags, откаты
- Контейнеры в доставке: Docker, сборка образов, реестры, безопасность и размер
- Kubernetes: архитектура, объекты, сеть, хранилища, автоскейлинг и эксплуатация
- k3s, k0s, MicroK8s и лёгкие дистрибутивы Kubernetes: где они выигрывают
- Helm, Kustomize и GitOps: ArgoCD и Flux
- Terraform и инфраструктура как код: HCL, state, модули, drift, альтернативы
- Ansible, Puppet, Chef и управление конфигурацией
- AWS: базовые сервисы, модель ответственности, сеть, стоимость, типичные ошибки
- Microsoft Azure: сервисы, интеграция с .NET-миром, AKS, сравнение с AWS
- Google Cloud, Yandex Cloud и другие облака: чем отличаются и когда их берут
- VPS, VDS, выделенные серверы и DigitalOcean/Hetzner: когда простое дешевле облака
- Стоимость инфраструктуры: облако против своего железа, FinOps, реальные расчёты
- Наблюдаемость и дежурства: метрики, логи, трейсы, алерты, SLO и постмортемы
- Безопасность конвейера: секреты, supply chain, SAST/DAST, подпись образов
Тестирование ПО
- Тестирование ПО: карта курса, зачем оно нужно и сколько стоит его отсутствие
- Принципы и терминология: верификация, валидация, дефект, качество
- Тест-дизайн: классы эквивалентности, границы, попарное тестирование, таблицы решений
- Тест-кейсы, чек-листы, тест-план и как писать баг-репорт, который починят
- Ручное тестирование: исследовательское, смоук, регресс, приёмочное
- Модульные тесты: изоляция, тестовые дублёры, что такое хороший юнит-тест
- Интеграционное тестирование, тестовые контейнеры и контрактные тесты
- E2E и UI-тесты: Playwright, Selenium, борьба с хрупкостью
- Тестирование API: REST, GraphQL, gRPC, схемы и инструменты
- Нагрузочное тестирование: k6, JMeter, профили нагрузки, чтение результатов
- Тестирование безопасности: OWASP Top 10, SAST, DAST, фаззинг
- Мобильное, кроссбраузерное тестирование и доступность
- Стратегия автоматизации: пирамида, ROI, что автоматизировать не надо
- Тесты в CI: quality gates, параллелизация, флаки-тесты, покрытие
- TDD и BDD на практике: как это выглядит в реальной работе
- Профессия тестировщика: роли, грейды, собеседования, развитие
Редакторы и IDE
- Редакторы и IDE: карта трека и как выбирать инструмент
- vi и Vim: модальность, основы, движения и первые 20 команд
- Продвинутый Vim: регистры, макросы, текстовые объекты, буферы, окна, quickfix
- Neovim и конфигурация: Lua, LSP, Treesitter, плагины, разбор реальных dotfiles
- Emacs: философия, org-mode, elisp и почему он всё ещё жив
- VS Code: архитектура, расширения, отладка, remote и devcontainers
- JetBrains IDE: индексация, рефакторинги, инспекции, когда они окупаются
- Eclipse, NetBeans и наследие: где они остались и почему
- Zed, Sublime Text, Atom-подобные и новая волна редакторов
- Терминальный рабочий процесс: tmux, оболочка, dotfiles, синхронизация окружения
- Сравнение всех редакторов и IDE: критерии, таблица, сценарии выбора
- Навигация по коду: поиск, теги, символы и чтение незнакомого проекта
- Автоматизация редактора: сниппеты, задачи, свои команды и плагины
- Клавиатура и руки: раскладка, keymap-дизайн, задержка ввода и эргономика
SRE, платформенная инженерия и 3D-ассеты
SRE и надёжность
- SRE: карта трека и чем надёжность отличается от «чтобы не падало»
- Надёжность, доступность и отказоустойчивость: что чем меряют
- SLI и SLO: как выбрать показатель, который что-то значит
- Бюджет ошибок: арифметика и что она меняет в решениях
- Мониторинг: метрики, логи, трейсы и что из этого когда
- Алерты: как не утопить дежурного в шуме
- Дежурство: расписание, эскалация и цена для людей
- Реакция на инцидент: роли, связь, первые действия
- Постмортемы: почему без обвинения и как довести до правок
- Ёмкость и нагрузка: планирование, тесты, запас
- Деградация вместо отказа: таймауты, ретраи, размыкатели
- Как ломаются распределённые системы: каскады и насыщение
- Проверка отказом: учения, chaos-эксперименты, game day
- Безопасные релизы: флаги, канареечные выкатки, откат
- Рутина и автоматизация: что автоматизировать, а что убрать
- SRE в небольшой команде: что переносится, а что нет
Платформенная инженерия
- Платформенная инженерия: карта трека и зачем нужна внутренняя платформа
- Платформа как продукт: у неё есть пользователи и они могут уйти
- Золотой путь: помощь, которая не должна стать забором
- Опыт разработчика: что измерять и как это делать честно
- Самообслуживание: от заявки в тикете к платформе, которой пользуются
- Абстракции: где скрывать сложность, а где вредно
- Окружения: локальная разработка, превью, стенды и их цена
- Конвейер как платформенный сервис: общее против «у каждого своё»
- Наблюдаемость как платформа: единые метрики, логи и трейсы
- Инфраструктура как API: декларативность, каталог, шаблоны сервисов
- Безопасность по умолчанию: секреты, доступы, соответствие требованиям
- Стоимость: учёт расходов, лимиты и разговор с командами о деньгах
- Миграции: как переводить десятки команд и не сорвать поставку
- Платформенная команда: состав, поддержка, дежурство и границы
- Принятие: почему платформу обходят и что с этим делать
- Платформа в небольшой компании: с чего начать и когда не начинать
3D-ассеты через агента
- 3D-ассеты через агента: что это и когда работает
- Как устроена связка агент — MCP — Blender
- Установка: запуск, регистрация MCP и граница доверия
- Первая модель: модификаторы вместо ручных вершин
- Как агент смотрит на свою работу — и как слепнет незаметно
- Материалы, свет и рендер: где интуиция подводит
- Экспорт в GLB: оси, ориджины и честная проверка файла
- Живой кейс: ассеты для Corners Arena и что не сработало
- Полигональный бюджет: как сокращать и чем за это платят
- UV-развёртка и текстуры: плотность, атлас, запекание
- Арматура, скиннинг и анимация: как ассет начинает двигаться
- Массовые вариации: генератор вместо ста просьб
- Ассет как код: воспроизводимая сборка и проверки в конвейере
- Лицензии, происхождение и приёмка чужого
Техническое письмо и инженерный английский
Техническое письмо
- Техническое письмо: карта трека и зачем инженеру писать
- Читатель и решение: зачем существует этот документ
- Структура: как расположить материал, чтобы его прочли
- Ясность: предложения, термины, двусмысленности
- ADR: запись архитектурного решения, которая переживёт автора
- RFC и проектные документы: как выносить решение на обсуждение
- Постмортем: документ, который меняет систему, а не ищет виноватого
- README: первое, что видит новый человек
- Документация API: справочник, примеры, контракт
- Руководства и обучающие тексты: разные жанры, разные правила
- Схемы в документах: когда рисовать и что именно
- Почему документация устаревает и что с этим делать структурно
- Ревью текста: как читать чужой документ и как принимать правки
- Практика и ресурсы: как поставить письмо в процесс команды
Инженерный английский
- Инженерный английский: карта трека и для кого он не подойдёт
- Чтение документации: как устроен технический английский
- Стандарты и RFC: язык нормативных документов
- Сообщения об ошибках и логи: как читать чужие и писать свои
- Коммиты и pull request: короткий текст, который читают чаще всего
- Задачи и баг-репорты: как описать, чтобы поняли с первого раза
- Комментарии на ревью: как сказать «нет» и не обидеть
- Асинхронная переписка: письма, чаты, статусы
- Созвоны: как участвовать, когда не успеваешь за темпом
- Выступления и демо: структура и произношение терминов
- Собеседование на английском: что спрашивают и как отвечать
- Ясность: почему инженерный английский проще разговорного
- Типичные ошибки русскоязычных инженеров
- Практика и ресурсы: как поддерживать язык без курсов
Продукт и процесс (дополнительно)
Scrum-мастер (PSM I)
- Scrum-мастер: карта курса, профессия и путь к сертификации PSM I
- Agile-манифест: ценности и принципы, а не набор ритуалов
- Scrum Guide построчно: что там написано на самом деле
- Три ответственности: Product Owner, Scrum Master, Developers
- События Scrum: спринт, планирование, дейли, обзор, ретроспектива
- Артефакты и обязательства: цель продукта, цель спринта, Definition of Done
- Работа с бэклогом: уточнение, декомпозиция, пользовательские истории, оценка
- Фасилитация: как вести встречи, чтобы они приносили пользу
- Коучинг команды, конфликты и сопротивление изменениям
- Эмпиризм и метрики: velocity, burndown и как ими злоупотребляют
- Антипаттерны Scrum: карго-культ, зомби-скрам, мини-водопад
- Масштабирование Scrum: Nexus, LeSS, SAFe — что нужно знать для экзамена
- Экзамен PSM I: формат, подготовка, разбор типичных вопросов
- Первые 90 дней Scrum-мастера в новой команде
Системный и бизнес-анализ
- Системный и бизнес-анализ: кто такой аналитик и что он реально делает
- Выявление требований: интервью, наблюдение, воркшопы, работа с документами
- Виды требований: бизнес, пользовательские, функциональные, нефункциональные
- Документирование: user story, use case, спецификация, критерии приёмки
- UML для аналитика: какие диаграммы полезны и как их читают разработчики
- Моделирование процессов: BPMN, нотации, типичные ошибки в схемах
- Моделирование данных: сущности, связи, ERD, словарь данных
- Анализ интеграций и API: контракты, форматы, сценарии обмена, ошибки
- Нефункциональные требования: производительность, надёжность, безопасность, как их измерять
- Прототипирование и проверка гипотез до разработки
- Работа со стейкхолдерами: конфликты интересов, приоритеты, согласования
- Аналитик в Agile: груминг, декомпозиция, работа с командой и с неопределённостью
- Приёмка: как проверить, что сделали именно то, и как избежать споров
- Инструменты и карьера аналитика: грейды, специализации, что учить дальше
UX и проектирование интерфейсов
- UX: карта трека и чем проектирование отличается от рисования красивого
- Исследования пользователей: интервью, наблюдение, анализ данных
- Персоны и Jobs To Be Done: как понять, для кого и зачем
- Информационная архитектура: структура, навигация, именование
- Пользовательские сценарии и потоки: от задачи к экранам
- Вайрфреймы и прототипы: быстрая проверка идей до кода
- Основы визуального дизайна: сетка, типографика, цвет, иерархия
- Дизайн-системы: компоненты, токены, документация, жизнь системы
- Взаимодействие и состояния: обратная связь, загрузка, ошибки, пустые экраны
- Текст в интерфейсе: формулировки, сообщения об ошибках, тон
- Доступность на этапе дизайна: контраст, размеры, состояния, порядок
- Юзабилити-тестирование: как проверить макет на людях и не обмануть себя
- Метрики UX: что измерять, как связать с продуктовыми показателями
- Передача в разработку, совместная работа и карьера в дизайне
Инженерное лидерство и поставка софта
Тимлид и инженерное лидерство
- Тимлид: карта трека и что на самом деле меняется в работе
- Из инженера в лида: смена системы координат
- Один на один: как вести, чтобы это не стало статусом
- Обратная связь: о работе, а не о человеке
- Найм: что проверяет собеседование и чего оно не видит
- Адаптация новичка: первые недели глазами руководителя
- Оценка и рост: ожидания, грейды и разговор о повышении
- Слабый результат: как заметить рано и что делать дальше
- Делегирование: что отдавать и как не забрать обратно
- Техническая стратегия команды: во что вкладывать инженерное время
- Технический долг как управленческая задача
- Планирование и оценки: почему сроки врут и что с этим делать
- Дежурства и инциденты: нагрузка, которую легко не заметить
- Границы команд: зависимости, интерфейсы и когнитивная нагрузка
- Конфликты и трудные разговоры
- Вверх по цепочке: отчётность, ожидания руководства и защита команды
Поставка софта
- Поставка софта: карта трека и почему это инженерный вопрос
- Модели поставки: коробка, SaaS, self-hosted, гибрид
- IaaS, PaaS, SaaS, FaaS: где кончается ваша ответственность
- Многотенантность: изоляция, данные и стоимость обслуживания
- Лицензии как инженерное ограничение: копилефт и разрешительные
- Открытый код как способ поставки: что даёт и чего стоит
- Ценообразование: подписка, потребление, места, freemium
- Биллинг: пробный период, апгрейды, возвраты, налоги и валюты
- Каналы поставки: свой сайт, маркетплейсы облаков, партнёры
- Магазины приложений: правила, комиссии, ревью и отказы
- Дистрибуция игр: магазины, консоли, рейтинги, региональные цены
- Обновления и версии: каналы, откат, поддержка старых
- Упаковка и установка: пакеты, контейнеры, инсталляторы, подпись
- Ограничения: юрисдикции, экспорт, персональные данные
Frontend, мобильная разработка и доступность
Frontend-разработка
- Frontend: карта трека и как устроена современная веб-разработка
- Как работает браузер: парсинг, DOM, CSSOM, рендер, композитинг
- Семантический HTML: структура, формы, метаданные и почему теги важны
- CSS с нуля: каскад, специфичность, наследование, единицы измерения
- Вёрстка: flexbox, grid, позиционирование, адаптивность и контейнерные запросы
- Архитектура стилей: БЭМ, CSS-modules, CSS-in-JS, Tailwind, дизайн-системы
- DOM и события: работа с деревом, делегирование, всплытие, наблюдатели
- Сборка фронтенда: Vite, бандлеры, tree-shaking, code splitting, dev-server
- React: компоненты, JSX, состояние, жизненный цикл, реконсиляция
- Хуки и паттерны React: useState, useEffect, мемоизация, композиция
- Управление состоянием: локальное, контекст, Redux, Zustand, сигналы
- Работа с данными: fetch, React Query, кэширование, оптимистичные обновления
- Формы и валидация: контролируемые поля, схемы, UX ошибок
- Роутинг и стратегии рендеринга: SPA, SSR, SSG, ISR, гидратация
- Производительность фронтенда: Core Web Vitals, бюджеты, ленивая загрузка
- Тестирование фронтенда: юнит, компонентные, E2E, визуальная регрессия
- Сравнение фреймворков: React, Vue, Svelte, Angular, Solid — что выбрать
- Архитектура фронтенда: слои, монорепо, микрофронтенды, деплой и мониторинг
Мобильная разработка
- Мобильная разработка: карта трека и чем мобильный контекст отличается
- Платформы: iOS и Android изнутри, отличия, ограничения, публикация
- Нативная iOS-разработка: Swift, SwiftUI, жизненный цикл, экосистема
- Нативная Android-разработка: Kotlin, Compose, жизненный цикл, экосистема
- Кроссплатформа: Flutter, React Native, KMP — сравнение и цена решения
- Мобильный UI и навигация: паттерны, жесты, адаптация под экраны
- Архитектура мобильного приложения: слои, состояние, MVVM/MVI, DI
- Данные и оффлайн: локальные БД, синхронизация, разрешение конфликтов
- Фоновая работа и пуши: ограничения ОС, планировщики, уведомления
- Производительность мобильного: старт, плавность, батарея, трафик
- Безопасность мобильного: хранение секретов, биометрия, пиннинг, реверс
- Тестирование мобильного: юнит, UI, устройства, фермы, бета-каналы
- Релиз и сторы: подписи, ревью, поэтапная раскатка, аналитика и крэши
- Датчики и медиа: камера, геолокация, звук и разрешения на них
- Покупки и подписки в приложении: StoreKit, Play Billing, права и восстановление
Доступность (a11y)
- Доступность: карта трека, кто и как пользуется интерфейсами
- Зачем это нужно: люди, стандарты WCAG, требования и бизнес-аргументы
- Семантика как фундамент: нативные элементы против div-супа
- ARIA: роли, свойства, состояния и правило «лучше без ARIA»
- Клавиатура и фокус: порядок обхода, ловушки фокуса, skip-links
- Скринридеры: как они читают страницу, NVDA/VoiceOver на практике
- Визуальная доступность: контраст, размер, масштабирование, анимация
- Доступные формы: подписи, подсказки, ошибки, валидация
- Доступные компоненты: модалки, меню, табы, автодополнение
- Тестирование и процесс: автопроверки, ручной аудит, доступность в команде
- Текстовые альтернативы: alt, сложная графика, SVG и таблицы данных
- Мультимедиа: субтитры, транскрипты, аудиодескрипция и доступный плеер
- Когнитивная доступность: понятный язык, память, время и вход в систему
- Гайд по Accessibility
Сети, безопасность и производительность
Компьютерные сети
- Компьютерные сети: карта трека и модель уровней
- Канальный уровень: Ethernet, MAC, ARP, коммутаторы, VLAN
- IP и маршрутизация: адресация, подсети, IPv6, таблицы маршрутов, BGP
- TCP: установка соединения, надёжность, окна, управление перегрузкой
- UDP и QUIC: когда без TCP лучше и что изменил QUIC
- DNS: иерархия, типы записей, резолвинг, кэширование, DoH/DoT
- HTTP: методы, коды, заголовки, кэширование, эволюция 1.1 → 2 → 3
- TLS и HTTPS: рукопожатие, сертификаты, цепочки доверия, отладка
- Реальное время: WebSocket, SSE, long polling, WebRTC
- RPC и gRPC: протобуф, стриминг, сравнение с REST
- Прокси и балансировка: L4 vs L7, nginx, health checks, sticky sessions
- CDN и edge: как работает раздача, инвалидация, географическая маршрутизация
- NAT, фаерволы и VPN: почему «у меня работает, а у клиента нет»
- Диагностика сети: методика, инструменты, разбор реальных инцидентов
Безопасность приложений
- Безопасность приложений: карта трека и как думать об угрозах
- Моделирование угроз: STRIDE, поверхность атаки, разбор на примере
- OWASP Top 10: что это, как читать и что делать с каждым пунктом
- Инъекции: SQL, NoSQL, команды, шаблоны — механика и защита
- XSS, CSRF и клиентские атаки: типы, CSP, SameSite, защита
- Аутентификация: пароли, хеширование, сессии, MFA, восстановление доступа
- OAuth 2.0 и OpenID Connect: потоки, PKCE, типичные ошибки внедрения
- JWT и токены: устройство, подпись, срок жизни, отзыв и когда JWT не нужен
- Авторизация: RBAC, ABAC, ACL, multi-tenancy и проверка прав в коде
- Прикладная криптография: симметрика, асимметрика, хеши, подписи, KDF
- Транспортная безопасность: TLS, сертификаты, mTLS, пиннинг
- Безопасность API: rate limiting, IDOR, массовое присвоение, валидация
- Секреты и ключи: хранение, ротация, Vault, переменные окружения
- Безопасность цепочки поставок: зависимости, SBOM, подпись артефактов
- Безопасная разработка: практики, ревью, SAST/DAST, security-чемпионы
- Приватность и соответствие: персональные данные, минимизация, аудит
Производительность систем
- Производительность: карта трека и методика «измерь, потом чини»
- Измерение: метрики, перцентили, latency vs throughput, USE и RED
- Бенчмаркинг честно: разогрев, шум, статистика, типичные самообманы
- Профилирование CPU: сэмплирование, flame graphs, горячие пути
- Память: аллокации, фрагментация, утечки, влияние GC
- Кэши и локальность: почему одинаковый по сложности код работает в 10 раз медленнее
- Ввод-вывод: блокирующий и асинхронный, syscalls, буферизация
- Производительность конкурентного кода: контеншн, false sharing, закон Амдала
- Производительность БД: планы запросов, индексы, пул соединений, N+1
- Кэширование: уровни, инвалидация, cache stampede, hit rate
- Сетевая производительность: RTT, keep-alive, сжатие, батчинг
- Нагрузочное тестирование: профили нагрузки, k6, чтение результатов
- Рабочий процесс оптимизации: бюджеты, регрессии в CI, когда остановиться
- Ускорение без правки кода: флаги сборки, инлайнинг, PGO, LTO и JIT
- Производительность в общей среде: cgroup-троттлинг, steal time и шумные соседи
Распределённые системы, компиляторы и Git
Распределённые системы
- Распределённые системы: карта трека и почему всё ломается иначе
- Модели отказов: сбои узлов, сеть, разделение, византийские отказы
- Время в распределённой системе: часы, логические часы, векторные часы
- CAP и PACELC: что теорема на самом деле говорит и чего не говорит
- Модели согласованности: от линеаризуемости до eventual
- Репликация: лидер и последователи, кворумы, конфликты, CRDT
- Партиционирование и шардирование: стратегии, ребалансировка, горячие ключи
- Консенсус: Paxos, Raft, выбор лидера, репликация лога
- Распределённые транзакции: 2PC, saga, outbox, компенсации
- Гарантии доставки и идемпотентность: at-least-once и миф exactly-once
- Координация: распределённые блокировки, лизы, etcd и ZooKeeper
- Очереди и потоки: брокеры, порядок сообщений, backpressure, повторы
- Наблюдаемость распределённых систем: трассировка, корреляция, поиск причин
- Тестирование распределённых систем: chaos engineering, Jepsen, симуляция
Компиляторы и языки
- Компиляторы: карта трека и что происходит между кодом и процессором
- Лексический анализ: токены, регулярные языки, свой лексер с нуля
- Синтаксический анализ: грамматики, рекурсивный спуск, приоритеты операторов
- Абстрактное синтаксическое дерево: представление, обход, паттерн Visitor
- Семантический анализ: области видимости, таблицы символов, разрешение имён
- Проверка и вывод типов: системы типов, унификация, Хиндли-Милнер
- Промежуточное представление: IR, SSA, зачем нужен средний слой
- Оптимизации: свёртка констант, инлайнинг, устранение мёртвого кода
- Генерация кода: целевые архитектуры, распределение регистров, ABI
- Виртуальные машины: стековые и регистровые, байткод, интерпретация
- Сборка мусора: подсчёт ссылок, mark-sweep, поколения, паузы
- JIT-компиляция: профилирование, горячие пути, деоптимизация
- Проектирование языков и DSL: синтаксис, ошибки, эргономика
- Инструменты языка: LSP, форматтеры, линтеры, отладчики
Git и командная работа
- Git: карта трека и модель данных вместо заучивания команд
- Внутри Git: объекты, blob, tree, commit, ссылки и DAG истории
- Ежедневная работа: staging, коммиты, diff, stash, отмена изменений
- Стратегии ветвления: trunk-based, GitFlow, GitHub Flow — что когда
- Merge и rebase: как работают на самом деле и что выбрать команде
- Переписывание истории: amend, interactive rebase, filter-repo и риски
- Конфликты слияния: почему возникают, как разрешать, как предотвращать
- Восстановление: reflog, потерянные коммиты, испорченный репозиторий
- Хуки и автоматизация: pre-commit, CI-интеграция, подпись коммитов
- Большие репозитории и монорепо: submodules, subtree, sparse-checkout, LFS
- Совместная работа: код-ревью в масштабе, соглашения о коммитах, релизы
- Расследование по истории: log, pickaxe, blame и bisect
- Удалённые репозитории и протокол: refspec, fetch, push, транспорт
- Pull Request
Web3, встраиваемые системы и бизнес
Web3 и блокчейн
- Web3: карта трека, что это технически и где реально применимо
- Как устроен блокчейн: блоки, хеш-цепочка, дерево Меркла, распределённый реестр
- Криптография Web3: хеши, пары ключей, подписи, адреса
- Механизмы консенсуса: PoW, PoS, финальность, форки, атака 51%
- Ethereum и EVM: аккаунты, транзакции, газ, состояние
- Смарт-контракты: Solidity, жизненный цикл, тестирование, деплой
- Безопасность контрактов: reentrancy, переполнения, оракулы, аудит
- Кошельки и ключи: seed-фразы, HD-кошельки, подпись транзакций, потеря доступа
- Токены и стандарты: ERC-20, ERC-721, ERC-1155 и что за ними стоит
- Децентрализованные хранилища: IPFS, Filecoin, Arweave, контентная адресация
- Масштабирование: L2, роллапы, шардирование, мосты и их риски
- Архитектура dApp: фронтенд, индексация, ноды, RPC, офчейн-компоненты
- DeFi-примитивы: AMM, кредитование, стейблкоины, ликвидации, композиция
- Ончейн-управление: DAO, голоса, таймлоки и захват протокола
Встраиваемые системы и робототехника
- Встраиваемые системы: карта трека и чем эта разработка отличается
- Железо для программиста: микроконтроллеры, платы, схемы, питание
- C для встраиваемых систем: память, указатели, volatile, без динамики
- Периферия: GPIO, АЦП, ШИМ, таймеры — управляем железом из кода
- Прерывания и реальное время: ISR, приоритеты, гонки, детерминизм
- Протоколы: UART, I2C, SPI, CAN — как устройства общаются
- RTOS: задачи, планировщик, синхронизация, FreeRTOS на практике
- Питание и ограничения: режимы сна, бюджет энергии, память и флеш
- IoT-связь: Wi-Fi, BLE, LoRa, MQTT, безопасность устройств
- Датчики и приводы: считывание, фильтрация, калибровка, моторы
- Робототехника: кинематика, управление, ROS, обратная связь
- Отладка и производство: SWD, логический анализатор, прошивки, OTA
- Сборка прошивки: тулчейн, стартовый код, компоновщик, образ
- Тестирование прошивки: хост, симулятор, стенд и статический анализ
Бизнес для инженера
- Бизнес для инженера: карта трека и трезвый взгляд на самостоятельность
- Фриланс с нуля: первые клиенты, портфолио, площадки, репутация
- Ценообразование: почасовая, фикс, ценностная модель, как считать свою ставку
- Оценка и границы работ: как не утонуть в бесконечных правках
- Договоры и формы работы: что обязательно проверить, кто владеет кодом
- Работа с заказчиком: ожидания, статусы, сложные разговоры, неплатежи
- Свой продукт: от идеи к первым платящим, MVP и проверка спроса
- Юнит-экономика для инженера: выручка, затраты, окупаемость, точка безубыточности
- Продвижение без маркетолога: контент, комьюнити, репутация, продажи
- Деньги и риски: подушка, кассовые разрывы, диверсификация, налоги в общих чертах
- Что дальше: первые наёмные, агентство, продукт или возвращение в найм
- Международные клиенты: валюта, платёжные рельсы, юрисдикции и асинхронная работа
- Операционный контур одиночки: бэк-офис, автоматизация и непрерывность
- Партнёрство и выход: доли, договорённости на берегу, продажа дела и закрытие
Accessibility
Examples
Theses
Научно-исследовательские работы
- Теоретическое обоснование роботизированных систем
- Теоретическая реализация роботизированных систем
- Практическая реализаия роботизированной системы
- Итоги работы
Blog
Автоматически из Telegram @digitable_blog: 57 публикаций — см. Posts.
Избранное из Logseq: