| name | learn |
| description | Проведение очередного урока из curriculum. Триггерься на "/learn", "давай урок", "что дальше по плану", "следующая тема", "следующий урок", "продолжаем обучение", "хочу новую тему". Читает learning/curriculum.json и progress/completed_lessons.json, находит следующий непройденный урок (виток спирали), проводит его. Тела уроков генерируются lazy при первом вызове и кэшируются в learning/lessons/<id>.md. |
Проведение урока
Этот скилл — оркестратор урока. Он не сам учебный материал, а протокол проведения.
Шаг 1: Определение следующего урока
- Прочитай
learning/curriculum.json — полный спиральный план (витки области: каждая тема возвращается на новом уровне глубины)
- Прочитай
progress/completed_lessons.json — пройденные
- Найди первый урок из curriculum, ID которого нет в completed_lessons
- Если уроков не осталось — поздравь и предложи
/practice (свободная задача) или /diagram
Шаг 2: Учёт пробелов и состояния
Перед тем как начать урок, прочитай progress/profile.json (включая learner_profile), progress/competencies.json, progress/mistakes_log.json и progress/attention_metrics.json:
- Если есть компетенция с
p_known < 0.4 — включи её в урок как вспомогательную тему (микроурок внутри основного).
Пример компетенций (область System Design): requirements_clarification, estimation_skill, knowledge_of_components, tradeoff_reasoning, scalability_thinking, failure_thinking, data_modeling, communication_thinkaloud, proactiveness_driving.
- Если в mistakes_log есть свежие ошибки той же категории — разбери их как часть урока.
Пример категорий ошибок (область System Design): over-engineering, прыжок в детали без requirements, забытая estimation, нет failure thinking, технология без обоснования.
- Прочитай
attention_metrics: если последние сессии показывают усталость/фрустрацию — сократи урок, начни с посильного. Если высокая вовлечённость и pace = fast — можно дать виток поглубже.
- Прочитай
learner_profile и подстрой подачу (полные настройки — onboarding/references/profiles.md): junior_growth — минимум базовых пояснений, помогай приоритизировать; women_stem — атрибуция успеха на стратегию; career_switcher — связывай с карьерной целью; young_male_26 — продуктивный вызов, но worked example на новой теме.
Это делает урок адаптивным, а не просто проигрывателем curriculum.
Шаг 3: Проверка существующего тела урока
Проверь learning/lessons/<id>.md:
- Если файл есть — используй его как контент (ранее сгенерированный и возможно отредактированный)
- Если файла нет — сгенерируй тело урока и сохрани в
learning/lessons/<id>.md
Это lazy generation — урок создаётся один раз, при первом обращении.
Шаг 4: Структура урока
Каждый урок проходит пять фаз:
🎯 Цель → 📖 Теория (с аналогией) → 💻 Демо (worked example) → ✏️ Практика → ✅ Проверка
🎯 Цель (30 секунд)
🎯 После этого урока ты сможешь: [конкретное умение]
Формулировка должна быть конкретной и измеримой. Не «узнаешь про тему X», а «сможешь объяснить, какой компромисс несёт подход Y и чем за него платишь, и решить, где его применять».
Пример (область System Design): «сможешь объяснить, какой trade-off покупает кеш и чем за него платишь, и решить, где его ставить в read-heavy системе».
📖 Теория (3-5 минут)
Короткое объяснение концепции. Обязательно с аналогией (аналогии — носитель интуиции в области; эксперты думают именно так):
Примеры аналогий (область System Design):
- Кеш — как «держать часто нужные документы на столе, а не ходить в архив каждый раз»
- Очередь (message queue) — как «лента заказов на кухне: официант не ждёт у плиты, а вешает заказ и идёт дальше» (развязка, асинхронность)
- Шардинг — как «разбить телефонный справочник по буквам на тома, чтобы искать в нужном, а не во всём»
- Load balancer — как «администратор в банке, распределяющий очередь по свободным окнам»
Англоязычные термины давай с переводом при первом вводе. Никакого «вот абстрактная концепция X» — всегда через мост от знакомого.
💻 Демо (worked example) — 3-5 минут
Демо — это разобранный пример (worked example): готовый разбор задачи или расчёта, который ты проводишь вслух, а ученик наблюдает. Это критично (Sweller, cognitive load theory): на новой теме новичок учится быстрее, изучая готовое решение, чем делая сам. На областях с высокой когнитивной нагрузкой scaffolding стартует ВЫШЕ.
Что показать — готовый разбор маленького куска задачи: проводи каждый шаг вслух, объясняя, почему именно так и какой компромисс это закрывает.
Примеры демо (область System Design):
- Готовый разбор расчёта: «Считаем storage для системы загрузки фото. 100M пользователей × 5 фото в день × 2MB → проговариваю каждый множитель и откуда он».
- Готовый разбор архитектуры: возьми маленький кусок (один путь записи или чтения) и пройди его по слоям, объясняя, почему каждый компонент здесь и какой trade-off закрывает.
Пример должен быть маленьким и сфокусированным — один расчёт или один фрагмент, не вся задача целиком. Большие демо размывают фокус.
✏️ Практика (10-20 минут)
Дай ученику решить похожую задачу самому. Уровень помощи — через скилл scaffolding. Чередование «example → problem» (Sweller): сразу после worked example дай аналогичную задачу.
Примеры практики (область System Design):
- После демо-расчёта storage для фото → «А теперь прикинь storage для системы коротких видео: 50M пользователей, 3 видео в день по 10MB. Проговаривай вслух».
- После разбора пути чтения с кешем → «Спроектируй путь чтения для ленты новостей. Где поставишь кеш и почему?»
Важно:
- Практика — не «повторить точно то же». Это новый контекст применения той же концепции (interleaving, Bjork).
- Требуй think-aloud: рассуждение вслух — основной наблюдаемый сигнал. Оценивай ход мысли, не финальный артефакт.
- Фидбек — в парадигме обоснования/trade-off (скилл
feedback): «ты нашёл развилку — а какой путь выбрал и почему именно его?».
✅ Проверка (2-3 минуты)
Короткая проверка усвоения:
- «Объясни своими словами, какой выбор/компромисс ты сейчас сделал»
- «Где ещё в реальной работе ты бы это применил?»
- «Что было сложнее всего?»
Ответ запиши в reflection_log.json.
Шаг 5: Обновления после урока
completed_lessons.json: добавь запись {"lesson_id": "L07", "completed": "<сегодня>", "duration_min": ..., "self_rating": ...}
profile.json: xp += 50
spaced_review.json: добавь новые items для фактов из урока (то, что нужно помнить, а не выводить)
competencies.json: обнови p_known/observations по наблюдаемым компетенциям (делегировано diagnostics)
- Если сработали правила — обнови
scaffolding_level.json (или делегируй reflect)
Правила
- Не растягивай урок. Если curriculum говорит 20 минут — уложись в 20-25. Флоу рушится, если урок превращается в лекцию.
- Не давай все 5 фаз подряд, если сессия короткая. Разделяй: теория + демо сегодня, практика завтра. Это нормально.
- Worked example первым на новой теме. Не отправляй делать с нуля концепцию, которую ученик впервые видит — сначала разбор, потом генерация.
- Практика ≠ повторение. Всегда новый контекст.
- Рефлексия — часть урока, не финальный формальный экзамен. Одна вещь, которую стоит запомнить.
Триггеры связанных скиллов
- Во время урока —
scaffolding решает, как помогать (на сложных областях стартует выше)
- Все оценочные реплики — через
feedback (обоснование, не «правильно/неправильно»)
- После урока —
spaced-review обновляет интервалы
- Если ученик буксует → снизь уровень через
scaffolding, дай посильное (опыт мастерства)
- Если ученик летит → не мешай, пропусти теорию, сразу к практике (особенно
junior_growth)
- Контентную глубину по теме берёт соответствующий доменный контентный скилл области (он живёт в доменном слое, не в ядре)