Теория когнитивной нагрузки, проработанные и “затухающие” примеры
Без примеров решения задач тяжело представить себе учебник, методичку к лабораторной или лекцию по программированию. Но с примерами не всё так просто, как может показаться на первый взгляд. Применение различных типов примеров обосновывается теорией когнитивной нагрузки, о которой я недавно прочитал. Далее приведу заметки с информацией из разных источников.
Память и когнитивная нагрузка
Сперва несколько слов о памяти. Память делиться на постоянную и кратковременную или рабочую . Когда нам нужна какая-либо информация, мозгу необходимо извлечь её из постоянной и поместить в кратковременную память. Обратное действие происходит в процессе обучения - новые знания должны быть закодированы и помещены в постоянную память. Если этого не произошло, новая информация забывается.
Основные каналы получения новой информации - визуальный и вербальный (аудиальный). Если оба канала получают связанную информацию, которая затем сохраняется в постоянной памяти, при этом в разных отделах мозга, то и вспомнить такую информацию легче. Для этого необходимо задействовать один из каналов, чтобы активировать другой.
Дополнительная когнитивная нагрузка ложится на человека, если информация в визуальном и вербальном каналах повторяет друг друга. Появляется эффект разделения внимания (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. Получить аббревиатуру из слов, хранящихся в массиве:
Эту задачу учащимся нужно решить самостоятельно.
Затухающие примеры работают, потому что на каждом шаге учащемуся нужно концертировать своё внимание лишь на ограниченном наборе новых понятий и шаблонов, что снижает когнитивную нагрузку.
Важно правильно составить затухающие примеры, чтобы обратить внимание на действительно важные части решения. В предыдущем примере - это паттерн с переменной-аккумулятором, который широко применяется в различных алгоритмах.
Думаю, что эту информацию обязательно использую для переработки своих лабораторных работ по Python. Затухающих примеров действительно не хватала, так как у некоторых студентов были трудности с решением задачи с чистого листа. Надеюсь с описанными техниками получится избежать таких проблем.
Сноски
Часть информации взята с этого сайта, другая - из этой записи в блоге↩︎
С англ. Faded examples, по этому трудно подобрать другой перевод.↩︎