Теория когнитивной нагрузки, проработанные и “затухающие” примеры

Алгоритмизация и программирование
Психология обучения
Python
Дата публикации

7 августа 2022 г.

Без примеров решения задач тяжело представить себе учебник, методичку к лабораторной или лекцию по программированию. Но с примерами не всё так просто, как может показаться на первый взгляд. Применение различных типов примеров обосновывается теорией когнитивной нагрузки, о которой я недавно прочитал. Далее приведу заметки с информацией из разных источников.

Память и когнитивная нагрузка

Сперва несколько слов о памяти. Память делиться на долговременную и кратковременную или рабочую . Когда нам нужна какая-либо информация, мозгу необходимо извлечь её из долговременной и поместить в кратковременную память. Обратное действие происходит в процессе обучения - новые знания должны быть закодированы и помещены в долговременную память. Если этого не произошло, новая информация забывается.

Основные каналы получения новой информации - визуальный и вербальный (аудиальный). Если оба канала получают связанную информацию, которая затем сохраняется в долговременной памяти, при этом в разных отделах мозга, то и вспомнить такую информацию легче. Для этого необходимо задействовать один из каналов, чтобы активировать другой.

Когнитивная архитектура

Когнитивная архитектура

Дополнительная когнитивная нагрузка ложится на человека, если связанная между собой информация разделена в пространстве и времени. Например расшифровка элементов чертежа находится на другой странице или учащимся приходится разделять внимание между одинаковой по смыслу, но разной по модальности информацией (озвучка и субтитры). Появляется эффект разделения внимания (split-attention effect). Мозг непроизвольно сравнивает информация, поступающую из разных каналов и проверяет, совпадает ли она 1.

Пример появления эффекта - видео с инструкцией. Установлено, что если текст сопровождается голосом, то информация воспринимается труднее нежели в случае одного лишь голосового сопровождения без текста или текста без голоса.

Существование этого эффекта не означает, что нужно полностью избегать дублирования информации.

Теория когнитивной нагрузки описывает следующие типы взаимодействия с новым материалом:

  • внутренняя когнитивная нагрузка - требования возлагаемые на самого учащегося (что необходимо держать в памяти, чтобы усвоить новую информацию);
  • внешняя нагрузка - создаётся внешними факторами, отвлекающими от обучения (запутанное объяснение информации преподавателем, плохо структурированные инструкции, шум в аудитории и так далее);
  • релевантная (уместная) нагрузка - это умственные усилия, которые необходимо приложить, чтобы провести аккомодацию или ассимиляцию нового изученного материала и последующего размещения в долговременной памяти.

Теория говорит о том, что рабочая память разделяется между этими тремя источниками нагрузки. Задача преподавателя - минимизировать внешнюю нагрузку, управлять внутренней нагрузкой (учёт текущего уровня подготовки учащихся) и оптимизировать релевантную когнитивную нагрузку.

Сделать это как раз и помогают описанные далее методы.

Проработанные примеры

С помощью проработанного примера учащимся демонстрируется экспертное решение задачи. Предоставленный пример решения снимает с учащихся часть когнитивной нагрузки по восстановлению из постоянной памяти необходимой информации 2.

Хороший пример:

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

Проработанные примеры бывают двух видов:

  • ориентированные на процесс - сопровождаются подробным описанием последовательности шагов; представляются в виде текстовой инструкции или видео;
  • ориентированные на результат - описывают одно из возможных решений, которое затем можно применить к данному классу задач.

Для новичков больше подходят примеры, ориентированные на процесс.

Рассмотрим следующий проработанные пример:

# Используйте черепашку и цикл чтобы нарисовать квадрат
# со стороной равной 100 пикселей

# Импортируем необходимые функции
from turtle import Turtle

# Инициализируем объект Turtle
t = Turtle()

# Движение и поворот для каждой из сторон
for side in range(__): # <- Какое значение нужно указать?
    t.forward(__)
    t.right(90)

1 строка - условие встроено в само решение, 4, 7 строки - промежуточные задачи, 11 строка - комментарий указывает, где учащемуся необходимо внести изменения в пример.

В исследованиях говорится, что изучение каждого нового понятия и концепции в программировании должны сопровождаться минимум двумя проработанными примерам.

Проработанные примеры крайне полезны для новичков, но со временем всё больше времени должно уделяться решению задач. Количество готовых шагов в проработанном примере должно уменьшаться (затухать) и полностью заменяться задачами для самостоятельного решения:

Распределение проработанных примеров и задач для самостоятельного решения

Распределение проработанных примеров и задач для самостоятельного решения

Затухающие примеры

Суть затухающих примеров3 состоит в том, чтобы в начале изучения темы давать учащимся полный пример решения задачи и со временем добавлять в последующие примеры пропуски. Эти пропуски учащимся нужно заполнить самостоятельно. С каждым новым примером количество готовых шагов решения сокращается. В конечном итоге задачу нужно решить самостоятельно с нуля.

Образец последовательности затухающих примеров приведен далее.

Задача № 1. Найти сумму длин слов в массиве:

# total_length(["red", "green", "blue"]) => 12
def total_length(list_of_words):
    total = 0
    for word in list_of_words:
        total = total + length(word)
    return total

Для этой задачи даётся полное решение.

Задача № 2. Найти длину каждого слова в массиве и сохранить её в новом массиве:

# word_lengths(["red", "green", "blue"]) => [3, 5, 4]
def word_lengths(list_of_words):
    list_of_lengths = []
    for ____ in ____:
        append(list_of_lengths, ____)
    return list_of_lengths

Теперь в примере появились пропуски, которые акцентируют внимание на операторе цикла.

Задача № 3. Объединить в одну строку все строковые элементы массива:

# join_all(["red", "green", "blue"]) => "redgreenblue"
def join_all(list_of_words):
    joined_words = ____
    for ____ in ____:
        ____
    return joined_words

В данном примере фокусируемся на обновлении переменной-аккумулятора, которая хранит строку-ответ.

Задача № 4. Получить аббревиатуру из слов, хранящихся в массиве:

# make_acronym(["red", "green", "blue"]) => "RGB"
def make_acronym(list_of_words):
    ____

Эту задачу учащимся нужно решить самостоятельно.

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

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


Думаю, что эту информацию обязательно использую для переработки своих лабораторных работ по Python. Затухающих примеров действительно не хватала, так как у некоторых студентов были трудности с решением задачи с чистого листа. Надеюсь с описанными техниками получится избежать таких проблем.

Сноски

  1. Часть информации взята с этого сайта, другая - из этой записи в блоге↩︎

  2. Информация о проработанных примерах↩︎

  3. С англ. Faded examples, по этому трудно подобрать другой перевод.↩︎