Contents
С чего начать
Resolution
Project/product management
- Этапы жизненного цикла ПО
- Модели разработки ПО
- Подходы к разработке ПО
- Генерация идей
- Предварительная оценка проекта
- PMBoK
- Prince2
- Делегирование
Development
- Распространенные архитектурные шаблоны
- Масштабирование
- Инструменты
- git
- Как создать хороший Pull Request
- Client side
- Server side
- Базы данных
- CI/CD
Языки программирования
Полные курсы «с нуля до продакшена»: основы, идиоматика, конкурентность, тестирование, архитектура, деплой, наблюдаемость и место языка в SDLC. Каждый трек заканчивается курированным списком лучших блогов и книг.
Go
- Go: обзор языка и дорожная карта курса
- Установка Go и инструментарий: тулчейн, модули, линтеры, layout
- Основы Go: типы, срезы, карты, управление потоком и модель значений
- Идиоматичный Go: обработка ошибок, паттерны и стиль
- Конкурентность в Go: горутины, каналы, context, sync и паттерны
- Тестирование в Go: табличные тесты, моки, интеграция и CI
- Архитектура и прод-код на Go: слои, DI, конфигурация и БД
- Деплой и наблюдаемость Go: статический бинарник, Docker, метрики и трейсинг
- Go в SDLC: CI/CD, релизы, безопасность зависимостей и лучшие ресурсы
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, релизная стратегия, безопасность зависимостей и лучшие ресурсы
TypeScript
- TypeScript: обзор языка и дорожная карта курса
- Установка и тулчейн TypeScript: от Node до tsconfig
- Система типов TypeScript: фундамент
- Продвинутые типы, идиомы и обработка ошибок в TypeScript
- Конкурентность в TypeScript: event loop, Promise и async/await
- Тестирование в TypeScript: пирамида, Vitest, моки и CI
- Продакшн-архитектура на TypeScript: слои, DI, БД, устойчивость
- Деплой и наблюдаемость TypeScript-сервиса
- TypeScript в SDLC: CI/CD, релизы, безопасность и лучшие источники
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, релизы, безопасность зависимостей и лучшие ресурсы
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
- Обобщённое программирование и метапрограммирование
- Аспектно-ориентированное и событийно-ориентированное программирование
- Как выбирать и смешивать парадигмы в реальном проекте
Принципы разработки
- Принципы разработки: зачем нужны и как не превратить их в карго-культ
- SOLID: пять принципов с честным разбором и критикой
- DRY, KISS, YAGNI и цена преждевременной абстракции
- Связанность, связность и закон Деметры
- Чистый код: имена, функции, границы, комментарии
- Запахи кода и каталог рефакторингов
- Принципы тестирования: пирамида, TDD, BDD, свойства хорошего теста
- Twelve-Factor App и cloud-native принципы
- Обработка ошибок, контракты и отказоустойчивое мышление
- Код-ревью, командные стандарты и Definition of Done
Проектирование систем
Паттерны проектирования
- Паттерны проектирования: что это, откуда взялись и как читать каталог
- Порождающие паттерны: 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 и другие
- Паттерны в реальном коде: когда они мешают
Архитектурные паттерны
- Архитектурные паттерны: карта трека и как выбирать архитектуру
- Многоуровневая, гексагональная, луковичная и чистая архитектуры
- Монолит и модульный монолит: недооценённый выбор
- Микросервисы: границы, коммуникация, данные, эксплуатация
- Событийная архитектура: брокеры, топики, гарантии доставки
- CQRS и Event Sourcing
- Saga, распределённые транзакции, outbox и идемпотентность
- Стили API: REST, GraphQL, gRPC, вебхуки и версионирование
- Кэширование и масштабирование: уровни, инвалидация, шардирование
- Устойчивость: circuit breaker, retry, bulkhead, backpressure, деградация
- Serverless и edge-архитектуры
- Архитектурные решения: ADR, trade-offs, ATAM, эволюционная архитектура
- System design: как проектировать систему под нагрузку от и до
Domain-Driven Design
- DDD: зачем нужен, когда не нужен и карта трека
- Стратегический DDD: домен, поддомены, единый язык
- Ограниченные контексты и карта контекстов
- Тактические блоки: сущности, объекты-значения, агрегаты, сервисы
- Репозитории, единица работы и персистентность без протечек
- Доменные события и интеграция контекстов
- Event Storming и практики моделирования домена
- DDD в коде: полный пример от домена до API
- Типичные ошибки внедрения DDD
Данные, машинное обучение и поисковые алгоритмы
Data Engineering и ETL
- Data Engineering: карта трека, роли и архитектура данных
- ETL и ELT: этапы, различия и практика
- Моделирование данных: нормализация, звезда, снежинка, Data Vault
- Пакетная обработка: MapReduce, Spark, партиционирование
- Потоковая обработка: Kafka, Flink, окна и семантика доставки
- Оркестрация пайплайнов: Airflow, dbt, идемпотентность и backfill
- Хранилища и форматы: Parquet, колоночные БД, lakehouse
- Качество данных, контракты, линидж и governance
- Аналитика, метрики и стык с машинным обучением
Машинное обучение
- Машинное обучение: карта трека, типы задач и постановка
- Математика для 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 на практике и связь с современными ИИ-подходами
Продукт и процесс
Product Management
- Product management: чем занимается продакт и карта трека
- Discovery: интервью, JTBD, проверка проблемы
- Продуктовые метрики: AARRR, North Star, unit-экономика
- Приоритизация: RICE, ICE, Kano, MoSCoW, WSJF
- Продуктовая стратегия и роадмап
- MVP, гипотезы и A/B-эксперименты
- UX, CJM, требования и user stories
- Ценообразование, монетизация и рост
- Продуктовая аналитика и принятие решений на данных
Project Management
- Управление проектами в IT: карта трека и связь с материалами портала
- Agile и Scrum: ценности, роли, церемонии, честная критика
- Kanban и управление потоком: WIP, cycle time, диаграммы
- Оценка и планирование: story points, PERT, #NoEstimates
- Управление рисками в IT-проектах
- Команда, коммуникации, конфликты и мотивация
- Качество, Definition of Done и релизный менеджмент
- DORA и метрики инженерной эффективности
- Масштабирование процессов: SAFe, LeSS, Spotify-модель и их критика
Первые шаги: с нуля, как делают софт, тайм-менеджмент
Программирование с нуля
- Программирование с нуля: карта курса и честный разговор о профессии
- Как устроен компьютер: биты, память, процессор и файлы простыми словами
- Как работают интернет и сайты: клиент, сервер, домены, 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, автоматизация рутины
- Удалённая и гибридная работа: границы, режим, самоорганизация
- Выгорание, отдых и устойчивый темп на дистанции в годы
Языки и парадигмы (дополнительно)
Функциональное программирование
- Функциональное программирование: карта курса, история и зачем это нужно
- Чистые функции, побочные эффекты и почему это меняет всё
- Неизменяемость: как работать с данными, ничего не меняя
- Функции первого класса и высшего порядка, замыкания
- Рекурсия, хвостовые вызовы и как не переполнить стек
- Композиция, каррирование, частичное применение и конвейеры
- Алгебраические типы данных и сопоставление с образцом
- Функторы и аппликативы: контейнеры, к которым применяют функции
- Монады без страха: что это на самом деле и зачем
- Карта функторов: иерархия абстракций ФП от полугруппы до комонады
- Обработка ошибок в ФП: Option, Either, Result, накопление ошибок
- Ленивость, бесконечные структуры и потоки данных
- Персистентные структуры данных и их реальная стоимость
- Эффекты и ввод-вывод: как чистый код общается с грязным миром
- Конкурентность в ФП: неизменяемость, STM, акторы
- ФП в обычных языках: JavaScript, TypeScript, Python, Java, C#, Kotlin
- Архитектура на ФП: функциональное ядро и императивная оболочка, ресурсы
Лямбда-исчисление Чёрча
- Лямбда-исчисление Чёрча: зачем оно программисту и что это вообще такое
- Нотация: переменная, абстракция, аппликация и как читать выражения
- Свободные и связанные переменные, подстановка и захват имён
- Альфа, бета и эта: три преобразования, из которых всё состоит
- Кодирование Чёрча: истина, ложь и условия из одних функций
- Числа Чёрча: арифметика без чисел
- Пары, списки и структуры данных из одних лямбд
- Рекурсия без имён: комбинатор неподвижной точки Y
- Стратегии вычисления: нормальный порядок, аппликативный, ленивость
- Типизированное лямбда-исчисление и соответствие Карри-Ховарда
- Лямбда-исчисление в живых языках: от Lisp до современных стрелочных функций
Данные и ИИ (дополнительно)
Базы данных
- Базы данных: карта трека и как выбирать хранилище под задачу
- Реляционная модель, нормализация и 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
- ИИ в жизненном цикле разработки: кодинг-агенты, ревью, тесты, документация
Инфраструктура, инструменты и качество
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: критерии, таблица, сценарии выбора
Продукт и процесс (дополнительно)
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: что измерять, как связать с продуктовыми показателями
- Передача в разработку, совместная работа и карьера в дизайне
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, устройства, фермы, бета-каналы
- Релиз и сторы: подписи, ревью, поэтапная раскатка, аналитика и крэши
Доступность (a11y)
- Доступность: карта трека, кто и как пользуется интерфейсами
- Зачем это нужно: люди, стандарты WCAG, требования и бизнес-аргументы
- Семантика как фундамент: нативные элементы против div-супа
- ARIA: роли, свойства, состояния и правило «лучше без ARIA»
- Клавиатура и фокус: порядок обхода, ловушки фокуса, skip-links
- Скринридеры: как они читают страницу, NVDA/VoiceOver на практике
- Визуальная доступность: контраст, размер, масштабирование, анимация
- Доступные формы: подписи, подсказки, ошибки, валидация
- Доступные компоненты: модалки, меню, табы, автодополнение
- Тестирование и процесс: автопроверки, ручной аудит, доступность в команде
Сети, безопасность и производительность
Компьютерные сети
- Компьютерные сети: карта трека и модель уровней
- Канальный уровень: 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, когда остановиться
Распределённые системы, компиляторы и 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
- Совместная работа: код-ревью в масштабе, соглашения о коммитах, релизы
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, офчейн-компоненты
Встраиваемые системы и робототехника
- Встраиваемые системы: карта трека и чем эта разработка отличается
- Железо для программиста: микроконтроллеры, платы, схемы, питание
- 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: