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

Отладка — важный навык, но некоторым студентам-программистам трудно его освоить. Отладка — это решение проблемы. На самом деле, это две проблемы: найти ошибку и исправить ее. Первый обычно сложнее. Давайте сосредоточимся на этом.

Как найти ошибку? Обычно, глядя на значения переменных и сравнивая их с тем, что вы ожидаете. Вот программа:

Есть четыре переменных: a, b, c и d. Когда программа запускается, мы ожидаем, что a, b и c будут равны 2, 3 и 4 соответственно. Мы ожидаем, что d будет 2 + 3 = 5 x 4 = 20. Верно?

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

Мы ожидаем, что d будет равно 20, но на самом деле это 14. Проблема в строке 5. Теперь, когда мы знаем, в чем проблема, мы можем ее исправить.

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

Узоры

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

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

Предположим, вы и ваша лучшая подруга Энн играете в игру «угадай число». Энн выбирает целое число от 1 до 100. Ваша задача — выяснить, какое число она выбрала. Вы выбираете число, например 39. Анна говорит вам, правильное ли это число, или 39 меньше или больше правильного числа. Вы продолжаете, пока не угадаете правильное число или не решите, что вы оба должны найти себе занятие получше.

Найти лучшую стратегию легко: выберите число в центре диапазона. Когда вы начинаете, диапазон составляет от 1 до 100, поэтому ваше первое предположение — 50. Энн говорит, что это слишком мало, поэтому теперь диапазон составляет от 51 до 100. Среднее значение — 75, так что это ваше следующее предположение. Энн говорит, что 75 — это слишком много. Теперь диапазон составляет от 51 до 74. И так далее.

Назовем этот паттерн половинным разделением. Это работает независимо от того, сколько номеров у вас есть. Скажем, диапазон от 1 до 12.

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

Сопоставление игры с отладкой

Игра и отладка — похожие задачи, если смотреть на них правильно. Вот 12 строк кода.

В игре цель состоит в том, чтобы найти номер Энн. При отладке цель состоит в том, чтобы найти строку кода, содержащую ошибку (предположим, что это одна строка). В игре мы спрашиваем Энн о числе. При отладке мы тестируем строку кода.

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

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

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

Перенос полураскола

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

Вот скриншот первого инструмента на его веб-странице. Это просто оригинальная игра. Вы можете попробовать сами.

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

После того, как студенты поиграют в игру, Тара, псевдоинструктор (т. е. виртуальный инструктор), спрашивает псевдостудентов (т. е. виртуальных студентов, проходящих курс вместе с реальными студентами), какую стратегию они использовали.

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

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

Третья игра делает еще один шаг к отладке. Вот скриншот:

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

Четвертая игра убирает цветовое кодирование:

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

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

Помогает ли это студентам? Я не знаю наверняка. Это логично, но у меня нет данных, чтобы доказать, что это эффективно. Пожалуйста, свяжитесь со мной (Mathieso на oakland.edu) или оставьте комментарий ниже, если вы заинтересованы в совместной работе, тестировании этой или подобных идей.