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

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

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

Почему важно научиться отслеживать код

Трассировка переменных и кода (трассировка программы) используются для обучения студентов чтению программы и точному прогнозированию ее поведения за счет возможности отслеживать поток управления от начала до конца программы. В статье Xie, et.al., авторы заявляют, что отслеживание кода - это навык, отличный от написания кода, и это навык, который необходимо освоить, прежде чем научиться писать код. Нельзя ожидать, что учащийся напишет оригинальный код, если он не освоил чтение кода и прогнозирование его поведения. Отличный способ научить этому навыку - отслеживать код, как переменные, так и целые программы.

Отслеживание переменных

Есть несколько способов попрактиковаться в отслеживании переменных. Один из способов - выполнить трассировку переменной в программе. Этому методу часто обучают в самом начале курса, когда студенты знакомятся с тем, как программа обрабатывает арифметические выражения. Например, на рисунке ниже показан пример цикла while C ++ и трассировки переменной, в которой записываются новые значения переменных, которые затем помечаются, когда переменная получает новое значение:

Более сложная задача может потребовать от учащегося продемонстрировать, как данные массива используются в вычислениях. Учитывая эту программу JavaScript:

let grades = new Array(71, 88, 83, 92, 67);
let total = 0;
let average = 0.0;
for (let i = 0; i < grades.length; i++) {
total += grades[i];
}
average = total / grades.length;
print("The average grade is", average);

Этот пример демонстрирует другой способ отображения переменных и их обновлений во время выполнения программы.

Программа трассировки

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

Первый тип трассировки программы - это рисование стрелок, указывающих поток управления в программе. На рисунке ниже показано, как показать поток управления для программы, которая имеет один цикл и оператор if внутри цикла:

Другой способ отследить программу - обвести строки программы, которая выполняется, и отметить строки программы, которые не выполняются. Вот пример использования этого метода в программе, которая включает оператор if-else if:

Эта программная трассировка указывает, что второй оператор print будет выполняться, потому что температура выше 60 и на улице идет дождь.

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

Проблемы Парсонса

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

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

Затем нажмите кнопку «Создать упражнение», и код будет перемешан и размещен в блоки, как показано ниже:

Затем учащийся перетаскивает блоки в пустую область справа и затем нажимает кнопку «Оценить», чтобы убедиться, что их ответ правильный, как показано на следующем снимке экрана:

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

Чтение кода предшествует написанию кода

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

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

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

Первоначально опубликовано на https://thelearningprogrammer.com 17 февраля 2020 г.