Обратная связь: без неё практика закрепляет ошибки
В предыдущей главе мы разобрали, что у Эрикссона называется осознанной практикой и почему популярный пересказ про «10 000 часов» к его работам относится плохо. Один из компонентов, который в исходных формулировках стоит рядом с «задачей на грани возможностей», — немедленная информативная обратная связь. Без неё конструкция не работает, и в этой главе мы разбираем, почему именно.
Тезис главы простой и неприятный: практика без коррекции — не нейтральное занятие. Она не «даёт меньше пользы». Она закрепляет то, что вы делаете, включая неправильное, и параллельно повышает уверенность. Через год такой работы вы будете делать ту же ошибку быстрее, увереннее и с большим ощущением экспертизы.
При этом обратная связь — не благо по определению. Крупнейший метаанализ по теме нашёл, что примерно в 38 % случаев вмешательство с обратной связью ухудшило результат. Так что глава состоит из двух половин: сначала — почему без обратной связи обучения нет, потом — почему обратная связь сама по себе ничего не гарантирует и от чего зависит её знак.
Что такое обратная связь и чем она не является
Определение, которым мы будем пользоваться: обратная связь — это сигнал, позволяющий сравнить то, что вы ожидали, с тем, что произошло, и изменить следующее действие.
Здесь три части, и каждая обязательна:
- Ожидание. До результата у вас должно быть предсказание. Иначе сравнивать не с чем.
- Сигнал о реальности. Наблюдаемый исход, привязанный к вашему действию.
- Возможность изменить следующее действие. Если следующего раза нет или вы не властны над решением, это не обучение, а информирование.
Отсюда сразу следует, что обратной связью не является, хотя ей называется:
- Результат без ожидания. Тест позеленел. Вы не предсказывали, позеленеет ли он и почему. Вы узнали факт о мире, но ничего не узнали о своей модели мира. Это главный дефект инженерной практики: сигналов вокруг много, а предсказаний почти нет.
- Оценка без разбора. «Хорошо», «слабовато», «на грейд не тянет». Есть сравнение с нормой, нет информации о том, какое действие и в какую сторону менять.
- Мнение без критерия. «Мне не нравится этот код». Пока критерий не назван, это сигнал о собеседнике, а не о реальности.
- Похвала. Обратная связь о вас, а не о задаче; именно этот класс в метаанализах ведёт себя хуже всего.
ожидание до?"} B -- "нет" --> B1["Обратной связи не будет.
Результат нечему противоречить"] B -- "да" --> C{"Пришёл ли
сигнал о результате?"} C -- "нет или слишком поздно" --> C1["Злая среда.
Нужен построенный разбор"] C -- "да" --> D{"Однозначен ли сигнал
относительно вашего действия?"} D -- "нет, шум и другие причины" --> D1["Риск выучить ложную связь.
Нужен контроль или повтор"] D -- "да" --> E{"На что направлено
внимание при разборе?"} E -- "на себя: умный, глупый, справился" --> E1["Вероятность ухудшения.
Kluger и DeNisi, 1996"] E -- "на задачу и процесс" --> F{"Изменено ли
следующее действие?"} F -- "нет" --> F1["Информирование, не обучение"] F -- "да" --> G["Цикл замкнулся"]
Точек разрыва пять, и только одна из них — про наличие сигнала. Остальные четыре ломаются молча, при формально работающем процессе. Про обратные связи как свойство систем вообще — глава в треке системного мышления; там же разобраны задержки в контурах, которые для нас ключевой параметр. Здесь тот же механизм рассматривается узко — как условие научения.
Практика без обратной связи: что об этом известно
Начнём с самого сильного из доступных утверждений: опыт сам по себе не производит мастерства. Это не риторика, за этим есть данные.
Условия, при которых опыт превращается в экспертизу
Даниэль Канеман и Гэри Кляйн потратили несколько лет на попытку согласовать две противоположные позиции — «интуиция экспертов надёжна» и «интуиция экспертов систематически ошибается» — и опубликовали совместный текст: Kahneman и Klein (2009), «Conditions for Intuitive Expertise: A Failure to Disagree», American Psychologist 64(6). Их вывод состоит из двух условий, и оба обязательны:
- Среда должна быть достаточно закономерной — в ней должны существовать устойчивые связи между признаками и исходами, которые в принципе можно выучить.
- У человека должна быть возможность эти закономерности выучить — то есть достаточная практика с быстрой и однозначной обратной связью.
Их же примеры. Анестезиологи получают сигнал о состоянии пациента в течение минут — их интуиция работает. Рентгенологи по многим задачам узнают об ошибке спустя недели или никогда — их калибровка заметно хуже. Метеорологи, ежедневно делающие вероятностные прогнозы и ежедневно видящие исход, — одна из самых хорошо откалиброванных профессиональных групп вообще; биржевые аналитики с долгосрочными прогнозами — одна из худших. Похожий перечень признаков задачи, предсказывающих, разовьётся ли экспертиза, есть у Shanteau (1992), «Competence in Experts: The Role of Task Characteristics», Organizational Behavior and Human Decision Processes; наличие обратной связи стоит в нём среди главных.
Данные из медицины: стаж иногда работает в минус
Самая жёсткая иллюстрация — не из психологии, а из здравоохранения. Choudhry, Fletcher и Soumerai (2005), «Systematic Review: The Relationship between Clinical Experience and Quality of Health Care», Annals of Internal Medicine 142(4), собрали работы, связывающие стаж врача с качеством помощи. Результат: в большинстве включённых исследований бóльший стаж был связан не с лучшими, а с худшими показателями по части измеряемых параметров — соблюдению протоколов, актуальности назначений, исходам по отдельным группам.
Объяснение авторов не мистическое: знания устаревают, а обратная связь, которая заставила бы их обновить, до врача часто не доходит. Двадцать лет практики без коррекции — это не двадцать лет обучения, это один год, повторённый двадцать раз. Инженерная проекция очевидна, но исследований аналогичного дизайна на разработчиках я не знаю: считайте это правдоподобной аналогией, а не переносом результата.
Структурная слепота: чего вы не увидите никогда
Einhorn и Hogarth (1978), «Confidence in Judgment: Persistence of the Illusion of Validity», Psychological Review 85(5), описали класс ситуаций, названный ими структурами обучения с нерелевантным исходом: вы принимаете решение, наблюдаете исход только для одной из веток и на этом основании укрепляетесь в правильности критерия. Канонический пример — найм. Вы отклонили кандидата; как он справился бы, вы не узнаете никогда. Вы наняли кандидата; он справился — и это подтверждает ваш критерий отбора. Итог: уверенность в критерии растёт независимо от его качества. Обратная связь формально есть, но приходит только по одной стороне.
Инженерные аналоги того же класса:
- Выбранная архитектура работает. Про альтернативу, от которой отказались, вы не узнаете ничего.
- Отклонённая на ревью правка. Вы не увидите, что было бы, если бы её влили.
- Отказ от рефакторинга. Инцидента не случилось — значит, обошлось? Или случился бы в любом случае?
- Успешный релиз в пятницу. Один успех не является данными о риске.
Практический вывод: там, где контрфактуальная ветка недоступна, обратная связь по исходу не может улучшить критерий, сколько бы циклов ни прошло. Улучшить его можно только через разбор рассуждения, а не результата. Отдельно про подобные ловушки — глава про когнитивные искажения в треке логики.
Добрые и злые среды обучения
Робин Хогарт свёл это в удобную пару терминов: добрая (kind) и злая (wicked) среда обучения — Hogarth (2001), «Educating Intuition»; сжатое изложение — Hogarth, Lejarraga, Soyer (2015), «The Two Settings of Kind and Wicked Learning Environments», Current Directions in Psychological Science 24(5). Добрая среда: правила стабильны, обратная связь быстрая, полная и однозначная — шахматы, теннис, компилятор. Злая: обратная связь задержана, выборочна, зашумлена или систематически вводит в заблуждение — найм, прогнозирование сроков, выбор технологии на пять лет.
Ключевая мысль Хогарта: в злой среде опыт производит уверенность без точности. Это не лень и не глупость обучающегося, а свойство среды.
Квадрант 2 — самый коварный. Сигнал приходит мгновенно и выглядит как подтверждение, но связан с вашим действием слабо. «Оно заработало после четвёртой попытки» — ровно этот случай, разобранный в главе про иллюзию понимания. Мгновенный убедительный ответ модели — тот же квадрант, и об этом ниже отдельный раздел.
Метаанализы: обратная связь помогает в среднем и вредит в трети случаев
Теперь вторая половина. Допустим, обратная связь есть. Достаточно ли этого?
Kluger и DeNisi (1996): работа, которую обычно не дочитывают
Kluger и DeNisi (1996), «The Effects of Feedback Interventions on Performance: A Historical Review, a Meta-Analysis, and a Preliminary Feedback Intervention Theory», Psychological Bulletin 119(2) — свод более чем шестисот сравнений. Средний эффект около d = 0,41 в пользу обратной связи; это то, что цитируют.
Что цитируют реже: примерно в 38 % сравнений обратная связь ухудшила результат. Не «не помогла» — ухудшила. Разброс огромный, и среднее по нему скрывает две разные популяции случаев.
Их объяснение — теория вмешательств обратной связи (Feedback Intervention Theory). Ключевой параметр: на какой уровень обратная связь перетягивает внимание.
| Уровень внимания | Пример формулировки | Что происходит |
|---|---|---|
| Детали задачи | «здесь потеряна проверка на nil, вот путь выполнения» | внимание идёт на исправление, эффект положительный |
| Процесс/стратегия | «ты дебажишь перебором вместо бисекции» | самый ценный уровень, меняет метод, а не результат |
| Самость | «ты молодец» / «ты слабо соображаешь» | внимание уходит на регуляцию самооценки, ресурс уходит от задачи, эффект часто отрицательный |
Практический перевод для инженера: обратная связь вида «ты хороший разработчик» и «этот код плохой» одинаково бесполезны, потому что обе адресуют не действие. Разница между ними эмоциональная, а не обучающая.
Hattie и Timperley (2007): огромный разброс
Hattie и Timperley (2007), «The Power of Feedback», Review of Educational Research 77(1) — синтез метаанализов. Средний размер эффекта у них выходит порядка 0,79, что очень много по меркам образовательных вмешательств. Но их собственный акцент — на разбросе: эффекты варьируют вплоть до отрицательных, и сам факт «дали обратную связь» не предсказывает ничего.
Их рамка — три вопроса, на которые обратная связь должна отвечать:
- Куда я иду — какой критерий, что считается сделанным.
- Как я иду — где я сейчас относительно критерия.
- Что дальше — какое следующее действие сократит разрыв.
Если ответа на третий вопрос нет, обратная связь чаще всего бесполезна. Проверьте на своём последнем ревью: сколько комментариев отвечали на третий вопрос, а сколько — только на второй? Уровни у них те же четыре — задача, процесс, саморегуляция, самость, — с тем же выводом про вред последнего.
Shute (2008) и условия полезности
Shute (2008), «Focus on Formative Feedback», Review of Educational Research 78(1) — обзор с довольно конкретными рекомендациями. Из применимого:
- Развёрнутая обратная связь (что не так и почему) в среднем полезнее простой верификации («неверно»).
- Обратная связь должна быть специфична и адресовать действие, а не человека.
- Слишком подробная подсказка вредна: если она содержит решение, обучающийся перестаёт решать.
- Для слабо владеющих материалом лучше немедленная и направляющая; для уверенных — отсроченная и более скупая.
Последний пункт важен: оптимальная обратная связь зависит от уровня получателя, и это одна из причин, почему разброс в метаанализах такой большой.
Bangert-Drowns и соавторы (1991): ответ, доступный заранее, убивает эффект
Bangert-Drowns, Kulik, Kulik и Morgan (1991), «The Instructional Effect of Feedback in Test-Like Events», Review of Educational Research 61(2) — метаанализ обратной связи в ситуациях проверки. Средний эффект скромный, около 0,26, но интереснее выделенный ими модератор: доступность ответа до попытки. Если обучающийся мог подсмотреть правильный ответ до того, как ответил сам, эффект схлопывался, а в части случаев уходил в минус. Это то же различение, что и в главе про извлечение: открытая вкладка с ответом превращает извлечение в перечитывание, а обратную связь — в чтение.
Отсюда правило, которое стоит держать в голове постоянно: обратная связь работает только после совершённой попытки. Сначала ваш ответ, потом эталон. Порядок не косметический, он определяет знак эффекта.
Задержка: когда сигнал должен прийти
Отдельный параметр со своей, довольно запутанной литературой. Kulhavy и Anderson (1972) описали эффект отсроченного удержания: при проверке через некоторое время группа, получавшая обратную связь с задержкой, показывала результат не хуже, а иногда лучше группы с немедленной. Правдоподобное объяснение — при немедленной подаче неверный ответ ещё активен и интерферирует; при отсроченной он успевает «остыть», и коррекция ложится чище. Kulik и Kulik (1988), «Timing of Feedback and Verbal Learning», Review of Educational Research 58(1), обнаружили расхождение по типу исследования: в лабораторных экспериментах на списках чаще выигрывала отсрочка, в реальных учебных условиях — немедленность. Butler, Karpicke и Roediger (2007), «The Effect of Type and Timing of Feedback on Learning from Multiple-Choice Tests», JEP: Applied 13(4), в своих условиях получили преимущество отсроченной.
Честный итог: вопрос не решён, эффекты умеренные и сильно зависят от материала и условий. Не стройте на этом инженерных решений вида «настрою уведомления через 24 часа».
Но у задержки есть второй, куда более важный аспект, к этому спору отношения не имеющий. Речь не о том, насколько отсрочка в 10 минут лучше мгновенной, а о том, что в инженерной работе задержки различаются на восемь порядков.
Практический смысл лестницы:
- Слева (до часа) сравнение «ожидал / получил» происходит само, потому что ожидание ещё в рабочей памяти. Эта зона учит бесплатно — при условии, что ожидание вообще было.
- В середине (день — неделя) ожидание к моменту сигнала уже забыто. Если вы его не записали, обратной связи не будет: придёт просто событие. Именно здесь окупается журнал предсказаний.
- Справа (месяц и дальше) между решением и исходом вклиниваются десятки других причин. Без специально построенного разбора — постмортема, ретроспективы, записи решений — атрибуция невозможна, и обучение не происходит.
Отсюда стратегическое правило: сдвигайте обратную связь влево, где это можно, и стройте её искусственно там, где нельзя. Ровно этим занимается половина инженерных практик — типизация, тесты, линтеры, CI, канареечные выкатки, наблюдаемость. Их обучающий эффект — побочный, но существенный.
Ошибка как единица обучения
Если обратная связь нужна, то нужны и ошибки: сигнал несёт информацию только тогда, когда мог разойтись с ожиданием. Metcalfe (2017), «Learning from Errors», Annual Review of Psychology 68 — обзор с центральным тезисом: ошибки, за которыми следует коррекция, улучшают последующее удержание по сравнению с обучением, в котором ошибок избегали. Доктрина «учить так, чтобы ученик не ошибался» для типичного взрослого обучающегося данными не поддерживается. Рядом стоит эффект гиперкоррекции — Butterfield и Metcalfe (2001): ошибки, сделанные с высокой уверенностью, после исправления запоминаются лучше, чем сделанные наугад. Момент «я был уверен и был неправ» — самое информативное событие рабочего дня. Не самое приятное, но самое информативное.
В организационной психологии есть смежная линия: Keith и Frese (2008), «Effectiveness of Error Management Training: A Meta-Analysis», Journal of Applied Psychology 93(1). Обучение, где ошибки не подавляются, а специально используются как материал, обгоняло обучение с избеганием ошибок примерно на d ≈ 0,44, причём преимущество было заметнее на задачах адаптивного переноса — там, где надо применить навык в новой ситуации, а не воспроизвести процедуру.
Граница у этого есть. Baddeley и Wilson (1994) показали, что для пациентов с амнезией безошибочное обучение, наоборот, работает лучше: без эпизодической памяти ошибка не помечается как ошибка и закрепляется наравне с правильным. И общая оговорка из Kluger и DeNisi: ошибка полезна, когда разбирается как свойство задачи, и вредна, когда становится сообщением о вас.
Правый нижний путь — то, о чём заголовок главы. Ветка Blamed заслуживает отдельного внимания: она выглядит как разбор, ощущается как разбор и не меняет ничего. Списывание на внешние обстоятельства — самый частый способ пройти мимо обратной связи, формально её получив.
Источники обратной связи у инженера
Инвентаризация. Для каждого источника — задержка, однозначность и, что важнее, чему он не учит. Последняя колонка обычно и есть источник систематических пробелов.
| Источник | Задержка | Однозначность | Чему учит | Чему не учит |
|---|---|---|---|---|
| Компилятор, типы | секунды | высокая | синтаксис, контракты типов | смысл, уместность решения |
| Линтер, форматтер | секунды | высокая | конвенции | всё остальное |
| Юнит-тесты | секунды-минуты | высокая в рамках проверяемого | локальная корректность | верность самих ожиданий |
| Property-based и фаззинг | минуты | высокая | границы, о которых вы не подумали | предметная адекватность |
| Интеграционные тесты, CI | минуты-десятки минут | средняя | взаимодействие компонентов | поведение под реальной нагрузкой |
| Код-ревью | часы-дни | средняя, зависит от ревьюера | читаемость, альтернативы, контекст команды | последствия во времени |
| Парное программирование | секунды | средняя | ход рассуждения в реальном времени | цена — время двоих |
| Метрики, логи, трассировка | минуты-часы | средняя | реальное поведение системы | причины, если не строили атрибуцию |
| Инцидент и постмортем | дни-месяцы | низкая без разбора | отказ модели системы | всё, если постмортем формальный |
| Пользователи и поддержка | недели | низкая | расхождение с реальной задачей | техническое качество |
| Собственный код через полгода | месяцы | высокая и болезненная | читаемость и решения прошлого себя | ничего, если не читать старый код |
| Собеседования | недели | очень низкая | границы формулировок | ваш реальный уровень |
| Языковая модель | секунды | низкая | форма, альтернативы, слепые зоны | истина; см. раздел ниже |
Три наблюдения по таблице. Инженерная профессия по устройству обратной связи — одна из самых удачных. Компилятор и тесты дают то, чего нет у юриста, менеджера или врача: мгновенный однозначный сигнал по большому классу ошибок. Этим стоит пользоваться сознательно, а не считать фоном.
Но самые дорогие ошибки живут в правой части лестницы. Ошибка в границах модуля стоит минуты, ошибка в выборе модели согласованности — год. У первой отличная обратная связь, у второй почти никакой. Соотношение обратное тому, которое было бы полезно.
Собственный код через полгода — недооценённый источник: единственный дешёвый способ получить сигнал с длинной задержкой. Читать свой код годичной давности с вопросом «что здесь непонятно и почему я так решил» — упражнение с высокой отдачей и нулевой стоимостью. Контролируемых данных на этот счёт у меня нет, это отраслевое наблюдение.
Технические детали по каждому каналу — в профильных треках: юнит-тесты и тесты в CI, основы CI, мониторинг и постмортемы, измерение производительности, код-ревью и pull request.
Приём: предсказание до наблюдения
Центральный практический приём главы, он же самый дешёвый. Правило: перед любым наблюдением сформулируйте, что ожидаете увидеть. Одна фраза. До запуска, до чтения логов, до открытия ответа модели, до прогона бенчмарка.
Зачем: без зафиксированного ожидания результат не может вас ничему научить, потому что задним числом ожидание подгоняется под исход. Это документированный эффект — ретроспективное искажение, Fischhoff (1975), «Hindsight Is Not Equal to Foresight»: знание исхода систематически завышает оценку того, насколько он был предсказуем. Учебный аналог — Koriat и Bjork (2005): когда ответ виден рядом с вопросом, связь между ними кажется очевиднее, чем она есть. Разбор этого класса искажений — в треке логики.
Второй мотив — Wason (1960), «On the Failure to Eliminate Hypotheses in a Conceptual Task», и уточнение Klayman и Ha (1987): люди по умолчанию проверяют гипотезу примерами, которые её подтверждают. В отладке это выглядит как проверка тех мест, где вы ожидаете найти проблему, и игнорирование тех, где её «точно нет». Полезное предсказание — то, которое может быть опровергнуто ближайшим действием.
Как это выглядит в отладке:
Разница между двумя половинами не в количестве работы, а в том, что в первом случае каждая итерация уменьшает пространство гипотез, а во втором — накапливает наблюдения. Классическая рекомендация из отладки — «сначала гипотеза, потом печать» — здесь получает механистическое обоснование: печать без гипотезы не производит обратной связи. Про базовые техники отладки — глава в треке intro.
Формат журнала расхождений, который реально ведётся — одна запись в минуту:
# journal/2026-07.yaml — журнал предсказаний, лежит в репозитории рядом с кодом
- контекст: "оптимизация выборки заказов"
предсказание: "узкое место — N+1 по позициям, профиль покажет 80 % времени в БД"
уверенность: высокая # гиперкоррекция сильнее там, где были уверены
результат: "в БД 22 %, 61 % — сериализация ответа"
расхождение: "ищу проблему там, где недавно её видел, а не там, где измерил"
правило: "профиль до формулировки гипотезы о причине, а не после"
- контекст: "ревью PR #412"
предсказание: "ревьюер зацепится за именование"
уверенность: средняя
результат: "три комментария про обработку ошибок, про именование ни одного"
расхождение: "мой внутренний критерий качества смещён в косметику"
правило: "перед отправкой PR — отдельный проход только по путям ошибок"
Ценность здесь не в файле, а в колонке «расхождение»: за месяц из неё видно систематическое смещение вашей модели, а не отдельные промахи. Один промах — шум. Повторяющийся класс промахов — то, что стоит выносить в план обучения. Про инструменты для таких журналов и про то, почему выбор инструмента обычно не главная проблема, — глава про инструменты.
Цена приёма. Предсказание замедляет: пять-десять секунд на каждый цикл плюс дисциплина записи. В рутинной работе, где вы и так знаете исход, оно не окупается — это чистые накладные расходы. Окупается там, где вы не уверены, то есть ровно там, где происходит обучение. Хороший маркер: если предсказание кажется скучным, его можно не писать; если писать не хочется, потому что «а вдруг ошибусь», — писать обязательно.
Как строить обратную связь там, где её нет
Три стратегии, по убыванию дешевизны.
1. Сократить задержку
Всё, что двигает сигнал влево по лестнице: инкрементальная компиляция, watch-режим тестов, hot reload, локальный запуск того, что раньше проверялось только в CI, фича-флаги вместо длинных релизных циклов, канареечные выкатки.
# Было: полный прогон перед коммитом — 6 минут; сигнал приходит,
# когда контекст задачи уже выгружен из головы.
# Стало: watch по изменённым файлам, только затронутые тесты.
pytest-watch --runner "pytest -x -q --lf --ff" tests/ src/
# -x остановиться на первом падении: один сигнал за раз, без каши
# --lf сначала прогнать упавшие в прошлый раз, --ff остальные после них
mypy --incremental --follow-imports=silent src/ & # типы — непрерывным фоном
Тесты стоит рассматривать не только как средство контроля качества, но и как обучающий инструмент: они превращают злую среду (поведение системы через неделю в проде) в добрую (однозначный сигнал за секунды).
Здесь уместна честность про TDD. Утверждение «TDD делает разработчиков лучше» доказательной базы в нужном качестве не имеет. Rafique и Mišić (2013), «The Effects of Test-Driven Development on External Quality and Productivity: A Meta-Analysis», IEEE Transactions on Software Engineering, нашли небольшое улучшение внешнего качества и неоднозначный эффект на производительность, сильно зависящий от условий и опыта участников. Fucci и соавторы (2016), внешняя репликация со слепым анализом на нескольких площадках, значимой разницы между TDD и итеративной разработкой с тестами после не обнаружили; в последующем разборе процесса авторы указали, что важнее оказалась гранулярность и равномерность цикла, а не порядок «тест до кода». То есть работает короткий цикл, а не ритуал. Разбор самих практик — глава про TDD и BDD.
2. Сделать сигнал однозначным
Задержка мала, но сигнал шумный — это квадрант 2. Что помогает:
- Оракул вместо интуиции. Не «выглядит правильно», а проверяемое свойство. Property-based тесты — самый прямой способ: вы формулируете инвариант, а генератор ищет контрпримеры, о которых вы не подумали.
- Воспроизводимость. Флаки-тест — это не обратная связь, это генератор случайных чисел, который к тому же обучает игнорировать красный цвет.
- Один эксперимент — одно изменение. Меняете три вещи, смотрите результат — узнаёте про сумму, а не про слагаемые. Дисциплина бенчмарка, разобранная в треке производительности, применима к обучению один в один.
from hypothesis import given, strategies as st
def merge_intervals(items: list[tuple[int, int]]) -> list[tuple[int, int]]:
"""Слить пересекающиеся интервалы. O(n log n) по времени, O(n) по памяти."""
result: list[tuple[int, int]] = []
for start, end in sorted(items):
if result and start <= result[-1][1]:
prev_start, prev_end = result[-1] # пересечение — расширяем вправо
result[-1] = (prev_start, max(prev_end, end))
else:
result.append((start, end))
return result
# Инвариант вместо списка примеров: контрпример ищет генератор, а не вы.
@given(st.lists(st.tuples(st.integers(), st.integers()).map(lambda p: (min(p), max(p)))))
def test_нет_пересечений_после_слияния(items):
merged = merge_intervals(items)
for (_, prev_end), (next_start, _) in zip(merged, merged[1:]):
assert prev_end < next_start
Разница с примерными тестами — методологическая: примеры проверяют то, что вы и так представляли, генератор проверяет ваше представление о границах. Это обратная связь по слепым зонам, а не по известным случаям.
3. Добыть контрфактуальный сигнал
Самое дорогое и самое редкое. Способы:
- A/B и эксперименты. Единственный надёжный способ узнать про отклонённую ветку — прогнать обе.
- Записанное решение с датой пересмотра. Формат ADR (architecture decision record) полезен ровно тем, что фиксирует ожидание: «мы выбираем X, потому что ожидаем Y; пересмотреть через 6 месяцев». Через полгода вы получаете обратную связь по решению, а не по памяти о решении.
- Калибровка оценок. Записывайте оценку срока с интервалом («2–5 дней, 80 % уверенности») и потом сверяйте. Это единственный способ превратить оценку сроков из злой среды в добрую: сама по себе она не учит ничему, потому что вы не помните, что оценивали.
- Дебриф после значимого события. Tannenbaum и Cerasoli (2013), «Do Team and Individual Debriefs Enhance Performance? A Meta-Analysis», Human Factors 55(1) — разбор после выполнения улучшал последующую результативность с эффектом около d = 0,67 (в их пересчёте порядка 20–25 %). Условия: структурированность, направленность на процесс, отсутствие карательной рамки. Инженерный эквивалент — постмортем без поиска виноватого; глава в треке SRE разбирает формат.
Отраслевые данные тоже стоит упомянуть с оговоркой. Работа вокруг DORA (Forsgren, Humble, Kim, 2018, «Accelerate», и последующие ежегодные отчёты) устойчиво связывает короткие циклы поставки с лучшими результатами команд. Но это опросные, корреляционные данные с самоотчётными метриками, а не эксперимент; направление причинности из них не следует. Как аргумент в пользу коротких циклов — приемлемо, как доказательство — нет.
Обратная связь от людей
Ревью как обучающий канал
Bacchelli и Bird (2013), «Expectations, Outcomes, and Challenges of Modern Code Review», ICSE — исследование в Microsoft. Их результат: заявленная участниками главная цель ревью — поиск дефектов, а фактические результаты распределяются иначе: улучшения кода, альтернативные решения и передача знаний выходят вперёд, а поиск дефектов на практике даётся хуже ожидаемого, особенно при недостатке контекста у ревьюера. Sadowski и соавторы (2018), «Modern Code Review: A Case Study at Google», ICSE-SEIP, описывают устоявшийся процесс: ревью проходит практически каждое изменение, типичное изменение небольшое, ревьюер чаще всего один, первая реакция приходит быстро — конфигурация, которая держит сигнал слева на лестнице задержек.
Практический вывод для учащегося: ревью — ваш основной канал обратной связи по процессу, а не по дефектам. Чтобы он работал, вести себя надо иначе, чем принято.
- Отправляя PR, напишите своё предсказание: «не уверен в обработке частичного отказа, посмотрите в первую очередь туда». Это переводит ревью из режима «оцените» в режим «проверьте гипотезу».
- Просите обратную связь по процессу, не по результату: «как бы вы искали эту ошибку» полезнее, чем «правильно ли я её нашёл».
- Мелкие PR получают более содержательные комментарии. Большие получают «lgtm» — не потому, что всё хорошо, а потому что бюджет внимания ревьюера конечен.
- Комментарий, с которым вы не согласны, — самый ценный. Запишите его в журнал расхождений даже если остались при своём: через полгода станет видно, кто был прав системно.
Организационная сторона — глава про код-ревью и pull request; как обратную связь давать, если вы лид, — глава в треке лидерства; регулярные один на один как отдельный канал — там же.
Условие, без которого канал молчит
Edmondson (1999), «Psychological Safety and Learning Behavior in Work Teams», Administrative Science Quarterly 44(2). Более ранняя её работа (1996) дала контринтуитивный результат: медицинские бригады с лучшими показателями сообщали о большем числе ошибок. Не совершали больше — сообщали; разница объяснялась открытостью среды.
Инженерный перевод прямой: команда, где об ошибках не говорят, лишена данных о собственных ошибках. Не «скрывает проблемы» — не имеет к ним доступа. Следствие для отдельного человека: если в вашей среде цена признанной ошибки высока, главный обучающий канал закрыт, и никакие личные приёмы это не компенсируют. Это структурная, а не личная проблема.
Как принимать обратную связь
Carless и Boud (2018) ввели понятие «грамотности в обращении с обратной связью» — набор навыков получателя, без которых даже хорошая обратная связь не используется. Эмпирика тут слабее, чем в разделах выше, это скорее рамка, но три следствия практичны:
- Отделить сигнал от подачи. Резкий комментарий может содержать верное наблюдение. Обратное тоже верно: вежливый комментарий может быть пустым.
- Не защищаться в момент получения. Защита тратит ресурс на самость — тот самый уровень, где эффект отрицательный.
- Различать вкус и критерий. «Я бы написал иначе» и «это сломается при конкурентном доступе» — сообщения разного класса. Спрашивайте критерий, если он не назван.
Обратная связь и языковые модели
Модель — источник обратной связи с уникальным профилем: задержка почти нулевая, однозначность низкая. Это квадрант 2 в чистом виде — самый опасный. Три ловушки.
Первая ловушка — исчезновение попытки. Обратная связь работает только после совершённой попытки (Bangert-Drowns и соавторы, 1991). Модель по умолчанию выдаёт готовое решение, то есть делает ответ доступным до попытки — ровно то условие, при котором эффект схлопывался. Порядок «спросил — прочитал — согласился» не является обучением, каким бы качественным ни был ответ.
Вторая ловушка — беглость как ложный сигнал. Связный уверенный текст ощущается как верифицированный. Механизм, порождающий связность, к истинности отношения не имеет — как устроены модели, разбирается в треке ai-basics.
Третья ловушка — исчезновение расхождения. Если модель пишет код, а вы его принимаете, у вас нет собственного предсказания, с которым результат мог бы разойтись. Обучающего события не возникает вообще. Это же и объясняет, почему субъективное ощущение продуктивности при работе с моделью может расходиться с измеренной: пример с расхождением восприятия и измерения разобран в первой главе трека.
Что делать. Разделите роли модели по тому, является ли она валидным оракулом:
| Роль | Валидный оракул? | Как использовать |
|---|---|---|
| Проверить синтаксис, стиль, идиоматичность | скорее да | принимать с беглой проверкой |
| Найти дыру в вашем рассуждении | да, как оппонент | «вот моя аргументация, найди слабое место» |
| Сгенерировать вопросы по теме без ответов | да | вопросы дешевле ответов и не портят попытку |
| Разобрать ваш готовый ответ | да | сначала ваш ответ, потом сверка |
| Факты, версии, поведение конкретного API | нет | сверять с документацией |
| Архитектурные компромиссы | нет | нет обратной связи из реальности вашей системы |
Практический протокол: сначала ваш ответ, потом модель. Тот же порядок, что и с любым эталоном. Проверка сгенерированного кода — отдельный навык, разобранный в треке ai-agents и главе про верификацию; учебная сторона вопроса — в главе 14 этого трека.
Антипаттерны
- «Оно заработало» как сигнал. Зелёный прогон не отличает «понял» от «подобрал» (глава 03). Механизм: успех после перебора вариантов подкрепляет стратегию перебора, а не понимание.
- Обучение по исходу в шумной среде. Одна удачная выкатка без тестов — не данные о том, что тесты не нужны. Там, где дисперсия высока, исход слабо связан с качеством решения, и обучение по исходу выучивает шум. Лекарство одно — оценивать процесс решения, а не результат.
- Сбор обратной связи без изменения поведения. Ретроспективы, из которых не выходит ни одного изменённого действия. Формально цикл есть, замыкания нет. Проверочный вопрос: что конкретно вы сделаете иначе завтра?
- Обратная связь от того, кто не видел работы. Мнение о вашей архитектуре от человека, не знающего ограничений, — не сигнал о реальности.
- Оптимизация метрики вместо явления. Как только показатель становится целью, он перестаёт быть измерением: число закрытых карточек и прочитанных глав растёт при неизменном навыке. Про показатели, которые не разваливаются под давлением, — глава про SLI и SLO.
- Хроническая перегрузка обратной связью. Двести уведомлений, сотня комментариев, вечно красный CI. Сигнал, на который невозможно среагировать, обучает игнорировать сигналы — и это быстрый путь к состоянию из главы про выгорание.
Мифы вокруг темы
- «Обратная связь всегда полезна». Опровергнуто прямо: Kluger и DeNisi (1996), 38 % случаев ухудшения. Полезность зависит от уровня, на который направлено внимание, и от наличия предшествующей попытки.
- «Сэндвич обратной связи» (похвала — критика — похвала). Убедительных контролируемых данных в пользу схемы я не знаю. Из известного следует скорее обратное: обрамление похвалой смещает внимание на самость — тот уровень, который у Kluger и DeNisi ведёт себя хуже всего. Схема не «доказанно вредна» — она подаётся как установленный факт без оснований.
- «Главное — хвалить за усилия, а не за результат». Утверждение выросло из работ про установку на рост, и в популярной подаче его масштаб сильно завышен. Метаанализ Sisk и соавторов (2018) в Psychological Science нашёл слабые средние эффекты вмешательств; крупный полевой эксперимент Yeager и соавторов (2019) в Nature — небольшой эффект, сосредоточенный у слабоуспевающих учащихся. Это не «ничего», но и не рычаг, которым его изображают.
- «Ошибаться вредно, надо сразу делать правильно». Данными не поддерживается для типичного взрослого обучающегося: Metcalfe (2017), Keith и Frese (2008). С границей: ошибка должна быть замечена и исправлена, иначе всё наоборот.
- «Я и так знаю свои слабые места». Самооценка знаний калибрована плохо и в сторону завышения: Dunlosky и Rawson (2012), «Overconfidence Produces Underachievement», Learning and Instruction, показали, что завышенная оценка понимания приводит к преждевременному прекращению изучения. Механизм — в главе 03.
Цена
Раздел, без которого глава была бы агитацией.
Строить обратную связь дорого. Тесты, наблюдаемость, инфраструктура экспериментов, время ревьюеров — ресурсы, отнятые у поставки. Обучающий эффект — приятный побочный продукт, но он не оправдывает произвольные вложения. Предсказания замедляют: на отлаженной рутине это чистые издержки.
Обратная связь эмоционально дорога. Регулярное столкновение с собственными ошибками — нагрузка, и она суммируется с остальными. Про распределение этого ресурса — внимание и энергия и фокус; про то, что мешает начинать, — прокрастинация.
Когда не окупается:
- одноразовая задача, к классу которой вы не вернётесь;
- область без критерия истины — там, где «правильно» не определено, обратная связь по исходу учит вкусу интерпретатора, а не предмету;
- чужая ответственность: получать обратную связь по решениям, которые принимаете не вы, бессмысленно, потому что третий компонент цикла отсутствует;
- уровень, где вы ещё не совершили попытку. Сначала попытка.
Мини-итог
- Обратная связь — это сравнение ожидания с результатом плюс возможность изменить следующее действие. Нет ожидания — нет обратной связи, есть просто событие.
- Практика без коррекции не нейтральна: она закрепляет ошибки и повышает уверенность. Систематический обзор Choudhry и соавторов (2005) в медицине показал, что стаж может коррелировать с ухудшением качества.
- Опыт превращается в экспертизу только в закономерной среде с быстрым однозначным сигналом (Kahneman и Klein, 2009). В «злых» средах опыт производит уверенность без точности (Hogarth).
- Обратная связь сама по себе не благо: в метаанализе Kluger и DeNisi (1996) средний эффект d ≈ 0,41, но в 38 % случаев результат ухудшился. Решающий параметр — направлено внимание на задачу и процесс или на самость.
- Обратная связь работает только после совершённой попытки. Ответ, доступный заранее, обнуляет эффект (Bangert-Drowns и соавторы, 1991) — и это же главный риск работы с языковыми моделями.
- Ошибки с последующей коррекцией усиливают обучение (Metcalfe, 2017; Keith и Frese, 2008), особенно ошибки, сделанные с высокой уверенностью.
- Задержка — ключевой инженерный параметр: сдвигайте сигнал влево, где можно, и стройте разбор искусственно, где нельзя. Про оптимальный момент подачи (немедленно или с отсрочкой) данные противоречивы — не стройте на этом процессов.
- Прямых контролируемых исследований обратной связи в обучении программистов практически нет. Всё прикладное в этой главе — перенос механизма плюс отраслевая практика, а не результат эксперимента.
Источники
- Kluger A. N., DeNisi A. (1996). The Effects of Feedback Interventions on Performance: A Historical Review, a Meta-Analysis, and a Preliminary Feedback Intervention Theory. Psychological Bulletin, 119(2). doi:10.1037/0033-2909.119.2.254
- Hattie J., Timperley H. (2007). The Power of Feedback. Review of Educational Research, 77(1). doi:10.3102/003465430298487
- Shute V. J. (2008). Focus on Formative Feedback. Review of Educational Research, 78(1). doi:10.3102/0034654307313795
- Bangert-Drowns R. L., Kulik C.-L. C., Kulik J. A., Morgan M. (1991). The Instructional Effect of Feedback in Test-Like Events. Review of Educational Research, 61(2).
- Про момент подачи: Kulhavy R. W., Anderson R. C. (1972). Delay-Retention Effect with Multiple-Choice Tests. Journal of Educational Psychology, 63(5); Kulik J. A., Kulik C.-L. C. (1988). Timing of Feedback and Verbal Learning. Review of Educational Research, 58(1); Butler A. C., Karpicke J. D., Roediger H. L. (2007). The Effect of Type and Timing of Feedback on Learning from Multiple-Choice Tests. JEP: Applied, 13(4); Butler A. C., Roediger H. L. (2008). Feedback Enhances the Positive Effect and Reduces the Negative Effect of Multiple-Choice Testing. Memory & Cognition, 36(3).
- Про ошибки: Metcalfe J. (2017). Learning from Errors. Annual Review of Psychology, 68 (doi:10.1146/annurev-psych-010416-044022); Butterfield B., Metcalfe J. (2001). Errors Committed with High Confidence Are Hypercorrected. JEP: LMC, 27(6); Keith N., Frese M. (2008). Effectiveness of Error Management Training: A Meta-Analysis. Journal of Applied Psychology, 93(1); Baddeley A., Wilson B. A. (1994). When Implicit Learning Fails: Amnesia and the Problem of Error Elimination. Neuropsychologia, 32(1).
- Kahneman D., Klein G. (2009). Conditions for Intuitive Expertise: A Failure to Disagree. American Psychologist, 64(6). doi:10.1037/a0016755
- Hogarth R. M. (2001). Educating Intuition. University of Chicago Press; Hogarth R. M., Lejarraga T., Soyer E. (2015). The Two Settings of Kind and Wicked Learning Environments. Current Directions in Psychological Science, 24(5).
- Einhorn H. J., Hogarth R. M. (1978). Confidence in Judgment: Persistence of the Illusion of Validity. Psychological Review, 85(5); Shanteau J. (1992). Competence in Experts: The Role of Task Characteristics. OBHDP, 53(2).
- Choudhry N. K., Fletcher R. H., Soumerai S. B. (2005). Systematic Review: The Relationship between Clinical Experience and Quality of Health Care. Annals of Internal Medicine, 142(4).
- Tannenbaum S. I., Cerasoli C. P. (2013). Do Team and Individual Debriefs Enhance Performance? A Meta-Analysis. Human Factors, 55(1); Edmondson A. C. (1999). Psychological Safety and Learning Behavior in Work Teams. Administrative Science Quarterly, 44(2).
- Wason P. C. (1960). On the Failure to Eliminate Hypotheses in a Conceptual Task. Quarterly Journal of Experimental Psychology, 12(3); Klayman J., Ha Y.-W. (1987). Confirmation, Disconfirmation, and Information in Hypothesis Testing. Psychological Review, 94(2).
- Dunlosky J., Rawson K. A. (2012). Overconfidence Produces Underachievement: Inaccurate Self Evaluations Undermine Students’ Learning and Retention. Learning and Instruction, 22(4).
- Sisk V. F., Burgoyne A. P., Sun J., Butler J. L., Macnamara B. N. (2018). To What Extent and Under Which Circumstances Are Growth Mind-Sets Important to Academic Achievement? Two Meta-Analyses. Psychological Science, 29(4); Yeager D. S. и соавторы (2019). A National Experiment Reveals Where a Growth Mindset Improves Achievement. Nature, 573.
- Carless D., Boud D. (2018). The Development of Student Feedback Literacy. Assessment & Evaluation in Higher Education, 43(8).
- Про код-ревью: Bacchelli A., Bird C. (2013). Expectations, Outcomes, and Challenges of Modern Code Review. ICSE 2013 (текст у Microsoft Research); Sadowski C., Söderberg E., Church L., Sipko M., Bacchelli A. (2018). Modern Code Review: A Case Study at Google. ICSE-SEIP 2018.
- Про TDD: Rafique Y., Mišić V. B. (2013). The Effects of Test-Driven Development on External Quality and Productivity: A Meta-Analysis. IEEE TSE, 39(6); Fucci D., Erdogmus H., Turhan B., Oivo M., Juristo N. (2016). An External Replication on the Effects of Test-Driven Development Using a Multi-Site Blind Analysis Approach. ESEM 2016.
- Forsgren N., Humble J., Kim G. (2018). Accelerate: The Science of Lean Software and DevOps; ежегодные отчёты — dora.dev.
- Koriat A., Bjork R. A. (2005). Illusions of Competence in Monitoring One’s Knowledge During Study. JEP: Learning, Memory, and Cognition, 31(2); Fischhoff B. (1975). Hindsight Is Not Equal to Foresight: The Effect of Outcome Knowledge on Judgment Under Uncertainty. JEP: Human Perception and Performance, 1(3).
Что дальше
Мы разобрали, как получать сигнал о том, что модель мира разошлась с реальностью. Но даже надёжно усвоенное знание имеет свойство не применяться в тот момент, когда оно нужно: человек, отлично сдавший теорию конкурентности, не узнаёт гонку в собственном коде. Это отдельная проблема со своей — довольно неутешительной — доказательной базой.