Навык чтения программ: блочная модель

образовательный процесс
программирование
когнитивная нагрузка
Дата публикации

1 августа 2023 г.

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

Почему учащимся тяжело программировать?

Причины следующие:

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

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

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

Упражнения на понимание кода. Блочная модель

Чтобы систематизировать задания на понимание кода, используется Блочная модель. Сам код разбивается на четыре уровня:

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

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

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

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

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

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

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

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

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

Текст
программы
Выполнение
программы
Назначение
программы
Атомы Распознать виды команд, такие как присваивание, логическое выражение и др. Трассировка значения переменной Объяснить назначение конкретной строки программы
Блоки Распознать тип блока: цикл с условием, условный оператор, определение функции и др. Перестановка строк кода в правильном порядке (задача Парсона) Объяснить назначение части программы: цикла, функции и т.д.
Связи Определить область видимости переменной, выделить все вызовы функции и др. Нарисовать блок-схему, найти ветви условного оператора, которые никогда не выполнятся и др. Выбрать подходящее имя для переменной; выполняют ли два фрагмента программы одну и ту же функцию?
Макроструктура Расставить комментарии, привести в порядок некрасивый код (добавить отступы, пробелы и т.д.) Составить набор тестовых данных для тестирования всех ветвей программы; будет ли строка n выполнена хотя бы один раз? Выберите название для программы; коротко опишите назначение программы.

Понимание исходного кода:

  • помогает объяснить, адаптировать и отладить готовый фрагмент кода;
  • формирует собственную библиотеку шаблонов кода, которые помогут самостоятельно составлять программы;
  • подразделяется на 12 уровней блочной модели;

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

Такая иллюстрация получилась на основе таблице. Примеры кода в таблице - на Python.

Сноски

  1. Ссылки на публикации по теме и текст, который взять за основу этой публикации можно найти по этой ссылке.↩︎