Вы не можете писать код, пока не научитесь читать код

Четыре шага последовательного учебного подхода к обучению программированию: 1) чтение и понимание кода; 2) написание кода; 3) чтение и понимание шаблонов программ; и 4) применение шаблонов программ к уникальным ситуациям. Я обсуждал первый шаг процесса в предыдущей статье, а в этой статье я погружаюсь во второй шаг: написание кода с помощью простых и понятных инструкций.

Переход от чтения кода к написанию кода

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

Изучение того, как читать код, должно быть разбито на программные конструкции, такие как операторы if и различные типы циклов. Прежде чем можно ожидать, что ученик напишет, например, эффективный while цикл, он должен потренироваться в чтении while циклов и многократном отслеживании кода во многих различных ситуациях, таких как циклы, управляемые счетчиком, и циклы, управляемые дозорным устройством. Только после того, как вы попрактикуетесь в циклах путем многократной трассировки, учащийся получит достаточно опыта в понимании поведения циклов, чтобы начать писать свои собственные эффективные циклы.

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

Учимся писать код

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

Вот один пример четких и простых инструкций по замене переменных:

  • Объявите x и y как переменные и установите для них значения 1 и 2 соответственно.
  • Объявите temp третьей переменной и установите для нее значение x.
  • Установите значение x равным y.
  • Установите значение y равным температуре.
  • Отобразите новые значения x и y.

Обучающийся программист должен уметь перевести эти инструкции в рабочую программу. Вот перевод на Python:

Вот еще один пример, который можно использовать при изучении конструкции if-else:

  • Предложите пользователю ввести стоимость газировки.
  • Если стоимость газировки меньше или равна 2 долларам, то рекомендуем покупать газировку.
  • Если стоимость газировки больше 2 долларов, то не рекомендуется покупать газировку.

Вот перевод на JavaScript (с использованием оболочки Spidermonkey):

putstr("Enter the price of a soda: ");
let price = parseFloat(readline());
if (price <= 2.00) {
 print("You can buy the soda.");
}
else {
 print("Do not buy the soda.");
}

Комментируя код для понимания

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

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

# set accumulator to zero
total = 0 
# counter to control loop starts at 1
count = 1 
# loop condition tells how many times to iterate
while count <= 10: 
 # prompt the user to enter a number
 print("Enter a number:", end=" ")
 # get number as string from user
 number = input() 
 # convert number to integer
number = int(number) 
 # add number to the total
 total = total + number
 # increment the count by 1 so loop will stop 
 count = count + 1 
# display the total
print(total)

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

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

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

Комментарии важны для понимания ошибок

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

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

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

Запоминание шаблонов синтаксиса важно

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

О шаблонах синтаксиса я писал отдельно, но вот несколько примеров для нескольких популярных языков:

цикл for - C ++:

for (init-variable; condition; variable-mod) 
{
 statements;
}

цикл while - Python:

while (condition):
  statements

функция (традиционная) - JavaScript:

function function-name (parameter list)
{
 statements;
 return statement;
}

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

Написание кода - это всего лишь шаг 2 в процессе

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

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

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