Codex
- Проследить вызовы и найти связанные files
- Разбить ticket на маленькие шаги
- Подготовить minimal diff и запустить checks
- Провести review относительно criteria
Персональный маршрут · 2026
Маршрут от слабой базы до небольших backend-тикетов в реальном проекте — с тестами, PR и обязательной защитой каждого решения.
Через шесть месяцев Кир должен безопасно закрывать маленькие задачи под review: прочитать request flow, внести точечное изменение, написать тесты и объяснить решение.
Стартовая диагностика · без AI
Создать console app, обработать набор чисел, объяснить базовые конструкции, сделать Git-коммит и прочитать простой SQL-запрос. Результат не «оценка», а карта дыр в фундаменте.
Сначала один вертикальный срез. Распределённое спагетти успеет найти нас позже.
Воскресенье остаётся лёгким: никакой новой тяжёлой темы — только повторение, пересдача и короткая демонстрация.
Каждая неделя заканчивается работающим результатом. Нажми на неделю, чтобы увидеть практику и критерий готовности.
Недели 1–7 · Foundation
.NET 10 SDK, IDE, `dotnet new/build/run`, типы, ввод-вывод; Git status/add/commit/log/diff.
15–20 небольших console-задач и репозиторий `backend-learning` с чистой историей.
Сам создаёт и запускает project, чинит compile error, объясняет working tree, index и commit.
`if`, `switch`, loops, methods, parameters, scope, breakpoint и пошаговую отладку.
Calculator, converter, «угадай число» и безопасный разбор пользовательского ввода.
Не дублирует логику, находит ошибку debugger’ом и объясняет простой call stack.
`List`, `Dictionary`, `HashSet`, strings, `Guid`, `DateTimeOffset`, enum, nullable, files и JSON.
Console task manager с CRUD, фильтрацией и сохранением между запусками.
Осознанно выбирает collection, обрабатывает пустой input и не глушит nullable warnings.
Classes, constructors, encapsulation, composition, interfaces и exceptions.
Разделить task manager на model, service и `ITaskRepository`; две реализации storage.
За 90 минут без AI написать console app, отладить и защитить каждое решение.
Generics, delegates, lambdas, `IEnumerable`, LINQ и deferred execution.
Фильтры, sorting, grouping, pagination и statistics для task manager.
Пишет LINQ query, переписывает циклом и знает момент фактического выполнения.
`Task`, `async/await`, `CancellationToken`, timeout, `HttpClient`; async ≠ parallel.
Client к учебному API с cancellation и обработкой timeout/недоступности.
Нет `.Result`/`.Wait()`, cancellation доходит до I/O, ошибки сети объяснимы.
xUnit, Arrange–Act–Assert, test doubles, branches, merge conflict и pull request.
Regression test → fix для task manager; оформить первый полноценный PR.
Tests запускаются одной командой, проверяют behavior; merge conflict решён самостоятельно.
Недели 8–9 · Data
Tables, PostgreSQL types, PK/FK, constraints, разумную normalization, DDL и CRUD.
Schema WorkHub: users, projects, tasks, comments; seed только synthetic data.
Relations защищены constraints, cardinality объяснима, CRUD выполняется без GUI-мага.
JOIN, aggregates, CTE, transaction/rollback, базовую isolation, indexes и `EXPLAIN`.
Reports по просроченным tasks и workload; сравнить query plan до/после index.
Без AI: schema, CRUD, JOIN-report и transaction с rollback.
Недели 10–17 · Application
URL, headers, JSON, HTTP methods/status codes, REST, idempotency, controllers и OpenAPI.
In-memory CRUD tasks и ручные проверки через Swagger/HTTP client.
Корректные 200/201/204/400/404; request прослежен от client до response.
DTO, binding, validation, mapping, DI lifetimes, config, middleware, ProblemDetails, logs.
Service layer, единый error format и environment configuration.
Controller тонкий, DI lifetimes объяснимы, secrets не появляются в logs.
`DbContext`, entities, Fluent API, migrations, change tracking и async persistence.
Заменить memory storage на PostgreSQL и провести учебный migration cycle.
Создаёт, применяет и откатывает migration; не заменяет migrations на `EnsureCreated`.
Relationships, projection, `Include`, tracking, `AsNoTracking`, filtering и bounded pagination.
Comments, assignees, tags и list endpoint с filters/pages.
Нет obvious N+1, reads используют projection/NoTracking, page size ограничен.
Unit/integration boundaries, `WebApplicationFactory`, test PostgreSQL и data isolation.
Tests endpoints, validation, errors, persistence и один concurrent scenario.
Vertical slice с migration и tests; устная защита полного request flow.
Password hashing, access/refresh JWT, claims, roles, policies, ownership, 401/403.
Register/login, refresh rotation/revocation и project access rules — только в учебной среде.
Password/refresh не хранятся открыто; invalid/revoked tokens и policies покрыты tests.
Domain, Application, Infrastructure, Api, dependency direction и domain invariants.
Разложить уже работающий WorkHub по layers без изменения external behavior.
Domain не знает EF/ASP.NET; Application тестируется без real DB. Никакого CQRS «для красоты».
Image, container, volume, network, multi-stage Dockerfile, Compose и health checks.
Поднять API + PostgreSQL одной командой из clean clone.
Полный запуск, auth flow, layer boundaries и recovery после container restart.
Недели 18–22 · Operations
Key-value, TTL, cache-aside, serialization, invalidation, cache miss и degradation.
Cache project card/dashboard с invalidation на write.
Демонстрирует hit/miss/expiry; отказ Redis не ломает основной CRUD.
Producer, consumer, exchange, queue, routing, durable messages, ack/nack, at-least-once.
`TaskCreated` event и audit/notification worker с retry + DLQ.
Restart не теряет message, failure не зацикливается, duplicate не удваивает effect.
Hub, connection, groups, connection authorization, reconnect и server notifications.
Project notifications и простой test client.
Projects изолированы groups, anonymous client rejected, disconnect не теряет core data.
Transactional outbox, event ID, delayed retry, graceful shutdown, timeout/cancellation.
Outbox dispatcher и consumer deduplication.
Mentor отключает Redis/RabbitMQ и дублирует message; данные остаются целыми.
Structured logs, correlation ID, health/readiness, metrics, `EXPLAIN`, rate limiting и CI.
Измерить 2 bottleneck, связать request → message, ограничить login, настроить build/tests.
Есть before/after, trace по correlation ID, reproducible CI и ноль secrets в repo/logs.
Недели 23–24 · Ship
Acceptance criteria, reproduction, risk assessment, small commits и чужой code.
Один anonymized bug и одна bounded feature от Johan.
Diff строго в scope, есть regression tests, review исправлен без полной переписи.
Clean build, CI, seed data, README, architecture diagram, runbook и rollback.
Working WorkHub, failure drills Redis/RabbitMQ и 20-минутную demo.
За 60–90 минут без AI исправить незнакомый bug и объяснить request + event flow.
Источник истины — code, compiler, tests, запущенное приложение и official docs. Согласие двух моделей всё ещё не integration test.
Ни один ответ
не принимается
без проверки
Я изучаю [тема] и уже понимаю [что]. Не давай готовое решение. Объясни идею на маленьком примере, затем задай мне 3 вопроса и одно упражнение. Отделяй факты от предположений.
Passwords, API keys, cookies, JWT, connection strings, production dumps и персональные данные не попадают ни в один AI prompt.
Два нерабочих AI-совета подряд → stop, minimal reproduction, docs или mentor.Checkpoint — новая задача, часть без AI и короткая защита. При провале фиксируем конкретный пробел и пересдаём через 5–7 дней.
Console app + debug + устная защита.
Schema + JOIN + transaction без AI.
API + PostgreSQL + integration tests.
Auth + layers + clean Compose start.
Redis/RabbitMQ fail, данные живы.
Незнакомый bug без AI + demo.
Проход: 12/18 без нулей. Checkpoint — 13/18, ключевые критерии не ниже 2.
После двух неудачных review cycles решение не переписывается за студента: совместная диагностика и дробление задачи.
Даже после курса студенту не нужны production secrets, ручная запись в production DB или самостоятельный emergency deploy.
Проекты, задачи, комментарии и уведомления. Не pet-project для скриншота, а стенд для request flow, отказов зависимостей и осмысленного recovery.
Выключить Redis. Остановить broker. Доставить message дважды. Данные должны выжить.