Как учиться Обратная связь: без неё практика закрепляет ошибки
0%

Обратная связь: без неё практика закрепляет ошибки

Обратная связь: без неё практика закрепляет ошибки

В предыдущей главе мы разобрали, что у Эрикссона называется осознанной практикой и почему популярный пересказ про «10 000 часов» к его работам относится плохо. Один из компонентов, который в исходных формулировках стоит рядом с «задачей на грани возможностей», — немедленная информативная обратная связь. Без неё конструкция не работает, и в этой главе мы разбираем, почему именно.

Тезис главы простой и неприятный: практика без коррекции — не нейтральное занятие. Она не «даёт меньше пользы». Она закрепляет то, что вы делаете, включая неправильное, и параллельно повышает уверенность. Через год такой работы вы будете делать ту же ошибку быстрее, увереннее и с большим ощущением экспертизы.

При этом обратная связь — не благо по определению. Крупнейший метаанализ по теме нашёл, что примерно в 38 % случаев вмешательство с обратной связью ухудшило результат. Так что глава состоит из двух половин: сначала — почему без обратной связи обучения нет, потом — почему обратная связь сама по себе ничего не гарантирует и от чего зависит её знак.

Что такое обратная связь и чем она не является

Определение, которым мы будем пользоваться: обратная связь — это сигнал, позволяющий сравнить то, что вы ожидали, с тем, что произошло, и изменить следующее действие.

Здесь три части, и каждая обязательна:

  1. Ожидание. До результата у вас должно быть предсказание. Иначе сравнивать не с чем.
  2. Сигнал о реальности. Наблюдаемый исход, привязанный к вашему действию.
  3. Возможность изменить следующее действие. Если следующего раза нет или вы не властны над решением, это не обучение, а информирование.

Отсюда сразу следует, что обратной связью не является, хотя ей называется:

  • Результат без ожидания. Тест позеленел. Вы не предсказывали, позеленеет ли он и почему. Вы узнали факт о мире, но ничего не узнали о своей модели мира. Это главный дефект инженерной практики: сигналов вокруг много, а предсказаний почти нет.
  • Оценка без разбора. «Хорошо», «слабовато», «на грейд не тянет». Есть сравнение с нормой, нет информации о том, какое действие и в какую сторону менять.
  • Мнение без критерия. «Мне не нравится этот код». Пока критерий не назван, это сигнал о собеседнике, а не о реальности.
  • Похвала. Обратная связь о вас, а не о задаче; именно этот класс в метаанализах ведёт себя хуже всего.

Точек разрыва пять, и только одна из них — про наличие сигнала. Остальные четыре ломаются молча, при формально работающем процессе. Про обратные связи как свойство систем вообще — глава в треке системного мышления; там же разобраны задержки в контурах, которые для нас ключевой параметр. Здесь тот же механизм рассматривается узко — как условие научения.

Практика без обратной связи: что об этом известно

Начнём с самого сильного из доступных утверждений: опыт сам по себе не производит мастерства. Это не риторика, за этим есть данные.

Условия, при которых опыт превращается в экспертизу

Даниэль Канеман и Гэри Кляйн потратили несколько лет на попытку согласовать две противоположные позиции — «интуиция экспертов надёжна» и «интуиция экспертов систематически ошибается» — и опубликовали совместный текст: Kahneman и Klein (2009), «Conditions for Intuitive Expertise: A Failure to Disagree», American Psychologist 64(6). Их вывод состоит из двух условий, и оба обязательны:

  1. Среда должна быть достаточно закономерной — в ней должны существовать устойчивые связи между признаками и исходами, которые в принципе можно выучить.
  2. У человека должна быть возможность эти закономерности выучить — то есть достаточная практика с быстрой и однозначной обратной связью.

Их же примеры. Анестезиологи получают сигнал о состоянии пациента в течение минут — их интуиция работает. Рентгенологи по многим задачам узнают об ошибке спустя недели или никогда — их калибровка заметно хуже. Метеорологи, ежедневно делающие вероятностные прогнозы и ежедневно видящие исход, — одна из самых хорошо откалиброванных профессиональных групп вообще; биржевые аналитики с долгосрочными прогнозами — одна из худших. Похожий перечень признаков задачи, предсказывающих, разовьётся ли экспертиза, есть у 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, что очень много по меркам образовательных вмешательств. Но их собственный акцент — на разбросе: эффекты варьируют вплоть до отрицательных, и сам факт «дали обратную связь» не предсказывает ничего.

Их рамка — три вопроса, на которые обратная связь должна отвечать:

  1. Куда я иду — какой критерий, что считается сделанным.
  2. Как я иду — где я сейчас относительно критерия.
  3. Что дальше — какое следующее действие сократит разрыв.

Если ответа на третий вопрос нет, обратная связь чаще всего бесполезна. Проверьте на своём последнем ревью: сколько комментариев отвечали на третий вопрос, а сколько — только на второй? Уровни у них те же четыре — задача, процесс, саморегуляция, самость, — с тем же выводом про вред последнего.

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) ввели понятие «грамотности в обращении с обратной связью» — набор навыков получателя, без которых даже хорошая обратная связь не используется. Эмпирика тут слабее, чем в разделах выше, это скорее рамка, но три следствия практичны:

  1. Отделить сигнал от подачи. Резкий комментарий может содержать верное наблюдение. Обратное тоже верно: вежливый комментарий может быть пустым.
  2. Не защищаться в момент получения. Защита тратит ресурс на самость — тот самый уровень, где эффект отрицательный.
  3. Различать вкус и критерий. «Я бы написал иначе» и «это сломается при конкурентном доступе» — сообщения разного класса. Спрашивайте критерий, если он не назван.

Обратная связь и языковые модели

Модель — источник обратной связи с уникальным профилем: задержка почти нулевая, однозначность низкая. Это квадрант 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).

Что дальше

Мы разобрали, как получать сигнал о том, что модель мира разошлась с реальностью. Но даже надёжно усвоенное знание имеет свойство не применяться в тот момент, когда оно нужно: человек, отлично сдавший теорию конкурентности, не узнаёт гонку в собственном коде. Это отдельная проблема со своей — довольно неутешительной — доказательной базой.

Перенос знания: почему выученное не применяется само

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов