Преподавание программирования с использованием системы автоматической проверки решений

Разделы: Информатика


Компьютер – действующее лицо педагогического процесса

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

Что фактически требуется от школьника на первых порах изучения программирования? Взять задачу, которую он отлично понимает как нужно решать без компьютера, после чего попытаться осознать, что же он (школьник) делает, решая данную задачу, и сформулировать это словами, а затем перевести этот алгоритм на язык машины и получить программу.

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

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

Роль отладчика

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

Пользоваться отладчиком не всегда просто. Но научить школьников им пользоваться очень важно. Часто школьнику значительно проще обратится к учителю с вопросом: «А где у меня ошибка?», и бывает, что учителю достаточно одного взгляда на программу, чтобы эту ошибку увидеть и указать на нее школьнику. Однако обучающий эффект будет значительно больше, если школьник найдет эту ошибку сам.

Система автоматической проверки

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

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

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

Это и есть автоматическая проверка решения. При этом система автоматической проверки – не универсальная программа, которая может проверять решение любой задачи. Эта программа, которая умеет «подсовывать» тесты (т.е. наборы входных данных), запускать решения, анализировать результат и, быть может, как-то вести протокол, и поддерживать таблицу результатов. Чтобы система могла проверять некоторую задачу, нужно, чтобы были подготовлены тесты специально для этой задачи.

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

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

Чему учатся школьники, изучая программирование

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